footprintjs 9.23.2 → 9.23.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/CLAUDE.md +2 -2
- package/dist/advanced.js +6 -3
- package/dist/esm/advanced.d.ts +1 -1
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
- package/dist/esm/lib/engine/handlers/ParallelForEachHandler.js +11 -2
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +16 -4
- package/dist/esm/lib/reactive/arrayTraps.js +7 -5
- package/dist/esm/lib/reactive/createTypedScope.js +17 -9
- package/dist/esm/lib/reactive/handles.d.ts +46 -0
- package/dist/esm/lib/reactive/handles.js +105 -0
- package/dist/esm/lib/reactive/index.d.ts +1 -0
- package/dist/esm/lib/reactive/index.js +2 -1
- package/dist/lib/engine/handlers/ParallelForEachHandler.js +11 -2
- package/dist/lib/engine/handlers/SubflowInputMapper.js +16 -4
- package/dist/lib/reactive/arrayTraps.js +7 -5
- package/dist/lib/reactive/createTypedScope.js +17 -9
- package/dist/lib/reactive/handles.js +112 -0
- package/dist/lib/reactive/index.js +6 -2
- package/dist/types/advanced.d.ts +1 -1
- package/dist/types/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
- package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
- package/dist/types/lib/reactive/handles.d.ts +46 -0
- package/dist/types/lib/reactive/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -19,14 +19,20 @@ exports.createTypedScope = void 0;
|
|
|
19
19
|
const pathOps_js_1 = require("../memory/pathOps.js");
|
|
20
20
|
const allowlist_js_1 = require("./allowlist.js");
|
|
21
21
|
const arrayTraps_js_1 = require("./arrayTraps.js");
|
|
22
|
+
const handles_js_1 = require("./handles.js");
|
|
22
23
|
const liveView_js_1 = require("./liveView.js");
|
|
23
24
|
const structuralWrite_js_1 = require("./structuralWrite.js");
|
|
24
25
|
const types_js_1 = require("./types.js");
|
|
25
26
|
const writeTraps_js_1 = require("./writeTraps.js");
|
|
26
27
|
const METHOD_ROUTES = {
|
|
27
28
|
$getValue: (t) => t.getValue.bind(t),
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
// A handle the scope handed out is a value it accepts back (handles.ts):
|
|
30
|
+
// `$setValue('copy', scope.customer)` stores the value behind the handle,
|
|
31
|
+
// not a Proxy the commit could never clone. The set trap has always done
|
|
32
|
+
// this for `scope.copy = scope.customer` (through `unwrapProxy`); these
|
|
33
|
+
// are the explicit doors. A handle-free value passes through by reference.
|
|
34
|
+
$setValue: (t) => (key, value, shouldRedact, description) => t.setValue(key, (0, handles_js_1.unwrapHandles)(value), shouldRedact, description),
|
|
35
|
+
$update: (t) => (key, value, description) => t.updateValue(key, (0, handles_js_1.unwrapHandles)(value), description),
|
|
30
36
|
$delete: (t) => t.deleteValue.bind(t),
|
|
31
37
|
$read: (t) => (dotPath) => {
|
|
32
38
|
const rootKey = dotPath.split('.')[0];
|
|
@@ -58,8 +64,10 @@ const METHOD_ROUTES = {
|
|
|
58
64
|
const clone = Array.isArray(current) ? structuredClone(current) : [];
|
|
59
65
|
// User applies all mutations to the plain clone — no Proxy, no per-mutation commit
|
|
60
66
|
fn(clone);
|
|
61
|
-
// One setValue — fires onWrite once with the final array
|
|
62
|
-
|
|
67
|
+
// One setValue — fires onWrite once with the final array. The stage may
|
|
68
|
+
// have pushed handles into the clone (`arr.push(scope.template)`) — they
|
|
69
|
+
// are values by the time the array is staged (handles.ts).
|
|
70
|
+
t.setValue(key, (0, handles_js_1.unwrapHandles)(clone));
|
|
63
71
|
},
|
|
64
72
|
$break: (_t, opts) => (reason) => {
|
|
65
73
|
if (!opts.breakFn)
|
|
@@ -131,12 +139,12 @@ function createTerminalProxy(obj, sink, segments, visited = new Set()) {
|
|
|
131
139
|
return value;
|
|
132
140
|
return createTerminalProxy(value, sink, path, visited);
|
|
133
141
|
};
|
|
134
|
-
return new Proxy(obj, {
|
|
142
|
+
return (0, handles_js_1.rememberHandle)(new Proxy(obj, {
|
|
135
143
|
get: (0, liveView_js_1.liveGetTrap)(live, segments, child, members),
|
|
136
144
|
set: (0, writeTraps_js_1.sinkSetTrap)(sink, segments),
|
|
137
145
|
deleteProperty: (0, writeTraps_js_1.sinkDeleteTrap)(sink, segments),
|
|
138
146
|
...(0, liveView_js_1.liveInspectionTraps)(live),
|
|
139
|
-
});
|
|
147
|
+
}), live);
|
|
140
148
|
}
|
|
141
149
|
function createNestedProxy(obj, sink, segments, ancestors = new Set()) {
|
|
142
150
|
// Reads are LIVE (9.22.0): a held proxy reads its own writes, `'x' in o`
|
|
@@ -155,12 +163,12 @@ function createNestedProxy(obj, sink, segments, ancestors = new Set()) {
|
|
|
155
163
|
return createTerminalProxy(value, sink, path);
|
|
156
164
|
return createNestedProxy(value, sink, path, new Set(ancestors).add(value));
|
|
157
165
|
};
|
|
158
|
-
return new Proxy(obj, {
|
|
166
|
+
return (0, handles_js_1.rememberHandle)(new Proxy(obj, {
|
|
159
167
|
get: (0, liveView_js_1.liveGetTrap)(live, segments, child, members),
|
|
160
168
|
set: (0, writeTraps_js_1.sinkSetTrap)(sink, segments),
|
|
161
169
|
deleteProperty: (0, writeTraps_js_1.sinkDeleteTrap)(sink, segments),
|
|
162
170
|
...(0, liveView_js_1.liveInspectionTraps)(live),
|
|
163
|
-
});
|
|
171
|
+
}), live);
|
|
164
172
|
}
|
|
165
173
|
// -- Top-level leaves ---------------------------------------------------------
|
|
166
174
|
/** `internalRead` answered nothing: the name is a state key and must be read (tracked) from the target. */
|
|
@@ -296,4 +304,4 @@ function createTypedScope(target, options) {
|
|
|
296
304
|
});
|
|
297
305
|
}
|
|
298
306
|
exports.createTypedScope = createTypedScope;
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILHFEQUE4RDtBQUM5RCxpREFBcUQ7QUFDckQsbURBQStDO0FBQy9DLCtDQUF3RztBQUN4Ryw2REFBbUQ7QUFFbkQseUNBQXlHO0FBQ3pHLG1EQUEyRjtBQU0zRixNQUFNLGFBQWEsR0FBaUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxPQUFPLElBQUEsc0JBQVMsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25DLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9CLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRCxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUQsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBNEIsRUFBRSxFQUFFO1FBQ2hFLG1DQUFtQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLHVFQUF1RTtRQUN2RSx5RUFBeUU7UUFDekUsa0VBQWtFO1FBQ2xFLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsb0VBQW9FO1FBQ3BFLHFFQUFxRTtRQUNyRSxNQUFNLEtBQUssR0FBYyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRixtRkFBbUY7UUFDbkYsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ1YseURBQXlEO1FBQ3pELENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCwwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLDJFQUEyRTtJQUMzRSwyQ0FBMkM7SUFDM0MsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0NBQ3ZCLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLDBEQUEwRDtBQUUxRCxNQUFNLFdBQVcsR0FBcUM7SUFDcEQsSUFBSSxFQUFFLFNBQVMsRUFBRSw0QkFBNEI7SUFDN0MsZUFBZSxFQUFFLFNBQVMsRUFBRSx3Q0FBd0M7SUFDcEUsV0FBVyxFQUFFLE1BQU0sRUFBRSxpQkFBaUI7SUFDdEMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsWUFBWTtDQUNuQyxDQUFDO0FBRUYsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE1BQXNCLEVBQUUsR0FBVztJQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQVVELGdGQUFnRjtBQUNoRixFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRiw0RUFBNEU7QUFDNUUsd0VBQXdFO0FBQ3hFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsbURBQW1EO0FBRW5ELFNBQVMsbUJBQW1CLENBQzFCLEdBQTRCLEVBQzVCLElBQWUsRUFDZixRQUEyQixFQUMzQixVQUF1QixJQUFJLEdBQUcsRUFBRTtJQUVoQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUkseUJBQVcsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUEsd0JBQVUsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYyxFQUFFLElBQWMsRUFBVyxFQUFFO1FBQ3hELElBQUksQ0FBQyxJQUFBLGtDQUFtQixFQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzlDLHVFQUF1RTtRQUN2RSwyRUFBMkU7UUFDM0UsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBQSw0QkFBWSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBZSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0MsT0FBTyxtQkFBbUIsQ0FBQyxLQUFnQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEYsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDcEIsR0FBRyxFQUFFLElBQUEseUJBQVcsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7UUFDaEQsR0FBRyxFQUFFLElBQUEsMkJBQVcsRUFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1FBQ2hDLGNBQWMsRUFBRSxJQUFBLDhCQUFjLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztRQUM5QyxHQUFHLElBQUEsaUNBQW1CLEVBQUMsSUFBSSxDQUFDO0tBQzdCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixHQUE0QixFQUM1QixJQUFlLEVBQ2YsUUFBMkIsRUFDM0IsWUFBeUIsSUFBSSxHQUFHLEVBQUU7SUFFbEMseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsTUFBTSxPQUFPLEdBQUcsSUFBSSx5QkFBVyxFQUFFLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBQSx3QkFBVSxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsSUFBYyxFQUFXLEVBQUU7UUFDeEQsSUFBSSxDQUFDLElBQUEsa0NBQW1CLEVBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUMsMEVBQTBFO1FBQzFFLHVEQUF1RDtRQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFBLDRCQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUM7WUFBRSxPQUFPLG1CQUFtQixDQUFDLEtBQWdDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdHLE9BQU8saUJBQWlCLENBQUMsS0FBZ0MsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUMsQ0FBQztJQUNGLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ3BCLEdBQUcsRUFBRSxJQUFBLHlCQUFXLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO1FBQ2hELEdBQUcsRUFBRSxJQUFBLDJCQUFXLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztRQUNoQyxjQUFjLEVBQUUsSUFBQSw4QkFBYyxFQUFDLElBQUksRUFBRSxRQUFRLENBQUM7UUFDOUMsR0FBRyxJQUFBLGlDQUFtQixFQUFDLElBQUksQ0FBQztLQUM3QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsZ0ZBQWdGO0FBRWhGLDJHQUEyRztBQUMzRyxNQUFNLFNBQVMsR0FBa0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsWUFBWSxDQUFDLE1BQXNCLEVBQUUsS0FBb0IsRUFBRSxJQUFxQjtJQUN2RixJQUFJLElBQUksS0FBSyx5QkFBYztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pDLElBQUksSUFBSSxLQUFLLHVCQUFZLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsRUFBYyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztZQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7WUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0RixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RGLElBQUksNkJBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlFLElBQUksb0NBQXlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQVEsTUFBYyxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3ZGLE9BQVEsTUFBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDcEYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGNBQWMsQ0FDckIsTUFBc0IsRUFDdEIsVUFBb0MsRUFDcEMsS0FBb0IsRUFDcEIsR0FBVyxFQUNYLEtBQWM7SUFFZCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDckYsSUFBSSxDQUFDLElBQUEsa0NBQW1CLEVBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxzQ0FBc0M7SUFDckYsT0FBTyxJQUFBLDBCQUFZLEVBQ2pCLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLEdBQUcsRUFDSCxLQUFLLEVBQ0wsR0FBRyxFQUFFO1FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBVyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFBLDRCQUFZLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8saUJBQWlCLENBQUMsS0FBZ0MsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRDtnRkFDZ0Y7QUFDaEYsU0FBUyxjQUFjLENBQUMsTUFBc0IsRUFBRSxLQUFvQixFQUFFLEdBQVcsRUFBRSxLQUFjO0lBQy9GLElBQUksNkJBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYix5QkFBeUIsR0FBRyxzR0FBc0csQ0FDbkksQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFBLGdDQUFXLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6QyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsbUhBQW1IO0FBQ25ILFNBQVMsUUFBUSxDQUFDLE1BQXNCLEVBQUUsR0FBVztJQUNuRCxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxDQUFDLFlBQVk7UUFBRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEUsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLGtEQUFrRDtBQUMvRixDQUFDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQVMsU0FBUyxDQUFDLE1BQXNCO0lBQ3ZDLElBQUksTUFBTSxDQUFDLFlBQVk7UUFBRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUF5QyxDQUFDO0lBQzFFLE9BQU8sUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQy9FLENBQUM7QUFFRCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQW1CLE1BQXNCLEVBQUUsT0FBeUI7SUFDbEcsTUFBTSxLQUFLLEdBQWtCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUkseUJBQVcsRUFBRSxFQUFFLENBQUM7SUFDaEcsMkZBQTJGO0lBQzNGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNFLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBa0MsRUFBRTtRQUNuRCxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUk7WUFDcEIsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxRQUFRLEtBQUssU0FBUztnQkFBRSxPQUFPLFFBQVEsQ0FBQztZQUM1Qyx1RUFBdUU7WUFDdkUsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBYyxDQUFDLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBQ0QsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSztZQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7Z0JBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSTtZQUMvQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDMUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUk7WUFDcEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO2dCQUFFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RixPQUFPLDZCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNoQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsSUFBSTtZQUN6QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSw2QkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsK0JBQStCO1lBQy9HLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdDQUF3QztRQUMzRyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWpDRCw0Q0FpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlL2NyZWF0ZVR5cGVkU2NvcGUgLS0gQ29yZSBQcm94eSBmYWN0b3J5IGZvciBUeXBlZFNjb3BlPFQ+LlxuICpcbiAqIFdyYXBzIGEgUmVhY3RpdmVUYXJnZXQgKFNjb3BlRmFjYWRlKSBpbiBhIFByb3h5IHRoYXQgcHJvdmlkZXM6XG4gKiAtIFR5cGVkIHByb3BlcnR5IGFjY2Vzczogc2NvcGUuY3JlZGl0VGllciAocmVhZCksIHNjb3BlLmNyZWRpdFRpZXIgPSAnQScgKHdyaXRlKVxuICogLSBEZWVwIHdyaXRlIGludGVyY2VwdGlvbjogc2NvcGUuY3VzdG9tZXIuYWRkcmVzcy56aXAgPSAnOTAyMTAnXG4gKiAtIEFycmF5IG11dGF0aW9uIGludGVyY2VwdGlvbjogc2NvcGUuaXRlbXMucHVzaCgnbmV3JylcbiAqIC0gJC1wcmVmaXhlZCBlc2NhcGUgaGF0Y2hlczogJGdldFZhbHVlLCAkc2V0VmFsdWUsICRyZWFkLCAkZ2V0QXJncywgZXRjLlxuICpcbiAqIFJlYWQgc2VtYW50aWNzOiB0b3AtbGV2ZWwgZ2V0IGNhbGxzIGdldFZhbHVlKCkgKGZpcmVzIG9uUmVhZCBPTkNFKS5cbiAqICAgTmVzdGVkIGdldCB0cmFwcyBuYXZpZ2F0ZSBpbi1tZW1vcnkgLS0gbm8gYWRkaXRpb25hbCBvblJlYWQuXG4gKlxuICogV3JpdGUgc2VtYW50aWNzOiB0b3AtbGV2ZWwgc2V0IGNhbGxzIHNldFZhbHVlKCkuIE5lc3RlZCBzZXQgY2FsbHNcbiAqICAgdXBkYXRlVmFsdWUoKSB3aXRoIGEgcGFydGlhbCBvYmplY3QgYnVpbHQgZnJvbSB0aGUgYWNjdW11bGF0ZWQgcGF0aC5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQgYXMgbG9kYXNoR2V0IH0gZnJvbSAnLi4vbWVtb3J5L3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGFycmF5UHJveHlBdCB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyBjYWNoZWRNZW1iZXIsIGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHsgdW53cmFwUHJveHkgfSBmcm9tICcuL3N0cnVjdHVyYWxXcml0ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0aXZlT3B0aW9ucywgUmVhY3RpdmVUYXJnZXQsIFR5cGVkU2NvcGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IEJSRUFLX1NFVFRFUiwgRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUywgSVNfVFlQRURfU0NPUEUsIFNDT1BFX01FVEhPRF9OQU1FUyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgdHlwZSBXcml0ZVNpbmssIHJvb3RLZXlTaW5rLCBzaW5rRGVsZXRlVHJhcCwgc2lua1NldFRyYXAgfSBmcm9tICcuL3dyaXRlVHJhcHMuanMnO1xuXG4vLyAtLSAkLW1ldGhvZCByb3V0aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgTWV0aG9kUm91dGVyID0gKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdHM6IFJlYWN0aXZlU3RhdGUpID0+IHVua25vd247XG5cbmNvbnN0IE1FVEhPRF9ST1VURVM6IFJlY29yZDxzdHJpbmcsIE1ldGhvZFJvdXRlcj4gPSB7XG4gICRnZXRWYWx1ZTogKHQpID0+IHQuZ2V0VmFsdWUuYmluZCh0KSxcbiAgJHNldFZhbHVlOiAodCkgPT4gdC5zZXRWYWx1ZS5iaW5kKHQpLFxuICAkdXBkYXRlOiAodCkgPT4gdC51cGRhdGVWYWx1ZS5iaW5kKHQpLFxuICAkZGVsZXRlOiAodCkgPT4gdC5kZWxldGVWYWx1ZS5iaW5kKHQpLFxuICAkcmVhZDogKHQpID0+IChkb3RQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb290S2V5ID0gZG90UGF0aC5zcGxpdCgnLicpWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdC5nZXRWYWx1ZShyb290S2V5KTtcbiAgICBpZiAoIWRvdFBhdGguaW5jbHVkZXMoJy4nKSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBsb2Rhc2hHZXQodmFsdWUsIGRvdFBhdGguc2xpY2Uocm9vdEtleS5sZW5ndGggKyAxKSk7XG4gIH0sXG4gICRnZXRBcmdzOiAodCkgPT4gdC5nZXRBcmdzLmJpbmQodCksXG4gICRnZXRFbnY6ICh0KSA9PiB0LmdldEVudi5iaW5kKHQpLFxuICAkZGVidWc6ICh0KSA9PiB0LmFkZERlYnVnSW5mby5iaW5kKHQpLFxuICAkbG9nOiAodCkgPT4gdC5hZGREZWJ1Z01lc3NhZ2UuYmluZCh0KSxcbiAgJGVycm9yOiAodCkgPT4gdC5hZGRFcnJvckluZm8uYmluZCh0KSxcbiAgJG1ldHJpYzogKHQpID0+IHQuYWRkTWV0cmljLmJpbmQodCksXG4gICRldmFsOiAodCkgPT4gdC5hZGRFdmFsLmJpbmQodCksXG4gICRhdHRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRnZXRTY29wZVJlY29yZGVyczogKHQpID0+IHQuZ2V0U2NvcGVSZWNvcmRlcnMuYmluZCh0KSxcbiAgJGJhdGNoQXJyYXk6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIGZuOiAoYXJyOiB1bmtub3duW10pID0+IHZvaWQpID0+IHtcbiAgICAvLyBPbmUgZ2V0VmFsdWUg4oCUIGZpcmVzIG9uUmVhZCBvbmNlXG4gICAgY29uc3QgY3VycmVudCA9IHQuZ2V0VmFsdWUoa2V5KTtcbiAgICAvLyBDbG9uZSBvbmNlIOKAlCBERUVQIChvciBzdGFydCBlbXB0eSBpZiBtaXNzaW5nL25vbi1hcnJheSkuIFRoZSByZWFkIGlzXG4gICAgLy8gQk9SUk9XRUQ6IGJlZm9yZSB0aGUgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgY29tbWl0dGVkIHNoYXJlZFxuICAgIC8vIG1lbW9yeSBpdHNlbGYsIHNvIGEgc2hhbGxvdyBgWy4uLmN1cnJlbnRdYCBoYW5kZWQgdGhlIHN0YWdlIHRoZVxuICAgIC8vIGNvbW1pdHRlZCBFTEVNRU5UUyBhbmQgYGFyclswXS5uID0gOWAgZWRpdGVkIGNvbW1pdHRlZCBzdGF0ZSBpbiBwbGFjZVxuICAgIC8vIHdpdGggbm8gdHJhY2Ugcm93IChhbmQgdGhlIGxhenkgYnVmZmVyJ3MgYmFzZSB3YXMgdGhlbiB0YWtlbiBBRlRFUiB0aGVcbiAgICAvLyBlZGl0LCBzbyB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgc2F3IG5vdGhpbmcpLiBTdGF0ZSB2YWx1ZXMgc3Vydml2ZVxuICAgIC8vIGBzdHJ1Y3R1cmVkQ2xvbmVgIGJ5IGNvbnRyYWN0LCBzbyB0aGUgd29ya2luZyBjb3B5IGlzIGEgZnVsbCBjb3B5LlxuICAgIGNvbnN0IGNsb25lOiB1bmtub3duW10gPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpID8gc3RydWN0dXJlZENsb25lKGN1cnJlbnQpIDogW107XG4gICAgLy8gVXNlciBhcHBsaWVzIGFsbCBtdXRhdGlvbnMgdG8gdGhlIHBsYWluIGNsb25lIOKAlCBubyBQcm94eSwgbm8gcGVyLW11dGF0aW9uIGNvbW1pdFxuICAgIGZuKGNsb25lKTtcbiAgICAvLyBPbmUgc2V0VmFsdWUg4oCUIGZpcmVzIG9uV3JpdGUgb25jZSB3aXRoIHRoZSBmaW5hbCBhcnJheVxuICAgIHQuc2V0VmFsdWUoa2V5LCBjbG9uZSk7XG4gIH0sXG4gICRicmVhazogKF90LCBvcHRzKSA9PiAocmVhc29uPzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFvcHRzLmJyZWFrRm4pIHRocm93IG5ldyBFcnJvcignJGJyZWFrKCkgaXMgbm90IGF2YWlsYWJsZSBvdXRzaWRlIHN0YWdlIGV4ZWN1dGlvbicpO1xuICAgIG9wdHMuYnJlYWtGbihyZWFzb24pO1xuICB9LFxuICAvLyBPYnNlcnZhYmlsaXR5IOKAlCBFbWl0IGNoYW5uZWwgKFBoYXNlIDMpLiBSb3V0ZXMgdG8gU2NvcGVGYWNhZGUuZW1pdEV2ZW50XG4gIC8vIHdoaWNoIGhhbmRsZXMgZmFzdC1wYXRoLCBlbnJpY2htZW50LCByZWRhY3Rpb24sIGFuZCBlcnJvciBpc29sYXRpb24uXG4gICRlbWl0OiAodCkgPT4gdC5lbWl0RXZlbnQuYmluZCh0KSxcbiAgLy8gRGV0YWNoIChUNCkg4oCUIGZpcmUtYW5kLWZvcmdldCBjaGlsZCBmbG93Y2hhcnRzLiBEZWxlZ2F0ZXMgdG8gU2NvcGVGYWNhZGVcbiAgLy8gd2hpY2ggbWludGVkIHJlZklkcyBmcm9tIHJ1bnRpbWVTdGFnZUlkLlxuICAkZGV0YWNoQW5kSm9pbkxhdGVyOiAodCkgPT4gdC5kZXRhY2hBbmRKb2luTGF0ZXIuYmluZCh0KSxcbiAgJGRldGFjaEFuZEZvcmdldDogKHQpID0+IHQuZGV0YWNoQW5kRm9yZ2V0LmJpbmQodCksXG4gICR0b1JhdzogKHQpID0+ICgpID0+IHQsXG59O1xuXG4vLyAtLSBHdWFyZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGVzZSBtdXN0IGJlIGhhbmRsZWQgdG8gcHJldmVudCBQcm94eSBmcm9tIGJlaW5nIHRyZWF0ZWQgYXMgYSBQcm9taXNlLFxuLy8gYnJlYWtpbmcgaW5zdGFuY2VvZiBjaGVja3MsIG9yIGNvbmZ1c2luZyB0ZXN0IG1hdGNoZXJzLlxuXG5jb25zdCBHVUFSRF9QUk9QUzogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4gPSB7XG4gIHRoZW46IHVuZGVmaW5lZCwgLy8gcHJldmVudCBQcm9taXNlIGRldGVjdGlvblxuICBhc3ltbWV0cmljTWF0Y2g6IHVuZGVmaW5lZCwgLy8gcHJldmVudCB2aXRlc3QvamVzdCBtYXRjaGVyIGNvbmZ1c2lvblxuICBjb25zdHJ1Y3RvcjogT2JqZWN0LCAvLyBzYWZlIHByb3RvdHlwZVxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogJ1R5cGVkU2NvcGUnLFxufTtcblxuLy8gLS0gU2lsZW50IGV4aXN0ZW5jZSBjaGVjayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIERvZXMgdGhpcyBrZXkgZXhpc3QgaW4gc3RhdGUsIGFuc3dlcmVkIHdpdGggTk8gdHJhY2tpbmcgc2lkZSBlZmZlY3QgYXQgYWxsP1xuICpcbiAqIGBnZXRTdGF0ZUtleXMoKWAgaXMgdGhlIG9ubHkgaW5zcGVjdGlvbiBhIFNjb3BlRmFjYWRlIGFuc3dlcnMgd2l0aG91dCByb3V0aW5nXG4gKiB0aHJvdWdoIHRoZSB0cmFja2VkIHJlYWQgcGF0aC4gYGhhc0tleSgpYCBkZWxpYmVyYXRlbHkgRE9FUyByb3V0ZSB0aHJvdWdoIGl0OlxuICogYCdrJyBpbiBzY29wZWAgaXMgYSByZWFsIHF1ZXN0aW9uIGFib3V0IHN0YXRlIHRoYXQgYSBzdGFnZSBjYW4gYnJhbmNoIG9uLCBzb1xuICogaXQgcmVnaXN0ZXJzIGFzIGEgcmVhZCDigJQgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhpcyBwcm9iZSBtdXN0IG5vdCB1c2UgaXQuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSB0YXJnZXQgb2ZmZXJzIG5vIHNpbGVudCBhbnN3ZXI7IGNhbGxlcnMgbXVzdFxuICogdGhlbiBjaG9vc2UgZGVsaWJlcmF0ZWx5IHJhdGhlciB0aGFuIGFzc3VtZS5cbiAqL1xuZnVuY3Rpb24gc2lsZW50bHlLbm93bktleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBpZiAoIXRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbn1cblxuLy8gLS0gTXV0YWJsZSBzdGF0ZSBwZXIgcHJveHkgaW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgUmVhY3RpdmVTdGF0ZSB7XG4gIGJyZWFrRm4/OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogVGhlIHRvcC1sZXZlbCBrZXkncyBjaGlsZCBwcm94eSwgdmFsaWRhdGVkIGJ5IHJhdyBpZGVudGl0eSAoYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApOyBhIHNpbmsgZHJvcHMgdGhlIGtleSBvbiB3cml0ZS4gKi9cbiAgY2hpbGRDYWNoZTogTWVtYmVyQ2FjaGU7XG59XG5cbi8vIC0tIE5lc3RlZCBjaGlsZCBwcm94aWVzIChmb3IgZGVlcCB3cml0ZSBpbnRlcmNlcHRpb24pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gQm90aCBmYWN0b3JpZXMgYXJlIE9SQ0hFU1RSQVRPUlMgKDkuMjMuMSk6IHJlYWRzIGFyZSBgbGl2ZVZpZXcudHNgLCB3cml0ZXNcbi8vIGFyZSBgd3JpdGVUcmFwcy50c2Agb3ZlciBhIGByb290S2V5U2lua2AsIGFuZCB0aGUgT05FIHRoaW5nIGVhY2ggZGVjaWRlc1xuLy8gaXRzZWxmIGlzIHdoYXQgYSBjaGlsZCBtZW1iZXIgYmVjb21lcyDigJQgdGhlIGN5Y2xlIHBvbGljeS4gRWFjaCBob2xkcyBpdHNcbi8vIG93biBwZXItbWVtYmVyIHByb3h5IGNhY2hlICg5LjIzLjIsIGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKS5cbi8vXG4vLyBDeWNsZSBzYWZldHk6IGFuIGltbXV0YWJsZSBTZXQ8b2JqZWN0PiBvZiBhbmNlc3RvciBvYmplY3RzIGlzIHBhc3NlZCBkb3duXG4vLyBlYWNoIGFjY2VzcyBjaGFpbi4gRWFjaCBicmFuY2ggZ2V0cyBpdHMgb3duIGNvcHkgKG5ldyBTZXQocGFyZW50KSkgc29cbi8vIHNjb3BlLnguZnJpZW5kIGFuZCBzY29wZS54LmNvd29ya2VyIGRvbid0IHBvbGx1dGUgZWFjaCBvdGhlcidzIHRyYWNraW5nLlxuLy8gV2hlbiBhIGNoaWxkIHZhbHVlIGlzIGFscmVhZHkgaW4gdGhlIGFuY2VzdG9yIHNldCwgd2UndmUgaGl0IGEgY3ljbGUuXG4vLyBBdCB0aGUgY3ljbGUgYnJlYWs6IHJldHVybiBhIHRlcm1pbmFsIHByb3h5IHRoYXQgdHJhY2tzIHdyaXRlcyAoc2V0IHRyYXBcbi8vIHN0aWxsIGJ1aWxkcyBwYXRoICsgY29tbWl0cyB0aHJvdWdoIHRoZSBzaW5rKSBidXQgZG9lc24ndCByZWN1cnNlIHJlYWRzXG4vLyBmdXJ0aGVyLiBUaGUgdGVybWluYWwgY2hhaW4gc2hhcmVzIE9ORSBtdXRhYmxlIGB2aXNpdGVkYCBzZXQ6IGEgdmFsdWUgc2VlblxuLy8gYW55d2hlcmUgcGFzdCB0aGUgY3ljbGUgZWRnZSBpcyBoYW5kZWQgYmFjayByYXcuXG5cbmZ1bmN0aW9uIGNyZWF0ZVRlcm1pbmFsUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICB2aXNpdGVkOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICB2aXNpdGVkLmFkZChvYmopO1xuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IHBhc3QgdGhlIGN5Y2xlIGVkZ2Ugc3RpbGwgZ2V0cyBjb3B5LW9uLXdyaXRlIGludGVyY2VwdGlvbiDigJRcbiAgICAvLyBpdCBjb21taXRzIGFzIGEgYHNldGAgb2YgdGhlIHJvb3Qga2V5LCB0aGUgc2FtZSBsYXcgYXMgdGhlIG5lc3RlZCBwcm94eS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgcGF0aCk7XG4gICAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gY3JlYXRlVGVybWluYWxQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCwgdmlzaXRlZCk7XG4gIH07XG4gIHJldHVybiBuZXcgUHJveHkob2JqLCB7XG4gICAgZ2V0OiBsaXZlR2V0VHJhcChsaXZlLCBzZWdtZW50cywgY2hpbGQsIG1lbWJlcnMpLFxuICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgLi4ubGl2ZUluc3BlY3Rpb25UcmFwcyhsaXZlKSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5lc3RlZFByb3h5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzaW5rOiBXcml0ZVNpbmssXG4gIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgYW5jZXN0b3JzOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICAvLyBSZWFkcyBhcmUgTElWRSAoOS4yMi4wKTogYSBoZWxkIHByb3h5IHJlYWRzIGl0cyBvd24gd3JpdGVzLCBgJ3gnIGluIG9gXG4gIC8vIGFuZCBgT2JqZWN0LmtleXMobylgIHNlZSB0aGVtLCBhbmQgYG8uYiA9IG8uYSAqIDEwYCB1c2VzIHRoZSBuZXcgYGFgLlxuICAvLyBUaGUgY2FwdHVyZWQgb2JqZWN0IGFuc3dlcnMgb25seSB3aGVuIHRoZSBwYXRoIGlzIGdvbmUg4oCUIHNlZSBsaXZlVmlldy50cy5cbiAgY29uc3QgbWVtYmVycyA9IG5ldyBNZW1iZXJDYWNoZSgpO1xuICBjb25zdCBsaXZlID0gKCkgPT4gbGl2ZU9iamVjdChvYmosIHNpbmsucmVhZEF0KHNlZ21lbnRzKSk7XG4gIGNvbnN0IGNoaWxkID0gKHZhbHVlOiB1bmtub3duLCBwYXRoOiBzdHJpbmdbXSk6IHVua25vd24gPT4ge1xuICAgIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAvLyBBbiBhcnJheSBjb21taXRzIGFzIGEgYHNldGAgb2YgdGhlIFJPT1QgS0VZIChyZWFjdGl2ZS9SRUFETUUubWQsIGxhdyAzKVxuICAgIC8vIOKAlCB0aGUgc2luaydzIHZlcmIsIHdoYXRldmVyIGRlcHRoIHRoZSBhcnJheSBzaXRzIGF0LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAoYW5jZXN0b3JzLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSByZXR1cm4gY3JlYXRlVGVybWluYWxQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCk7XG4gICAgcmV0dXJuIGNyZWF0ZU5lc3RlZFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCBuZXcgU2V0KGFuY2VzdG9ycykuYWRkKHZhbHVlIGFzIG9iamVjdCkpO1xuICB9O1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICBkZWxldGVQcm9wZXJ0eTogc2lua0RlbGV0ZVRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gIH0pO1xufVxuXG4vLyAtLSBUb3AtbGV2ZWwgbGVhdmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogYGludGVybmFsUmVhZGAgYW5zd2VyZWQgbm90aGluZzogdGhlIG5hbWUgaXMgYSBzdGF0ZSBrZXkgYW5kIG11c3QgYmUgcmVhZCAodHJhY2tlZCkgZnJvbSB0aGUgdGFyZ2V0LiAqL1xuY29uc3QgU1RBVEVfS0VZOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKCdzdGF0ZS1rZXknKTtcblxuLyoqXG4gKiBXSFk6IHRoZSBuYW1lcyB0aGUgc2NvcGUgYW5zd2VycyBJVFNFTEYg4oCUIGludGVybmFsIHN5bWJvbHMsIHRoZSBndWFyZFxuICogcHJvcGVydGllcywgTm9kZSdzIGluc3BlY3QgaG9vaywgdGhlIGAkYC1tZXRob2RzLCB0aGUgZXhlY3V0b3IncyBhbGxvd2xpc3RlZFxuICogcGFzcy10aHJvdWdocyAoYGF0dGFjaFNjb3BlUmVjb3JkZXJgLCBgbm90aWZ5U3RhZ2VTdGFydGAsIOKApiwgY2FsbGVkIGRpcmVjdGx5XG4gKiBvbiB0aGUgc2NvcGUpIGFuZCB0aGUgSlNPTiBwcm9iZSDigJQgbXVzdCBuZXZlciBiZWNvbWUgdHJhY2tlZCByZWFkcztcbiAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIHN0YXRlIGtleSBhbmQgaXMgbGVmdCB0byB0aGUgY2FsbGVyLlxuICpcbiAqIFRoZSBwcm9iZTogYEpTT04uc3RyaW5naWZ5YCBhc2tzIEVWRVJZIHZhbHVlIGZvciBhIGB0b0pTT05gIG1ldGhvZC4gVGhhdFxuICogcXVlc3Rpb24gY29tZXMgZnJvbSB0aGUgcnVudGltZSwgbm90IHRoZSBzdGFnZSBhdXRob3IsIHNvIGl0IG11c3Qgbm90IGVudGVyXG4gKiB0aGUgcmVhZCBzZXQuIEEgc3RhdGUga2V5IGxpdGVyYWxseSBjYWxsZWQgJ3RvSlNPTicgaXMgbGVnYWw6IHdoZW4gaXQgRVhJU1RTXG4gKiB0aGlzIGlzIGEgZ2VudWluZSByZWFkIGFuZCBzdGF5cyB0cmFja2VkLCBhbmQgd2hlbiB0aGUgdGFyZ2V0IGNhbm5vdCBhbnN3ZXJcbiAqIHNpbGVudGx5LCB0cnV0aCB3aW5zIG92ZXIgbm9pc2Ug4oCUIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxSZWFkKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgaWYgKHByb3AgPT09IElTX1RZUEVEX1NDT1BFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHByb3AgPT09IEJSRUFLX1NFVFRFUikge1xuICAgIHJldHVybiAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHN0YXRlLmJyZWFrRm4gPSBmbjtcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKSkgcmV0dXJuIEdVQVJEX1BST1BTW3Byb3BdO1xuICAgIGlmIChwcm9wID09PSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpKSByZXR1cm4gKCkgPT4gdGFyZ2V0LmdldFZhbHVlKCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKSkgcmV0dXJuIEdVQVJEX1BST1BTW3Byb3BdO1xuICBpZiAoU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIE1FVEhPRF9ST1VURVNbcHJvcF0/Lih0YXJnZXQsIHN0YXRlKTtcbiAgaWYgKEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMuaGFzKHByb3ApICYmIHR5cGVvZiAodGFyZ2V0IGFzIGFueSlbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdLmJpbmQodGFyZ2V0KTtcbiAgfVxuICBpZiAocHJvcCA9PT0gJ3RvSlNPTicgJiYgc2lsZW50bHlLbm93bktleSh0YXJnZXQsIHByb3ApID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFNUQVRFX0tFWTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwYWJsZSBzdGF0ZSB2YWx1ZSBiZWNvbWVzIHRoZSBhcnJheSBvciBuZXN0ZWQgcHJveHkgZm9yIGl0cyBrZXk7XG4gKiBhbnl0aGluZyBlbHNlIGlzIGhhbmRlZCBiYWNrIHJhdy4gYHNjb3BlLmsgPT09IHNjb3BlLmtgIGhvbGRzIHdpdGhpbiBhXG4gKiBzdGFnZSB0aHJvdWdoIHRoZSBzYW1lIHBlci1tZW1iZXIgY2FjaGUgZXZlcnkgb2JqZWN0IHByb3h5IHVzZXNcbiAqIChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk6IGEgd3JpdGUgdG8gdGhlIGtleSBkcm9wcyB0aGUgZW50cnkgKHRoZVxuICogc2luayBkb2VzIGl0KSwgYSBjb21taXQgc3dhcHMgdGhlIHZhbHVlIGFuZCB0aGUgcmVmIGNoZWNrIG1pc3NlcyDigJQgZWl0aGVyXG4gKiB3YXkgdGhlIG5leHQgcmVhZCBidWlsZHMgYSBmcmVzaCBwcm94eSBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBTdGF0ZVZhbHVlKFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7IC8vIERhdGUsIE1hcCwgY2xhc3MgaW5zdGFuY2UsIGZyb3plbiDigKZcbiAgcmV0dXJuIGNhY2hlZE1lbWJlcihcbiAgICBzdGF0ZS5jaGlsZENhY2hlLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gcm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCBrZXksIHN0YXRlLmNoaWxkQ2FjaGUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIFtdKTtcbiAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgW10sIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWVdKSk7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuLyoqIFdIWTogYSBgJGAtbmFtZSBjYW4gbmV2ZXIgYmUgYSBzdGF0ZSBrZXkg4oCUIHRoZSB3cml0ZSBpcyByZWZ1c2VkLCBub3Qgc2hhZG93ZWQ7IGV2ZXJ5IG90aGVyIGFzc2lnbm1lbnRcbiAqICBzdG9yZXMgdGhlIHVud3JhcHBlZCB2YWx1ZSAobGFuZG1pbmUgMSkgYW5kIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgcHJveHkuICovXG5mdW5jdGlvbiBhc3NpZ25TdGF0ZUtleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke2tleX1cIiAtLSBpdCBjb25mbGljdHMgd2l0aCBhIHJlc2VydmVkIFR5cGVkU2NvcGUgbWV0aG9kLiBSZW5hbWUgdGhlIHN0YXRlIGtleSB0byBhdm9pZCAkLXByZWZpeGVkIG5hbWVzLmAsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc2V0VmFsdWUoa2V5LCB1bndyYXBQcm94eSh2YWx1ZSkpO1xuICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShrZXkpO1xufVxuXG4vKiogRG9lcyB0aGUga2V5IGV4aXN0IOKAlCBhbnN3ZXJlZCB3aXRob3V0IGEgdHJhY2tlZCByZWFkIHdoZXJldmVyIHRoZSB0YXJnZXQgY2FuOyBgZ2V0VmFsdWVgIGlzIHRoZSBsYXN0IHJlc29ydC4gKi9cbmZ1bmN0aW9uIGtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0YXJnZXQuaGFzS2V5KSByZXR1cm4gdGFyZ2V0Lmhhc0tleShrZXkpO1xuICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xuICByZXR1cm4gdGFyZ2V0LmdldFZhbHVlKGtleSkgIT09IHVuZGVmaW5lZDsgLy8gZmFsbGJhY2s6IGZpcmVzIG9uUmVhZCAoYWNjZXB0YWJsZSBkZWdyYWRhdGlvbilcbn1cblxuLyoqIEV2ZXJ5IHN0YXRlIGtleSDigJQgc2lsZW50bHkgd2hlcmUgdGhlIHRhcmdldCBjYW4sIGVsc2UgZnJvbSBhIHdob2xlLXN0YXRlIHJlYWQuICovXG5mdW5jdGlvbiBzdGF0ZUtleXModGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCk6IHN0cmluZ1tdIHtcbiAgaWYgKHRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCk7XG4gIGNvbnN0IHNuYXBzaG90ID0gdGFyZ2V0LmdldFZhbHVlKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIHJldHVybiBzbmFwc2hvdCAmJiB0eXBlb2Ygc25hcHNob3QgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXMoc25hcHNob3QpIDogW107XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBwcm94eSAodGhlIG1haW4gVHlwZWRTY29wZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVHlwZWRTY29wZTxUPiBwcm94eSB3cmFwcGluZyBhIFJlYWN0aXZlVGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdW5kZXJseWluZyBzY29wZSAoU2NvcGVGYWNhZGUgb3IgYW55IFJlYWN0aXZlVGFyZ2V0KVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChicmVha1BpcGVsaW5lIGluamVjdGlvbilcbiAqIEByZXR1cm5zIEEgUHJveHkgd2l0aCB0eXBlZCBwcm9wZXJ0eSBhY2Nlc3MgYW5kICQtcHJlZml4ZWQgbWV0aG9kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZWRTY29wZTxUIGV4dGVuZHMgb2JqZWN0Pih0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRpb25zPzogUmVhY3RpdmVPcHRpb25zKTogVHlwZWRTY29wZTxUPiB7XG4gIGNvbnN0IHN0YXRlOiBSZWFjdGl2ZVN0YXRlID0geyBicmVha0ZuOiBvcHRpb25zPy5icmVha1BpcGVsaW5lLCBjaGlsZENhY2hlOiBuZXcgTWVtYmVyQ2FjaGUoKSB9O1xuICAvLyBCaW5kIHRoZSBzaWxlbnQgcmVhZCBvbmNlIOKAlCB0aGUgbmVzdGVkL2FycmF5IHByb3hpZXMgcmVzb2x2ZSB0aGVpciBsaXZlIHZpZXcgdGhyb3VnaCBpdC5cbiAgY29uc3QgcmVhZFNpbGVudCA9ICh0YXJnZXQuZ2V0VmFsdWVTaWxlbnQgPz8gdGFyZ2V0LmdldFZhbHVlKS5iaW5kKHRhcmdldCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQgYXMgdW5rbm93biBhcyBUeXBlZFNjb3BlPFQ+LCB7XG4gICAgZ2V0KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgY29uc3QgYW5zd2VyZWQgPSBpbnRlcm5hbFJlYWQodGFyZ2V0LCBzdGF0ZSwgcHJvcCk7XG4gICAgICBpZiAoYW5zd2VyZWQgIT09IFNUQVRFX0tFWSkgcmV0dXJuIGFuc3dlcmVkO1xuICAgICAgLy8gQSBzdGF0ZSBrZXk6IE9ORSB0cmFja2VkIHJlYWQgKGZpcmVzIG9uUmVhZCBvbmNlKSwgdGhlbiB0aGUgd3JhcHBlci5cbiAgICAgIHJldHVybiB3cmFwU3RhdGVWYWx1ZSh0YXJnZXQsIHJlYWRTaWxlbnQsIHN0YXRlLCBwcm9wIGFzIHN0cmluZywgdGFyZ2V0LmdldFZhbHVlKHByb3AgYXMgc3RyaW5nKSk7XG4gICAgfSxcbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykgYXNzaWduU3RhdGVLZXkodGFyZ2V0LCBzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyhfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApO1xuICAgICAgcmV0dXJuIFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkgfHwga25vd25LZXkodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IHN0YXRlS2V5cyh0YXJnZXQpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycgfHwgU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gJC1tZXRob2RzIGFyZSBub24tZW51bWVyYWJsZVxuICAgICAgaWYgKCFrbm93bktleSh0YXJnZXQsIHByb3ApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9OyAvLyB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILHFEQUE4RDtBQUM5RCxpREFBcUQ7QUFDckQsbURBQStDO0FBQy9DLDZDQUE2RDtBQUM3RCwrQ0FBd0c7QUFDeEcsNkRBQW1EO0FBRW5ELHlDQUF5RztBQUN6RyxtREFBMkY7QUFNM0YsTUFBTSxhQUFhLEdBQWlDO0lBQ2xELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSwyRUFBMkU7SUFDM0UsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsWUFBc0IsRUFBRSxXQUFvQixFQUFFLEVBQUUsQ0FDOUYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7SUFDbEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsV0FBb0IsRUFBRSxFQUFFLENBQ3BFLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUEsMEJBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDdkQsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxD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bnQiOlsiLyoqXG4gKiByZWFjdGl2ZS9jcmVhdGVUeXBlZFNjb3BlIC0tIENvcmUgUHJveHkgZmFjdG9yeSBmb3IgVHlwZWRTY29wZTxUPi5cbiAqXG4gKiBXcmFwcyBhIFJlYWN0aXZlVGFyZ2V0IChTY29wZUZhY2FkZSkgaW4gYSBQcm94eSB0aGF0IHByb3ZpZGVzOlxuICogLSBUeXBlZCBwcm9wZXJ0eSBhY2Nlc3M6IHNjb3BlLmNyZWRpdFRpZXIgKHJlYWQpLCBzY29wZS5jcmVkaXRUaWVyID0gJ0EnICh3cml0ZSlcbiAqIC0gRGVlcCB3cml0ZSBpbnRlcmNlcHRpb246IHNjb3BlLmN1c3RvbWVyLmFkZHJlc3MuemlwID0gJzkwMjEwJ1xuICogLSBBcnJheSBtdXRhdGlvbiBpbnRlcmNlcHRpb246IHNjb3BlLml0ZW1zLnB1c2goJ25ldycpXG4gKiAtICQtcHJlZml4ZWQgZXNjYXBlIGhhdGNoZXM6ICRnZXRWYWx1ZSwgJHNldFZhbHVlLCAkcmVhZCwgJGdldEFyZ3MsIGV0Yy5cbiAqXG4gKiBSZWFkIHNlbWFudGljczogdG9wLWxldmVsIGdldCBjYWxscyBnZXRWYWx1ZSgpIChmaXJlcyBvblJlYWQgT05DRSkuXG4gKiAgIE5lc3RlZCBnZXQgdHJhcHMgbmF2aWdhdGUgaW4tbWVtb3J5IC0tIG5vIGFkZGl0aW9uYWwgb25SZWFkLlxuICpcbiAqIFdyaXRlIHNlbWFudGljczogdG9wLWxldmVsIHNldCBjYWxscyBzZXRWYWx1ZSgpLiBOZXN0ZWQgc2V0IGNhbGxzXG4gKiAgIHVwZGF0ZVZhbHVlKCkgd2l0aCBhIHBhcnRpYWwgb2JqZWN0IGJ1aWx0IGZyb20gdGhlIGFjY3VtdWxhdGVkIHBhdGguXG4gKi9cblxuaW1wb3J0IHsgbmF0aXZlR2V0IGFzIGxvZGFzaEdldCB9IGZyb20gJy4uL21lbW9yeS9wYXRoT3BzLmpzJztcbmltcG9ydCB7IHNob3VsZFdyYXBXaXRoUHJveHkgfSBmcm9tICcuL2FsbG93bGlzdC5qcyc7XG5pbXBvcnQgeyBhcnJheVByb3h5QXQgfSBmcm9tICcuL2FycmF5VHJhcHMuanMnO1xuaW1wb3J0IHsgcmVtZW1iZXJIYW5kbGUsIHVud3JhcEhhbmRsZXMgfSBmcm9tICcuL2hhbmRsZXMuanMnO1xuaW1wb3J0IHsgY2FjaGVkTWVtYmVyLCBsaXZlR2V0VHJhcCwgbGl2ZUluc3BlY3Rpb25UcmFwcywgbGl2ZU9iamVjdCwgTWVtYmVyQ2FjaGUgfSBmcm9tICcuL2xpdmVWaWV3LmpzJztcbmltcG9ydCB7IHVud3JhcFByb3h5IH0gZnJvbSAnLi9zdHJ1Y3R1cmFsV3JpdGUuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZU9wdGlvbnMsIFJlYWN0aXZlVGFyZ2V0LCBUeXBlZFNjb3BlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBCUkVBS19TRVRURVIsIEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMsIElTX1RZUEVEX1NDT1BFLCBTQ09QRV9NRVRIT0RfTkFNRVMgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCByb290S2V5U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gIC8vIEEgaGFuZGxlIHRoZSBzY29wZSBoYW5kZWQgb3V0IGlzIGEgdmFsdWUgaXQgYWNjZXB0cyBiYWNrIChoYW5kbGVzLnRzKTpcbiAgLy8gYCRzZXRWYWx1ZSgnY29weScsIHNjb3BlLmN1c3RvbWVyKWAgc3RvcmVzIHRoZSB2YWx1ZSBiZWhpbmQgdGhlIGhhbmRsZSxcbiAgLy8gbm90IGEgUHJveHkgdGhlIGNvbW1pdCBjb3VsZCBuZXZlciBjbG9uZS4gVGhlIHNldCB0cmFwIGhhcyBhbHdheXMgZG9uZVxuICAvLyB0aGlzIGZvciBgc2NvcGUuY29weSA9IHNjb3BlLmN1c3RvbWVyYCAodGhyb3VnaCBgdW53cmFwUHJveHlgKTsgdGhlc2VcbiAgLy8gYXJlIHRoZSBleHBsaWNpdCBkb29ycy4gQSBoYW5kbGUtZnJlZSB2YWx1ZSBwYXNzZXMgdGhyb3VnaCBieSByZWZlcmVuY2UuXG4gICRzZXRWYWx1ZTogKHQpID0+IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PlxuICAgIHQuc2V0VmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSwgc2hvdWxkUmVkYWN0LCBkZXNjcmlwdGlvbiksXG4gICR1cGRhdGU6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZykgPT5cbiAgICB0LnVwZGF0ZVZhbHVlKGtleSwgdW53cmFwSGFuZGxlcyh2YWx1ZSksIGRlc2NyaXB0aW9uKSxcbiAgJGRlbGV0ZTogKHQpID0+IHQuZGVsZXRlVmFsdWUuYmluZCh0KSxcbiAgJHJlYWQ6ICh0KSA9PiAoZG90UGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdEtleSA9IGRvdFBhdGguc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCB2YWx1ZSA9IHQuZ2V0VmFsdWUocm9vdEtleSk7XG4gICAgaWYgKCFkb3RQYXRoLmluY2x1ZGVzKCcuJykpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gbG9kYXNoR2V0KHZhbHVlLCBkb3RQYXRoLnNsaWNlKHJvb3RLZXkubGVuZ3RoICsgMSkpO1xuICB9LFxuICAkZ2V0QXJnczogKHQpID0+IHQuZ2V0QXJncy5iaW5kKHQpLFxuICAkZ2V0RW52OiAodCkgPT4gdC5nZXRFbnYuYmluZCh0KSxcbiAgJGRlYnVnOiAodCkgPT4gdC5hZGREZWJ1Z0luZm8uYmluZCh0KSxcbiAgJGxvZzogKHQpID0+IHQuYWRkRGVidWdNZXNzYWdlLmJpbmQodCksXG4gICRlcnJvcjogKHQpID0+IHQuYWRkRXJyb3JJbmZvLmJpbmQodCksXG4gICRtZXRyaWM6ICh0KSA9PiB0LmFkZE1ldHJpYy5iaW5kKHQpLFxuICAkZXZhbDogKHQpID0+IHQuYWRkRXZhbC5iaW5kKHQpLFxuICAkYXR0YWNoU2NvcGVSZWNvcmRlcjogKHQpID0+IHQuYXR0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHQpLFxuICAkZGV0YWNoU2NvcGVSZWNvcmRlcjogKHQpID0+IHQuZGV0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHQpLFxuICAkZ2V0U2NvcGVSZWNvcmRlcnM6ICh0KSA9PiB0LmdldFNjb3BlUmVjb3JkZXJzLmJpbmQodCksXG4gICRiYXRjaEFycmF5OiAodCkgPT4gKGtleTogc3RyaW5nLCBmbjogKGFycjogdW5rbm93bltdKSA9PiB2b2lkKSA9PiB7XG4gICAgLy8gT25lIGdldFZhbHVlIOKAlCBmaXJlcyBvblJlYWQgb25jZVxuICAgIGNvbnN0IGN1cnJlbnQgPSB0LmdldFZhbHVlKGtleSk7XG4gICAgLy8gQ2xvbmUgb25jZSDigJQgREVFUCAob3Igc3RhcnQgZW1wdHkgaWYgbWlzc2luZy9ub24tYXJyYXkpLiBUaGUgcmVhZCBpc1xuICAgIC8vIEJPUlJPV0VEOiBiZWZvcmUgdGhlIHN0YWdlJ3MgZmlyc3Qgc3RhZ2VkIHdyaXRlIGl0IGlzIGNvbW1pdHRlZCBzaGFyZWRcbiAgICAvLyBtZW1vcnkgaXRzZWxmLCBzbyBhIHNoYWxsb3cgYFsuLi5jdXJyZW50XWAgaGFuZGVkIHRoZSBzdGFnZSB0aGVcbiAgICAvLyBjb21taXR0ZWQgRUxFTUVOVFMgYW5kIGBhcnJbMF0ubiA9IDlgIGVkaXRlZCBjb21taXR0ZWQgc3RhdGUgaW4gcGxhY2VcbiAgICAvLyB3aXRoIG5vIHRyYWNlIHJvdyAoYW5kIHRoZSBsYXp5IGJ1ZmZlcidzIGJhc2Ugd2FzIHRoZW4gdGFrZW4gQUZURVIgdGhlXG4gICAgLy8gZWRpdCwgc28gdGhlIG5ldC1jaGFuZ2UgZmlsdGVyIHNhdyBub3RoaW5nKS4gU3RhdGUgdmFsdWVzIHN1cnZpdmVcbiAgICAvLyBgc3RydWN0dXJlZENsb25lYCBieSBjb250cmFjdCwgc28gdGhlIHdvcmtpbmcgY29weSBpcyBhIGZ1bGwgY29weS5cbiAgICBjb25zdCBjbG9uZTogdW5rbm93bltdID0gQXJyYXkuaXNBcnJheShjdXJyZW50KSA/IHN0cnVjdHVyZWRDbG9uZShjdXJyZW50KSA6IFtdO1xuICAgIC8vIFVzZXIgYXBwbGllcyBhbGwgbXV0YXRpb25zIHRvIHRoZSBwbGFpbiBjbG9uZSDigJQgbm8gUHJveHksIG5vIHBlci1tdXRhdGlvbiBjb21taXRcbiAgICBmbihjbG9uZSk7XG4gICAgLy8gT25lIHNldFZhbHVlIOKAlCBmaXJlcyBvbldyaXRlIG9uY2Ugd2l0aCB0aGUgZmluYWwgYXJyYXkuIFRoZSBzdGFnZSBtYXlcbiAgICAvLyBoYXZlIHB1c2hlZCBoYW5kbGVzIGludG8gdGhlIGNsb25lIChgYXJyLnB1c2goc2NvcGUudGVtcGxhdGUpYCkg4oCUIHRoZXlcbiAgICAvLyBhcmUgdmFsdWVzIGJ5IHRoZSB0aW1lIHRoZSBhcnJheSBpcyBzdGFnZWQgKGhhbmRsZXMudHMpLlxuICAgIHQuc2V0VmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKGNsb25lKSk7XG4gIH0sXG4gICRicmVhazogKF90LCBvcHRzKSA9PiAocmVhc29uPzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFvcHRzLmJyZWFrRm4pIHRocm93IG5ldyBFcnJvcignJGJyZWFrKCkgaXMgbm90IGF2YWlsYWJsZSBvdXRzaWRlIHN0YWdlIGV4ZWN1dGlvbicpO1xuICAgIG9wdHMuYnJlYWtGbihyZWFzb24pO1xuICB9LFxuICAvLyBPYnNlcnZhYmlsaXR5IOKAlCBFbWl0IGNoYW5uZWwgKFBoYXNlIDMpLiBSb3V0ZXMgdG8gU2NvcGVGYWNhZGUuZW1pdEV2ZW50XG4gIC8vIHdoaWNoIGhhbmRsZXMgZmFzdC1wYXRoLCBlbnJpY2htZW50LCByZWRhY3Rpb24sIGFuZCBlcnJvciBpc29sYXRpb24uXG4gICRlbWl0OiAodCkgPT4gdC5lbWl0RXZlbnQuYmluZCh0KSxcbiAgLy8gRGV0YWNoIChUNCkg4oCUIGZpcmUtYW5kLWZvcmdldCBjaGlsZCBmbG93Y2hhcnRzLiBEZWxlZ2F0ZXMgdG8gU2NvcGVGYWNhZGVcbiAgLy8gd2hpY2ggbWludGVkIHJlZklkcyBmcm9tIHJ1bnRpbWVTdGFnZUlkLlxuICAkZGV0YWNoQW5kSm9pbkxhdGVyOiAodCkgPT4gdC5kZXRhY2hBbmRKb2luTGF0ZXIuYmluZCh0KSxcbiAgJGRldGFjaEFuZEZvcmdldDogKHQpID0+IHQuZGV0YWNoQW5kRm9yZ2V0LmJpbmQodCksXG4gICR0b1JhdzogKHQpID0+ICgpID0+IHQsXG59O1xuXG4vLyAtLSBHdWFyZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGVzZSBtdXN0IGJlIGhhbmRsZWQgdG8gcHJldmVudCBQcm94eSBmcm9tIGJlaW5nIHRyZWF0ZWQgYXMgYSBQcm9taXNlLFxuLy8gYnJlYWtpbmcgaW5zdGFuY2VvZiBjaGVja3MsIG9yIGNvbmZ1c2luZyB0ZXN0IG1hdGNoZXJzLlxuXG5jb25zdCBHVUFSRF9QUk9QUzogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4gPSB7XG4gIHRoZW46IHVuZGVmaW5lZCwgLy8gcHJldmVudCBQcm9taXNlIGRldGVjdGlvblxuICBhc3ltbWV0cmljTWF0Y2g6IHVuZGVmaW5lZCwgLy8gcHJldmVudCB2aXRlc3QvamVzdCBtYXRjaGVyIGNvbmZ1c2lvblxuICBjb25zdHJ1Y3RvcjogT2JqZWN0LCAvLyBzYWZlIHByb3RvdHlwZVxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogJ1R5cGVkU2NvcGUnLFxufTtcblxuLy8gLS0gU2lsZW50IGV4aXN0ZW5jZSBjaGVjayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIERvZXMgdGhpcyBrZXkgZXhpc3QgaW4gc3RhdGUsIGFuc3dlcmVkIHdpdGggTk8gdHJhY2tpbmcgc2lkZSBlZmZlY3QgYXQgYWxsP1xuICpcbiAqIGBnZXRTdGF0ZUtleXMoKWAgaXMgdGhlIG9ubHkgaW5zcGVjdGlvbiBhIFNjb3BlRmFjYWRlIGFuc3dlcnMgd2l0aG91dCByb3V0aW5nXG4gKiB0aHJvdWdoIHRoZSB0cmFja2VkIHJlYWQgcGF0aC4gYGhhc0tleSgpYCBkZWxpYmVyYXRlbHkgRE9FUyByb3V0ZSB0aHJvdWdoIGl0OlxuICogYCdrJyBpbiBzY29wZWAgaXMgYSByZWFsIHF1ZXN0aW9uIGFib3V0IHN0YXRlIHRoYXQgYSBzdGFnZSBjYW4gYnJhbmNoIG9uLCBzb1xuICogaXQgcmVnaXN0ZXJzIGFzIGEgcmVhZCDigJQgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhpcyBwcm9iZSBtdXN0IG5vdCB1c2UgaXQuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSB0YXJnZXQgb2ZmZXJzIG5vIHNpbGVudCBhbnN3ZXI7IGNhbGxlcnMgbXVzdFxuICogdGhlbiBjaG9vc2UgZGVsaWJlcmF0ZWx5IHJhdGhlciB0aGFuIGFzc3VtZS5cbiAqL1xuZnVuY3Rpb24gc2lsZW50bHlLbm93bktleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBpZiAoIXRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbn1cblxuLy8gLS0gTXV0YWJsZSBzdGF0ZSBwZXIgcHJveHkgaW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgUmVhY3RpdmVTdGF0ZSB7XG4gIGJyZWFrRm4/OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogVGhlIHRvcC1sZXZlbCBrZXkncyBjaGlsZCBwcm94eSwgdmFsaWRhdGVkIGJ5IHJhdyBpZGVudGl0eSAoYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApOyBhIHNpbmsgZHJvcHMgdGhlIGtleSBvbiB3cml0ZS4gKi9cbiAgY2hpbGRDYWNoZTogTWVtYmVyQ2FjaGU7XG59XG5cbi8vIC0tIE5lc3RlZCBjaGlsZCBwcm94aWVzIChmb3IgZGVlcCB3cml0ZSBpbnRlcmNlcHRpb24pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gQm90aCBmYWN0b3JpZXMgYXJlIE9SQ0hFU1RSQVRPUlMgKDkuMjMuMSk6IHJlYWRzIGFyZSBgbGl2ZVZpZXcudHNgLCB3cml0ZXNcbi8vIGFyZSBgd3JpdGVUcmFwcy50c2Agb3ZlciBhIGByb290S2V5U2lua2AsIGFuZCB0aGUgT05FIHRoaW5nIGVhY2ggZGVjaWRlc1xuLy8gaXRzZWxmIGlzIHdoYXQgYSBjaGlsZCBtZW1iZXIgYmVjb21lcyDigJQgdGhlIGN5Y2xlIHBvbGljeS4gRWFjaCBob2xkcyBpdHNcbi8vIG93biBwZXItbWVtYmVyIHByb3h5IGNhY2hlICg5LjIzLjIsIGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKS5cbi8vXG4vLyBDeWNsZSBzYWZldHk6IGFuIGltbXV0YWJsZSBTZXQ8b2JqZWN0PiBvZiBhbmNlc3RvciBvYmplY3RzIGlzIHBhc3NlZCBkb3duXG4vLyBlYWNoIGFjY2VzcyBjaGFpbi4gRWFjaCBicmFuY2ggZ2V0cyBpdHMgb3duIGNvcHkgKG5ldyBTZXQocGFyZW50KSkgc29cbi8vIHNjb3BlLnguZnJpZW5kIGFuZCBzY29wZS54LmNvd29ya2VyIGRvbid0IHBvbGx1dGUgZWFjaCBvdGhlcidzIHRyYWNraW5nLlxuLy8gV2hlbiBhIGNoaWxkIHZhbHVlIGlzIGFscmVhZHkgaW4gdGhlIGFuY2VzdG9yIHNldCwgd2UndmUgaGl0IGEgY3ljbGUuXG4vLyBBdCB0aGUgY3ljbGUgYnJlYWs6IHJldHVybiBhIHRlcm1pbmFsIHByb3h5IHRoYXQgdHJhY2tzIHdyaXRlcyAoc2V0IHRyYXBcbi8vIHN0aWxsIGJ1aWxkcyBwYXRoICsgY29tbWl0cyB0aHJvdWdoIHRoZSBzaW5rKSBidXQgZG9lc24ndCByZWN1cnNlIHJlYWRzXG4vLyBmdXJ0aGVyLiBUaGUgdGVybWluYWwgY2hhaW4gc2hhcmVzIE9ORSBtdXRhYmxlIGB2aXNpdGVkYCBzZXQ6IGEgdmFsdWUgc2VlblxuLy8gYW55d2hlcmUgcGFzdCB0aGUgY3ljbGUgZWRnZSBpcyBoYW5kZWQgYmFjayByYXcuXG5cbmZ1bmN0aW9uIGNyZWF0ZVRlcm1pbmFsUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICB2aXNpdGVkOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICB2aXNpdGVkLmFkZChvYmopO1xuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IHBhc3QgdGhlIGN5Y2xlIGVkZ2Ugc3RpbGwgZ2V0cyBjb3B5LW9uLXdyaXRlIGludGVyY2VwdGlvbiDigJRcbiAgICAvLyBpdCBjb21taXRzIGFzIGEgYHNldGAgb2YgdGhlIHJvb3Qga2V5LCB0aGUgc2FtZSBsYXcgYXMgdGhlIG5lc3RlZCBwcm94eS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgcGF0aCk7XG4gICAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gY3JlYXRlVGVybWluYWxQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCwgdmlzaXRlZCk7XG4gIH07XG4gIHJldHVybiByZW1lbWJlckhhbmRsZShcbiAgICBuZXcgUHJveHkob2JqLCB7XG4gICAgICBnZXQ6IGxpdmVHZXRUcmFwKGxpdmUsIHNlZ21lbnRzLCBjaGlsZCwgbWVtYmVycyksXG4gICAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICAuLi5saXZlSW5zcGVjdGlvblRyYXBzKGxpdmUpLFxuICAgIH0pLFxuICAgIGxpdmUsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5lc3RlZFByb3h5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzaW5rOiBXcml0ZVNpbmssXG4gIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgYW5jZXN0b3JzOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICAvLyBSZWFkcyBhcmUgTElWRSAoOS4yMi4wKTogYSBoZWxkIHByb3h5IHJlYWRzIGl0cyBvd24gd3JpdGVzLCBgJ3gnIGluIG9gXG4gIC8vIGFuZCBgT2JqZWN0LmtleXMobylgIHNlZSB0aGVtLCBhbmQgYG8uYiA9IG8uYSAqIDEwYCB1c2VzIHRoZSBuZXcgYGFgLlxuICAvLyBUaGUgY2FwdHVyZWQgb2JqZWN0IGFuc3dlcnMgb25seSB3aGVuIHRoZSBwYXRoIGlzIGdvbmUg4oCUIHNlZSBsaXZlVmlldy50cy5cbiAgY29uc3QgbWVtYmVycyA9IG5ldyBNZW1iZXJDYWNoZSgpO1xuICBjb25zdCBsaXZlID0gKCkgPT4gbGl2ZU9iamVjdChvYmosIHNpbmsucmVhZEF0KHNlZ21lbnRzKSk7XG4gIGNvbnN0IGNoaWxkID0gKHZhbHVlOiB1bmtub3duLCBwYXRoOiBzdHJpbmdbXSk6IHVua25vd24gPT4ge1xuICAgIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAvLyBBbiBhcnJheSBjb21taXRzIGFzIGEgYHNldGAgb2YgdGhlIFJPT1QgS0VZIChyZWFjdGl2ZS9SRUFETUUubWQsIGxhdyAzKVxuICAgIC8vIOKAlCB0aGUgc2luaydzIHZlcmIsIHdoYXRldmVyIGRlcHRoIHRoZSBhcnJheSBzaXRzIGF0LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAoYW5jZXN0b3JzLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSByZXR1cm4gY3JlYXRlVGVybWluYWxQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCk7XG4gICAgcmV0dXJuIGNyZWF0ZU5lc3RlZFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCBuZXcgU2V0KGFuY2VzdG9ycykuYWRkKHZhbHVlIGFzIG9iamVjdCkpO1xuICB9O1xuICByZXR1cm4gcmVtZW1iZXJIYW5kbGUoXG4gICAgbmV3IFByb3h5KG9iaiwge1xuICAgICAgZ2V0OiBsaXZlR2V0VHJhcChsaXZlLCBzZWdtZW50cywgY2hpbGQsIG1lbWJlcnMpLFxuICAgICAgc2V0OiBzaW5rU2V0VHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICBkZWxldGVQcm9wZXJ0eTogc2lua0RlbGV0ZVRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgLi4ubGl2ZUluc3BlY3Rpb25UcmFwcyhsaXZlKSxcbiAgICB9KSxcbiAgICBsaXZlLFxuICApO1xufVxuXG4vLyAtLSBUb3AtbGV2ZWwgbGVhdmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogYGludGVybmFsUmVhZGAgYW5zd2VyZWQgbm90aGluZzogdGhlIG5hbWUgaXMgYSBzdGF0ZSBrZXkgYW5kIG11c3QgYmUgcmVhZCAodHJhY2tlZCkgZnJvbSB0aGUgdGFyZ2V0LiAqL1xuY29uc3QgU1RBVEVfS0VZOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKCdzdGF0ZS1rZXknKTtcblxuLyoqXG4gKiBXSFk6IHRoZSBuYW1lcyB0aGUgc2NvcGUgYW5zd2VycyBJVFNFTEYg4oCUIGludGVybmFsIHN5bWJvbHMsIHRoZSBndWFyZFxuICogcHJvcGVydGllcywgTm9kZSdzIGluc3BlY3QgaG9vaywgdGhlIGAkYC1tZXRob2RzLCB0aGUgZXhlY3V0b3IncyBhbGxvd2xpc3RlZFxuICogcGFzcy10aHJvdWdocyAoYGF0dGFjaFNjb3BlUmVjb3JkZXJgLCBgbm90aWZ5U3RhZ2VTdGFydGAsIOKApiwgY2FsbGVkIGRpcmVjdGx5XG4gKiBvbiB0aGUgc2NvcGUpIGFuZCB0aGUgSlNPTiBwcm9iZSDigJQgbXVzdCBuZXZlciBiZWNvbWUgdHJhY2tlZCByZWFkcztcbiAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIHN0YXRlIGtleSBhbmQgaXMgbGVmdCB0byB0aGUgY2FsbGVyLlxuICpcbiAqIFRoZSBwcm9iZTogYEpTT04uc3RyaW5naWZ5YCBhc2tzIEVWRVJZIHZhbHVlIGZvciBhIGB0b0pTT05gIG1ldGhvZC4gVGhhdFxuICogcXVlc3Rpb24gY29tZXMgZnJvbSB0aGUgcnVudGltZSwgbm90IHRoZSBzdGFnZSBhdXRob3IsIHNvIGl0IG11c3Qgbm90IGVudGVyXG4gKiB0aGUgcmVhZCBzZXQuIEEgc3RhdGUga2V5IGxpdGVyYWxseSBjYWxsZWQgJ3RvSlNPTicgaXMgbGVnYWw6IHdoZW4gaXQgRVhJU1RTXG4gKiB0aGlzIGlzIGEgZ2VudWluZSByZWFkIGFuZCBzdGF5cyB0cmFja2VkLCBhbmQgd2hlbiB0aGUgdGFyZ2V0IGNhbm5vdCBhbnN3ZXJcbiAqIHNpbGVudGx5LCB0cnV0aCB3aW5zIG92ZXIgbm9pc2Ug4oCUIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxSZWFkKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgaWYgKHByb3AgPT09IElTX1RZUEVEX1NDT1BFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHByb3AgPT09IEJSRUFLX1NFVFRFUikge1xuICAgIHJldHVybiAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHN0YXRlLmJyZWFrRm4gPSBmbjtcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKSkgcmV0dXJuIEdVQVJEX1BST1BTW3Byb3BdO1xuICAgIGlmIChwcm9wID09PSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpKSByZXR1cm4gKCkgPT4gdGFyZ2V0LmdldFZhbHVlKCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKSkgcmV0dXJuIEdVQVJEX1BST1BTW3Byb3BdO1xuICBpZiAoU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIE1FVEhPRF9ST1VURVNbcHJvcF0/Lih0YXJnZXQsIHN0YXRlKTtcbiAgaWYgKEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMuaGFzKHByb3ApICYmIHR5cGVvZiAodGFyZ2V0IGFzIGFueSlbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdLmJpbmQodGFyZ2V0KTtcbiAgfVxuICBpZiAocHJvcCA9PT0gJ3RvSlNPTicgJiYgc2lsZW50bHlLbm93bktleSh0YXJnZXQsIHByb3ApID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFNUQVRFX0tFWTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwYWJsZSBzdGF0ZSB2YWx1ZSBiZWNvbWVzIHRoZSBhcnJheSBvciBuZXN0ZWQgcHJveHkgZm9yIGl0cyBrZXk7XG4gKiBhbnl0aGluZyBlbHNlIGlzIGhhbmRlZCBiYWNrIHJhdy4gYHNjb3BlLmsgPT09IHNjb3BlLmtgIGhvbGRzIHdpdGhpbiBhXG4gKiBzdGFnZSB0aHJvdWdoIHRoZSBzYW1lIHBlci1tZW1iZXIgY2FjaGUgZXZlcnkgb2JqZWN0IHByb3h5IHVzZXNcbiAqIChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk6IGEgd3JpdGUgdG8gdGhlIGtleSBkcm9wcyB0aGUgZW50cnkgKHRoZVxuICogc2luayBkb2VzIGl0KSwgYSBjb21taXQgc3dhcHMgdGhlIHZhbHVlIGFuZCB0aGUgcmVmIGNoZWNrIG1pc3NlcyDigJQgZWl0aGVyXG4gKiB3YXkgdGhlIG5leHQgcmVhZCBidWlsZHMgYSBmcmVzaCBwcm94eSBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBTdGF0ZVZhbHVlKFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7IC8vIERhdGUsIE1hcCwgY2xhc3MgaW5zdGFuY2UsIGZyb3plbiDigKZcbiAgcmV0dXJuIGNhY2hlZE1lbWJlcihcbiAgICBzdGF0ZS5jaGlsZENhY2hlLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gcm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCBrZXksIHN0YXRlLmNoaWxkQ2FjaGUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIFtdKTtcbiAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgW10sIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWVdKSk7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuLyoqIFdIWTogYSBgJGAtbmFtZSBjYW4gbmV2ZXIgYmUgYSBzdGF0ZSBrZXkg4oCUIHRoZSB3cml0ZSBpcyByZWZ1c2VkLCBub3Qgc2hhZG93ZWQ7IGV2ZXJ5IG90aGVyIGFzc2lnbm1lbnRcbiAqICBzdG9yZXMgdGhlIHVud3JhcHBlZCB2YWx1ZSAobGFuZG1pbmUgMSkgYW5kIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgcHJveHkuICovXG5mdW5jdGlvbiBhc3NpZ25TdGF0ZUtleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke2tleX1cIiAtLSBpdCBjb25mbGljdHMgd2l0aCBhIHJlc2VydmVkIFR5cGVkU2NvcGUgbWV0aG9kLiBSZW5hbWUgdGhlIHN0YXRlIGtleSB0byBhdm9pZCAkLXByZWZpeGVkIG5hbWVzLmAsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc2V0VmFsdWUoa2V5LCB1bndyYXBQcm94eSh2YWx1ZSkpO1xuICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShrZXkpO1xufVxuXG4vKiogRG9lcyB0aGUga2V5IGV4aXN0IOKAlCBhbnN3ZXJlZCB3aXRob3V0IGEgdHJhY2tlZCByZWFkIHdoZXJldmVyIHRoZSB0YXJnZXQgY2FuOyBgZ2V0VmFsdWVgIGlzIHRoZSBsYXN0IHJlc29ydC4gKi9cbmZ1bmN0aW9uIGtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0YXJnZXQuaGFzS2V5KSByZXR1cm4gdGFyZ2V0Lmhhc0tleShrZXkpO1xuICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xuICByZXR1cm4gdGFyZ2V0LmdldFZhbHVlKGtleSkgIT09IHVuZGVmaW5lZDsgLy8gZmFsbGJhY2s6IGZpcmVzIG9uUmVhZCAoYWNjZXB0YWJsZSBkZWdyYWRhdGlvbilcbn1cblxuLyoqIEV2ZXJ5IHN0YXRlIGtleSDigJQgc2lsZW50bHkgd2hlcmUgdGhlIHRhcmdldCBjYW4sIGVsc2UgZnJvbSBhIHdob2xlLXN0YXRlIHJlYWQuICovXG5mdW5jdGlvbiBzdGF0ZUtleXModGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCk6IHN0cmluZ1tdIHtcbiAgaWYgKHRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCk7XG4gIGNvbnN0IHNuYXBzaG90ID0gdGFyZ2V0LmdldFZhbHVlKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIHJldHVybiBzbmFwc2hvdCAmJiB0eXBlb2Ygc25hcHNob3QgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXMoc25hcHNob3QpIDogW107XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBwcm94eSAodGhlIG1haW4gVHlwZWRTY29wZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVHlwZWRTY29wZTxUPiBwcm94eSB3cmFwcGluZyBhIFJlYWN0aXZlVGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdW5kZXJseWluZyBzY29wZSAoU2NvcGVGYWNhZGUgb3IgYW55IFJlYWN0aXZlVGFyZ2V0KVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChicmVha1BpcGVsaW5lIGluamVjdGlvbilcbiAqIEByZXR1cm5zIEEgUHJveHkgd2l0aCB0eXBlZCBwcm9wZXJ0eSBhY2Nlc3MgYW5kICQtcHJlZml4ZWQgbWV0aG9kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZWRTY29wZTxUIGV4dGVuZHMgb2JqZWN0Pih0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRpb25zPzogUmVhY3RpdmVPcHRpb25zKTogVHlwZWRTY29wZTxUPiB7XG4gIGNvbnN0IHN0YXRlOiBSZWFjdGl2ZVN0YXRlID0geyBicmVha0ZuOiBvcHRpb25zPy5icmVha1BpcGVsaW5lLCBjaGlsZENhY2hlOiBuZXcgTWVtYmVyQ2FjaGUoKSB9O1xuICAvLyBCaW5kIHRoZSBzaWxlbnQgcmVhZCBvbmNlIOKAlCB0aGUgbmVzdGVkL2FycmF5IHByb3hpZXMgcmVzb2x2ZSB0aGVpciBsaXZlIHZpZXcgdGhyb3VnaCBpdC5cbiAgY29uc3QgcmVhZFNpbGVudCA9ICh0YXJnZXQuZ2V0VmFsdWVTaWxlbnQgPz8gdGFyZ2V0LmdldFZhbHVlKS5iaW5kKHRhcmdldCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQgYXMgdW5rbm93biBhcyBUeXBlZFNjb3BlPFQ+LCB7XG4gICAgZ2V0KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgY29uc3QgYW5zd2VyZWQgPSBpbnRlcm5hbFJlYWQodGFyZ2V0LCBzdGF0ZSwgcHJvcCk7XG4gICAgICBpZiAoYW5zd2VyZWQgIT09IFNUQVRFX0tFWSkgcmV0dXJuIGFuc3dlcmVkO1xuICAgICAgLy8gQSBzdGF0ZSBrZXk6IE9ORSB0cmFja2VkIHJlYWQgKGZpcmVzIG9uUmVhZCBvbmNlKSwgdGhlbiB0aGUgd3JhcHBlci5cbiAgICAgIHJldHVybiB3cmFwU3RhdGVWYWx1ZSh0YXJnZXQsIHJlYWRTaWxlbnQsIHN0YXRlLCBwcm9wIGFzIHN0cmluZywgdGFyZ2V0LmdldFZhbHVlKHByb3AgYXMgc3RyaW5nKSk7XG4gICAgfSxcbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykgYXNzaWduU3RhdGVLZXkodGFyZ2V0LCBzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyhfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApO1xuICAgICAgcmV0dXJuIFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkgfHwga25vd25LZXkodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IHN0YXRlS2V5cyh0YXJnZXQpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycgfHwgU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gJC1tZXRob2RzIGFyZSBub24tZW51bWVyYWJsZVxuICAgICAgaWYgKCFrbm93bktleSh0YXJnZXQsIHByb3ApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9OyAvLyB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* reactive/handles — which objects are the scope's HANDLES, and the value
|
|
4
|
+
* behind each.
|
|
5
|
+
*
|
|
6
|
+
* Every object the typed scope hands back is a Proxy bound to its stage
|
|
7
|
+
* (reactive/README.md, "A handle is bound to its stage"): inside the stage
|
|
8
|
+
* that is what makes a deep write commit and a held read stay live. A handle
|
|
9
|
+
* can also TRAVEL out of the stage in the library's own hands — an
|
|
10
|
+
* `addParallelForEach` items selector returns the array handle and its
|
|
11
|
+
* elements become the generated branch inputs; a subflow `inputMapper` or
|
|
12
|
+
* `outputMapper` hands one on; `$setValue('copy', scope.customer)` hands one
|
|
13
|
+
* back. Wherever the engine RECORDS a value it clones it (`structuredClone`,
|
|
14
|
+
* at commit since 9.23.0), and a Proxy cannot be cloned: `DataCloneError`,
|
|
15
|
+
* the stage's writes lost. 9.22.0–9.23.2 lost every child of a fan-out over
|
|
16
|
+
* object items that way (9.23.3).
|
|
17
|
+
*
|
|
18
|
+
* LAW: a handle the scope handed out is a value the engine accepts back.
|
|
19
|
+
* Each proxy factory registers its handle here with the same live reader its
|
|
20
|
+
* get trap uses, so the value behind a handle is what a read of it would
|
|
21
|
+
* return NOW — and the engine asks {@link unwrapHandles} at every boundary
|
|
22
|
+
* where app code hands it a value to record. O(1) for a handle (a WeakMap
|
|
23
|
+
* lookup, no walk, no JSON round-trip: a `Date` stays a `Date`); a walk only
|
|
24
|
+
* for a plain container the app built around handles, copy-on-write so a
|
|
25
|
+
* handle-free value comes back as the SAME reference.
|
|
26
|
+
*
|
|
27
|
+
* The value behind a handle is BORROWED — the same reference a read hands
|
|
28
|
+
* back, cloned by the buffer at commit. Never mutate it (the reads law).
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.unwrapHandles = exports.valueBehind = exports.isHandle = exports.rememberHandle = void 0;
|
|
32
|
+
/** Every handle the four proxy factories built, mapped to its live reader. */
|
|
33
|
+
const LIVE = new WeakMap();
|
|
34
|
+
/** Register `handle` as a scope handle whose current value `live` returns. Returns the handle. */
|
|
35
|
+
function rememberHandle(handle, live) {
|
|
36
|
+
LIVE.set(handle, live);
|
|
37
|
+
return handle;
|
|
38
|
+
}
|
|
39
|
+
exports.rememberHandle = rememberHandle;
|
|
40
|
+
/** Is `value` a handle the scope handed out? */
|
|
41
|
+
function isHandle(value) {
|
|
42
|
+
return value !== null && typeof value === 'object' && LIVE.has(value);
|
|
43
|
+
}
|
|
44
|
+
exports.isHandle = isHandle;
|
|
45
|
+
/** The live value behind a handle; `value` itself when it is not one. O(1). */
|
|
46
|
+
function valueBehind(value) {
|
|
47
|
+
if (value === null || typeof value !== 'object')
|
|
48
|
+
return value;
|
|
49
|
+
const live = LIVE.get(value);
|
|
50
|
+
return live === undefined ? value : live();
|
|
51
|
+
}
|
|
52
|
+
exports.valueBehind = valueBehind;
|
|
53
|
+
/** A plain object or array — the only containers the walk enters (a `Date`, `Map` or class instance is a leaf). */
|
|
54
|
+
function isPlainContainer(value) {
|
|
55
|
+
if (value === null || typeof value !== 'object')
|
|
56
|
+
return false;
|
|
57
|
+
if (Array.isArray(value))
|
|
58
|
+
return true;
|
|
59
|
+
const proto = Object.getPrototypeOf(value);
|
|
60
|
+
return proto === Object.prototype || proto === null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* `value` with every handle inside it replaced by the value behind it.
|
|
64
|
+
*
|
|
65
|
+
* A handle is replaced in O(1) and NOT entered (the state behind it holds no
|
|
66
|
+
* handles — they are built on read, never stored). A plain container is
|
|
67
|
+
* walked and copied ONLY when something inside it changed, so a handle-free
|
|
68
|
+
* value is returned as the same reference and a hand-built `{ item, index }`
|
|
69
|
+
* around one handle costs one object. Anything else (a `Date`, a `Map`, a
|
|
70
|
+
* class instance, a primitive) is a leaf. A cycle among plain containers is
|
|
71
|
+
* left as it is — `structuredClone` handles cycles; only a Proxy stops it.
|
|
72
|
+
*/
|
|
73
|
+
function unwrapHandles(value) {
|
|
74
|
+
return walk(value, new Set());
|
|
75
|
+
}
|
|
76
|
+
exports.unwrapHandles = unwrapHandles;
|
|
77
|
+
function walk(value, onPath) {
|
|
78
|
+
if (value === null || typeof value !== 'object')
|
|
79
|
+
return value;
|
|
80
|
+
const live = LIVE.get(value);
|
|
81
|
+
if (live !== undefined)
|
|
82
|
+
return live();
|
|
83
|
+
if (!isPlainContainer(value) || onPath.has(value))
|
|
84
|
+
return value;
|
|
85
|
+
onPath.add(value);
|
|
86
|
+
const out = Array.isArray(value) ? walkArray(value, onPath) : walkObject(value, onPath);
|
|
87
|
+
onPath.delete(value);
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
function walkArray(value, onPath) {
|
|
91
|
+
let copy;
|
|
92
|
+
for (let i = 0; i < value.length; i++) {
|
|
93
|
+
const next = walk(value[i], onPath);
|
|
94
|
+
if (next === value[i])
|
|
95
|
+
continue;
|
|
96
|
+
copy ??= [...value];
|
|
97
|
+
copy[i] = next;
|
|
98
|
+
}
|
|
99
|
+
return copy ?? value;
|
|
100
|
+
}
|
|
101
|
+
function walkObject(value, onPath) {
|
|
102
|
+
let copy;
|
|
103
|
+
for (const key of Object.keys(value)) {
|
|
104
|
+
const next = walk(value[key], onPath);
|
|
105
|
+
if (next === value[key])
|
|
106
|
+
continue;
|
|
107
|
+
copy ??= { ...value };
|
|
108
|
+
copy[key] = next;
|
|
109
|
+
}
|
|
110
|
+
return copy ?? value;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvaGFuZGxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRzs7O0FBRUgsOEVBQThFO0FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO0FBRWxELGtHQUFrRztBQUNsRyxTQUFnQixjQUFjLENBQW1CLE1BQVMsRUFBRSxJQUFtQjtJQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBSEQsd0NBR0M7QUFFRCxnREFBZ0Q7QUFDaEQsU0FBZ0IsUUFBUSxDQUFDLEtBQWM7SUFDckMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFGRCw0QkFFQztBQUVELCtFQUErRTtBQUMvRSxTQUFnQixXQUFXLENBQUMsS0FBYztJQUN4QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFKRCxrQ0FJQztBQUVELG1IQUFtSDtBQUNuSCxTQUFTLGdCQUFnQixDQUFDLEtBQWM7SUFDdEMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixhQUFhLENBQUksS0FBUTtJQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBTSxDQUFDO0FBQ3JDLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQVMsSUFBSSxDQUFDLEtBQWMsRUFBRSxNQUFtQjtJQUMvQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsSUFBSSxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDaEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBZ0IsRUFBRSxNQUFtQjtJQUN0RCxJQUFJLElBQTJCLENBQUM7SUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFBRSxTQUFTO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQixDQUFDO0lBQ0QsT0FBTyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUE4QixFQUFFLE1BQW1CO0lBQ3JFLElBQUksSUFBeUMsQ0FBQztJQUM5QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFBRSxTQUFTO1FBQ2xDLElBQUksS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlL2hhbmRsZXMg4oCUIHdoaWNoIG9iamVjdHMgYXJlIHRoZSBzY29wZSdzIEhBTkRMRVMsIGFuZCB0aGUgdmFsdWVcbiAqIGJlaGluZCBlYWNoLlxuICpcbiAqIEV2ZXJ5IG9iamVjdCB0aGUgdHlwZWQgc2NvcGUgaGFuZHMgYmFjayBpcyBhIFByb3h5IGJvdW5kIHRvIGl0cyBzdGFnZVxuICogKHJlYWN0aXZlL1JFQURNRS5tZCwgXCJBIGhhbmRsZSBpcyBib3VuZCB0byBpdHMgc3RhZ2VcIik6IGluc2lkZSB0aGUgc3RhZ2VcbiAqIHRoYXQgaXMgd2hhdCBtYWtlcyBhIGRlZXAgd3JpdGUgY29tbWl0IGFuZCBhIGhlbGQgcmVhZCBzdGF5IGxpdmUuIEEgaGFuZGxlXG4gKiBjYW4gYWxzbyBUUkFWRUwgb3V0IG9mIHRoZSBzdGFnZSBpbiB0aGUgbGlicmFyeSdzIG93biBoYW5kcyDigJQgYW5cbiAqIGBhZGRQYXJhbGxlbEZvckVhY2hgIGl0ZW1zIHNlbGVjdG9yIHJldHVybnMgdGhlIGFycmF5IGhhbmRsZSBhbmQgaXRzXG4gKiBlbGVtZW50cyBiZWNvbWUgdGhlIGdlbmVyYXRlZCBicmFuY2ggaW5wdXRzOyBhIHN1YmZsb3cgYGlucHV0TWFwcGVyYCBvclxuICogYG91dHB1dE1hcHBlcmAgaGFuZHMgb25lIG9uOyBgJHNldFZhbHVlKCdjb3B5Jywgc2NvcGUuY3VzdG9tZXIpYCBoYW5kcyBvbmVcbiAqIGJhY2suIFdoZXJldmVyIHRoZSBlbmdpbmUgUkVDT1JEUyBhIHZhbHVlIGl0IGNsb25lcyBpdCAoYHN0cnVjdHVyZWRDbG9uZWAsXG4gKiBhdCBjb21taXQgc2luY2UgOS4yMy4wKSwgYW5kIGEgUHJveHkgY2Fubm90IGJlIGNsb25lZDogYERhdGFDbG9uZUVycm9yYCxcbiAqIHRoZSBzdGFnZSdzIHdyaXRlcyBsb3N0LiA5LjIyLjDigJM5LjIzLjIgbG9zdCBldmVyeSBjaGlsZCBvZiBhIGZhbi1vdXQgb3ZlclxuICogb2JqZWN0IGl0ZW1zIHRoYXQgd2F5ICg5LjIzLjMpLlxuICpcbiAqIExBVzogYSBoYW5kbGUgdGhlIHNjb3BlIGhhbmRlZCBvdXQgaXMgYSB2YWx1ZSB0aGUgZW5naW5lIGFjY2VwdHMgYmFjay5cbiAqIEVhY2ggcHJveHkgZmFjdG9yeSByZWdpc3RlcnMgaXRzIGhhbmRsZSBoZXJlIHdpdGggdGhlIHNhbWUgbGl2ZSByZWFkZXIgaXRzXG4gKiBnZXQgdHJhcCB1c2VzLCBzbyB0aGUgdmFsdWUgYmVoaW5kIGEgaGFuZGxlIGlzIHdoYXQgYSByZWFkIG9mIGl0IHdvdWxkXG4gKiByZXR1cm4gTk9XIOKAlCBhbmQgdGhlIGVuZ2luZSBhc2tzIHtAbGluayB1bndyYXBIYW5kbGVzfSBhdCBldmVyeSBib3VuZGFyeVxuICogd2hlcmUgYXBwIGNvZGUgaGFuZHMgaXQgYSB2YWx1ZSB0byByZWNvcmQuIE8oMSkgZm9yIGEgaGFuZGxlIChhIFdlYWtNYXBcbiAqIGxvb2t1cCwgbm8gd2Fsaywgbm8gSlNPTiByb3VuZC10cmlwOiBhIGBEYXRlYCBzdGF5cyBhIGBEYXRlYCk7IGEgd2FsayBvbmx5XG4gKiBmb3IgYSBwbGFpbiBjb250YWluZXIgdGhlIGFwcCBidWlsdCBhcm91bmQgaGFuZGxlcywgY29weS1vbi13cml0ZSBzbyBhXG4gKiBoYW5kbGUtZnJlZSB2YWx1ZSBjb21lcyBiYWNrIGFzIHRoZSBTQU1FIHJlZmVyZW5jZS5cbiAqXG4gKiBUaGUgdmFsdWUgYmVoaW5kIGEgaGFuZGxlIGlzIEJPUlJPV0VEIOKAlCB0aGUgc2FtZSByZWZlcmVuY2UgYSByZWFkIGhhbmRzXG4gKiBiYWNrLCBjbG9uZWQgYnkgdGhlIGJ1ZmZlciBhdCBjb21taXQuIE5ldmVyIG11dGF0ZSBpdCAodGhlIHJlYWRzIGxhdykuXG4gKi9cblxuLyoqIEV2ZXJ5IGhhbmRsZSB0aGUgZm91ciBwcm94eSBmYWN0b3JpZXMgYnVpbHQsIG1hcHBlZCB0byBpdHMgbGl2ZSByZWFkZXIuICovXG5jb25zdCBMSVZFID0gbmV3IFdlYWtNYXA8b2JqZWN0LCAoKSA9PiB1bmtub3duPigpO1xuXG4vKiogUmVnaXN0ZXIgYGhhbmRsZWAgYXMgYSBzY29wZSBoYW5kbGUgd2hvc2UgY3VycmVudCB2YWx1ZSBgbGl2ZWAgcmV0dXJucy4gUmV0dXJucyB0aGUgaGFuZGxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWVtYmVySGFuZGxlPFQgZXh0ZW5kcyBvYmplY3Q+KGhhbmRsZTogVCwgbGl2ZTogKCkgPT4gdW5rbm93bik6IFQge1xuICBMSVZFLnNldChoYW5kbGUsIGxpdmUpO1xuICByZXR1cm4gaGFuZGxlO1xufVxuXG4vKiogSXMgYHZhbHVlYCBhIGhhbmRsZSB0aGUgc2NvcGUgaGFuZGVkIG91dD8gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0hhbmRsZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIExJVkUuaGFzKHZhbHVlKTtcbn1cblxuLyoqIFRoZSBsaXZlIHZhbHVlIGJlaGluZCBhIGhhbmRsZTsgYHZhbHVlYCBpdHNlbGYgd2hlbiBpdCBpcyBub3Qgb25lLiBPKDEpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlQmVoaW5kKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IGxpdmUgPSBMSVZFLmdldCh2YWx1ZSk7XG4gIHJldHVybiBsaXZlID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGxpdmUoKTtcbn1cblxuLyoqIEEgcGxhaW4gb2JqZWN0IG9yIGFycmF5IOKAlCB0aGUgb25seSBjb250YWluZXJzIHRoZSB3YWxrIGVudGVycyAoYSBgRGF0ZWAsIGBNYXBgIG9yIGNsYXNzIGluc3RhbmNlIGlzIGEgbGVhZikuICovXG5mdW5jdGlvbiBpc1BsYWluQ29udGFpbmVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIHJldHVybiBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbDtcbn1cblxuLyoqXG4gKiBgdmFsdWVgIHdpdGggZXZlcnkgaGFuZGxlIGluc2lkZSBpdCByZXBsYWNlZCBieSB0aGUgdmFsdWUgYmVoaW5kIGl0LlxuICpcbiAqIEEgaGFuZGxlIGlzIHJlcGxhY2VkIGluIE8oMSkgYW5kIE5PVCBlbnRlcmVkICh0aGUgc3RhdGUgYmVoaW5kIGl0IGhvbGRzIG5vXG4gKiBoYW5kbGVzIOKAlCB0aGV5IGFyZSBidWlsdCBvbiByZWFkLCBuZXZlciBzdG9yZWQpLiBBIHBsYWluIGNvbnRhaW5lciBpc1xuICogd2Fsa2VkIGFuZCBjb3BpZWQgT05MWSB3aGVuIHNvbWV0aGluZyBpbnNpZGUgaXQgY2hhbmdlZCwgc28gYSBoYW5kbGUtZnJlZVxuICogdmFsdWUgaXMgcmV0dXJuZWQgYXMgdGhlIHNhbWUgcmVmZXJlbmNlIGFuZCBhIGhhbmQtYnVpbHQgYHsgaXRlbSwgaW5kZXggfWBcbiAqIGFyb3VuZCBvbmUgaGFuZGxlIGNvc3RzIG9uZSBvYmplY3QuIEFueXRoaW5nIGVsc2UgKGEgYERhdGVgLCBhIGBNYXBgLCBhXG4gKiBjbGFzcyBpbnN0YW5jZSwgYSBwcmltaXRpdmUpIGlzIGEgbGVhZi4gQSBjeWNsZSBhbW9uZyBwbGFpbiBjb250YWluZXJzIGlzXG4gKiBsZWZ0IGFzIGl0IGlzIOKAlCBgc3RydWN0dXJlZENsb25lYCBoYW5kbGVzIGN5Y2xlczsgb25seSBhIFByb3h5IHN0b3BzIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwSGFuZGxlczxUPih2YWx1ZTogVCk6IFQge1xuICByZXR1cm4gd2Fsayh2YWx1ZSwgbmV3IFNldCgpKSBhcyBUO1xufVxuXG5mdW5jdGlvbiB3YWxrKHZhbHVlOiB1bmtub3duLCBvblBhdGg6IFNldDxvYmplY3Q+KTogdW5rbm93biB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IGxpdmUgPSBMSVZFLmdldCh2YWx1ZSk7XG4gIGlmIChsaXZlICE9PSB1bmRlZmluZWQpIHJldHVybiBsaXZlKCk7XG4gIGlmICghaXNQbGFpbkNvbnRhaW5lcih2YWx1ZSkgfHwgb25QYXRoLmhhcyh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgb25QYXRoLmFkZCh2YWx1ZSk7XG4gIGNvbnN0IG91dCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gd2Fsa0FycmF5KHZhbHVlLCBvblBhdGgpIDogd2Fsa09iamVjdCh2YWx1ZSwgb25QYXRoKTtcbiAgb25QYXRoLmRlbGV0ZSh2YWx1ZSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHdhbGtBcnJheSh2YWx1ZTogdW5rbm93bltdLCBvblBhdGg6IFNldDxvYmplY3Q+KTogdW5rbm93bltdIHtcbiAgbGV0IGNvcHk6IHVua25vd25bXSB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG5leHQgPSB3YWxrKHZhbHVlW2ldLCBvblBhdGgpO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZVtpXSkgY29udGludWU7XG4gICAgY29weSA/Pz0gWy4uLnZhbHVlXTtcbiAgICBjb3B5W2ldID0gbmV4dDtcbiAgfVxuICByZXR1cm4gY29weSA/PyB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gd2Fsa09iamVjdCh2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9uUGF0aDogU2V0PG9iamVjdD4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGxldCBjb3B5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgY29uc3QgbmV4dCA9IHdhbGsodmFsdWVba2V5XSwgb25QYXRoKTtcbiAgICBpZiAobmV4dCA9PT0gdmFsdWVba2V5XSkgY29udGludWU7XG4gICAgY29weSA/Pz0geyAuLi52YWx1ZSB9O1xuICAgIGNvcHlba2V5XSA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIGNvcHkgPz8gdmFsdWU7XG59XG4iXX0=
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* scope.tags.push('vip') instead of scope.setValue('tags', [...tags, 'vip'])
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.joinPath = exports.buildNestedPatch = exports.createArrayProxy = exports.shouldWrapWithProxy = exports.createTypedScope = exports.SCOPE_METHOD_NAMES = exports.IS_TYPED_SCOPE = exports.EXECUTOR_INTERNAL_METHODS = exports.BREAK_SETTER = void 0;
|
|
11
|
+
exports.joinPath = exports.buildNestedPatch = exports.valueBehind = exports.unwrapHandles = exports.isHandle = exports.createArrayProxy = exports.shouldWrapWithProxy = exports.createTypedScope = exports.SCOPE_METHOD_NAMES = exports.IS_TYPED_SCOPE = exports.EXECUTOR_INTERNAL_METHODS = exports.BREAK_SETTER = void 0;
|
|
12
12
|
// Runtime constants
|
|
13
13
|
var types_js_1 = require("./types.js");
|
|
14
14
|
Object.defineProperty(exports, "BREAK_SETTER", { enumerable: true, get: function () { return types_js_1.BREAK_SETTER; } });
|
|
@@ -23,7 +23,11 @@ var allowlist_js_1 = require("./allowlist.js");
|
|
|
23
23
|
Object.defineProperty(exports, "shouldWrapWithProxy", { enumerable: true, get: function () { return allowlist_js_1.shouldWrapWithProxy; } });
|
|
24
24
|
var arrayTraps_js_1 = require("./arrayTraps.js");
|
|
25
25
|
Object.defineProperty(exports, "createArrayProxy", { enumerable: true, get: function () { return arrayTraps_js_1.createArrayProxy; } });
|
|
26
|
+
var handles_js_1 = require("./handles.js");
|
|
27
|
+
Object.defineProperty(exports, "isHandle", { enumerable: true, get: function () { return handles_js_1.isHandle; } });
|
|
28
|
+
Object.defineProperty(exports, "unwrapHandles", { enumerable: true, get: function () { return handles_js_1.unwrapHandles; } });
|
|
29
|
+
Object.defineProperty(exports, "valueBehind", { enumerable: true, get: function () { return handles_js_1.valueBehind; } });
|
|
26
30
|
var pathBuilder_js_1 = require("./pathBuilder.js");
|
|
27
31
|
Object.defineProperty(exports, "buildNestedPatch", { enumerable: true, get: function () { return pathBuilder_js_1.buildNestedPatch; } });
|
|
28
32
|
Object.defineProperty(exports, "joinPath", { enumerable: true, get: function () { return pathBuilder_js_1.joinPath; } });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlYWN0aXZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOzs7QUFLSCxvQkFBb0I7QUFDcEIsdUNBQXlHO0FBQWhHLHdHQUFBLFlBQVksT0FBQTtBQUFFLHFIQUFBLHlCQUF5QixPQUFBO0FBQUUsMEdBQUEsY0FBYyxPQUFBO0FBQUUsOEdBQUEsa0JBQWtCLE9BQUE7QUFFcEYsZUFBZTtBQUNmLDZEQUF5RDtBQUFoRCx1SEFBQSxnQkFBZ0IsT0FBQTtBQUV6QixZQUFZO0FBQ1osK0NBQXFEO0FBQTVDLG1IQUFBLG1CQUFtQixPQUFBO0FBQzVCLGlEQUFtRDtBQUExQyxpSEFBQSxnQkFBZ0IsT0FBQTtBQUN6QiwyQ0FBb0U7QUFBM0Qsc0dBQUEsUUFBUSxPQUFBO0FBQUUsMkdBQUEsYUFBYSxPQUFBO0FBQUUseUdBQUEsV0FBVyxPQUFBO0FBQzdDLG1EQUE4RDtBQUFyRCxrSEFBQSxnQkFBZ0IsT0FBQTtBQUFFLDBHQUFBLFFBQVEsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvIC0tIERlZXAgUHJveHkgc3lzdGVtIGZvciBUeXBlZFNjb3BlPFQ+LlxuICpcbiAqIFByb3ZpZGVzIHR5cGVkIHByb3BlcnR5IGFjY2VzcyB0byBmb290cHJpbnRqcyBzY29wZSBzdGF0ZTpcbiAqICAgc2NvcGUuY3JlZGl0VGllciA9ICdBJyAgaW5zdGVhZCBvZiAgc2NvcGUuc2V0VmFsdWUoJ2NyZWRpdFRpZXInLCAnQScpXG4gKiAgIHNjb3BlLmN1c3RvbWVyLmFkZHJlc3MuemlwID0gJzkwMjEwJyAgaW5zdGVhZCBvZiAgc2NvcGUudXBkYXRlVmFsdWUoLi4uKVxuICogICBzY29wZS50YWdzLnB1c2goJ3ZpcCcpICBpbnN0ZWFkIG9mICBzY29wZS5zZXRWYWx1ZSgndGFncycsIFsuLi50YWdzLCAndmlwJ10pXG4gKi9cblxuLy8gVHlwZXNcbmV4cG9ydCB0eXBlIHsgUmVhY3RpdmVPcHRpb25zLCBSZWFjdGl2ZVRhcmdldCwgU2NvcGVNZXRob2RzLCBUeXBlZFNjb3BlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFJ1bnRpbWUgY29uc3RhbnRzXG5leHBvcnQgeyBCUkVBS19TRVRURVIsIEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMsIElTX1RZUEVEX1NDT1BFLCBTQ09QRV9NRVRIT0RfTkFNRVMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQ29yZSBmYWN0b3J5XG5leHBvcnQgeyBjcmVhdGVUeXBlZFNjb3BlIH0gZnJvbSAnLi9jcmVhdGVUeXBlZFNjb3BlLmpzJztcblxuLy8gVXRpbGl0aWVzXG5leHBvcnQgeyBzaG91bGRXcmFwV2l0aFByb3h5IH0gZnJvbSAnLi9hbGxvd2xpc3QuanMnO1xuZXhwb3J0IHsgY3JlYXRlQXJyYXlQcm94eSB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5leHBvcnQgeyBpc0hhbmRsZSwgdW53cmFwSGFuZGxlcywgdmFsdWVCZWhpbmQgfSBmcm9tICcuL2hhbmRsZXMuanMnO1xuZXhwb3J0IHsgYnVpbGROZXN0ZWRQYXRjaCwgam9pblBhdGggfSBmcm9tICcuL3BhdGhCdWlsZGVyLmpzJztcbiJdfQ==
|
package/dist/types/advanced.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export type { AggregatedMetrics, DebugEntry, DebugRecorderOptions, DebugVerbosit
|
|
|
38
38
|
export type { RuntimeSnapshot } from './lib/runner/index.js';
|
|
39
39
|
export { ExecutionRuntime } from './lib/runner/index.js';
|
|
40
40
|
export type { ReactiveOptions, ReactiveTarget } from './lib/reactive/index.js';
|
|
41
|
-
export { BREAK_SETTER, buildNestedPatch, createArrayProxy, joinPath, SCOPE_METHOD_NAMES, shouldWrapWithProxy, } from './lib/reactive/index.js';
|
|
41
|
+
export { BREAK_SETTER, buildNestedPatch, createArrayProxy, isHandle, joinPath, SCOPE_METHOD_NAMES, shouldWrapWithProxy, unwrapHandles, valueBehind, } from './lib/reactive/index.js';
|
|
42
42
|
export type { TraverserOptions } from './lib/engine/index.js';
|
|
43
43
|
export type { Decider } from './lib/engine/index.js';
|
|
44
44
|
export { FlowchartTraverser } from './lib/engine/index.js';
|
|
@@ -83,6 +83,14 @@ export declare class ParallelForEachHandler<TOut = any, TScope = any> {
|
|
|
83
83
|
/**
|
|
84
84
|
* Evaluate the items selector against the live scope. A non-array return is
|
|
85
85
|
* a chart bug, not a runtime condition — it fails loudly, naming the stage.
|
|
86
|
+
*
|
|
87
|
+
* The selector reads the typed scope, so what it returns is usually the
|
|
88
|
+
* scope's own array HANDLE (a Proxy bound to the parent stage) and every
|
|
89
|
+
* `items[index]` an element handle. The items are about to cross into
|
|
90
|
+
* branch runtimes — closed over by `branch(item, index)` and seeded as the
|
|
91
|
+
* branch's `item` — so they are taken as VALUES here (`unwrapHandles`,
|
|
92
|
+
* reactive/handles.ts). 9.22.0–9.23.2 seeded the handle itself and every
|
|
93
|
+
* branch over an object item failed at its seed commit (DataCloneError).
|
|
86
94
|
*/
|
|
87
95
|
private resolveItems;
|
|
88
96
|
/** Generate one subflow-mount node per branch, registering each branch chart. */
|
|
@@ -15,7 +15,16 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import type { StageContext } from '../../memory/StageContext.js';
|
|
17
17
|
import type { HandlerDeps, IExecutionRuntime, SubflowMountOptions } from '../types.js';
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Extract values from parent scope using inputMapper.
|
|
20
|
+
*
|
|
21
|
+
* What a mapper returns is a VALUE, not a handle: the mapper read the parent's
|
|
22
|
+
* typed scope, so its result may be — or hold — a Proxy bound to the parent
|
|
23
|
+
* stage, and the seed commit below clones it (`structuredClone`, which cannot
|
|
24
|
+
* clone a Proxy). `unwrapHandles` (reactive/handles.ts) swaps each for the
|
|
25
|
+
* value behind it, O(1), Dates and Maps intact; a handle-free result passes
|
|
26
|
+
* through by reference.
|
|
27
|
+
*/
|
|
19
28
|
export declare function extractParentScopeValues<TParentScope, TSubflowInput>(parentScope: TParentScope, options?: SubflowMountOptions<TParentScope, TSubflowInput>): TSubflowInput | Record<string, unknown>;
|
|
20
29
|
/**
|
|
21
30
|
* Get the initial scope values for a subflow.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* reactive/handles — which objects are the scope's HANDLES, and the value
|
|
3
|
+
* behind each.
|
|
4
|
+
*
|
|
5
|
+
* Every object the typed scope hands back is a Proxy bound to its stage
|
|
6
|
+
* (reactive/README.md, "A handle is bound to its stage"): inside the stage
|
|
7
|
+
* that is what makes a deep write commit and a held read stay live. A handle
|
|
8
|
+
* can also TRAVEL out of the stage in the library's own hands — an
|
|
9
|
+
* `addParallelForEach` items selector returns the array handle and its
|
|
10
|
+
* elements become the generated branch inputs; a subflow `inputMapper` or
|
|
11
|
+
* `outputMapper` hands one on; `$setValue('copy', scope.customer)` hands one
|
|
12
|
+
* back. Wherever the engine RECORDS a value it clones it (`structuredClone`,
|
|
13
|
+
* at commit since 9.23.0), and a Proxy cannot be cloned: `DataCloneError`,
|
|
14
|
+
* the stage's writes lost. 9.22.0–9.23.2 lost every child of a fan-out over
|
|
15
|
+
* object items that way (9.23.3).
|
|
16
|
+
*
|
|
17
|
+
* LAW: a handle the scope handed out is a value the engine accepts back.
|
|
18
|
+
* Each proxy factory registers its handle here with the same live reader its
|
|
19
|
+
* get trap uses, so the value behind a handle is what a read of it would
|
|
20
|
+
* return NOW — and the engine asks {@link unwrapHandles} at every boundary
|
|
21
|
+
* where app code hands it a value to record. O(1) for a handle (a WeakMap
|
|
22
|
+
* lookup, no walk, no JSON round-trip: a `Date` stays a `Date`); a walk only
|
|
23
|
+
* for a plain container the app built around handles, copy-on-write so a
|
|
24
|
+
* handle-free value comes back as the SAME reference.
|
|
25
|
+
*
|
|
26
|
+
* The value behind a handle is BORROWED — the same reference a read hands
|
|
27
|
+
* back, cloned by the buffer at commit. Never mutate it (the reads law).
|
|
28
|
+
*/
|
|
29
|
+
/** Register `handle` as a scope handle whose current value `live` returns. Returns the handle. */
|
|
30
|
+
export declare function rememberHandle<T extends object>(handle: T, live: () => unknown): T;
|
|
31
|
+
/** Is `value` a handle the scope handed out? */
|
|
32
|
+
export declare function isHandle(value: unknown): value is object;
|
|
33
|
+
/** The live value behind a handle; `value` itself when it is not one. O(1). */
|
|
34
|
+
export declare function valueBehind(value: unknown): unknown;
|
|
35
|
+
/**
|
|
36
|
+
* `value` with every handle inside it replaced by the value behind it.
|
|
37
|
+
*
|
|
38
|
+
* A handle is replaced in O(1) and NOT entered (the state behind it holds no
|
|
39
|
+
* handles — they are built on read, never stored). A plain container is
|
|
40
|
+
* walked and copied ONLY when something inside it changed, so a handle-free
|
|
41
|
+
* value is returned as the same reference and a hand-built `{ item, index }`
|
|
42
|
+
* around one handle costs one object. Anything else (a `Date`, a `Map`, a
|
|
43
|
+
* class instance, a primitive) is a leaf. A cycle among plain containers is
|
|
44
|
+
* left as it is — `structuredClone` handles cycles; only a Proxy stops it.
|
|
45
|
+
*/
|
|
46
|
+
export declare function unwrapHandles<T>(value: T): T;
|
|
@@ -11,4 +11,5 @@ export { BREAK_SETTER, EXECUTOR_INTERNAL_METHODS, IS_TYPED_SCOPE, SCOPE_METHOD_N
|
|
|
11
11
|
export { createTypedScope } from './createTypedScope.js';
|
|
12
12
|
export { shouldWrapWithProxy } from './allowlist.js';
|
|
13
13
|
export { createArrayProxy } from './arrayTraps.js';
|
|
14
|
+
export { isHandle, unwrapHandles, valueBehind } from './handles.js';
|
|
14
15
|
export { buildNestedPatch, joinPath } from './pathBuilder.js';
|
package/package.json
CHANGED