footprintjs 9.30.0 → 9.32.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/AGENTS.md +3 -3
- package/CLAUDE.md +6 -4
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/lib/builder/FlowChartBuilder.js +2 -2
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +2 -2
- package/dist/esm/lib/capture/circular.d.ts +17 -0
- package/dist/esm/lib/capture/circular.js +45 -0
- package/dist/esm/lib/capture/envelope.d.ts +1 -1
- package/dist/esm/lib/capture/envelope.js +2 -2
- package/dist/esm/lib/capture/index.d.ts +7 -1
- package/dist/esm/lib/capture/index.js +8 -2
- package/dist/esm/lib/capture/invokeHook.d.ts +36 -0
- package/dist/esm/lib/capture/invokeHook.js +42 -0
- package/dist/esm/lib/capture/summarize.d.ts +13 -0
- package/dist/esm/lib/capture/summarize.js +37 -1
- package/dist/esm/lib/decide/decide.js +2 -2
- package/dist/esm/lib/decide/evaluator.js +5 -4
- package/dist/esm/lib/decide/evidence.js +4 -3
- package/dist/esm/lib/devMode.d.ts +45 -0
- package/dist/esm/lib/devMode.js +96 -0
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +2 -2
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +2 -2
- package/dist/esm/lib/memory/StageContext.js +5 -4
- package/dist/esm/lib/memory/admission.d.ts +1 -1
- package/dist/esm/lib/memory/admission.js +2 -2
- package/dist/esm/lib/memory/backtrack.d.ts +9 -0
- package/dist/esm/lib/memory/backtrack.js +2 -2
- package/dist/esm/lib/memory/commitLogUtils.d.ts +21 -3
- package/dist/esm/lib/memory/commitLogUtils.js +39 -43
- package/dist/esm/lib/memory/equality.d.ts +57 -0
- package/dist/esm/lib/memory/equality.js +159 -0
- package/dist/esm/lib/memory/honesty.d.ts +88 -0
- package/dist/esm/lib/memory/honesty.js +86 -0
- package/dist/esm/lib/memory/index.d.ts +5 -1
- package/dist/esm/lib/memory/index.js +7 -2
- package/dist/esm/lib/memory/merge.d.ts +25 -0
- package/dist/esm/lib/memory/merge.js +49 -0
- package/dist/esm/lib/memory/paths.d.ts +52 -0
- package/dist/esm/lib/memory/paths.js +57 -0
- package/dist/esm/lib/memory/placeholders.d.ts +44 -0
- package/dist/esm/lib/memory/placeholders.js +45 -0
- package/dist/esm/lib/memory/redaction.d.ts +4 -4
- package/dist/esm/lib/memory/redaction.js +12 -11
- package/dist/esm/lib/memory/utils.d.ts +15 -216
- package/dist/esm/lib/memory/utils.js +19 -438
- package/dist/esm/lib/memory/verbs.d.ts +289 -0
- package/dist/esm/lib/memory/verbs.js +386 -0
- package/dist/esm/lib/recorder/BoundaryStateStore.js +2 -2
- package/dist/esm/lib/recorder/invokeHook.d.ts +5 -29
- package/dist/esm/lib/recorder/invokeHook.js +6 -35
- package/dist/esm/lib/runner/DeferredObserverTier.js +3 -3
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +1 -0
- package/dist/esm/lib/runner/ExecutionRuntime.js +2 -4
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +2 -2
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +2 -2
- package/dist/esm/lib/scope/ScopeFacade.js +6 -4
- package/dist/esm/lib/scope/detectCircular.d.ts +9 -43
- package/dist/esm/lib/scope/detectCircular.js +10 -121
- package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +3 -5
- package/dist/esm/lib/scope/recorders/summarizeValue.js +4 -29
- package/dist/esm/lib/slice/elementProvenance.d.ts +13 -9
- package/dist/esm/lib/slice/elementProvenance.js +54 -63
- package/dist/esm/lib/slice/types.d.ts +40 -27
- package/dist/esm/lib/slice/types.js +1 -1
- package/dist/esm/lib/time-travel/bundles.js +6 -4
- package/dist/esm/lib/time-travel/stateAt.d.ts +3 -2
- package/dist/esm/lib/time-travel/stateAt.js +4 -3
- package/dist/esm/lib/time-travel/types.d.ts +18 -7
- package/dist/esm/lib/time-travel/types.js +1 -1
- package/dist/esm/trace.d.ts +3 -0
- package/dist/esm/trace.js +7 -1
- package/dist/index.js +5 -5
- package/dist/lib/builder/FlowChartBuilder.js +3 -3
- package/dist/lib/builder/structure/StructureRecorderDispatcher.js +3 -3
- package/dist/lib/capture/circular.js +49 -0
- package/dist/lib/capture/envelope.js +2 -2
- package/dist/lib/capture/index.js +11 -2
- package/dist/lib/capture/invokeHook.js +46 -0
- package/dist/lib/capture/summarize.js +39 -2
- package/dist/lib/decide/decide.js +4 -4
- package/dist/lib/decide/evaluator.js +6 -5
- package/dist/lib/decide/evidence.js +4 -3
- package/dist/lib/devMode.js +102 -0
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +5 -5
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -19
- package/dist/lib/memory/StageContext.js +7 -6
- package/dist/lib/memory/admission.js +2 -2
- package/dist/lib/memory/backtrack.js +3 -3
- package/dist/lib/memory/commitLogUtils.js +41 -44
- package/dist/lib/memory/equality.js +163 -0
- package/dist/lib/memory/honesty.js +89 -0
- package/dist/lib/memory/index.js +11 -3
- package/dist/lib/memory/merge.js +53 -0
- package/dist/lib/memory/paths.js +62 -0
- package/dist/lib/memory/placeholders.js +48 -0
- package/dist/lib/memory/redaction.js +14 -13
- package/dist/lib/memory/utils.js +30 -448
- package/dist/lib/memory/verbs.js +403 -0
- package/dist/lib/recorder/BoundaryStateStore.js +5 -5
- package/dist/lib/recorder/invokeHook.js +8 -37
- package/dist/lib/runner/DeferredObserverTier.js +6 -6
- package/dist/lib/runner/ExecutionRuntime.js +3 -5
- package/dist/lib/runner/FlowChartExecutor.js +4 -4
- package/dist/lib/runner/getSubtreeSnapshot.js +3 -3
- package/dist/lib/scope/ScopeFacade.js +10 -8
- package/dist/lib/scope/detectCircular.js +15 -126
- package/dist/lib/scope/recorders/summarizeValue.js +7 -32
- package/dist/lib/slice/elementProvenance.js +53 -62
- package/dist/lib/slice/types.js +1 -1
- package/dist/lib/time-travel/bundles.js +6 -4
- package/dist/lib/time-travel/stateAt.js +4 -3
- package/dist/lib/time-travel/types.js +1 -1
- package/dist/trace.js +35 -27
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/capture/circular.d.ts +17 -0
- package/dist/types/lib/capture/envelope.d.ts +1 -1
- package/dist/types/lib/capture/index.d.ts +7 -1
- package/dist/types/lib/capture/invokeHook.d.ts +36 -0
- package/dist/types/lib/capture/summarize.d.ts +13 -0
- package/dist/types/lib/devMode.d.ts +45 -0
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/types/lib/memory/admission.d.ts +1 -1
- package/dist/types/lib/memory/backtrack.d.ts +9 -0
- package/dist/types/lib/memory/commitLogUtils.d.ts +21 -3
- package/dist/types/lib/memory/equality.d.ts +57 -0
- package/dist/types/lib/memory/honesty.d.ts +88 -0
- package/dist/types/lib/memory/index.d.ts +5 -1
- package/dist/types/lib/memory/merge.d.ts +25 -0
- package/dist/types/lib/memory/paths.d.ts +52 -0
- package/dist/types/lib/memory/placeholders.d.ts +44 -0
- package/dist/types/lib/memory/redaction.d.ts +4 -4
- package/dist/types/lib/memory/utils.d.ts +15 -216
- package/dist/types/lib/memory/verbs.d.ts +289 -0
- package/dist/types/lib/recorder/invokeHook.d.ts +5 -29
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
- package/dist/types/lib/scope/detectCircular.d.ts +9 -43
- package/dist/types/lib/scope/recorders/summarizeValue.d.ts +3 -5
- package/dist/types/lib/slice/elementProvenance.d.ts +13 -9
- package/dist/types/lib/slice/types.d.ts +40 -27
- package/dist/types/lib/time-travel/stateAt.d.ts +3 -2
- package/dist/types/lib/time-travel/types.d.ts +18 -7
- package/dist/types/trace.d.ts +3 -0
- package/package.json +2 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - A function: (s) => s.creditScore > 700 (auto-captures reads via temp recorder)
|
|
9
9
|
* - A filter: { creditScore: { gt: 700 } } (captures reads + operators + thresholds)
|
|
10
10
|
*/
|
|
11
|
-
import { isDevMode } from '../
|
|
11
|
+
import { isDevMode } from '../devMode.js';
|
|
12
12
|
import { evaluateFilter } from './evaluator.js';
|
|
13
13
|
import { EvidenceCollector } from './evidence.js';
|
|
14
14
|
import { DECISION_RESULT } from './types.js';
|
|
@@ -239,4 +239,4 @@ export function select(scope, rules) {
|
|
|
239
239
|
};
|
|
240
240
|
return { branches: selectedBranches, [DECISION_RESULT]: true, evidence };
|
|
241
241
|
}
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBY2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsSUFBSSxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLEtBQWdDLENBQUM7SUFDM0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLElBQUksT0FBTyxDQUFDLENBQUMsbUJBQW1CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFD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LGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzNFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGRlY2lkZS9kZWNpZGUgLS0gQ29yZSBkZWNpZGUoKSBhbmQgc2VsZWN0KCkgaGVscGVyIGZ1bmN0aW9ucy5cbiAqXG4gKiBkZWNpZGUoKSBldmFsdWF0ZXMgcnVsZXMgaW4gb3JkZXIgKGZpcnN0LW1hdGNoKSBhbmQgcmV0dXJucyBhIERlY2lzaW9uUmVzdWx0LlxuICogc2VsZWN0KCkgZXZhbHVhdGVzIEFMTCBydWxlcyBhbmQgcmV0dXJucyBhIFNlbGVjdGlvblJlc3VsdCB3aXRoIGFsbCBtYXRjaGVzLlxuICpcbiAqIEVhY2ggcnVsZSdzIGB3aGVuYCBjYW4gYmU6XG4gKiAtIEEgZnVuY3Rpb246IChzKSA9PiBzLmNyZWRpdFNjb3JlID4gNzAwICAoYXV0by1jYXB0dXJlcyByZWFkcyB2aWEgdGVtcCByZWNvcmRlcilcbiAqIC0gQSBmaWx0ZXI6ICAgeyBjcmVkaXRTY29yZTogeyBndDogNzAwIH0gfSAoY2FwdHVyZXMgcmVhZHMgKyBvcGVyYXRvcnMgKyB0aHJlc2hvbGRzKVxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IGV2YWx1YXRlRmlsdGVyIH0gZnJvbSAnLi9ldmFsdWF0b3IuanMnO1xuaW1wb3J0IHsgRXZpZGVuY2VDb2xsZWN0b3IgfSBmcm9tICcuL2V2aWRlbmNlLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIERlZmF1bHRCcmFuY2gsXG4gIEZpbHRlckNvbmRpdGlvbixcbiAgRmlsdGVyUnVsZUV2aWRlbmNlLFxuICBGdW5jdGlvblJ1bGVFdmlkZW5jZSxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gLS0gU2NvcGUgYWNjZXNzb3IgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRBdHRhY2hGbihzY29wZTogdW5rbm93bik6ICgocjogU2NvcGVSZWNvcmRlcikgPT4gdm9pZCkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygcy4kYXR0YWNoU2NvcGVSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZChzKTtcbiAgaWYgKHR5cGVvZiBzLmF0dGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZChzKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RGV0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKGlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGRldGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRkZXRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5kZXRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIENoZWNrICRnZXRWYWx1ZSBmaXJzdDogb24gVHlwZWRTY29wZSwgYWNjZXNzaW5nIC5nZXRWYWx1ZSB0cmlnZ2VycyBhIHNwdXJpb3VzXG4gIC8vIG9uUmVhZCBmb3Iga2V5IFwiZ2V0VmFsdWVcIiB2aWEgdGhlIFByb3h5IGdldCB0cmFwLiAkZ2V0VmFsdWUgcm91dGVzIHRocm91Z2hcbiAgLy8gU0NPUEVfTUVUSE9EX05BTUVTIGFuZCBhdm9pZHMgdGhlIHN0YXRlLXJlYWQgcGF0aC5cbiAgaWYgKHR5cGVvZiBzLiRnZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGdldFZhbHVlLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5nZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuZ2V0VmFsdWUuYmluZChzKTtcbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkYWN0ZWRGbihzY29wZTogdW5rbm93bik6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gVHJ5ICR0b1JhdygpIGZpcnN0IChUeXBlZFNjb3BlKSwgdGhlbiBkaXJlY3RcbiAgY29uc3QgcmF3ID0gdHlwZW9mIHMuJHRvUmF3ID09PSAnZnVuY3Rpb24nID8gcy4kdG9SYXcoKSA6IHM7XG4gIGNvbnN0IHIgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygci5nZXRSZWRhY3RlZEtleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBrZXlzID0gci5nZXRSZWRhY3RlZEtleXMoKSBhcyBTZXQ8c3RyaW5nPjtcbiAgICByZXR1cm4gKGtleTogc3RyaW5nKSA9PiBrZXlzLmhhcyhrZXkpO1xuICB9XG4gIHJldHVybiAoKSA9PiBmYWxzZTtcbn1cblxuLy8gLS0gZXZhbHVhdGUgYSBzaW5nbGUgcnVsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBldmFsdWF0ZVJ1bGU8UyBleHRlbmRzIG9iamVjdD4oXG4gIHNjb3BlOiBTLFxuICBydWxlOiBEZWNpZGVSdWxlPFM+LFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRhY2hGbj86IChyOiBTY29wZVJlY29yZGVyKSA9PiB2b2lkLFxuICBkZXRhY2hGbj86IChpZDogc3RyaW5nKSA9PiB2b2lkLFxuICB2YWx1ZUZuPzogKGtleTogc3RyaW5nKSA9PiB1bmtub3duLFxuICByZWRhY3RlZEZuPzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuKTogUnVsZUV2aWRlbmNlIHtcbiAgaWYgKHR5cGVvZiBydWxlLndoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBGVU5DVElPTiBQQVRIOiB0ZW1wIHJlY29yZGVyIGNhcHR1cmVzIHJlYWRzIChsYXp5IOKAlCBza2lwIGlmIG5vIHJlY29yZGVyIHN1cHBvcnQpXG4gICAgY29uc3QgaGFzUmVjb3JkZXJTdXBwb3J0ID0gQm9vbGVhbihhdHRhY2hGbik7XG4gICAgY29uc3QgY29sbGVjdG9yID0gaGFzUmVjb3JkZXJTdXBwb3J0ID8gbmV3IEV2aWRlbmNlQ29sbGVjdG9yKCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbGxlY3RvciAmJiBhdHRhY2hGbikgYXR0YWNoRm4oY29sbGVjdG9yKTtcblxuICAgIGxldCBtYXRjaGVkOiBib29sZWFuO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIG1hdGNoZWQgPSBydWxlLndoZW4oc2NvcGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjb2xsZWN0b3IgJiYgZGV0YWNoRm4pIGRldGFjaEZuKGNvbGxlY3Rvci5pZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZ1bmN0aW9uUnVsZUV2aWRlbmNlID0ge1xuICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIC8vIFBhcnRpYWwgcmVhZHM6IGlmIHJ1bGUgdGhyZXcgYWZ0ZXIgc29tZSBnZXRWYWx1ZSgpIGNhbGxzLCBjb2xsZWN0b3IgaG9sZHMgcmVhZHMgdXAgdG8gdGhlIHRocm93IHBvaW50XG4gICAgICBpbnB1dHM6IGNvbGxlY3Rvcj8uZ2V0SW5wdXRzKCkgPz8gW10sXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGSUxURVIgUEFUSDogcmVhZHMgdmFsdWVzIGRpcmVjdGx5IHZpYSBjYWxsYmFja3MgKG5vIHJlY29yZGVyKTsgZXhjZXB0aW9ucyB0cmVhdGVkIGFzIG5vbi1tYXRjaFxuICAgIGNvbnN0IHJlc29sdmVkVmFsdWVGbiA9IHZhbHVlRm4gPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVzb2x2ZWRSZWRhY3RlZEZuID0gcmVkYWN0ZWRGbiA/PyAoKCkgPT4gZmFsc2UpO1xuICAgIGxldCBmaWx0ZXJNYXRjaGVkID0gZmFsc2U7XG4gICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XG4gICAgbGV0IG1hdGNoRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZhbHVhdGVGaWx0ZXIocmVzb2x2ZWRWYWx1ZUZuLCByZXNvbHZlZFJlZGFjdGVkRm4sIHJ1bGUud2hlbiBhcyBXaGVyZUZpbHRlcjxTPik7XG4gICAgICBmaWx0ZXJNYXRjaGVkID0gcmVzdWx0Lm1hdGNoZWQ7XG4gICAgICBmaWx0ZXJDb25kaXRpb25zID0gcmVzdWx0LmNvbmRpdGlvbnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyDigJQgc3VyZmFjZSBpdCBpbiBldmlkZW5jZSBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgc2lsZW50bHlcbiAgICAgIG1hdGNoRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBydWxlLmxhYmVsID8gYCAoJyR7cnVsZS5sYWJlbH0nKWAgOiAnJztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBkZWNpZGUoKSBmaWx0ZXIgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZpbHRlclJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmaWx0ZXInLFxuICAgICAgcnVsZUluZGV4OiBpbmRleCxcbiAgICAgIGJyYW5jaDogcnVsZS50aGVuLFxuICAgICAgbWF0Y2hlZDogZmlsdGVyTWF0Y2hlZCxcbiAgICAgIGxhYmVsOiBydWxlLmxhYmVsLFxuICAgICAgY29uZGl0aW9uczogZmlsdGVyQ29uZGl0aW9ucyxcbiAgICAgIC4uLihtYXRjaEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBtYXRjaEVycm9yIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIGV2aWRlbmNlO1xuICB9XG59XG5cbi8vIC0tIGRlZmF1bHQgYnJhbmNoIG5vcm1hbGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb2xsYXBzZXMgYm90aCB7QGxpbmsgRGVmYXVsdEJyYW5jaH0gZm9ybXMgdG8gb25lIHNoYXBlLCBvbmNlLCBhdCB0aGUgdG9wIG9mXG4gKiBgZGVjaWRlKClgLiBBIGJhcmUgc3RyaW5nIHlpZWxkcyBgbGFiZWw6IHVuZGVmaW5lZGAsIHdoaWNoIGV2ZXJ5IGRvd25zdHJlYW1cbiAqIHNwcmVhZCB0aGVuIG9taXRzIOKAlCBzbyB0aGUgc3RyaW5nIGNhbGwgc2l0ZSBwcm9kdWNlcyBleGFjdGx5IHRoZSBldmlkZW5jZSBpdFxuICogcHJvZHVjZWQgYmVmb3JlIHRoaXMgcGFyYW1ldGVyIHdhcyB3aWRlbmVkLlxuICpcbiAqIE9OTFkgdGhlIG9iamVjdCBmb3JtIGlzIHVud3JhcHBlZDsgZXZlcnkgb3RoZXIgdmFsdWUgcGFzc2VzIHRocm91Z2ggYXMgdGhlXG4gKiBicmFuY2gsIHVudG91Y2hlZC4gVGhhdCBpcyBkZWxpYmVyYXRlOiBKYXZhU2NyaXB0IGNhbGxlcnMgcmVhY2ggYGRlY2lkZSgpYFxuICogd2l0aCB0aGUgdGhpcmQgYXJndW1lbnQgTUlTU0lORyAoYSBydWxlIHNldCB0aGF0IGNvdmVycyBldmVyeSBjYXNlIG5ldmVyXG4gKiBjb25zdWx0cyBhIGRlZmF1bHQpLCBhbmQgYmVmb3JlIHRoZSBwYXJhbWV0ZXIgd2lkZW5lZCB0aGF0IGB1bmRlZmluZWRgXG4gKiBzaW1wbHkgbGFuZGVkIG9uIGBldmlkZW5jZS5kZWZhdWx0YC4gSXQgc3RpbGwgZG9lcyDigJQgYSBub3JtYWxpemF0aW9uIHRoYXRcbiAqIG9ubHkgdW5kZXJzdG9vZCBzdHJpbmdzIHdvdWxkIHR1cm4gdGhvc2UgY2FsbCBzaXRlcyBpbnRvIGEgVHlwZUVycm9yLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2g6IERlZmF1bHRCcmFuY2gpOiB7IGJyYW5jaDogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9IHtcbiAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0QnJhbmNoID09PSAnb2JqZWN0JyAmJiBkZWZhdWx0QnJhbmNoICE9PSBudWxsXG4gICAgPyBkZWZhdWx0QnJhbmNoXG4gICAgOiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCBhcyBzdHJpbmcgfTtcbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggdGFrZW4gd2hlbiBubyBydWxlIG1hdGNoZXMuIEVpdGhlciB0aGUgYnJhbmNoXG4gKiAgIGlkIChgJ3JlamVjdGVkJ2ApIG9yIHRoZSBpZCBwbHVzIHdoYXQgZmFsbGluZyBiYWNrIHRvIGl0IE1FQU5TXG4gKiAgIChgeyBicmFuY2g6ICdyZWplY3RlZCcsIGxhYmVsOiAnTm8gcnVsZSBmaXJlZCcgfWApLiBUaGUgbGFiZWwgbGFuZHMgb25cbiAqICAgYGV2aWRlbmNlLmRlZmF1bHRMYWJlbGAg4oCUIHRoZSBkZWZhdWx0IGlzIGNob3NlbiBieSBubyBydWxlLCBzbyBpdCBpcyB0aGVcbiAqICAgb25lIGJyYW5jaCB0aGF0IGBydWxlc1tdLmxhYmVsYCBjYW4gbmV2ZXIgZGVzY3JpYmUuXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiAqKkVtcHR5LWZpbHRlciBiZWhhdmlvciAoYW50aS12YWN1b3VzLXRydXRoKToqKiBhIGZpbHRlciBydWxlIHdob3NlIGB3aGVuYCBpc1xuICogYHt9YCAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIE5FVkVSIG1hdGNoZXMuIFRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgdGhlXG4gKiBQcmlzbWEvU1FMIGB3aGVyZToge31gIGludHVpdGlvbiAoXCJtYXRjaCBldmVyeXRoaW5nXCIpIOKAlCBhIHJ1bGUgdGhhdCBhc3NlcnRzXG4gKiBub3RoaW5nIG11c3Qgbm90IHdpbiBhIGJyYW5jaCBvbiB2YWN1b3VzIHRydXRoLiBVc2UgYGRlZmF1bHRCcmFuY2hgIGZvciB0aGVcbiAqIGNhdGNoLWFsbCBpbnN0ZWFkLiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSxcbiAgZGVmYXVsdEJyYW5jaDogRGVmYXVsdEJyYW5jaCxcbik6IERlY2lzaW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBsYWJlbDogZGVmYXVsdExhYmVsIH0gPSBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2gpO1xuICAvLyBEZWNsYXJlZCBvbmNlLCBzcHJlYWQgaW50byBCT1RIIGV4aXRzIGJlbG93IOKAlCBkZWxpYmVyYXRlbHkuIEEgZGVmYXVsdCdzXG4gIC8vIG1lYW5pbmcgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgREVDSURFUiwgbm90IG9mIHRoZSBydW46IGl0IG11c3QgYmUgaW4gdGhlXG4gIC8vIGV2aWRlbmNlIG9mIHRoZSBydW4gd2hlcmUgYSBydWxlIHdvbiBqdXN0IGFzIG11Y2ggYXMgaW4gdGhlIHJ1biB0aGF0IGZlbGxcbiAgLy8gdGhyb3VnaC4gRW1pdCBpdCBvbmx5IG9uIHRoZSBmYWxsdGhyb3VnaCBhbmQgYW55IGNvbnN1bWVyIGhhcnZlc3RpbmcgYnJhbmNoXG4gIC8vIG1lYW5pbmdzIHdvdWxkIHdhdGNoIHRoZW0gYXBwZWFyIGFuZCBkaXNhcHBlYXIgd2l0aCB0aGUgZGF0YS5cbiAgY29uc3QgZGVmYXVsdE1lYW5pbmcgPSBkZWZhdWx0TGFiZWwgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdExhYmVsIH0gOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaElkLFxuICAgICAgICAuLi5kZWZhdWx0TWVhbmluZyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2hJZCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoSWQsXG4gICAgLi4uZGVmYXVsdE1lYW5pbmcsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogKipFbXB0eS1maWx0ZXIgYmVoYXZpb3IgKGFudGktdmFjdW91cy10cnV0aCk6KiogYSBmaWx0ZXIgcnVsZSB3aG9zZSBgd2hlbmAgaXNcbiAqIGB7fWAgKG5vIGV2YWx1YWJsZSBjb25kaXRpb25zKSBORVZFUiBtYXRjaGVzIOKAlCBzYW1lIHJ1bGUgYXMgYGRlY2lkZSgpYDsgYW5cbiAqIGFsd2F5cy1zZWxlY3RlZCBicmFuY2ggbXVzdCBiZSBleHByZXNzZWQgZXhwbGljaXRseSwgbm90IHZpYSBhbiBlbXB0eSBmaWx0ZXIuXG4gKiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdDLCtFQUErRTtBQUUvRSxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLEtBQWdDLENBQUM7SUFDM0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLElBQUksT0FBTyxDQUFDLENBQUMsbUJBQW1CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxNQUFNLENBQUMsR0FBRyxLQUFnQyxDQUFDO0lBQzNDLElBQUksT0FBTyxDQUFDLENBQUMsb0JBQW9CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixJQUFJLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztB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QkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWNpZGUvZGVjaWRlIC0tIENvcmUgZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogZGVjaWRlKCkgZXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkgYW5kIHJldHVybnMgYSBEZWNpc2lvblJlc3VsdC5cbiAqIHNlbGVjdCgpIGV2YWx1YXRlcyBBTEwgcnVsZXMgYW5kIHJldHVybnMgYSBTZWxlY3Rpb25SZXN1bHQgd2l0aCBhbGwgbWF0Y2hlcy5cbiAqXG4gKiBFYWNoIHJ1bGUncyBgd2hlbmAgY2FuIGJlOlxuICogLSBBIGZ1bmN0aW9uOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMgdmlhIHRlbXAgcmVjb3JkZXIpXG4gKiAtIEEgZmlsdGVyOiAgIHsgY3JlZGl0U2NvcmU6IHsgZ3Q6IDcwMCB9IH0gKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IGV2YWx1YXRlRmlsdGVyIH0gZnJvbSAnLi9ldmFsdWF0b3IuanMnO1xuaW1wb3J0IHsgRXZpZGVuY2VDb2xsZWN0b3IgfSBmcm9tICcuL2V2aWRlbmNlLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIERlZmF1bHRCcmFuY2gsXG4gIEZpbHRlckNvbmRpdGlvbixcbiAgRmlsdGVyUnVsZUV2aWRlbmNlLFxuICBGdW5jdGlvblJ1bGVFdmlkZW5jZSxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gLS0gU2NvcGUgYWNjZXNzb3IgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRBdHRhY2hGbihzY29wZTogdW5rbm93bik6ICgocjogU2NvcGVSZWNvcmRlcikgPT4gdm9pZCkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygcy4kYXR0YWNoU2NvcGVSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZChzKTtcbiAgaWYgKHR5cGVvZiBzLmF0dGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZChzKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RGV0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKGlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGRldGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRkZXRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5kZXRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIENoZWNrICRnZXRWYWx1ZSBmaXJzdDogb24gVHlwZWRTY29wZSwgYWNjZXNzaW5nIC5nZXRWYWx1ZSB0cmlnZ2VycyBhIHNwdXJpb3VzXG4gIC8vIG9uUmVhZCBmb3Iga2V5IFwiZ2V0VmFsdWVcIiB2aWEgdGhlIFByb3h5IGdldCB0cmFwLiAkZ2V0VmFsdWUgcm91dGVzIHRocm91Z2hcbiAgLy8gU0NPUEVfTUVUSE9EX05BTUVTIGFuZCBhdm9pZHMgdGhlIHN0YXRlLXJlYWQgcGF0aC5cbiAgaWYgKHR5cGVvZiBzLiRnZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGdldFZhbHVlLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5nZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuZ2V0VmFsdWUuYmluZChzKTtcbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkYWN0ZWRGbihzY29wZTogdW5rbm93bik6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gVHJ5ICR0b1JhdygpIGZpcnN0IChUeXBlZFNjb3BlKSwgdGhlbiBkaXJlY3RcbiAgY29uc3QgcmF3ID0gdHlwZW9mIHMuJHRvUmF3ID09PSAnZnVuY3Rpb24nID8gcy4kdG9SYXcoKSA6IHM7XG4gIGNvbnN0IHIgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygci5nZXRSZWRhY3RlZEtleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBrZXlzID0gci5nZXRSZWRhY3RlZEtleXMoKSBhcyBTZXQ8c3RyaW5nPjtcbiAgICByZXR1cm4gKGtleTogc3RyaW5nKSA9PiBrZXlzLmhhcyhrZXkpO1xuICB9XG4gIHJldHVybiAoKSA9PiBmYWxzZTtcbn1cblxuLy8gLS0gZXZhbHVhdGUgYSBzaW5nbGUgcnVsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBldmFsdWF0ZVJ1bGU8UyBleHRlbmRzIG9iamVjdD4oXG4gIHNjb3BlOiBTLFxuICBydWxlOiBEZWNpZGVSdWxlPFM+LFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRhY2hGbj86IChyOiBTY29wZVJlY29yZGVyKSA9PiB2b2lkLFxuICBkZXRhY2hGbj86IChpZDogc3RyaW5nKSA9PiB2b2lkLFxuICB2YWx1ZUZuPzogKGtleTogc3RyaW5nKSA9PiB1bmtub3duLFxuICByZWRhY3RlZEZuPzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuKTogUnVsZUV2aWRlbmNlIHtcbiAgaWYgKHR5cGVvZiBydWxlLndoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBGVU5DVElPTiBQQVRIOiB0ZW1wIHJlY29yZGVyIGNhcHR1cmVzIHJlYWRzIChsYXp5IOKAlCBza2lwIGlmIG5vIHJlY29yZGVyIHN1cHBvcnQpXG4gICAgY29uc3QgaGFzUmVjb3JkZXJTdXBwb3J0ID0gQm9vbGVhbihhdHRhY2hGbik7XG4gICAgY29uc3QgY29sbGVjdG9yID0gaGFzUmVjb3JkZXJTdXBwb3J0ID8gbmV3IEV2aWRlbmNlQ29sbGVjdG9yKCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbGxlY3RvciAmJiBhdHRhY2hGbikgYXR0YWNoRm4oY29sbGVjdG9yKTtcblxuICAgIGxldCBtYXRjaGVkOiBib29sZWFuO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIG1hdGNoZWQgPSBydWxlLndoZW4oc2NvcGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjb2xsZWN0b3IgJiYgZGV0YWNoRm4pIGRldGFjaEZuKGNvbGxlY3Rvci5pZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZ1bmN0aW9uUnVsZUV2aWRlbmNlID0ge1xuICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIC8vIFBhcnRpYWwgcmVhZHM6IGlmIHJ1bGUgdGhyZXcgYWZ0ZXIgc29tZSBnZXRWYWx1ZSgpIGNhbGxzLCBjb2xsZWN0b3IgaG9sZHMgcmVhZHMgdXAgdG8gdGhlIHRocm93IHBvaW50XG4gICAgICBpbnB1dHM6IGNvbGxlY3Rvcj8uZ2V0SW5wdXRzKCkgPz8gW10sXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGSUxURVIgUEFUSDogcmVhZHMgdmFsdWVzIGRpcmVjdGx5IHZpYSBjYWxsYmFja3MgKG5vIHJlY29yZGVyKTsgZXhjZXB0aW9ucyB0cmVhdGVkIGFzIG5vbi1tYXRjaFxuICAgIGNvbnN0IHJlc29sdmVkVmFsdWVGbiA9IHZhbHVlRm4gPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVzb2x2ZWRSZWRhY3RlZEZuID0gcmVkYWN0ZWRGbiA/PyAoKCkgPT4gZmFsc2UpO1xuICAgIGxldCBmaWx0ZXJNYXRjaGVkID0gZmFsc2U7XG4gICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XG4gICAgbGV0IG1hdGNoRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZhbHVhdGVGaWx0ZXIocmVzb2x2ZWRWYWx1ZUZuLCByZXNvbHZlZFJlZGFjdGVkRm4sIHJ1bGUud2hlbiBhcyBXaGVyZUZpbHRlcjxTPik7XG4gICAgICBmaWx0ZXJNYXRjaGVkID0gcmVzdWx0Lm1hdGNoZWQ7XG4gICAgICBmaWx0ZXJDb25kaXRpb25zID0gcmVzdWx0LmNvbmRpdGlvbnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyDigJQgc3VyZmFjZSBpdCBpbiBldmlkZW5jZSBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgc2lsZW50bHlcbiAgICAgIG1hdGNoRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBydWxlLmxhYmVsID8gYCAoJyR7cnVsZS5sYWJlbH0nKWAgOiAnJztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBkZWNpZGUoKSBmaWx0ZXIgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZpbHRlclJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmaWx0ZXInLFxuICAgICAgcnVsZUluZGV4OiBpbmRleCxcbiAgICAgIGJyYW5jaDogcnVsZS50aGVuLFxuICAgICAgbWF0Y2hlZDogZmlsdGVyTWF0Y2hlZCxcbiAgICAgIGxhYmVsOiBydWxlLmxhYmVsLFxuICAgICAgY29uZGl0aW9uczogZmlsdGVyQ29uZGl0aW9ucyxcbiAgICAgIC4uLihtYXRjaEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBtYXRjaEVycm9yIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIGV2aWRlbmNlO1xuICB9XG59XG5cbi8vIC0tIGRlZmF1bHQgYnJhbmNoIG5vcm1hbGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb2xsYXBzZXMgYm90aCB7QGxpbmsgRGVmYXVsdEJyYW5jaH0gZm9ybXMgdG8gb25lIHNoYXBlLCBvbmNlLCBhdCB0aGUgdG9wIG9mXG4gKiBgZGVjaWRlKClgLiBBIGJhcmUgc3RyaW5nIHlpZWxkcyBgbGFiZWw6IHVuZGVmaW5lZGAsIHdoaWNoIGV2ZXJ5IGRvd25zdHJlYW1cbiAqIHNwcmVhZCB0aGVuIG9taXRzIOKAlCBzbyB0aGUgc3RyaW5nIGNhbGwgc2l0ZSBwcm9kdWNlcyBleGFjdGx5IHRoZSBldmlkZW5jZSBpdFxuICogcHJvZHVjZWQgYmVmb3JlIHRoaXMgcGFyYW1ldGVyIHdhcyB3aWRlbmVkLlxuICpcbiAqIE9OTFkgdGhlIG9iamVjdCBmb3JtIGlzIHVud3JhcHBlZDsgZXZlcnkgb3RoZXIgdmFsdWUgcGFzc2VzIHRocm91Z2ggYXMgdGhlXG4gKiBicmFuY2gsIHVudG91Y2hlZC4gVGhhdCBpcyBkZWxpYmVyYXRlOiBKYXZhU2NyaXB0IGNhbGxlcnMgcmVhY2ggYGRlY2lkZSgpYFxuICogd2l0aCB0aGUgdGhpcmQgYXJndW1lbnQgTUlTU0lORyAoYSBydWxlIHNldCB0aGF0IGNvdmVycyBldmVyeSBjYXNlIG5ldmVyXG4gKiBjb25zdWx0cyBhIGRlZmF1bHQpLCBhbmQgYmVmb3JlIHRoZSBwYXJhbWV0ZXIgd2lkZW5lZCB0aGF0IGB1bmRlZmluZWRgXG4gKiBzaW1wbHkgbGFuZGVkIG9uIGBldmlkZW5jZS5kZWZhdWx0YC4gSXQgc3RpbGwgZG9lcyDigJQgYSBub3JtYWxpemF0aW9uIHRoYXRcbiAqIG9ubHkgdW5kZXJzdG9vZCBzdHJpbmdzIHdvdWxkIHR1cm4gdGhvc2UgY2FsbCBzaXRlcyBpbnRvIGEgVHlwZUVycm9yLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2g6IERlZmF1bHRCcmFuY2gpOiB7IGJyYW5jaDogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9IHtcbiAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0QnJhbmNoID09PSAnb2JqZWN0JyAmJiBkZWZhdWx0QnJhbmNoICE9PSBudWxsXG4gICAgPyBkZWZhdWx0QnJhbmNoXG4gICAgOiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCBhcyBzdHJpbmcgfTtcbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggdGFrZW4gd2hlbiBubyBydWxlIG1hdGNoZXMuIEVpdGhlciB0aGUgYnJhbmNoXG4gKiAgIGlkIChgJ3JlamVjdGVkJ2ApIG9yIHRoZSBpZCBwbHVzIHdoYXQgZmFsbGluZyBiYWNrIHRvIGl0IE1FQU5TXG4gKiAgIChgeyBicmFuY2g6ICdyZWplY3RlZCcsIGxhYmVsOiAnTm8gcnVsZSBmaXJlZCcgfWApLiBUaGUgbGFiZWwgbGFuZHMgb25cbiAqICAgYGV2aWRlbmNlLmRlZmF1bHRMYWJlbGAg4oCUIHRoZSBkZWZhdWx0IGlzIGNob3NlbiBieSBubyBydWxlLCBzbyBpdCBpcyB0aGVcbiAqICAgb25lIGJyYW5jaCB0aGF0IGBydWxlc1tdLmxhYmVsYCBjYW4gbmV2ZXIgZGVzY3JpYmUuXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiAqKkVtcHR5LWZpbHRlciBiZWhhdmlvciAoYW50aS12YWN1b3VzLXRydXRoKToqKiBhIGZpbHRlciBydWxlIHdob3NlIGB3aGVuYCBpc1xuICogYHt9YCAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIE5FVkVSIG1hdGNoZXMuIFRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgdGhlXG4gKiBQcmlzbWEvU1FMIGB3aGVyZToge31gIGludHVpdGlvbiAoXCJtYXRjaCBldmVyeXRoaW5nXCIpIOKAlCBhIHJ1bGUgdGhhdCBhc3NlcnRzXG4gKiBub3RoaW5nIG11c3Qgbm90IHdpbiBhIGJyYW5jaCBvbiB2YWN1b3VzIHRydXRoLiBVc2UgYGRlZmF1bHRCcmFuY2hgIGZvciB0aGVcbiAqIGNhdGNoLWFsbCBpbnN0ZWFkLiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSxcbiAgZGVmYXVsdEJyYW5jaDogRGVmYXVsdEJyYW5jaCxcbik6IERlY2lzaW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBsYWJlbDogZGVmYXVsdExhYmVsIH0gPSBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2gpO1xuICAvLyBEZWNsYXJlZCBvbmNlLCBzcHJlYWQgaW50byBCT1RIIGV4aXRzIGJlbG93IOKAlCBkZWxpYmVyYXRlbHkuIEEgZGVmYXVsdCdzXG4gIC8vIG1lYW5pbmcgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgREVDSURFUiwgbm90IG9mIHRoZSBydW46IGl0IG11c3QgYmUgaW4gdGhlXG4gIC8vIGV2aWRlbmNlIG9mIHRoZSBydW4gd2hlcmUgYSBydWxlIHdvbiBqdXN0IGFzIG11Y2ggYXMgaW4gdGhlIHJ1biB0aGF0IGZlbGxcbiAgLy8gdGhyb3VnaC4gRW1pdCBpdCBvbmx5IG9uIHRoZSBmYWxsdGhyb3VnaCBhbmQgYW55IGNvbnN1bWVyIGhhcnZlc3RpbmcgYnJhbmNoXG4gIC8vIG1lYW5pbmdzIHdvdWxkIHdhdGNoIHRoZW0gYXBwZWFyIGFuZCBkaXNhcHBlYXIgd2l0aCB0aGUgZGF0YS5cbiAgY29uc3QgZGVmYXVsdE1lYW5pbmcgPSBkZWZhdWx0TGFiZWwgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdExhYmVsIH0gOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaElkLFxuICAgICAgICAuLi5kZWZhdWx0TWVhbmluZyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2hJZCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoSWQsXG4gICAgLi4uZGVmYXVsdE1lYW5pbmcsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogKipFbXB0eS1maWx0ZXIgYmVoYXZpb3IgKGFudGktdmFjdW91cy10cnV0aCk6KiogYSBmaWx0ZXIgcnVsZSB3aG9zZSBgd2hlbmAgaXNcbiAqIGB7fWAgKG5vIGV2YWx1YWJsZSBjb25kaXRpb25zKSBORVZFUiBtYXRjaGVzIOKAlCBzYW1lIHJ1bGUgYXMgYGRlY2lkZSgpYDsgYW5cbiAqIGFsd2F5cy1zZWxlY3RlZCBicmFuY2ggbXVzdCBiZSBleHByZXNzZWQgZXhwbGljaXRseSwgbm90IHZpYSBhbiBlbXB0eSBmaWx0ZXIuXG4gKiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* All keys in the filter are ANDed (all must match for the rule to match).
|
|
8
8
|
* Decoupled from ScopeFacade — receives callbacks, not scope.
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { summarizeValue } from '../capture/summarize.js';
|
|
11
|
+
import { isDevMode } from '../devMode.js';
|
|
12
|
+
import { SCOPE_PLACEHOLDER } from '../memory/placeholders.js';
|
|
12
13
|
const OPERATOR_HANDLERS = {
|
|
13
14
|
eq: (a, t) => a === t,
|
|
14
15
|
ne: (a, t) => a !== t,
|
|
@@ -90,7 +91,7 @@ export function evaluateFilter(getValueFn, isRedactedFn, filter) {
|
|
|
90
91
|
continue;
|
|
91
92
|
const actual = getValueFn(key);
|
|
92
93
|
const redacted = isRedactedFn(key);
|
|
93
|
-
const displayValue = redacted ?
|
|
94
|
+
const displayValue = redacted ? SCOPE_PLACEHOLDER : summarizeValue(actual, MAX_VALUE_LEN);
|
|
94
95
|
// Evaluate each operator in the FilterOps for this key
|
|
95
96
|
for (const [op, threshold] of Object.entries(ops)) {
|
|
96
97
|
const handler = OPERATOR_HANDLERS[op];
|
|
@@ -126,4 +127,4 @@ export function evaluateFilter(getValueFn, isRedactedFn, filter) {
|
|
|
126
127
|
return { matched: false, conditions };
|
|
127
128
|
return { matched: allMatched, conditions };
|
|
128
129
|
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZXZhbHVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQU90RSxNQUFNLGlCQUFpQixHQUErQjtJQUNwRCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFZLEdBQUksQ0FBWTtJQUMzQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFZLElBQUssQ0FBWTtJQUM3QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFZLEdBQUksQ0FBWTtJQUMzQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFZLElBQUssQ0FBWTtJQUM3QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLFFBQVEs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QUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNkLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRixTQUFTO2dCQUNULGFBQWEsRUFBRSxZQUFZO2dCQUMzQixNQUFNO2dCQUNOLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsTUFBTTtnQkFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsZ0RBQWdEO0lBQ2hELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFFbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2V2YWx1YXRvciAtLSBQcmlzbWEtc3R5bGUgZmlsdGVyIGV2YWx1YXRvciBmb3IgZGVjaXNpb24gcnVsZXMuXG4gKlxuICogUHVyZSBmdW5jdGlvbi4gVGFrZXMgYSBXaGVyZUZpbHRlciwgYSB2YWx1ZSBnZXR0ZXIsIGFuZCBhIHJlZGFjdGlvbiBjaGVja2VyLlxuICogRXZhbHVhdGVzIGVhY2ggY29uZGl0aW9uLCByZWNvcmRzIHRoZSByZXN1bHQsIHJldHVybnMgbWF0Y2hlZC9jb25kaXRpb25zLlxuICpcbiAqIEFsbCBrZXlzIGluIHRoZSBmaWx0ZXIgYXJlIEFORGVkIChhbGwgbXVzdCBtYXRjaCBmb3IgdGhlIHJ1bGUgdG8gbWF0Y2gpLlxuICogRGVjb3VwbGVkIGZyb20gU2NvcGVGYWNhZGUg4oCUIHJlY2VpdmVzIGNhbGxiYWNrcywgbm90IHNjb3BlLlxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB7IHN1bW1hcml6ZVZhbHVlIH0gZnJvbSAnLi4vc2NvcGUvcmVjb3JkZXJzL3N1bW1hcml6ZVZhbHVlLmpzJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyQ29uZGl0aW9uLCBXaGVyZUZpbHRlciB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyAtLSBPcGVyYXRvciBkaXNwYXRjaCB0YWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgT3BlcmF0b3JGbiA9IChhY3R1YWw6IHVua25vd24sIHRocmVzaG9sZDogdW5rbm93bikgPT4gYm9vbGVhbjtcblxuY29uc3QgT1BFUkFUT1JfSEFORExFUlM6IFJlY29yZDxzdHJpbmcsIE9wZXJhdG9yRm4+ID0ge1xuICBlcTogKGEsIHQpID0+IGEgPT09IHQsXG4gIG5lOiAoYSwgdCkgPT4gYSAhPT0gdCxcbiAgZ3Q6IChhLCB0KSA9PiAoYSBhcyBudW1iZXIpID4gKHQgYXMgbnVtYmVyKSxcbiAgZ3RlOiAoYSwgdCkgPT4gKGEgYXMgbnVtYmVyKSA+PSAodCBhcyBudW1iZXIpLFxuICBsdDogKGEsIHQpID0+IChhIGFzIG51bWJlcikgPCAodCBhcyBudW1iZXIpLFxuICBsdGU6IChhLCB0KSA9PiAoYSBhcyBudW1iZXIpIDw9ICh0IGFzIG51bWJlciksXG4gIGluOiAoYSwgdCkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0Lmxlbmd0aCA+IE1BWF9JTl9BUlJBWV9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGluL25vdEluIGFycmF5IGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICR7TUFYX0lOX0FSUkFZX1NJWkV9YCk7XG4gICAgfVxuICAgIHJldHVybiB0LmluY2x1ZGVzKGEpO1xuICB9LFxuICBub3RJbjogKGEsIHQpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodCkpIHJldHVybiB0cnVlOyAvLyBub3QgaW4gYSBub24tYXJyYXkgPSB2YWN1b3VzbHkgdHJ1ZVxuICAgIGlmICh0Lmxlbmd0aCA+IE1BWF9JTl9BUlJBWV9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGluL25vdEluIGFycmF5IGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICR7TUFYX0lOX0FSUkFZX1NJWkV9YCk7XG4gICAgfVxuICAgIHJldHVybiAhdC5pbmNsdWRlcyhhKTtcbiAgfSxcbn07XG5cbi8vIC0tIFNlY3VyaXR5OiBwcm90b3R5cGUgcG9sbHV0aW9uIGRlbnlsaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgREVOSUVEX0tFWVMgPSBuZXcgU2V0KFtcbiAgJ19fcHJvdG9fXycsXG4gICdjb25zdHJ1Y3RvcicsXG4gICdwcm90b3R5cGUnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ19fZGVmaW5lR2V0dGVyX18nLFxuICAnX19kZWZpbmVTZXR0ZXJfXycsXG4gICdfX2xvb2t1cEdldHRlcl9fJyxcbiAgJ19fbG9va3VwU2V0dGVyX18nLFxuXSk7XG5cbi8vIC0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgTUFYX0lOX0FSUkFZX1NJWkUgPSAxMDAwO1xuY29uc3QgTUFYX1ZBTFVFX0xFTiA9IDgwO1xuXG4vLyAtLSBFdmFsdWF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXZhbHVhdGVzIGEgUHJpc21hLXN0eWxlIGZpbHRlciBhZ2FpbnN0IHNjb3BlIHZhbHVlcy5cbiAqXG4gKiAjIyBFbXB0eSBmaWx0ZXIg4oaSIE5PIG1hdGNoIChhbnRpLXZhY3VvdXMtdHJ1dGgg4oCUIGludmVydHMgUHJpc21hL1NRTClcbiAqXG4gKiBBIGZpbHRlciB3aXRoIG5vIGV2YWx1YWJsZSBjb25kaXRpb25zIChge31gLCBvciBvbmx5IGRlbmllZC9ub24tb2JqZWN0XG4gKiBrZXlzKSByZXR1cm5zIGBtYXRjaGVkOiBmYWxzZWAuIFRoaXMgZGVsaWJlcmF0ZWx5IElOVkVSVFMgdGhlIFByaXNtYS9TUUxcbiAqIGludHVpdGlvbiB3aGVyZSBgd2hlcmU6IHt9YCBtYXRjaGVzIGV2ZXJ5dGhpbmc6IGluIGEgZGVjaXNpb24gcnVsZSwgYSBydWxlXG4gKiB0aGF0IGFzc2VydHMgbm90aGluZyBzaG91bGQgbmV2ZXIgd2luIGEgYnJhbmNoIOKAlCBcImFsbCB6ZXJvIGNvbmRpdGlvbnNcbiAqIHBhc3NlZFwiIGlzIHZhY3VvdXMgdHJ1dGgsIGFuZCBzaWxlbnRseSByb3V0aW5nIG9uIGl0IHdvdWxkIGZhYnJpY2F0ZVxuICogZGVjaXNpb24gZXZpZGVuY2UuIFdhbnQgYSBjYXRjaC1hbGw/IFVzZSB0aGUgZXhwbGljaXQgYGRlZmF1bHRCcmFuY2hgXG4gKiBhcmd1bWVudCBvZiBgZGVjaWRlKClgIGluc3RlYWQgb2YgYW4gZW1wdHkgYHdoZW5gLlxuICpcbiAqICMjIFVua25vd24gb3BlcmF0b3JzIOKGkiBjb25kaXRpb24gZmFpbHMgKCsgZGV2LW1vZGUgd2FybmluZylcbiAqXG4gKiBBbiBvcGVyYXRvciBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgc2V0IChgZXEsIG5lLCBndCwgZ3RlLCBsdCwgbHRlLCBpbixcbiAqIG5vdEluYCkgcmVjb3JkcyBhIGZhaWxlZCBjb25kaXRpb24g4oCUIHRoZSBydWxlIGNhbiBuZXZlciBzcHVyaW91c2x5IG1hdGNoXG4gKiB0aHJvdWdoIGEgdHlwbyAoYGd0ZWAgbWlzc3BlbGxlZCBgZ2xlYCkuIFdpdGggZGV2IG1vZGUgZW5hYmxlZFxuICogKGBlbmFibGVEZXZNb2RlKClgKSwgYSBjb25zb2xlIHdhcm5pbmcgbmFtZXMgdGhlIHVua25vd24gb3BlcmF0b3IgYW5kIGtleS5cbiAqXG4gKiBAcGFyYW0gZ2V0VmFsdWVGbiAtIFJlYWRzIGEgdmFsdWUgZnJvbSBzY29wZSBieSBrZXkgKHJhdywgZm9yIGNvbXBhcmlzb24pXG4gKiBAcGFyYW0gaXNSZWRhY3RlZEZuIC0gQ2hlY2tzIGlmIGEga2V5IGlzIHJlZGFjdGVkIChmb3IgZXZpZGVuY2UgZGlzcGxheSlcbiAqIEBwYXJhbSBmaWx0ZXIgLSBUaGUgV2hlcmVGaWx0ZXIgdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHsgbWF0Y2hlZCwgY29uZGl0aW9ucyB9IOKAlCBtYXRjaGVkID0gYWxsIGNvbmRpdGlvbnMgcGFzc2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUZpbHRlcjxUIGV4dGVuZHMgb2JqZWN0PihcbiAgZ2V0VmFsdWVGbjogKGtleTogc3RyaW5nKSA9PiB1bmtub3duLFxuICBpc1JlZGFjdGVkRm46IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbixcbiAgZmlsdGVyOiBXaGVyZUZpbHRlcjxUPixcbik6IHsgbWF0Y2hlZDogYm9vbGVhbjsgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gfSB7XG4gIGNvbnN0IGNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XG4gIGxldCBhbGxNYXRjaGVkID0gdHJ1ZTtcblxuICBmb3IgKGNvbnN0IFtrZXksIG9wc10gb2YgT2JqZWN0LmVudHJpZXMoZmlsdGVyKSkge1xuICAgIC8vIFNlY3VyaXR5OiBkZW5pZWQga2V5cyBjYXVzZSBydWxlIHRvIGZhaWwgKGNvbnNpc3RlbnQgd2l0aCB1bmtub3duIG9wZXJhdG9yIGJlaGF2aW9yKVxuICAgIGlmIChERU5JRURfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgYWxsTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghb3BzIHx8IHR5cGVvZiBvcHMgIT09ICdvYmplY3QnKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGFjdHVhbCA9IGdldFZhbHVlRm4oa2V5KTtcbiAgICBjb25zdCByZWRhY3RlZCA9IGlzUmVkYWN0ZWRGbihrZXkpO1xuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IHJlZGFjdGVkID8gJ1tSRURBQ1RFRF0nIDogc3VtbWFyaXplVmFsdWUoYWN0dWFsLCBNQVhfVkFMVUVfTEVOKTtcblxuICAgIC8vIEV2YWx1YXRlIGVhY2ggb3BlcmF0b3IgaW4gdGhlIEZpbHRlck9wcyBmb3IgdGhpcyBrZXlcbiAgICBmb3IgKGNvbnN0IFtvcCwgdGhyZXNob2xkXSBvZiBPYmplY3QuZW50cmllcyhvcHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gT1BFUkFUT1JfSEFORExFUlNbb3BdO1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIC8vIFVua25vd24gb3BlcmF0b3I6IHRyZWF0IGFzIGZhaWxlZCBjb25kaXRpb24gc28gcnVsZSBkb2Vzbid0IHNwdXJpb3VzbHkgbWF0Y2hcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW2Zvb3RwcmludF0gZGVjaWRlKCkvc2VsZWN0KCkgZmlsdGVyOiB1bmtub3duIG9wZXJhdG9yIFwiJHtvcH1cIiBvbiBrZXkgXCIke2tleX1cIiDigJQgYCArXG4gICAgICAgICAgICAgIGBjb25kaXRpb24gbmV2ZXIgbWF0Y2hlcyAodmFsaWQgb3BlcmF0b3JzOiAke09iamVjdC5rZXlzKE9QRVJBVE9SX0hBTkRMRVJTKS5qb2luKCcsICcpfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKHsga2V5LCBvcCwgdGhyZXNob2xkLCBhY3R1YWxTdW1tYXJ5OiBkaXNwbGF5VmFsdWUsIHJlc3VsdDogZmFsc2UsIHJlZGFjdGVkIH0pO1xuICAgICAgICBhbGxNYXRjaGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVyKGFjdHVhbCwgdGhyZXNob2xkKTtcbiAgICAgIGNvbmRpdGlvbnMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgb3AsXG4gICAgICAgIHRocmVzaG9sZCxcbiAgICAgICAgYWN0dWFsU3VtbWFyeTogZGlzcGxheVZhbHVlLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHJlZGFjdGVkLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzdWx0KSBhbGxNYXRjaGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gRW1wdHkgZmlsdGVyIChubyBldmFsdWFibGUgY29uZGl0aW9ucykgc2hvdWxkIE5PVCBtYXRjaCDigJQgcHJldmVudHMgdmFjdW91c1xuICAvLyB0cnV0aC4gTk9URTogdGhpcyBkZWxpYmVyYXRlbHkgaW52ZXJ0cyBQcmlzbWEvU1FMIGB3aGVyZToge31gIChcIm1hdGNoXG4gIC8vIGV2ZXJ5dGhpbmdcIikg4oCUIHNlZSB0aGUgZnVuY3Rpb24gSlNEb2MuIENhdGNoLWFsbHMgYmVsb25nIGluIGRlY2lkZSgpJ3NcbiAgLy8gZXhwbGljaXQgZGVmYXVsdEJyYW5jaCwgbm90IGluIGFuIGVtcHR5IHJ1bGUuXG4gIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgbWF0Y2hlZDogZmFsc2UsIGNvbmRpdGlvbnMgfTtcblxuICByZXR1cm4geyBtYXRjaGVkOiBhbGxNYXRjaGVkLCBjb25kaXRpb25zIH07XG59XG4iXX0=
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZXZhbHVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPOUQsTUFBTSxpQkFBaUIsR0FBK0I7SUFDcEQsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxHQUFJLENBQVk7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxJQUFLLENBQVk7SUFDN0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxHQUFJLENBQVk7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxJQUFLLENBQVk7SUFDN0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsaUJBQWlCLEVBQUUsQ0FB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LENBQUM7Z0JBQ25CLFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNkLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRixTQUFTO2dCQUNULGFBQWEsRUFBRSxZQUFZO2dCQUMzQixNQUFNO2dCQUNOLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsTUFBTTtnQkFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsZ0RBQWdEO0lBQ2hELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFFbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2V2YWx1YXRvciAtLSBQcmlzbWEtc3R5bGUgZmlsdGVyIGV2YWx1YXRvciBmb3IgZGVjaXNpb24gcnVsZXMuXG4gKlxuICogUHVyZSBmdW5jdGlvbi4gVGFrZXMgYSBXaGVyZUZpbHRlciwgYSB2YWx1ZSBnZXR0ZXIsIGFuZCBhIHJlZGFjdGlvbiBjaGVja2VyLlxuICogRXZhbHVhdGVzIGVhY2ggY29uZGl0aW9uLCByZWNvcmRzIHRoZSByZXN1bHQsIHJldHVybnMgbWF0Y2hlZC9jb25kaXRpb25zLlxuICpcbiAqIEFsbCBrZXlzIGluIHRoZSBmaWx0ZXIgYXJlIEFORGVkIChhbGwgbXVzdCBtYXRjaCBmb3IgdGhlIHJ1bGUgdG8gbWF0Y2gpLlxuICogRGVjb3VwbGVkIGZyb20gU2NvcGVGYWNhZGUg4oCUIHJlY2VpdmVzIGNhbGxiYWNrcywgbm90IHNjb3BlLlxuICovXG5cbmltcG9ydCB7IHN1bW1hcml6ZVZhbHVlIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uL21lbW9yeS9wbGFjZWhvbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb25kaXRpb24sIFdoZXJlRmlsdGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIE9wZXJhdG9yIGRpc3BhdGNoIHRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBPcGVyYXRvckZuID0gKGFjdHVhbDogdW5rbm93biwgdGhyZXNob2xkOiB1bmtub3duKSA9PiBib29sZWFuO1xuXG5jb25zdCBPUEVSQVRPUl9IQU5ETEVSUzogUmVjb3JkPHN0cmluZywgT3BlcmF0b3JGbj4gPSB7XG4gIGVxOiAoYSwgdCkgPT4gYSA9PT0gdCxcbiAgbmU6IChhLCB0KSA9PiBhICE9PSB0LFxuICBndDogKGEsIHQpID0+IChhIGFzIG51bWJlcikgPiAodCBhcyBudW1iZXIpLFxuICBndGU6IChhLCB0KSA9PiAoYSBhcyBudW1iZXIpID49ICh0IGFzIG51bWJlciksXG4gIGx0OiAoYSwgdCkgPT4gKGEgYXMgbnVtYmVyKSA8ICh0IGFzIG51bWJlciksXG4gIGx0ZTogKGEsIHQpID0+IChhIGFzIG51bWJlcikgPD0gKHQgYXMgbnVtYmVyKSxcbiAgaW46IChhLCB0KSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHQubGVuZ3RoID4gTUFYX0lOX0FSUkFZX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW4vbm90SW4gYXJyYXkgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtNQVhfSU5fQVJSQVlfU0laRX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHQuaW5jbHVkZXMoYSk7XG4gIH0sXG4gIG5vdEluOiAoYSwgdCkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0KSkgcmV0dXJuIHRydWU7IC8vIG5vdCBpbiBhIG5vbi1hcnJheSA9IHZhY3VvdXNseSB0cnVlXG4gICAgaWYgKHQubGVuZ3RoID4gTUFYX0lOX0FSUkFZX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW4vbm90SW4gYXJyYXkgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtNQVhfSU5fQVJSQVlfU0laRX1gKTtcbiAgICB9XG4gICAgcmV0dXJuICF0LmluY2x1ZGVzKGEpO1xuICB9LFxufTtcblxuLy8gLS0gU2VjdXJpdHk6IHByb3RvdHlwZSBwb2xsdXRpb24gZGVueWxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBERU5JRURfS0VZUyA9IG5ldyBTZXQoW1xuICAnX19wcm90b19fJyxcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ3Byb3RvdHlwZScsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAnX19kZWZpbmVHZXR0ZXJfXycsXG4gICdfX2RlZmluZVNldHRlcl9fJyxcbiAgJ19fbG9va3VwR2V0dGVyX18nLFxuICAnX19sb29rdXBTZXR0ZXJfXycsXG5dKTtcblxuLy8gLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBNQVhfSU5fQVJSQVlfU0laRSA9IDEwMDA7XG5jb25zdCBNQVhfVkFMVUVfTEVOID0gODA7XG5cbi8vIC0tIEV2YWx1YXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBQcmlzbWEtc3R5bGUgZmlsdGVyIGFnYWluc3Qgc2NvcGUgdmFsdWVzLlxuICpcbiAqICMjIEVtcHR5IGZpbHRlciDihpIgTk8gbWF0Y2ggKGFudGktdmFjdW91cy10cnV0aCDigJQgaW52ZXJ0cyBQcmlzbWEvU1FMKVxuICpcbiAqIEEgZmlsdGVyIHdpdGggbm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMgKGB7fWAsIG9yIG9ubHkgZGVuaWVkL25vbi1vYmplY3RcbiAqIGtleXMpIHJldHVybnMgYG1hdGNoZWQ6IGZhbHNlYC4gVGhpcyBkZWxpYmVyYXRlbHkgSU5WRVJUUyB0aGUgUHJpc21hL1NRTFxuICogaW50dWl0aW9uIHdoZXJlIGB3aGVyZToge31gIG1hdGNoZXMgZXZlcnl0aGluZzogaW4gYSBkZWNpc2lvbiBydWxlLCBhIHJ1bGVcbiAqIHRoYXQgYXNzZXJ0cyBub3RoaW5nIHNob3VsZCBuZXZlciB3aW4gYSBicmFuY2gg4oCUIFwiYWxsIHplcm8gY29uZGl0aW9uc1xuICogcGFzc2VkXCIgaXMgdmFjdW91cyB0cnV0aCwgYW5kIHNpbGVudGx5IHJvdXRpbmcgb24gaXQgd291bGQgZmFicmljYXRlXG4gKiBkZWNpc2lvbiBldmlkZW5jZS4gV2FudCBhIGNhdGNoLWFsbD8gVXNlIHRoZSBleHBsaWNpdCBgZGVmYXVsdEJyYW5jaGBcbiAqIGFyZ3VtZW50IG9mIGBkZWNpZGUoKWAgaW5zdGVhZCBvZiBhbiBlbXB0eSBgd2hlbmAuXG4gKlxuICogIyMgVW5rbm93biBvcGVyYXRvcnMg4oaSIGNvbmRpdGlvbiBmYWlscyAoKyBkZXYtbW9kZSB3YXJuaW5nKVxuICpcbiAqIEFuIG9wZXJhdG9yIG91dHNpZGUgdGhlIHN1cHBvcnRlZCBzZXQgKGBlcSwgbmUsIGd0LCBndGUsIGx0LCBsdGUsIGluLFxuICogbm90SW5gKSByZWNvcmRzIGEgZmFpbGVkIGNvbmRpdGlvbiDigJQgdGhlIHJ1bGUgY2FuIG5ldmVyIHNwdXJpb3VzbHkgbWF0Y2hcbiAqIHRocm91Z2ggYSB0eXBvIChgZ3RlYCBtaXNzcGVsbGVkIGBnbGVgKS4gV2l0aCBkZXYgbW9kZSBlbmFibGVkXG4gKiAoYGVuYWJsZURldk1vZGUoKWApLCBhIGNvbnNvbGUgd2FybmluZyBuYW1lcyB0aGUgdW5rbm93biBvcGVyYXRvciBhbmQga2V5LlxuICpcbiAqIEBwYXJhbSBnZXRWYWx1ZUZuIC0gUmVhZHMgYSB2YWx1ZSBmcm9tIHNjb3BlIGJ5IGtleSAocmF3LCBmb3IgY29tcGFyaXNvbilcbiAqIEBwYXJhbSBpc1JlZGFjdGVkRm4gLSBDaGVja3MgaWYgYSBrZXkgaXMgcmVkYWN0ZWQgKGZvciBldmlkZW5jZSBkaXNwbGF5KVxuICogQHBhcmFtIGZpbHRlciAtIFRoZSBXaGVyZUZpbHRlciB0byBldmFsdWF0ZVxuICogQHJldHVybnMgeyBtYXRjaGVkLCBjb25kaXRpb25zIH0g4oCUIG1hdGNoZWQgPSBhbGwgY29uZGl0aW9ucyBwYXNzZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlRmlsdGVyPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBnZXRWYWx1ZUZuOiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIGlzUmVkYWN0ZWRGbjogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuICBmaWx0ZXI6IFdoZXJlRmlsdGVyPFQ+LFxuKTogeyBtYXRjaGVkOiBib29sZWFuOyBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSB9IHtcbiAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcbiAgbGV0IGFsbE1hdGNoZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2tleSwgb3BzXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgLy8gU2VjdXJpdHk6IGRlbmllZCBrZXlzIGNhdXNlIHJ1bGUgdG8gZmFpbCAoY29uc2lzdGVudCB3aXRoIHVua25vd24gb3BlcmF0b3IgYmVoYXZpb3IpXG4gICAgaWYgKERFTklFRF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICBhbGxNYXRjaGVkID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFvcHMgfHwgdHlwZW9mIG9wcyAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgYWN0dWFsID0gZ2V0VmFsdWVGbihrZXkpO1xuICAgIGNvbnN0IHJlZGFjdGVkID0gaXNSZWRhY3RlZEZuKGtleSk7XG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gcmVkYWN0ZWQgPyBTQ09QRV9QTEFDRUhPTERFUiA6IHN1bW1hcml6ZVZhbHVlKGFjdHVhbCwgTUFYX1ZBTFVFX0xFTik7XG5cbiAgICAvLyBFdmFsdWF0ZSBlYWNoIG9wZXJhdG9yIGluIHRoZSBGaWx0ZXJPcHMgZm9yIHRoaXMga2V5XG4gICAgZm9yIChjb25zdCBbb3AsIHRocmVzaG9sZF0gb2YgT2JqZWN0LmVudHJpZXMob3BzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IE9QRVJBVE9SX0hBTkRMRVJTW29wXTtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAvLyBVbmtub3duIG9wZXJhdG9yOiB0cmVhdCBhcyBmYWlsZWQgY29uZGl0aW9uIHNvIHJ1bGUgZG9lc24ndCBzcHVyaW91c2x5IG1hdGNoXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtmb290cHJpbnRdIGRlY2lkZSgpL3NlbGVjdCgpIGZpbHRlcjogdW5rbm93biBvcGVyYXRvciBcIiR7b3B9XCIgb24ga2V5IFwiJHtrZXl9XCIg4oCUIGAgK1xuICAgICAgICAgICAgICBgY29uZGl0aW9uIG5ldmVyIG1hdGNoZXMgKHZhbGlkIG9wZXJhdG9yczogJHtPYmplY3Qua2V5cyhPUEVSQVRPUl9IQU5ETEVSUykuam9pbignLCAnKX0pYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGtleSwgb3AsIHRocmVzaG9sZCwgYWN0dWFsU3VtbWFyeTogZGlzcGxheVZhbHVlLCByZXN1bHQ6IGZhbHNlLCByZWRhY3RlZCB9KTtcbiAgICAgICAgYWxsTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlcihhY3R1YWwsIHRocmVzaG9sZCk7XG4gICAgICBjb25kaXRpb25zLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIG9wLFxuICAgICAgICB0aHJlc2hvbGQsXG4gICAgICAgIGFjdHVhbFN1bW1hcnk6IGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICByZWRhY3RlZCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdCkgYWxsTWF0Y2hlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVtcHR5IGZpbHRlciAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIHNob3VsZCBOT1QgbWF0Y2gg4oCUIHByZXZlbnRzIHZhY3VvdXNcbiAgLy8gdHJ1dGguIE5PVEU6IHRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgUHJpc21hL1NRTCBgd2hlcmU6IHt9YCAoXCJtYXRjaFxuICAvLyBldmVyeXRoaW5nXCIpIOKAlCBzZWUgdGhlIGZ1bmN0aW9uIEpTRG9jLiBDYXRjaC1hbGxzIGJlbG9uZyBpbiBkZWNpZGUoKSdzXG4gIC8vIGV4cGxpY2l0IGRlZmF1bHRCcmFuY2gsIG5vdCBpbiBhbiBlbXB0eSBydWxlLlxuICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB7IG1hdGNoZWQ6IGZhbHNlLCBjb25kaXRpb25zIH07XG5cbiAgcmV0dXJuIHsgbWF0Y2hlZDogYWxsTWF0Y2hlZCwgY29uZGl0aW9ucyB9O1xufVxuIl19
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* Captures ReadEvent key + summarized value + redaction flag.
|
|
7
7
|
* Uses summarizeValue() at capture time (no raw object references held).
|
|
8
8
|
*/
|
|
9
|
-
import { summarizeValue } from '../
|
|
9
|
+
import { summarizeValue } from '../capture/summarize.js';
|
|
10
|
+
import { SCOPE_PLACEHOLDER } from '../memory/placeholders.js';
|
|
10
11
|
const MAX_VALUE_LEN = 80;
|
|
11
12
|
let evidenceCounter = 0;
|
|
12
13
|
/**
|
|
@@ -24,7 +25,7 @@ export class EvidenceCollector {
|
|
|
24
25
|
return;
|
|
25
26
|
this.inputs.push({
|
|
26
27
|
key: event.key,
|
|
27
|
-
valueSummary: event.redacted ?
|
|
28
|
+
valueSummary: event.redacted ? SCOPE_PLACEHOLDER : summarizeValue(event.value, MAX_VALUE_LEN),
|
|
28
29
|
redacted: event.redacted === true,
|
|
29
30
|
});
|
|
30
31
|
}
|
|
@@ -33,4 +34,4 @@ export class EvidenceCollector {
|
|
|
33
34
|
return this.inputs;
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZpZGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlY2lkZS9ldmlkZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTlELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUV6QixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFFeEI7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixFQUFFLENBQVM7SUFDWixNQUFNLEdBQWdCLEVBQUUsQ0FBQztJQUVqQztRQUNFLElBQUksQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBZ0I7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDO1lBQzdGLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUk7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2V2aWRlbmNlIC0tIExpZ2h0d2VpZ2h0IHRlbXAgcmVjb3JkZXIgZm9yIGF1dG8tY2FwdHVyaW5nIHJlYWRzXG4gKiBkdXJpbmcgYSB3aGVuKCkgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBBdHRhY2hlZCB0byBzY29wZSBiZWZvcmUgY2FsbGluZyB3aGVuKHNjb3BlKSwgZGV0YWNoZWQgYWZ0ZXIuXG4gKiBDYXB0dXJlcyBSZWFkRXZlbnQga2V5ICsgc3VtbWFyaXplZCB2YWx1ZSArIHJlZGFjdGlvbiBmbGFnLlxuICogVXNlcyBzdW1tYXJpemVWYWx1ZSgpIGF0IGNhcHR1cmUgdGltZSAobm8gcmF3IG9iamVjdCByZWZlcmVuY2VzIGhlbGQpLlxuICovXG5cbmltcG9ydCB7IHN1bW1hcml6ZVZhbHVlIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuaW1wb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVhZEV2ZW50LCBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFkSW5wdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgTUFYX1ZBTFVFX0xFTiA9IDgwO1xuXG5sZXQgZXZpZGVuY2VDb3VudGVyID0gMDtcblxuLyoqXG4gKiBNaW5pbWFsIFNjb3BlUmVjb3JkZXIgdGhhdCBjYXB0dXJlcyByZWFkcyBmb3IgZGVjaXNpb24gZXZpZGVuY2UuXG4gKiBBdHRhY2ggYmVmb3JlIHdoZW4oKSwgZGV0YWNoIGFmdGVyLiBDb2xsZWN0IHZpYSBnZXRJbnB1dHMoKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2aWRlbmNlQ29sbGVjdG9yIGltcGxlbWVudHMgU2NvcGVSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5wdXRzOiBSZWFkSW5wdXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWQgPSBgZXZpZGVuY2UtJHsrK2V2aWRlbmNlQ291bnRlcn1gO1xuICB9XG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50LmtleSkgcmV0dXJuO1xuICAgIHRoaXMuaW5wdXRzLnB1c2goe1xuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICB2YWx1ZVN1bW1hcnk6IGV2ZW50LnJlZGFjdGVkID8gU0NPUEVfUExBQ0VIT0xERVIgOiBzdW1tYXJpemVWYWx1ZShldmVudC52YWx1ZSwgTUFYX1ZBTFVFX0xFTiksXG4gICAgICByZWRhY3RlZDogZXZlbnQucmVkYWN0ZWQgPT09IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBjb2xsZWN0ZWQgcmVhZCBpbnB1dHMuICovXG4gIGdldElucHV0cygpOiBSZWFkSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* devMode — the library-wide developer-diagnostics flag.
|
|
3
|
+
*
|
|
4
|
+
* A leaf: this module imports nothing, so every layer may import it. It lives at the
|
|
5
|
+
* bottom of `src/lib/` (it used to sit in `scope/detectCircular.ts`) because memory/,
|
|
6
|
+
* recorder/, decide/, engine/ and runner/ all gate their developer-only checks on it —
|
|
7
|
+
* and a leaf inside a mid-layer module made each of them import upward, which closed the
|
|
8
|
+
* one value-level module cycle (memory ⇄ scope ⇄ recorder). `footprintjs` re-exports
|
|
9
|
+
* `enableDevMode` / `disableDevMode` / `isDevMode` from here (src/index.ts).
|
|
10
|
+
*
|
|
11
|
+
* The circular-reference check that used to share this file is `capture/circular.ts`.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Enable dev-mode diagnostics across the whole library.
|
|
15
|
+
*
|
|
16
|
+
* When on, the library performs developer-only checks (circular references,
|
|
17
|
+
* empty recorder detection, suspicious predicate shapes, etc.) and emits
|
|
18
|
+
* `console.warn` messages to help you catch mistakes early.
|
|
19
|
+
*
|
|
20
|
+
* Call once at application startup. See the module header for the full
|
|
21
|
+
* list of what dev-mode gates.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import { enableDevMode } from 'footprintjs';
|
|
26
|
+
* if (process.env.NODE_ENV !== 'production') enableDevMode();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function enableDevMode(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Disable dev-mode diagnostics across the whole library (default state).
|
|
32
|
+
*
|
|
33
|
+
* All dev-only checks become no-ops. Safe to call in production paths —
|
|
34
|
+
* typically the default never needs to be re-asserted, but this is the
|
|
35
|
+
* documented way to turn the flag off if your code enabled it earlier.
|
|
36
|
+
*/
|
|
37
|
+
export declare function disableDevMode(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Returns whether dev-mode diagnostics are currently enabled.
|
|
40
|
+
*
|
|
41
|
+
* Library internals call this before running any dev-only check. Consumers
|
|
42
|
+
* rarely need to call it directly — prefer `enableDevMode()` at startup and
|
|
43
|
+
* let the library gate its own diagnostics internally.
|
|
44
|
+
*/
|
|
45
|
+
export declare function isDevMode(): boolean;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* devMode — the library-wide developer-diagnostics flag.
|
|
3
|
+
*
|
|
4
|
+
* A leaf: this module imports nothing, so every layer may import it. It lives at the
|
|
5
|
+
* bottom of `src/lib/` (it used to sit in `scope/detectCircular.ts`) because memory/,
|
|
6
|
+
* recorder/, decide/, engine/ and runner/ all gate their developer-only checks on it —
|
|
7
|
+
* and a leaf inside a mid-layer module made each of them import upward, which closed the
|
|
8
|
+
* one value-level module cycle (memory ⇄ scope ⇄ recorder). `footprintjs` re-exports
|
|
9
|
+
* `enableDevMode` / `disableDevMode` / `isDevMode` from here (src/index.ts).
|
|
10
|
+
*
|
|
11
|
+
* The circular-reference check that used to share this file is `capture/circular.ts`.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Global dev-mode flag for the whole `footprintjs` library.
|
|
15
|
+
*
|
|
16
|
+
* ## What it gates
|
|
17
|
+
*
|
|
18
|
+
* Multiple library subsystems use `isDevMode()` to decide whether to run
|
|
19
|
+
* expensive or noisy developer-only checks. Production leaves it OFF (the
|
|
20
|
+
* default) to avoid the cost and keep logs clean. Turning it ON enables:
|
|
21
|
+
*
|
|
22
|
+
* - Circular-reference detection in `ScopeFacade.setValue()` (O(n) per write).
|
|
23
|
+
* - Warnings when `attachCombinedRecorder()` receives a recorder with no
|
|
24
|
+
* observer methods (likely mistake — easy to forget an `on*` handler).
|
|
25
|
+
* - Warnings from `decide()` / `select()` when a predicate or rule shape
|
|
26
|
+
* looks suspicious.
|
|
27
|
+
* - Structural-integrity warnings in `getSubtreeSnapshot()`.
|
|
28
|
+
* - Any future developer-only diagnostic added to the library.
|
|
29
|
+
*
|
|
30
|
+
* ## How to enable
|
|
31
|
+
*
|
|
32
|
+
* Call `enableDevMode()` once at application startup (typically near your
|
|
33
|
+
* executor construction):
|
|
34
|
+
*
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { enableDevMode } from 'footprintjs';
|
|
37
|
+
*
|
|
38
|
+
* if (process.env.NODE_ENV !== 'production') {
|
|
39
|
+
* enableDevMode();
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* Alternatively, gate on your own flag — the point is that production stays
|
|
44
|
+
* silent and fast, development is loud and helpful.
|
|
45
|
+
*
|
|
46
|
+
* ## Contract
|
|
47
|
+
*
|
|
48
|
+
* - Default: OFF. A library import does NOT enable dev-mode automatically.
|
|
49
|
+
* - Global: one flag controls all library dev diagnostics. A consumer who
|
|
50
|
+
* calls `disableDevMode()` silences every dev warning at once.
|
|
51
|
+
* - Process-wide: not per-executor. Enabling mid-run affects subsequent
|
|
52
|
+
* operations but does not retroactively replay missed checks.
|
|
53
|
+
* - Safe in production: when OFF, every gated check is a cheap `!flag`
|
|
54
|
+
* branch and adds negligible overhead.
|
|
55
|
+
*/
|
|
56
|
+
let devModeEnabled = false;
|
|
57
|
+
/**
|
|
58
|
+
* Enable dev-mode diagnostics across the whole library.
|
|
59
|
+
*
|
|
60
|
+
* When on, the library performs developer-only checks (circular references,
|
|
61
|
+
* empty recorder detection, suspicious predicate shapes, etc.) and emits
|
|
62
|
+
* `console.warn` messages to help you catch mistakes early.
|
|
63
|
+
*
|
|
64
|
+
* Call once at application startup. See the module header for the full
|
|
65
|
+
* list of what dev-mode gates.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* import { enableDevMode } from 'footprintjs';
|
|
70
|
+
* if (process.env.NODE_ENV !== 'production') enableDevMode();
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function enableDevMode() {
|
|
74
|
+
devModeEnabled = true;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Disable dev-mode diagnostics across the whole library (default state).
|
|
78
|
+
*
|
|
79
|
+
* All dev-only checks become no-ops. Safe to call in production paths —
|
|
80
|
+
* typically the default never needs to be re-asserted, but this is the
|
|
81
|
+
* documented way to turn the flag off if your code enabled it earlier.
|
|
82
|
+
*/
|
|
83
|
+
export function disableDevMode() {
|
|
84
|
+
devModeEnabled = false;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Returns whether dev-mode diagnostics are currently enabled.
|
|
88
|
+
*
|
|
89
|
+
* Library internals call this before running any dev-only check. Consumers
|
|
90
|
+
* rarely need to call it directly — prefer `enableDevMode()` at startup and
|
|
91
|
+
* let the library gate its own diagnostics internally.
|
|
92
|
+
*/
|
|
93
|
+
export function isDevMode() {
|
|
94
|
+
return devModeEnabled;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2TW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZGV2TW9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFFM0I7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLGFBQWE7SUFDM0IsY0FBYyxHQUFHLElBQUksQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWM7SUFDNUIsY0FBYyxHQUFHLEtBQUssQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFNBQVM7SUFDdkIsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGV2TW9kZSDigJQgdGhlIGxpYnJhcnktd2lkZSBkZXZlbG9wZXItZGlhZ25vc3RpY3MgZmxhZy5cbiAqXG4gKiBBIGxlYWY6IHRoaXMgbW9kdWxlIGltcG9ydHMgbm90aGluZywgc28gZXZlcnkgbGF5ZXIgbWF5IGltcG9ydCBpdC4gSXQgbGl2ZXMgYXQgdGhlXG4gKiBib3R0b20gb2YgYHNyYy9saWIvYCAoaXQgdXNlZCB0byBzaXQgaW4gYHNjb3BlL2RldGVjdENpcmN1bGFyLnRzYCkgYmVjYXVzZSBtZW1vcnkvLFxuICogcmVjb3JkZXIvLCBkZWNpZGUvLCBlbmdpbmUvIGFuZCBydW5uZXIvIGFsbCBnYXRlIHRoZWlyIGRldmVsb3Blci1vbmx5IGNoZWNrcyBvbiBpdCDigJRcbiAqIGFuZCBhIGxlYWYgaW5zaWRlIGEgbWlkLWxheWVyIG1vZHVsZSBtYWRlIGVhY2ggb2YgdGhlbSBpbXBvcnQgdXB3YXJkLCB3aGljaCBjbG9zZWQgdGhlXG4gKiBvbmUgdmFsdWUtbGV2ZWwgbW9kdWxlIGN5Y2xlIChtZW1vcnkg4oeEIHNjb3BlIOKHhCByZWNvcmRlcikuIGBmb290cHJpbnRqc2AgcmUtZXhwb3J0c1xuICogYGVuYWJsZURldk1vZGVgIC8gYGRpc2FibGVEZXZNb2RlYCAvIGBpc0Rldk1vZGVgIGZyb20gaGVyZSAoc3JjL2luZGV4LnRzKS5cbiAqXG4gKiBUaGUgY2lyY3VsYXItcmVmZXJlbmNlIGNoZWNrIHRoYXQgdXNlZCB0byBzaGFyZSB0aGlzIGZpbGUgaXMgYGNhcHR1cmUvY2lyY3VsYXIudHNgLlxuICovXG5cbi8qKlxuICogR2xvYmFsIGRldi1tb2RlIGZsYWcgZm9yIHRoZSB3aG9sZSBgZm9vdHByaW50anNgIGxpYnJhcnkuXG4gKlxuICogIyMgV2hhdCBpdCBnYXRlc1xuICpcbiAqIE11bHRpcGxlIGxpYnJhcnkgc3Vic3lzdGVtcyB1c2UgYGlzRGV2TW9kZSgpYCB0byBkZWNpZGUgd2hldGhlciB0byBydW5cbiAqIGV4cGVuc2l2ZSBvciBub2lzeSBkZXZlbG9wZXItb25seSBjaGVja3MuIFByb2R1Y3Rpb24gbGVhdmVzIGl0IE9GRiAodGhlXG4gKiBkZWZhdWx0KSB0byBhdm9pZCB0aGUgY29zdCBhbmQga2VlcCBsb2dzIGNsZWFuLiBUdXJuaW5nIGl0IE9OIGVuYWJsZXM6XG4gKlxuICogICAtIENpcmN1bGFyLXJlZmVyZW5jZSBkZXRlY3Rpb24gaW4gYFNjb3BlRmFjYWRlLnNldFZhbHVlKClgIChPKG4pIHBlciB3cml0ZSkuXG4gKiAgIC0gV2FybmluZ3Mgd2hlbiBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcigpYCByZWNlaXZlcyBhIHJlY29yZGVyIHdpdGggbm9cbiAqICAgICBvYnNlcnZlciBtZXRob2RzIChsaWtlbHkgbWlzdGFrZSDigJQgZWFzeSB0byBmb3JnZXQgYW4gYG9uKmAgaGFuZGxlcikuXG4gKiAgIC0gV2FybmluZ3MgZnJvbSBgZGVjaWRlKClgIC8gYHNlbGVjdCgpYCB3aGVuIGEgcHJlZGljYXRlIG9yIHJ1bGUgc2hhcGVcbiAqICAgICBsb29rcyBzdXNwaWNpb3VzLlxuICogICAtIFN0cnVjdHVyYWwtaW50ZWdyaXR5IHdhcm5pbmdzIGluIGBnZXRTdWJ0cmVlU25hcHNob3QoKWAuXG4gKiAgIC0gQW55IGZ1dHVyZSBkZXZlbG9wZXItb25seSBkaWFnbm9zdGljIGFkZGVkIHRvIHRoZSBsaWJyYXJ5LlxuICpcbiAqICMjIEhvdyB0byBlbmFibGVcbiAqXG4gKiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIG9uY2UgYXQgYXBwbGljYXRpb24gc3RhcnR1cCAodHlwaWNhbGx5IG5lYXIgeW91clxuICogZXhlY3V0b3IgY29uc3RydWN0aW9uKTpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZW5hYmxlRGV2TW9kZSB9IGZyb20gJ2Zvb3RwcmludGpzJztcbiAqXG4gKiBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICogICBlbmFibGVEZXZNb2RlKCk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCBnYXRlIG9uIHlvdXIgb3duIGZsYWcg4oCUIHRoZSBwb2ludCBpcyB0aGF0IHByb2R1Y3Rpb24gc3RheXNcbiAqIHNpbGVudCBhbmQgZmFzdCwgZGV2ZWxvcG1lbnQgaXMgbG91ZCBhbmQgaGVscGZ1bC5cbiAqXG4gKiAjIyBDb250cmFjdFxuICpcbiAqIC0gRGVmYXVsdDogT0ZGLiBBIGxpYnJhcnkgaW1wb3J0IGRvZXMgTk9UIGVuYWJsZSBkZXYtbW9kZSBhdXRvbWF0aWNhbGx5LlxuICogLSBHbG9iYWw6IG9uZSBmbGFnIGNvbnRyb2xzIGFsbCBsaWJyYXJ5IGRldiBkaWFnbm9zdGljcy4gQSBjb25zdW1lciB3aG9cbiAqICAgY2FsbHMgYGRpc2FibGVEZXZNb2RlKClgIHNpbGVuY2VzIGV2ZXJ5IGRldiB3YXJuaW5nIGF0IG9uY2UuXG4gKiAtIFByb2Nlc3Mtd2lkZTogbm90IHBlci1leGVjdXRvci4gRW5hYmxpbmcgbWlkLXJ1biBhZmZlY3RzIHN1YnNlcXVlbnRcbiAqICAgb3BlcmF0aW9ucyBidXQgZG9lcyBub3QgcmV0cm9hY3RpdmVseSByZXBsYXkgbWlzc2VkIGNoZWNrcy5cbiAqIC0gU2FmZSBpbiBwcm9kdWN0aW9uOiB3aGVuIE9GRiwgZXZlcnkgZ2F0ZWQgY2hlY2sgaXMgYSBjaGVhcCBgIWZsYWdgXG4gKiAgIGJyYW5jaCBhbmQgYWRkcyBuZWdsaWdpYmxlIG92ZXJoZWFkLlxuICovXG5sZXQgZGV2TW9kZUVuYWJsZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBFbmFibGUgZGV2LW1vZGUgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSB3aG9sZSBsaWJyYXJ5LlxuICpcbiAqIFdoZW4gb24sIHRoZSBsaWJyYXJ5IHBlcmZvcm1zIGRldmVsb3Blci1vbmx5IGNoZWNrcyAoY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIGVtcHR5IHJlY29yZGVyIGRldGVjdGlvbiwgc3VzcGljaW91cyBwcmVkaWNhdGUgc2hhcGVzLCBldGMuKSBhbmQgZW1pdHNcbiAqIGBjb25zb2xlLndhcm5gIG1lc3NhZ2VzIHRvIGhlbHAgeW91IGNhdGNoIG1pc3Rha2VzIGVhcmx5LlxuICpcbiAqIENhbGwgb25jZSBhdCBhcHBsaWNhdGlvbiBzdGFydHVwLiBTZWUgdGhlIG1vZHVsZSBoZWFkZXIgZm9yIHRoZSBmdWxsXG4gKiBsaXN0IG9mIHdoYXQgZGV2LW1vZGUgZ2F0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBlbmFibGVEZXZNb2RlIH0gZnJvbSAnZm9vdHByaW50anMnO1xuICogaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGVuYWJsZURldk1vZGUoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRGV2TW9kZSgpOiB2b2lkIHtcbiAgZGV2TW9kZUVuYWJsZWQgPSB0cnVlO1xufVxuXG4vKipcbiAqIERpc2FibGUgZGV2LW1vZGUgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSB3aG9sZSBsaWJyYXJ5IChkZWZhdWx0IHN0YXRlKS5cbiAqXG4gKiBBbGwgZGV2LW9ubHkgY2hlY2tzIGJlY29tZSBuby1vcHMuIFNhZmUgdG8gY2FsbCBpbiBwcm9kdWN0aW9uIHBhdGhzIOKAlFxuICogdHlwaWNhbGx5IHRoZSBkZWZhdWx0IG5ldmVyIG5lZWRzIHRvIGJlIHJlLWFzc2VydGVkLCBidXQgdGhpcyBpcyB0aGVcbiAqIGRvY3VtZW50ZWQgd2F5IHRvIHR1cm4gdGhlIGZsYWcgb2ZmIGlmIHlvdXIgY29kZSBlbmFibGVkIGl0IGVhcmxpZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlRGV2TW9kZSgpOiB2b2lkIHtcbiAgZGV2TW9kZUVuYWJsZWQgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZGV2LW1vZGUgZGlhZ25vc3RpY3MgYXJlIGN1cnJlbnRseSBlbmFibGVkLlxuICpcbiAqIExpYnJhcnkgaW50ZXJuYWxzIGNhbGwgdGhpcyBiZWZvcmUgcnVubmluZyBhbnkgZGV2LW9ubHkgY2hlY2suIENvbnN1bWVyc1xuICogcmFyZWx5IG5lZWQgdG8gY2FsbCBpdCBkaXJlY3RseSDigJQgcHJlZmVyIGBlbmFibGVEZXZNb2RlKClgIGF0IHN0YXJ0dXAgYW5kXG4gKiBsZXQgdGhlIGxpYnJhcnkgZ2F0ZSBpdHMgb3duIGRpYWdub3N0aWNzIGludGVybmFsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rldk1vZGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBkZXZNb2RlRW5hYmxlZDtcbn1cbiJdfQ==
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Deep-clones build-time structure at init, then maintains O(1) lookup map.
|
|
9
9
|
*/
|
|
10
|
-
import { isDevMode } from '../../
|
|
10
|
+
import { isDevMode } from '../../devMode.js';
|
|
11
11
|
/**
|
|
12
12
|
* Compute the node type from node properties.
|
|
13
13
|
* Used by RuntimeStructureManager for serialization.
|
|
@@ -201,4 +201,4 @@ export class RuntimeStructureManager {
|
|
|
201
201
|
nodeStructure.iterationCount = count;
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVudGltZVN0cnVjdHVyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9SdW50aW1lU3RydWN0dXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkxRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFlO0lBRWYsd0VBQXdFO0lBQ3hFLG9GQUFvRjtJQUNwRixJQUFJLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3pDLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLGlFQUFpRTtJQUNqRSw2RUFBNkU7SUFDN0Usa0VBQWtFO0lBQ2xFLElBQUksSUFBSSxDQUFDLGlCQUFpQjtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFDLElBQUksSUFBSSxDQUFDLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUN2Qyx1RkFBdUY7SUFDdkYsc0ZBQXNGO0lBQ3RGLHdGQUF3RjtJQUN4RixpRUFBaUU7SUFDakUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFekMsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FB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Q0FBQztRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsOENBQThDLGFBQWEseUVBQXlFLENBQ3JJLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsb0JBQW9CLENBQUMsTUFBYyxFQUFFLEtBQWE7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0I7WUFBRSxPQUFPO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQzNCLGFBQWEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyIOKAlCBNdXRhYmxlIHN0cnVjdHVyZSB0cmFja2luZyBmb3IgdmlzdWFsaXphdGlvbi5cbiAqXG4gKiBEdXJpbmcgZXhlY3V0aW9uLCBkeW5hbWljIGV2ZW50cyAobmV3IGNoaWxkcmVuLCBzdWJmbG93cywgbmV4dCBjaGFpbnMsXG4gKiBsb29wIGl0ZXJhdGlvbnMpIG1vZGlmeSB0aGUgcGlwZWxpbmUuIFRoaXMgbWFuYWdlciBrZWVwcyBhIHNlcmlhbGl6ZWRcbiAqIHN0cnVjdHVyZSBpbiBzeW5jIHNvIGNvbnN1bWVycyBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG4gKlxuICogRGVlcC1jbG9uZXMgYnVpbGQtdGltZSBzdHJ1Y3R1cmUgYXQgaW5pdCwgdGhlbiBtYWludGFpbnMgTygxKSBsb29rdXAgbWFwLlxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uLy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIG5vZGUgdHlwZSBmcm9tIG5vZGUgcHJvcGVydGllcy5cbiAqIFVzZWQgYnkgUnVudGltZVN0cnVjdHVyZU1hbmFnZXIgZm9yIHNlcmlhbGl6YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTm9kZVR5cGUoXG4gIG5vZGU6IFN0YWdlTm9kZSxcbik6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCcge1xuICAvLyBMb29wIGJhY2stZWRnZSBub2RlcyBhcmUgc3BlYyBzdHVicyDigJQgdGhleSBhcmUgbm90IGV4ZWN1dGFibGUgc3RhZ2VzLlxuICAvLyAoUnVudGltZTogU3RhZ2VOb2RlLmlzTG9vcFJlZjsgU3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLmlzTG9vcFJlZmVyZW5jZSlcbiAgaWYgKG5vZGUuaXNMb29wUmVmKSByZXR1cm4gJ2xvb3AnO1xuICBpZiAobm9kZS5pc1N1YmZsb3dSb290KSByZXR1cm4gJ3N1YmZsb3cnO1xuICAvLyBBIHBhcmFsbGVsLWZvci1lYWNoIG5vZGUgZmFucyBvdXQgb25lIGJyYW5jaCBwZXIgaXRlbSDigJQgaXQgSVMgYSBmb3JrLCBhbmRcbiAgLy8gaXQgc2F5cyBzbyBpbiB0aGUgT05FIG1hcHBpbmcgdGhlIGNvbXBpbGVyIGNhbm5vdCBjaGVjayBmb3IgdXMuIEl0IGNhcnJpZXNcbiAgLy8gbm8gc3RhdGljIGBjaGlsZHJlbmAsIHNvIHdpdGhvdXQgdGhpcyBsaW5lIGl0IHdvdWxkIHNlcmlhbGl6ZSBhcyAnc3RhZ2UnXG4gIC8vIGFuZCBldmVyeSBjb25zdW1lciB3b3VsZCByZW5kZXIgYSBmYW4tb3V0IGFzIGEgcGxhaW4gc3RlcC4gVGhlXG4gIC8vIFwib25lIGJyYW5jaCBwZXIgaXRlbVwiIGRldGFpbCByaWRlcyB0aGUgYGlzRHluYW1pY1BhcmFsbGVsYCBmbGFnIGluc3RlYWQgb2ZcbiAgLy8gYSBuZXcgdHlwZSwgc28gZXhpc3RpbmcgYHN3aXRjaCAodHlwZSlgIGNvbnN1bWVycyBrZWVwIHdvcmtpbmcuXG4gIGlmIChub2RlLmlzRHluYW1pY1BhcmFsbGVsKSByZXR1cm4gJ2ZvcmsnO1xuICBpZiAobm9kZS5zZWxlY3RvckZuKSByZXR1cm4gJ3NlbGVjdG9yJztcbiAgLy8gbmV4dE5vZGVTZWxlY3RvciBpcyBhbiBvdXRwdXQtYmFzZWQgcm91dGluZyBmdW5jdGlvbiAobm90IHNjb3BlLWJhc2VkKSwgZ3JvdXBlZCB3aXRoXG4gIC8vIGRlY2lkZXJGbiBhcyAnZGVjaWRlcicgcmF0aGVyIHRoYW4gJ3NlbGVjdG9yJy4gVGhlIHR3byBicmFuY2hlcyBkaWZmZXIgaW4gd2hhdCB0aGV5XG4gIC8vIHJlYWQgKG91dHB1dCB2cyBzY29wZSkgYnV0IGJvdGggcmVwcmVzZW50IGEgY29uZGl0aW9uYWwgYnJhbmNoIGRlY2lzaW9uLiBSZXZpc2l0IGluIGFcbiAgLy8gZnV0dXJlIGNsZWFudXAgb25jZSB0aGUgZGlzdGluY3Rpb24gaXMgdXNlci12aXNpYmxlIGluIHRoZSBVSS5cbiAgaWYgKG5vZGUubmV4dE5vZGVTZWxlY3RvciB8fCBub2RlLmRlY2lkZXJGbikgcmV0dXJuICdkZWNpZGVyJztcbiAgaWYgKG5vZGUuaXNTdHJlYW1pbmcpIHJldHVybiAnc3RyZWFtaW5nJztcblxuICBjb25zdCBoYXNEeW5hbWljQ2hpbGRyZW4gPSBCb29sZWFuKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiAhbm9kZS5uZXh0Tm9kZVNlbGVjdG9yICYmIG5vZGUuZm4pO1xuICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIWhhc0R5bmFtaWNDaGlsZHJlbikgcmV0dXJuICdmb3JrJztcblxuICByZXR1cm4gJ3N0YWdlJztcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBydW50aW1lUGlwZWxpbmVTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIHByaXZhdGUgc3RydWN0dXJlTm9kZU1hcDogTWFwPHN0cmluZywgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlPiA9IG5ldyBNYXAoKTtcblxuICAvKiogSW5pdGlhbGl6ZSBmcm9tIGJ1aWxkLXRpbWUgc3RydWN0dXJlLiBEZWVwLWNsb25lcyB2aWEgSlNPTiByb3VuZC10cmlwLiAqL1xuICBpbml0KGJ1aWxkVGltZVN0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSk6IHZvaWQge1xuICAgIGlmICghYnVpbGRUaW1lU3RydWN0dXJlKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucnVudGltZVBpcGVsaW5lU3RydWN0dXJlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShidWlsZFRpbWVTdHJ1Y3R1cmUpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vbi1zZXJpYWxpemFibGUgYnVpbGQtdGltZSBzdHJ1Y3R1cmUg4oCUIHNraXAgcnVudGltZSB0cmFja2luZyBncmFjZWZ1bGx5LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkTm9kZU1hcCh0aGlzLnJ1bnRpbWVQaXBlbGluZVN0cnVjdHVyZSEpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGN1cnJlbnQgcnVudGltZSBzdHJ1Y3R1cmUgKG11dGF0ZWQgZHVyaW5nIGV4ZWN1dGlvbikuICovXG4gIGdldFN0cnVjdHVyZSgpOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVQaXBlbGluZVN0cnVjdHVyZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9OT0RFX01BUF9ERVBUSCA9IDUwMDtcblxuICAvKiogUmVjdXJzaXZlbHkgcmVnaXN0ZXJzIGFsbCBub2RlcyBpbiB0aGUgTygxKSBsb29rdXAgbWFwLiAqL1xuICBwcml2YXRlIGJ1aWxkTm9kZU1hcChub2RlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsIGRlcHRoID0gMCk6IHZvaWQge1xuICAgIGlmIChkZXB0aCA+IFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyLk1BWF9OT0RFX01BUF9ERVBUSCkge1xuICAgICAgLy8gR3VhcmQgYWdhaW5zdCBwYXRob2xvZ2ljYWxseSBkZWVwIG9yIGN5Y2xpYyBzdHJ1Y3R1cmVzIGluamVjdGVkIGludG8gYnVpbGRUaW1lU3RydWN0dXJlLlxuICAgICAgLy8gTm9ybWFsIGJ1aWxkZXItcHJvZHVjZWQgY2hhcnRzIGFyZSBuYXR1cmFsbHkgYm91bmRlZCB3ZWxsIGJlbG93IHRoaXMgbGltaXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RydWN0dXJlTm9kZU1hcC5zZXQobm9kZS5pZCwgbm9kZSk7XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuYnVpbGROb2RlTWFwKGNoaWxkLCBkZXB0aCArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZS5uZXh0KSB7XG4gICAgICB0aGlzLmJ1aWxkTm9kZU1hcChub2RlLm5leHQsIGRlcHRoICsgMSk7XG4gICAgfVxuICAgIGlmIChub2RlLnN1YmZsb3dTdHJ1Y3R1cmUpIHtcbiAgICAgIHRoaXMuYnVpbGROb2RlTWFwKG5vZGUuc3ViZmxvd1N0cnVjdHVyZSwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ29udmVydCBhIHJ1bnRpbWUgU3RhZ2VOb2RlIGludG8gYSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgbm9kZS4gKi9cbiAgc3RhZ2VOb2RlVG9TdHJ1Y3R1cmUobm9kZTogU3RhZ2VOb2RlKTogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHtcbiAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgdHlwZTogY29tcHV0ZU5vZGVUeXBlKG5vZGUpLFxuICAgICAgZGVzY3JpcHRpb246IG5vZGUuZGVzY3JpcHRpb24sXG4gICAgfTtcblxuICAgIGlmIChub2RlLmlzU3RyZWFtaW5nKSB7XG4gICAgICBzdHJ1Y3R1cmUuaXNTdHJlYW1pbmcgPSB0cnVlO1xuICAgICAgc3RydWN0dXJlLnN0cmVhbUlkID0gbm9kZS5zdHJlYW1JZDtcbiAgICB9XG5cbiAgICAvLyBEZWNsYXJlZCB0YWdzICg5LjIxLjApOiB0aGUgTWFwIGFkdmVydGlzZXMgdGhlIHZvY2FidWxhcnksIGFuZCBhIG5vZGVcbiAgICAvLyByZXNvbHZlZCBhdCBydW4gdGltZSAoYSBsYXp5IHN1YmZsb3csIGEgZHluYW1pYy1zdWJmbG93IHJldHVybikgaGFzXG4gICAgLy8gb25seSBUSElTIGJ1aWxkZXIgdG8gYWR2ZXJ0aXNlIGl0LiBBYnNlbnQgd2hlbiB0aGUgbm9kZSBkZWNsYXJlcyBub25lLlxuICAgIGlmIChub2RlLnRhZ3M/Lmxlbmd0aCkgc3RydWN0dXJlLnRhZ3MgPSBbLi4ubm9kZS50YWdzXTtcblxuICAgIGlmIChub2RlLmlzU3ViZmxvd1Jvb3QpIHtcbiAgICAgIHN0cnVjdHVyZS5pc1N1YmZsb3dSb290ID0gdHJ1ZTtcbiAgICAgIHN0cnVjdHVyZS5zdWJmbG93SWQgPSBub2RlLnN1YmZsb3dJZDtcbiAgICAgIHN0cnVjdHVyZS5zdWJmbG93TmFtZSA9IG5vZGUuc3ViZmxvd05hbWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuZGVjaWRlckZuKSB7XG4gICAgICBzdHJ1Y3R1cmUuaGFzRGVjaWRlciA9IHRydWU7XG4gICAgICBzdHJ1Y3R1cmUuYnJhbmNoSWRzID0gbm9kZS5jaGlsZHJlbj8ubWFwKChjKSA9PiBjLmlkKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5zZWxlY3RvckZuIHx8IG5vZGUubmV4dE5vZGVTZWxlY3Rvcikge1xuICAgICAgc3RydWN0dXJlLmhhc1NlbGVjdG9yID0gdHJ1ZTtcbiAgICAgIHN0cnVjdHVyZS5icmFuY2hJZHMgPSBub2RlLmNoaWxkcmVuPy5tYXAoKGMpID0+IGMuaWQpO1xuICAgIH1cblxuICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHN0cnVjdHVyZS5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4ubWFwKChjKSA9PiB0aGlzLnN0YWdlTm9kZVRvU3RydWN0dXJlKGMpKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5uZXh0KSB7XG4gICAgICBzdHJ1Y3R1cmUubmV4dCA9IHRoaXMuc3RhZ2VOb2RlVG9TdHJ1Y3R1cmUobm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5zdWJmbG93RGVmPy5idWlsZFRpbWVTdHJ1Y3R1cmUpIHtcbiAgICAgIHN0cnVjdHVyZS5zdWJmbG93U3RydWN0dXJlID0gbm9kZS5zdWJmbG93RGVmLmJ1aWxkVGltZVN0cnVjdHVyZSBhcyBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cnVjdHVyZTtcbiAgfVxuXG4gIC8qKiBVcGRhdGUgc3RydWN0dXJlIHdoZW4gZHluYW1pYyBjaGlsZHJlbiBhcmUgZGlzY292ZXJlZCBhdCBydW50aW1lLiAqL1xuICB1cGRhdGVEeW5hbWljQ2hpbGRyZW4oXG4gICAgcGFyZW50Tm9kZUlkOiBzdHJpbmcsXG4gICAgZHluYW1pY0NoaWxkcmVuOiBTdGFnZU5vZGVbXSxcbiAgICBoYXNTZWxlY3Rvcj86IGJvb2xlYW4sXG4gICAgaGFzRGVjaWRlcj86IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ydW50aW1lUGlwZWxpbmVTdHJ1Y3R1cmUpIHJldHVybjtcblxuICAgIGNvbnN0IHBhcmVudFN0cnVjdHVyZSA9IHRoaXMuc3RydWN0dXJlTm9kZU1hcC5nZXQocGFyZW50Tm9kZUlkKTtcbiAgICBpZiAoIXBhcmVudFN0cnVjdHVyZSkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludF0gUnVudGltZVN0cnVjdHVyZU1hbmFnZXI6IG5vZGUgJyR7cGFyZW50Tm9kZUlkfScgbm90IGZvdW5kIGluIHN0cnVjdHVyZSBtYXAg4oCUIHNuYXBzaG90IHZpc3VhbGl6YXRpb24gbWF5IGJlIGluY29tcGxldGVgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkU3RydWN0dXJlcyA9IGR5bmFtaWNDaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLnN0YWdlTm9kZVRvU3RydWN0dXJlKGNoaWxkKSk7XG4gICAgcGFyZW50U3RydWN0dXJlLmNoaWxkcmVuID0gY2hpbGRTdHJ1Y3R1cmVzO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZFN0cnVjdHVyZSBvZiBjaGlsZFN0cnVjdHVyZXMpIHtcbiAgICAgIHRoaXMuYnVpbGROb2RlTWFwKGNoaWxkU3RydWN0dXJlKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzU2VsZWN0b3IpIHtcbiAgICAgIHBhcmVudFN0cnVjdHVyZS5oYXNTZWxlY3RvciA9IHRydWU7XG4gICAgICBwYXJlbnRTdHJ1Y3R1cmUuYnJhbmNoSWRzID0gY2hpbGRTdHJ1Y3R1cmVzLm1hcCgoYykgPT4gYy5pZCk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0RlY2lkZXIpIHtcbiAgICAgIHBhcmVudFN0cnVjdHVyZS5oYXNEZWNpZGVyID0gdHJ1ZTtcbiAgICAgIHBhcmVudFN0cnVjdHVyZS5icmFuY2hJZHMgPSBjaGlsZFN0cnVjdHVyZXMubWFwKChjKSA9PiBjLmlkKTtcbiAgICB9XG4gIH1cblxuICAvKiogVXBkYXRlIHN0cnVjdHVyZSB3aGVuIGEgZHluYW1pYyBzdWJmbG93IGlzIHJlZ2lzdGVyZWQgYXQgcnVudGltZS4gKi9cbiAgdXBkYXRlRHluYW1pY1N1YmZsb3coXG4gICAgbW91bnROb2RlSWQ6IHN0cmluZyxcbiAgICBzdWJmbG93SWQ6IHN0cmluZyxcbiAgICBzdWJmbG93TmFtZT86IHN0cmluZyxcbiAgICBzdWJmbG93QnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJ1bnRpbWVQaXBlbGluZVN0cnVjdHVyZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW91bnRTdHJ1Y3R1cmUgPSB0aGlzLnN0cnVjdHVyZU5vZGVNYXAuZ2V0KG1vdW50Tm9kZUlkKTtcbiAgICBpZiAoIW1vdW50U3RydWN0dXJlKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcjogbm9kZSAnJHttb3VudE5vZGVJZH0nIG5vdCBmb3VuZCBpbiBzdHJ1Y3R1cmUgbWFwIOKAlCBzbmFwc2hvdCB2aXN1YWxpemF0aW9uIG1heSBiZSBpbmNvbXBsZXRlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtb3VudFN0cnVjdHVyZS5pc1N1YmZsb3dSb290ID0gdHJ1ZTtcbiAgICBtb3VudFN0cnVjdHVyZS5zdWJmbG93SWQgPSBzdWJmbG93SWQ7XG5cbiAgICBpZiAoc3ViZmxvd05hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW91bnRTdHJ1Y3R1cmUuc3ViZmxvd05hbWUgPSBzdWJmbG93TmFtZTtcbiAgICB9XG5cbiAgICBpZiAoc3ViZmxvd0J1aWxkVGltZVN0cnVjdHVyZSkge1xuICAgICAgLy8gRGVlcC1jb3B5IHRvIHByZXZlbnQgZXh0ZXJuYWwgbXV0YXRpb24gb2YgdGhlIHN0b3JlZCBzdHJ1Y3R1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vdW50U3RydWN0dXJlLnN1YmZsb3dTdHJ1Y3R1cmUgPSBKU09OLnBhcnNlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHN1YmZsb3dCdWlsZFRpbWVTdHJ1Y3R1cmUpLFxuICAgICAgICApIGFzIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgICAgICAgdGhpcy5idWlsZE5vZGVNYXAobW91bnRTdHJ1Y3R1cmUuc3ViZmxvd1N0cnVjdHVyZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTm9uLXNlcmlhbGl6YWJsZSBzdWJmbG93IHN0cnVjdHVyZSDigJQgc2tpcCBzdWJmbG93IHN0cnVjdHVyZSB0cmFja2luZyBncmFjZWZ1bGx5LlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBVcGRhdGUgc3RydWN0dXJlIHdoZW4gYSBkeW5hbWljIG5leHQgY2hhaW4gaXMgZGlzY292ZXJlZCBhdCBydW50aW1lLiAqL1xuICB1cGRhdGVEeW5hbWljTmV4dChjdXJyZW50Tm9kZUlkOiBzdHJpbmcsIGR5bmFtaWNOZXh0OiBTdGFnZU5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVBpcGVsaW5lU3RydWN0dXJlKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50U3RydWN0dXJlID0gdGhpcy5zdHJ1Y3R1cmVOb2RlTWFwLmdldChjdXJyZW50Tm9kZUlkKTtcbiAgICBpZiAoIWN1cnJlbnRTdHJ1Y3R1cmUpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtmb290cHJpbnRdIFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyOiBub2RlICcke2N1cnJlbnROb2RlSWR9JyBub3QgZm91bmQgaW4gc3RydWN0dXJlIG1hcCDigJQgc25hcHNob3QgdmlzdWFsaXphdGlvbiBtYXkgYmUgaW5jb21wbGV0ZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFN0cnVjdHVyZSA9IHRoaXMuc3RhZ2VOb2RlVG9TdHJ1Y3R1cmUoZHluYW1pY05leHQpO1xuICAgIGN1cnJlbnRTdHJ1Y3R1cmUubmV4dCA9IG5leHRTdHJ1Y3R1cmU7XG4gICAgdGhpcy5idWlsZE5vZGVNYXAobmV4dFN0cnVjdHVyZSk7XG4gIH1cblxuICAvKiogVXBkYXRlIHRoZSBpdGVyYXRpb24gY291bnQgZm9yIGEgbm9kZSAobG9vcCBzdXBwb3J0KS4gKi9cbiAgdXBkYXRlSXRlcmF0aW9uQ291bnQobm9kZUlkOiBzdHJpbmcsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVBpcGVsaW5lU3RydWN0dXJlKSByZXR1cm47XG4gICAgY29uc3Qgbm9kZVN0cnVjdHVyZSA9IHRoaXMuc3RydWN0dXJlTm9kZU1hcC5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGVTdHJ1Y3R1cmUpIHJldHVybjtcbiAgICBub2RlU3RydWN0dXJlLml0ZXJhdGlvbkNvdW50ID0gY291bnQ7XG4gIH1cbn1cbiJdfQ==
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVudGltZVN0cnVjdHVyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9SdW50aW1lU3RydWN0dXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUk3Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFlO0lBRWYsd0VBQXdFO0lBQ3hFLG9GQUFvRjtJQUNwRixJQUFJLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3pDLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLGlFQUFpRTtJQUNqRSw2RUFBNkU7SUFDN0Usa0VBQWtFO0lBQ2xFLElBQUksSUFBSSxDQUFDLGlCQUFpQjtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFDLElBQUksSUFBSSxDQUFDLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUN2Qyx1RkFBdUY7SUFDdkYsc0ZBQXNGO0lBQ3RGLHdGQUF3RjtJQUN4RixpRUFBaUU7SUFDakUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFekMsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FB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Q0FBQztRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsOENBQThDLGFBQWEseUVBQXlFLENBQ3JJLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsb0JBQW9CLENBQUMsTUFBYyxFQUFFLEtBQWE7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0I7WUFBRSxPQUFPO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQzNCLGFBQWEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyIOKAlCBNdXRhYmxlIHN0cnVjdHVyZSB0cmFja2luZyBmb3IgdmlzdWFsaXphdGlvbi5cbiAqXG4gKiBEdXJpbmcgZXhlY3V0aW9uLCBkeW5hbWljIGV2ZW50cyAobmV3IGNoaWxkcmVuLCBzdWJmbG93cywgbmV4dCBjaGFpbnMsXG4gKiBsb29wIGl0ZXJhdGlvbnMpIG1vZGlmeSB0aGUgcGlwZWxpbmUuIFRoaXMgbWFuYWdlciBrZWVwcyBhIHNlcmlhbGl6ZWRcbiAqIHN0cnVjdHVyZSBpbiBzeW5jIHNvIGNvbnN1bWVycyBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG4gKlxuICogRGVlcC1jbG9uZXMgYnVpbGQtdGltZSBzdHJ1Y3R1cmUgYXQgaW5pdCwgdGhlbiBtYWludGFpbnMgTygxKSBsb29rdXAgbWFwLlxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uLy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbm9kZSB0eXBlIGZyb20gbm9kZSBwcm9wZXJ0aWVzLlxuICogVXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlciBmb3Igc2VyaWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVOb2RlVHlwZShcbiAgbm9kZTogU3RhZ2VOb2RlLFxuKTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJyB7XG4gIC8vIExvb3AgYmFjay1lZGdlIG5vZGVzIGFyZSBzcGVjIHN0dWJzIOKAlCB0aGV5IGFyZSBub3QgZXhlY3V0YWJsZSBzdGFnZXMuXG4gIC8vIChSdW50aW1lOiBTdGFnZU5vZGUuaXNMb29wUmVmOyBTcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUuaXNMb29wUmVmZXJlbmNlKVxuICBpZiAobm9kZS5pc0xvb3BSZWYpIHJldHVybiAnbG9vcCc7XG4gIGlmIChub2RlLmlzU3ViZmxvd1Jvb3QpIHJldHVybiAnc3ViZmxvdyc7XG4gIC8vIEEgcGFyYWxsZWwtZm9yLWVhY2ggbm9kZSBmYW5zIG91dCBvbmUgYnJhbmNoIHBlciBpdGVtIOKAlCBpdCBJUyBhIGZvcmssIGFuZFxuICAvLyBpdCBzYXlzIHNvIGluIHRoZSBPTkUgbWFwcGluZyB0aGUgY29tcGlsZXIgY2Fubm90IGNoZWNrIGZvciB1cy4gSXQgY2Fycmllc1xuICAvLyBubyBzdGF0aWMgYGNoaWxkcmVuYCwgc28gd2l0aG91dCB0aGlzIGxpbmUgaXQgd291bGQgc2VyaWFsaXplIGFzICdzdGFnZSdcbiAgLy8gYW5kIGV2ZXJ5IGNvbnN1bWVyIHdvdWxkIHJlbmRlciBhIGZhbi1vdXQgYXMgYSBwbGFpbiBzdGVwLiBUaGVcbiAgLy8gXCJvbmUgYnJhbmNoIHBlciBpdGVtXCIgZGV0YWlsIHJpZGVzIHRoZSBgaXNEeW5hbWljUGFyYWxsZWxgIGZsYWcgaW5zdGVhZCBvZlxuICAvLyBhIG5ldyB0eXBlLCBzbyBleGlzdGluZyBgc3dpdGNoICh0eXBlKWAgY29uc3VtZXJzIGtlZXAgd29ya2luZy5cbiAgaWYgKG5vZGUuaXNEeW5hbWljUGFyYWxsZWwpIHJldHVybiAnZm9yayc7XG4gIGlmIChub2RlLnNlbGVjdG9yRm4pIHJldHVybiAnc2VsZWN0b3InO1xuICAvLyBuZXh0Tm9kZVNlbGVjdG9yIGlzIGFuIG91dHB1dC1iYXNlZCByb3V0aW5nIGZ1bmN0aW9uIChub3Qgc2NvcGUtYmFzZWQpLCBncm91cGVkIHdpdGhcbiAgLy8gZGVjaWRlckZuIGFzICdkZWNpZGVyJyByYXRoZXIgdGhhbiAnc2VsZWN0b3InLiBUaGUgdHdvIGJyYW5jaGVzIGRpZmZlciBpbiB3aGF0IHRoZXlcbiAgLy8gcmVhZCAob3V0cHV0IHZzIHNjb3BlKSBidXQgYm90aCByZXByZXNlbnQgYSBjb25kaXRpb25hbCBicmFuY2ggZGVjaXNpb24uIFJldmlzaXQgaW4gYVxuICAvLyBmdXR1cmUgY2xlYW51cCBvbmNlIHRoZSBkaXN0aW5jdGlvbiBpcyB1c2VyLXZpc2libGUgaW4gdGhlIFVJLlxuICBpZiAobm9kZS5uZXh0Tm9kZVNlbGVjdG9yIHx8IG5vZGUuZGVjaWRlckZuKSByZXR1cm4gJ2RlY2lkZXInO1xuICBpZiAobm9kZS5pc1N0cmVhbWluZykgcmV0dXJuICdzdHJlYW1pbmcnO1xuXG4gIGNvbnN0IGhhc0R5bmFtaWNDaGlsZHJlbiA9IEJvb2xlYW4obm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmICFub2RlLm5leHROb2RlU2VsZWN0b3IgJiYgbm9kZS5mbik7XG4gIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhaGFzRHluYW1pY0NoaWxkcmVuKSByZXR1cm4gJ2ZvcmsnO1xuXG4gIHJldHVybiAnc3RhZ2UnO1xufVxuXG5leHBvcnQgY2xhc3MgUnVudGltZVN0cnVjdHVyZU1hbmFnZXIge1xuICBwcml2YXRlIHJ1bnRpbWVQaXBlbGluZVN0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgcHJpdmF0ZSBzdHJ1Y3R1cmVOb2RlTWFwOiBNYXA8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU+ID0gbmV3IE1hcCgpO1xuXG4gIC8qKiBJbml0aWFsaXplIGZyb20gYnVpbGQtdGltZSBzdHJ1Y3R1cmUuIERlZXAtY2xvbmVzIHZpYSBKU09OIHJvdW5kLXRyaXAuICovXG4gIGluaXQoYnVpbGRUaW1lU3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlKTogdm9pZCB7XG4gICAgaWYgKCFidWlsZFRpbWVTdHJ1Y3R1cmUpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgdGhpcy5ydW50aW1lUGlwZWxpbmVTdHJ1Y3R1cmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJ1aWxkVGltZVN0cnVjdHVyZSkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTm9uLXNlcmlhbGl6YWJsZSBidWlsZC10aW1lIHN0cnVjdHVyZSDigJQgc2tpcCBydW50aW1lIHRyYWNraW5nIGdyYWNlZnVsbHkuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYnVpbGROb2RlTWFwKHRoaXMucnVudGltZVBpcGVsaW5lU3RydWN0dXJlISk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgY3VycmVudCBydW50aW1lIHN0cnVjdHVyZSAobXV0YXRlZCBkdXJpbmcgZXhlY3V0aW9uKS4gKi9cbiAgZ2V0U3RydWN0dXJlKCk6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucnVudGltZVBpcGVsaW5lU3RydWN0dXJlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFYX05PREVfTUFQX0RFUFRIID0gNTAwO1xuXG4gIC8qKiBSZWN1cnNpdmVseSByZWdpc3RlcnMgYWxsIG5vZGVzIGluIHRoZSBPKDEpIGxvb2t1cCBtYXAuICovXG4gIHByaXZhdGUgYnVpbGROb2RlTWFwKG5vZGU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSwgZGVwdGggPSAwKTogdm9pZCB7XG4gICAgaWYgKGRlcHRoID4gUnVudGltZVN0cnVjdHVyZU1hbmFnZXIuTUFYX05PREVfTUFQX0RFUFRIKSB7XG4gICAgICAvLyBHdWFyZCBhZ2FpbnN0IHBhdGhvbG9naWNhbGx5IGRlZXAgb3IgY3ljbGljIHN0cnVjdHVyZXMgaW5qZWN0ZWQgaW50byBidWlsZFRpbWVTdHJ1Y3R1cmUuXG4gICAgICAvLyBOb3JtYWwgYnVpbGRlci1wcm9kdWNlZCBjaGFydHMgYXJlIG5hdHVyYWxseSBib3VuZGVkIHdlbGwgYmVsb3cgdGhpcyBsaW1pdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdHJ1Y3R1cmVOb2RlTWFwLnNldChub2RlLmlkLCBub2RlKTtcblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5idWlsZE5vZGVNYXAoY2hpbGQsIGRlcHRoICsgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLm5leHQpIHtcbiAgICAgIHRoaXMuYnVpbGROb2RlTWFwKG5vZGUubmV4dCwgZGVwdGggKyAxKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuc3ViZmxvd1N0cnVjdHVyZSkge1xuICAgICAgdGhpcy5idWlsZE5vZGVNYXAobm9kZS5zdWJmbG93U3RydWN0dXJlLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDb252ZXJ0IGEgcnVudGltZSBTdGFnZU5vZGUgaW50byBhIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSBub2RlLiAqL1xuICBzdGFnZU5vZGVUb1N0cnVjdHVyZShub2RlOiBTdGFnZU5vZGUpOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICAgIGNvbnN0IHN0cnVjdHVyZTogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0ge1xuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICB0eXBlOiBjb21wdXRlTm9kZVR5cGUobm9kZSksXG4gICAgICBkZXNjcmlwdGlvbjogbm9kZS5kZXNjcmlwdGlvbixcbiAgICB9O1xuXG4gICAgaWYgKG5vZGUuaXNTdHJlYW1pbmcpIHtcbiAgICAgIHN0cnVjdHVyZS5pc1N0cmVhbWluZyA9IHRydWU7XG4gICAgICBzdHJ1Y3R1cmUuc3RyZWFtSWQgPSBub2RlLnN0cmVhbUlkO1xuICAgIH1cblxuICAgIC8vIERlY2xhcmVkIHRhZ3MgKDkuMjEuMCk6IHRoZSBNYXAgYWR2ZXJ0aXNlcyB0aGUgdm9jYWJ1bGFyeSwgYW5kIGEgbm9kZVxuICAgIC8vIHJlc29sdmVkIGF0IHJ1biB0aW1lIChhIGxhenkgc3ViZmxvdywgYSBkeW5hbWljLXN1YmZsb3cgcmV0dXJuKSBoYXNcbiAgICAvLyBvbmx5IFRISVMgYnVpbGRlciB0byBhZHZlcnRpc2UgaXQuIEFic2VudCB3aGVuIHRoZSBub2RlIGRlY2xhcmVzIG5vbmUuXG4gICAgaWYgKG5vZGUudGFncz8ubGVuZ3RoKSBzdHJ1Y3R1cmUudGFncyA9IFsuLi5ub2RlLnRhZ3NdO1xuXG4gICAgaWYgKG5vZGUuaXNTdWJmbG93Um9vdCkge1xuICAgICAgc3RydWN0dXJlLmlzU3ViZmxvd1Jvb3QgPSB0cnVlO1xuICAgICAgc3RydWN0dXJlLnN1YmZsb3dJZCA9IG5vZGUuc3ViZmxvd0lkO1xuICAgICAgc3RydWN0dXJlLnN1YmZsb3dOYW1lID0gbm9kZS5zdWJmbG93TmFtZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5kZWNpZGVyRm4pIHtcbiAgICAgIHN0cnVjdHVyZS5oYXNEZWNpZGVyID0gdHJ1ZTtcbiAgICAgIHN0cnVjdHVyZS5icmFuY2hJZHMgPSBub2RlLmNoaWxkcmVuPy5tYXAoKGMpID0+IGMuaWQpO1xuICAgIH1cblxuICAgIGlmIChub2RlLnNlbGVjdG9yRm4gfHwgbm9kZS5uZXh0Tm9kZVNlbGVjdG9yKSB7XG4gICAgICBzdHJ1Y3R1cmUuaGFzU2VsZWN0b3IgPSB0cnVlO1xuICAgICAgc3RydWN0dXJlLmJyYW5jaElkcyA9IG5vZGUuY2hpbGRyZW4/Lm1hcCgoYykgPT4gYy5pZCk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgc3RydWN0dXJlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHRoaXMuc3RhZ2VOb2RlVG9TdHJ1Y3R1cmUoYykpO1xuICAgIH1cblxuICAgIGlmIChub2RlLm5leHQpIHtcbiAgICAgIHN0cnVjdHVyZS5uZXh0ID0gdGhpcy5zdGFnZU5vZGVUb1N0cnVjdHVyZShub2RlLm5leHQpO1xuICAgIH1cblxuICAgIGlmIChub2RlLnN1YmZsb3dEZWY/LmJ1aWxkVGltZVN0cnVjdHVyZSkge1xuICAgICAgc3RydWN0dXJlLnN1YmZsb3dTdHJ1Y3R1cmUgPSBub2RlLnN1YmZsb3dEZWYuYnVpbGRUaW1lU3RydWN0dXJlIGFzIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RydWN0dXJlO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSBzdHJ1Y3R1cmUgd2hlbiBkeW5hbWljIGNoaWxkcmVuIGFyZSBkaXNjb3ZlcmVkIGF0IHJ1bnRpbWUuICovXG4gIHVwZGF0ZUR5bmFtaWNDaGlsZHJlbihcbiAgICBwYXJlbnROb2RlSWQ6IHN0cmluZyxcbiAgICBkeW5hbWljQ2hpbGRyZW46IFN0YWdlTm9kZVtdLFxuICAgIGhhc1NlbGVjdG9yPzogYm9vbGVhbixcbiAgICBoYXNEZWNpZGVyPzogYm9vbGVhbixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJ1bnRpbWVQaXBlbGluZVN0cnVjdHVyZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGFyZW50U3RydWN0dXJlID0gdGhpcy5zdHJ1Y3R1cmVOb2RlTWFwLmdldChwYXJlbnROb2RlSWQpO1xuICAgIGlmICghcGFyZW50U3RydWN0dXJlKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcjogbm9kZSAnJHtwYXJlbnROb2RlSWR9JyBub3QgZm91bmQgaW4gc3RydWN0dXJlIG1hcCDigJQgc25hcHNob3QgdmlzdWFsaXphdGlvbiBtYXkgYmUgaW5jb21wbGV0ZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRTdHJ1Y3R1cmVzID0gZHluYW1pY0NoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuc3RhZ2VOb2RlVG9TdHJ1Y3R1cmUoY2hpbGQpKTtcbiAgICBwYXJlbnRTdHJ1Y3R1cmUuY2hpbGRyZW4gPSBjaGlsZFN0cnVjdHVyZXM7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkU3RydWN0dXJlIG9mIGNoaWxkU3RydWN0dXJlcykge1xuICAgICAgdGhpcy5idWlsZE5vZGVNYXAoY2hpbGRTdHJ1Y3R1cmUpO1xuICAgIH1cblxuICAgIGlmIChoYXNTZWxlY3Rvcikge1xuICAgICAgcGFyZW50U3RydWN0dXJlLmhhc1NlbGVjdG9yID0gdHJ1ZTtcbiAgICAgIHBhcmVudFN0cnVjdHVyZS5icmFuY2hJZHMgPSBjaGlsZFN0cnVjdHVyZXMubWFwKChjKSA9PiBjLmlkKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzRGVjaWRlcikge1xuICAgICAgcGFyZW50U3RydWN0dXJlLmhhc0RlY2lkZXIgPSB0cnVlO1xuICAgICAgcGFyZW50U3RydWN0dXJlLmJyYW5jaElkcyA9IGNoaWxkU3RydWN0dXJlcy5tYXAoKGMpID0+IGMuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBVcGRhdGUgc3RydWN0dXJlIHdoZW4gYSBkeW5hbWljIHN1YmZsb3cgaXMgcmVnaXN0ZXJlZCBhdCBydW50aW1lLiAqL1xuICB1cGRhdGVEeW5hbWljU3ViZmxvdyhcbiAgICBtb3VudE5vZGVJZDogc3RyaW5nLFxuICAgIHN1YmZsb3dJZDogc3RyaW5nLFxuICAgIHN1YmZsb3dOYW1lPzogc3RyaW5nLFxuICAgIHN1YmZsb3dCdWlsZFRpbWVTdHJ1Y3R1cmU/OiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVBpcGVsaW5lU3RydWN0dXJlKSByZXR1cm47XG5cbiAgICBjb25zdCBtb3VudFN0cnVjdHVyZSA9IHRoaXMuc3RydWN0dXJlTm9kZU1hcC5nZXQobW91bnROb2RlSWQpO1xuICAgIGlmICghbW91bnRTdHJ1Y3R1cmUpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtmb290cHJpbnRdIFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyOiBub2RlICcke21vdW50Tm9kZUlkfScgbm90IGZvdW5kIGluIHN0cnVjdHVyZSBtYXAg4oCUIHNuYXBzaG90IHZpc3VhbGl6YXRpb24gbWF5IGJlIGluY29tcGxldGVgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vdW50U3RydWN0dXJlLmlzU3ViZmxvd1Jvb3QgPSB0cnVlO1xuICAgIG1vdW50U3RydWN0dXJlLnN1YmZsb3dJZCA9IHN1YmZsb3dJZDtcblxuICAgIGlmIChzdWJmbG93TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtb3VudFN0cnVjdHVyZS5zdWJmbG93TmFtZSA9IHN1YmZsb3dOYW1lO1xuICAgIH1cblxuICAgIGlmIChzdWJmbG93QnVpbGRUaW1lU3RydWN0dXJlKSB7XG4gICAgICAvLyBEZWVwLWNvcHkgdG8gcHJldmVudCBleHRlcm5hbCBtdXRhdGlvbiBvZiB0aGUgc3RvcmVkIHN0cnVjdHVyZVxuICAgICAgdHJ5IHtcbiAgICAgICAgbW91bnRTdHJ1Y3R1cmUuc3ViZmxvd1N0cnVjdHVyZSA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc3ViZmxvd0J1aWxkVGltZVN0cnVjdHVyZSksXG4gICAgICAgICkgYXMgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICAgICAgICB0aGlzLmJ1aWxkTm9kZU1hcChtb3VudFN0cnVjdHVyZS5zdWJmbG93U3RydWN0dXJlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb24tc2VyaWFsaXphYmxlIHN1YmZsb3cgc3RydWN0dXJlIOKAlCBza2lwIHN1YmZsb3cgc3RydWN0dXJlIHRyYWNraW5nIGdyYWNlZnVsbHkuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFVwZGF0ZSBzdHJ1Y3R1cmUgd2hlbiBhIGR5bmFtaWMgbmV4dCBjaGFpbiBpcyBkaXNjb3ZlcmVkIGF0IHJ1bnRpbWUuICovXG4gIHVwZGF0ZUR5bmFtaWNOZXh0KGN1cnJlbnROb2RlSWQ6IHN0cmluZywgZHluYW1pY05leHQ6IFN0YWdlTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ydW50aW1lUGlwZWxpbmVTdHJ1Y3R1cmUpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRTdHJ1Y3R1cmUgPSB0aGlzLnN0cnVjdHVyZU5vZGVNYXAuZ2V0KGN1cnJlbnROb2RlSWQpO1xuICAgIGlmICghY3VycmVudFN0cnVjdHVyZSkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludF0gUnVudGltZVN0cnVjdHVyZU1hbmFnZXI6IG5vZGUgJyR7Y3VycmVudE5vZGVJZH0nIG5vdCBmb3VuZCBpbiBzdHJ1Y3R1cmUgbWFwIOKAlCBzbmFwc2hvdCB2aXN1YWxpemF0aW9uIG1heSBiZSBpbmNvbXBsZXRlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0U3RydWN0dXJlID0gdGhpcy5zdGFnZU5vZGVUb1N0cnVjdHVyZShkeW5hbWljTmV4dCk7XG4gICAgY3VycmVudFN0cnVjdHVyZS5uZXh0ID0gbmV4dFN0cnVjdHVyZTtcbiAgICB0aGlzLmJ1aWxkTm9kZU1hcChuZXh0U3RydWN0dXJlKTtcbiAgfVxuXG4gIC8qKiBVcGRhdGUgdGhlIGl0ZXJhdGlvbiBjb3VudCBmb3IgYSBub2RlIChsb29wIHN1cHBvcnQpLiAqL1xuICB1cGRhdGVJdGVyYXRpb25Db3VudChub2RlSWQ6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5ydW50aW1lUGlwZWxpbmVTdHJ1Y3R1cmUpIHJldHVybjtcbiAgICBjb25zdCBub2RlU3RydWN0dXJlID0gdGhpcy5zdHJ1Y3R1cmVOb2RlTWFwLmdldChub2RlSWQpO1xuICAgIGlmICghbm9kZVN0cnVjdHVyZSkgcmV0dXJuO1xuICAgIG5vZGVTdHJ1Y3R1cmUuaXRlcmF0aW9uQ291bnQgPSBjb3VudDtcbiAgfVxufVxuIl19
|
|
@@ -155,7 +155,7 @@ export declare class CombinedNarrativeRecorder implements CombinedRecorder {
|
|
|
155
155
|
description: string;
|
|
156
156
|
preferredOperation: "translate";
|
|
157
157
|
data: {
|
|
158
|
-
type: "subflow" | "loop" | "
|
|
158
|
+
type: "subflow" | "loop" | "stage" | "error" | "pause" | "fork" | "selector" | "step" | "condition" | "break" | "resume" | "emit" | "retry";
|
|
159
159
|
text: string;
|
|
160
160
|
depth: number;
|
|
161
161
|
stageName?: string | undefined;
|