footprintjs 9.23.2 → 9.24.0
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 +4 -4
- package/dist/advanced.js +6 -3
- package/dist/esm/advanced.d.ts +1 -1
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +17 -1
- package/dist/esm/lib/builder/index.d.ts +1 -1
- package/dist/esm/lib/builder/index.js +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +32 -0
- package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -1
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
- 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 +36 -6
- package/dist/esm/lib/reactive/arrayTraps.js +14 -12
- package/dist/esm/lib/reactive/createTypedScope.js +20 -12
- 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/esm/lib/reactive/structuralWrite.d.ts +0 -15
- package/dist/esm/lib/reactive/structuralWrite.js +10 -28
- package/dist/esm/lib/reactive/writeTraps.d.ts +4 -3
- package/dist/esm/lib/reactive/writeTraps.js +8 -6
- package/dist/index.js +1 -1
- package/dist/lib/builder/FlowChartBuilder.js +17 -1
- package/dist/lib/builder/index.js +1 -1
- package/dist/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
- package/dist/lib/engine/handlers/ParallelForEachHandler.js +11 -2
- package/dist/lib/engine/handlers/SubflowInputMapper.js +36 -6
- package/dist/lib/reactive/arrayTraps.js +14 -12
- package/dist/lib/reactive/createTypedScope.js +20 -12
- package/dist/lib/reactive/handles.js +112 -0
- package/dist/lib/reactive/index.js +6 -2
- package/dist/lib/reactive/structuralWrite.js +11 -30
- package/dist/lib/reactive/writeTraps.js +7 -5
- package/dist/types/advanced.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -0
- package/dist/types/lib/builder/index.d.ts +1 -1
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +32 -0
- package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -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/dist/types/lib/reactive/structuralWrite.d.ts +0 -15
- package/dist/types/lib/reactive/writeTraps.d.ts +4 -3
- package/package.json +1 -1
|
@@ -13,7 +13,30 @@
|
|
|
13
13
|
* | Both present | Full data contract (args in, results out) |
|
|
14
14
|
* | Neither present | Complete isolation (side effects only) |
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
import { unwrapHandles } from '../../reactive/handles.js';
|
|
17
|
+
/**
|
|
18
|
+
* A plain object — the only shape that is spread into per-field writes
|
|
19
|
+
* (`setObject([key], field, …)`, a row and a redaction verdict per field). A
|
|
20
|
+
* `Date`, `Map`, `Set` or class instance has no fields to spread and is a
|
|
21
|
+
* value in its own right: it lands WHOLE (until 9.24.0 it was spread into
|
|
22
|
+
* zero writes and silently vanished at both boundaries).
|
|
23
|
+
*/
|
|
24
|
+
function isPlainObject(value) {
|
|
25
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
26
|
+
return false;
|
|
27
|
+
const proto = Object.getPrototypeOf(value);
|
|
28
|
+
return proto === Object.prototype || proto === null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Extract values from parent scope using inputMapper.
|
|
32
|
+
*
|
|
33
|
+
* What a mapper returns is a VALUE, not a handle: the mapper read the parent's
|
|
34
|
+
* typed scope, so its result may be — or hold — a Proxy bound to the parent
|
|
35
|
+
* stage, and the seed commit below clones it (`structuredClone`, which cannot
|
|
36
|
+
* clone a Proxy). `unwrapHandles` (reactive/handles.ts) swaps each for the
|
|
37
|
+
* value behind it, O(1), Dates and Maps intact; a handle-free result passes
|
|
38
|
+
* through by reference.
|
|
39
|
+
*/
|
|
17
40
|
export function extractParentScopeValues(parentScope, options) {
|
|
18
41
|
if (!options?.inputMapper) {
|
|
19
42
|
return {};
|
|
@@ -22,7 +45,7 @@ export function extractParentScopeValues(parentScope, options) {
|
|
|
22
45
|
if (result === null || result === undefined) {
|
|
23
46
|
return {};
|
|
24
47
|
}
|
|
25
|
-
return result;
|
|
48
|
+
return unwrapHandles(result);
|
|
26
49
|
}
|
|
27
50
|
/**
|
|
28
51
|
* Get the initial scope values for a subflow.
|
|
@@ -62,7 +85,10 @@ export function createSubflowHandlerDeps(parentDeps, subflowRuntime, mappedInput
|
|
|
62
85
|
export function seedSubflowGlobalStore(subflowRuntime, initialValues) {
|
|
63
86
|
const rootContext = subflowRuntime.rootStageContext;
|
|
64
87
|
for (const [key, value] of Object.entries(initialValues)) {
|
|
65
|
-
|
|
88
|
+
// An EMPTY plain object lands whole too: spread into zero writes it
|
|
89
|
+
// seeded nothing, and the child read `undefined` for an `{}` input
|
|
90
|
+
// (9.14.0 to 9.23.3).
|
|
91
|
+
if (isPlainObject(value) && Object.keys(value).length > 0) {
|
|
66
92
|
for (const [nestedKey, nestedValue] of Object.entries(value)) {
|
|
67
93
|
rootContext.setObject([key], nestedKey, nestedValue);
|
|
68
94
|
}
|
|
@@ -86,12 +112,16 @@ export function applyOutputMapping(subflowOutput, parentScope, parentContext, op
|
|
|
86
112
|
if (!options?.outputMapper) {
|
|
87
113
|
return undefined;
|
|
88
114
|
}
|
|
89
|
-
|
|
115
|
+
// The same boundary in the other direction: the mapper is handed the
|
|
116
|
+
// parent's typed scope too, so what it returns is taken as a value.
|
|
117
|
+
const mappedOutput = unwrapHandles(options.outputMapper(subflowOutput, parentScope));
|
|
90
118
|
if (mappedOutput === null || mappedOutput === undefined) {
|
|
91
119
|
return undefined;
|
|
92
120
|
}
|
|
93
121
|
for (const [key, value] of Object.entries(mappedOutput)) {
|
|
94
|
-
|
|
122
|
+
// A plain object is MERGED field by field (an empty one merges nothing —
|
|
123
|
+
// the parent's value stands); anything else lands whole.
|
|
124
|
+
if (isPlainObject(value)) {
|
|
95
125
|
for (const [nestedKey, nestedValue] of Object.entries(value)) {
|
|
96
126
|
if (Array.isArray(nestedValue)) {
|
|
97
127
|
parentContext.appendToArray([key], nestedKey, nestedValue);
|
|
@@ -124,4 +154,4 @@ export function applyOutputMapping(subflowOutput, parentScope, parentContext, op
|
|
|
124
154
|
}
|
|
125
155
|
return mappedOutput;
|
|
126
156
|
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBS0gsMERBQTBEO0FBQzFELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsV0FBeUIsRUFDekIsT0FBMEQ7SUFFMUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsV0FBeUIsRUFDekIsT0FBMEQ7SUFFMUQsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUE0QixDQUFDO0FBQ25GLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLFVBQXFDLEVBQ3JDLGNBQWlDLEVBQ2pDLFdBQW9DO0lBRXBDLE9BQU87UUFDTCxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1FBQ3JCLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtRQUNyQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0Isc0JBQXNCLEVBQUUsVUFBVSxDQUFDLHNCQUFzQjtRQUN6RCxjQUFjLEVBQUUsVUFBVSxDQUFDLGNBQWM7UUFDekMsbUJBQW1CLEVBQUUsVUFBVSxDQUFD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QUUsQ0FBQztZQUNoQyxJQUFJLE9BQU8sRUFBRSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELENBQUM7cUJBQU0sQ0FBQztvQkFDTixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3ViZmxvd0lucHV0TWFwcGVyIOKAlCBQdXJlIGZ1bmN0aW9ucyBmb3Igc3ViZmxvdyBkYXRhIGNvbnRyYWN0cy5cbiAqXG4gKiBNZW50YWwgbW9kZWw6IFN1YmZsb3cgPSBQdXJlIEZ1bmN0aW9uXG4gKiAtIElzb2xhdGVkIHNjb3BlIChvd24gR2xvYmFsU3RvcmUpXG4gKiAtIEV4cGxpY2l0IGlucHV0cyB2aWEgaW5wdXRNYXBwZXJcbiAqIC0gRXhwbGljaXQgb3V0cHV0cyB2aWEgb3V0cHV0TWFwcGVyXG4gKlxuICogfCBTY2VuYXJpbyAgICAgICAgfCBCZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgTm8gaW5wdXRNYXBwZXIgIHwgU3ViZmxvdyBzdGFydHMgd2l0aCBlbXB0eSBzY29wZSAgICAgICAgICAgfFxuICogfCBObyBvdXRwdXRNYXBwZXIgfCBTdWJmbG93IHNjb3BlIGNoYW5nZXMgZGlzY2FyZGVkICAgICAgICAgICB8XG4gKiB8IEJvdGggcHJlc2VudCAgICB8IEZ1bGwgZGF0YSBjb250cmFjdCAoYXJncyBpbiwgcmVzdWx0cyBvdXQpIHxcbiAqIHwgTmVpdGhlciBwcmVzZW50IHwgQ29tcGxldGUgaXNvbGF0aW9uIChzaWRlIGVmZmVjdHMgb25seSkgICAgfFxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXJEZXBzLCBJRXhlY3V0aW9uUnVudGltZSwgU3ViZmxvd01vdW50T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqIEV4dHJhY3QgdmFsdWVzIGZyb20gcGFyZW50IHNjb3BlIHVzaW5nIGlucHV0TWFwcGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQYXJlbnRTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogVFN1YmZsb3dJbnB1dCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFvcHRpb25zPy5pbnB1dE1hcHBlcikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnMuaW5wdXRNYXBwZXIocGFyZW50U2NvcGUpO1xuICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGluaXRpYWwgc2NvcGUgdmFsdWVzIGZvciBhIHN1YmZsb3cuXG4gKiBBbHdheXMgaXNvbGF0ZWQg4oCUIG9ubHkgaW5wdXRNYXBwZXIgdmFsdWVzIGFyZSBpbmNsdWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gZXh0cmFjdFBhcmVudFNjb3BlVmFsdWVzKHBhcmVudFNjb3BlLCBvcHRpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgSGFuZGxlckRlcHMgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICogS2V5OiBzZXRzIHJlYWRPbmx5Q29udGV4dCB0byBtYXBwZWQgaW5wdXQgc28gU3RhZ2VSdW5uZXIgcGFzc2VzIGl0IHRvIFNjb3BlRmFjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YmZsb3dIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+KFxuICBwYXJlbnREZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIG1hcHBlZElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4ge1xuICByZXR1cm4ge1xuICAgIHN0YWdlTWFwOiBwYXJlbnREZXBzLnN0YWdlTWFwLFxuICAgIHJvb3Q6IHBhcmVudERlcHMucm9vdCxcbiAgICBzY29wZUZhY3Rvcnk6IHBhcmVudERlcHMuc2NvcGVGYWN0b3J5LFxuICAgIHN1YmZsb3dzOiBwYXJlbnREZXBzLnN1YmZsb3dzLFxuICAgIHRocm90dGxpbmdFcnJvckNoZWNrZXI6IHBhcmVudERlcHMudGhyb3R0bGluZ0Vycm9yQ2hlY2tlcixcbiAgICBzdHJlYW1IYW5kbGVyczogcGFyZW50RGVwcy5zdHJlYW1IYW5kbGVycyxcbiAgICBzY29wZVByb3RlY3Rpb25Nb2RlOiBwYXJlbnREZXBzLnNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gICAgZXhlY3V0aW9uUnVudGltZTogc3ViZmxvd1J1bnRpbWUsXG4gICAgcmVhZE9ubHlDb250ZXh0OiBtYXBwZWRJbnB1dCxcbiAgICBleGVjdXRpb25FbnY6IHBhcmVudERlcHMuZXhlY3V0aW9uRW52LCAvLyBpbmhlcml0ZWQg4oCUIGxpa2UgcHJvY2Vzcy5lbnZcbiAgICBuYXJyYXRpdmVHZW5lcmF0b3I6IHBhcmVudERlcHMubmFycmF0aXZlR2VuZXJhdG9yLFxuICAgIGxvZ2dlcjogcGFyZW50RGVwcy5sb2dnZXIsXG4gIH07XG59XG5cbi8qKlxuICogU2VlZCB0aGUgc3ViZmxvdydzIEdsb2JhbFN0b3JlIHdpdGggaW5pdGlhbCB2YWx1ZXMuXG4gKiBDYWxsZWQgYmVmb3JlIHN1YmZsb3cgZXhlY3V0aW9uIHRvIG1ha2UgaW5wdXRNYXBwZXIgdmFsdWVzIGF2YWlsYWJsZS5cbiAqXG4gKiBSZWRhY3Rpb246IHRoZSBzZWVkIGlzIGNvbW1pdHRlZCBhcyB0aGUgc3ViZmxvdydzIGBoaXN0b3J5WzBdYCBieSBpdHMgcm9vdFxuICogY29udGV4dC4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zdGFsbHMgdGhlIHJ1bidzIHJlZGFjdGlvbiBydWxlIG9uIHRoYXQgY29udGV4dFxuICogYmVmb3JlIGNhbGxpbmcgdGhpcywgc28gdGhlIGNvbW1pdCByZXRhaW5zIHVuZGVyIHRoZSBwb2xpY3kgKDkuMTkuMCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWVkU3ViZmxvd0dsb2JhbFN0b3JlKFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIGluaXRpYWxWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHJvb3RDb250ZXh0ID0gc3ViZmxvd1J1bnRpbWUucm9vdFN0YWdlQ29udGV4dDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbml0aWFsVmFsdWVzKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBbbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICAgIHJvb3RDb250ZXh0LnNldE9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByb290Q29udGV4dC5jb21taXQoKTtcbn1cblxuLyoqXG4gKiBBcHBseSBvdXRwdXQgbWFwcGluZyBhZnRlciBzdWJmbG93IGNvbXBsZXRpb24uXG4gKiBXcml0ZXMgbWFwcGVkIHZhbHVlcyBiYWNrIHRvIHBhcmVudCBzY29wZSB1c2luZyBtZXJnZSBzZW1hbnRpY3M6XG4gKiBhcnJheXMgYXJlIGFwcGVuZGVkLCBvYmplY3RzIGFyZSBzaGFsbG93LW1lcmdlZCwgc2NhbGFycyBhcmUgcmVwbGFjZWQuXG4gKlxuICogUmVkYWN0aW9uOiBldmVyeSB3cml0ZSBoZXJlIGdvZXMgdGhyb3VnaCBgcGFyZW50Q29udGV4dGAncyB3cml0ZSBmdW5uZWwsXG4gKiB3aGljaCBhc2tzIHRoZSBydW4ncyByZWRhY3Rpb24gcnVsZSDigJQgc28gYSBwb2xpY3ktcmVkYWN0ZWQgb3IgcGVyLWNhbGxcbiAqIG1hcmtlZCBrZXkgbGFuZHMgaW4gdGhlIFBBUkVOVCdzIGxvZyBhbmQgbWlycm9yIGFzIHRoZSBwbGFjZWhvbGRlciAoOS4xOS4wKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3V0cHV0TWFwcGluZzxUUGFyZW50U2NvcGUsIFRTdWJmbG93T3V0cHV0PihcbiAgc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIHBhcmVudENvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlLCBhbnksIFRTdWJmbG93T3V0cHV0Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zPy5vdXRwdXRNYXBwZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFwcGVkT3V0cHV0ID0gb3B0aW9ucy5vdXRwdXRNYXBwZXIoc3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGUpO1xuXG4gIGlmIChtYXBwZWRPdXRwdXQgPT09IG51bGwgfHwgbWFwcGVkT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWFwcGVkT3V0cHV0KSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBbbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5lc3RlZFZhbHVlKSkge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuYXBwZW5kVG9BcnJheShba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSAnb2JqZWN0JyAmJiBuZXN0ZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcmVudENvbnRleHQubWVyZ2VPYmplY3QoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuc2V0T2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zPy5hcnJheU1lcmdlID09PSAncmVwbGFjZScpIHtcbiAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHBhcmVudENvbnRleHQuZ2V0R2xvYmFsKGtleSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXBwZWRPdXRwdXQ7XG59XG4iXX0=
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBR0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzFEOzs7Ozs7R0FNRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLFdBQXlCLEVBQ3pCLE9BQTBEO0lBRTFELElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDMUIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFdBQXlCLEVBQ3pCLE9BQTBEO0lBRTFELE9BQU8sd0JBQXdCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBNEIsQ0FBQztBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxVQUFxQyxFQUNyQyxjQUFpQyxFQUNqQyxXQUFvQztJQUVwQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7UUFDckMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxzQkFBc0I7UUFDekQsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjO1FBQ3pDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxtQkFBbUI7UUFDbkQsZ0JBQWdCLEVBQUUsY0FBYztRQUNoQyxlQUFlLEVBQUUsV0FBVztRQUM1QixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVksRUFBRSwrQkFBK0I7UUFDdEUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQjtRQUNqRCxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07S0FDMUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxjQUFpQyxFQUNqQyxhQUFzQztJQUV0QyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7SUFFcEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxvRUFBb0U7UUFDcEUsbUVBQW1FO1FBQ25FLHNCQUFzQjtRQUN0QixJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsYUFBNkIsRUFDN0IsV0FBeUIsRUFDekIsYUFBMkIsRUFDM0IsT0FBZ0U7SUFFaEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztRQUMzQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLG9FQUFvRTtJQUNwRSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUVyRixJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3hELHlFQUF5RTtRQUN6RSx5REFBeUQ7UUFDekQsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztxQkFBTSxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ25FLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBc0MsQ0FBQyxDQUFDO2dCQUN0RixDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDekQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN0QyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1YmZsb3dJbnB1dE1hcHBlciDigJQgUHVyZSBmdW5jdGlvbnMgZm9yIHN1YmZsb3cgZGF0YSBjb250cmFjdHMuXG4gKlxuICogTWVudGFsIG1vZGVsOiBTdWJmbG93ID0gUHVyZSBGdW5jdGlvblxuICogLSBJc29sYXRlZCBzY29wZSAob3duIEdsb2JhbFN0b3JlKVxuICogLSBFeHBsaWNpdCBpbnB1dHMgdmlhIGlucHV0TWFwcGVyXG4gKiAtIEV4cGxpY2l0IG91dHB1dHMgdmlhIG91dHB1dE1hcHBlclxuICpcbiAqIHwgU2NlbmFyaW8gICAgICAgIHwgQmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IE5vIGlucHV0TWFwcGVyICB8IFN1YmZsb3cgc3RhcnRzIHdpdGggZW1wdHkgc2NvcGUgICAgICAgICAgIHxcbiAqIHwgTm8gb3V0cHV0TWFwcGVyIHwgU3ViZmxvdyBzY29wZSBjaGFuZ2VzIGRpc2NhcmRlZCAgICAgICAgICAgfFxuICogfCBCb3RoIHByZXNlbnQgICAgfCBGdWxsIGRhdGEgY29udHJhY3QgKGFyZ3MgaW4sIHJlc3VsdHMgb3V0KSB8XG4gKiB8IE5laXRoZXIgcHJlc2VudCB8IENvbXBsZXRlIGlzb2xhdGlvbiAoc2lkZSBlZmZlY3RzIG9ubHkpICAgIHxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uLy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHsgdW53cmFwSGFuZGxlcyB9IGZyb20gJy4uLy4uL3JlYWN0aXZlL2hhbmRsZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcywgSUV4ZWN1dGlvblJ1bnRpbWUsIFN1YmZsb3dNb3VudE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qg4oCUIHRoZSBvbmx5IHNoYXBlIHRoYXQgaXMgc3ByZWFkIGludG8gcGVyLWZpZWxkIHdyaXRlc1xuICogKGBzZXRPYmplY3QoW2tleV0sIGZpZWxkLCDigKYpYCwgYSByb3cgYW5kIGEgcmVkYWN0aW9uIHZlcmRpY3QgcGVyIGZpZWxkKS4gQVxuICogYERhdGVgLCBgTWFwYCwgYFNldGAgb3IgY2xhc3MgaW5zdGFuY2UgaGFzIG5vIGZpZWxkcyB0byBzcHJlYWQgYW5kIGlzIGFcbiAqIHZhbHVlIGluIGl0cyBvd24gcmlnaHQ6IGl0IGxhbmRzIFdIT0xFICh1bnRpbCA5LjI0LjAgaXQgd2FzIHNwcmVhZCBpbnRvXG4gKiB6ZXJvIHdyaXRlcyBhbmQgc2lsZW50bHkgdmFuaXNoZWQgYXQgYm90aCBib3VuZGFyaWVzKS5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGw7XG59XG5cbi8qKlxuICogRXh0cmFjdCB2YWx1ZXMgZnJvbSBwYXJlbnQgc2NvcGUgdXNpbmcgaW5wdXRNYXBwZXIuXG4gKlxuICogV2hhdCBhIG1hcHBlciByZXR1cm5zIGlzIGEgVkFMVUUsIG5vdCBhIGhhbmRsZTogdGhlIG1hcHBlciByZWFkIHRoZSBwYXJlbnQnc1xuICogdHlwZWQgc2NvcGUsIHNvIGl0cyByZXN1bHQgbWF5IGJlIOKAlCBvciBob2xkIOKAlCBhIFByb3h5IGJvdW5kIHRvIHRoZSBwYXJlbnRcbiAqIHN0YWdlLCBhbmQgdGhlIHNlZWQgY29tbWl0IGJlbG93IGNsb25lcyBpdCAoYHN0cnVjdHVyZWRDbG9uZWAsIHdoaWNoIGNhbm5vdFxuICogY2xvbmUgYSBQcm94eSkuIGB1bndyYXBIYW5kbGVzYCAocmVhY3RpdmUvaGFuZGxlcy50cykgc3dhcHMgZWFjaCBmb3IgdGhlXG4gKiB2YWx1ZSBiZWhpbmQgaXQsIE8oMSksIERhdGVzIGFuZCBNYXBzIGludGFjdDsgYSBoYW5kbGUtZnJlZSByZXN1bHQgcGFzc2VzXG4gKiB0aHJvdWdoIGJ5IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQYXJlbnRTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogVFN1YmZsb3dJbnB1dCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFvcHRpb25zPy5pbnB1dE1hcHBlcikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnMuaW5wdXRNYXBwZXIocGFyZW50U2NvcGUpO1xuICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHVud3JhcEhhbmRsZXMocmVzdWx0KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGluaXRpYWwgc2NvcGUgdmFsdWVzIGZvciBhIHN1YmZsb3cuXG4gKiBBbHdheXMgaXNvbGF0ZWQg4oCUIG9ubHkgaW5wdXRNYXBwZXIgdmFsdWVzIGFyZSBpbmNsdWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gZXh0cmFjdFBhcmVudFNjb3BlVmFsdWVzKHBhcmVudFNjb3BlLCBvcHRpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgSGFuZGxlckRlcHMgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICogS2V5OiBzZXRzIHJlYWRPbmx5Q29udGV4dCB0byBtYXBwZWQgaW5wdXQgc28gU3RhZ2VSdW5uZXIgcGFzc2VzIGl0IHRvIFNjb3BlRmFjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YmZsb3dIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+KFxuICBwYXJlbnREZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIG1hcHBlZElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4ge1xuICByZXR1cm4ge1xuICAgIHN0YWdlTWFwOiBwYXJlbnREZXBzLnN0YWdlTWFwLFxuICAgIHJvb3Q6IHBhcmVudERlcHMucm9vdCxcbiAgICBzY29wZUZhY3Rvcnk6IHBhcmVudERlcHMuc2NvcGVGYWN0b3J5LFxuICAgIHN1YmZsb3dzOiBwYXJlbnREZXBzLnN1YmZsb3dzLFxuICAgIHRocm90dGxpbmdFcnJvckNoZWNrZXI6IHBhcmVudERlcHMudGhyb3R0bGluZ0Vycm9yQ2hlY2tlcixcbiAgICBzdHJlYW1IYW5kbGVyczogcGFyZW50RGVwcy5zdHJlYW1IYW5kbGVycyxcbiAgICBzY29wZVByb3RlY3Rpb25Nb2RlOiBwYXJlbnREZXBzLnNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gICAgZXhlY3V0aW9uUnVudGltZTogc3ViZmxvd1J1bnRpbWUsXG4gICAgcmVhZE9ubHlDb250ZXh0OiBtYXBwZWRJbnB1dCxcbiAgICBleGVjdXRpb25FbnY6IHBhcmVudERlcHMuZXhlY3V0aW9uRW52LCAvLyBpbmhlcml0ZWQg4oCUIGxpa2UgcHJvY2Vzcy5lbnZcbiAgICBuYXJyYXRpdmVHZW5lcmF0b3I6IHBhcmVudERlcHMubmFycmF0aXZlR2VuZXJhdG9yLFxuICAgIGxvZ2dlcjogcGFyZW50RGVwcy5sb2dnZXIsXG4gIH07XG59XG5cbi8qKlxuICogU2VlZCB0aGUgc3ViZmxvdydzIEdsb2JhbFN0b3JlIHdpdGggaW5pdGlhbCB2YWx1ZXMuXG4gKiBDYWxsZWQgYmVmb3JlIHN1YmZsb3cgZXhlY3V0aW9uIHRvIG1ha2UgaW5wdXRNYXBwZXIgdmFsdWVzIGF2YWlsYWJsZS5cbiAqXG4gKiBSZWRhY3Rpb246IHRoZSBzZWVkIGlzIGNvbW1pdHRlZCBhcyB0aGUgc3ViZmxvdydzIGBoaXN0b3J5WzBdYCBieSBpdHMgcm9vdFxuICogY29udGV4dC4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zdGFsbHMgdGhlIHJ1bidzIHJlZGFjdGlvbiBydWxlIG9uIHRoYXQgY29udGV4dFxuICogYmVmb3JlIGNhbGxpbmcgdGhpcywgc28gdGhlIGNvbW1pdCByZXRhaW5zIHVuZGVyIHRoZSBwb2xpY3kgKDkuMTkuMCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWVkU3ViZmxvd0dsb2JhbFN0b3JlKFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIGluaXRpYWxWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHJvb3RDb250ZXh0ID0gc3ViZmxvd1J1bnRpbWUucm9vdFN0YWdlQ29udGV4dDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbml0aWFsVmFsdWVzKSkge1xuICAgIC8vIEFuIEVNUFRZIHBsYWluIG9iamVjdCBsYW5kcyB3aG9sZSB0b286IHNwcmVhZCBpbnRvIHplcm8gd3JpdGVzIGl0XG4gICAgLy8gc2VlZGVkIG5vdGhpbmcsIGFuZCB0aGUgY2hpbGQgcmVhZCBgdW5kZWZpbmVkYCBmb3IgYW4gYHt9YCBpbnB1dFxuICAgIC8vICg5LjE0LjAgdG8gOS4yMy4zKS5cbiAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgW25lc3RlZEtleSwgbmVzdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICByb290Q29udGV4dC5zZXRPYmplY3QoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByb290Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcm9vdENvbnRleHQuY29tbWl0KCk7XG59XG5cbi8qKlxuICogQXBwbHkgb3V0cHV0IG1hcHBpbmcgYWZ0ZXIgc3ViZmxvdyBjb21wbGV0aW9uLlxuICogV3JpdGVzIG1hcHBlZCB2YWx1ZXMgYmFjayB0byBwYXJlbnQgc2NvcGUgdXNpbmcgbWVyZ2Ugc2VtYW50aWNzOlxuICogYXJyYXlzIGFyZSBhcHBlbmRlZCwgb2JqZWN0cyBhcmUgc2hhbGxvdy1tZXJnZWQsIHNjYWxhcnMgYXJlIHJlcGxhY2VkLlxuICpcbiAqIFJlZGFjdGlvbjogZXZlcnkgd3JpdGUgaGVyZSBnb2VzIHRocm91Z2ggYHBhcmVudENvbnRleHRgJ3Mgd3JpdGUgZnVubmVsLFxuICogd2hpY2ggYXNrcyB0aGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIHNvIGEgcG9saWN5LXJlZGFjdGVkIG9yIHBlci1jYWxsXG4gKiBtYXJrZWQga2V5IGxhbmRzIGluIHRoZSBQQVJFTlQncyBsb2cgYW5kIG1pcnJvciBhcyB0aGUgcGxhY2Vob2xkZXIgKDkuMTkuMCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU91dHB1dE1hcHBpbmc8VFBhcmVudFNjb3BlLCBUU3ViZmxvd091dHB1dD4oXG4gIHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBwYXJlbnRDb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgYW55LCBUU3ViZmxvd091dHB1dD4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucz8ub3V0cHV0TWFwcGVyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFRoZSBzYW1lIGJvdW5kYXJ5IGluIHRoZSBvdGhlciBkaXJlY3Rpb246IHRoZSBtYXBwZXIgaXMgaGFuZGVkIHRoZVxuICAvLyBwYXJlbnQncyB0eXBlZCBzY29wZSB0b28sIHNvIHdoYXQgaXQgcmV0dXJucyBpcyB0YWtlbiBhcyBhIHZhbHVlLlxuICBjb25zdCBtYXBwZWRPdXRwdXQgPSB1bndyYXBIYW5kbGVzKG9wdGlvbnMub3V0cHV0TWFwcGVyKHN1YmZsb3dPdXRwdXQsIHBhcmVudFNjb3BlKSk7XG5cbiAgaWYgKG1hcHBlZE91dHB1dCA9PT0gbnVsbCB8fCBtYXBwZWRPdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtYXBwZWRPdXRwdXQpKSB7XG4gICAgLy8gQSBwbGFpbiBvYmplY3QgaXMgTUVSR0VEIGZpZWxkIGJ5IGZpZWxkIChhbiBlbXB0eSBvbmUgbWVyZ2VzIG5vdGhpbmcg4oCUXG4gICAgLy8gdGhlIHBhcmVudCdzIHZhbHVlIHN0YW5kcyk7IGFueXRoaW5nIGVsc2UgbGFuZHMgd2hvbGUuXG4gICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuZXN0ZWRLZXksIG5lc3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmVzdGVkVmFsdWUpKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5hcHBlbmRUb0FycmF5KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgPT09ICdvYmplY3QnICYmIG5lc3RlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5tZXJnZU9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRPYmplY3QoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgaWYgKG9wdGlvbnM/LmFycmF5TWVyZ2UgPT09ICdyZXBsYWNlJykge1xuICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcGFyZW50Q29udGV4dC5nZXRHbG9iYWwoa2V5KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hcHBlZE91dHB1dDtcbn1cbiJdfQ==
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
* `liveView.ts`), over an {@link elementSink}. A fix lands in a leaf once.
|
|
60
60
|
*/
|
|
61
61
|
import { shouldWrapWithProxy } from './allowlist.js';
|
|
62
|
+
import { rememberHandle, unwrapHandles } from './handles.js';
|
|
62
63
|
import { liveGetTrap, liveInspectionTraps, liveObject, MemberCache } from './liveView.js';
|
|
63
|
-
import { unwrapProxy } from './structuralWrite.js';
|
|
64
64
|
import { elementSink, sinkDeleteTrap, sinkSetTrap } from './writeTraps.js';
|
|
65
65
|
/** Methods that mutate the array in-place. We intercept and copy-on-write. */
|
|
66
66
|
const MUTATING_METHODS = new Set([
|
|
@@ -118,22 +118,23 @@ function fillHoles(arr, upTo) {
|
|
|
118
118
|
for (let i = arr.length; i < upTo; i++)
|
|
119
119
|
arr[i] = null;
|
|
120
120
|
}
|
|
121
|
-
/** WHY: a mutating method runs on a COPY, with its arguments
|
|
122
|
-
*
|
|
123
|
-
* copy is committed whole. The array in state is never
|
|
121
|
+
/** WHY: a mutating method runs on a COPY, with its arguments taken as values
|
|
122
|
+
* (a handle becomes what it stands for; a number or a comparator passes
|
|
123
|
+
* through), and the copy is committed whole. The array in state is never
|
|
124
|
+
* touched. */
|
|
124
125
|
function mutatingMethod(read, write, name) {
|
|
125
126
|
return (...args) => {
|
|
126
127
|
const clone = [...read()];
|
|
127
|
-
const result = clone[name](...args.map(
|
|
128
|
+
const result = clone[name](...args.map(unwrapHandles));
|
|
128
129
|
write(clone);
|
|
129
130
|
return result;
|
|
130
131
|
};
|
|
131
132
|
}
|
|
132
|
-
/** `arr[i] = v`: copy, `null` the slots a write past the end skips, place the
|
|
133
|
+
/** `arr[i] = v`: copy, `null` the slots a write past the end skips, place the value as assigned, commit. */
|
|
133
134
|
function setIndex(read, write, index, value) {
|
|
134
135
|
const clone = [...read()];
|
|
135
136
|
fillHoles(clone, index);
|
|
136
|
-
clone[index] =
|
|
137
|
+
clone[index] = unwrapHandles(value);
|
|
137
138
|
write(clone);
|
|
138
139
|
}
|
|
139
140
|
/** `arr.length = n`: copy, `null` the slots growth adds, truncate or extend, commit. */
|
|
@@ -202,12 +203,12 @@ function wrapElementMember(value, sink, path, visited) {
|
|
|
202
203
|
function createElementProxy(raw, sink, segments, visited) {
|
|
203
204
|
const members = new MemberCache();
|
|
204
205
|
const live = () => liveObject(raw, sink.readAt(segments));
|
|
205
|
-
return new Proxy(raw, {
|
|
206
|
+
return rememberHandle(new Proxy(raw, {
|
|
206
207
|
get: liveGetTrap(live, segments, (value, path) => wrapElementMember(value, sink, path, visited), members),
|
|
207
208
|
set: sinkSetTrap(sink, segments),
|
|
208
209
|
deleteProperty: sinkDeleteTrap(sink, segments),
|
|
209
210
|
...liveInspectionTraps(live),
|
|
210
|
-
});
|
|
211
|
+
}), live);
|
|
211
212
|
}
|
|
212
213
|
/**
|
|
213
214
|
* Creates a Proxy over an array that intercepts mutating operations.
|
|
@@ -227,7 +228,8 @@ export function createArrayProxy(getCurrent, commit) {
|
|
|
227
228
|
const read = getCurrent;
|
|
228
229
|
const write = commit;
|
|
229
230
|
const elements = new Map();
|
|
230
|
-
|
|
231
|
+
// The array handle's value is the current array itself (handles.ts).
|
|
232
|
+
return rememberHandle(new Proxy(target, {
|
|
231
233
|
get(_target, prop) {
|
|
232
234
|
if (typeof prop === 'string' && MUTATING_METHODS.has(prop))
|
|
233
235
|
return mutatingMethod(read, write, prop);
|
|
@@ -256,6 +258,6 @@ export function createArrayProxy(getCurrent, commit) {
|
|
|
256
258
|
has: (_target, prop) => Reflect.has(read(), prop),
|
|
257
259
|
ownKeys: () => Reflect.ownKeys(read()),
|
|
258
260
|
getOwnPropertyDescriptor: (_target, prop) => Object.getOwnPropertyDescriptor(read(), prop),
|
|
259
|
-
});
|
|
261
|
+
}), read);
|
|
260
262
|
}
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvYXJyYXlUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyREc7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBa0IsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRiw4RUFBOEU7QUFDOUUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixNQUFNO0lBQ04sS0FBSztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtJQUNSLE1BQU07SUFDTixTQUFTO0lBQ1QsTUFBTTtJQUNOLFlBQVk7Q0FDYixDQUFDLENBQUM7QUFLSCxnRkFBZ0Y7QUFFaEY7c0VBQ3NFO0FBQ3RFLFNBQVMsT0FBTyxDQUFDLE9BQWtCLEVBQUUsSUFBcUI7SUFDeEQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM3RixDQUFDO0FBRUQsdUdBQXVH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LEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksS0FBSyxLQUFLLFNBQVM7Z0JBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN4RCxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RixPQUFPLElBQUksQ0FBQyxDQUFDLGdGQUFnRjtRQUMvRixDQUFDO1FBQ0QsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJO1lBQzFCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztLQUMzRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS9hcnJheVRyYXBzIC0tIEFycmF5IG11dGF0aW9uIGludGVyY2VwdGlvbiB2aWEgUHJveHkuXG4gKlxuICogV2hlbiBzY29wZS5pdGVtcyBpcyBhbiBhcnJheSwgd2UgcmV0dXJuIGEgUHJveHkgdGhhdCBpbnRlcmNlcHRzIG11dGF0aW5nXG4gKiBtZXRob2RzIChwdXNoLCBwb3AsIHNwbGljZSwgZXRjLikgQU5EIGluZGV4ZWQgYWNjZXNzLiBFYWNoIG11dGF0aW9uOlxuICogMS4gQ2xvbmVzIHRoZSBjdXJyZW50IGFycmF5XG4gKiAyLiBBcHBsaWVzIHRoZSBtdXRhdGlvbiB0byB0aGUgY2xvbmVcbiAqIDMuIENvbW1pdHMgdGhlIG5ldyBhcnJheSB2aWEgdGhlIGNvbW1pdCBjYWxsYmFja1xuICpcbiAqIE5vbi1tdXRhdGluZyBtZXRob2RzIChtYXAsIGZpbHRlciwgZm9yRWFjaCwgZXRjLikgcGFzcyB0aHJvdWdoIHRvIHRoZVxuICogY3VycmVudCBhcnJheSBzbmFwc2hvdCB3aXRob3V0IGludGVyY2VwdGlvbi5cbiAqXG4gKiBUaGUgb3JpZ2luYWwgYXJyYXkgaW4gc3RhdGUgaXMgTkVWRVIgbXV0YXRlZCBkaXJlY3RseSAtLSBhbGwgd3JpdGVzIGdvXG4gKiB0aHJvdWdoIHRoZSBjb21taXQgY2FsbGJhY2sgd2hpY2ggY2FsbHMgc2V0VmFsdWUvdXBkYXRlVmFsdWUuXG4gKlxuICog4pSA4pSAIE9ubHkgdGhlIEFTU0lHTkVEIHZhbHVlIGlzIHVud3JhcHBlZCAoOS4yMy4wKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIExhbmRtaW5lIDEgc2F5cyB0aGUgc2V0IHRyYXAgSlNPTi1yb3VuZC10cmlwcyB0aGUgdmFsdWUgdGhlIGNhbGxlciBoYW5kZWRcbiAqIGluLiBGb3IgYW4gYXJyYXkgdGhhdCBpcyB0aGUgaW5kZXgtYXNzaWduZWQgZWxlbWVudCwgYSBtdXRhdGluZyBtZXRob2Qnc1xuICogYXJndW1lbnRzIChgcHVzaCh4KWAsIGBzcGxpY2UoaSwgbiwgLi4uaXRlbXMpYCwgYGZpbGwoeClgKSwgb3IgdGhlIGxlYWYgYW5cbiAqIGVsZW1lbnQgcHJveHkgd3JpdGVzIOKAlCBhbmQgaXQgaXMgdW53cmFwcGVkIEhFUkUsIGF0IHRoZSB0cmFwIHRoYXQgcmVjZWl2ZXNcbiAqIGl0LiBUaGUgcmVidWlsdCBhcnJheSBpcyBoYW5kZWQgdG8gYGNvbW1pdGAgYXMgaXQgaXM6IGV2ZXJ5IHNpYmxpbmcgdGhlXG4gKiBjYWxsZXIgZGlkIG5vdCB0b3VjaCBwYXNzZXMgdGhyb3VnaCBieSByZWZlcmVuY2UsIGBEYXRlYHMgYW5kIGBNYXBgc1xuICogaW50YWN0LiBVbnRpbCA5LjIzLjAgdGhlIGNvbW1pdCBjYWxsYmFja3Mgcm91bmQtdHJpcHBlZCB0aGUgV0hPTEUgcmVidWlsdFxuICogYXJyYXksIHdoaWNoIHN0cmluZ2lmaWVkIHVudG91Y2hlZCBzaWJsaW5ncyBhbmQgd2FzIE8oTikgcGVyIGVsZW1lbnQgd3JpdGUuXG4gKiBUaGUgb25lIHRoaW5nIHRoZSByb3VuZC10cmlwIHVzZWQgdG8gZG8gZm9yIHRoZSBhcnJheSdzIG93biBzaGFwZSDigJQgYW5cbiAqIGVtcHRpZWQgb3Igc2tpcHBlZCBzbG90IGJlY2FtZSBgbnVsbGAsIEpTT04ncyBvbmx5IHNwZWxsaW5nIGZvciBhIGhvbGUg4oCUXG4gKiBpcyBub3cgZG9uZSBleHBsaWNpdGx5IGJ5IHRoZSB0cmFwcyB0aGF0IGNhbiBjcmVhdGUgb25lIChgZGVsZXRlIGFycltpXWAsXG4gKiBgYXJyW2ldID0gdmAgcGFzdCB0aGUgZW5kLCBgYXJyLmxlbmd0aCA9IG5gIGdyb3d0aCkuXG4gKlxuICog4pSA4pSAIEluZGV4ZWQgYWNjZXNzIGlzIHBhcnQgb2YgdGhlIGNoYWluICg5LjIyLjApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYGFycltpXWAgdXNlZCB0byBoYW5kIGJhY2sgdGhlIFJBVyBlbGVtZW50LCB3aGljaCBicm9rZSB0aGUgcHJveHkgY2hhaW4gYXRcbiAqIGV4YWN0bHkgdGhlIHBvaW50IHVzZXJzIHdyaXRlIHRocm91Z2ggaXQ6IGBvcmRlci5saW5lc1swXS5xdHkgPSA0YCB3YXMgYW5cbiAqIGluLXBsYWNlIG11dGF0aW9uIG9mIGEgYm9ycm93ZWQgcmVhZCDigJQgbm8gdHJhcCwgbm8gdHJhY2Ugcm93LCBubyBjb21taXQuXG4gKiBCZWZvcmUgdGhlIHN0YWdlJ3MgZmlyc3Qgc3RhZ2VkIHdyaXRlIHRoYXQgYm9ycm93ZWQgdmFsdWUgSVMgY29tbWl0dGVkXG4gKiBzaGFyZWQgbWVtb3J5LCBzbyB0aGUgbXV0YXRpb24gbW92ZWQgc3RhdGUgd2hpbGUgdGhlIGxvZyBzdGF5ZWQgZW1wdHk7IGFmdGVyXG4gKiBpdCwgdGhlIG11dGF0aW9uIGxhbmRlZCBpbiB0aGUgcHJpdmF0ZSBidWZmZXIgY2xvbmUgYW5kIHdhcyBkcm9wcGVkLiBTYW1lXG4gKiBleHByZXNzaW9uLCB0d28gc2lsZW50IG91dGNvbWVzLlxuICpcbiAqIE5vdyBhbiBpbmRleGVkIHJlYWQgb2YgYSB3cmFwcGFibGUgZWxlbWVudCByZXR1cm5zIGFuIEVMRU1FTlQgUFJPWFkgdGhhdFxuICogYWNjdW11bGF0ZXMgdGhlIHBhdGggaW5zaWRlIHRoZSBlbGVtZW50IGFuZCwgb24gd3JpdGUsIHJlYnVpbGRzIHRoZSBhcnJheVxuICogaW1tdXRhYmx5IChgc3RydWN0dXJhbFdyaXRlLnNldEluUGF0aGAsIGJlaGluZCBgd3JpdGVUcmFwcy5lbGVtZW50U2lua2ApXG4gKiBhbmQgaGFuZHMgdGhlIHdob2xlIG5ldyBhcnJheSB0byBgY29tbWl0YCDigJQgdGhlIHNhbWUgZnVubmVsIGBwdXNoYCBhbHJlYWR5XG4gKiB1c2VkLiBPbmUgd3JpdGUgcGF0aCBmb3IgdGhlIHdob2xlIGFycmF5LCB3aGF0ZXZlciBkZXB0aCBpdCBpcyBhZGRyZXNzZWQgYXQuXG4gKlxuICog4pSA4pSAIFdoYXQgaXMgc3RpbGwgTk9UIHNlZW4gKGJ5IGRlc2lnbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBFbGVtZW50cyByZWFjaGVkIFdJVEhPVVQgYW4gaW5kZXgg4oCUIGBmaW5kKClgLCBgZmlsdGVyKClgLCBgZm9y4oCmb2ZgLFxuICogYGZvckVhY2hgLCBkZXN0cnVjdHVyaW5nIOKAlCBhcmUgaGFuZGVkIGJhY2sgcmF3LCBiZWNhdXNlIHdyYXBwaW5nIHRoZW0gd291bGRcbiAqIG1lYW4gcmV0dXJuaW5nIHByb3hpZXMgb3V0IG9mIGV2ZXJ5IHJlYWQgbWV0aG9kIChgbWFwYCB3b3VsZCBidWlsZCBhbiBhcnJheVxuICogb2YgcHJveGllcykgZm9yIGEgY29zdCB0aGUgbGlicmFyeSBzaG91bGQgbm90IHBheS4gTXV0YXRpbmcgb25lIG9mIHRob3NlIGlzXG4gKiBub3QgbG9zdCBpbiBzaWxlbmNlIGVpdGhlcjogYFN0YWdlQ29udGV4dGAgY29tcGFyZXMgd2hhdCBhIHN0YWdlIFJFQUQgd2l0aFxuICogd2hhdCB0aGUgdmFsdWUgaG9sZHMgYXQgY29tbWl0IGFuZCwgaW4gZGV2IG1vZGUsIHdhcm5zIHdpdGggdGhlIGV4YWN0IHBhdGguXG4gKiBTZWUgc3JjL2xpYi9yZWFjdGl2ZS9SRUFETUUubWQuXG4gKlxuICog4pSA4pSAIFNoYXBlICg5LjIzLjEpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYGNyZWF0ZUFycmF5UHJveHlgIGFuZCBgY3JlYXRlRWxlbWVudFByb3h5YCBhcmUgT1JDSEVTVFJBVE9SUzogdGhleSB3aXJlXG4gKiB0cmFwcyBhbmQgaG9sZCB0aGUgY2FjaGVzLiBFdmVyeSB0cmFwIGJvZHkgaXMgYSBuYW1lZCBsZWFmIGJlbG93IOKAlCBvbmVcbiAqIGNvbmNlcm4gZWFjaCDigJQgYW5kIHRoZSBlbGVtZW50IHByb3h5J3Mgc2V0L2RlbGV0ZS9nZXQgdHJhcHMgYXJlIHRoZSBTQU1FXG4gKiBsZWF2ZXMgdGhlIG5lc3RlZCBhbmQgdGVybWluYWwgb2JqZWN0IHByb3hpZXMgdXNlIChgd3JpdGVUcmFwcy50c2AsXG4gKiBgbGl2ZVZpZXcudHNgKSwgb3ZlciBhbiB7QGxpbmsgZWxlbWVudFNpbmt9LiBBIGZpeCBsYW5kcyBpbiBhIGxlYWYgb25jZS5cbiAqL1xuXG5pbXBvcnQgeyBzaG91bGRXcmFwV2l0aFByb3h5IH0gZnJvbSAnLi9hbGxvd2xpc3QuanMnO1xuaW1wb3J0IHsgbGl2ZUdldFRyYXAsIGxpdmVJbnNwZWN0aW9uVHJhcHMsIGxpdmVPYmplY3QsIE1lbWJlckNhY2hlIH0gZnJvbSAnLi9saXZlVmlldy5qcyc7XG5pbXBvcnQgeyB1bndyYXBQcm94eSB9IGZyb20gJy4vc3RydWN0dXJhbFdyaXRlLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCBlbGVtZW50U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLyoqIE1ldGhvZHMgdGhhdCBtdXRhdGUgdGhlIGFycmF5IGluLXBsYWNlLiBXZSBpbnRlcmNlcHQgYW5kIGNvcHktb24td3JpdGUuICovXG5jb25zdCBNVVRBVElOR19NRVRIT0RTID0gbmV3IFNldChbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnLFxuICAnZmlsbCcsXG4gICdjb3B5V2l0aGluJyxcbl0pO1xuXG50eXBlIFJlYWQgPSAoKSA9PiB1bmtub3duW107XG50eXBlIFdyaXRlID0gKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZDtcblxuLy8gLS0gTGVhdmVzOiByZWFkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFdIWSBgTnVtYmVyKHByb3ApYDogdGhlIGhpc3RvcmljYWwgcmVhZGluZyBvZiBhbiBpbmRleCBuYW1lIOKAlCBgJzAxJ2AgYW5kXG4gKiAgYCcnYCBhZGRyZXNzIHNsb3RzIDEgYW5kIDAsIGFzIHRoZXkgYWx3YXlzIGhhdmUuIEluIHJhbmdlIG9ubHkuICovXG5mdW5jdGlvbiBpbmRleEluKGN1cnJlbnQ6IHVua25vd25bXSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgaW5kZXggPSBOdW1iZXIocHJvcCk7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSAmJiBpbmRleCA+PSAwICYmIGluZGV4IDwgY3VycmVudC5sZW5ndGggPyBpbmRleCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgbm9uLW5lZ2F0aXZlIGludGVnZXIgaW5kZXggbmFtZWQgYnkgYHByb3BgIChhbnkgcmFuZ2Ug4oCUIGEgd3JpdGUgcGFzdCB0aGUgZW5kIGdyb3dzIHRoZSBhcnJheSkuICovXG5mdW5jdGlvbiBpbmRleE5hbWVkKHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGluZGV4ID0gTnVtYmVyKHByb3ApO1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgJiYgaW5kZXggPj0gMCA/IGluZGV4IDogdW5kZWZpbmVkO1xufVxuXG4vKiogV0hZOiBhIG5vbi1tdXRhdGluZyByZWFkIGFuc3dlcnMgZnJvbSB0aGUgQ1VSUkVOVCBhcnJheSwgbmV2ZXIgdGhlXG4gKiAgY3JlYXRpb24tdGltZSB0YXJnZXQg4oCUIGEgbWV0aG9kIGlzIGJvdW5kIHRvIGl0LCBhbnl0aGluZyBlbHNlIHJlYWQgb2ZmIGl0LiAqL1xuZnVuY3Rpb24gYm91bmRNZW1iZXIoY3VycmVudDogdW5rbm93bltdLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgY29uc3QgdmFsID0gKGN1cnJlbnQgYXMgYW55KVtwcm9wXTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicgPyB2YWwuYmluZChjdXJyZW50KSA6IHZhbDtcbn1cblxudHlwZSBFbGVtZW50Q2FjaGUgPSBNYXA8bnVtYmVyLCB7IHJlZjogdW5rbm93bjsgcHJveHk6IHVua25vd24gfT47XG5cbi8qKiBXSFkgdGhlIGNhY2hlOiByZWFkaW5nIGBsaW5lc1tpXS5xdHlgIGluIGEgbG9vcCBtdXN0IG5vdCBhbGxvY2F0ZSBhIHByb3h5XG4gKiAgcGVyIHJlYWQsIGFuZCBgbGluZXNbMF0gPT09IGxpbmVzWzBdYCBtdXN0IGhvbGQgd2l0aGluIGEgc3RhZ2UuIFZhbGlkYXRlZCBieVxuICogIHJhdyBpZGVudGl0eSDigJQgYSBjb21taXQgcmVwbGFjZXMgdGhlIGFycmF5LCB0aGUgcmVmIGNoZWNrIG1pc3NlcywgYW5kIGFcbiAqICBmcmVzaCBwcm94eSBpcyBidWlsdCBvdmVyIHRoZSBuZXcgZWxlbWVudC4gQSBwcmltaXRpdmUgaXMgaGFuZGVkIGJhY2sgcmF3LiAqL1xuZnVuY3Rpb24gY2FjaGVkRWxlbWVudChjYWNoZTogRWxlbWVudENhY2hlLCBlbGVtZW50OiB1bmtub3duLCBpbmRleDogbnVtYmVyLCByZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUpOiB1bmtub3duIHtcbiAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGluZGV4KTtcbiAgaWYgKGNhY2hlZCAmJiBjYWNoZWQucmVmID09PSBlbGVtZW50KSByZXR1cm4gY2FjaGVkLnByb3h5O1xuICBjb25zdCB3cmFwcGVkID0gd3JhcEVsZW1lbnRNZW1iZXIoZWxlbWVudCwgZWxlbWVudFNpbmsocmVhZCwgd3JpdGUsIGluZGV4KSwgW10sIG5ldyBTZXQ8b2JqZWN0PigpKTtcbiAgY2FjaGUuc2V0KGluZGV4LCB7IHJlZjogZWxlbWVudCwgcHJveHk6IHdyYXBwZWQgfSk7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG4vLyAtLSBMZWF2ZXM6IHdyaXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogU2xvdHMgZnJvbSB0aGUgY3VycmVudCBlbmQgdXAgdG8gKG5vdCBpbmNsdWRpbmcpIGB1cFRvYCBiZWNvbWUgYG51bGxgIOKAlFxuICogIHRoZSBKU09OIHNwZWxsaW5nIG9mIGEgaG9sZSwgd2hpY2ggaXMgd2hhdCB0aGUgd2hvbGUtYXJyYXkgcm91bmQtdHJpcCB1c2VkXG4gKiAgdG8gcHJvZHVjZSBmb3IgdGhlbS4gTm8tb3Agd2hlbiBgdXBUb2AgaXMgd2l0aGluIHRoZSBhcnJheS4gKi9cbmZ1bmN0aW9uIGZpbGxIb2xlcyhhcnI6IHVua25vd25bXSwgdXBUbzogbnVtYmVyKTogdm9pZCB7XG4gIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoOyBpIDwgdXBUbzsgaSsrKSBhcnJbaV0gPSBudWxsO1xufVxuXG4vKiogV0hZOiBhIG11dGF0aW5nIG1ldGhvZCBydW5zIG9uIGEgQ09QWSwgd2l0aCBpdHMgYXJndW1lbnRzIHVud3JhcHBlZCAodGhleVxuICogIGFyZSB0aGUgYXNzaWduZWQgdmFsdWVzOyBhIG51bWJlciBvciBhIGNvbXBhcmF0b3IgcGFzc2VzIHRocm91Z2gpLCBhbmQgdGhlXG4gKiAgY29weSBpcyBjb21taXR0ZWQgd2hvbGUuIFRoZSBhcnJheSBpbiBzdGF0ZSBpcyBuZXZlciB0b3VjaGVkLiAqL1xuZnVuY3Rpb24gbXV0YXRpbmdNZXRob2QocmVhZDogUmVhZCwgd3JpdGU6IFdyaXRlLCBuYW1lOiBzdHJpbmcpOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgY2xvbmUgPSBbLi4ucmVhZCgpXTtcbiAgICBjb25zdCByZXN1bHQgPSAoY2xvbmUgYXMgYW55KVtuYW1lXSguLi5hcmdzLm1hcCh1bndyYXBQcm94eSkpO1xuICAgIHdyaXRlKGNsb25lKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKiogYGFycltpXSA9IHZgOiBjb3B5LCBgbnVsbGAgdGhlIHNsb3RzIGEgd3JpdGUgcGFzdCB0aGUgZW5kIHNraXBzLCBwbGFjZSB0aGUgdW53cmFwcGVkIHZhbHVlLCBjb21taXQuICovXG5mdW5jdGlvbiBzZXRJbmRleChyZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUsIGluZGV4OiBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGNvbnN0IGNsb25lID0gWy4uLnJlYWQoKV07XG4gIGZpbGxIb2xlcyhjbG9uZSwgaW5kZXgpO1xuICBjbG9uZVtpbmRleF0gPSB1bndyYXBQcm94eSh2YWx1ZSk7XG4gIHdyaXRlKGNsb25lKTtcbn1cblxuLyoqIGBhcnIubGVuZ3RoID0gbmA6IGNvcHksIGBudWxsYCB0aGUgc2xvdHMgZ3Jvd3RoIGFkZHMsIHRydW5jYXRlIG9yIGV4dGVuZCwgY29tbWl0LiAqL1xuZnVuY3Rpb24gc2V0TGVuZ3RoKHJlYWQ6IFJlYWQsIHdyaXRlOiBXcml0ZSwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgY2xvbmUgPSBbLi4ucmVhZCgpXTtcbiAgZmlsbEhvbGVzKGNsb25lLCBsZW5ndGgpO1xuICBjbG9uZS5sZW5ndGggPSBsZW5ndGg7XG4gIHdyaXRlKGNsb25lKTtcbn1cblxuLyoqIFdIWTogd2l0aG91dCB0aGlzIHRyYXAgYGRlbGV0ZSBpdGVtc1syXWAgcmVhY2hlcyB0aGUgUkFXIGFycmF5IGNhcHR1cmVkXG4gKiAgYXMgdGhlIHByb3h5IHRhcmdldCDigJQgY29tbWl0dGVkIHN0YXRlLCBubyBjb21taXQgcmVjb3JkLiBKUyBgZGVsZXRlYCBvbiBhblxuICogIGluZGV4IGxlYXZlcyB0aGUgc2xvdCBlbXB0eSBhbmQgdGhlIGxlbmd0aCB1bmNoYW5nZWQsIGFuZCBzbyBkb2VzIHRoaXM6XG4gKiAgdGhlIGVtcHRpZWQgc2xvdCBjb21taXRzIGFzIGBudWxsYCwgSlNPTidzIG9ubHkgc3BlbGxpbmcgZm9yIGEgaG9sZS4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNsb3QocmVhZDogUmVhZCwgd3JpdGU6IFdyaXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgY29uc3QgY2xvbmUgPSBbLi4ucmVhZCgpXTtcbiAgY29uc3QgaW5kZXggPSB0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycgPyBOdW1iZXIocHJvcCkgOiBOYU47XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSAmJiBpbmRleCA+PSAwICYmIGluZGV4IDwgY2xvbmUubGVuZ3RoKSBjbG9uZVtpbmRleF0gPSBudWxsO1xuICBlbHNlIGRlbGV0ZSAoY2xvbmUgYXMgYW55KVtwcm9wXTtcbiAgd3JpdGUoY2xvbmUpO1xufVxuXG4vLyAtLSBMZWF2ZXM6IHRoZSBjaGFpbiBiZWxvdyBhbiBlbGVtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogV0hZOiBhbiBhcnJheSBhbnl3aGVyZSBiZWxvdyBhIHNpbmsncyByb290IGlzIE9ORSB3cml0ZSBwYXRoIOKAlCBpdCByZWFkc1xuICogdGhyb3VnaCB0aGUgc2luayBhbmQgY29tbWl0cyB0aGUgV0hPTEUgbmV3IGFycmF5IGJhY2sgdGhyb3VnaCBpdCwgc29cbiAqIGBwdXNoYCB0aHJlZSBsZXZlbHMgZG93biBhbmQgYGFycltpXS54ID0gdmAgYXQgdGhlIHRvcCBzaGFyZSBhIGZ1bm5lbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5UHJveHlBdChzaW5rOiBXcml0ZVNpbmssIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIGNyZWF0ZUFycmF5UHJveHkoXG4gICAgKCkgPT4gKHNpbmsucmVhZEF0KHBhdGgpIGFzIHVua25vd25bXSkgPz8gW10sXG4gICAgKG5leHQpID0+IHNpbmsucHV0KHBhdGgsIG5leHQpLFxuICApO1xufVxuXG4vKipcbiAqIFdyYXAgYSB2YWx1ZSByZWFkIG91dCBvZiBhbiBlbGVtZW50OiBhcnJheXMgYmVjb21lIGFycmF5IHByb3hpZXMgd2hvc2VcbiAqIGNvbW1pdHMgcm91dGUgYmFjayB0aHJvdWdoIHRoZSBvd25pbmcgYXJyYXksIHBsYWluIG9iamVjdHMgYmVjb21lIGVsZW1lbnRcbiAqIHByb3hpZXMgb25lIGxldmVsIGRlZXBlciwgZXZlcnl0aGluZyBlbHNlIGlzIHJldHVybmVkIGFzLWlzLiBBIHZhbHVlIGFscmVhZHlcbiAqIG9uIHRoZSBhY2Nlc3MgY2hhaW4gKGEgY3ljbGUpIGlzIHJldHVybmVkIHJhdyDigJQgdGhlIHNhbWUgYmFjay1lZGdlIHRoZVxuICogbmVzdGVkLW9iamVjdCB0ZXJtaW5hbCBwcm94eSB0YWtlcy5cbiAqL1xuZnVuY3Rpb24gd3JhcEVsZW1lbnRNZW1iZXIodmFsdWU6IHVua25vd24sIHNpbms6IFdyaXRlU2luaywgcGF0aDogc3RyaW5nW10sIHZpc2l0ZWQ6IFNldDxvYmplY3Q+KTogdW5rbm93biB7XG4gIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgYnJhbmNoID0gbmV3IFNldCh2aXNpdGVkKTtcbiAgYnJhbmNoLmFkZCh2YWx1ZSBhcyBvYmplY3QpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgcGF0aCk7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50UHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIGJyYW5jaCk7XG59XG5cbi8vIC0tIE9yY2hlc3RyYXRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUHJveHkgb3ZlciBvbmUgT0JKRUNUIGVsZW1lbnQgKG9yIGFuIG9iamVjdCBuZXN0ZWQgaW5zaWRlIG9uZSksIGNhcnJ5aW5nIHRoZVxuICogcGF0aCBmcm9tIHRoZSBlbGVtZW50IGRvd24gdG8gaXQuIFJlYWRzIHJlY3Vyc2U7IHdyaXRlcyBnbyBiYWNrIG91dCB0aHJvdWdoXG4gKiB0aGUgb3duaW5nIGFycmF5J3MgY29tbWl0IGNhbGxiYWNrICh0aGUge0BsaW5rIGVsZW1lbnRTaW5rfSkuXG4gKlxuICogUkVBRFMgQVJFIExJVkUuIEV2ZXJ5IHdyaXRlIHJlYnVpbGRzIHRoZSBhcnJheSBpbW11dGFibHksIHNvIHRoZSBvYmplY3QgdGhlXG4gKiBwcm94eSB3YXMgY3JlYXRlZCBvdmVyIGlzIHRoZSBQUkUtd3JpdGUgZWxlbWVudCBmb3IgZXZlciBhZnRlcjsgYSBoZWxkXG4gKiBoYW5kbGUgdGhhdCByZWFkIGZyb20gaXQgc2F3IGl0cyBvd24gd3JpdGVzIHZhbmlzaCAoYGxpbmUubiArPSAxYCB0d2ljZVxuICogZ2F2ZSAyLCBgbGluZS50b3RhbCA9IGxpbmUucXR5ICogMTBgIHVzZWQgdGhlIG9sZCBgcXR5YCwgYCd4JyBpbiBsaW5lYCB3YXNcbiAqIGZhbHNlIHJpZ2h0IGFmdGVyIGBsaW5lLnggPSAxYCkuIEV2ZXJ5IHRyYXAgdGhlcmVmb3JlIHJlc29sdmVzIHRoZSBlbGVtZW50XG4gKiB0aHJvdWdoIHRoZSBzaW5rIGZpcnN0LCBhbmQgZmFsbHMgYmFjayB0byB0aGUgY2FwdHVyZWQgb2JqZWN0IG9ubHkgd2hlblxuICogdGhlIHBhdGggbm8gbG9uZ2VyIGV4aXN0cyAodGhlIHNsb3Qgd2FzIGVtcHRpZWQgb3IgdGhlIGFycmF5IHNocmFuaykg4oCUIHRoZVxuICogc2FtZSByZWFkLXlvdXItd3JpdGVzIHRoZSBhcnJheSBwcm94eSBpdHNlbGYgaGFzIGFsd2F5cyBoYWQsIGFuZCB0aGUgc2FtZVxuICogbGF3IHRoZSBuZXN0ZWQgYW5kIHRlcm1pbmFsIG9iamVjdCBwcm94aWVzIGZvbGxvdyAobGl2ZVZpZXcudHMpLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50UHJveHkoXG4gIHJhdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICB2aXNpdGVkOiBTZXQ8b2JqZWN0Pixcbik6IHVua25vd24ge1xuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KHJhdywgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgcmV0dXJuIG5ldyBQcm94eShyYXcsIHtcbiAgICBnZXQ6IGxpdmVHZXRUcmFwKGxpdmUsIHNlZ21lbnRzLCAodmFsdWUsIHBhdGgpID0+IHdyYXBFbGVtZW50TWVtYmVyKHZhbHVlLCBzaW5rLCBwYXRoLCB2aXNpdGVkKSwgbWVtYmVycyksXG4gICAgc2V0OiBzaW5rU2V0VHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAuLi5saXZlSW5zcGVjdGlvblRyYXBzKGxpdmUpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJveHkgb3ZlciBhbiBhcnJheSB0aGF0IGludGVyY2VwdHMgbXV0YXRpbmcgb3BlcmF0aW9ucy5cbiAqXG4gKiBUaGUgYWN0dWFsIGN1cnJlbnQgYXJyYXkgaXMgdGhlIFByb3h5IHRhcmdldDogTm9kZS5qcyBjb25zb2xlLmxvZyBpbnNwZWN0c1xuICogdGhlIHRhcmdldCBkaXJlY3RseSAoYnlwYXNzZXMgUHJveHkgdHJhcHMpLCBzbyB0aGUgcmVhbCBhcnJheSBzaG93cyBjb3JyZWN0XG4gKiB2YWx1ZXMuIFRoZSB0YXJnZXQgcmVmZXJlbmNlIGlzIGZpeGVkIGF0IGNyZWF0aW9uIHRpbWUg4oCUIGFmdGVyIG11dGF0aW9ucyxcbiAqIHRoZSBwcm94eSByZXR1cm5zIGEgbmV3IHByb3h5ICh2aWEgY2FjaGUgaW52YWxpZGF0aW9uKSB3aXRoIHRoZSBmcmVzaCBhcnJheVxuICogYXMgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSBnZXRDdXJyZW50IC0gUmV0dXJucyB0aGUgY3VycmVudCBhcnJheSBzbmFwc2hvdCBmcm9tIHN0YXRlXG4gKiBAcGFyYW0gY29tbWl0IC0gQ2FsbGVkIHdpdGggdGhlIG5ldyBhcnJheSBhZnRlciBhIG11dGF0aW9uICh0cmlnZ2VycyBzZXRWYWx1ZSlcbiAqIEByZXR1cm5zIFByb3hpZWQgYXJyYXkgd2l0aCBjb3B5LW9uLXdyaXRlIHNlbWFudGljc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXJyYXlQcm94eTxUPihnZXRDdXJyZW50OiAoKSA9PiBUW10sIGNvbW1pdDogKG5ld0FycmF5OiBUW10pID0+IHZvaWQpOiBUW10ge1xuICBjb25zdCB0YXJnZXQgPSBnZXRDdXJyZW50KCkgYXMgVFtdO1xuICBjb25zdCByZWFkID0gZ2V0Q3VycmVudCBhcyB1bmtub3duIGFzIFJlYWQ7XG4gIGNvbnN0IHdyaXRlID0gY29tbWl0IGFzIHVua25vd24gYXMgV3JpdGU7XG4gIGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQsIHtcbiAgICBnZXQoX3RhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJyAmJiBNVVRBVElOR19NRVRIT0RTLmhhcyhwcm9wKSkgcmV0dXJuIG11dGF0aW5nTWV0aG9kKHJlYWQsIHdyaXRlLCBwcm9wKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSByZWFkKCk7XG4gICAgICBpZiAocHJvcCA9PT0gJ2xlbmd0aCcpIHJldHVybiBjdXJyZW50Lmxlbmd0aDtcbiAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhJbihjdXJyZW50LCBwcm9wKTtcbiAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gY2FjaGVkRWxlbWVudChlbGVtZW50cywgY3VycmVudFtpbmRleF0sIGluZGV4LCByZWFkLCB3cml0ZSk7XG4gICAgICBpZiAocHJvcCA9PT0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSkgcmV0dXJuICgpID0+IGN1cnJlbnQ7XG4gICAgICByZXR1cm4gYm91bmRNZW1iZXIoY3VycmVudCwgcHJvcCk7XG4gICAgfSxcbiAgICBzZXQoX3RhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhOYW1lZChwcm9wKTtcbiAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSBzZXRJbmRleChyZWFkLCB3cml0ZSwgaW5kZXgsIHZhbHVlKTtcbiAgICAgIGVsc2UgaWYgKHByb3AgPT09ICdsZW5ndGgnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHNldExlbmd0aChyZWFkLCB3cml0ZSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIGFueSBvdGhlciBzZXQgaXMgaWdub3JlZCAoYW4gZXhwYW5kbyBvbiBhbiBhcnJheSBpcyBvdXQgb2YgY29udHJhY3Qg4oCUIFJFQURNRSlcbiAgICB9LFxuICAgIGRlbGV0ZVByb3BlcnR5KF90YXJnZXQsIHByb3ApIHtcbiAgICAgIGRlbGV0ZVNsb3QocmVhZCwgd3JpdGUsIHByb3ApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBoYXM6IChfdGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0LmhhcyhyZWFkKCksIHByb3ApLFxuICAgIG93bktleXM6ICgpID0+IFJlZmxlY3Qub3duS2V5cyhyZWFkKCkpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKF90YXJnZXQsIHByb3ApID0+IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmVhZCgpLCBwcm9wKSxcbiAgfSk7XG59XG4iXX0=
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvYXJyYXlUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyREc7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFrQixXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNGLDhFQUE4RTtBQUM5RSxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQy9CLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBQ1IsTUFBTTtJQUNOLFNBQVM7SUFDVCxNQUFNO0lBQ04sWUFBWTtDQUNiLENBQUMsQ0FBQztBQUtILGdGQUFnRjtBQUVoRjtzRUFDc0U7QUFDdEUsU0FBUyxPQUFPLENBQUMsT0FBa0IsRUFBRSxJQUFxQjtJQUN4RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzdGLENBQUM7QUFF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UUFDRCxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTO2dCQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDeEQsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkYsT0FBTyxJQUFJLENBQUMsQ0FBQyxnRkFBZ0Y7UUFDL0YsQ0FBQztRQUNELGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSTtZQUMxQixVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztRQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0Qyx3QkFBd0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUM7S0FDM0YsQ0FBQyxFQUNGLElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvYXJyYXlUcmFwcyAtLSBBcnJheSBtdXRhdGlvbiBpbnRlcmNlcHRpb24gdmlhIFByb3h5LlxuICpcbiAqIFdoZW4gc2NvcGUuaXRlbXMgaXMgYW4gYXJyYXksIHdlIHJldHVybiBhIFByb3h5IHRoYXQgaW50ZXJjZXB0cyBtdXRhdGluZ1xuICogbWV0aG9kcyAocHVzaCwgcG9wLCBzcGxpY2UsIGV0Yy4pIEFORCBpbmRleGVkIGFjY2Vzcy4gRWFjaCBtdXRhdGlvbjpcbiAqIDEuIENsb25lcyB0aGUgY3VycmVudCBhcnJheVxuICogMi4gQXBwbGllcyB0aGUgbXV0YXRpb24gdG8gdGhlIGNsb25lXG4gKiAzLiBDb21taXRzIHRoZSBuZXcgYXJyYXkgdmlhIHRoZSBjb21taXQgY2FsbGJhY2tcbiAqXG4gKiBOb24tbXV0YXRpbmcgbWV0aG9kcyAobWFwLCBmaWx0ZXIsIGZvckVhY2gsIGV0Yy4pIHBhc3MgdGhyb3VnaCB0byB0aGVcbiAqIGN1cnJlbnQgYXJyYXkgc25hcHNob3Qgd2l0aG91dCBpbnRlcmNlcHRpb24uXG4gKlxuICogVGhlIG9yaWdpbmFsIGFycmF5IGluIHN0YXRlIGlzIE5FVkVSIG11dGF0ZWQgZGlyZWN0bHkgLS0gYWxsIHdyaXRlcyBnb1xuICogdGhyb3VnaCB0aGUgY29tbWl0IGNhbGxiYWNrIHdoaWNoIGNhbGxzIHNldFZhbHVlL3VwZGF0ZVZhbHVlLlxuICpcbiAqIOKUgOKUgCBPbmx5IHRoZSBBU1NJR05FRCB2YWx1ZSBpcyB1bndyYXBwZWQgKDkuMjMuMCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBMYW5kbWluZSAxIHNheXMgdGhlIHNldCB0cmFwIEpTT04tcm91bmQtdHJpcHMgdGhlIHZhbHVlIHRoZSBjYWxsZXIgaGFuZGVkXG4gKiBpbi4gRm9yIGFuIGFycmF5IHRoYXQgaXMgdGhlIGluZGV4LWFzc2lnbmVkIGVsZW1lbnQsIGEgbXV0YXRpbmcgbWV0aG9kJ3NcbiAqIGFyZ3VtZW50cyAoYHB1c2goeClgLCBgc3BsaWNlKGksIG4sIC4uLml0ZW1zKWAsIGBmaWxsKHgpYCksIG9yIHRoZSBsZWFmIGFuXG4gKiBlbGVtZW50IHByb3h5IHdyaXRlcyDigJQgYW5kIGl0IGlzIHVud3JhcHBlZCBIRVJFLCBhdCB0aGUgdHJhcCB0aGF0IHJlY2VpdmVzXG4gKiBpdC4gVGhlIHJlYnVpbHQgYXJyYXkgaXMgaGFuZGVkIHRvIGBjb21taXRgIGFzIGl0IGlzOiBldmVyeSBzaWJsaW5nIHRoZVxuICogY2FsbGVyIGRpZCBub3QgdG91Y2ggcGFzc2VzIHRocm91Z2ggYnkgcmVmZXJlbmNlLCBgRGF0ZWBzIGFuZCBgTWFwYHNcbiAqIGludGFjdC4gVW50aWwgOS4yMy4wIHRoZSBjb21taXQgY2FsbGJhY2tzIHJvdW5kLXRyaXBwZWQgdGhlIFdIT0xFIHJlYnVpbHRcbiAqIGFycmF5LCB3aGljaCBzdHJpbmdpZmllZCB1bnRvdWNoZWQgc2libGluZ3MgYW5kIHdhcyBPKE4pIHBlciBlbGVtZW50IHdyaXRlLlxuICogVGhlIG9uZSB0aGluZyB0aGUgcm91bmQtdHJpcCB1c2VkIHRvIGRvIGZvciB0aGUgYXJyYXkncyBvd24gc2hhcGUg4oCUIGFuXG4gKiBlbXB0aWVkIG9yIHNraXBwZWQgc2xvdCBiZWNhbWUgYG51bGxgLCBKU09OJ3Mgb25seSBzcGVsbGluZyBmb3IgYSBob2xlIOKAlFxuICogaXMgbm93IGRvbmUgZXhwbGljaXRseSBieSB0aGUgdHJhcHMgdGhhdCBjYW4gY3JlYXRlIG9uZSAoYGRlbGV0ZSBhcnJbaV1gLFxuICogYGFycltpXSA9IHZgIHBhc3QgdGhlIGVuZCwgYGFyci5sZW5ndGggPSBuYCBncm93dGgpLlxuICpcbiAqIOKUgOKUgCBJbmRleGVkIGFjY2VzcyBpcyBwYXJ0IG9mIHRoZSBjaGFpbiAoOS4yMi4wKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIGBhcnJbaV1gIHVzZWQgdG8gaGFuZCBiYWNrIHRoZSBSQVcgZWxlbWVudCwgd2hpY2ggYnJva2UgdGhlIHByb3h5IGNoYWluIGF0XG4gKiBleGFjdGx5IHRoZSBwb2ludCB1c2VycyB3cml0ZSB0aHJvdWdoIGl0OiBgb3JkZXIubGluZXNbMF0ucXR5ID0gNGAgd2FzIGFuXG4gKiBpbi1wbGFjZSBtdXRhdGlvbiBvZiBhIGJvcnJvd2VkIHJlYWQg4oCUIG5vIHRyYXAsIG5vIHRyYWNlIHJvdywgbm8gY29tbWl0LlxuICogQmVmb3JlIHRoZSBzdGFnZSdzIGZpcnN0IHN0YWdlZCB3cml0ZSB0aGF0IGJvcnJvd2VkIHZhbHVlIElTIGNvbW1pdHRlZFxuICogc2hhcmVkIG1lbW9yeSwgc28gdGhlIG11dGF0aW9uIG1vdmVkIHN0YXRlIHdoaWxlIHRoZSBsb2cgc3RheWVkIGVtcHR5OyBhZnRlclxuICogaXQsIHRoZSBtdXRhdGlvbiBsYW5kZWQgaW4gdGhlIHByaXZhdGUgYnVmZmVyIGNsb25lIGFuZCB3YXMgZHJvcHBlZC4gU2FtZVxuICogZXhwcmVzc2lvbiwgdHdvIHNpbGVudCBvdXRjb21lcy5cbiAqXG4gKiBOb3cgYW4gaW5kZXhlZCByZWFkIG9mIGEgd3JhcHBhYmxlIGVsZW1lbnQgcmV0dXJucyBhbiBFTEVNRU5UIFBST1hZIHRoYXRcbiAqIGFjY3VtdWxhdGVzIHRoZSBwYXRoIGluc2lkZSB0aGUgZWxlbWVudCBhbmQsIG9uIHdyaXRlLCByZWJ1aWxkcyB0aGUgYXJyYXlcbiAqIGltbXV0YWJseSAoYHN0cnVjdHVyYWxXcml0ZS5zZXRJblBhdGhgLCBiZWhpbmQgYHdyaXRlVHJhcHMuZWxlbWVudFNpbmtgKVxuICogYW5kIGhhbmRzIHRoZSB3aG9sZSBuZXcgYXJyYXkgdG8gYGNvbW1pdGAg4oCUIHRoZSBzYW1lIGZ1bm5lbCBgcHVzaGAgYWxyZWFkeVxuICogdXNlZC4gT25lIHdyaXRlIHBhdGggZm9yIHRoZSB3aG9sZSBhcnJheSwgd2hhdGV2ZXIgZGVwdGggaXQgaXMgYWRkcmVzc2VkIGF0LlxuICpcbiAqIOKUgOKUgCBXaGF0IGlzIHN0aWxsIE5PVCBzZWVuIChieSBkZXNpZ24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogRWxlbWVudHMgcmVhY2hlZCBXSVRIT1VUIGFuIGluZGV4IOKAlCBgZmluZCgpYCwgYGZpbHRlcigpYCwgYGZvcuKApm9mYCxcbiAqIGBmb3JFYWNoYCwgZGVzdHJ1Y3R1cmluZyDigJQgYXJlIGhhbmRlZCBiYWNrIHJhdywgYmVjYXVzZSB3cmFwcGluZyB0aGVtIHdvdWxkXG4gKiBtZWFuIHJldHVybmluZyBwcm94aWVzIG91dCBvZiBldmVyeSByZWFkIG1ldGhvZCAoYG1hcGAgd291bGQgYnVpbGQgYW4gYXJyYXlcbiAqIG9mIHByb3hpZXMpIGZvciBhIGNvc3QgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBwYXkuIE11dGF0aW5nIG9uZSBvZiB0aG9zZSBpc1xuICogbm90IGxvc3QgaW4gc2lsZW5jZSBlaXRoZXI6IGBTdGFnZUNvbnRleHRgIGNvbXBhcmVzIHdoYXQgYSBzdGFnZSBSRUFEIHdpdGhcbiAqIHdoYXQgdGhlIHZhbHVlIGhvbGRzIGF0IGNvbW1pdCBhbmQsIGluIGRldiBtb2RlLCB3YXJucyB3aXRoIHRoZSBleGFjdCBwYXRoLlxuICogU2VlIHNyYy9saWIvcmVhY3RpdmUvUkVBRE1FLm1kLlxuICpcbiAqIOKUgOKUgCBTaGFwZSAoOS4yMy4xKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIGBjcmVhdGVBcnJheVByb3h5YCBhbmQgYGNyZWF0ZUVsZW1lbnRQcm94eWAgYXJlIE9SQ0hFU1RSQVRPUlM6IHRoZXkgd2lyZVxuICogdHJhcHMgYW5kIGhvbGQgdGhlIGNhY2hlcy4gRXZlcnkgdHJhcCBib2R5IGlzIGEgbmFtZWQgbGVhZiBiZWxvdyDigJQgb25lXG4gKiBjb25jZXJuIGVhY2gg4oCUIGFuZCB0aGUgZWxlbWVudCBwcm94eSdzIHNldC9kZWxldGUvZ2V0IHRyYXBzIGFyZSB0aGUgU0FNRVxuICogbGVhdmVzIHRoZSBuZXN0ZWQgYW5kIHRlcm1pbmFsIG9iamVjdCBwcm94aWVzIHVzZSAoYHdyaXRlVHJhcHMudHNgLFxuICogYGxpdmVWaWV3LnRzYCksIG92ZXIgYW4ge0BsaW5rIGVsZW1lbnRTaW5rfS4gQSBmaXggbGFuZHMgaW4gYSBsZWFmIG9uY2UuXG4gKi9cblxuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IHJlbWVtYmVySGFuZGxlLCB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi9oYW5kbGVzLmpzJztcbmltcG9ydCB7IGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHsgdHlwZSBXcml0ZVNpbmssIGVsZW1lbnRTaW5rLCBzaW5rRGVsZXRlVHJhcCwgc2lua1NldFRyYXAgfSBmcm9tICcuL3dyaXRlVHJhcHMuanMnO1xuXG4vKiogTWV0aG9kcyB0aGF0IG11dGF0ZSB0aGUgYXJyYXkgaW4tcGxhY2UuIFdlIGludGVyY2VwdCBhbmQgY29weS1vbi13cml0ZS4gKi9cbmNvbnN0IE1VVEFUSU5HX01FVEhPRFMgPSBuZXcgU2V0KFtcbiAgJ3B1c2gnLFxuICAncG9wJyxcbiAgJ3NoaWZ0JyxcbiAgJ3Vuc2hpZnQnLFxuICAnc3BsaWNlJyxcbiAgJ3NvcnQnLFxuICAncmV2ZXJzZScsXG4gICdmaWxsJyxcbiAgJ2NvcHlXaXRoaW4nLFxuXSk7XG5cbnR5cGUgUmVhZCA9ICgpID0+IHVua25vd25bXTtcbnR5cGUgV3JpdGUgPSAobmV4dDogdW5rbm93bltdKSA9PiB2b2lkO1xuXG4vLyAtLSBMZWF2ZXM6IHJlYWRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogV0hZIGBOdW1iZXIocHJvcClgOiB0aGUgaGlzdG9yaWNhbCByZWFkaW5nIG9mIGFuIGluZGV4IG5hbWUg4oCUIGAnMDEnYCBhbmRcbiAqICBgJydgIGFkZHJlc3Mgc2xvdHMgMSBhbmQgMCwgYXMgdGhleSBhbHdheXMgaGF2ZS4gSW4gcmFuZ2Ugb25seS4gKi9cbmZ1bmN0aW9uIGluZGV4SW4oY3VycmVudDogdW5rbm93bltdLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBpbmRleCA9IE51bWJlcihwcm9wKTtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoaW5kZXgpICYmIGluZGV4ID49IDAgJiYgaW5kZXggPCBjdXJyZW50Lmxlbmd0aCA/IGluZGV4IDogdW5kZWZpbmVkO1xufVxuXG4vKiogQSBub24tbmVnYXRpdmUgaW50ZWdlciBpbmRleCBuYW1lZCBieSBgcHJvcGAgKGFueSByYW5nZSDigJQgYSB3cml0ZSBwYXN0IHRoZSBlbmQgZ3Jvd3MgdGhlIGFycmF5KS4gKi9cbmZ1bmN0aW9uIGluZGV4TmFtZWQocHJvcDogc3RyaW5nIHwgc3ltYm9sKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgaW5kZXggPSBOdW1iZXIocHJvcCk7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSAmJiBpbmRleCA+PSAwID8gaW5kZXggOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBXSFk6IGEgbm9uLW11dGF0aW5nIHJlYWQgYW5zd2VycyBmcm9tIHRoZSBDVVJSRU5UIGFycmF5LCBuZXZlciB0aGVcbiAqICBjcmVhdGlvbi10aW1lIHRhcmdldCDigJQgYSBtZXRob2QgaXMgYm91bmQgdG8gaXQsIGFueXRoaW5nIGVsc2UgcmVhZCBvZmYgaXQuICovXG5mdW5jdGlvbiBib3VuZE1lbWJlcihjdXJyZW50OiB1bmtub3duW10sIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IHVua25vd24ge1xuICBjb25zdCB2YWwgPSAoY3VycmVudCBhcyBhbnkpW3Byb3BdO1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHZhbC5iaW5kKGN1cnJlbnQpIDogdmFsO1xufVxuXG50eXBlIEVsZW1lbnRDYWNoZSA9IE1hcDxudW1iZXIsIHsgcmVmOiB1bmtub3duOyBwcm94eTogdW5rbm93biB9PjtcblxuLyoqIFdIWSB0aGUgY2FjaGU6IHJlYWRpbmcgYGxpbmVzW2ldLnF0eWAgaW4gYSBsb29wIG11c3Qgbm90IGFsbG9jYXRlIGEgcHJveHlcbiAqICBwZXIgcmVhZCwgYW5kIGBsaW5lc1swXSA9PT0gbGluZXNbMF1gIG11c3QgaG9sZCB3aXRoaW4gYSBzdGFnZS4gVmFsaWRhdGVkIGJ5XG4gKiAgcmF3IGlkZW50aXR5IOKAlCBhIGNvbW1pdCByZXBsYWNlcyB0aGUgYXJyYXksIHRoZSByZWYgY2hlY2sgbWlzc2VzLCBhbmQgYVxuICogIGZyZXNoIHByb3h5IGlzIGJ1aWx0IG92ZXIgdGhlIG5ldyBlbGVtZW50LiBBIHByaW1pdGl2ZSBpcyBoYW5kZWQgYmFjayByYXcuICovXG5mdW5jdGlvbiBjYWNoZWRFbGVtZW50KGNhY2hlOiBFbGVtZW50Q2FjaGUsIGVsZW1lbnQ6IHVua25vd24sIGluZGV4OiBudW1iZXIsIHJlYWQ6IFJlYWQsIHdyaXRlOiBXcml0ZSk6IHVua25vd24ge1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkoZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQoaW5kZXgpO1xuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5yZWYgPT09IGVsZW1lbnQpIHJldHVybiBjYWNoZWQucHJveHk7XG4gIGNvbnN0IHdyYXBwZWQgPSB3cmFwRWxlbWVudE1lbWJlcihlbGVtZW50LCBlbGVtZW50U2luayhyZWFkLCB3cml0ZSwgaW5kZXgpLCBbXSwgbmV3IFNldDxvYmplY3Q+KCkpO1xuICBjYWNoZS5zZXQoaW5kZXgsIHsgcmVmOiBlbGVtZW50LCBwcm94eTogd3JhcHBlZCB9KTtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbi8vIC0tIExlYXZlczogd3JpdGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBTbG90cyBmcm9tIHRoZSBjdXJyZW50IGVuZCB1cCB0byAobm90IGluY2x1ZGluZykgYHVwVG9gIGJlY29tZSBgbnVsbGAg4oCUXG4gKiAgdGhlIEpTT04gc3BlbGxpbmcgb2YgYSBob2xlLCB3aGljaCBpcyB3aGF0IHRoZSB3aG9sZS1hcnJheSByb3VuZC10cmlwIHVzZWRcbiAqICB0byBwcm9kdWNlIGZvciB0aGVtLiBOby1vcCB3aGVuIGB1cFRvYCBpcyB3aXRoaW4gdGhlIGFycmF5LiAqL1xuZnVuY3Rpb24gZmlsbEhvbGVzKGFycjogdW5rbm93bltdLCB1cFRvOiBudW1iZXIpOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGg7IGkgPCB1cFRvOyBpKyspIGFycltpXSA9IG51bGw7XG59XG5cbi8qKiBXSFk6IGEgbXV0YXRpbmcgbWV0aG9kIHJ1bnMgb24gYSBDT1BZLCB3aXRoIGl0cyBhcmd1bWVudHMgdGFrZW4gYXMgdmFsdWVzXG4gKiAgKGEgaGFuZGxlIGJlY29tZXMgd2hhdCBpdCBzdGFuZHMgZm9yOyBhIG51bWJlciBvciBhIGNvbXBhcmF0b3IgcGFzc2VzXG4gKiAgdGhyb3VnaCksIGFuZCB0aGUgY29weSBpcyBjb21taXR0ZWQgd2hvbGUuIFRoZSBhcnJheSBpbiBzdGF0ZSBpcyBuZXZlclxuICogIHRvdWNoZWQuICovXG5mdW5jdGlvbiBtdXRhdGluZ01ldGhvZChyZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUsIG5hbWU6IHN0cmluZyk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBjbG9uZSA9IFsuLi5yZWFkKCldO1xuICAgIGNvbnN0IHJlc3VsdCA9IChjbG9uZSBhcyBhbnkpW25hbWVdKC4uLmFyZ3MubWFwKHVud3JhcEhhbmRsZXMpKTtcbiAgICB3cml0ZShjbG9uZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqIGBhcnJbaV0gPSB2YDogY29weSwgYG51bGxgIHRoZSBzbG90cyBhIHdyaXRlIHBhc3QgdGhlIGVuZCBza2lwcywgcGxhY2UgdGhlIHZhbHVlIGFzIGFzc2lnbmVkLCBjb21taXQuICovXG5mdW5jdGlvbiBzZXRJbmRleChyZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUsIGluZGV4OiBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGNvbnN0IGNsb25lID0gWy4uLnJlYWQoKV07XG4gIGZpbGxIb2xlcyhjbG9uZSwgaW5kZXgpO1xuICBjbG9uZVtpbmRleF0gPSB1bndyYXBIYW5kbGVzKHZhbHVlKTtcbiAgd3JpdGUoY2xvbmUpO1xufVxuXG4vKiogYGFyci5sZW5ndGggPSBuYDogY29weSwgYG51bGxgIHRoZSBzbG90cyBncm93dGggYWRkcywgdHJ1bmNhdGUgb3IgZXh0ZW5kLCBjb21taXQuICovXG5mdW5jdGlvbiBzZXRMZW5ndGgocmVhZDogUmVhZCwgd3JpdGU6IFdyaXRlLCBsZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBjbG9uZSA9IFsuLi5yZWFkKCldO1xuICBmaWxsSG9sZXMoY2xvbmUsIGxlbmd0aCk7XG4gIGNsb25lLmxlbmd0aCA9IGxlbmd0aDtcbiAgd3JpdGUoY2xvbmUpO1xufVxuXG4vKiogV0hZOiB3aXRob3V0IHRoaXMgdHJhcCBgZGVsZXRlIGl0ZW1zWzJdYCByZWFjaGVzIHRoZSBSQVcgYXJyYXkgY2FwdHVyZWRcbiAqICBhcyB0aGUgcHJveHkgdGFyZ2V0IOKAlCBjb21taXR0ZWQgc3RhdGUsIG5vIGNvbW1pdCByZWNvcmQuIEpTIGBkZWxldGVgIG9uIGFuXG4gKiAgaW5kZXggbGVhdmVzIHRoZSBzbG90IGVtcHR5IGFuZCB0aGUgbGVuZ3RoIHVuY2hhbmdlZCwgYW5kIHNvIGRvZXMgdGhpczpcbiAqICB0aGUgZW1wdGllZCBzbG90IGNvbW1pdHMgYXMgYG51bGxgLCBKU09OJ3Mgb25seSBzcGVsbGluZyBmb3IgYSBob2xlLiAqL1xuZnVuY3Rpb24gZGVsZXRlU2xvdChyZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IHZvaWQge1xuICBjb25zdCBjbG9uZSA9IFsuLi5yZWFkKCldO1xuICBjb25zdCBpbmRleCA9IHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJyA/IE51bWJlcihwcm9wKSA6IE5hTjtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5kZXgpICYmIGluZGV4ID49IDAgJiYgaW5kZXggPCBjbG9uZS5sZW5ndGgpIGNsb25lW2luZGV4XSA9IG51bGw7XG4gIGVsc2UgZGVsZXRlIChjbG9uZSBhcyBhbnkpW3Byb3BdO1xuICB3cml0ZShjbG9uZSk7XG59XG5cbi8vIC0tIExlYXZlczogdGhlIGNoYWluIGJlbG93IGFuIGVsZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBXSFk6IGFuIGFycmF5IGFueXdoZXJlIGJlbG93IGEgc2luaydzIHJvb3QgaXMgT05FIHdyaXRlIHBhdGgg4oCUIGl0IHJlYWRzXG4gKiB0aHJvdWdoIHRoZSBzaW5rIGFuZCBjb21taXRzIHRoZSBXSE9MRSBuZXcgYXJyYXkgYmFjayB0aHJvdWdoIGl0LCBzb1xuICogYHB1c2hgIHRocmVlIGxldmVscyBkb3duIGFuZCBgYXJyW2ldLnggPSB2YCBhdCB0aGUgdG9wIHNoYXJlIGEgZnVubmVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlQcm94eUF0KHNpbms6IFdyaXRlU2luaywgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duW10ge1xuICByZXR1cm4gY3JlYXRlQXJyYXlQcm94eShcbiAgICAoKSA9PiAoc2luay5yZWFkQXQocGF0aCkgYXMgdW5rbm93bltdKSA/PyBbXSxcbiAgICAobmV4dCkgPT4gc2luay5wdXQocGF0aCwgbmV4dCksXG4gICk7XG59XG5cbi8qKlxuICogV3JhcCBhIHZhbHVlIHJlYWQgb3V0IG9mIGFuIGVsZW1lbnQ6IGFycmF5cyBiZWNvbWUgYXJyYXkgcHJveGllcyB3aG9zZVxuICogY29tbWl0cyByb3V0ZSBiYWNrIHRocm91Z2ggdGhlIG93bmluZyBhcnJheSwgcGxhaW4gb2JqZWN0cyBiZWNvbWUgZWxlbWVudFxuICogcHJveGllcyBvbmUgbGV2ZWwgZGVlcGVyLCBldmVyeXRoaW5nIGVsc2UgaXMgcmV0dXJuZWQgYXMtaXMuIEEgdmFsdWUgYWxyZWFkeVxuICogb24gdGhlIGFjY2VzcyBjaGFpbiAoYSBjeWNsZSkgaXMgcmV0dXJuZWQgcmF3IOKAlCB0aGUgc2FtZSBiYWNrLWVkZ2UgdGhlXG4gKiBuZXN0ZWQtb2JqZWN0IHRlcm1pbmFsIHByb3h5IHRha2VzLlxuICovXG5mdW5jdGlvbiB3cmFwRWxlbWVudE1lbWJlcih2YWx1ZTogdW5rbm93biwgc2luazogV3JpdGVTaW5rLCBwYXRoOiBzdHJpbmdbXSwgdmlzaXRlZDogU2V0PG9iamVjdD4pOiB1bmtub3duIHtcbiAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICBpZiAodmlzaXRlZC5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBicmFuY2ggPSBuZXcgU2V0KHZpc2l0ZWQpO1xuICBicmFuY2guYWRkKHZhbHVlIGFzIG9iamVjdCk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCwgYnJhbmNoKTtcbn1cblxuLy8gLS0gT3JjaGVzdHJhdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQcm94eSBvdmVyIG9uZSBPQkpFQ1QgZWxlbWVudCAob3IgYW4gb2JqZWN0IG5lc3RlZCBpbnNpZGUgb25lKSwgY2FycnlpbmcgdGhlXG4gKiBwYXRoIGZyb20gdGhlIGVsZW1lbnQgZG93biB0byBpdC4gUmVhZHMgcmVjdXJzZTsgd3JpdGVzIGdvIGJhY2sgb3V0IHRocm91Z2hcbiAqIHRoZSBvd25pbmcgYXJyYXkncyBjb21taXQgY2FsbGJhY2sgKHRoZSB7QGxpbmsgZWxlbWVudFNpbmt9KS5cbiAqXG4gKiBSRUFEUyBBUkUgTElWRS4gRXZlcnkgd3JpdGUgcmVidWlsZHMgdGhlIGFycmF5IGltbXV0YWJseSwgc28gdGhlIG9iamVjdCB0aGVcbiAqIHByb3h5IHdhcyBjcmVhdGVkIG92ZXIgaXMgdGhlIFBSRS13cml0ZSBlbGVtZW50IGZvciBldmVyIGFmdGVyOyBhIGhlbGRcbiAqIGhhbmRsZSB0aGF0IHJlYWQgZnJvbSBpdCBzYXcgaXRzIG93biB3cml0ZXMgdmFuaXNoIChgbGluZS5uICs9IDFgIHR3aWNlXG4gKiBnYXZlIDIsIGBsaW5lLnRvdGFsID0gbGluZS5xdHkgKiAxMGAgdXNlZCB0aGUgb2xkIGBxdHlgLCBgJ3gnIGluIGxpbmVgIHdhc1xuICogZmFsc2UgcmlnaHQgYWZ0ZXIgYGxpbmUueCA9IDFgKS4gRXZlcnkgdHJhcCB0aGVyZWZvcmUgcmVzb2x2ZXMgdGhlIGVsZW1lbnRcbiAqIHRocm91Z2ggdGhlIHNpbmsgZmlyc3QsIGFuZCBmYWxscyBiYWNrIHRvIHRoZSBjYXB0dXJlZCBvYmplY3Qgb25seSB3aGVuXG4gKiB0aGUgcGF0aCBubyBsb25nZXIgZXhpc3RzICh0aGUgc2xvdCB3YXMgZW1wdGllZCBvciB0aGUgYXJyYXkgc2hyYW5rKSDigJQgdGhlXG4gKiBzYW1lIHJlYWQteW91ci13cml0ZXMgdGhlIGFycmF5IHByb3h5IGl0c2VsZiBoYXMgYWx3YXlzIGhhZCwgYW5kIHRoZSBzYW1lXG4gKiBsYXcgdGhlIG5lc3RlZCBhbmQgdGVybWluYWwgb2JqZWN0IHByb3hpZXMgZm9sbG93IChsaXZlVmlldy50cykuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRQcm94eShcbiAgcmF3OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZpc2l0ZWQ6IFNldDxvYmplY3Q+LFxuKTogdW5rbm93biB7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3QocmF3LCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICByZXR1cm4gcmVtZW1iZXJIYW5kbGUoXG4gICAgbmV3IFByb3h5KHJhdywge1xuICAgICAgZ2V0OiBsaXZlR2V0VHJhcChsaXZlLCBzZWdtZW50cywgKHZhbHVlLCBwYXRoKSA9PiB3cmFwRWxlbWVudE1lbWJlcih2YWx1ZSwgc2luaywgcGF0aCwgdmlzaXRlZCksIG1lbWJlcnMpLFxuICAgICAgc2V0OiBzaW5rU2V0VHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICBkZWxldGVQcm9wZXJ0eTogc2lua0RlbGV0ZVRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgLi4ubGl2ZUluc3BlY3Rpb25UcmFwcyhsaXZlKSxcbiAgICB9KSxcbiAgICBsaXZlLFxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm94eSBvdmVyIGFuIGFycmF5IHRoYXQgaW50ZXJjZXB0cyBtdXRhdGluZyBvcGVyYXRpb25zLlxuICpcbiAqIFRoZSBhY3R1YWwgY3VycmVudCBhcnJheSBpcyB0aGUgUHJveHkgdGFyZ2V0OiBOb2RlLmpzIGNvbnNvbGUubG9nIGluc3BlY3RzXG4gKiB0aGUgdGFyZ2V0IGRpcmVjdGx5IChieXBhc3NlcyBQcm94eSB0cmFwcyksIHNvIHRoZSByZWFsIGFycmF5IHNob3dzIGNvcnJlY3RcbiAqIHZhbHVlcy4gVGhlIHRhcmdldCByZWZlcmVuY2UgaXMgZml4ZWQgYXQgY3JlYXRpb24gdGltZSDigJQgYWZ0ZXIgbXV0YXRpb25zLFxuICogdGhlIHByb3h5IHJldHVybnMgYSBuZXcgcHJveHkgKHZpYSBjYWNoZSBpbnZhbGlkYXRpb24pIHdpdGggdGhlIGZyZXNoIGFycmF5XG4gKiBhcyB0YXJnZXQuXG4gKlxuICogQHBhcmFtIGdldEN1cnJlbnQgLSBSZXR1cm5zIHRoZSBjdXJyZW50IGFycmF5IHNuYXBzaG90IGZyb20gc3RhdGVcbiAqIEBwYXJhbSBjb21taXQgLSBDYWxsZWQgd2l0aCB0aGUgbmV3IGFycmF5IGFmdGVyIGEgbXV0YXRpb24gKHRyaWdnZXJzIHNldFZhbHVlKVxuICogQHJldHVybnMgUHJveGllZCBhcnJheSB3aXRoIGNvcHktb24td3JpdGUgc2VtYW50aWNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcnJheVByb3h5PFQ+KGdldEN1cnJlbnQ6ICgpID0+IFRbXSwgY29tbWl0OiAobmV3QXJyYXk6IFRbXSkgPT4gdm9pZCk6IFRbXSB7XG4gIGNvbnN0IHRhcmdldCA9IGdldEN1cnJlbnQoKSBhcyBUW107XG4gIGNvbnN0IHJlYWQgPSBnZXRDdXJyZW50IGFzIHVua25vd24gYXMgUmVhZDtcbiAgY29uc3Qgd3JpdGUgPSBjb21taXQgYXMgdW5rbm93biBhcyBXcml0ZTtcbiAgY29uc3QgZWxlbWVudHM6IEVsZW1lbnRDYWNoZSA9IG5ldyBNYXAoKTtcblxuICAvLyBUaGUgYXJyYXkgaGFuZGxlJ3MgdmFsdWUgaXMgdGhlIGN1cnJlbnQgYXJyYXkgaXRzZWxmIChoYW5kbGVzLnRzKS5cbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eSh0YXJnZXQsIHtcbiAgICAgIGdldChfdGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycgJiYgTVVUQVRJTkdfTUVUSE9EUy5oYXMocHJvcCkpIHJldHVybiBtdXRhdGluZ01ldGhvZChyZWFkLCB3cml0ZSwgcHJvcCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZWFkKCk7XG4gICAgICAgIGlmIChwcm9wID09PSAnbGVuZ3RoJykgcmV0dXJuIGN1cnJlbnQubGVuZ3RoO1xuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4SW4oY3VycmVudCwgcHJvcCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gY2FjaGVkRWxlbWVudChlbGVtZW50cywgY3VycmVudFtpbmRleF0sIGluZGV4LCByZWFkLCB3cml0ZSk7XG4gICAgICAgIGlmIChwcm9wID09PSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpKSByZXR1cm4gKCkgPT4gY3VycmVudDtcbiAgICAgICAgcmV0dXJuIGJvdW5kTWVtYmVyKGN1cnJlbnQsIHByb3ApO1xuICAgICAgfSxcbiAgICAgIHNldChfdGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4TmFtZWQocHJvcCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSBzZXRJbmRleChyZWFkLCB3cml0ZSwgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gJ2xlbmd0aCcgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgc2V0TGVuZ3RoKHJlYWQsIHdyaXRlLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBhbnkgb3RoZXIgc2V0IGlzIGlnbm9yZWQgKGFuIGV4cGFuZG8gb24gYW4gYXJyYXkgaXMgb3V0IG9mIGNvbnRyYWN0IOKAlCBSRUFETUUpXG4gICAgICB9LFxuICAgICAgZGVsZXRlUHJvcGVydHkoX3RhcmdldCwgcHJvcCkge1xuICAgICAgICBkZWxldGVTbG90KHJlYWQsIHdyaXRlLCBwcm9wKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgaGFzOiAoX3RhcmdldCwgcHJvcCkgPT4gUmVmbGVjdC5oYXMocmVhZCgpLCBwcm9wKSxcbiAgICAgIG93bktleXM6ICgpID0+IFJlZmxlY3Qub3duS2V5cyhyZWFkKCkpLFxuICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAoX3RhcmdldCwgcHJvcCkgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyZWFkKCksIHByb3ApLFxuICAgIH0pLFxuICAgIHJlYWQsXG4gICk7XG59XG4iXX0=
|
|
@@ -16,14 +16,19 @@
|
|
|
16
16
|
import { nativeGet as lodashGet } from '../memory/pathOps.js';
|
|
17
17
|
import { shouldWrapWithProxy } from './allowlist.js';
|
|
18
18
|
import { arrayProxyAt } from './arrayTraps.js';
|
|
19
|
+
import { rememberHandle, unwrapHandles } from './handles.js';
|
|
19
20
|
import { cachedMember, liveGetTrap, liveInspectionTraps, liveObject, MemberCache } from './liveView.js';
|
|
20
|
-
import { unwrapProxy } from './structuralWrite.js';
|
|
21
21
|
import { BREAK_SETTER, EXECUTOR_INTERNAL_METHODS, IS_TYPED_SCOPE, SCOPE_METHOD_NAMES } from './types.js';
|
|
22
22
|
import { rootKeySink, sinkDeleteTrap, sinkSetTrap } from './writeTraps.js';
|
|
23
23
|
const METHOD_ROUTES = {
|
|
24
24
|
$getValue: (t) => t.getValue.bind(t),
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// A handle the scope handed out is a value it accepts back (handles.ts):
|
|
26
|
+
// `$setValue('copy', scope.customer)` stores the value behind the handle,
|
|
27
|
+
// not a Proxy the commit could never clone. The set trap does the same for
|
|
28
|
+
// `scope.copy = scope.customer`; these are the explicit doors. A
|
|
29
|
+
// handle-free value passes through by reference.
|
|
30
|
+
$setValue: (t) => (key, value, shouldRedact, description) => t.setValue(key, unwrapHandles(value), shouldRedact, description),
|
|
31
|
+
$update: (t) => (key, value, description) => t.updateValue(key, unwrapHandles(value), description),
|
|
27
32
|
$delete: (t) => t.deleteValue.bind(t),
|
|
28
33
|
$read: (t) => (dotPath) => {
|
|
29
34
|
const rootKey = dotPath.split('.')[0];
|
|
@@ -55,8 +60,10 @@ const METHOD_ROUTES = {
|
|
|
55
60
|
const clone = Array.isArray(current) ? structuredClone(current) : [];
|
|
56
61
|
// User applies all mutations to the plain clone — no Proxy, no per-mutation commit
|
|
57
62
|
fn(clone);
|
|
58
|
-
// One setValue — fires onWrite once with the final array
|
|
59
|
-
|
|
63
|
+
// One setValue — fires onWrite once with the final array. The stage may
|
|
64
|
+
// have pushed handles into the clone (`arr.push(scope.template)`) — they
|
|
65
|
+
// are values by the time the array is staged (handles.ts).
|
|
66
|
+
t.setValue(key, unwrapHandles(clone));
|
|
60
67
|
},
|
|
61
68
|
$break: (_t, opts) => (reason) => {
|
|
62
69
|
if (!opts.breakFn)
|
|
@@ -128,12 +135,12 @@ function createTerminalProxy(obj, sink, segments, visited = new Set()) {
|
|
|
128
135
|
return value;
|
|
129
136
|
return createTerminalProxy(value, sink, path, visited);
|
|
130
137
|
};
|
|
131
|
-
return new Proxy(obj, {
|
|
138
|
+
return rememberHandle(new Proxy(obj, {
|
|
132
139
|
get: liveGetTrap(live, segments, child, members),
|
|
133
140
|
set: sinkSetTrap(sink, segments),
|
|
134
141
|
deleteProperty: sinkDeleteTrap(sink, segments),
|
|
135
142
|
...liveInspectionTraps(live),
|
|
136
|
-
});
|
|
143
|
+
}), live);
|
|
137
144
|
}
|
|
138
145
|
function createNestedProxy(obj, sink, segments, ancestors = new Set()) {
|
|
139
146
|
// Reads are LIVE (9.22.0): a held proxy reads its own writes, `'x' in o`
|
|
@@ -152,12 +159,12 @@ function createNestedProxy(obj, sink, segments, ancestors = new Set()) {
|
|
|
152
159
|
return createTerminalProxy(value, sink, path);
|
|
153
160
|
return createNestedProxy(value, sink, path, new Set(ancestors).add(value));
|
|
154
161
|
};
|
|
155
|
-
return new Proxy(obj, {
|
|
162
|
+
return rememberHandle(new Proxy(obj, {
|
|
156
163
|
get: liveGetTrap(live, segments, child, members),
|
|
157
164
|
set: sinkSetTrap(sink, segments),
|
|
158
165
|
deleteProperty: sinkDeleteTrap(sink, segments),
|
|
159
166
|
...liveInspectionTraps(live),
|
|
160
|
-
});
|
|
167
|
+
}), live);
|
|
161
168
|
}
|
|
162
169
|
// -- Top-level leaves ---------------------------------------------------------
|
|
163
170
|
/** `internalRead` answered nothing: the name is a state key and must be read (tracked) from the target. */
|
|
@@ -222,12 +229,13 @@ function wrapStateValue(target, readSilent, state, key, value) {
|
|
|
222
229
|
}, []);
|
|
223
230
|
}
|
|
224
231
|
/** WHY: a `$`-name can never be a state key — the write is refused, not shadowed; every other assignment
|
|
225
|
-
* stores the
|
|
232
|
+
* stores the value AS ASSIGNED (a handle becomes what it stands for, `handles.ts`; the buffer detaches at
|
|
233
|
+
* commit — the same law as `$setValue`, 9.24.0) and drops the key's cached proxy. */
|
|
226
234
|
function assignStateKey(target, state, key, value) {
|
|
227
235
|
if (SCOPE_METHOD_NAMES.has(key)) {
|
|
228
236
|
throw new Error(`Cannot set state key "${key}" -- it conflicts with a reserved TypedScope method. Rename the state key to avoid $-prefixed names.`);
|
|
229
237
|
}
|
|
230
|
-
target.setValue(key,
|
|
238
|
+
target.setValue(key, unwrapHandles(value));
|
|
231
239
|
state.childCache.delete(key);
|
|
232
240
|
}
|
|
233
241
|
/** Does the key exist — answered without a tracked read wherever the target can; `getValue` is the last resort. */
|
|
@@ -292,4 +300,4 @@ export function createTypedScope(target, options) {
|
|
|
292
300
|
},
|
|
293
301
|
});
|
|
294
302
|
}
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxTQUFTLElBQUksU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pHLE9BQU8sRUFBa0IsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0zRixNQUFNLGFBQWEsR0FBaUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25DLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMs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SUFBSSxDQUFDLENBQUM7WUFDekIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJO1lBQ3BCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtnQkFBRSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0YsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDaEMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLElBQUk7WUFDekMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQyxDQUFDLCtCQUErQjtZQUMvRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7UUFDM0csQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlL2NyZWF0ZVR5cGVkU2NvcGUgLS0gQ29yZSBQcm94eSBmYWN0b3J5IGZvciBUeXBlZFNjb3BlPFQ+LlxuICpcbiAqIFdyYXBzIGEgUmVhY3RpdmVUYXJnZXQgKFNjb3BlRmFjYWRlKSBpbiBhIFByb3h5IHRoYXQgcHJvdmlkZXM6XG4gKiAtIFR5cGVkIHByb3BlcnR5IGFjY2Vzczogc2NvcGUuY3JlZGl0VGllciAocmVhZCksIHNjb3BlLmNyZWRpdFRpZXIgPSAnQScgKHdyaXRlKVxuICogLSBEZWVwIHdyaXRlIGludGVyY2VwdGlvbjogc2NvcGUuY3VzdG9tZXIuYWRkcmVzcy56aXAgPSAnOTAyMTAnXG4gKiAtIEFycmF5IG11dGF0aW9uIGludGVyY2VwdGlvbjogc2NvcGUuaXRlbXMucHVzaCgnbmV3JylcbiAqIC0gJC1wcmVmaXhlZCBlc2NhcGUgaGF0Y2hlczogJGdldFZhbHVlLCAkc2V0VmFsdWUsICRyZWFkLCAkZ2V0QXJncywgZXRjLlxuICpcbiAqIFJlYWQgc2VtYW50aWNzOiB0b3AtbGV2ZWwgZ2V0IGNhbGxzIGdldFZhbHVlKCkgKGZpcmVzIG9uUmVhZCBPTkNFKS5cbiAqICAgTmVzdGVkIGdldCB0cmFwcyBuYXZpZ2F0ZSBpbi1tZW1vcnkgLS0gbm8gYWRkaXRpb25hbCBvblJlYWQuXG4gKlxuICogV3JpdGUgc2VtYW50aWNzOiB0b3AtbGV2ZWwgc2V0IGNhbGxzIHNldFZhbHVlKCkuIE5lc3RlZCBzZXQgY2FsbHNcbiAqICAgdXBkYXRlVmFsdWUoKSB3aXRoIGEgcGFydGlhbCBvYmplY3QgYnVpbHQgZnJvbSB0aGUgYWNjdW11bGF0ZWQgcGF0aC5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQgYXMgbG9kYXNoR2V0IH0gZnJvbSAnLi4vbWVtb3J5L3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGFycmF5UHJveHlBdCB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyBjYWNoZWRNZW1iZXIsIGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHsgdW53cmFwUHJveHkgfSBmcm9tICcuL3N0cnVjdHVyYWxXcml0ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0aXZlT3B0aW9ucywgUmVhY3RpdmVUYXJnZXQsIFR5cGVkU2NvcGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IEJSRUFLX1NFVFRFUiwgRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUywgSVNfVFlQRURfU0NPUEUsIFNDT1BFX01FVEhPRF9OQU1FUyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgdHlwZSBXcml0ZVNpbmssIHJvb3RLZXlTaW5rLCBzaW5rRGVsZXRlVHJhcCwgc2lua1NldFRyYXAgfSBmcm9tICcuL3dyaXRlVHJhcHMuanMnO1xuXG4vLyAtLSAkLW1ldGhvZCByb3V0aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgTWV0aG9kUm91dGVyID0gKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdHM6IFJlYWN0aXZlU3RhdGUpID0+IHVua25vd247XG5cbmNvbnN0IE1FVEhPRF9ST1VURVM6IFJlY29yZDxzdHJpbmcsIE1ldGhvZFJvdXRlcj4gPSB7XG4gICRnZXRWYWx1ZTogKHQpID0+IHQuZ2V0VmFsdWUuYmluZCh0KSxcbiAgJHNldFZhbHVlOiAodCkgPT4gdC5zZXRWYWx1ZS5iaW5kKHQpLFxuICAkdXBkYXRlOiAodCkgPT4gdC51cGRhdGVWYWx1ZS5iaW5kKHQpLFxuICAkZGVsZXRlOiAodCkgPT4gdC5kZWxldGVWYWx1ZS5iaW5kKHQpLFxuICAkcmVhZDogKHQpID0+IChkb3RQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb290S2V5ID0gZG90UGF0aC5zcGxpdCgnLicpWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdC5nZXRWYWx1ZShyb290S2V5KTtcbiAgICBpZiAoIWRvdFBhdGguaW5jbHVkZXMoJy4nKSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBsb2Rhc2hHZXQodmFsdWUsIGRvdFBhdGguc2xpY2Uocm9vdEtleS5sZW5ndGggKyAxKSk7XG4gIH0sXG4gICRnZXRBcmdzOiAodCkgPT4gdC5nZXRBcmdzLmJpbmQodCksXG4gICRnZXRFbnY6ICh0KSA9PiB0LmdldEVudi5iaW5kKHQpLFxuICAkZGVidWc6ICh0KSA9PiB0LmFkZERlYnVnSW5mby5iaW5kKHQpLFxuICAkbG9nOiAodCkgPT4gdC5hZGREZWJ1Z01lc3NhZ2UuYmluZCh0KSxcbiAgJGVycm9yOiAodCkgPT4gdC5hZGRFcnJvckluZm8uYmluZCh0KSxcbiAgJG1ldHJpYzogKHQpID0+IHQuYWRkTWV0cmljLmJpbmQodCksXG4gICRldmFsOiAodCkgPT4gdC5hZGRFdmFsLmJpbmQodCksXG4gICRhdHRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRnZXRTY29wZVJlY29yZGVyczogKHQpID0+IHQuZ2V0U2NvcGVSZWNvcmRlcnMuYmluZCh0KSxcbiAgJGJhdGNoQXJyYXk6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIGZuOiAoYXJyOiB1bmtub3duW10pID0+IHZvaWQpID0+IHtcbiAgICAvLyBPbmUgZ2V0VmFsdWUg4oCUIGZpcmVzIG9uUmVhZCBvbmNlXG4gICAgY29uc3QgY3VycmVudCA9IHQuZ2V0VmFsdWUoa2V5KTtcbiAgICAvLyBDbG9uZSBvbmNlIOKAlCBERUVQIChvciBzdGFydCBlbXB0eSBpZiBtaXNzaW5nL25vbi1hcnJheSkuIFRoZSByZWFkIGlzXG4gICAgLy8gQk9SUk9XRUQ6IGJlZm9yZSB0aGUgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgY29tbWl0dGVkIHNoYXJlZFxuICAgIC8vIG1lbW9yeSBpdHNlbGYsIHNvIGEgc2hhbGxvdyBgWy4uLmN1cnJlbnRdYCBoYW5kZWQgdGhlIHN0YWdlIHRoZVxuICAgIC8vIGNvbW1pdHRlZCBFTEVNRU5UUyBhbmQgYGFyclswXS5uID0gOWAgZWRpdGVkIGNvbW1pdHRlZCBzdGF0ZSBpbiBwbGFjZVxuICAgIC8vIHdpdGggbm8gdHJhY2Ugcm93IChhbmQgdGhlIGxhenkgYnVmZmVyJ3MgYmFzZSB3YXMgdGhlbiB0YWtlbiBBRlRFUiB0aGVcbiAgICAvLyBlZGl0LCBzbyB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgc2F3IG5vdGhpbmcpLiBTdGF0ZSB2YWx1ZXMgc3Vydml2ZVxuICAgIC8vIGBzdHJ1Y3R1cmVkQ2xvbmVgIGJ5IGNvbnRyYWN0LCBzbyB0aGUgd29ya2luZyBjb3B5IGlzIGEgZnVsbCBjb3B5LlxuICAgIGNvbnN0IGNsb25lOiB1bmtub3duW10gPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpID8gc3RydWN0dXJlZENsb25lKGN1cnJlbnQpIDogW107XG4gICAgLy8gVXNlciBhcHBsaWVzIGFsbCBtdXRhdGlvbnMgdG8gdGhlIHBsYWluIGNsb25lIOKAlCBubyBQcm94eSwgbm8gcGVyLW11dGF0aW9uIGNvbW1pdFxuICAgIGZuKGNsb25lKTtcbiAgICAvLyBPbmUgc2V0VmFsdWUg4oCUIGZpcmVzIG9uV3JpdGUgb25jZSB3aXRoIHRoZSBmaW5hbCBhcnJheVxuICAgIHQuc2V0VmFsdWUoa2V5LCBjbG9uZSk7XG4gIH0sXG4gICRicmVhazogKF90LCBvcHRzKSA9PiAocmVhc29uPzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFvcHRzLmJyZWFrRm4pIHRocm93IG5ldyBFcnJvcignJGJyZWFrKCkgaXMgbm90IGF2YWlsYWJsZSBvdXRzaWRlIHN0YWdlIGV4ZWN1dGlvbicpO1xuICAgIG9wdHMuYnJlYWtGbihyZWFzb24pO1xuICB9LFxuICAvLyBPYnNlcnZhYmlsaXR5IOKAlCBFbWl0IGNoYW5uZWwgKFBoYXNlIDMpLiBSb3V0ZXMgdG8gU2NvcGVGYWNhZGUuZW1pdEV2ZW50XG4gIC8vIHdoaWNoIGhhbmRsZXMgZmFzdC1wYXRoLCBlbnJpY2htZW50LCByZWRhY3Rpb24sIGFuZCBlcnJvciBpc29sYXRpb24uXG4gICRlbWl0OiAodCkgPT4gdC5lbWl0RXZlbnQuYmluZCh0KSxcbiAgLy8gRGV0YWNoIChUNCkg4oCUIGZpcmUtYW5kLWZvcmdldCBjaGlsZCBmbG93Y2hhcnRzLiBEZWxlZ2F0ZXMgdG8gU2NvcGVGYWNhZGVcbiAgLy8gd2hpY2ggbWludGVkIHJlZklkcyBmcm9tIHJ1bnRpbWVTdGFnZUlkLlxuICAkZGV0YWNoQW5kSm9pbkxhdGVyOiAodCkgPT4gdC5kZXRhY2hBbmRKb2luTGF0ZXIuYmluZCh0KSxcbiAgJGRldGFjaEFuZEZvcmdldDogKHQpID0+IHQuZGV0YWNoQW5kRm9yZ2V0LmJpbmQodCksXG4gICR0b1JhdzogKHQpID0+ICgpID0+IHQsXG59O1xuXG4vLyAtLSBHdWFyZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGVzZSBtdXN0IGJlIGhhbmRsZWQgdG8gcHJldmVudCBQcm94eSBmcm9tIGJlaW5nIHRyZWF0ZWQgYXMgYSBQcm9taXNlLFxuLy8gYnJlYWtpbmcgaW5zdGFuY2VvZiBjaGVja3MsIG9yIGNvbmZ1c2luZyB0ZXN0IG1hdGNoZXJzLlxuXG5jb25zdCBHVUFSRF9QUk9QUzogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4gPSB7XG4gIHRoZW46IHVuZGVmaW5lZCwgLy8gcHJldmVudCBQcm9taXNlIGRldGVjdGlvblxuICBhc3ltbWV0cmljTWF0Y2g6IHVuZGVmaW5lZCwgLy8gcHJldmVudCB2aXRlc3QvamVzdCBtYXRjaGVyIGNvbmZ1c2lvblxuICBjb25zdHJ1Y3RvcjogT2JqZWN0LCAvLyBzYWZlIHByb3RvdHlwZVxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogJ1R5cGVkU2NvcGUnLFxufTtcblxuLy8gLS0gU2lsZW50IGV4aXN0ZW5jZSBjaGVjayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIERvZXMgdGhpcyBrZXkgZXhpc3QgaW4gc3RhdGUsIGFuc3dlcmVkIHdpdGggTk8gdHJhY2tpbmcgc2lkZSBlZmZlY3QgYXQgYWxsP1xuICpcbiAqIGBnZXRTdGF0ZUtleXMoKWAgaXMgdGhlIG9ubHkgaW5zcGVjdGlvbiBhIFNjb3BlRmFjYWRlIGFuc3dlcnMgd2l0aG91dCByb3V0aW5nXG4gKiB0aHJvdWdoIHRoZSB0cmFja2VkIHJlYWQgcGF0aC4gYGhhc0tleSgpYCBkZWxpYmVyYXRlbHkgRE9FUyByb3V0ZSB0aHJvdWdoIGl0OlxuICogYCdrJyBpbiBzY29wZWAgaXMgYSByZWFsIHF1ZXN0aW9uIGFib3V0IHN0YXRlIHRoYXQgYSBzdGFnZSBjYW4gYnJhbmNoIG9uLCBzb1xuICogaXQgcmVnaXN0ZXJzIGFzIGEgcmVhZCDigJQgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhpcyBwcm9iZSBtdXN0IG5vdCB1c2UgaXQuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSB0YXJnZXQgb2ZmZXJzIG5vIHNpbGVudCBhbnN3ZXI7IGNhbGxlcnMgbXVzdFxuICogdGhlbiBjaG9vc2UgZGVsaWJlcmF0ZWx5IHJhdGhlciB0aGFuIGFzc3VtZS5cbiAqL1xuZnVuY3Rpb24gc2lsZW50bHlLbm93bktleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBpZiAoIXRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbn1cblxuLy8gLS0gTXV0YWJsZSBzdGF0ZSBwZXIgcHJveHkgaW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgUmVhY3RpdmVTdGF0ZSB7XG4gIGJyZWFrRm4/OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogVGhlIHRvcC1sZXZlbCBrZXkncyBjaGlsZCBwcm94eSwgdmFsaWRhdGVkIGJ5IHJhdyBpZGVudGl0eSAoYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApOyBhIHNpbmsgZHJvcHMgdGhlIGtleSBvbiB3cml0ZS4gKi9cbiAgY2hpbGRDYWNoZTogTWVtYmVyQ2FjaGU7XG59XG5cbi8vIC0tIE5lc3RlZCBjaGlsZCBwcm94aWVzIChmb3IgZGVlcCB3cml0ZSBpbnRlcmNlcHRpb24pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gQm90aCBmYWN0b3JpZXMgYXJlIE9SQ0hFU1RSQVRPUlMgKDkuMjMuMSk6IHJlYWRzIGFyZSBgbGl2ZVZpZXcudHNgLCB3cml0ZXNcbi8vIGFyZSBgd3JpdGVUcmFwcy50c2Agb3ZlciBhIGByb290S2V5U2lua2AsIGFuZCB0aGUgT05FIHRoaW5nIGVhY2ggZGVjaWRlc1xuLy8gaXRzZWxmIGlzIHdoYXQgYSBjaGlsZCBtZW1iZXIgYmVjb21lcyDigJQgdGhlIGN5Y2xlIHBvbGljeS4gRWFjaCBob2xkcyBpdHNcbi8vIG93biBwZXItbWVtYmVyIHByb3h5IGNhY2hlICg5LjIzLjIsIGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKS5cbi8vXG4vLyBDeWNsZSBzYWZldHk6IGFuIGltbXV0YWJsZSBTZXQ8b2JqZWN0PiBvZiBhbmNlc3RvciBvYmplY3RzIGlzIHBhc3NlZCBkb3duXG4vLyBlYWNoIGFjY2VzcyBjaGFpbi4gRWFjaCBicmFuY2ggZ2V0cyBpdHMgb3duIGNvcHkgKG5ldyBTZXQocGFyZW50KSkgc29cbi8vIHNjb3BlLnguZnJpZW5kIGFuZCBzY29wZS54LmNvd29ya2VyIGRvbid0IHBvbGx1dGUgZWFjaCBvdGhlcidzIHRyYWNraW5nLlxuLy8gV2hlbiBhIGNoaWxkIHZhbHVlIGlzIGFscmVhZHkgaW4gdGhlIGFuY2VzdG9yIHNldCwgd2UndmUgaGl0IGEgY3ljbGUuXG4vLyBBdCB0aGUgY3ljbGUgYnJlYWs6IHJldHVybiBhIHRlcm1pbmFsIHByb3h5IHRoYXQgdHJhY2tzIHdyaXRlcyAoc2V0IHRyYXBcbi8vIHN0aWxsIGJ1aWxkcyBwYXRoICsgY29tbWl0cyB0aHJvdWdoIHRoZSBzaW5rKSBidXQgZG9lc24ndCByZWN1cnNlIHJlYWRzXG4vLyBmdXJ0aGVyLiBUaGUgdGVybWluYWwgY2hhaW4gc2hhcmVzIE9ORSBtdXRhYmxlIGB2aXNpdGVkYCBzZXQ6IGEgdmFsdWUgc2VlblxuLy8gYW55d2hlcmUgcGFzdCB0aGUgY3ljbGUgZWRnZSBpcyBoYW5kZWQgYmFjayByYXcuXG5cbmZ1bmN0aW9uIGNyZWF0ZVRlcm1pbmFsUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICB2aXNpdGVkOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICB2aXNpdGVkLmFkZChvYmopO1xuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IHBhc3QgdGhlIGN5Y2xlIGVkZ2Ugc3RpbGwgZ2V0cyBjb3B5LW9uLXdyaXRlIGludGVyY2VwdGlvbiDigJRcbiAgICAvLyBpdCBjb21taXRzIGFzIGEgYHNldGAgb2YgdGhlIHJvb3Qga2V5LCB0aGUgc2FtZSBsYXcgYXMgdGhlIG5lc3RlZCBwcm94eS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgcGF0aCk7XG4gICAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gY3JlYXRlVGVybWluYWxQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCwgdmlzaXRlZCk7XG4gIH07XG4gIHJldHVybiBuZXcgUHJveHkob2JqLCB7XG4gICAgZ2V0OiBsaXZlR2V0VHJhcChsaXZlLCBzZWdtZW50cywgY2hpbGQsIG1lbWJlcnMpLFxuICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgLi4ubGl2ZUluc3BlY3Rpb25UcmFwcyhsaXZlKSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5lc3RlZFByb3h5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzaW5rOiBXcml0ZVNpbmssXG4gIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgYW5jZXN0b3JzOiBTZXQ8b2JqZWN0PiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICAvLyBSZWFkcyBhcmUgTElWRSAoOS4yMi4wKTogYSBoZWxkIHByb3h5IHJlYWRzIGl0cyBvd24gd3JpdGVzLCBgJ3gnIGluIG9gXG4gIC8vIGFuZCBgT2JqZWN0LmtleXMobylgIHNlZSB0aGVtLCBhbmQgYG8uYiA9IG8uYSAqIDEwYCB1c2VzIHRoZSBuZXcgYGFgLlxuICAvLyBUaGUgY2FwdHVyZWQgb2JqZWN0IGFuc3dlcnMgb25seSB3aGVuIHRoZSBwYXRoIGlzIGdvbmUg4oCUIHNlZSBsaXZlVmlldy50cy5cbiAgY29uc3QgbWVtYmVycyA9IG5ldyBNZW1iZXJDYWNoZSgpO1xuICBjb25zdCBsaXZlID0gKCkgPT4gbGl2ZU9iamVjdChvYmosIHNpbmsucmVhZEF0KHNlZ21lbnRzKSk7XG4gIGNvbnN0IGNoaWxkID0gKHZhbHVlOiB1bmtub3duLCBwYXRoOiBzdHJpbmdbXSk6IHVua25vd24gPT4ge1xuICAgIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAvLyBBbiBhcnJheSBjb21taXRzIGFzIGEgYHNldGAgb2YgdGhlIFJPT1QgS0VZIChyZWFjdGl2ZS9SRUFETUUubWQsIGxhdyAzKVxuICAgIC8vIOKAlCB0aGUgc2luaydzIHZlcmIsIHdoYXRldmVyIGRlcHRoIHRoZSBhcnJheSBzaXRzIGF0LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAoYW5jZXN0b3JzLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSByZXR1cm4gY3JlYXRlVGVybWluYWxQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCk7XG4gICAgcmV0dXJuIGNyZWF0ZU5lc3RlZFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCBuZXcgU2V0KGFuY2VzdG9ycykuYWRkKHZhbHVlIGFzIG9iamVjdCkpO1xuICB9O1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICBkZWxldGVQcm9wZXJ0eTogc2lua0RlbGV0ZVRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gIH0pO1xufVxuXG4vLyAtLSBUb3AtbGV2ZWwgbGVhdmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogYGludGVybmFsUmVhZGAgYW5zd2VyZWQgbm90aGluZzogdGhlIG5hbWUgaXMgYSBzdGF0ZSBrZXkgYW5kIG11c3QgYmUgcmVhZCAodHJhY2tlZCkgZnJvbSB0aGUgdGFyZ2V0LiAqL1xuY29uc3QgU1RBVEVfS0VZOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKCdzdGF0ZS1rZXknKTtcblxuLyoqXG4gKiBXSFk6IHRoZSBuYW1lcyB0aGUgc2NvcGUgYW5zd2VycyBJVFNFTEYg4oCUIGludGVybmFsIHN5bWJvbHMsIHRoZSBndWFyZFxuICogcHJvcGVydGllcywgTm9kZSdzIGluc3BlY3QgaG9vaywgdGhlIGAkYC1tZXRob2RzLCB0aGUgZXhlY3V0b3IncyBhbGxvd2xpc3RlZFxuICogcGFzcy10aHJvdWdocyAoYGF0dGFjaFNjb3BlUmVjb3JkZXJgLCBgbm90aWZ5U3RhZ2VTdGFydGAsIOKApiwgY2FsbGVkIGRpcmVjdGx5XG4gKiBvbiB0aGUgc2NvcGUpIGFuZCB0aGUgSlNPTiBwcm9iZSDigJQgbXVzdCBuZXZlciBiZWNvbWUgdHJhY2tlZCByZWFkcztcbiAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIHN0YXRlIGtleSBhbmQgaXMgbGVmdCB0byB0aGUgY2FsbGVyLlxuICpcbiAqIFRoZSBwcm9iZTogYEpTT04uc3RyaW5naWZ5YCBhc2tzIEVWRVJZIHZhbHVlIGZvciBhIGB0b0pTT05gIG1ldGhvZC4gVGhhdFxuICogcXVlc3Rpb24gY29tZXMgZnJvbSB0aGUgcnVudGltZSwgbm90IHRoZSBzdGFnZSBhdXRob3IsIHNvIGl0IG11c3Qgbm90IGVudGVyXG4gKiB0aGUgcmVhZCBzZXQuIEEgc3RhdGUga2V5IGxpdGVyYWxseSBjYWxsZWQgJ3RvSlNPTicgaXMgbGVnYWw6IHdoZW4gaXQgRVhJU1RTXG4gKiB0aGlzIGlzIGEgZ2VudWluZSByZWFkIGFuZCBzdGF5cyB0cmFja2VkLCBhbmQgd2hlbiB0aGUgdGFyZ2V0IGNhbm5vdCBhbnN3ZXJcbiAqIHNpbGVudGx5LCB0cnV0aCB3aW5zIG92ZXIgbm9pc2Ug4oCUIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxSZWFkKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgaWYgKHByb3AgPT09IElTX1RZUEVEX1NDT1BFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHByb3AgPT09IEJSRUFLX1NFVFRFUikge1xuICAgIHJldHVybiAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHN0YXRlLmJyZWFrRm4gPSBmbjtcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKSkgcmV0dXJuIEdVQVJEX1BST1BTW3Byb3BdO1xuICAgIGlmIChwcm9wID09PSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpKSByZXR1cm4gKCkgPT4gdGFyZ2V0LmdldFZhbHVlKCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKSkgcmV0dXJuIEdVQVJEX1BST1BTW3Byb3BdO1xuICBpZiAoU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIE1FVEhPRF9ST1VURVNbcHJvcF0/Lih0YXJnZXQsIHN0YXRlKTtcbiAgaWYgKEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMuaGFzKHByb3ApICYmIHR5cGVvZiAodGFyZ2V0IGFzIGFueSlbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdLmJpbmQodGFyZ2V0KTtcbiAgfVxuICBpZiAocHJvcCA9PT0gJ3RvSlNPTicgJiYgc2lsZW50bHlLbm93bktleSh0YXJnZXQsIHByb3ApID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFNUQVRFX0tFWTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwYWJsZSBzdGF0ZSB2YWx1ZSBiZWNvbWVzIHRoZSBhcnJheSBvciBuZXN0ZWQgcHJveHkgZm9yIGl0cyBrZXk7XG4gKiBhbnl0aGluZyBlbHNlIGlzIGhhbmRlZCBiYWNrIHJhdy4gYHNjb3BlLmsgPT09IHNjb3BlLmtgIGhvbGRzIHdpdGhpbiBhXG4gKiBzdGFnZSB0aHJvdWdoIHRoZSBzYW1lIHBlci1tZW1iZXIgY2FjaGUgZXZlcnkgb2JqZWN0IHByb3h5IHVzZXNcbiAqIChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk6IGEgd3JpdGUgdG8gdGhlIGtleSBkcm9wcyB0aGUgZW50cnkgKHRoZVxuICogc2luayBkb2VzIGl0KSwgYSBjb21taXQgc3dhcHMgdGhlIHZhbHVlIGFuZCB0aGUgcmVmIGNoZWNrIG1pc3NlcyDigJQgZWl0aGVyXG4gKiB3YXkgdGhlIG5leHQgcmVhZCBidWlsZHMgYSBmcmVzaCBwcm94eSBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBTdGF0ZVZhbHVlKFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7IC8vIERhdGUsIE1hcCwgY2xhc3MgaW5zdGFuY2UsIGZyb3plbiDigKZcbiAgcmV0dXJuIGNhY2hlZE1lbWJlcihcbiAgICBzdGF0ZS5jaGlsZENhY2hlLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gcm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCBrZXksIHN0YXRlLmNoaWxkQ2FjaGUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIFtdKTtcbiAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgW10sIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWVdKSk7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuLyoqIFdIWTogYSBgJGAtbmFtZSBjYW4gbmV2ZXIgYmUgYSBzdGF0ZSBrZXkg4oCUIHRoZSB3cml0ZSBpcyByZWZ1c2VkLCBub3Qgc2hhZG93ZWQ7IGV2ZXJ5IG90aGVyIGFzc2lnbm1lbnRcbiAqICBzdG9yZXMgdGhlIHVud3JhcHBlZCB2YWx1ZSAobGFuZG1pbmUgMSkgYW5kIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgcHJveHkuICovXG5mdW5jdGlvbiBhc3NpZ25TdGF0ZUtleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke2tleX1cIiAtLSBpdCBjb25mbGljdHMgd2l0aCBhIHJlc2VydmVkIFR5cGVkU2NvcGUgbWV0aG9kLiBSZW5hbWUgdGhlIHN0YXRlIGtleSB0byBhdm9pZCAkLXByZWZpeGVkIG5hbWVzLmAsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc2V0VmFsdWUoa2V5LCB1bndyYXBQcm94eSh2YWx1ZSkpO1xuICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShrZXkpO1xufVxuXG4vKiogRG9lcyB0aGUga2V5IGV4aXN0IOKAlCBhbnN3ZXJlZCB3aXRob3V0IGEgdHJhY2tlZCByZWFkIHdoZXJldmVyIHRoZSB0YXJnZXQgY2FuOyBgZ2V0VmFsdWVgIGlzIHRoZSBsYXN0IHJlc29ydC4gKi9cbmZ1bmN0aW9uIGtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0YXJnZXQuaGFzS2V5KSByZXR1cm4gdGFyZ2V0Lmhhc0tleShrZXkpO1xuICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xuICByZXR1cm4gdGFyZ2V0LmdldFZhbHVlKGtleSkgIT09IHVuZGVmaW5lZDsgLy8gZmFsbGJhY2s6IGZpcmVzIG9uUmVhZCAoYWNjZXB0YWJsZSBkZWdyYWRhdGlvbilcbn1cblxuLyoqIEV2ZXJ5IHN0YXRlIGtleSDigJQgc2lsZW50bHkgd2hlcmUgdGhlIHRhcmdldCBjYW4sIGVsc2UgZnJvbSBhIHdob2xlLXN0YXRlIHJlYWQuICovXG5mdW5jdGlvbiBzdGF0ZUtleXModGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCk6IHN0cmluZ1tdIHtcbiAgaWYgKHRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCk7XG4gIGNvbnN0IHNuYXBzaG90ID0gdGFyZ2V0LmdldFZhbHVlKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIHJldHVybiBzbmFwc2hvdCAmJiB0eXBlb2Ygc25hcHNob3QgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXMoc25hcHNob3QpIDogW107XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBwcm94eSAodGhlIG1haW4gVHlwZWRTY29wZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVHlwZWRTY29wZTxUPiBwcm94eSB3cmFwcGluZyBhIFJlYWN0aXZlVGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdW5kZXJseWluZyBzY29wZSAoU2NvcGVGYWNhZGUgb3IgYW55IFJlYWN0aXZlVGFyZ2V0KVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChicmVha1BpcGVsaW5lIGluamVjdGlvbilcbiAqIEByZXR1cm5zIEEgUHJveHkgd2l0aCB0eXBlZCBwcm9wZXJ0eSBhY2Nlc3MgYW5kICQtcHJlZml4ZWQgbWV0aG9kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZWRTY29wZTxUIGV4dGVuZHMgb2JqZWN0Pih0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRpb25zPzogUmVhY3RpdmVPcHRpb25zKTogVHlwZWRTY29wZTxUPiB7XG4gIGNvbnN0IHN0YXRlOiBSZWFjdGl2ZVN0YXRlID0geyBicmVha0ZuOiBvcHRpb25zPy5icmVha1BpcGVsaW5lLCBjaGlsZENhY2hlOiBuZXcgTWVtYmVyQ2FjaGUoKSB9O1xuICAvLyBCaW5kIHRoZSBzaWxlbnQgcmVhZCBvbmNlIOKAlCB0aGUgbmVzdGVkL2FycmF5IHByb3hpZXMgcmVzb2x2ZSB0aGVpciBsaXZlIHZpZXcgdGhyb3VnaCBpdC5cbiAgY29uc3QgcmVhZFNpbGVudCA9ICh0YXJnZXQuZ2V0VmFsdWVTaWxlbnQgPz8gdGFyZ2V0LmdldFZhbHVlKS5iaW5kKHRhcmdldCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQgYXMgdW5rbm93biBhcyBUeXBlZFNjb3BlPFQ+LCB7XG4gICAgZ2V0KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgY29uc3QgYW5zd2VyZWQgPSBpbnRlcm5hbFJlYWQodGFyZ2V0LCBzdGF0ZSwgcHJvcCk7XG4gICAgICBpZiAoYW5zd2VyZWQgIT09IFNUQVRFX0tFWSkgcmV0dXJuIGFuc3dlcmVkO1xuICAgICAgLy8gQSBzdGF0ZSBrZXk6IE9ORSB0cmFja2VkIHJlYWQgKGZpcmVzIG9uUmVhZCBvbmNlKSwgdGhlbiB0aGUgd3JhcHBlci5cbiAgICAgIHJldHVybiB3cmFwU3RhdGVWYWx1ZSh0YXJnZXQsIHJlYWRTaWxlbnQsIHN0YXRlLCBwcm9wIGFzIHN0cmluZywgdGFyZ2V0LmdldFZhbHVlKHByb3AgYXMgc3RyaW5nKSk7XG4gICAgfSxcbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykgYXNzaWduU3RhdGVLZXkodGFyZ2V0LCBzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyhfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApO1xuICAgICAgcmV0dXJuIFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkgfHwga25vd25LZXkodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IHN0YXRlS2V5cyh0YXJnZXQpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycgfHwgU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gJC1tZXRob2RzIGFyZSBub24tZW51bWVyYWJsZVxuICAgICAgaWYgKCFrbm93bktleSh0YXJnZXQsIHByb3ApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9OyAvLyB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxTQUFTLElBQUksU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekcsT0FBTyxFQUFrQixXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTTNGLE1BQU0sYUFBYSxHQUFpQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwQyx5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSxpRUFBaUU7SUFDakUsaURBQWlEO0lBQ2pELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLFlBQXNCLEVBQUUsV0FBb0IsRUFBRSxFQUFFLENBQzlGLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFB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QUFTLENBQUM7WUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7UUFDM0csQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlL2NyZWF0ZVR5cGVkU2NvcGUgLS0gQ29yZSBQcm94eSBmYWN0b3J5IGZvciBUeXBlZFNjb3BlPFQ+LlxuICpcbiAqIFdyYXBzIGEgUmVhY3RpdmVUYXJnZXQgKFNjb3BlRmFjYWRlKSBpbiBhIFByb3h5IHRoYXQgcHJvdmlkZXM6XG4gKiAtIFR5cGVkIHByb3BlcnR5IGFjY2Vzczogc2NvcGUuY3JlZGl0VGllciAocmVhZCksIHNjb3BlLmNyZWRpdFRpZXIgPSAnQScgKHdyaXRlKVxuICogLSBEZWVwIHdyaXRlIGludGVyY2VwdGlvbjogc2NvcGUuY3VzdG9tZXIuYWRkcmVzcy56aXAgPSAnOTAyMTAnXG4gKiAtIEFycmF5IG11dGF0aW9uIGludGVyY2VwdGlvbjogc2NvcGUuaXRlbXMucHVzaCgnbmV3JylcbiAqIC0gJC1wcmVmaXhlZCBlc2NhcGUgaGF0Y2hlczogJGdldFZhbHVlLCAkc2V0VmFsdWUsICRyZWFkLCAkZ2V0QXJncywgZXRjLlxuICpcbiAqIFJlYWQgc2VtYW50aWNzOiB0b3AtbGV2ZWwgZ2V0IGNhbGxzIGdldFZhbHVlKCkgKGZpcmVzIG9uUmVhZCBPTkNFKS5cbiAqICAgTmVzdGVkIGdldCB0cmFwcyBuYXZpZ2F0ZSBpbi1tZW1vcnkgLS0gbm8gYWRkaXRpb25hbCBvblJlYWQuXG4gKlxuICogV3JpdGUgc2VtYW50aWNzOiB0b3AtbGV2ZWwgc2V0IGNhbGxzIHNldFZhbHVlKCkuIE5lc3RlZCBzZXQgY2FsbHNcbiAqICAgdXBkYXRlVmFsdWUoKSB3aXRoIGEgcGFydGlhbCBvYmplY3QgYnVpbHQgZnJvbSB0aGUgYWNjdW11bGF0ZWQgcGF0aC5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQgYXMgbG9kYXNoR2V0IH0gZnJvbSAnLi4vbWVtb3J5L3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGFycmF5UHJveHlBdCB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyByZW1lbWJlckhhbmRsZSwgdW53cmFwSGFuZGxlcyB9IGZyb20gJy4vaGFuZGxlcy5qcyc7XG5pbXBvcnQgeyBjYWNoZWRNZW1iZXIsIGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZU9wdGlvbnMsIFJlYWN0aXZlVGFyZ2V0LCBUeXBlZFNjb3BlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBCUkVBS19TRVRURVIsIEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMsIElTX1RZUEVEX1NDT1BFLCBTQ09QRV9NRVRIT0RfTkFNRVMgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCByb290S2V5U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gIC8vIEEgaGFuZGxlIHRoZSBzY29wZSBoYW5kZWQgb3V0IGlzIGEgdmFsdWUgaXQgYWNjZXB0cyBiYWNrIChoYW5kbGVzLnRzKTpcbiAgLy8gYCRzZXRWYWx1ZSgnY29weScsIHNjb3BlLmN1c3RvbWVyKWAgc3RvcmVzIHRoZSB2YWx1ZSBiZWhpbmQgdGhlIGhhbmRsZSxcbiAgLy8gbm90IGEgUHJveHkgdGhlIGNvbW1pdCBjb3VsZCBuZXZlciBjbG9uZS4gVGhlIHNldCB0cmFwIGRvZXMgdGhlIHNhbWUgZm9yXG4gIC8vIGBzY29wZS5jb3B5ID0gc2NvcGUuY3VzdG9tZXJgOyB0aGVzZSBhcmUgdGhlIGV4cGxpY2l0IGRvb3JzLiBBXG4gIC8vIGhhbmRsZS1mcmVlIHZhbHVlIHBhc3NlcyB0aHJvdWdoIGJ5IHJlZmVyZW5jZS5cbiAgJHNldFZhbHVlOiAodCkgPT4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+XG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpLCBzaG91bGRSZWRhY3QsIGRlc2NyaXB0aW9uKSxcbiAgJHVwZGF0ZTogKHQpID0+IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PlxuICAgIHQudXBkYXRlVmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSwgZGVzY3JpcHRpb24pLFxuICAkZGVsZXRlOiAodCkgPT4gdC5kZWxldGVWYWx1ZS5iaW5kKHQpLFxuICAkcmVhZDogKHQpID0+IChkb3RQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb290S2V5ID0gZG90UGF0aC5zcGxpdCgnLicpWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdC5nZXRWYWx1ZShyb290S2V5KTtcbiAgICBpZiAoIWRvdFBhdGguaW5jbHVkZXMoJy4nKSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBsb2Rhc2hHZXQodmFsdWUsIGRvdFBhdGguc2xpY2Uocm9vdEtleS5sZW5ndGggKyAxKSk7XG4gIH0sXG4gICRnZXRBcmdzOiAodCkgPT4gdC5nZXRBcmdzLmJpbmQodCksXG4gICRnZXRFbnY6ICh0KSA9PiB0LmdldEVudi5iaW5kKHQpLFxuICAkZGVidWc6ICh0KSA9PiB0LmFkZERlYnVnSW5mby5iaW5kKHQpLFxuICAkbG9nOiAodCkgPT4gdC5hZGREZWJ1Z01lc3NhZ2UuYmluZCh0KSxcbiAgJGVycm9yOiAodCkgPT4gdC5hZGRFcnJvckluZm8uYmluZCh0KSxcbiAgJG1ldHJpYzogKHQpID0+IHQuYWRkTWV0cmljLmJpbmQodCksXG4gICRldmFsOiAodCkgPT4gdC5hZGRFdmFsLmJpbmQodCksXG4gICRhdHRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRnZXRTY29wZVJlY29yZGVyczogKHQpID0+IHQuZ2V0U2NvcGVSZWNvcmRlcnMuYmluZCh0KSxcbiAgJGJhdGNoQXJyYXk6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIGZuOiAoYXJyOiB1bmtub3duW10pID0+IHZvaWQpID0+IHtcbiAgICAvLyBPbmUgZ2V0VmFsdWUg4oCUIGZpcmVzIG9uUmVhZCBvbmNlXG4gICAgY29uc3QgY3VycmVudCA9IHQuZ2V0VmFsdWUoa2V5KTtcbiAgICAvLyBDbG9uZSBvbmNlIOKAlCBERUVQIChvciBzdGFydCBlbXB0eSBpZiBtaXNzaW5nL25vbi1hcnJheSkuIFRoZSByZWFkIGlzXG4gICAgLy8gQk9SUk9XRUQ6IGJlZm9yZSB0aGUgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgY29tbWl0dGVkIHNoYXJlZFxuICAgIC8vIG1lbW9yeSBpdHNlbGYsIHNvIGEgc2hhbGxvdyBgWy4uLmN1cnJlbnRdYCBoYW5kZWQgdGhlIHN0YWdlIHRoZVxuICAgIC8vIGNvbW1pdHRlZCBFTEVNRU5UUyBhbmQgYGFyclswXS5uID0gOWAgZWRpdGVkIGNvbW1pdHRlZCBzdGF0ZSBpbiBwbGFjZVxuICAgIC8vIHdpdGggbm8gdHJhY2Ugcm93IChhbmQgdGhlIGxhenkgYnVmZmVyJ3MgYmFzZSB3YXMgdGhlbiB0YWtlbiBBRlRFUiB0aGVcbiAgICAvLyBlZGl0LCBzbyB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgc2F3IG5vdGhpbmcpLiBTdGF0ZSB2YWx1ZXMgc3Vydml2ZVxuICAgIC8vIGBzdHJ1Y3R1cmVkQ2xvbmVgIGJ5IGNvbnRyYWN0LCBzbyB0aGUgd29ya2luZyBjb3B5IGlzIGEgZnVsbCBjb3B5LlxuICAgIGNvbnN0IGNsb25lOiB1bmtub3duW10gPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpID8gc3RydWN0dXJlZENsb25lKGN1cnJlbnQpIDogW107XG4gICAgLy8gVXNlciBhcHBsaWVzIGFsbCBtdXRhdGlvbnMgdG8gdGhlIHBsYWluIGNsb25lIOKAlCBubyBQcm94eSwgbm8gcGVyLW11dGF0aW9uIGNvbW1pdFxuICAgIGZuKGNsb25lKTtcbiAgICAvLyBPbmUgc2V0VmFsdWUg4oCUIGZpcmVzIG9uV3JpdGUgb25jZSB3aXRoIHRoZSBmaW5hbCBhcnJheS4gVGhlIHN0YWdlIG1heVxuICAgIC8vIGhhdmUgcHVzaGVkIGhhbmRsZXMgaW50byB0aGUgY2xvbmUgKGBhcnIucHVzaChzY29wZS50ZW1wbGF0ZSlgKSDigJQgdGhleVxuICAgIC8vIGFyZSB2YWx1ZXMgYnkgdGhlIHRpbWUgdGhlIGFycmF5IGlzIHN0YWdlZCAoaGFuZGxlcy50cykuXG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXMoY2xvbmUpKTtcbiAgfSxcbiAgJGJyZWFrOiAoX3QsIG9wdHMpID0+IChyZWFzb24/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW9wdHMuYnJlYWtGbikgdGhyb3cgbmV3IEVycm9yKCckYnJlYWsoKSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgc3RhZ2UgZXhlY3V0aW9uJyk7XG4gICAgb3B0cy5icmVha0ZuKHJlYXNvbik7XG4gIH0sXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykuIFJvdXRlcyB0byBTY29wZUZhY2FkZS5lbWl0RXZlbnRcbiAgLy8gd2hpY2ggaGFuZGxlcyBmYXN0LXBhdGgsIGVucmljaG1lbnQsIHJlZGFjdGlvbiwgYW5kIGVycm9yIGlzb2xhdGlvbi5cbiAgJGVtaXQ6ICh0KSA9PiB0LmVtaXRFdmVudC5iaW5kKHQpLFxuICAvLyBEZXRhY2ggKFQ0KSDigJQgZmlyZS1hbmQtZm9yZ2V0IGNoaWxkIGZsb3djaGFydHMuIERlbGVnYXRlcyB0byBTY29wZUZhY2FkZVxuICAvLyB3aGljaCBtaW50ZWQgcmVmSWRzIGZyb20gcnVudGltZVN0YWdlSWQuXG4gICRkZXRhY2hBbmRKb2luTGF0ZXI6ICh0KSA9PiB0LmRldGFjaEFuZEpvaW5MYXRlci5iaW5kKHQpLFxuICAkZGV0YWNoQW5kRm9yZ2V0OiAodCkgPT4gdC5kZXRhY2hBbmRGb3JnZXQuYmluZCh0KSxcbiAgJHRvUmF3OiAodCkgPT4gKCkgPT4gdCxcbn07XG5cbi8vIC0tIEd1YXJkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCB0byBwcmV2ZW50IFByb3h5IGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhIFByb21pc2UsXG4vLyBicmVha2luZyBpbnN0YW5jZW9mIGNoZWNrcywgb3IgY29uZnVzaW5nIHRlc3QgbWF0Y2hlcnMuXG5cbmNvbnN0IEdVQVJEX1BST1BTOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiA9IHtcbiAgdGhlbjogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IFByb21pc2UgZGV0ZWN0aW9uXG4gIGFzeW1tZXRyaWNNYXRjaDogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IHZpdGVzdC9qZXN0IG1hdGNoZXIgY29uZnVzaW9uXG4gIGNvbnN0cnVjdG9yOiBPYmplY3QsIC8vIHNhZmUgcHJvdG90eXBlXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnVHlwZWRTY29wZScsXG59O1xuXG4vLyAtLSBTaWxlbnQgZXhpc3RlbmNlIGNoZWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRG9lcyB0aGlzIGtleSBleGlzdCBpbiBzdGF0ZSwgYW5zd2VyZWQgd2l0aCBOTyB0cmFja2luZyBzaWRlIGVmZmVjdCBhdCBhbGw/XG4gKlxuICogYGdldFN0YXRlS2V5cygpYCBpcyB0aGUgb25seSBpbnNwZWN0aW9uIGEgU2NvcGVGYWNhZGUgYW5zd2VycyB3aXRob3V0IHJvdXRpbmdcbiAqIHRocm91Z2ggdGhlIHRyYWNrZWQgcmVhZCBwYXRoLiBgaGFzS2V5KClgIGRlbGliZXJhdGVseSBET0VTIHJvdXRlIHRocm91Z2ggaXQ6XG4gKiBgJ2snIGluIHNjb3BlYCBpcyBhIHJlYWwgcXVlc3Rpb24gYWJvdXQgc3RhdGUgdGhhdCBhIHN0YWdlIGNhbiBicmFuY2ggb24sIHNvXG4gKiBpdCByZWdpc3RlcnMgYXMgYSByZWFkIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGlzIHByb2JlIG11c3Qgbm90IHVzZSBpdC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIHRhcmdldCBvZmZlcnMgbm8gc2lsZW50IGFuc3dlcjsgY2FsbGVycyBtdXN0XG4gKiB0aGVuIGNob29zZSBkZWxpYmVyYXRlbHkgcmF0aGVyIHRoYW4gYXNzdW1lLlxuICovXG5mdW5jdGlvbiBzaWxlbnRseUtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xufVxuXG4vLyAtLSBNdXRhYmxlIHN0YXRlIHBlciBwcm94eSBpbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBSZWFjdGl2ZVN0YXRlIHtcbiAgYnJlYWtGbj86IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBUaGUgdG9wLWxldmVsIGtleSdzIGNoaWxkIHByb3h5LCB2YWxpZGF0ZWQgYnkgcmF3IGlkZW50aXR5IChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk7IGEgc2luayBkcm9wcyB0aGUga2V5IG9uIHdyaXRlLiAqL1xuICBjaGlsZENhY2hlOiBNZW1iZXJDYWNoZTtcbn1cblxuLy8gLS0gTmVzdGVkIGNoaWxkIHByb3hpZXMgKGZvciBkZWVwIHdyaXRlIGludGVyY2VwdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBCb3RoIGZhY3RvcmllcyBhcmUgT1JDSEVTVFJBVE9SUyAoOS4yMy4xKTogcmVhZHMgYXJlIGBsaXZlVmlldy50c2AsIHdyaXRlc1xuLy8gYXJlIGB3cml0ZVRyYXBzLnRzYCBvdmVyIGEgYHJvb3RLZXlTaW5rYCwgYW5kIHRoZSBPTkUgdGhpbmcgZWFjaCBkZWNpZGVzXG4vLyBpdHNlbGYgaXMgd2hhdCBhIGNoaWxkIG1lbWJlciBiZWNvbWVzIOKAlCB0aGUgY3ljbGUgcG9saWN5LiBFYWNoIGhvbGRzIGl0c1xuLy8gb3duIHBlci1tZW1iZXIgcHJveHkgY2FjaGUgKDkuMjMuMiwgYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApLlxuLy9cbi8vIEN5Y2xlIHNhZmV0eTogYW4gaW1tdXRhYmxlIFNldDxvYmplY3Q+IG9mIGFuY2VzdG9yIG9iamVjdHMgaXMgcGFzc2VkIGRvd25cbi8vIGVhY2ggYWNjZXNzIGNoYWluLiBFYWNoIGJyYW5jaCBnZXRzIGl0cyBvd24gY29weSAobmV3IFNldChwYXJlbnQpKSBzb1xuLy8gc2NvcGUueC5mcmllbmQgYW5kIHNjb3BlLnguY293b3JrZXIgZG9uJ3QgcG9sbHV0ZSBlYWNoIG90aGVyJ3MgdHJhY2tpbmcuXG4vLyBXaGVuIGEgY2hpbGQgdmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgYW5jZXN0b3Igc2V0LCB3ZSd2ZSBoaXQgYSBjeWNsZS5cbi8vIEF0IHRoZSBjeWNsZSBicmVhazogcmV0dXJuIGEgdGVybWluYWwgcHJveHkgdGhhdCB0cmFja3Mgd3JpdGVzIChzZXQgdHJhcFxuLy8gc3RpbGwgYnVpbGRzIHBhdGggKyBjb21taXRzIHRocm91Z2ggdGhlIHNpbmspIGJ1dCBkb2Vzbid0IHJlY3Vyc2UgcmVhZHNcbi8vIGZ1cnRoZXIuIFRoZSB0ZXJtaW5hbCBjaGFpbiBzaGFyZXMgT05FIG11dGFibGUgYHZpc2l0ZWRgIHNldDogYSB2YWx1ZSBzZWVuXG4vLyBhbnl3aGVyZSBwYXN0IHRoZSBjeWNsZSBlZGdlIGlzIGhhbmRlZCBiYWNrIHJhdy5cblxuZnVuY3Rpb24gY3JlYXRlVGVybWluYWxQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZpc2l0ZWQ6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIHZpc2l0ZWQuYWRkKG9iaik7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3Qob2JqLCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICBjb25zdCBjaGlsZCA9ICh2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgLy8gQW4gYXJyYXkgcGFzdCB0aGUgY3ljbGUgZWRnZSBzdGlsbCBnZXRzIGNvcHktb24td3JpdGUgaW50ZXJjZXB0aW9uIOKAlFxuICAgIC8vIGl0IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgcm9vdCBrZXksIHRoZSBzYW1lIGxhdyBhcyB0aGUgbmVzdGVkIHByb3h5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAodmlzaXRlZC5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCB2aXNpdGVkKTtcbiAgfTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmVzdGVkUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIC8vIFJlYWRzIGFyZSBMSVZFICg5LjIyLjApOiBhIGhlbGQgcHJveHkgcmVhZHMgaXRzIG93biB3cml0ZXMsIGAneCcgaW4gb2BcbiAgLy8gYW5kIGBPYmplY3Qua2V5cyhvKWAgc2VlIHRoZW0sIGFuZCBgby5iID0gby5hICogMTBgIHVzZXMgdGhlIG5ldyBgYWAuXG4gIC8vIFRoZSBjYXB0dXJlZCBvYmplY3QgYW5zd2VycyBvbmx5IHdoZW4gdGhlIHBhdGggaXMgZ29uZSDigJQgc2VlIGxpdmVWaWV3LnRzLlxuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgUk9PVCBLRVkgKHJlYWN0aXZlL1JFQURNRS5tZCwgbGF3IDMpXG4gICAgLy8g4oCUIHRoZSBzaW5rJ3MgdmVyYiwgd2hhdGV2ZXIgZGVwdGggdGhlIGFycmF5IHNpdHMgYXQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoKTtcbiAgICByZXR1cm4gY3JlYXRlTmVzdGVkUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIG5ldyBTZXQoYW5jZXN0b3JzKS5hZGQodmFsdWUgYXMgb2JqZWN0KSk7XG4gIH07XG4gIHJldHVybiByZW1lbWJlckhhbmRsZShcbiAgICBuZXcgUHJveHkob2JqLCB7XG4gICAgICBnZXQ6IGxpdmVHZXRUcmFwKGxpdmUsIHNlZ21lbnRzLCBjaGlsZCwgbWVtYmVycyksXG4gICAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICAuLi5saXZlSW5zcGVjdGlvblRyYXBzKGxpdmUpLFxuICAgIH0pLFxuICAgIGxpdmUsXG4gICk7XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBsZWF2ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBgaW50ZXJuYWxSZWFkYCBhbnN3ZXJlZCBub3RoaW5nOiB0aGUgbmFtZSBpcyBhIHN0YXRlIGtleSBhbmQgbXVzdCBiZSByZWFkICh0cmFja2VkKSBmcm9tIHRoZSB0YXJnZXQuICovXG5jb25zdCBTVEFURV9LRVk6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ3N0YXRlLWtleScpO1xuXG4vKipcbiAqIFdIWTogdGhlIG5hbWVzIHRoZSBzY29wZSBhbnN3ZXJzIElUU0VMRiDigJQgaW50ZXJuYWwgc3ltYm9scywgdGhlIGd1YXJkXG4gKiBwcm9wZXJ0aWVzLCBOb2RlJ3MgaW5zcGVjdCBob29rLCB0aGUgYCRgLW1ldGhvZHMsIHRoZSBleGVjdXRvcidzIGFsbG93bGlzdGVkXG4gKiBwYXNzLXRocm91Z2hzIChgYXR0YWNoU2NvcGVSZWNvcmRlcmAsIGBub3RpZnlTdGFnZVN0YXJ0YCwg4oCmLCBjYWxsZWQgZGlyZWN0bHlcbiAqIG9uIHRoZSBzY29wZSkgYW5kIHRoZSBKU09OIHByb2JlIOKAlCBtdXN0IG5ldmVyIGJlY29tZSB0cmFja2VkIHJlYWRzO1xuICogZXZlcnl0aGluZyBlbHNlIGlzIGEgc3RhdGUga2V5IGFuZCBpcyBsZWZ0IHRvIHRoZSBjYWxsZXIuXG4gKlxuICogVGhlIHByb2JlOiBgSlNPTi5zdHJpbmdpZnlgIGFza3MgRVZFUlkgdmFsdWUgZm9yIGEgYHRvSlNPTmAgbWV0aG9kLiBUaGF0XG4gKiBxdWVzdGlvbiBjb21lcyBmcm9tIHRoZSBydW50aW1lLCBub3QgdGhlIHN0YWdlIGF1dGhvciwgc28gaXQgbXVzdCBub3QgZW50ZXJcbiAqIHRoZSByZWFkIHNldC4gQSBzdGF0ZSBrZXkgbGl0ZXJhbGx5IGNhbGxlZCAndG9KU09OJyBpcyBsZWdhbDogd2hlbiBpdCBFWElTVFNcbiAqIHRoaXMgaXMgYSBnZW51aW5lIHJlYWQgYW5kIHN0YXlzIHRyYWNrZWQsIGFuZCB3aGVuIHRoZSB0YXJnZXQgY2Fubm90IGFuc3dlclxuICogc2lsZW50bHksIHRydXRoIHdpbnMgb3ZlciBub2lzZSDigJQgZmFsbCB0aHJvdWdoLlxuICovXG5mdW5jdGlvbiBpbnRlcm5hbFJlYWQodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwgc3RhdGU6IFJlYWN0aXZlU3RhdGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IHVua25vd24ge1xuICBpZiAocHJvcCA9PT0gSVNfVFlQRURfU0NPUEUpIHJldHVybiB0cnVlO1xuICBpZiAocHJvcCA9PT0gQlJFQUtfU0VUVEVSKSB7XG4gICAgcmV0dXJuIChmbjogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgc3RhdGUuYnJlYWtGbiA9IGZuO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gICAgaWYgKHByb3AgPT09IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHJldHVybiAoKSA9PiB0YXJnZXQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gTUVUSE9EX1JPVVRFU1twcm9wXT8uKHRhcmdldCwgc3RhdGUpO1xuICBpZiAoRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUy5oYXMocHJvcCkgJiYgdHlwZW9mICh0YXJnZXQgYXMgYW55KVtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiAodGFyZ2V0IGFzIGFueSlbcHJvcF0uYmluZCh0YXJnZXQpO1xuICB9XG4gIGlmIChwcm9wID09PSAndG9KU09OJyAmJiBzaWxlbnRseUtub3duS2V5KHRhcmdldCwgcHJvcCkgPT09IGZhbHNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gU1RBVEVfS0VZO1xufVxuXG4vKipcbiAqIEEgd3JhcHBhYmxlIHN0YXRlIHZhbHVlIGJlY29tZXMgdGhlIGFycmF5IG9yIG5lc3RlZCBwcm94eSBmb3IgaXRzIGtleTtcbiAqIGFueXRoaW5nIGVsc2UgaXMgaGFuZGVkIGJhY2sgcmF3LiBgc2NvcGUuayA9PT0gc2NvcGUua2AgaG9sZHMgd2l0aGluIGFcbiAqIHN0YWdlIHRocm91Z2ggdGhlIHNhbWUgcGVyLW1lbWJlciBjYWNoZSBldmVyeSBvYmplY3QgcHJveHkgdXNlc1xuICogKGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKTogYSB3cml0ZSB0byB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeSAodGhlXG4gKiBzaW5rIGRvZXMgaXQpLCBhIGNvbW1pdCBzd2FwcyB0aGUgdmFsdWUgYW5kIHRoZSByZWYgY2hlY2sgbWlzc2VzIOKAlCBlaXRoZXJcbiAqIHdheSB0aGUgbmV4dCByZWFkIGJ1aWxkcyBhIGZyZXNoIHByb3h5IG92ZXIgdGhlIG5ldyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gd3JhcFN0YXRlVmFsdWUoXG4gIHRhcmdldDogUmVhY3RpdmVUYXJnZXQsXG4gIHJlYWRTaWxlbnQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgc3RhdGU6IFJlYWN0aXZlU3RhdGUsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTsgLy8gRGF0ZSwgTWFwLCBjbGFzcyBpbnN0YW5jZSwgZnJvemVuIOKAplxuICByZXR1cm4gY2FjaGVkTWVtYmVyKFxuICAgIHN0YXRlLmNoaWxkQ2FjaGUsXG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSByb290S2V5U2luayh0YXJnZXQsIHJlYWRTaWxlbnQsIGtleSwgc3RhdGUuY2hpbGRDYWNoZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgW10pO1xuICAgICAgcmV0dXJuIGNyZWF0ZU5lc3RlZFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBbXSwgbmV3IFNldDxvYmplY3Q+KFt2YWx1ZV0pKTtcbiAgICB9LFxuICAgIFtdLFxuICApO1xufVxuXG4vKiogV0hZOiBhIGAkYC1uYW1lIGNhbiBuZXZlciBiZSBhIHN0YXRlIGtleSDigJQgdGhlIHdyaXRlIGlzIHJlZnVzZWQsIG5vdCBzaGFkb3dlZDsgZXZlcnkgb3RoZXIgYXNzaWdubWVudFxuICogIHN0b3JlcyB0aGUgdmFsdWUgQVMgQVNTSUdORUQgKGEgaGFuZGxlIGJlY29tZXMgd2hhdCBpdCBzdGFuZHMgZm9yLCBgaGFuZGxlcy50c2A7IHRoZSBidWZmZXIgZGV0YWNoZXMgYXRcbiAqICBjb21taXQg4oCUIHRoZSBzYW1lIGxhdyBhcyBgJHNldFZhbHVlYCwgOS4yNC4wKSBhbmQgZHJvcHMgdGhlIGtleSdzIGNhY2hlZCBwcm94eS4gKi9cbmZ1bmN0aW9uIGFzc2lnblN0YXRlS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKFNDT1BFX01FVEhPRF9OQU1FUy5oYXMoa2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3Qgc2V0IHN0YXRlIGtleSBcIiR7a2V5fVwiIC0tIGl0IGNvbmZsaWN0cyB3aXRoIGEgcmVzZXJ2ZWQgVHlwZWRTY29wZSBtZXRob2QuIFJlbmFtZSB0aGUgc3RhdGUga2V5IHRvIGF2b2lkICQtcHJlZml4ZWQgbmFtZXMuYCxcbiAgICApO1xuICB9XG4gIHRhcmdldC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpKTtcbiAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUoa2V5KTtcbn1cblxuLyoqIERvZXMgdGhlIGtleSBleGlzdCDigJQgYW5zd2VyZWQgd2l0aG91dCBhIHRyYWNrZWQgcmVhZCB3aGVyZXZlciB0aGUgdGFyZ2V0IGNhbjsgYGdldFZhbHVlYCBpcyB0aGUgbGFzdCByZXNvcnQuICovXG5mdW5jdGlvbiBrbm93bktleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodGFyZ2V0Lmhhc0tleSkgcmV0dXJuIHRhcmdldC5oYXNLZXkoa2V5KTtcbiAgaWYgKHRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbiAgcmV0dXJuIHRhcmdldC5nZXRWYWx1ZShrZXkpICE9PSB1bmRlZmluZWQ7IC8vIGZhbGxiYWNrOiBmaXJlcyBvblJlYWQgKGFjY2VwdGFibGUgZGVncmFkYXRpb24pXG59XG5cbi8qKiBFdmVyeSBzdGF0ZSBrZXkg4oCUIHNpbGVudGx5IHdoZXJlIHRoZSB0YXJnZXQgY2FuLCBlbHNlIGZyb20gYSB3aG9sZS1zdGF0ZSByZWFkLiAqL1xuZnVuY3Rpb24gc3RhdGVLZXlzKHRhcmdldDogUmVhY3RpdmVUYXJnZXQpOiBzdHJpbmdbXSB7XG4gIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpO1xuICBjb25zdCBzbmFwc2hvdCA9IHRhcmdldC5nZXRWYWx1ZSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICByZXR1cm4gc25hcHNob3QgJiYgdHlwZW9mIHNuYXBzaG90ID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKHNuYXBzaG90KSA6IFtdO1xufVxuXG4vLyAtLSBUb3AtbGV2ZWwgcHJveHkgKHRoZSBtYWluIFR5cGVkU2NvcGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ3JlYXRlcyBhIFR5cGVkU2NvcGU8VD4gcHJveHkgd3JhcHBpbmcgYSBSZWFjdGl2ZVRhcmdldC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHVuZGVybHlpbmcgc2NvcGUgKFNjb3BlRmFjYWRlIG9yIGFueSBSZWFjdGl2ZVRhcmdldClcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAoYnJlYWtQaXBlbGluZSBpbmplY3Rpb24pXG4gKiBAcmV0dXJucyBBIFByb3h5IHdpdGggdHlwZWQgcHJvcGVydHkgYWNjZXNzIGFuZCAkLXByZWZpeGVkIG1ldGhvZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGVkU2NvcGU8VCBleHRlbmRzIG9iamVjdD4odGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwgb3B0aW9ucz86IFJlYWN0aXZlT3B0aW9ucyk6IFR5cGVkU2NvcGU8VD4ge1xuICBjb25zdCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSA9IHsgYnJlYWtGbjogb3B0aW9ucz8uYnJlYWtQaXBlbGluZSwgY2hpbGRDYWNoZTogbmV3IE1lbWJlckNhY2hlKCkgfTtcbiAgLy8gQmluZCB0aGUgc2lsZW50IHJlYWQgb25jZSDigJQgdGhlIG5lc3RlZC9hcnJheSBwcm94aWVzIHJlc29sdmUgdGhlaXIgbGl2ZSB2aWV3IHRocm91Z2ggaXQuXG4gIGNvbnN0IHJlYWRTaWxlbnQgPSAodGFyZ2V0LmdldFZhbHVlU2lsZW50ID8/IHRhcmdldC5nZXRWYWx1ZSkuYmluZCh0YXJnZXQpO1xuXG4gIHJldHVybiBuZXcgUHJveHkodGFyZ2V0IGFzIHVua25vd24gYXMgVHlwZWRTY29wZTxUPiwge1xuICAgIGdldChfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGNvbnN0IGFuc3dlcmVkID0gaW50ZXJuYWxSZWFkKHRhcmdldCwgc3RhdGUsIHByb3ApO1xuICAgICAgaWYgKGFuc3dlcmVkICE9PSBTVEFURV9LRVkpIHJldHVybiBhbnN3ZXJlZDtcbiAgICAgIC8vIEEgc3RhdGUga2V5OiBPTkUgdHJhY2tlZCByZWFkIChmaXJlcyBvblJlYWQgb25jZSksIHRoZW4gdGhlIHdyYXBwZXIuXG4gICAgICByZXR1cm4gd3JhcFN0YXRlVmFsdWUodGFyZ2V0LCByZWFkU2lsZW50LCBzdGF0ZSwgcHJvcCBhcyBzdHJpbmcsIHRhcmdldC5nZXRWYWx1ZShwcm9wIGFzIHN0cmluZykpO1xuICAgIH0sXG4gICAgc2V0KF9wcm94eVRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIGFzc2lnblN0YXRlS2V5KHRhcmdldCwgc3RhdGUsIHByb3AsIHZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHkoX3Byb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHRhcmdldC5kZWxldGVWYWx1ZShwcm9wKTtcbiAgICAgIHN0YXRlLmNoaWxkQ2FjaGUuZGVsZXRlKHByb3ApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBoYXMoX3Byb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdVQVJEX1BST1BTLCBwcm9wKTtcbiAgICAgIHJldHVybiBTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApIHx8IGtub3duS2V5KHRhcmdldCwgcHJvcCk7XG4gICAgfSxcbiAgICBvd25LZXlzOiAoKSA9PiBzdGF0ZUtleXModGFyZ2V0KSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX3Byb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnIHx8IFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkpIHJldHVybiB1bmRlZmluZWQ7IC8vICQtbWV0aG9kcyBhcmUgbm9uLWVudW1lcmFibGVcbiAgICAgIGlmICgha25vd25LZXkodGFyZ2V0LCBwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfTsgLy8gdGhlIHZhbHVlIGlzIGZldGNoZWQgdmlhIHRoZSBnZXQgdHJhcFxuICAgIH0sXG4gIH0pO1xufVxuIl19
|