@workflow/core 5.0.0-beta.43 → 5.0.0-beta.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities.d.ts +4 -4
- package/dist/capabilities.js +5 -5
- package/dist/capture-stack.d.ts +1 -1
- package/dist/capture-stack.js +2 -2
- package/dist/class-serialization.d.ts +8 -8
- package/dist/class-serialization.js +9 -9
- package/dist/classify-error.js +5 -5
- package/dist/context-violation-error.d.ts +5 -5
- package/dist/context-violation-error.d.ts.map +1 -1
- package/dist/context-violation-error.js +5 -5
- package/dist/create-hook.d.ts +2 -2
- package/dist/create-hook.js +1 -1
- package/dist/define-hook.js +2 -2
- package/dist/describe-error.d.ts +7 -7
- package/dist/describe-error.js +8 -8
- package/dist/encryption.d.ts +5 -5
- package/dist/encryption.js +7 -7
- package/dist/events-consumer.d.ts +19 -7
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +33 -12
- package/dist/flushable-stream.d.ts +4 -4
- package/dist/flushable-stream.js +12 -12
- package/dist/global.d.ts +1 -1
- package/dist/global.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/log-format.d.ts +2 -2
- package/dist/log-format.js +5 -5
- package/dist/logger.js +4 -4
- package/dist/private.d.ts +21 -65
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +160 -38
- package/dist/replay-payload-cache.d.ts +1 -1
- package/dist/replay-payload-cache.js +4 -4
- package/dist/runtime/compute-instance.d.ts +4 -3
- package/dist/runtime/compute-instance.d.ts.map +1 -1
- package/dist/runtime/compute-instance.js +5 -4
- package/dist/runtime/constants.d.ts +24 -24
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +49 -43
- package/dist/runtime/count-step-started-events.d.ts +7 -7
- package/dist/runtime/count-step-started-events.js +4 -4
- package/dist/runtime/deployment-guard.d.ts +7 -7
- package/dist/runtime/deployment-guard.js +8 -8
- package/dist/runtime/get-port-lazy.d.ts +2 -2
- package/dist/runtime/get-port-lazy.d.ts.map +1 -1
- package/dist/runtime/get-port-lazy.js +37 -30
- package/dist/runtime/get-world-lazy.d.ts +2 -2
- package/dist/runtime/get-world-lazy.js +3 -3
- package/dist/runtime/helpers.d.ts +18 -18
- package/dist/runtime/helpers.js +27 -27
- package/dist/runtime/quickjs-entrypoint.d.ts +21 -10
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
- package/dist/runtime/quickjs-entrypoint.js +199 -81
- package/dist/runtime/quickjs-runtime.d.ts +31 -15
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
- package/dist/runtime/quickjs-runtime.js +126 -77
- package/dist/runtime/quickjs-serde.d.ts +10 -10
- package/dist/runtime/quickjs-serde.js +20 -20
- package/dist/runtime/replay-budget.d.ts +4 -4
- package/dist/runtime/replay-budget.js +5 -5
- package/dist/runtime/replay-recovery-reporter.d.ts +1 -1
- package/dist/runtime/replay-recovery-reporter.js +2 -2
- package/dist/runtime/resume-hook.d.ts +2 -2
- package/dist/runtime/resume-hook.js +27 -27
- package/dist/runtime/resume-latency.d.ts +25 -25
- package/dist/runtime/resume-latency.d.ts.map +1 -1
- package/dist/runtime/resume-latency.js +4 -4
- package/dist/runtime/run-id-time.d.ts +2 -2
- package/dist/runtime/run-id-time.js +5 -5
- package/dist/runtime/run.d.ts +21 -4
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +104 -10
- package/dist/runtime/runs.d.ts +4 -4
- package/dist/runtime/runs.js +2 -2
- package/dist/runtime/start.d.ts +3 -3
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +27 -23
- package/dist/runtime/step-executor.d.ts +14 -14
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +54 -39
- package/dist/runtime/step-latency.d.ts +14 -14
- package/dist/runtime/step-latency.js +11 -11
- package/dist/runtime/step-ownership.d.ts +6 -6
- package/dist/runtime/step-ownership.js +8 -8
- package/dist/runtime/step-single-flight.d.ts +1 -1
- package/dist/runtime/step-single-flight.d.ts.map +1 -1
- package/dist/runtime/step-single-flight.js +17 -11
- package/dist/runtime/suspension-handler.d.ts +29 -17
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +206 -71
- package/dist/runtime/unserializable-step.d.ts +34 -0
- package/dist/runtime/unserializable-step.d.ts.map +1 -0
- package/dist/runtime/unserializable-step.js +52 -0
- package/dist/runtime/vm-mode.d.ts +1 -1
- package/dist/runtime/vm-mode.js +2 -2
- package/dist/runtime/wait-continuation.d.ts +31 -9
- package/dist/runtime/wait-continuation.d.ts.map +1 -1
- package/dist/runtime/wait-continuation.js +44 -13
- package/dist/runtime/wait-until.d.ts +1 -1
- package/dist/runtime/wait-until.js +2 -2
- package/dist/runtime/world-compatibility.d.ts +20 -9
- package/dist/runtime/world-compatibility.d.ts.map +1 -1
- package/dist/runtime/world-compatibility.js +24 -13
- package/dist/runtime/world-init.d.ts +5 -5
- package/dist/runtime/world-init.js +6 -6
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +13 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +300 -206
- package/dist/sealed-box.d.ts +7 -7
- package/dist/sealed-box.js +15 -15
- package/dist/serialization/client.js +2 -2
- package/dist/serialization/codec-devalue-vm.d.ts +1 -1
- package/dist/serialization/codec-devalue-vm.js +4 -4
- package/dist/serialization/codec-devalue.d.ts +1 -1
- package/dist/serialization/codec-devalue.js +2 -2
- package/dist/serialization/codec.d.ts +4 -4
- package/dist/serialization/codec.js +2 -2
- package/dist/serialization/compression.d.ts +12 -11
- package/dist/serialization/compression.d.ts.map +1 -1
- package/dist/serialization/compression.js +16 -15
- package/dist/serialization/encryption.d.ts +7 -7
- package/dist/serialization/encryption.d.ts.map +1 -1
- package/dist/serialization/encryption.js +8 -8
- package/dist/serialization/errors.js +2 -2
- package/dist/serialization/format.d.ts +6 -6
- package/dist/serialization/format.js +7 -7
- package/dist/serialization/hardened.d.ts +18 -18
- package/dist/serialization/hardened.d.ts.map +1 -1
- package/dist/serialization/hardened.js +41 -32
- package/dist/serialization/index.d.ts +1 -1
- package/dist/serialization/index.js +2 -2
- package/dist/serialization/reducers/class-vm.d.ts +1 -1
- package/dist/serialization/reducers/class-vm.js +2 -2
- package/dist/serialization/reducers/class.js +2 -2
- package/dist/serialization/reducers/common-vm.js +12 -12
- package/dist/serialization/reducers/common.js +12 -12
- package/dist/serialization/reducers/step-function-vm.d.ts +1 -1
- package/dist/serialization/reducers/step-function-vm.js +2 -2
- package/dist/serialization/reducers/step-function.js +2 -2
- package/dist/serialization/step.js +2 -2
- package/dist/serialization/types.d.ts +5 -5
- package/dist/serialization/types.js +2 -2
- package/dist/serialization/workflow-vm.d.ts +1 -1
- package/dist/serialization/workflow-vm.d.ts.map +1 -1
- package/dist/serialization/workflow-vm.js +13 -10
- package/dist/serialization-format.d.ts +11 -11
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +29 -23
- package/dist/serialization.d.ts +10 -10
- package/dist/serialization.js +98 -98
- package/dist/set-attributes.js +2 -2
- package/dist/source-map.d.ts +1 -1
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +18 -12
- package/dist/step/context-storage.d.ts +5 -5
- package/dist/step/context-storage.js +1 -1
- package/dist/step/writable-stream.d.ts +3 -3
- package/dist/step/writable-stream.js +7 -7
- package/dist/step.js +12 -12
- package/dist/symbols.d.ts +2 -2
- package/dist/symbols.js +3 -3
- package/dist/telemetry/semantic-conventions.d.ts +21 -13
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +21 -15
- package/dist/telemetry.d.ts +3 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +19 -10
- package/dist/test-support/orchestrator-context.d.ts.map +1 -1
- package/dist/test-support/orchestrator-context.js +12 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.js +4 -4
- package/dist/vm/script-cache.d.ts.map +1 -1
- package/dist/vm/script-cache.js +23 -17
- package/dist/vm/uint8array-base64.js +1 -1
- package/dist/workflow/abort-controller.d.ts +1 -1
- package/dist/workflow/abort-controller.js +12 -12
- package/dist/workflow/create-hook.js +2 -2
- package/dist/workflow/get-workflow-metadata.js +2 -2
- package/dist/workflow/hook.js +16 -16
- package/dist/workflow/set-attributes.d.ts +1 -1
- package/dist/workflow/set-attributes.js +2 -2
- package/dist/workflow/sleep.js +2 -2
- package/dist/workflow/world-init-stub.d.ts +1 -1
- package/dist/workflow/world-init-stub.js +2 -2
- package/dist/workflow.d.ts +2 -2
- package/dist/workflow.js +21 -7
- package/docs/api-reference/create-hook.mdx +15 -15
- package/docs/api-reference/create-webhook.mdx +15 -15
- package/docs/api-reference/define-hook.mdx +10 -10
- package/docs/api-reference/fatal-error.mdx +2 -2
- package/docs/api-reference/fetch.mdx +7 -7
- package/docs/api-reference/get-step-metadata.mdx +2 -2
- package/docs/api-reference/get-workflow-metadata.mdx +3 -3
- package/docs/api-reference/get-writable.mdx +7 -7
- package/docs/api-reference/index.mdx +1 -1
- package/docs/api-reference/retryable-error.mdx +1 -1
- package/docs/api-reference/set-attributes.mdx +2 -2
- package/docs/api-reference/sleep.mdx +3 -3
- package/docs/foundations/cancellation.mdx +31 -31
- package/docs/foundations/errors-and-retries.mdx +42 -11
- package/docs/foundations/hooks.mdx +35 -35
- package/docs/foundations/idempotency.mdx +9 -9
- package/docs/foundations/serialization.mdx +21 -22
- package/docs/foundations/starting-workflows.mdx +36 -37
- package/docs/foundations/streaming.mdx +46 -41
- package/docs/foundations/versioning.mdx +3 -3
- package/docs/foundations/workflows-and-steps.mdx +9 -9
- package/docs/how-it-works/cancellation.mdx +62 -62
- package/docs/how-it-works/code-transform.mdx +66 -54
- package/docs/how-it-works/encryption.mdx +25 -21
- package/docs/how-it-works/event-sourcing.mdx +53 -35
- package/docs/how-it-works/framework-integrations.mdx +12 -12
- package/docs/how-it-works/understanding-directives.mdx +21 -21
- package/package.json +7 -7
|
@@ -15,7 +15,7 @@ import { getWorkflowMetadata } from './get-workflow-metadata.js';
|
|
|
15
15
|
// executes inside the VM, so `Run` here is the plugin-compiled variant
|
|
16
16
|
// whose methods are durable step proxies. No environment guard is
|
|
17
17
|
// needed: the registry is keyed per-global, so a stray host-side import
|
|
18
|
-
// of this module registers the host's `Run` on the host's registry
|
|
18
|
+
// of this module registers the host's `Run` on the host's registry,
|
|
19
19
|
// which is the correct class for that context.
|
|
20
20
|
//
|
|
21
21
|
// The value import of `Run` also guarantees `runtime/run.js` is included
|
|
@@ -44,4 +44,4 @@ export function createWebhook(options) {
|
|
|
44
44
|
hook.url = createWorkflowUrl(url, { type: 'webhook', token: hook.token });
|
|
45
45
|
return hook;
|
|
46
46
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixZQUFZLEdBQ2IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVFqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLHNFQUFzRTtBQUN0RSwwRUFBMEU7QUFDMUUsb0VBQW9FO0FBQ3BFLG1FQUFtRTtBQUNuRSxxRUFBcUU7QUFDckUsZ0NBQWdDO0FBQ2hDLEVBQUU7QUFDRix3RUFBd0U7QUFDeEUsdUVBQXVFO0FBQ3ZFLGtFQUFrRTtBQUNsRSx3RUFBd0U7QUFDeEUsb0VBQW9FO0FBQ3BFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YseUVBQXlFO0FBQ3pFLHVFQUF1RTtBQUN2RSwrQkFBK0I7QUFDL0IsdUJBQXVCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRTNDLE1BQU0sVUFBVSxVQUFVLENBQVUsT0FBcUI7SUFDdkQsK0ZBQStGO0lBQy9GLE1BQU0sWUFBWSxHQUFJLFVBQWtCLENBQ3RDLG9CQUFvQixDQUNHLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLHlCQUF5QixDQUN2QixjQUFjLEVBQ2Qsa0VBQWtFLEVBQ2xFLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFNRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixPQUF3QjtJQUV4QixNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FFckQsQ0FBQztJQUVGLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMktBQTJLLENBQzVLLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxRQUF5RCxDQUFDO0lBQzlELElBQUksT0FBTyxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDdkMsUUFBUSxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBRTlCLENBQUM7SUFFakMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUUxRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVXb3JrZmxvd1VybCB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQge1xuICBhbGlhc1NlcmlhbGl6YXRpb25DbGFzcyxcbiAgUlVOX0NMQVNTX0lELFxufSBmcm9tICcuLi9jbGFzcy1zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LWVycm9ycy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEhvb2ssXG4gIEhvb2tPcHRpb25zLFxuICBSZXF1ZXN0V2l0aFJlc3BvbnNlLFxuICBXZWJob29rLFxuICBXZWJob29rT3B0aW9ucyxcbn0gZnJvbSAnLi4vY3JlYXRlLWhvb2suanMnO1xuaW1wb3J0IHsgUnVuIH0gZnJvbSAnLi4vcnVudGltZS9ydW4uanMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfQ1JFQVRFX0hPT0sgfSBmcm9tICcuLi9zeW1ib2xzLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuL2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5cbi8vIEFsaWFzIHRoaXMgYnVuZGxlJ3MgYFJ1bmAgY2xhc3MgaW4gdGhlIHNlcmlhbGl6YXRpb24gY2xhc3MgcmVnaXN0cnlcbi8vIHVuZGVyIHRoZSBzdGFibGUgaWQsIHNvIHRoZSBob3N0LXNpZGUgaG9vayBldmVudCBjb25zdW1lciBjYW4gY29uc3RydWN0XG4vLyB0aGUgY29uZmxpY3RpbmcgcnVuIHJlc29sdmVkIGJ5IGBob29rLmdldENvbmZsaWN0KClgIHZpYSB0aGUgc2FtZVxuLy8gcmVnaXN0cnkgdGhhdCByZXZpdmVzIHNlcmlhbGl6ZWQgYFJ1bmAgaW5zdGFuY2VzICh0aGUgU1dDIHBsdWdpblxuLy8gYWxyZWFkeSBhdXRvLXJlZ2lzdGVycyBgUnVuYCBoZXJlLCBidXQgdW5kZXIgYSBwYXRoLWRlcml2ZWQgaWQgdGhlXG4vLyBob3N0IGNhbm5vdCBrbm93IHN0YXRpY2FsbHkpLlxuLy9cbi8vIEluIHdvcmtmbG93IG1vZGUgdGhpcyBtb2R1bGUgaXMgY29tcGlsZWQgaW50byB0aGUgd29ya2Zsb3cgYnVuZGxlIGFuZFxuLy8gZXhlY3V0ZXMgaW5zaWRlIHRoZSBWTSwgc28gYFJ1bmAgaGVyZSBpcyB0aGUgcGx1Z2luLWNvbXBpbGVkIHZhcmlhbnRcbi8vIHdob3NlIG1ldGhvZHMgYXJlIGR1cmFibGUgc3RlcCBwcm94aWVzLiBObyBlbnZpcm9ubWVudCBndWFyZCBpc1xuLy8gbmVlZGVkOiB0aGUgcmVnaXN0cnkgaXMga2V5ZWQgcGVyLWdsb2JhbCwgc28gYSBzdHJheSBob3N0LXNpZGUgaW1wb3J0XG4vLyBvZiB0aGlzIG1vZHVsZSByZWdpc3RlcnMgdGhlIGhvc3QncyBgUnVuYCBvbiB0aGUgaG9zdCdzIHJlZ2lzdHJ5LFxuLy8gd2hpY2ggaXMgdGhlIGNvcnJlY3QgY2xhc3MgZm9yIHRoYXQgY29udGV4dC5cbi8vXG4vLyBUaGUgdmFsdWUgaW1wb3J0IG9mIGBSdW5gIGFsc28gZ3VhcmFudGVlcyBgcnVudGltZS9ydW4uanNgIGlzIGluY2x1ZGVkXG4vLyBpbiBhbnkgYnVuZGxlIHRoYXQgdXNlcyBob29rcywgc28gdGhlIHJlZ2lzdHJ5IGVudHJ5IGV4aXN0cyB3aGVuZXZlclxuLy8gYGdldENvbmZsaWN0KClgIGNhbiByZXNvbHZlLlxuYWxpYXNTZXJpYWxpemF0aW9uQ2xhc3MoUlVOX0NMQVNTX0lELCBSdW4pO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9vazxUID0gYW55PihvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFQ+IHtcbiAgLy8gSW5zaWRlIHRoZSB3b3JrZmxvdyBWTSwgdGhlIGhvb2sgZnVuY3Rpb24gaXMgc3RvcmVkIGluIHRoZSBnbG9iYWxUaGlzIG9iamVjdCBiZWhpbmQgYSBzeW1ib2xcbiAgY29uc3QgY3JlYXRlSG9va0ZuID0gKGdsb2JhbFRoaXMgYXMgYW55KVtcbiAgICBXT1JLRkxPV19DUkVBVEVfSE9PS1xuICBdIGFzIHR5cGVvZiBjcmVhdGVIb29rPFQ+O1xuICBpZiAoIWNyZWF0ZUhvb2tGbikge1xuICAgIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQoXG4gICAgICAnY3JlYXRlSG9vaygpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2NyZWF0ZS1ob29rJyxcbiAgICAgIGNyZWF0ZUhvb2tcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVIb29rRm4ob3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJob29rKFxuICBvcHRpb25zOiBXZWJob29rT3B0aW9ucyAmIHsgcmVzcG9uZFdpdGg6ICdtYW51YWwnIH1cbik6IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT47XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9vayhvcHRpb25zPzogV2ViaG9va09wdGlvbnMpOiBXZWJob29rPFJlcXVlc3Q+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2soXG4gIG9wdGlvbnM/OiBXZWJob29rT3B0aW9uc1xuKTogV2ViaG9vazxSZXF1ZXN0PiB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT4ge1xuICBjb25zdCB7IHJlc3BvbmRXaXRoLCB0b2tlbiwgLi4ucmVzdCB9ID0gKG9wdGlvbnMgPz8ge30pIGFzIFdlYmhvb2tPcHRpb25zICYge1xuICAgIHRva2VuPzogc3RyaW5nO1xuICB9O1xuXG4gIGlmICh0b2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2BjcmVhdGVXZWJob29rKClgIGRvZXMgbm90IGFjY2VwdCBhIGB0b2tlbmAgb3B0aW9uLiBXZWJob29rIHRva2VucyBhcmUgYWx3YXlzIGdlbmVyYXRlZCBmb3IgeW91LiBVc2UgYGNyZWF0ZUhvb2soKWAgd2l0aCBgcmVzdW1lSG9vaygpYCBmb3IgZGV0ZXJtaW5pc3RpYyB0b2tlbiBwYXR0ZXJucy4nXG4gICAgKTtcbiAgfVxuXG4gIGxldCBtZXRhZGF0YTogUGljazxXZWJob29rT3B0aW9ucywgJ3Jlc3BvbmRXaXRoJz4gfCB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgcmVzcG9uZFdpdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWV0YWRhdGEgPSB7IHJlc3BvbmRXaXRoIH07XG4gIH1cblxuICBjb25zdCBob29rID0gY3JlYXRlSG9vayh7IC4uLnJlc3QsIG1ldGFkYXRhLCBpc1dlYmhvb2s6IHRydWUgfSkgYXNcbiAgICB8IFdlYmhvb2s8UmVxdWVzdD5cbiAgICB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT47XG5cbiAgY29uc3QgeyB1cmwgfSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgaG9vay51cmwgPSBjcmVhdGVXb3JrZmxvd1VybCh1cmwsIHsgdHlwZTogJ3dlYmhvb2snLCB0b2tlbjogaG9vay50b2tlbiB9KTtcblxuICByZXR1cm4gaG9vaztcbn1cbiJdfQ==
|
|
@@ -7,7 +7,7 @@ export function getWorkflowMetadata() {
|
|
|
7
7
|
// behind a symbol.
|
|
8
8
|
const ctx = globalThis[WORKFLOW_CONTEXT_SYMBOL];
|
|
9
9
|
if (!ctx) {
|
|
10
|
-
// Use the shared `NotInWorkflowOrStepContextError
|
|
10
|
+
// Use the shared `NotInWorkflowOrStepContextError`: it lives in
|
|
11
11
|
// `context-violation-error.ts` specifically so this file can throw it
|
|
12
12
|
// without creating a module-init cycle (the full `context-errors.ts`
|
|
13
13
|
// depends on this file's `WORKFLOW_CONTEXT_SYMBOL`).
|
|
@@ -19,4 +19,4 @@ export function getWorkflowMetadata() {
|
|
|
19
19
|
}
|
|
20
20
|
return ctx;
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQW9DaEYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCO0FBQ2xDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFakQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyx5RUFBeUU7SUFDekUsbUJBQW1CO0lBQ25CLE1BQU0sR0FBRyxHQUFJLFVBQWtCLENBQUMsdUJBQXVCLENBQXFCLENBQUM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsZ0VBQWdFO1FBQ2hFLHNFQUFzRTtRQUN0RSxxRUFBcUU7UUFDckUscURBQXFEO1FBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksK0JBQStCLENBQzdDLHVCQUF1QixFQUN2Qiw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNGLGtFQUFrRTtRQUNsRSx1RUFBdUU7UUFDdkUscUJBQXFCLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDaEQsTUFBTSxHQUFHLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVkaXJlY3RTdGFja1RvQ2FsbGVyIH0gZnJvbSAnLi4vY2FwdHVyZS1zdGFjay5qcyc7XG5pbXBvcnQgeyBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIH0gZnJvbSAnLi4vY29udGV4dC12aW9sYXRpb24tZXJyb3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93TWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgd29ya2Zsb3dSdW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIHN0YXJ0ZWQuXG4gICAqL1xuICB3b3JrZmxvd1N0YXJ0ZWRBdDogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIFVSTCB3aGVyZSB0aGUgd29ya2Zsb3cgY2FuIGJlIHRyaWdnZXJlZC5cbiAgICovXG4gIHVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGZWF0dXJlIGZsYWdzIGluZGljYXRpbmcgd2hpY2ggY2FwYWJpbGl0aWVzIGFyZSBhY3RpdmUgZm9yIHRoaXMgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZmVhdHVyZXM6IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuY3J5cHRpb24gaXMgZW5hYmxlZCBmb3IgdGhpcyB3b3JrZmxvdyBydW4uXG4gICAgICogV2hlbiBgdHJ1ZWAsIHN0ZXAgaW5wdXRzLCBvdXRwdXRzLCBhbmQgb3RoZXIgc2VyaWFsaXplZCBkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCBhdCByZXN0LlxuICAgICAqL1xuICAgIGVuY3J5cHRpb246IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19DT05URVhUX1NZTUJPTCA9XG4gIC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCdXT1JLRkxPV19DT05URVhUJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd01ldGFkYXRhKCk6IFdvcmtmbG93TWV0YWRhdGEge1xuICAvLyBJbnNpZGUgdGhlIHdvcmtmbG93IFZNLCB0aGUgY29udGV4dCBpcyBzdG9yZWQgaW4gdGhlIGdsb2JhbFRoaXMgb2JqZWN0XG4gIC8vIGJlaGluZCBhIHN5bWJvbC5cbiAgY29uc3QgY3R4ID0gKGdsb2JhbFRoaXMgYXMgYW55KVtXT1JLRkxPV19DT05URVhUX1NZTUJPTF0gYXMgV29ya2Zsb3dNZXRhZGF0YTtcbiAgaWYgKCFjdHgpIHtcbiAgICAvLyBVc2UgdGhlIHNoYXJlZCBgTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcmA6IGl0IGxpdmVzIGluXG4gICAgLy8gYGNvbnRleHQtdmlvbGF0aW9uLWVycm9yLnRzYCBzcGVjaWZpY2FsbHkgc28gdGhpcyBmaWxlIGNhbiB0aHJvdyBpdFxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgYSBtb2R1bGUtaW5pdCBjeWNsZSAodGhlIGZ1bGwgYGNvbnRleHQtZXJyb3JzLnRzYFxuICAgIC8vIGRlcGVuZHMgb24gdGhpcyBmaWxlJ3MgYFdPUktGTE9XX0NPTlRFWFRfU1lNQk9MYCkuXG4gICAgY29uc3QgZXJyID0gbmV3IE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3IoXG4gICAgICAnZ2V0V29ya2Zsb3dNZXRhZGF0YSgpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YSdcbiAgICApO1xuICAgIC8vIFJlZGlyZWN0IHRoZSBzdGFjayB0byB0aGUgY2FsbGVyIHNvIHRlcm1pbmFsIG92ZXJsYXlzIChOZXh0LmpzLFxuICAgIC8vIFR1cmJvcGFjaywgVlMgQ29kZSkgcG9pbnQgYXQgdGhlIHVzZXIncyBjb2RlIHJhdGhlciB0aGFuIHRoaXMgZnJhbWUuXG4gICAgcmVkaXJlY3RTdGFja1RvQ2FsbGVyKGVyciwgZ2V0V29ya2Zsb3dNZXRhZGF0YSk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG4iXX0=
|
package/dist/workflow/hook.js
CHANGED
|
@@ -12,11 +12,11 @@ import { hydrateStepReturnValue } from '../serialization.js';
|
|
|
12
12
|
* token, for resolution through `hook.getConflict()`.
|
|
13
13
|
*
|
|
14
14
|
* The instance is created through the serialization class registry on
|
|
15
|
-
* the VM's globalThis
|
|
15
|
+
* the VM's globalThis, the same channel that revives serialized `Run`
|
|
16
16
|
* instances (e.g. `start()` return values crossing from a step into the
|
|
17
17
|
* workflow). The registered class is the VM bundle's plugin-compiled
|
|
18
|
-
* `Run`, whose methods are durable step proxies
|
|
19
|
-
* workflow code
|
|
18
|
+
* `Run`, whose methods are durable step proxies (safe to call from
|
|
19
|
+
* workflow code), and construction goes through its
|
|
20
20
|
* `WORKFLOW_DESERIALIZE` hook, exactly as the `Instance` reviver would.
|
|
21
21
|
*
|
|
22
22
|
* Returns `null` when a real `Run` cannot be constructed: the conflict
|
|
@@ -44,7 +44,7 @@ export function createCreateHook(ctx) {
|
|
|
44
44
|
// (or `undefined`/`null`) to get a generated one, or be an
|
|
45
45
|
// explicit non-empty string. An empty string is almost always an
|
|
46
46
|
// accidental value (e.g. an unset variable) and would otherwise slip
|
|
47
|
-
// through the `??` below
|
|
47
|
+
// through the `??` below (which only falls back for nullish values) and
|
|
48
48
|
// be used as a meaningless, non-deterministic token.
|
|
49
49
|
if (options.token === '') {
|
|
50
50
|
throw new Error('`createHook()` was called with an empty string token. Pass a non-empty token, or omit the `token` option to use a generated one.');
|
|
@@ -99,7 +99,7 @@ export function createCreateHook(ctx) {
|
|
|
99
99
|
// Lazy-resume dedup: `resumeHook()` mints a `resumeId` per resume
|
|
100
100
|
// attempt and stamps it on the `hook_received` event. When the direct
|
|
101
101
|
// event write fails transiently, the runtime materializes the event from
|
|
102
|
-
// the queue payload instead
|
|
102
|
+
// the queue payload instead, and because `hook_received` has no
|
|
103
103
|
// storage-level uniqueness constraint, concurrent redelivery of the same
|
|
104
104
|
// queue message can commit that materialization twice. Two rows for ONE
|
|
105
105
|
// resume attempt then share a `resumeId` (distinct resume attempts never
|
|
@@ -107,7 +107,7 @@ export function createCreateHook(ctx) {
|
|
|
107
107
|
// pure function of the persisted event log, keeping replay deterministic.
|
|
108
108
|
//
|
|
109
109
|
// Scope: this is defense-in-depth over the persisted log, not a
|
|
110
|
-
// cross-invocation exactly-once guarantee
|
|
110
|
+
// cross-invocation exactly-once guarantee: an invocation replaying a
|
|
111
111
|
// snapshot taken before the duplicate row committed only sees one row,
|
|
112
112
|
// so two CONCURRENT invocations can each deliver from their own
|
|
113
113
|
// snapshot. Every replay from a log containing both rows (i.e. all
|
|
@@ -203,7 +203,7 @@ export function createCreateHook(ctx) {
|
|
|
203
203
|
}
|
|
204
204
|
if (event.eventType === 'hook_received') {
|
|
205
205
|
// Drop duplicate deliveries of the same resume attempt (same
|
|
206
|
-
// `resumeId
|
|
206
|
+
// `resumeId`; see `seenResumeIds` above). Events without a
|
|
207
207
|
// `resumeId` (older SDKs, legacy spec versions) are never deduped.
|
|
208
208
|
//
|
|
209
209
|
// Dedup off the top-level `resumeId` the backend hoists onto the event
|
|
@@ -222,7 +222,7 @@ export function createCreateHook(ctx) {
|
|
|
222
222
|
// Register a 'hook' delivery barrier at this event's log index so a
|
|
223
223
|
// later-in-log `wait_completed` or step result is delivered only after
|
|
224
224
|
// this hook, and so this hook is delivered only after every
|
|
225
|
-
// earlier-in-log `wait_completed` and step result
|
|
225
|
+
// earlier-in-log `wait_completed` and step result, keeping any
|
|
226
226
|
// `Promise.race` (or concurrent-branch ULID allocation) deterministic
|
|
227
227
|
// and aligned with the committed event log, regardless of
|
|
228
228
|
// microtask-hop count, hydration time, or race-argument order.
|
|
@@ -241,7 +241,7 @@ export function createCreateHook(ctx) {
|
|
|
241
241
|
if (hasWaitingConsumer) {
|
|
242
242
|
// A consumer is already awaiting, so this payload's delivery is
|
|
243
243
|
// pinned to this log position: capture the deferral HERE, while
|
|
244
|
-
// consuming the event, not at the end of the hydration slot below
|
|
244
|
+
// consuming the event, not at the end of the hydration slot below:
|
|
245
245
|
// same reasoning as step.ts. An earlier step or hook whose slot runs
|
|
246
246
|
// first on this serial queue has usually delivered, and so
|
|
247
247
|
// deregistered its barrier, before this slot ends. Read then, it
|
|
@@ -251,7 +251,7 @@ export function createCreateHook(ctx) {
|
|
|
251
251
|
// window is consumed before any slot runs, so capturing at
|
|
252
252
|
// consumption time sees all of them.
|
|
253
253
|
//
|
|
254
|
-
// The BUFFERED branch below deliberately does NOT do this
|
|
254
|
+
// The BUFFERED branch below deliberately does NOT do this; see the
|
|
255
255
|
// comment on `claim()`.
|
|
256
256
|
const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'hook');
|
|
257
257
|
const next = promises.shift();
|
|
@@ -292,7 +292,7 @@ export function createCreateHook(ctx) {
|
|
|
292
292
|
// at this log position and park the OUTCOME (value or error) for a
|
|
293
293
|
// later `iterator.next()` / `await hook` claim. We capture the
|
|
294
294
|
// outcome rather than eagerly resolving/rejecting a promise no
|
|
295
|
-
// consumer has attached to
|
|
295
|
+
// consumer has attached to: a rejected unclaimed promise (e.g. a
|
|
296
296
|
// buffered encrypted payload with no key) would otherwise surface
|
|
297
297
|
// as an unhandled rejection and crash the process. `claim()` builds
|
|
298
298
|
// the consumer-facing promise on demand.
|
|
@@ -307,8 +307,8 @@ export function createCreateHook(ctx) {
|
|
|
307
307
|
// claim time, rather than when the event was consumed. A buffered
|
|
308
308
|
// payload's delivery genuinely happens when the workflow reads the
|
|
309
309
|
// hook, which may be many deliveries later; a consumption-time
|
|
310
|
-
// snapshot would make the claim wait on
|
|
311
|
-
// yield for
|
|
310
|
+
// snapshot would make the claim wait on (and pay the macrotask
|
|
311
|
+
// yield for) barriers that were relevant to a moment this payload
|
|
312
312
|
// never participated in. That is not theoretical: it stalls the
|
|
313
313
|
// second payload in the e2e `hookWithSleepWorkflow` long enough
|
|
314
314
|
// for the run to suspend before delivering it.
|
|
@@ -374,7 +374,7 @@ export function createCreateHook(ctx) {
|
|
|
374
374
|
// The payload was hydrated through a promiseQueue slot at its log
|
|
375
375
|
// position (buffering branch above). `claim()` builds the
|
|
376
376
|
// consumer-facing promise from that outcome, deferring behind any
|
|
377
|
-
// earlier-in-log wait or step and marking this hook delivered
|
|
377
|
+
// earlier-in-log wait or step and marking this hook delivered, so
|
|
378
378
|
// resolution order stays anchored to the event log, not this later
|
|
379
379
|
// claim site.
|
|
380
380
|
return nextDelivery.claim();
|
|
@@ -430,7 +430,7 @@ export function createCreateHook(ctx) {
|
|
|
430
430
|
return; // Already disposed, nothing to do
|
|
431
431
|
}
|
|
432
432
|
isDisposed = true;
|
|
433
|
-
// If the event log already contains hook_disposed, this is a replay
|
|
433
|
+
// If the event log already contains hook_disposed, this is a replay: no-op
|
|
434
434
|
if (hasDisposedEvent) {
|
|
435
435
|
return;
|
|
436
436
|
}
|
|
@@ -479,4 +479,4 @@ export function createCreateHook(ctx) {
|
|
|
479
479
|
return hook;
|
|
480
480
|
};
|
|
481
481
|
}
|
|
482
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUN0QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFFTCxtQkFBbUIsRUFDbkIsYUFBYSxHQUNkLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQzNCLEdBQWdDLEVBQ2hDLGdCQUFvQztJQUVwQyxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBSXRELENBQUM7SUFDZCxNQUFNLFdBQVcsR0FBSSxRQUFnQixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM5RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFB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ICBSZXBsYXlEaXZlcmdlbmNlRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuaW1wb3J0IHtcbiAgdHlwZSBQcm9taXNlV2l0aFJlc29sdmVycyxcbiAgcGFyc2VEdXJhdGlvblRvRGF0ZSxcbiAgd2l0aFJlc29sdmVycyxcbn0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSG9va0NvbmZsaWN0RXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZ2V0U2VyaWFsaXphdGlvbkNsYXNzLCBSVU5fQ0xBU1NfSUQgfSBmcm9tICcuLi9jbGFzcy1zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgSG9vaywgSG9va09wdGlvbnMgfSBmcm9tICcuLi9jcmVhdGUtaG9vay5qcyc7XG5pbXBvcnQgeyBFdmVudENvbnN1bWVyUmVzdWx0IH0gZnJvbSAnLi4vZXZlbnRzLWNvbnN1bWVyLmpzJztcbmltcG9ydCB7IFdvcmtmbG93U3VzcGVuc2lvbiB9IGZyb20gJy4uL2dsb2JhbC5qcyc7XG5pbXBvcnQgeyB3ZWJob29rTG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGF3YWl0RWFybGllckRlbGl2ZXJpZXMsXG4gIHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyLFxuICBzY2hlZHVsZVdoZW5JZGxlLFxuICB0eXBlIFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1biB9IGZyb20gJy4uL3J1bnRpbWUvcnVuLmpzJztcbmltcG9ydCB7IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgYFJ1bmAgaGFuZGxlIGZvciB0aGUgcnVuIHRoYXQgb3ducyBhIGNvbmZsaWN0aW5nIGhvb2tcbiAqIHRva2VuLCBmb3IgcmVzb2x1dGlvbiB0aHJvdWdoIGBob29rLmdldENvbmZsaWN0KClgLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHRocm91Z2ggdGhlIHNlcmlhbGl6YXRpb24gY2xhc3MgcmVnaXN0cnkgb25cbiAqIHRoZSBWTSdzIGdsb2JhbFRoaXMg4oCUIHRoZSBzYW1lIGNoYW5uZWwgdGhhdCByZXZpdmVzIHNlcmlhbGl6ZWQgYFJ1bmBcbiAqIGluc3RhbmNlcyAoZS5nLiBgc3RhcnQoKWAgcmV0dXJuIHZhbHVlcyBjcm9zc2luZyBmcm9tIGEgc3RlcCBpbnRvIHRoZVxuICogd29ya2Zsb3cpLiBUaGUgcmVnaXN0ZXJlZCBjbGFzcyBpcyB0aGUgVk0gYnVuZGxlJ3MgcGx1Z2luLWNvbXBpbGVkXG4gKiBgUnVuYCwgd2hvc2UgbWV0aG9kcyBhcmUgZHVyYWJsZSBzdGVwIHByb3hpZXMg4oCUIHNhZmUgdG8gY2FsbCBmcm9tXG4gKiB3b3JrZmxvdyBjb2RlIOKAlCBhbmQgY29uc3RydWN0aW9uIGdvZXMgdGhyb3VnaCBpdHNcbiAqIGBXT1JLRkxPV19ERVNFUklBTElaRWAgaG9vaywgZXhhY3RseSBhcyB0aGUgYEluc3RhbmNlYCByZXZpdmVyIHdvdWxkLlxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gYSByZWFsIGBSdW5gIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZDogdGhlIGNvbmZsaWN0XG4gKiBldmVudCBsYWNrcyBgY29uZmxpY3RpbmdSdW5JZGAgKHdyaXR0ZW4gYnkgYW4gb2xkIHdvcmxkKSwgb3IgdGhlIFZNJ3NcbiAqIHJlZ2lzdHJ5IGhhcyBubyBgUnVuYCAoYSBjb250ZXh0IHRoYXQgbmV2ZXIgZXZhbHVhdGVkIHRoZVxuICogd29ya2Zsb3ctbW9kZSBgY3JlYXRlLWhvb2tgIG1vZHVsZSwgd2hpY2ggYWxpYXNlcyBpdCB1bmRlclxuICogYFJVTl9DTEFTU19JRGApLiBgZ2V0Q29uZmxpY3RgIGF3YWl0ZXJzIHRoZW4gcmVqZWN0IHdpdGhcbiAqIGBIb29rQ29uZmxpY3RFcnJvcmAgaW5zdGVhZCBvZiByZXNvbHZpbmcgd2l0aCBhIHZhbHVlIHRoYXQgZG9lc24ndFxuICogaG9ub3IgdGhlIGBSdW5gIGNvbnRyYWN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVDb25mbGljdGluZ1J1bihcbiAgY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG4gIGNvbmZsaWN0aW5nUnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogUnVuPHVua25vd24+IHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgY29uZmxpY3RpbmdSdW5JZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBSdW5DbGFzcyA9IGdldFNlcmlhbGl6YXRpb25DbGFzcyhSVU5fQ0xBU1NfSUQsIGN0eC5nbG9iYWxUaGlzKSBhc1xuICAgIHwgKGFic3RyYWN0IG5ldyAoXG4gICAgICAgIC4uLmFyZ3M6IG5ldmVyXG4gICAgICApID0+IFJ1bjx1bmtub3duPilcbiAgICB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVzZXJpYWxpemUgPSAoUnVuQ2xhc3MgYXMgYW55KT8uW1dPUktGTE9XX0RFU0VSSUFMSVpFXTtcbiAgaWYgKHR5cGVvZiBkZXNlcmlhbGl6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBkZXNlcmlhbGl6ZS5jYWxsKFJ1bkNsYXNzLCB7IHJ1bklkOiBjb25mbGljdGluZ1J1bklkIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3JlYXRlSG9vayhjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlSG9va0ltcGw8VCA9IGFueT4ob3B0aW9uczogSG9va09wdGlvbnMgPSB7fSk6IEhvb2s8VD4ge1xuICAgIC8vIFJlamVjdCBhbiBleHBsaWNpdCBlbXB0eS1zdHJpbmcgdG9rZW4uIEEgdG9rZW4gbXVzdCBlaXRoZXIgYmUgb21pdHRlZFxuICAgIC8vIChvciBgdW5kZWZpbmVkYC9gbnVsbGApIHRvIGdldCBhIGdlbmVyYXRlZCBvbmUsIG9yIGJlIGFuXG4gICAgLy8gZXhwbGljaXQgbm9uLWVtcHR5IHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbW9zdCBhbHdheXMgYW5cbiAgICAvLyBhY2NpZGVudGFsIHZhbHVlIChlLmcuIGFuIHVuc2V0IHZhcmlhYmxlKSBhbmQgd291bGQgb3RoZXJ3aXNlIHNsaXBcbiAgICAvLyB0aHJvdWdoIHRoZSBgPz9gIGJlbG93IOKAlCB3aGljaCBvbmx5IGZhbGxzIGJhY2sgZm9yIG51bGxpc2ggdmFsdWVzIOKAlCBhbmRcbiAgICAvLyBiZSB1c2VkIGFzIGEgbWVhbmluZ2xlc3MsIG5vbi1kZXRlcm1pbmlzdGljIHRva2VuLlxuICAgIGlmIChvcHRpb25zLnRva2VuID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnYGNyZWF0ZUhvb2soKWAgd2FzIGNhbGxlZCB3aXRoIGFuIGVtcHR5IHN0cmluZyB0b2tlbi4gUGFzcyBhIG5vbi1lbXB0eSB0b2tlbiwgb3Igb21pdCB0aGUgYHRva2VuYCBvcHRpb24gdG8gdXNlIGEgZ2VuZXJhdGVkIG9uZS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMuaXNXZWJob29rID09PSB0cnVlICYmXG4gICAgICBvcHRpb25zLmV4cGVyaW1lbnRhbF9taW5SZXRlbnRpb24gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnV2ViaG9vayBob29rcyBkbyBub3Qgc3VwcG9ydCBgZXhwZXJpbWVudGFsX21pblJldGVudGlvbmAuIFVzZSBhIG5vbi13ZWJob29rIGBjcmVhdGVIb29rKClgIHdpdGggYHJlc3VtZUhvb2soKWAuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmV4cGVyaW1lbnRhbF9taW5SZXRlbnRpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY3R4LndvcmxkQ2FwYWJpbGl0aWVzPy5ob29rUmV0ZW50aW9uPy5hY3RpdmUgIT09IHRydWVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBGYXRhbEVycm9yKFxuICAgICAgICAnVGhlIGNvbmZpZ3VyZWQgV29ybGQgZG9lcyBub3Qgc3VwcG9ydCBgZXhwZXJpbWVudGFsX21pblJldGVudGlvbmAgZm9yIEhvb2tzLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaG9vayBJRCBhbmQgdG9rZW5cbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYGhvb2tfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcbiAgICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW4gPz8gY3R4LmdlbmVyYXRlTmFub2lkKCk7XG4gICAgY29uc3QgdG9rZW5SZXRlbnRpb25VbnRpbCA9XG4gICAgICBvcHRpb25zLmV4cGVyaW1lbnRhbF9taW5SZXRlbnRpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhcnNlRHVyYXRpb25Ub0RhdGUob3B0aW9ucy5leHBlcmltZW50YWxfbWluUmV0ZW50aW9uKTtcblxuICAgIC8vIEFkZCBob29rIGNyZWF0aW9uIHRvIGludm9jYXRpb25zIHF1ZXVlICh1c2luZyBNYXAgZm9yIE8oMSkgb3BlcmF0aW9ucylcbiAgICBjb25zdCBpc1dlYmhvb2sgPSBvcHRpb25zLmlzV2ViaG9vayA/PyBmYWxzZTtcblxuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgdG9rZW4sXG4gICAgICB0b2tlblJldGVudGlvblVudGlsLFxuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICBpc1dlYmhvb2ssXG4gICAgfSk7XG5cbiAgICAvLyBRdWV1ZSBvZiBidWZmZXJlZCBob29rIHBheWxvYWRzIChyZWNlaXZlZCBiZWZvcmUgdGhlIHdvcmtmbG93IGF3YWl0ZWRcbiAgICAvLyB0aGUgaG9vaykuIEVhY2ggZW50cnkncyBgY2xhaW0oKWAgYnVpbGRzIHRoZSBjb25zdW1lci1mYWNpbmcgcHJvbWlzZVxuICAgIC8vIGZyb20gdGhlIGNhcHR1cmVkIGh5ZHJhdGlvbiBvdXRjb21lIGFuZCBvcmRlcnMgaXQgZGV0ZXJtaW5pc3RpY2FsbHkgYnlcbiAgICAvLyBldmVudC1sb2cgcG9zaXRpb24gYWdhaW5zdCBhbnkgY29uY3VycmVudCBicmFuY2gtZGVjaWRpbmcgcmVzb2x1dGlvblxuICAgIC8vIChzZWUgYGN0eC5wZW5kaW5nRGVsaXZlcnlCYXJyaWVyc2ApLlxuICAgIGNvbnN0IHBheWxvYWRzUXVldWU6IHsgY2xhaW06ICgpID0+IFByb21pc2U8VD4gfVtdID0gW107XG5cbiAgICAvLyBRdWV1ZSBvZiBwcm9taXNlcyB0aGF0IHJlc29sdmUgdG8gdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+W10gPSBbXTtcblxuICAgIC8vIFF1ZXVlIG9mIHByb21pc2VzIHRoYXQgcmVzb2x2ZSBvbmNlIGhvb2sgcmVnaXN0cmF0aW9uIGlzIGNvbmZpcm1lZFxuICAgIC8vICh3aXRoIGBudWxsYCkgb3IgYSB0b2tlbiBjb25mbGljdCBpcyBkZXRlY3RlZCAod2l0aCB0aGUgY29uZmxpY3RpbmdcbiAgICAvLyBgUnVuYCkuIFRoZXNlIGJhY2sgdGhlIGBob29rLmdldENvbmZsaWN0KClgIGdldHRlci5cbiAgICBjb25zdCBnZXRDb25mbGljdFByb21pc2VzOiBQcm9taXNlV2l0aFJlc29sdmVyczxSdW48dW5rbm93bj4gfCBudWxsPltdID0gW107XG5cbiAgICBsZXQgZXZlbnRMb2dFbXB0eSA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBob29rIGNyZWF0aW9uIGhhcHBlbmVkXG4gICAgbGV0IGhhc0NyZWF0ZWQgPSBmYWxzZTtcblxuICAgIC8vIFRyYWNrIGlmIHRoZSBldmVudCBsb2cgY29uZmlybXMgZGlzcG9zYWwgaGFwcGVuZWQgKHJlcGxheSBuby1vcClcbiAgICBsZXQgaGFzRGlzcG9zZWRFdmVudCA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgd2UgaGF2ZSBhIGNvbmZsaWN0IHNvIHdlIGNhbiByZWplY3QgZnV0dXJlIGF3YWl0c1xuICAgIGxldCBoYXNDb25mbGljdCA9IGZhbHNlO1xuICAgIGxldCBjb25mbGljdEVycm9yUmVmOiBIb29rQ29uZmxpY3RFcnJvciB8IG51bGwgPSBudWxsO1xuICAgIC8vIFRoZSBjb25mbGljdGluZyBydW4gaGFuZGxlLCBzaGFyZWQgYnkgZXZlcnkgYGdldENvbmZsaWN0YCBhd2FpdCBzb1xuICAgIC8vIHJlcGVhdGVkIGF3YWl0cyBvYnNlcnZlIHRoZSBzYW1lIGluc3RhbmNlIGRldGVybWluaXN0aWNhbGx5LlxuICAgIGxldCBjb25mbGljdFJ1blJlZjogUnVuPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBMYXp5LXJlc3VtZSBkZWR1cDogYHJlc3VtZUhvb2soKWAgbWludHMgYSBgcmVzdW1lSWRgIHBlciByZXN1bWVcbiAgICAvLyBhdHRlbXB0IGFuZCBzdGFtcHMgaXQgb24gdGhlIGBob29rX3JlY2VpdmVkYCBldmVudC4gV2hlbiB0aGUgZGlyZWN0XG4gICAgLy8gZXZlbnQgd3JpdGUgZmFpbHMgdHJhbnNpZW50bHksIHRoZSBydW50aW1lIG1hdGVyaWFsaXplcyB0aGUgZXZlbnQgZnJvbVxuICAgIC8vIHRoZSBxdWV1ZSBwYXlsb2FkIGluc3RlYWQg4oCUIGFuZCBiZWNhdXNlIGBob29rX3JlY2VpdmVkYCBoYXMgbm9cbiAgICAvLyBzdG9yYWdlLWxldmVsIHVuaXF1ZW5lc3MgY29uc3RyYWludCwgY29uY3VycmVudCByZWRlbGl2ZXJ5IG9mIHRoZSBzYW1lXG4gICAgLy8gcXVldWUgbWVzc2FnZSBjYW4gY29tbWl0IHRoYXQgbWF0ZXJpYWxpemF0aW9uIHR3aWNlLiBUd28gcm93cyBmb3IgT05FXG4gICAgLy8gcmVzdW1lIGF0dGVtcHQgdGhlbiBzaGFyZSBhIGByZXN1bWVJZGAgKGRpc3RpbmN0IHJlc3VtZSBhdHRlbXB0cyBuZXZlclxuICAgIC8vIGRvKSwgc28gcmVwbGF5IGRlbGl2ZXJzIG9ubHkgdGhlIGZpcnN0LWluLWxvZyBvY2N1cnJlbmNlLiBUaGlzIGlzIGFcbiAgICAvLyBwdXJlIGZ1bmN0aW9uIG9mIHRoZSBwZXJzaXN0ZWQgZXZlbnQgbG9nLCBrZWVwaW5nIHJlcGxheSBkZXRlcm1pbmlzdGljLlxuICAgIC8vXG4gICAgLy8gU2NvcGU6IHRoaXMgaXMgZGVmZW5zZS1pbi1kZXB0aCBvdmVyIHRoZSBwZXJzaXN0ZWQgbG9nLCBub3QgYVxuICAgIC8vIGNyb3NzLWludm9jYXRpb24gZXhhY3RseS1vbmNlIGd1YXJhbnRlZSDigJQgYW4gaW52b2NhdGlvbiByZXBsYXlpbmcgYVxuICAgIC8vIHNuYXBzaG90IHRha2VuIGJlZm9yZSB0aGUgZHVwbGljYXRlIHJvdyBjb21taXR0ZWQgb25seSBzZWVzIG9uZSByb3csXG4gICAgLy8gc28gdHdvIENPTkNVUlJFTlQgaW52b2NhdGlvbnMgY2FuIGVhY2ggZGVsaXZlciBmcm9tIHRoZWlyIG93blxuICAgIC8vIHNuYXBzaG90LiBFdmVyeSByZXBsYXkgZnJvbSBhIGxvZyBjb250YWluaW5nIGJvdGggcm93cyAoaS5lLiBhbGxcbiAgICAvLyBzdWJzZXF1ZW50IGRlbGl2ZXJpZXMpIGRlZHVwcy4gVGhlIGNvcnJlY3RuZXNzIGJvdW5kYXJ5IHRoYXQgY2xvc2VzXG4gICAgLy8gdGhlIGNvbmN1cnJlbnQgd2luZG93IGlzIHRoZSBzdG9yYWdlLWxldmVsIChydW5JZCwgcmVzdW1lSWQpXG4gICAgLy8gY29uc3RyYWludCBhcnJpdmluZyB3aXRoIHRoZSBwYXJhbGxlbC1yZXN1bWUgc3VjY2Vzc29yIHdvcms7IHRoaXMgc2V0XG4gICAgLy8gc3RheXMgdXNlZnVsIGFmdGVyIHRoYXQgbGFuZHMsIGZvciBsb2dzIHdyaXR0ZW4gYmVmb3JlIGl0IGRlcGxveWVkLlxuICAgIGNvbnN0IHNlZW5SZXN1bWVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIHdlYmhvb2tMb2dnZXIuZGVidWcoJ0hvb2sgY29uc3VtZXIgc2V0dXAnLCB7IGNvcnJlbGF0aW9uSWQsIHRva2VuIH0pO1xuICAgIGN0eC5ldmVudHNDb25zdW1lci5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXZlbnRzIGFuZCB0aGVyZSBhcmUgcHJvbWlzZXMgd2FpdGluZyxcbiAgICAgIC8vIGl0IG1lYW5zIHRoZSBob29rIGhhcyBiZWVuIGF3YWl0ZWQsIGJ1dCBhbiBpbmNvbWluZyBwYXlsb2FkIGhhcyBub3QgeWV0IGJlZW4gcmVjZWl2ZWQuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSB3b3JrZmxvdyBzaG91bGQgYmUgc3VzcGVuZGVkIHVudGlsIHRoZSBob29rIGlzIHJlc3VtZWQuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIGV2ZW50TG9nRW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAocHJvbWlzZXMubGVuZ3RoID4gMCAmJiBwYXlsb2Fkc1F1ZXVlLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAgICAgICAoZ2V0Q29uZmxpY3RQcm9taXNlcy5sZW5ndGggPiAwICYmICFoYXNDcmVhdGVkICYmICFoYXNDb25mbGljdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgLy8gV2UncmUgbm90IGludGVyZXN0ZWQgaW4gdGhpcyBldmVudCAtIHRoZSBjb3JyZWxhdGlvbklkIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBldmVudFRva2VuID1cbiAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiYgZXZlbnQuZXZlbnREYXRhICYmICd0b2tlbicgaW4gZXZlbnQuZXZlbnREYXRhXG4gICAgICAgICAgPyBldmVudC5ldmVudERhdGEudG9rZW5cbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHR5cGVvZiBldmVudFRva2VuID09PSAnc3RyaW5nJyAmJiBldmVudFRva2VuICE9PSB0b2tlbikge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBob29rIGV2ZW50ICR7ZXZlbnQuZXZlbnRUeXBlfSBmb3IgJHtjb3JyZWxhdGlvbklkfSBiZWxvbmdzIHRvIHRva2VuIFwiJHtldmVudFRva2VufVwiLCBidXQgdGhlIGN1cnJlbnQgaG9vayBjb25zdW1lciBleHBlY3RzIFwiJHt0b2tlbn1cImAsXG4gICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaG9va19jcmVhdGVkIGV2ZW50IHRvIG1hcmsgdGhpcyBob29rIGFzIGFscmVhZHkgY3JlYXRlZFxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCcpIHtcbiAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgICBxdWV1ZUl0ZW0uaGFzQ3JlYXRlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICBxdWV1ZUl0ZW0udG9rZW5SZXRlbnRpb25VbnRpbCA9IGV2ZW50LmV2ZW50RGF0YS50b2tlblJldGVudGlvblVudGlsO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NyZWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzID0gZ2V0Q29uZmxpY3RQcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBnZXRDb25mbGljdFByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZXIgb2YgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmVyLnJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGhvb2tfY29uZmxpY3QgZXZlbnQgLSBhbm90aGVyIHdvcmtmbG93IGlzIHVzaW5nIHRoaXMgdG9rZW5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NvbmZsaWN0Jykge1xuICAgICAgICAvLyBSZW1vdmUgdGhpcyBob29rIGZyb20gdGhlIGludm9jYXRpb25zIHF1ZXVlXG4gICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcblxuICAgICAgICAvLyBTdG9yZSB0aGUgY29uZmxpY3QgZXZlbnQgc28gd2UgY2FuIHJlamVjdCBhbnkgYXdhaXRlZCBwcm9taXNlcy5cbiAgICAgICAgLy8gQ2hhaW4gdGhyb3VnaCBwcm9taXNlUXVldWUgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgb3JkZXJpbmcuXG4gICAgICAgIGNvbnN0IGNvbmZsaWN0RXZlbnQgPSBldmVudCBhcyBIb29rQ29uZmxpY3RFdmVudDtcbiAgICAgICAgY29uc3QgY29uZmxpY3RFcnJvciA9IG5ldyBIb29rQ29uZmxpY3RFcnJvcihcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS50b2tlbixcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS5jb25mbGljdGluZ1J1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWFyayB0aGF0IHdlIGhhdmUgYSBjb25mbGljdCBzbyBmdXR1cmUgYXdhaXRzIGFsc28gcmVqZWN0XG4gICAgICAgIGhhc0NvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgY29uZmxpY3RFcnJvclJlZiA9IGNvbmZsaWN0RXJyb3I7XG4gICAgICAgIGNvbmZsaWN0UnVuUmVmID0gY3JlYXRlQ29uZmxpY3RpbmdSdW4oXG4gICAgICAgICAgY3R4LFxuICAgICAgICAgIGNvbmZsaWN0RXZlbnQuZXZlbnREYXRhLmNvbmZsaWN0aW5nUnVuSWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBDYXB0dXJlIGFuZCBkcmFpbiBwZW5kaW5nIHByb21pc2VzIHN5bmNocm9ub3VzbHkgc28gdGhlIG51bGwgZXZlbnRcbiAgICAgICAgLy8gaGFuZGxlciB3b24ndCBzZWUgdGhlbSBhbmQgdHJpZ2dlciBhIHNwdXJpb3VzIFdvcmtmbG93U3VzcGVuc2lvbi5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBzZXR0bGVtZW50cyBhcmUgZGVmZXJyZWQgdGhyb3VnaCBwcm9taXNlUXVldWUgZm9yXG4gICAgICAgIC8vIG9yZGVyaW5nLiBQYXlsb2FkIGF3YWl0ZXJzIHJlamVjdCB3aXRoIEhvb2tDb25mbGljdEVycm9yLCB3aGlsZVxuICAgICAgICAvLyBgZ2V0Q29uZmxpY3RgIGF3YWl0ZXJzIHJlc29sdmUgd2l0aCB0aGUgY29uZmxpY3RpbmcgcnVuIHNvIHRoZVxuICAgICAgICAvLyB3b3JrZmxvdyBjYW4gYnJhbmNoIG9uIHRoZSBjb25mbGljdCB3aXRob3V0IHRocm93aW5nLiBXaGVuIG5vXG4gICAgICAgIC8vIHJlYWwgYFJ1bmAgY2FuIGJlIGNvbnN0cnVjdGVkIChzZWUgYGNyZWF0ZUNvbmZsaWN0aW5nUnVuYCksXG4gICAgICAgIC8vIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgcmVqZWN0IHdpdGggdGhlIEhvb2tDb25mbGljdEVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gb2YgcmVzb2x2aW5nIHdpdGggYSB2YWx1ZSB0aGF0IGRvZXNuJ3QgaG9ub3IgdGhlIGBSdW5gIGNvbnRyYWN0LlxuICAgICAgICBjb25zdCBwZW5kaW5nUHJvbWlzZXMgPSBwcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBwcm9taXNlcy5sZW5ndGggPSAwO1xuICAgICAgICBjb25zdCBwZW5kaW5nR2V0Q29uZmxpY3RQcm9taXNlcyA9IGdldENvbmZsaWN0UHJvbWlzZXMuc2xpY2UoKTtcbiAgICAgICAgZ2V0Q29uZmxpY3RQcm9taXNlcy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZXIgb2YgcGVuZGluZ1Byb21pc2VzKSB7XG4gICAgICAgICAgICByZXNvbHZlci5yZWplY3QoY29uZmxpY3RFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZXIgb2YgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMpIHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdFJ1blJlZikge1xuICAgICAgICAgICAgICByZXNvbHZlci5yZXNvbHZlKGNvbmZsaWN0UnVuUmVmKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmVyLnJlamVjdChjb25mbGljdEVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19yZWNlaXZlZCcpIHtcbiAgICAgICAgLy8gRHJvcCBkdXBsaWNhdGUgZGVsaXZlcmllcyBvZiB0aGUgc2FtZSByZXN1bWUgYXR0ZW1wdCAoc2FtZVxuICAgICAgICAvLyBgcmVzdW1lSWRgIOKAlCBzZWUgYHNlZW5SZXN1bWVJZHNgIGFib3ZlKS4gRXZlbnRzIHdpdGhvdXQgYVxuICAgICAgICAvLyBgcmVzdW1lSWRgIChvbGRlciBTREtzLCBsZWdhY3kgc3BlYyB2ZXJzaW9ucykgYXJlIG5ldmVyIGRlZHVwZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIERlZHVwIG9mZiB0aGUgdG9wLWxldmVsIGByZXN1bWVJZGAgdGhlIGJhY2tlbmQgaG9pc3RzIG9udG8gdGhlIGV2ZW50XG4gICAgICAgIC8vIGFzIGEgZmlyc3QtY2xhc3MgY29sdW1uLiBBbiBlYXJsaWVyIHVucmVsZWFzZWQgYnVpbGQgYWRkaXRpb25hbGx5XG4gICAgICAgIC8vIHdyb3RlIGl0IG5lc3RlZCB1bmRlciBgZXZlbnREYXRhYCwgYnV0IHRoYXQgZm9ybSBuZXZlciBzaGlwcGVkIGFuZCBpc1xuICAgICAgICAvLyBzdHJpcHBlZCBieSBgRXZlbnRTY2hlbWFgIHBhcnNpbmcgKHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnREYXRhXG4gICAgICAgIC8vIHNjaGVtYSBkb2VzIG5vdCBkZWNsYXJlIGl0KSwgc28gdGhlcmUgaXMgbm8gcGVyc2lzdGVkIG5lc3RlZCBmb3JtIHRvXG4gICAgICAgIC8vIGZhbGwgYmFjayB0by5cbiAgICAgICAgY29uc3QgcmVzdW1lSWQgPSBldmVudC5yZXN1bWVJZDtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bWVJZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAoc2VlblJlc3VtZUlkcy5oYXMocmVzdW1lSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VlblJlc3VtZUlkcy5hZGQocmVzdW1lSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgYSAnaG9vaycgZGVsaXZlcnkgYmFycmllciBhdCB0aGlzIGV2ZW50J3MgbG9nIGluZGV4IHNvIGFcbiAgICAgICAgLy8gbGF0ZXItaW4tbG9nIGB3YWl0X2NvbXBsZXRlZGAgb3Igc3RlcCByZXN1bHQgaXMgZGVsaXZlcmVkIG9ubHkgYWZ0ZXJcbiAgICAgICAgLy8gdGhpcyBob29rLCBhbmQgc28gdGhpcyBob29rIGlzIGRlbGl2ZXJlZCBvbmx5IGFmdGVyIGV2ZXJ5XG4gICAgICAgIC8vIGVhcmxpZXItaW4tbG9nIGB3YWl0X2NvbXBsZXRlZGAgYW5kIHN0ZXAgcmVzdWx0IOKAlCBrZWVwaW5nIGFueVxuICAgICAgICAvLyBgUHJvbWlzZS5yYWNlYCAob3IgY29uY3VycmVudC1icmFuY2ggVUxJRCBhbGxvY2F0aW9uKSBkZXRlcm1pbmlzdGljXG4gICAgICAgIC8vIGFuZCBhbGlnbmVkIHdpdGggdGhlIGNvbW1pdHRlZCBldmVudCBsb2csIHJlZ2FyZGxlc3Mgb2ZcbiAgICAgICAgLy8gbWljcm90YXNrLWhvcCBjb3VudCwgaHlkcmF0aW9uIHRpbWUsIG9yIHJhY2UtYXJndW1lbnQgb3JkZXIuXG4gICAgICAgIC8vIFNlZSBgY3R4LnBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIGJhcnJpZXIgaXMgcmVnaXN0ZXJlZCBBUk1FRCBvbmx5IHdoZW4gYSBjb25zdW1lciBpcyBhbHJlYWR5XG4gICAgICAgIC8vIGF3YWl0aW5nLCBzbyB0aGlzIHBheWxvYWQgaXMgY29tbWl0dGVkIHRvIHJlYWNoaW5nIHRoZSB3b3JrZmxvdy4gQVxuICAgICAgICAvLyBidWZmZXJlZCBwYXlsb2FkIGlzIHJlZ2lzdGVyZWQgdW5hcm1lZCBhbmQgYXJtZWQgYnkgYGNsYWltKClgOiB1bnRpbFxuICAgICAgICAvLyBhIGNvbnN1bWVyIHRha2VzIGl0LCBhIGxhdGVyIHN0ZXAgcmVzdWx0IG11c3Qgbm90IGJlIG9yZGVyZWQgYmVoaW5kXG4gICAgICAgIC8vIGl0IChzZWUgYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgKS5cbiAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGN0eC5ldmVudHNDb25zdW1lci5ldmVudEluZGV4O1xuICAgICAgICBjb25zdCBoYXNXYWl0aW5nQ29uc3VtZXIgPSBwcm9taXNlcy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBiYXJyaWVyID0gcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIoY3R4LCBldmVudEluZGV4LCAnaG9vaycsIHtcbiAgICAgICAgICBhcm1lZDogaGFzV2FpdGluZ0NvbnN1bWVyLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGFzV2FpdGluZ0NvbnN1bWVyKSB7XG4gICAgICAgICAgLy8gQSBjb25zdW1lciBpcyBhbHJlYWR5IGF3YWl0aW5nLCBzbyB0aGlzIHBheWxvYWQncyBkZWxpdmVyeSBpc1xuICAgICAgICAgIC8vIHBpbm5lZCB0byB0aGlzIGxvZyBwb3NpdGlvbjogY2FwdHVyZSB0aGUgZGVmZXJyYWwgSEVSRSwgd2hpbGVcbiAgICAgICAgICAvLyBjb25zdW1pbmcgdGhlIGV2ZW50LCBub3QgYXQgdGhlIGVuZCBvZiB0aGUgaHlkcmF0aW9uIHNsb3QgYmVsb3cg4oCUXG4gICAgICAgICAgLy8gc2FtZSByZWFzb25pbmcgYXMgc3RlcC50cy4gQW4gZWFybGllciBzdGVwIG9yIGhvb2sgd2hvc2Ugc2xvdCBydW5zXG4gICAgICAgICAgLy8gZmlyc3Qgb24gdGhpcyBzZXJpYWwgcXVldWUgaGFzIHVzdWFsbHkgZGVsaXZlcmVkLCBhbmQgc29cbiAgICAgICAgICAvLyBkZXJlZ2lzdGVyZWQgaXRzIGJhcnJpZXIsIGJlZm9yZSB0aGlzIHNsb3QgZW5kcy4gUmVhZCB0aGVuLCBpdFxuICAgICAgICAgIC8vIHdvdWxkIGJlIGludmlzaWJsZSBhbmQgdGhpcyBwYXlsb2FkIHdvdWxkIHNraXAgYm90aCB0aGUgZ2F0ZSBBTkRcbiAgICAgICAgICAvLyBgYXdhaXRFYXJsaWVyRGVsaXZlcmllc2AnIG1hY3JvdGFzayB5aWVsZCwgbGV0dGluZyBpdCBvdmVydGFrZSB0aGVcbiAgICAgICAgICAvLyBicmFuY2ggdGhhdCBlYXJsaWVyIGRlbGl2ZXJ5IGp1c3Qgd29rZS4gRXZlcnkgZXZlbnQgaW4gb25lIGRyYWluXG4gICAgICAgICAgLy8gd2luZG93IGlzIGNvbnN1bWVkIGJlZm9yZSBhbnkgc2xvdCBydW5zLCBzbyBjYXB0dXJpbmcgYXRcbiAgICAgICAgICAvLyBjb25zdW1wdGlvbiB0aW1lIHNlZXMgYWxsIG9mIHRoZW0uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgQlVGRkVSRUQgYnJhbmNoIGJlbG93IGRlbGliZXJhdGVseSBkb2VzIE5PVCBkbyB0aGlzIOKAlCBzZWUgdGhlXG4gICAgICAgICAgLy8gY29tbWVudCBvbiBgY2xhaW0oKWAuXG4gICAgICAgICAgY29uc3QgZWFybGllckRlbGl2ZXJlZCA9IGF3YWl0RWFybGllckRlbGl2ZXJpZXMoXG4gICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICBldmVudEluZGV4LFxuICAgICAgICAgICAgJ2hvb2snXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gcHJvbWlzZXMuc2hpZnQoKTtcbiAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgLy8gSHlkcmF0ZSB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlIHNsb3QgKHNvIGFzeW5jIGRlc2VyaWFsaXphdGlvblxuICAgICAgICAgICAgLy8gc3RheXMgaW4gZXZlbnQtbG9nIG9yZGVyKSwgdGhlbiBkZWZlciBiZWhpbmQgZWFybGllciB3YWl0cyBhbmRcbiAgICAgICAgICAgIC8vIHN0ZXBzIGJlZm9yZSByZXNvbHZpbmcuIFRoZSBkZWZlcnJhbCBydW5zIE9GRiB0aGUgc2VyaWFsIHF1ZXVlXG4gICAgICAgICAgICAvLyAoaXQgbWF5IHdhaXQgb24gYW4gZWFybGllciB3YWl0IG9yIHN0ZXAgZGVsaXZlcnkgYW5kIGJsb2NraW5nIGFcbiAgICAgICAgICAgIC8vIHF1ZXVlIHNsb3Qgb24gdGhhdCB3b3VsZCBkZWFkbG9jayB0aGUgcXVldWUpLlxuICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgICBsZXQgaHlkcmF0ZU91dGNvbWU6XG4gICAgICAgICAgICAgIHwgeyBvazogdHJ1ZTsgdmFsdWU6IFQgfVxuICAgICAgICAgICAgICB8IHsgb2s6IGZhbHNlOyBlcnJvcjogdW5rbm93biB9O1xuICAgICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlcGFyZWQgPVxuICAgICAgICAgICAgICAgICAgYXdhaXQgY3R4LnJlcGxheVBheWxvYWRDYWNoZS5wcmVwYXJlRXZlbnRQYXlsb2FkKFxuICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudElkLFxuICAgICAgICAgICAgICAgICAgICAncGF5bG9hZCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzLFxuICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICBwcmVwYXJlZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaHlkcmF0ZU91dGNvbWUgPSB7IG9rOiB0cnVlLCB2YWx1ZTogcGF5bG9hZCBhcyBUIH07XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaHlkcmF0ZU91dGNvbWUgPSB7IG9rOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMtLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2b2lkIGVhcmxpZXJEZWxpdmVyZWQudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGVPdXRjb21lLm9rKSB7XG4gICAgICAgICAgICAgICAgICBuZXh0LnJlc29sdmUoaHlkcmF0ZU91dGNvbWUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBuZXh0LnJlamVjdChoeWRyYXRlT3V0Y29tZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBjb25zdW1lciBpcyBhd2FpdGluZyB5ZXQuIEh5ZHJhdGUgdGhyb3VnaCBhIHByb21pc2VRdWV1ZSBzbG90XG4gICAgICAgICAgLy8gYXQgdGhpcyBsb2cgcG9zaXRpb24gYW5kIHBhcmsgdGhlIE9VVENPTUUgKHZhbHVlIG9yIGVycm9yKSBmb3IgYVxuICAgICAgICAgIC8vIGxhdGVyIGBpdGVyYXRvci5uZXh0KClgIC8gYGF3YWl0IGhvb2tgIGNsYWltLiBXZSBjYXB0dXJlIHRoZVxuICAgICAgICAgIC8vIG91dGNvbWUgcmF0aGVyIHRoYW4gZWFnZXJseSByZXNvbHZpbmcvcmVqZWN0aW5nIGEgcHJvbWlzZSBub1xuICAgICAgICAgIC8vIGNvbnN1bWVyIGhhcyBhdHRhY2hlZCB0byDigJQgYSByZWplY3RlZCB1bmNsYWltZWQgcHJvbWlzZSAoZS5nLiBhXG4gICAgICAgICAgLy8gYnVmZmVyZWQgZW5jcnlwdGVkIHBheWxvYWQgd2l0aCBubyBrZXkpIHdvdWxkIG90aGVyd2lzZSBzdXJmYWNlXG4gICAgICAgICAgLy8gYXMgYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBhbmQgY3Jhc2ggdGhlIHByb2Nlc3MuIGBjbGFpbSgpYCBidWlsZHNcbiAgICAgICAgICAvLyB0aGUgY29uc3VtZXItZmFjaW5nIHByb21pc2Ugb24gZGVtYW5kLlxuICAgICAgICAgIGxldCBvdXRjb21lOlxuICAgICAgICAgICAgfCB7IG9rOiB0cnVlOyB2YWx1ZTogVCB9XG4gICAgICAgICAgICB8IHsgb2s6IGZhbHNlOyBlcnJvcjogdW5rbm93biB9XG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcblxuICAgICAgICAgIGNvbnN0IGNsYWltID0gKCk6IFByb21pc2U8VD4gPT4ge1xuICAgICAgICAgICAgLy8gQSBjb25zdW1lciBoYXMgdGFrZW4gdGhpcyBwYXlsb2FkLCBzbyBpdHMgZGVsaXZlcnkgbm8gbG9uZ2VyXG4gICAgICAgICAgICAvLyB3YWl0cyBvbiB3b3JrZmxvdyBjb2RlOiBsYXRlciBzdGVwIHJlc3VsdHMgbWF5IG5vdyBiZSBvcmRlcmVkXG4gICAgICAgICAgICAvLyBiZWhpbmQgaXQuXG4gICAgICAgICAgICBiYXJyaWVyLmFybSgpO1xuICAgICAgICAgICAgLy8gVW5saWtlIGV2ZXJ5IG90aGVyIGRlbGl2ZXJ5LCB0aGUgZGVmZXJyYWwgaXMgZXZhbHVhdGVkIEhFUkUsIGF0XG4gICAgICAgICAgICAvLyBjbGFpbSB0aW1lLCByYXRoZXIgdGhhbiB3aGVuIHRoZSBldmVudCB3YXMgY29uc3VtZWQuIEEgYnVmZmVyZWRcbiAgICAgICAgICAgIC8vIHBheWxvYWQncyBkZWxpdmVyeSBnZW51aW5lbHkgaGFwcGVucyB3aGVuIHRoZSB3b3JrZmxvdyByZWFkcyB0aGVcbiAgICAgICAgICAgIC8vIGhvb2ssIHdoaWNoIG1heSBiZSBtYW55IGRlbGl2ZXJpZXMgbGF0ZXI7IGEgY29uc3VtcHRpb24tdGltZVxuICAgICAgICAgICAgLy8gc25hcHNob3Qgd291bGQgbWFrZSB0aGUgY2xhaW0gd2FpdCBvbiDigJQgYW5kIHBheSB0aGUgbWFjcm90YXNrXG4gICAgICAgICAgICAvLyB5aWVsZCBmb3Ig4oCUIGJhcnJpZXJzIHRoYXQgd2VyZSByZWxldmFudCB0byBhIG1vbWVudCB0aGlzIHBheWxvYWRcbiAgICAgICAgICAgIC8vIG5ldmVyIHBhcnRpY2lwYXRlZCBpbi4gVGhhdCBpcyBub3QgdGhlb3JldGljYWw6IGl0IHN0YWxscyB0aGVcbiAgICAgICAgICAgIC8vIHNlY29uZCBwYXlsb2FkIGluIHRoZSBlMmUgYGhvb2tXaXRoU2xlZXBXb3JrZmxvd2AgbG9uZyBlbm91Z2hcbiAgICAgICAgICAgIC8vIGZvciB0aGUgcnVuIHRvIHN1c3BlbmQgYmVmb3JlIGRlbGl2ZXJpbmcgaXQuXG4gICAgICAgICAgICByZXR1cm4gaHlkcmF0ZWQucHJvbWlzZVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKGN0eCwgZXZlbnRJbmRleCwgJ2hvb2snKSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJhcnJpZXIubWFya0RlbGl2ZXJlZCgpO1xuICAgICAgICAgICAgICAgIGlmIChvdXRjb21lICYmICFvdXRjb21lLm9rKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBvdXRjb21lLmVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKG91dGNvbWUgYXMgeyBvazogdHJ1ZTsgdmFsdWU6IFQgfSkudmFsdWU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMrKztcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZXBhcmVkID0gYXdhaXQgY3R4LnJlcGxheVBheWxvYWRDYWNoZS5wcmVwYXJlRXZlbnRQYXlsb2FkKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50SWQsXG4gICAgICAgICAgICAgICAgJ3BheWxvYWQnLFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICBwcmVwYXJlZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvdXRjb21lID0geyBvazogdHJ1ZSwgdmFsdWU6IHBheWxvYWQgYXMgVCB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgb3V0Y29tZSA9IHsgb2s6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzLS07XG4gICAgICAgICAgICAgIGh5ZHJhdGVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwYXlsb2Fkc1F1ZXVlLnB1c2goeyBjbGFpbSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgLy8gVGVybWluYWwgc3RhdGUgLSByZW1vdmUgZnJvbSBxdWV1ZSAobGlrZSBzdGVwX2NvbXBsZXRlZC93YWl0X2NvbXBsZXRlZClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAvLyBNYXJrIHRoYXQgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZFxuICAgICAgICBoYXNEaXNwb3NlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gV2UncmUgZG9uZSBwcm9jZXNzaW5nIGFueSBtb3JlIGV2ZW50cyBmb3IgdGhpcyBob29rXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciBob29rICR7Y29ycmVsYXRpb25JZH0gKHRva2VuOiAke3Rva2VufSkgXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgaG9vayBoYXMgYmVlbiBkaXNwb3NlZFxuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IHByb21pc2UgdGhhdCB3YWl0cyBmb3IgdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgZnVuY3Rpb24gY3JlYXRlSG9va1Byb21pc2UoKTogUHJvbWlzZTxUPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFQ+KCk7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgYSBjb25mbGljdCwgcmVqZWN0IHRocm91Z2ggdGhlIHByb21pc2VRdWV1ZSB0byBtYWludGFpblxuICAgICAgLy8gZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyB3aXRoIGFueSBwcmlvciBxdWV1ZWQgcmVzb2x1dGlvbnMuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QgJiYgY29uZmxpY3RFcnJvclJlZikge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlcnMucmVqZWN0KGNvbmZsaWN0RXJyb3JSZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bG9hZHNRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHREZWxpdmVyeSA9IHBheWxvYWRzUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5leHREZWxpdmVyeSkge1xuICAgICAgICAgIC8vIFRoZSBwYXlsb2FkIHdhcyBoeWRyYXRlZCB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlIHNsb3QgYXQgaXRzIGxvZ1xuICAgICAgICAgIC8vIHBvc2l0aW9uIChidWZmZXJpbmcgYnJhbmNoIGFib3ZlKS4gYGNsYWltKClgIGJ1aWxkcyB0aGVcbiAgICAgICAgICAvLyBjb25zdW1lci1mYWNpbmcgcHJvbWlzZSBmcm9tIHRoYXQgb3V0Y29tZSwgZGVmZXJyaW5nIGJlaGluZCBhbnlcbiAgICAgICAgICAvLyBlYXJsaWVyLWluLWxvZyB3YWl0IG9yIHN0ZXAgYW5kIG1hcmtpbmcgdGhpcyBob29rIGRlbGl2ZXJlZCDigJQgc29cbiAgICAgICAgICAvLyByZXNvbHV0aW9uIG9yZGVyIHN0YXlzIGFuY2hvcmVkIHRvIHRoZSBldmVudCBsb2csIG5vdCB0aGlzIGxhdGVyXG4gICAgICAgICAgLy8gY2xhaW0gc2l0ZS5cbiAgICAgICAgICByZXR1cm4gbmV4dERlbGl2ZXJ5LmNsYWltKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50TG9nRW1wdHkpIHtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHByb21pc2VzLnB1c2gocmVzb2x2ZXJzKTtcblxuICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgaG9vaydzXG4gICAgLy8gcmVnaXN0cmF0aW9uIG91dGNvbWU6IHRoZSBjb25mbGljdGluZyBgUnVuYCB3aGVuIHRoZSB0b2tlbiBpcyBvd25lZFxuICAgIC8vIGJ5IGFub3RoZXIgYWN0aXZlIGhvb2ssIGBudWxsYCBvbmNlIHRoaXMgaG9vaydzIHJlZ2lzdHJhdGlvbiBpc1xuICAgIC8vIGNvbW1pdHRlZC4gQm90aCBmYXN0LXBhdGhzIHNldHRsZSB0aHJvdWdoIGBjdHgucHJvbWlzZVF1ZXVlYCBzb1xuICAgIC8vIHJlc29sdXRpb24gb3JkZXIgYWx3YXlzIG1hdGNoZXMgZXZlbnQtbG9nIG9yZGVyLlxuICAgIGZ1bmN0aW9uIGNyZWF0ZUdldENvbmZsaWN0UHJvbWlzZSgpOiBQcm9taXNlPFJ1bjx1bmtub3duPiB8IG51bGw+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8UnVuPHVua25vd24+IHwgbnVsbD4oKTtcblxuICAgICAgaWYgKGhhc0NyZWF0ZWQpIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZXJzLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDb25mbGljdCkge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoY29uZmxpY3RSdW5SZWYpIHtcbiAgICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKGNvbmZsaWN0UnVuUmVmKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZXJzLnJlamVjdChjb25mbGljdEVycm9yUmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBxdWV1ZUl0ZW0uaGFzQ29uZmxpY3RBd2FpdGVyID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50TG9nRW1wdHkpIHtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGdldENvbmZsaWN0UHJvbWlzZXMucHVzaChyZXNvbHZlcnMpO1xuICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwb3NlIHRoZSBob29rXG4gICAgZnVuY3Rpb24gZGlzcG9zZUhvb2soKTogdm9pZCB7XG4gICAgICBpZiAoaXNEaXNwb3NlZCkge1xuICAgICAgICByZXR1cm47IC8vIEFscmVhZHkgZGlzcG9zZWQsIG5vdGhpbmcgdG8gZG9cbiAgICAgIH1cbiAgICAgIGlzRGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgICAvLyBJZiB0aGUgZXZlbnQgbG9nIGFscmVhZHkgY29udGFpbnMgaG9va19kaXNwb3NlZCwgdGhpcyBpcyBhIHJlcGxheSDigJQgbm8tb3BcbiAgICAgIGlmIChoYXNEaXNwb3NlZEV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRpc3Bvc2VkIGZsYWcgb24gdGhlIGV4aXN0aW5nIHF1ZXVlIGl0ZW1cbiAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBxdWV1ZUl0ZW0uZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBEcmFpbiBhbnkgcGVuZGluZyBwcm9taXNlcyB0aGF0IGFyZSB3YWl0aW5nIGZvciBwYXlsb2Fkcy5cbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgcHJvbWlzZXMgY3JlYXRlZCBieSBgYXdhaXQgaG9va2Agb3IgdGhlIGFzeW5jIGl0ZXJhdG9yJ3NcbiAgICAgIC8vIGB5aWVsZCBhd2FpdCB0aGlzYCB3b3VsZCBoYW5nIGZvcmV2ZXIgc2luY2UgdGhlIGV2ZW50IGNvbnN1bWVyIHdpbGxcbiAgICAgIC8vIG5ldmVyIGRlbGl2ZXIgYW5vdGhlciBob29rX3JlY2VpdmVkIGFmdGVyIGRpc3Bvc2FsLlxuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHdlYmhvb2tMb2dnZXIuZGVidWcoJ0hvb2sgZGlzcG9zZWQnLCB7IGNvcnJlbGF0aW9uSWQsIHRva2VuIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGhvb2s6IEhvb2s8VD4gPSB7XG4gICAgICB0b2tlbixcblxuICAgICAgZ2V0Q29uZmxpY3QoKTogUHJvbWlzZTxSdW48dW5rbm93bj4gfCBudWxsPiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVHZXRDb25mbGljdFByb21pc2UoKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UaGVuUHJvcGVydHk6IEludGVudGlvbmFsbHkgdGhlbmFibGVcbiAgICAgIHRoZW48VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICAgICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgICAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbFxuICAgICAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVIb29rUHJvbWlzZSgpLnRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpO1xuICAgICAgfSxcblxuICAgICAgLy8gU3VwcG9ydCBgZm9yIGF3YWl0IChjb25zdCBwYXlsb2FkIG9mIGhvb2spIHsg4oCmIH1gIHN5bnRheFxuICAgICAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHdoaWxlICghaXNEaXNwb3NlZCkge1xuICAgICAgICAgIHlpZWxkIGF3YWl0IHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGRpc3Bvc2U6IGRpc3Bvc2VIb29rLFxuXG4gICAgICBbU3ltYm9sLmRpc3Bvc2VdOiBkaXNwb3NlSG9vayxcbiAgICB9O1xuXG4gICAgLy8gQWxzbyByZWdpc3RlciB3aXRoIHRoZSBWTSdzIFN5bWJvbC5kaXNwb3NlIHNvIGB1c2luZ2Agd29ya3MgaW5zaWRlXG4gICAgLy8gdGhlIHdvcmtmbG93IHNhbmRib3ggKHRoZSBWTSBtYXkgaGF2ZSBhIHBvbHlmaWxsZWQgU3ltYm9sLmRpc3Bvc2VcbiAgICAvLyB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgaG9zdCdzKS5cbiAgICBjb25zdCB2bURpc3Bvc2UgPSBjdHguZ2xvYmFsVGhpcy5TeW1ib2wuZGlzcG9zZTtcbiAgICBpZiAodm1EaXNwb3NlICYmIHZtRGlzcG9zZSAhPT0gU3ltYm9sLmRpc3Bvc2UpIHtcbiAgICAgIChob29rIGFzIGFueSlbdm1EaXNwb3NlXSA9IGRpc3Bvc2VIb29rO1xuICAgIH1cblxuICAgIHJldHVybiBob29rO1xuICB9O1xufVxuIl19
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHFCQUFxQixHQUN0QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFFTCxtQkFBbUIsRUFDbkIsYUFBYSxHQUNkLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQzNCLEdBQWdDLEVBQ2hDLGdCQUFvQztJQUVwQyxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBSXRELENBQUM7SUFDZCxNQUFNLFdBQVcsR0FBSSxRQUFnQixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM5RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFB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ICBSZXBsYXlEaXZlcmdlbmNlRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuaW1wb3J0IHtcbiAgdHlwZSBQcm9taXNlV2l0aFJlc29sdmVycyxcbiAgcGFyc2VEdXJhdGlvblRvRGF0ZSxcbiAgd2l0aFJlc29sdmVycyxcbn0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSG9va0NvbmZsaWN0RXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZ2V0U2VyaWFsaXphdGlvbkNsYXNzLCBSVU5fQ0xBU1NfSUQgfSBmcm9tICcuLi9jbGFzcy1zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgSG9vaywgSG9va09wdGlvbnMgfSBmcm9tICcuLi9jcmVhdGUtaG9vay5qcyc7XG5pbXBvcnQgeyBFdmVudENvbnN1bWVyUmVzdWx0IH0gZnJvbSAnLi4vZXZlbnRzLWNvbnN1bWVyLmpzJztcbmltcG9ydCB7IFdvcmtmbG93U3VzcGVuc2lvbiB9IGZyb20gJy4uL2dsb2JhbC5qcyc7XG5pbXBvcnQgeyB3ZWJob29rTG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGF3YWl0RWFybGllckRlbGl2ZXJpZXMsXG4gIHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyLFxuICBzY2hlZHVsZVdoZW5JZGxlLFxuICB0eXBlIFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1biB9IGZyb20gJy4uL3J1bnRpbWUvcnVuLmpzJztcbmltcG9ydCB7IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgYFJ1bmAgaGFuZGxlIGZvciB0aGUgcnVuIHRoYXQgb3ducyBhIGNvbmZsaWN0aW5nIGhvb2tcbiAqIHRva2VuLCBmb3IgcmVzb2x1dGlvbiB0aHJvdWdoIGBob29rLmdldENvbmZsaWN0KClgLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHRocm91Z2ggdGhlIHNlcmlhbGl6YXRpb24gY2xhc3MgcmVnaXN0cnkgb25cbiAqIHRoZSBWTSdzIGdsb2JhbFRoaXMsIHRoZSBzYW1lIGNoYW5uZWwgdGhhdCByZXZpdmVzIHNlcmlhbGl6ZWQgYFJ1bmBcbiAqIGluc3RhbmNlcyAoZS5nLiBgc3RhcnQoKWAgcmV0dXJuIHZhbHVlcyBjcm9zc2luZyBmcm9tIGEgc3RlcCBpbnRvIHRoZVxuICogd29ya2Zsb3cpLiBUaGUgcmVnaXN0ZXJlZCBjbGFzcyBpcyB0aGUgVk0gYnVuZGxlJ3MgcGx1Z2luLWNvbXBpbGVkXG4gKiBgUnVuYCwgd2hvc2UgbWV0aG9kcyBhcmUgZHVyYWJsZSBzdGVwIHByb3hpZXMgKHNhZmUgdG8gY2FsbCBmcm9tXG4gKiB3b3JrZmxvdyBjb2RlKSwgYW5kIGNvbnN0cnVjdGlvbiBnb2VzIHRocm91Z2ggaXRzXG4gKiBgV09SS0ZMT1dfREVTRVJJQUxJWkVgIGhvb2ssIGV4YWN0bHkgYXMgdGhlIGBJbnN0YW5jZWAgcmV2aXZlciB3b3VsZC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIGEgcmVhbCBgUnVuYCBjYW5ub3QgYmUgY29uc3RydWN0ZWQ6IHRoZSBjb25mbGljdFxuICogZXZlbnQgbGFja3MgYGNvbmZsaWN0aW5nUnVuSWRgICh3cml0dGVuIGJ5IGFuIG9sZCB3b3JsZCksIG9yIHRoZSBWTSdzXG4gKiByZWdpc3RyeSBoYXMgbm8gYFJ1bmAgKGEgY29udGV4dCB0aGF0IG5ldmVyIGV2YWx1YXRlZCB0aGVcbiAqIHdvcmtmbG93LW1vZGUgYGNyZWF0ZS1ob29rYCBtb2R1bGUsIHdoaWNoIGFsaWFzZXMgaXQgdW5kZXJcbiAqIGBSVU5fQ0xBU1NfSURgKS4gYGdldENvbmZsaWN0YCBhd2FpdGVycyB0aGVuIHJlamVjdCB3aXRoXG4gKiBgSG9va0NvbmZsaWN0RXJyb3JgIGluc3RlYWQgb2YgcmVzb2x2aW5nIHdpdGggYSB2YWx1ZSB0aGF0IGRvZXNuJ3RcbiAqIGhvbm9yIHRoZSBgUnVuYCBjb250cmFjdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29uZmxpY3RpbmdSdW4oXG4gIGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxuICBjb25mbGljdGluZ1J1bklkOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFJ1bjx1bmtub3duPiB8IG51bGwge1xuICBpZiAodHlwZW9mIGNvbmZsaWN0aW5nUnVuSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgUnVuQ2xhc3MgPSBnZXRTZXJpYWxpemF0aW9uQ2xhc3MoUlVOX0NMQVNTX0lELCBjdHguZ2xvYmFsVGhpcykgYXNcbiAgICB8IChhYnN0cmFjdCBuZXcgKFxuICAgICAgICAuLi5hcmdzOiBuZXZlclxuICAgICAgKSA9PiBSdW48dW5rbm93bj4pXG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlc2VyaWFsaXplID0gKFJ1bkNsYXNzIGFzIGFueSk/LltXT1JLRkxPV19ERVNFUklBTElaRV07XG4gIGlmICh0eXBlb2YgZGVzZXJpYWxpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZGVzZXJpYWxpemUuY2FsbChSdW5DbGFzcywgeyBydW5JZDogY29uZmxpY3RpbmdSdW5JZCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNyZWF0ZUhvb2soY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUhvb2tJbXBsPFQgPSBhbnk+KG9wdGlvbnM6IEhvb2tPcHRpb25zID0ge30pOiBIb29rPFQ+IHtcbiAgICAvLyBSZWplY3QgYW4gZXhwbGljaXQgZW1wdHktc3RyaW5nIHRva2VuLiBBIHRva2VuIG11c3QgZWl0aGVyIGJlIG9taXR0ZWRcbiAgICAvLyAob3IgYHVuZGVmaW5lZGAvYG51bGxgKSB0byBnZXQgYSBnZW5lcmF0ZWQgb25lLCBvciBiZSBhblxuICAgIC8vIGV4cGxpY2l0IG5vbi1lbXB0eSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyBhbG1vc3QgYWx3YXlzIGFuXG4gICAgLy8gYWNjaWRlbnRhbCB2YWx1ZSAoZS5nLiBhbiB1bnNldCB2YXJpYWJsZSkgYW5kIHdvdWxkIG90aGVyd2lzZSBzbGlwXG4gICAgLy8gdGhyb3VnaCB0aGUgYD8/YCBiZWxvdyAod2hpY2ggb25seSBmYWxscyBiYWNrIGZvciBudWxsaXNoIHZhbHVlcykgYW5kXG4gICAgLy8gYmUgdXNlZCBhcyBhIG1lYW5pbmdsZXNzLCBub24tZGV0ZXJtaW5pc3RpYyB0b2tlbi5cbiAgICBpZiAob3B0aW9ucy50b2tlbiA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2BjcmVhdGVIb29rKClgIHdhcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSBzdHJpbmcgdG9rZW4uIFBhc3MgYSBub24tZW1wdHkgdG9rZW4sIG9yIG9taXQgdGhlIGB0b2tlbmAgb3B0aW9uIHRvIHVzZSBhIGdlbmVyYXRlZCBvbmUuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmlzV2ViaG9vayA9PT0gdHJ1ZSAmJlxuICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxfbWluUmV0ZW50aW9uICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1dlYmhvb2sgaG9va3MgZG8gbm90IHN1cHBvcnQgYGV4cGVyaW1lbnRhbF9taW5SZXRlbnRpb25gLiBVc2UgYSBub24td2ViaG9vayBgY3JlYXRlSG9vaygpYCB3aXRoIGByZXN1bWVIb29rKClgLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxfbWluUmV0ZW50aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGN0eC53b3JsZENhcGFiaWxpdGllcz8uaG9va1JldGVudGlvbj8uYWN0aXZlICE9PSB0cnVlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRmF0YWxFcnJvcihcbiAgICAgICAgJ1RoZSBjb25maWd1cmVkIFdvcmxkIGRvZXMgbm90IHN1cHBvcnQgYGV4cGVyaW1lbnRhbF9taW5SZXRlbnRpb25gIGZvciBIb29rcy4nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGhvb2sgSUQgYW5kIHRva2VuXG4gICAgY29uc3QgY29ycmVsYXRpb25JZCA9IGBob29rXyR7Y3R4LmdlbmVyYXRlVWxpZCgpfWA7XG4gICAgY29uc3QgdG9rZW4gPSBvcHRpb25zLnRva2VuID8/IGN0eC5nZW5lcmF0ZU5hbm9pZCgpO1xuICAgIGNvbnN0IHRva2VuUmV0ZW50aW9uVW50aWwgPVxuICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxfbWluUmV0ZW50aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBwYXJzZUR1cmF0aW9uVG9EYXRlKG9wdGlvbnMuZXhwZXJpbWVudGFsX21pblJldGVudGlvbik7XG5cbiAgICAvLyBBZGQgaG9vayBjcmVhdGlvbiB0byBpbnZvY2F0aW9ucyBxdWV1ZSAodXNpbmcgTWFwIGZvciBPKDEpIG9wZXJhdGlvbnMpXG4gICAgY29uc3QgaXNXZWJob29rID0gb3B0aW9ucy5pc1dlYmhvb2sgPz8gZmFsc2U7XG5cbiAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5zZXQoY29ycmVsYXRpb25JZCwge1xuICAgICAgdHlwZTogJ2hvb2snLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgdG9rZW5SZXRlbnRpb25VbnRpbCxcbiAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgaXNXZWJob29rLFxuICAgIH0pO1xuXG4gICAgLy8gUXVldWUgb2YgYnVmZmVyZWQgaG9vayBwYXlsb2FkcyAocmVjZWl2ZWQgYmVmb3JlIHRoZSB3b3JrZmxvdyBhd2FpdGVkXG4gICAgLy8gdGhlIGhvb2spLiBFYWNoIGVudHJ5J3MgYGNsYWltKClgIGJ1aWxkcyB0aGUgY29uc3VtZXItZmFjaW5nIHByb21pc2VcbiAgICAvLyBmcm9tIHRoZSBjYXB0dXJlZCBoeWRyYXRpb24gb3V0Y29tZSBhbmQgb3JkZXJzIGl0IGRldGVybWluaXN0aWNhbGx5IGJ5XG4gICAgLy8gZXZlbnQtbG9nIHBvc2l0aW9uIGFnYWluc3QgYW55IGNvbmN1cnJlbnQgYnJhbmNoLWRlY2lkaW5nIHJlc29sdXRpb25cbiAgICAvLyAoc2VlIGBjdHgucGVuZGluZ0RlbGl2ZXJ5QmFycmllcnNgKS5cbiAgICBjb25zdCBwYXlsb2Fkc1F1ZXVlOiB7IGNsYWltOiAoKSA9PiBQcm9taXNlPFQ+IH1bXSA9IFtdO1xuXG4gICAgLy8gUXVldWUgb2YgcHJvbWlzZXMgdGhhdCByZXNvbHZlIHRvIHRoZSBuZXh0IGhvb2sgcGF5bG9hZFxuICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltdID0gW107XG5cbiAgICAvLyBRdWV1ZSBvZiBwcm9taXNlcyB0aGF0IHJlc29sdmUgb25jZSBob29rIHJlZ2lzdHJhdGlvbiBpcyBjb25maXJtZWRcbiAgICAvLyAod2l0aCBgbnVsbGApIG9yIGEgdG9rZW4gY29uZmxpY3QgaXMgZGV0ZWN0ZWQgKHdpdGggdGhlIGNvbmZsaWN0aW5nXG4gICAgLy8gYFJ1bmApLiBUaGVzZSBiYWNrIHRoZSBgaG9vay5nZXRDb25mbGljdCgpYCBnZXR0ZXIuXG4gICAgY29uc3QgZ2V0Q29uZmxpY3RQcm9taXNlczogUHJvbWlzZVdpdGhSZXNvbHZlcnM8UnVuPHVua25vd24+IHwgbnVsbD5bXSA9IFtdO1xuXG4gICAgbGV0IGV2ZW50TG9nRW1wdHkgPSBmYWxzZTtcblxuICAgIC8vIFRyYWNrIGlmIHRoZSBldmVudCBsb2cgY29uZmlybXMgaG9vayBjcmVhdGlvbiBoYXBwZW5lZFxuICAgIGxldCBoYXNDcmVhdGVkID0gZmFsc2U7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgZXZlbnQgbG9nIGNvbmZpcm1zIGRpc3Bvc2FsIGhhcHBlbmVkIChyZXBsYXkgbm8tb3ApXG4gICAgbGV0IGhhc0Rpc3Bvc2VkRXZlbnQgPSBmYWxzZTtcblxuICAgIC8vIFRyYWNrIGlmIHdlIGhhdmUgYSBjb25mbGljdCBzbyB3ZSBjYW4gcmVqZWN0IGZ1dHVyZSBhd2FpdHNcbiAgICBsZXQgaGFzQ29uZmxpY3QgPSBmYWxzZTtcbiAgICBsZXQgY29uZmxpY3RFcnJvclJlZjogSG9va0NvbmZsaWN0RXJyb3IgfCBudWxsID0gbnVsbDtcbiAgICAvLyBUaGUgY29uZmxpY3RpbmcgcnVuIGhhbmRsZSwgc2hhcmVkIGJ5IGV2ZXJ5IGBnZXRDb25mbGljdGAgYXdhaXQgc29cbiAgICAvLyByZXBlYXRlZCBhd2FpdHMgb2JzZXJ2ZSB0aGUgc2FtZSBpbnN0YW5jZSBkZXRlcm1pbmlzdGljYWxseS5cbiAgICBsZXQgY29uZmxpY3RSdW5SZWY6IFJ1bjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gTGF6eS1yZXN1bWUgZGVkdXA6IGByZXN1bWVIb29rKClgIG1pbnRzIGEgYHJlc3VtZUlkYCBwZXIgcmVzdW1lXG4gICAgLy8gYXR0ZW1wdCBhbmQgc3RhbXBzIGl0IG9uIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnQuIFdoZW4gdGhlIGRpcmVjdFxuICAgIC8vIGV2ZW50IHdyaXRlIGZhaWxzIHRyYW5zaWVudGx5LCB0aGUgcnVudGltZSBtYXRlcmlhbGl6ZXMgdGhlIGV2ZW50IGZyb21cbiAgICAvLyB0aGUgcXVldWUgcGF5bG9hZCBpbnN0ZWFkLCBhbmQgYmVjYXVzZSBgaG9va19yZWNlaXZlZGAgaGFzIG5vXG4gICAgLy8gc3RvcmFnZS1sZXZlbCB1bmlxdWVuZXNzIGNvbnN0cmFpbnQsIGNvbmN1cnJlbnQgcmVkZWxpdmVyeSBvZiB0aGUgc2FtZVxuICAgIC8vIHF1ZXVlIG1lc3NhZ2UgY2FuIGNvbW1pdCB0aGF0IG1hdGVyaWFsaXphdGlvbiB0d2ljZS4gVHdvIHJvd3MgZm9yIE9ORVxuICAgIC8vIHJlc3VtZSBhdHRlbXB0IHRoZW4gc2hhcmUgYSBgcmVzdW1lSWRgIChkaXN0aW5jdCByZXN1bWUgYXR0ZW1wdHMgbmV2ZXJcbiAgICAvLyBkbyksIHNvIHJlcGxheSBkZWxpdmVycyBvbmx5IHRoZSBmaXJzdC1pbi1sb2cgb2NjdXJyZW5jZS4gVGhpcyBpcyBhXG4gICAgLy8gcHVyZSBmdW5jdGlvbiBvZiB0aGUgcGVyc2lzdGVkIGV2ZW50IGxvZywga2VlcGluZyByZXBsYXkgZGV0ZXJtaW5pc3RpYy5cbiAgICAvL1xuICAgIC8vIFNjb3BlOiB0aGlzIGlzIGRlZmVuc2UtaW4tZGVwdGggb3ZlciB0aGUgcGVyc2lzdGVkIGxvZywgbm90IGFcbiAgICAvLyBjcm9zcy1pbnZvY2F0aW9uIGV4YWN0bHktb25jZSBndWFyYW50ZWU6IGFuIGludm9jYXRpb24gcmVwbGF5aW5nIGFcbiAgICAvLyBzbmFwc2hvdCB0YWtlbiBiZWZvcmUgdGhlIGR1cGxpY2F0ZSByb3cgY29tbWl0dGVkIG9ubHkgc2VlcyBvbmUgcm93LFxuICAgIC8vIHNvIHR3byBDT05DVVJSRU5UIGludm9jYXRpb25zIGNhbiBlYWNoIGRlbGl2ZXIgZnJvbSB0aGVpciBvd25cbiAgICAvLyBzbmFwc2hvdC4gRXZlcnkgcmVwbGF5IGZyb20gYSBsb2cgY29udGFpbmluZyBib3RoIHJvd3MgKGkuZS4gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBkZWxpdmVyaWVzKSBkZWR1cHMuIFRoZSBjb3JyZWN0bmVzcyBib3VuZGFyeSB0aGF0IGNsb3Nlc1xuICAgIC8vIHRoZSBjb25jdXJyZW50IHdpbmRvdyBpcyB0aGUgc3RvcmFnZS1sZXZlbCAocnVuSWQsIHJlc3VtZUlkKVxuICAgIC8vIGNvbnN0cmFpbnQgYXJyaXZpbmcgd2l0aCB0aGUgcGFyYWxsZWwtcmVzdW1lIHN1Y2Nlc3NvciB3b3JrOyB0aGlzIHNldFxuICAgIC8vIHN0YXlzIHVzZWZ1bCBhZnRlciB0aGF0IGxhbmRzLCBmb3IgbG9ncyB3cml0dGVuIGJlZm9yZSBpdCBkZXBsb3llZC5cbiAgICBjb25zdCBzZWVuUmVzdW1lSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGNvbnN1bWVyIHNldHVwJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgdGhlcmUgYXJlIHByb21pc2VzIHdhaXRpbmcsXG4gICAgICAvLyBpdCBtZWFucyB0aGUgaG9vayBoYXMgYmVlbiBhd2FpdGVkLCBidXQgYW4gaW5jb21pbmcgcGF5bG9hZCBoYXMgbm90IHlldCBiZWVuIHJlY2VpdmVkLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgd29ya2Zsb3cgc2hvdWxkIGJlIHN1c3BlbmRlZCB1bnRpbCB0aGUgaG9vayBpcyByZXN1bWVkLlxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBldmVudExvZ0VtcHR5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHByb21pc2VzLmxlbmd0aCA+IDAgJiYgcGF5bG9hZHNRdWV1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgICAgKGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID4gMCAmJiAhaGFzQ3JlYXRlZCAmJiAhaGFzQ29uZmxpY3QpXG4gICAgICAgICkge1xuICAgICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXZlbnRUb2tlbiA9XG4gICAgICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAmJiAndG9rZW4nIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgID8gZXZlbnQuZXZlbnREYXRhLnRva2VuXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0eXBlb2YgZXZlbnRUb2tlbiA9PT0gJ3N0cmluZycgJiYgZXZlbnRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogaG9vayBldmVudCAke2V2ZW50LmV2ZW50VHlwZX0gZm9yICR7Y29ycmVsYXRpb25JZH0gYmVsb25ncyB0byB0b2tlbiBcIiR7ZXZlbnRUb2tlbn1cIiwgYnV0IHRoZSBjdXJyZW50IGhvb2sgY29uc3VtZXIgZXhwZWN0cyBcIiR7dG9rZW59XCJgLFxuICAgICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGhvb2tfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgaG9vayBhcyBhbHJlYWR5IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgcXVldWVJdGVtLnRva2VuUmV0ZW50aW9uVW50aWwgPSBldmVudC5ldmVudERhdGEudG9rZW5SZXRlbnRpb25VbnRpbDtcbiAgICAgICAgfVxuICAgICAgICBoYXNDcmVhdGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwZW5kaW5nR2V0Q29uZmxpY3RQcm9taXNlcyA9IGdldENvbmZsaWN0UHJvbWlzZXMuc2xpY2UoKTtcbiAgICAgICAgZ2V0Q29uZmxpY3RQcm9taXNlcy5sZW5ndGggPSAwO1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc29sdmVyIG9mIHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzKSB7XG4gICAgICAgICAgICByZXNvbHZlci5yZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBob29rX2NvbmZsaWN0IGV2ZW50IC0gYW5vdGhlciB3b3JrZmxvdyBpcyB1c2luZyB0aGlzIHRva2VuXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19jb25mbGljdCcpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgaG9vayBmcm9tIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZVxuICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgLy8gU3RvcmUgdGhlIGNvbmZsaWN0IGV2ZW50IHNvIHdlIGNhbiByZWplY3QgYW55IGF3YWl0ZWQgcHJvbWlzZXMuXG4gICAgICAgIC8vIENoYWluIHRocm91Z2ggcHJvbWlzZVF1ZXVlIHRvIGVuc3VyZSBkZXRlcm1pbmlzdGljIG9yZGVyaW5nLlxuICAgICAgICBjb25zdCBjb25mbGljdEV2ZW50ID0gZXZlbnQgYXMgSG9va0NvbmZsaWN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IGNvbmZsaWN0RXJyb3IgPSBuZXcgSG9va0NvbmZsaWN0RXJyb3IoXG4gICAgICAgICAgY29uZmxpY3RFdmVudC5ldmVudERhdGEudG9rZW4sXG4gICAgICAgICAgY29uZmxpY3RFdmVudC5ldmVudERhdGEuY29uZmxpY3RpbmdSdW5JZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1hcmsgdGhhdCB3ZSBoYXZlIGEgY29uZmxpY3Qgc28gZnV0dXJlIGF3YWl0cyBhbHNvIHJlamVjdFxuICAgICAgICBoYXNDb25mbGljdCA9IHRydWU7XG4gICAgICAgIGNvbmZsaWN0RXJyb3JSZWYgPSBjb25mbGljdEVycm9yO1xuICAgICAgICBjb25mbGljdFJ1blJlZiA9IGNyZWF0ZUNvbmZsaWN0aW5nUnVuKFxuICAgICAgICAgIGN0eCxcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS5jb25mbGljdGluZ1J1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgZHJhaW4gcGVuZGluZyBwcm9taXNlcyBzeW5jaHJvbm91c2x5IHNvIHRoZSBudWxsIGV2ZW50XG4gICAgICAgIC8vIGhhbmRsZXIgd29uJ3Qgc2VlIHRoZW0gYW5kIHRyaWdnZXIgYSBzcHVyaW91cyBXb3JrZmxvd1N1c3BlbnNpb24uXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgc2V0dGxlbWVudHMgYXJlIGRlZmVycmVkIHRocm91Z2ggcHJvbWlzZVF1ZXVlIGZvclxuICAgICAgICAvLyBvcmRlcmluZy4gUGF5bG9hZCBhd2FpdGVycyByZWplY3Qgd2l0aCBIb29rQ29uZmxpY3RFcnJvciwgd2hpbGVcbiAgICAgICAgLy8gYGdldENvbmZsaWN0YCBhd2FpdGVycyByZXNvbHZlIHdpdGggdGhlIGNvbmZsaWN0aW5nIHJ1biBzbyB0aGVcbiAgICAgICAgLy8gd29ya2Zsb3cgY2FuIGJyYW5jaCBvbiB0aGUgY29uZmxpY3Qgd2l0aG91dCB0aHJvd2luZy4gV2hlbiBub1xuICAgICAgICAvLyByZWFsIGBSdW5gIGNhbiBiZSBjb25zdHJ1Y3RlZCAoc2VlIGBjcmVhdGVDb25mbGljdGluZ1J1bmApLFxuICAgICAgICAvLyBgZ2V0Q29uZmxpY3RgIGF3YWl0ZXJzIHJlamVjdCB3aXRoIHRoZSBIb29rQ29uZmxpY3RFcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIG9mIHJlc29sdmluZyB3aXRoIGEgdmFsdWUgdGhhdCBkb2Vzbid0IGhvbm9yIHRoZSBgUnVuYCBjb250cmFjdC5cbiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2VzID0gcHJvbWlzZXMuc2xpY2UoKTtcbiAgICAgICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgY29uc3QgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMgPSBnZXRDb25mbGljdFByb21pc2VzLnNsaWNlKCk7XG4gICAgICAgIGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID0gMDtcblxuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc29sdmVyIG9mIHBlbmRpbmdQcm9taXNlcykge1xuICAgICAgICAgICAgcmVzb2x2ZXIucmVqZWN0KGNvbmZsaWN0RXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc29sdmVyIG9mIHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzKSB7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3RSdW5SZWYpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZShjb25mbGljdFJ1blJlZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlci5yZWplY3QoY29uZmxpY3RFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnKSB7XG4gICAgICAgIC8vIERyb3AgZHVwbGljYXRlIGRlbGl2ZXJpZXMgb2YgdGhlIHNhbWUgcmVzdW1lIGF0dGVtcHQgKHNhbWVcbiAgICAgICAgLy8gYHJlc3VtZUlkYDsgc2VlIGBzZWVuUmVzdW1lSWRzYCBhYm92ZSkuIEV2ZW50cyB3aXRob3V0IGFcbiAgICAgICAgLy8gYHJlc3VtZUlkYCAob2xkZXIgU0RLcywgbGVnYWN5IHNwZWMgdmVyc2lvbnMpIGFyZSBuZXZlciBkZWR1cGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBEZWR1cCBvZmYgdGhlIHRvcC1sZXZlbCBgcmVzdW1lSWRgIHRoZSBiYWNrZW5kIGhvaXN0cyBvbnRvIHRoZSBldmVudFxuICAgICAgICAvLyBhcyBhIGZpcnN0LWNsYXNzIGNvbHVtbi4gQW4gZWFybGllciB1bnJlbGVhc2VkIGJ1aWxkIGFkZGl0aW9uYWxseVxuICAgICAgICAvLyB3cm90ZSBpdCBuZXN0ZWQgdW5kZXIgYGV2ZW50RGF0YWAsIGJ1dCB0aGF0IGZvcm0gbmV2ZXIgc2hpcHBlZCBhbmQgaXNcbiAgICAgICAgLy8gc3RyaXBwZWQgYnkgYEV2ZW50U2NoZW1hYCBwYXJzaW5nICh0aGUgYGhvb2tfcmVjZWl2ZWRgIGV2ZW50RGF0YVxuICAgICAgICAvLyBzY2hlbWEgZG9lcyBub3QgZGVjbGFyZSBpdCksIHNvIHRoZXJlIGlzIG5vIHBlcnNpc3RlZCBuZXN0ZWQgZm9ybSB0b1xuICAgICAgICAvLyBmYWxsIGJhY2sgdG8uXG4gICAgICAgIGNvbnN0IHJlc3VtZUlkID0gZXZlbnQucmVzdW1lSWQ7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdW1lSWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHNlZW5SZXN1bWVJZHMuaGFzKHJlc3VtZUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW5SZXN1bWVJZHMuYWRkKHJlc3VtZUlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZ2lzdGVyIGEgJ2hvb2snIGRlbGl2ZXJ5IGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGxvZyBpbmRleCBzbyBhXG4gICAgICAgIC8vIGxhdGVyLWluLWxvZyBgd2FpdF9jb21wbGV0ZWRgIG9yIHN0ZXAgcmVzdWx0IGlzIGRlbGl2ZXJlZCBvbmx5IGFmdGVyXG4gICAgICAgIC8vIHRoaXMgaG9vaywgYW5kIHNvIHRoaXMgaG9vayBpcyBkZWxpdmVyZWQgb25seSBhZnRlciBldmVyeVxuICAgICAgICAvLyBlYXJsaWVyLWluLWxvZyBgd2FpdF9jb21wbGV0ZWRgIGFuZCBzdGVwIHJlc3VsdCwga2VlcGluZyBhbnlcbiAgICAgICAgLy8gYFByb21pc2UucmFjZWAgKG9yIGNvbmN1cnJlbnQtYnJhbmNoIFVMSUQgYWxsb2NhdGlvbikgZGV0ZXJtaW5pc3RpY1xuICAgICAgICAvLyBhbmQgYWxpZ25lZCB3aXRoIHRoZSBjb21taXR0ZWQgZXZlbnQgbG9nLCByZWdhcmRsZXNzIG9mXG4gICAgICAgIC8vIG1pY3JvdGFzay1ob3AgY291bnQsIGh5ZHJhdGlvbiB0aW1lLCBvciByYWNlLWFyZ3VtZW50IG9yZGVyLlxuICAgICAgICAvLyBTZWUgYGN0eC5wZW5kaW5nRGVsaXZlcnlCYXJyaWVyc2AuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSBiYXJyaWVyIGlzIHJlZ2lzdGVyZWQgQVJNRUQgb25seSB3aGVuIGEgY29uc3VtZXIgaXMgYWxyZWFkeVxuICAgICAgICAvLyBhd2FpdGluZywgc28gdGhpcyBwYXlsb2FkIGlzIGNvbW1pdHRlZCB0byByZWFjaGluZyB0aGUgd29ya2Zsb3cuIEFcbiAgICAgICAgLy8gYnVmZmVyZWQgcGF5bG9hZCBpcyByZWdpc3RlcmVkIHVuYXJtZWQgYW5kIGFybWVkIGJ5IGBjbGFpbSgpYDogdW50aWxcbiAgICAgICAgLy8gYSBjb25zdW1lciB0YWtlcyBpdCwgYSBsYXRlciBzdGVwIHJlc3VsdCBtdXN0IG5vdCBiZSBvcmRlcmVkIGJlaGluZFxuICAgICAgICAvLyBpdCAoc2VlIGBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzYCkuXG4gICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBjdHguZXZlbnRzQ29uc3VtZXIuZXZlbnRJbmRleDtcbiAgICAgICAgY29uc3QgaGFzV2FpdGluZ0NvbnN1bWVyID0gcHJvbWlzZXMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgYmFycmllciA9IHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyKGN0eCwgZXZlbnRJbmRleCwgJ2hvb2snLCB7XG4gICAgICAgICAgYXJtZWQ6IGhhc1dhaXRpbmdDb25zdW1lcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhhc1dhaXRpbmdDb25zdW1lcikge1xuICAgICAgICAgIC8vIEEgY29uc3VtZXIgaXMgYWxyZWFkeSBhd2FpdGluZywgc28gdGhpcyBwYXlsb2FkJ3MgZGVsaXZlcnkgaXNcbiAgICAgICAgICAvLyBwaW5uZWQgdG8gdGhpcyBsb2cgcG9zaXRpb246IGNhcHR1cmUgdGhlIGRlZmVycmFsIEhFUkUsIHdoaWxlXG4gICAgICAgICAgLy8gY29uc3VtaW5nIHRoZSBldmVudCwgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGh5ZHJhdGlvbiBzbG90IGJlbG93OlxuICAgICAgICAgIC8vIHNhbWUgcmVhc29uaW5nIGFzIHN0ZXAudHMuIEFuIGVhcmxpZXIgc3RlcCBvciBob29rIHdob3NlIHNsb3QgcnVuc1xuICAgICAgICAgIC8vIGZpcnN0IG9uIHRoaXMgc2VyaWFsIHF1ZXVlIGhhcyB1c3VhbGx5IGRlbGl2ZXJlZCwgYW5kIHNvXG4gICAgICAgICAgLy8gZGVyZWdpc3RlcmVkIGl0cyBiYXJyaWVyLCBiZWZvcmUgdGhpcyBzbG90IGVuZHMuIFJlYWQgdGhlbiwgaXRcbiAgICAgICAgICAvLyB3b3VsZCBiZSBpbnZpc2libGUgYW5kIHRoaXMgcGF5bG9hZCB3b3VsZCBza2lwIGJvdGggdGhlIGdhdGUgQU5EXG4gICAgICAgICAgLy8gYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgJyBtYWNyb3Rhc2sgeWllbGQsIGxldHRpbmcgaXQgb3ZlcnRha2UgdGhlXG4gICAgICAgICAgLy8gYnJhbmNoIHRoYXQgZWFybGllciBkZWxpdmVyeSBqdXN0IHdva2UuIEV2ZXJ5IGV2ZW50IGluIG9uZSBkcmFpblxuICAgICAgICAgIC8vIHdpbmRvdyBpcyBjb25zdW1lZCBiZWZvcmUgYW55IHNsb3QgcnVucywgc28gY2FwdHVyaW5nIGF0XG4gICAgICAgICAgLy8gY29uc3VtcHRpb24gdGltZSBzZWVzIGFsbCBvZiB0aGVtLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIEJVRkZFUkVEIGJyYW5jaCBiZWxvdyBkZWxpYmVyYXRlbHkgZG9lcyBOT1QgZG8gdGhpczsgc2VlIHRoZVxuICAgICAgICAgIC8vIGNvbW1lbnQgb24gYGNsYWltKClgLlxuICAgICAgICAgIGNvbnN0IGVhcmxpZXJEZWxpdmVyZWQgPSBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAgICdob29rJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHByb21pc2VzLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIC8vIEh5ZHJhdGUgdGhyb3VnaCBhIHByb21pc2VRdWV1ZSBzbG90IChzbyBhc3luYyBkZXNlcmlhbGl6YXRpb25cbiAgICAgICAgICAgIC8vIHN0YXlzIGluIGV2ZW50LWxvZyBvcmRlciksIHRoZW4gZGVmZXIgYmVoaW5kIGVhcmxpZXIgd2FpdHMgYW5kXG4gICAgICAgICAgICAvLyBzdGVwcyBiZWZvcmUgcmVzb2x2aW5nLiBUaGUgZGVmZXJyYWwgcnVucyBPRkYgdGhlIHNlcmlhbCBxdWV1ZVxuICAgICAgICAgICAgLy8gKGl0IG1heSB3YWl0IG9uIGFuIGVhcmxpZXIgd2FpdCBvciBzdGVwIGRlbGl2ZXJ5IGFuZCBibG9ja2luZyBhXG4gICAgICAgICAgICAvLyBxdWV1ZSBzbG90IG9uIHRoYXQgd291bGQgZGVhZGxvY2sgdGhlIHF1ZXVlKS5cbiAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgICAgbGV0IGh5ZHJhdGVPdXRjb21lOlxuICAgICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfTtcbiAgICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXBhcmVkID1cbiAgICAgICAgICAgICAgICAgIGF3YWl0IGN0eC5yZXBsYXlQYXlsb2FkQ2FjaGUucHJlcGFyZUV2ZW50UGF5bG9hZChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgJ3BheWxvYWQnLFxuICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudERhdGEucGF5bG9hZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgcHJlcGFyZWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGh5ZHJhdGVPdXRjb21lID0geyBvazogdHJ1ZSwgdmFsdWU6IHBheWxvYWQgYXMgVCB9O1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGVPdXRjb21lID0geyBvazogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdm9pZCBlYXJsaWVyRGVsaXZlcmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJhcnJpZXIubWFya0RlbGl2ZXJlZCgpO1xuICAgICAgICAgICAgICAgIGlmIChoeWRyYXRlT3V0Y29tZS5vaykge1xuICAgICAgICAgICAgICAgICAgbmV4dC5yZXNvbHZlKGh5ZHJhdGVPdXRjb21lLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbmV4dC5yZWplY3QoaHlkcmF0ZU91dGNvbWUuZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gY29uc3VtZXIgaXMgYXdhaXRpbmcgeWV0LiBIeWRyYXRlIHRocm91Z2ggYSBwcm9taXNlUXVldWUgc2xvdFxuICAgICAgICAgIC8vIGF0IHRoaXMgbG9nIHBvc2l0aW9uIGFuZCBwYXJrIHRoZSBPVVRDT01FICh2YWx1ZSBvciBlcnJvcikgZm9yIGFcbiAgICAgICAgICAvLyBsYXRlciBgaXRlcmF0b3IubmV4dCgpYCAvIGBhd2FpdCBob29rYCBjbGFpbS4gV2UgY2FwdHVyZSB0aGVcbiAgICAgICAgICAvLyBvdXRjb21lIHJhdGhlciB0aGFuIGVhZ2VybHkgcmVzb2x2aW5nL3JlamVjdGluZyBhIHByb21pc2Ugbm9cbiAgICAgICAgICAvLyBjb25zdW1lciBoYXMgYXR0YWNoZWQgdG86IGEgcmVqZWN0ZWQgdW5jbGFpbWVkIHByb21pc2UgKGUuZy4gYVxuICAgICAgICAgIC8vIGJ1ZmZlcmVkIGVuY3J5cHRlZCBwYXlsb2FkIHdpdGggbm8ga2V5KSB3b3VsZCBvdGhlcndpc2Ugc3VyZmFjZVxuICAgICAgICAgIC8vIGFzIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gYW5kIGNyYXNoIHRoZSBwcm9jZXNzLiBgY2xhaW0oKWAgYnVpbGRzXG4gICAgICAgICAgLy8gdGhlIGNvbnN1bWVyLWZhY2luZyBwcm9taXNlIG9uIGRlbWFuZC5cbiAgICAgICAgICBsZXQgb3V0Y29tZTpcbiAgICAgICAgICAgIHwgeyBvazogdHJ1ZTsgdmFsdWU6IFQgfVxuICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfVxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgaHlkcmF0ZWQgPSB3aXRoUmVzb2x2ZXJzPHZvaWQ+KCk7XG5cbiAgICAgICAgICBjb25zdCBjbGFpbSA9ICgpOiBQcm9taXNlPFQ+ID0+IHtcbiAgICAgICAgICAgIC8vIEEgY29uc3VtZXIgaGFzIHRha2VuIHRoaXMgcGF5bG9hZCwgc28gaXRzIGRlbGl2ZXJ5IG5vIGxvbmdlclxuICAgICAgICAgICAgLy8gd2FpdHMgb24gd29ya2Zsb3cgY29kZTogbGF0ZXIgc3RlcCByZXN1bHRzIG1heSBub3cgYmUgb3JkZXJlZFxuICAgICAgICAgICAgLy8gYmVoaW5kIGl0LlxuICAgICAgICAgICAgYmFycmllci5hcm0oKTtcbiAgICAgICAgICAgIC8vIFVubGlrZSBldmVyeSBvdGhlciBkZWxpdmVyeSwgdGhlIGRlZmVycmFsIGlzIGV2YWx1YXRlZCBIRVJFLCBhdFxuICAgICAgICAgICAgLy8gY2xhaW0gdGltZSwgcmF0aGVyIHRoYW4gd2hlbiB0aGUgZXZlbnQgd2FzIGNvbnN1bWVkLiBBIGJ1ZmZlcmVkXG4gICAgICAgICAgICAvLyBwYXlsb2FkJ3MgZGVsaXZlcnkgZ2VudWluZWx5IGhhcHBlbnMgd2hlbiB0aGUgd29ya2Zsb3cgcmVhZHMgdGhlXG4gICAgICAgICAgICAvLyBob29rLCB3aGljaCBtYXkgYmUgbWFueSBkZWxpdmVyaWVzIGxhdGVyOyBhIGNvbnN1bXB0aW9uLXRpbWVcbiAgICAgICAgICAgIC8vIHNuYXBzaG90IHdvdWxkIG1ha2UgdGhlIGNsYWltIHdhaXQgb24gKGFuZCBwYXkgdGhlIG1hY3JvdGFza1xuICAgICAgICAgICAgLy8geWllbGQgZm9yKSBiYXJyaWVycyB0aGF0IHdlcmUgcmVsZXZhbnQgdG8gYSBtb21lbnQgdGhpcyBwYXlsb2FkXG4gICAgICAgICAgICAvLyBuZXZlciBwYXJ0aWNpcGF0ZWQgaW4uIFRoYXQgaXMgbm90IHRoZW9yZXRpY2FsOiBpdCBzdGFsbHMgdGhlXG4gICAgICAgICAgICAvLyBzZWNvbmQgcGF5bG9hZCBpbiB0aGUgZTJlIGBob29rV2l0aFNsZWVwV29ya2Zsb3dgIGxvbmcgZW5vdWdoXG4gICAgICAgICAgICAvLyBmb3IgdGhlIHJ1biB0byBzdXNwZW5kIGJlZm9yZSBkZWxpdmVyaW5nIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGh5ZHJhdGVkLnByb21pc2VcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhjdHgsIGV2ZW50SW5kZXgsICdob29rJykpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgICBpZiAob3V0Y29tZSAmJiAhb3V0Y29tZS5vaykge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgb3V0Y29tZS5lcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvdXRjb21lIGFzIHsgb2s6IHRydWU7IHZhbHVlOiBUIH0pLnZhbHVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwcmVwYXJlZCA9IGF3YWl0IGN0eC5yZXBsYXlQYXlsb2FkQ2FjaGUucHJlcGFyZUV2ZW50UGF5bG9hZChcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudElkLFxuICAgICAgICAgICAgICAgICdwYXlsb2FkJyxcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudERhdGEucGF5bG9hZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudERhdGEucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgY3R4Lmdsb2JhbFRoaXMsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgcHJlcGFyZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb3V0Y29tZSA9IHsgb2s6IHRydWUsIHZhbHVlOiBwYXlsb2FkIGFzIFQgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIG91dGNvbWUgPSB7IG9rOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgICBoeWRyYXRlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcGF5bG9hZHNRdWV1ZS5wdXNoKHsgY2xhaW0gfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnKSB7XG4gICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gcmVtb3ZlIGZyb20gcXVldWUgKGxpa2Ugc3RlcF9jb21wbGV0ZWQvd2FpdF9jb21wbGV0ZWQpXG4gICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgLy8gTWFyayB0aGF0IHRoZSBldmVudCBsb2cgY29uZmlybXMgZGlzcG9zYWwgaGFwcGVuZWRcbiAgICAgICAgaGFzRGlzcG9zZWRFdmVudCA9IHRydWU7XG4gICAgICAgIC8vIFdlJ3JlIGRvbmUgcHJvY2Vzc2luZyBhbnkgbW9yZSBldmVudHMgZm9yIHRoaXMgaG9va1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyByZXBsYXkgaW5zdGFsbGVkIGEgZGlmZmVyZW50IGNvbnN1bWVyIHRoYW4gdGhlIHN0b3JlZCBldmVudCBuZWVkcy5cbiAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSBmb3IgaG9vayAke2NvcnJlbGF0aW9uSWR9ICh0b2tlbjogJHt0b2tlbn0pIFwiJHtldmVudC5ldmVudFR5cGV9XCJgLFxuICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgIH0pO1xuXG4gICAgLy8gVHJhY2sgaWYgdGhlIGhvb2sgaGFzIGJlZW4gZGlzcG9zZWRcbiAgICBsZXQgaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBwcm9taXNlIHRoYXQgd2FpdHMgZm9yIHRoZSBuZXh0IGhvb2sgcGF5bG9hZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUhvb2tQcm9taXNlKCk6IFByb21pc2U8VD4ge1xuICAgICAgY29uc3QgcmVzb2x2ZXJzID0gd2l0aFJlc29sdmVyczxUPigpO1xuXG4gICAgICAvLyBJZiB3ZSBoYXZlIGEgY29uZmxpY3QsIHJlamVjdCB0aHJvdWdoIHRoZSBwcm9taXNlUXVldWUgdG8gbWFpbnRhaW5cbiAgICAgIC8vIGRldGVybWluaXN0aWMgb3JkZXJpbmcgd2l0aCBhbnkgcHJpb3IgcXVldWVkIHJlc29sdXRpb25zLlxuICAgICAgaWYgKGhhc0NvbmZsaWN0ICYmIGNvbmZsaWN0RXJyb3JSZWYpIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZXJzLnJlamVjdChjb25mbGljdEVycm9yUmVmKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBheWxvYWRzUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0RGVsaXZlcnkgPSBwYXlsb2Fkc1F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChuZXh0RGVsaXZlcnkpIHtcbiAgICAgICAgICAvLyBUaGUgcGF5bG9hZCB3YXMgaHlkcmF0ZWQgdGhyb3VnaCBhIHByb21pc2VRdWV1ZSBzbG90IGF0IGl0cyBsb2dcbiAgICAgICAgICAvLyBwb3NpdGlvbiAoYnVmZmVyaW5nIGJyYW5jaCBhYm92ZSkuIGBjbGFpbSgpYCBidWlsZHMgdGhlXG4gICAgICAgICAgLy8gY29uc3VtZXItZmFjaW5nIHByb21pc2UgZnJvbSB0aGF0IG91dGNvbWUsIGRlZmVycmluZyBiZWhpbmQgYW55XG4gICAgICAgICAgLy8gZWFybGllci1pbi1sb2cgd2FpdCBvciBzdGVwIGFuZCBtYXJraW5nIHRoaXMgaG9vayBkZWxpdmVyZWQsIHNvXG4gICAgICAgICAgLy8gcmVzb2x1dGlvbiBvcmRlciBzdGF5cyBhbmNob3JlZCB0byB0aGUgZXZlbnQgbG9nLCBub3QgdGhpcyBsYXRlclxuICAgICAgICAgIC8vIGNsYWltIHNpdGUuXG4gICAgICAgICAgcmV0dXJuIG5leHREZWxpdmVyeS5jbGFpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudExvZ0VtcHR5KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHJlc29sdmVycyk7XG5cbiAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGhvb2snc1xuICAgIC8vIHJlZ2lzdHJhdGlvbiBvdXRjb21lOiB0aGUgY29uZmxpY3RpbmcgYFJ1bmAgd2hlbiB0aGUgdG9rZW4gaXMgb3duZWRcbiAgICAvLyBieSBhbm90aGVyIGFjdGl2ZSBob29rLCBgbnVsbGAgb25jZSB0aGlzIGhvb2sncyByZWdpc3RyYXRpb24gaXNcbiAgICAvLyBjb21taXR0ZWQuIEJvdGggZmFzdC1wYXRocyBzZXR0bGUgdGhyb3VnaCBgY3R4LnByb21pc2VRdWV1ZWAgc29cbiAgICAvLyByZXNvbHV0aW9uIG9yZGVyIGFsd2F5cyBtYXRjaGVzIGV2ZW50LWxvZyBvcmRlci5cbiAgICBmdW5jdGlvbiBjcmVhdGVHZXRDb25mbGljdFByb21pc2UoKTogUHJvbWlzZTxSdW48dW5rbm93bj4gfCBudWxsPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFJ1bjx1bmtub3duPiB8IG51bGw+KCk7XG5cbiAgICAgIGlmIChoYXNDcmVhdGVkKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QpIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbmZsaWN0UnVuUmVmKSB7XG4gICAgICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShjb25mbGljdFJ1blJlZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVycy5yZWplY3QoY29uZmxpY3RFcnJvclJlZik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmhhc0NvbmZsaWN0QXdhaXRlciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudExvZ0VtcHR5KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBnZXRDb25mbGljdFByb21pc2VzLnB1c2gocmVzb2x2ZXJzKTtcbiAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgaG9va1xuICAgIGZ1bmN0aW9uIGRpc3Bvc2VIb29rKCk6IHZvaWQge1xuICAgICAgaWYgKGlzRGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBBbHJlYWR5IGRpc3Bvc2VkLCBub3RoaW5nIHRvIGRvXG4gICAgICB9XG4gICAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGxvZyBhbHJlYWR5IGNvbnRhaW5zIGhvb2tfZGlzcG9zZWQsIHRoaXMgaXMgYSByZXBsYXk6IG5vLW9wXG4gICAgICBpZiAoaGFzRGlzcG9zZWRFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaXNwb3NlZCBmbGFnIG9uIHRoZSBleGlzdGluZyBxdWV1ZSBpdGVtXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRHJhaW4gYW55IHBlbmRpbmcgcHJvbWlzZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IgcGF5bG9hZHMuXG4gICAgICAvLyBXaXRob3V0IHRoaXMsIHByb21pc2VzIGNyZWF0ZWQgYnkgYGF3YWl0IGhvb2tgIG9yIHRoZSBhc3luYyBpdGVyYXRvcidzXG4gICAgICAvLyBgeWllbGQgYXdhaXQgdGhpc2Agd291bGQgaGFuZyBmb3JldmVyIHNpbmNlIHRoZSBldmVudCBjb25zdW1lciB3aWxsXG4gICAgICAvLyBuZXZlciBkZWxpdmVyIGFub3RoZXIgaG9va19yZWNlaXZlZCBhZnRlciBkaXNwb3NhbC5cbiAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGRpc3Bvc2VkJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBob29rOiBIb29rPFQ+ID0ge1xuICAgICAgdG9rZW4sXG5cbiAgICAgIGdldENvbmZsaWN0KCk6IFByb21pc2U8UnVuPHVua25vd24+IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2V0Q29uZmxpY3RQcm9taXNlKCk7XG4gICAgICB9LFxuXG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGhlblByb3BlcnR5OiBJbnRlbnRpb25hbGx5IHRoZW5hYmxlXG4gICAgICB0aGVuPFRSZXN1bHQxID0gVCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgICAgIG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICAgICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGxcbiAgICAgICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlSG9va1Byb21pc2UoKS50aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIFN1cHBvcnQgYGZvciBhd2FpdCAoY29uc3QgcGF5bG9hZCBvZiBob29rKSB7IOKApiB9YCBzeW50YXhcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICB3aGlsZSAoIWlzRGlzcG9zZWQpIHtcbiAgICAgICAgICB5aWVsZCBhd2FpdCB0aGlzO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkaXNwb3NlOiBkaXNwb3NlSG9vayxcblxuICAgICAgW1N5bWJvbC5kaXNwb3NlXTogZGlzcG9zZUhvb2ssXG4gICAgfTtcblxuICAgIC8vIEFsc28gcmVnaXN0ZXIgd2l0aCB0aGUgVk0ncyBTeW1ib2wuZGlzcG9zZSBzbyBgdXNpbmdgIHdvcmtzIGluc2lkZVxuICAgIC8vIHRoZSB3b3JrZmxvdyBzYW5kYm94ICh0aGUgVk0gbWF5IGhhdmUgYSBwb2x5ZmlsbGVkIFN5bWJvbC5kaXNwb3NlXG4gICAgLy8gdGhhdCBkaWZmZXJzIGZyb20gdGhlIGhvc3QncykuXG4gICAgY29uc3Qgdm1EaXNwb3NlID0gY3R4Lmdsb2JhbFRoaXMuU3ltYm9sLmRpc3Bvc2U7XG4gICAgaWYgKHZtRGlzcG9zZSAmJiB2bURpc3Bvc2UgIT09IFN5bWJvbC5kaXNwb3NlKSB7XG4gICAgICAoaG9vayBhcyBhbnkpW3ZtRGlzcG9zZV0gPSBkaXNwb3NlSG9vaztcbiAgICB9XG5cbiAgICByZXR1cm4gaG9vaztcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -35,7 +35,7 @@ export interface SetAttributesOptions {
|
|
|
35
35
|
* framework/library code (telemetry, agent metadata, etc.). User code
|
|
36
36
|
* trying to write a `$`-prefixed key throws `FatalError`. If you are a
|
|
37
37
|
* framework author and need to set a reserved key, pass
|
|
38
|
-
* `{ allowReservedAttributes: true }` as the second argument
|
|
38
|
+
* `{ allowReservedAttributes: true }` as the second argument; see
|
|
39
39
|
* `SetAttributesOptions` for the trade-offs.
|
|
40
40
|
*
|
|
41
41
|
* **WARNING**: Calling e.g.
|
|
@@ -16,7 +16,7 @@ import { WORKFLOW_SET_ATTRIBUTES } from '../symbols.js';
|
|
|
16
16
|
* framework/library code (telemetry, agent metadata, etc.). User code
|
|
17
17
|
* trying to write a `$`-prefixed key throws `FatalError`. If you are a
|
|
18
18
|
* framework author and need to set a reserved key, pass
|
|
19
|
-
* `{ allowReservedAttributes: true }` as the second argument
|
|
19
|
+
* `{ allowReservedAttributes: true }` as the second argument; see
|
|
20
20
|
* `SetAttributesOptions` for the trade-offs.
|
|
21
21
|
*
|
|
22
22
|
* **WARNING**: Calling e.g.
|
|
@@ -57,4 +57,4 @@ export async function setAttributes(attrs, options = {}) {
|
|
|
57
57
|
}
|
|
58
58
|
await dispatchSetAttributes(changes, allowReservedAttributes ? { allowReservedAttributes: true } : {});
|
|
59
59
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXlCeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQ2pDLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUksQ0FBQztJQUN6RSxNQUFNLHFCQUFxQixHQUFJLFVBQXNDLENBQ25FLHVCQUF1QixDQU1aLENBQUM7SUFDZCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksVUFBVSxDQUNsQiw2REFBNkQ7WUFDM0QsaUVBQWlFLENBQ3BFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxxQkFBcUIsQ0FDekIsT0FBTyxFQUNQLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2pFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmF0YWxFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBBdHRyaWJ1dGVDaGFuZ2UgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyB9IGZyb20gJy4uL2F0dHJpYnV0ZS1jaGFuZ2VzLmpzJztcbmltcG9ydCB7IFdPUktGTE9XX1NFVF9BVFRSSUJVVEVTIH0gZnJvbSAnLi4vc3ltYm9scy5qcyc7XG5cbi8qKlxuICogT3B0aW9ucyBhY2NlcHRlZCBieSBgc2V0QXR0cmlidXRlc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0QXR0cmlidXRlc09wdGlvbnMge1xuICAvKipcbiAgICogUGVybWl0IGF0dHJpYnV0ZSBrZXlzIHRoYXQgc3RhcnQgd2l0aCB0aGUgcmVzZXJ2ZWQgYCRgIHByZWZpeC5cbiAgICogKipEZWZhdWx0OiBgZmFsc2VgLioqXG4gICAqXG4gICAqIFRoZSBgJGAgbmFtZXNwYWNlIGlzIHJlc2VydmVkIGZvciBmcmFtZXdvcmsgYW5kIGxpYnJhcnkgY29kZSB0aGF0XG4gICAqIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGUgd29ya2Zsb3cgU0RLICh0ZWxlbWV0cnksIGFnZW50IG1ldGFkYXRhLFxuICAgKiBwbGF0Zm9ybS1lbWl0dGVkIHRhZ3MsIGV0Yy4pLiBVc2VyIGNvZGUgTVVTVCBOT1Qgd3JpdGUga2V5cyBpblxuICAgKiB0aGlzIG5hbWVzcGFjZTsgdmFsaWRhdGlvbiByZWplY3RzIHRoZW0gc28gYWNjaWRlbnRhbCBjb2xsaXNpb25zXG4gICAqIHdpdGggdG9vbGluZy1vd25lZCBrZXlzIGNhbid0IHNsaXAgdGhyb3VnaC5cbiAgICpcbiAgICogT25seSBmbGlwIHRoaXMgdG8gYHRydWVgIGlmIHlvdXIgY2FsbGVyIGlzIGl0c2VsZiBhIGZyYW1ld29yayBvclxuICAgKiBsaWJyYXJ5IHRoYXQgb3ducyBhIGAkYC1wcmVmaXhlZCBzdWItbmFtZXNwYWNlIGFuZCBrbm93cyB0aGVcbiAgICogY29udmVudGlvbnMgb2YgYW55IG90aGVyIHRvb2xzIHdyaXRpbmcgaW50byBpdC4gTWlzdXNlIGNhblxuICAgKiBjb25mbGljdCB3aXRoIG9ic2VydmFiaWxpdHkgc3VyZmFjZXMsIGFnZW50IGRhc2hib2FyZHMsIG9yIGZ1dHVyZVxuICAgKiBwbGF0Zm9ybSBmZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhlIHJlc2VydmVkIG5hbWVzcGFjZS5cbiAgICovXG4gIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBdHRhY2ggcGxhaW50ZXh0IHN0cmluZyBrZXkvdmFsdWUgbWV0YWRhdGEgdG8gdGhlIGN1cnJlbnQgd29ya2Zsb3cgcnVuLlxuICpcbiAqIENhbGxhYmxlIG9ubHkgZnJvbSBhIHdvcmtmbG93IGJvZHkgKGAndXNlIHdvcmtmbG93J2ApLiBUaGUgY2FsbCBpc1xuICogZGlzcGF0Y2hlZCBhcyBhIG5hdGl2ZSBgYXR0cl9zZXRgIGV2ZW50IGFuZCBtYXRlcmlhbGl6ZWQgb24gdGhlIHJ1bi5cbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bnMgaW4gdGhlIFZNIChjaGVhcCwgZGV0ZXJtaW5pc3RpYykgYmVmb3JlIGV2ZW50XG4gKiBkaXNwYXRjaCAtIHZpb2xhdGlvbnMgdGhyb3cgYEZhdGFsRXJyb3JgIHdpdGhvdXQgd3JpdGluZyBhbiBldmVudC4gQW5cbiAqIGVtcHR5IHJlY29yZCBpcyBhIG5vLW9wLiBgdmFsdWU6IHVuZGVmaW5lZGAgcmVtb3ZlcyB0aGUga2V5IGZyb20gdGhlXG4gKiBydW4ncyBhdHRyaWJ1dGUgbWFwLlxuICpcbiAqICoqUmVzZXJ2ZWQgbmFtZXNwYWNlLioqIEtleXMgc3RhcnRpbmcgd2l0aCBgJGAgYXJlIHJlc2VydmVkIGZvclxuICogZnJhbWV3b3JrL2xpYnJhcnkgY29kZSAodGVsZW1ldHJ5LCBhZ2VudCBtZXRhZGF0YSwgZXRjLikuIFVzZXIgY29kZVxuICogdHJ5aW5nIHRvIHdyaXRlIGEgYCRgLXByZWZpeGVkIGtleSB0aHJvd3MgYEZhdGFsRXJyb3JgLiBJZiB5b3UgYXJlIGFcbiAqIGZyYW1ld29yayBhdXRob3IgYW5kIG5lZWQgdG8gc2V0IGEgcmVzZXJ2ZWQga2V5LCBwYXNzXG4gKiBgeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9YCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50OyBzZWVcbiAqIGBTZXRBdHRyaWJ1dGVzT3B0aW9uc2AgZm9yIHRoZSB0cmFkZS1vZmZzLlxuICpcbiAqICoqV0FSTklORyoqOiBDYWxsaW5nIGUuZy5cbiAqIGBQcm9taXNlLmFsbChbc2V0QXR0cmlidXRlcyh7IGE6ICcxJyB9KSwgc2V0QXR0cmlidXRlcyh7IGE6ICcyJyB9KV0pYFxuICogaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgb3JkZXJlZCBjb25zaXN0ZW50bHksIGJ1dCB0aGUgZXF1aXZhbGVudFxuICogc2VxdWVudGlhbCBgLnRoZW4oKWAgY2hhaW4gaXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzZXRBdHRyaWJ1dGVzIH0gZnJvbSAnd29ya2Zsb3cnO1xuICpcbiAqIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBteVdvcmtmbG93KCkge1xuICogICAndXNlIHdvcmtmbG93JztcbiAqICAgYXdhaXQgc2V0QXR0cmlidXRlcyh7IHBoYXNlOiAnaW5pdCcgfSk7XG4gKiAgIC8vIC4uLiB3b3JrIC4uLlxuICogICBhd2FpdCBzZXRBdHRyaWJ1dGVzKHsgcGhhc2U6ICdkb25lJywgb3JkZXJJZDogJ29yZF8xMjMnIH0pO1xuICogICBhd2FpdCBzZXRBdHRyaWJ1dGVzKHsgb3JkZXJJZDogdW5kZWZpbmVkIH0pOyAvLyByZW1vdmVcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZyYW1ld29yayAvIGxpYnJhcnkgY29kZSB3cml0aW5nIGludG8gdGhlIHJlc2VydmVkIG5hbWVzcGFjZS5cbiAqIGBgYHRzXG4gKiBhd2FpdCBzZXRBdHRyaWJ1dGVzKFxuICogICB7ICckYWdlbnQua2luZCc6ICdkdXJhYmxlLWFnZW50JyB9LFxuICogICB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzOiB0cnVlIH1cbiAqICk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoXG4gIGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICBvcHRpb25zOiBTZXRBdHRyaWJ1dGVzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2hhbmdlcyA9IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMoYXR0cnMsIG9wdGlvbnMpO1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgY29uc3QgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgPSBvcHRpb25zLmFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID09PSB0cnVlO1xuICBjb25zdCBkaXNwYXRjaFNldEF0dHJpYnV0ZXMgPSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbXG4gICAgV09SS0ZMT1dfU0VUX0FUVFJJQlVURVNcbiAgXSBhc1xuICAgIHwgKChcbiAgICAgICAgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW10sXG4gICAgICAgIG9wdGlvbnM/OiB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogYm9vbGVhbiB9XG4gICAgICApID0+IFByb21pc2U8dm9pZD4pXG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmICghZGlzcGF0Y2hTZXRBdHRyaWJ1dGVzKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsRXJyb3IoXG4gICAgICAnc2V0QXR0cmlidXRlcygpIGNhbGxlZCBvdXRzaWRlIGEgd29ya2Zsb3cgcnVudGltZSBjb250ZXh0LiAnICtcbiAgICAgICAgJ0l0IG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgd29ya2Zsb3cgYm9keSAoYHVzZSB3b3JrZmxvd2ApLidcbiAgICApO1xuICB9XG4gIGF3YWl0IGRpc3BhdGNoU2V0QXR0cmlidXRlcyhcbiAgICBjaGFuZ2VzLFxuICAgIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID8geyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9IDoge31cbiAgKTtcbn1cbiJdfQ==
|
package/dist/workflow/sleep.js
CHANGED
|
@@ -76,7 +76,7 @@ export function createSleep(ctx) {
|
|
|
76
76
|
const eventIndex = ctx.eventsConsumer.eventIndex;
|
|
77
77
|
const barrier = registerDeliveryBarrier(ctx, eventIndex, 'wait');
|
|
78
78
|
// The deferral is captured HERE, while consuming the event, and not
|
|
79
|
-
// after the queue tail below
|
|
79
|
+
// after the queue tail below: same reasoning as step.ts. An earlier
|
|
80
80
|
// step or hook whose hydration slot sits in that tail has usually
|
|
81
81
|
// delivered, and so deregistered its barrier, by the time the tail
|
|
82
82
|
// resolves. Read then, it would be invisible and this wait would skip
|
|
@@ -109,4 +109,4 @@ export function createSleep(ctx) {
|
|
|
109
109
|
return promise;
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBZ0M7SUFDMUQsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUM3QixLQUFrQztRQUVsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBUSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFbkQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLGdFQUFnRTtRQUNoRSxNQUFNLFFBQVEsR0FBNEI7WUFDeEMsSUFBSSxFQUFFLE1BQU07WUFDWixhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFDRixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsRCxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLCtEQUErRDtZQUMvRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGdCQUFnQixDQUFDLEdBQUcsRUFB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LENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyxcbiAgcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIsXG4gIHNjaGVkdWxlV2hlbklkbGUsXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgd2FpdCBhcyBoYXZpbmcgdGhlIGV2ZW50IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKSB7XG4gICAgICAgIC8vIE1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgY3JlYXRlZCBldmVudCwgYnV0IGtlZXAgaXQgaW4gdGhlIHF1ZXVlXG4gICAgICAgIC8vIE8oMSkgbG9va3VwIHVzaW5nIE1hcFxuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0Jykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSXRlbS5yZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY29tcGxldGVkIGV2ZW50XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXQgPSBldmVudC5ldmVudERhdGE/LnJlc3VtZUF0O1xuICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXQgPVxuICAgICAgICAgICAgcXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnd2FpdCdcbiAgICAgICAgICAgICAgPyBxdWV1ZUl0ZW0ucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiByZXN1bWVBdDtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0RGF0ZSA9IG5ldyBEYXRlKGV2ZW50UmVzdW1lQXQpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRNcyA9IGV2ZW50UmVzdW1lQXREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VtZUF0TXMgPSBleHBlY3RlZFJlc3VtZUF0LmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0Rm9yTWVzc2FnZSA9IE51bWJlci5pc0Zpbml0ZShldmVudFJlc3VtZUF0TXMpXG4gICAgICAgICAgICA/IGV2ZW50UmVzdW1lQXREYXRlLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogU3RyaW5nKGV2ZW50UmVzdW1lQXQpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50UmVzdW1lQXRNcyAhPT0gZXhwZWN0ZWRSZXN1bWVBdE1zKSB7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiB3YWl0X2NvbXBsZXRlZCBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfSBoYXMgcmVzdW1lQXQgXCIke2V2ZW50UmVzdW1lQXRGb3JNZXNzYWdlfVwiLCBidXQgdGhlIGN1cnJlbnQgd2FpdCBjb25zdW1lciBleHBlY3RzIFwiJHtleHBlY3RlZFJlc3VtZUF0LnRvSVNPU3RyaW5nKCl9XCJgLFxuICAgICAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIHdhaXQgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWUgKE8oMSkgZGVsZXRlIHVzaW5nIE1hcClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFRoaXMgYHdhaXRfY29tcGxldGVkYCBpcyBhIGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uIHRoZSB3b3JrZmxvd1xuICAgICAgICAvLyBtYXkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIGhvb2sgcGF5bG9hZCwgb3IgYXdhaXQgb24gYSBicmFuY2hcbiAgICAgICAgLy8gcGFyYWxsZWwgdG8gb25lIGF3YWl0aW5nIGEgc3RlcC4gT3JkZXIgaXQgZGV0ZXJtaW5pc3RpY2FsbHkgYnlcbiAgICAgICAgLy8gZXZlbnQtbG9nIHBvc2l0aW9uIChzZWUgYHBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCk6XG4gICAgICAgIC8vICAtIFJlZ2lzdGVyIGEgJ3dhaXQnIGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGluZGV4IHNvIGEgTEFURVItaW4tbG9nXG4gICAgICAgIC8vICAgIGhvb2sgcGF5bG9hZCBvciBzdGVwIHJlc3VsdCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIHdhaXQuXG4gICAgICAgIC8vICAtIEJlZm9yZSByZXNvbHZpbmcsIGRlZmVyIGJlaGluZCBldmVyeSBFQVJMSUVSLWluLWxvZyBIT09LIGFuZCBTVEVQXG4gICAgICAgIC8vICAgIGRlbGl2ZXJ5IHNvIHRoaXMgd2FpdCBkb2VzIG5vdCBwcmVlbXB0IG9uZSB0aGUgY29tbWl0dGVkIGxvZ1xuICAgICAgICAvLyAgICBvcmRlcmVkIGZpcnN0LiBUaGVuIG1hcmsgdGhpcyB3YWl0IGRlbGl2ZXJlZCB0byByZWxlYXNlIHRoZSBsYXRlclxuICAgICAgICAvLyAgICBkZWxpdmVyaWVzIGdhdGVkIG9uIGl0LlxuICAgICAgICBjb25zdCBldmVudEluZGV4ID0gY3R4LmV2ZW50c0NvbnN1bWVyLmV2ZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICd3YWl0Jyk7XG4gICAgICAgIC8vIFRoZSBkZWZlcnJhbCBpcyBjYXB0dXJlZCBIRVJFLCB3aGlsZSBjb25zdW1pbmcgdGhlIGV2ZW50LCBhbmQgbm90XG4gICAgICAgIC8vIGFmdGVyIHRoZSBxdWV1ZSB0YWlsIGJlbG93IOKAlCBzYW1lIHJlYXNvbmluZyBhcyBzdGVwLnRzLiBBbiBlYXJsaWVyXG4gICAgICAgIC8vIHN0ZXAgb3IgaG9vayB3aG9zZSBoeWRyYXRpb24gc2xvdCBzaXRzIGluIHRoYXQgdGFpbCBoYXMgdXN1YWxseVxuICAgICAgICAvLyBkZWxpdmVyZWQsIGFuZCBzbyBkZXJlZ2lzdGVyZWQgaXRzIGJhcnJpZXIsIGJ5IHRoZSB0aW1lIHRoZSB0YWlsXG4gICAgICAgIC8vIHJlc29sdmVzLiBSZWFkIHRoZW4sIGl0IHdvdWxkIGJlIGludmlzaWJsZSBhbmQgdGhpcyB3YWl0IHdvdWxkIHNraXBcbiAgICAgICAgLy8gYm90aCB0aGUgZ2F0ZSBBTkQgYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgJyBtYWNyb3Rhc2sgeWllbGQsIGxldHRpbmdcbiAgICAgICAgLy8gaXQgb3ZlcnRha2UgdGhlIGJyYW5jaCB0aGF0IGVhcmxpZXIgZGVsaXZlcnkganVzdCB3b2tlLiBFdmVyeSBldmVudFxuICAgICAgICAvLyBpbiBvbmUgZHJhaW4gd2luZG93IGlzIGNvbnN1bWVkIGJlZm9yZSBhbnkgc2xvdCBydW5zLCBzbyBjYXB0dXJpbmdcbiAgICAgICAgLy8gYXQgY29uc3VtcHRpb24gdGltZSBzZWVzIGFsbCBvZiB0aGVtLlxuICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAnd2FpdCdcbiAgICAgICAgKTtcbiAgICAgICAgLy8gRGVmZXIgKyByZXNvbHZlIGluIGEgREVUQUNIRUQgcHJvbWlzZSAobm90IGNoYWluZWQgb250byB0aGUgc2VyaWFsXG4gICAgICAgIC8vIGBwcm9taXNlUXVldWVgKS4gYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgIG1heSB3YWl0IG9uIGFuIGVhcmxpZXJcbiAgICAgICAgLy8gaG9vayBvciBzdGVwIGRlbGl2ZXJ5IHdob3NlIG93biByZXNvbHV0aW9uIGlzIGl0c2VsZiBkcml2ZW4gYnkgdGhlXG4gICAgICAgIC8vIHByb21pc2VRdWV1ZTsgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIGl0IHdvdWxkIGRlYWRsb2NrIHRoZSBzZXJpYWxcbiAgICAgICAgLy8gcXVldWUuIFdlIHN0aWxsIGFuY2hvciB0byB0aGUgcXVldWUgdGFpbCBmaXJzdCBzbyBwcmlvciBxdWV1ZWRcbiAgICAgICAgLy8gaHlkcmF0aW9uL29yZGVyaW5nIHdvcmsgcnVucyBpbiBldmVudC1sb2cgb3JkZXIuXG4gICAgICAgIGNvbnN0IHF1ZXVlQXRDb21wbGV0aW9uID0gY3R4LnByb21pc2VRdWV1ZTtcbiAgICAgICAgdm9pZCBxdWV1ZUF0Q29tcGxldGlvblxuICAgICAgICAgIC50aGVuKCgpID0+IGVhcmxpZXJEZWxpdmVyZWQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciB3YWl0ICR7Y29ycmVsYXRpb25JZH0gXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcbn1cbiJdfQ==
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBZ0M7SUFDMUQsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUM3QixLQUFrQztRQUVsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBUSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFbkQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLGdFQUFnRTtRQUNoRSxNQUFNLFFBQVEsR0FBNEI7WUFDeEMsSUFBSSxFQUFFLE1BQU07WUFDWixhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFDRixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsRCxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLCtEQUErRDtZQUMvRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7b0JBQ3pCLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUMxQyx1RkFBdUY7Z0JBQ3ZGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCw2RUFBNkU7WUFDN0UsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN2Qyx1RUFBdUU7Z0JBQ3ZFLHdCQUF3QjtnQkFDeEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELGlDQUFpQztZQUNqQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7Z0JBQ2hELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLGdCQUFnQixHQUNwQixTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNO3dCQUNwQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVE7d0JBQ3BCLENBQUMsQ0FBQyxRQUFRLENBQUM7b0JBQ2YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbEQsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3BELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3RELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7d0JBQzlELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7d0JBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBRTFCLElBQUksZUFBZSxLQUFLLGtCQUFrQixFQUFFLENBQUM7d0JBQzNDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLHFCQUFxQixDQUN2QiwrQ0FBK0MsYUFBYSxrQkFBa0IsdUJBQXVCLDZDQUE2QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUNuTCxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQzNCLENBQ0YsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQzt3QkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELHNFQUFzRTtnQkFDdEUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFM0MscUVBQXFFO2dCQUNyRSxrRUFBa0U7Z0JBQ2xFLGlFQUFpRTtnQkFDakUsc0RBQXNEO2dCQUN0RCx1RUFBdUU7Z0JBQ3ZFLG9FQUFvRTtnQkFDcEUsdUVBQXVFO2dCQUN2RSxrRUFBa0U7Z0JBQ2xFLHVFQUF1RTtnQkFDdkUsNkJBQTZCO2dCQUM3QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztnQkFDakQsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakUsb0VBQW9FO2dCQUNwRSxvRUFBb0U7Z0JBQ3BFLGtFQUFrRTtnQkFDbEUsbUVBQW1FO2dCQUNuRSxzRUFBc0U7Z0JBQ3RFLHVFQUF1RTtnQkFDdkUsc0VBQXNFO2dCQUN0RSxxRUFBcUU7Z0JBQ3JFLHdDQUF3QztnQkFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FDN0MsR0FBRyxFQUNILFVBQVUsRUFDVixNQUFNLENBQ1AsQ0FBQztnQkFDRixxRUFBcUU7Z0JBQ3JFLG1FQUFtRTtnQkFDbkUscUVBQXFFO2dCQUNyRSxzRUFBc0U7Z0JBQ3RFLGlFQUFpRTtnQkFDakUsbURBQW1EO2dCQUNuRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQzNDLEtBQUssaUJBQWlCO3FCQUNuQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7cUJBQzVCLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLENBQUMsQ0FBQztnQkFDTCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsMEVBQTBFO1lBQzFFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLHFCQUFxQixDQUN2QixxREFBcUQsYUFBYSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFDekYsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUMzQixDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyxcbiAgcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIsXG4gIHNjaGVkdWxlV2hlbklkbGUsXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgd2FpdCBhcyBoYXZpbmcgdGhlIGV2ZW50IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKSB7XG4gICAgICAgIC8vIE1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgY3JlYXRlZCBldmVudCwgYnV0IGtlZXAgaXQgaW4gdGhlIHF1ZXVlXG4gICAgICAgIC8vIE8oMSkgbG9va3VwIHVzaW5nIE1hcFxuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0Jykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSXRlbS5yZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY29tcGxldGVkIGV2ZW50XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXQgPSBldmVudC5ldmVudERhdGE/LnJlc3VtZUF0O1xuICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXQgPVxuICAgICAgICAgICAgcXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnd2FpdCdcbiAgICAgICAgICAgICAgPyBxdWV1ZUl0ZW0ucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiByZXN1bWVBdDtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0RGF0ZSA9IG5ldyBEYXRlKGV2ZW50UmVzdW1lQXQpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRNcyA9IGV2ZW50UmVzdW1lQXREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VtZUF0TXMgPSBleHBlY3RlZFJlc3VtZUF0LmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0Rm9yTWVzc2FnZSA9IE51bWJlci5pc0Zpbml0ZShldmVudFJlc3VtZUF0TXMpXG4gICAgICAgICAgICA/IGV2ZW50UmVzdW1lQXREYXRlLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogU3RyaW5nKGV2ZW50UmVzdW1lQXQpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50UmVzdW1lQXRNcyAhPT0gZXhwZWN0ZWRSZXN1bWVBdE1zKSB7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiB3YWl0X2NvbXBsZXRlZCBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfSBoYXMgcmVzdW1lQXQgXCIke2V2ZW50UmVzdW1lQXRGb3JNZXNzYWdlfVwiLCBidXQgdGhlIGN1cnJlbnQgd2FpdCBjb25zdW1lciBleHBlY3RzIFwiJHtleHBlY3RlZFJlc3VtZUF0LnRvSVNPU3RyaW5nKCl9XCJgLFxuICAgICAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIHdhaXQgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWUgKE8oMSkgZGVsZXRlIHVzaW5nIE1hcClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFRoaXMgYHdhaXRfY29tcGxldGVkYCBpcyBhIGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uIHRoZSB3b3JrZmxvd1xuICAgICAgICAvLyBtYXkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIGhvb2sgcGF5bG9hZCwgb3IgYXdhaXQgb24gYSBicmFuY2hcbiAgICAgICAgLy8gcGFyYWxsZWwgdG8gb25lIGF3YWl0aW5nIGEgc3RlcC4gT3JkZXIgaXQgZGV0ZXJtaW5pc3RpY2FsbHkgYnlcbiAgICAgICAgLy8gZXZlbnQtbG9nIHBvc2l0aW9uIChzZWUgYHBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCk6XG4gICAgICAgIC8vICAtIFJlZ2lzdGVyIGEgJ3dhaXQnIGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGluZGV4IHNvIGEgTEFURVItaW4tbG9nXG4gICAgICAgIC8vICAgIGhvb2sgcGF5bG9hZCBvciBzdGVwIHJlc3VsdCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIHdhaXQuXG4gICAgICAgIC8vICAtIEJlZm9yZSByZXNvbHZpbmcsIGRlZmVyIGJlaGluZCBldmVyeSBFQVJMSUVSLWluLWxvZyBIT09LIGFuZCBTVEVQXG4gICAgICAgIC8vICAgIGRlbGl2ZXJ5IHNvIHRoaXMgd2FpdCBkb2VzIG5vdCBwcmVlbXB0IG9uZSB0aGUgY29tbWl0dGVkIGxvZ1xuICAgICAgICAvLyAgICBvcmRlcmVkIGZpcnN0LiBUaGVuIG1hcmsgdGhpcyB3YWl0IGRlbGl2ZXJlZCB0byByZWxlYXNlIHRoZSBsYXRlclxuICAgICAgICAvLyAgICBkZWxpdmVyaWVzIGdhdGVkIG9uIGl0LlxuICAgICAgICBjb25zdCBldmVudEluZGV4ID0gY3R4LmV2ZW50c0NvbnN1bWVyLmV2ZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICd3YWl0Jyk7XG4gICAgICAgIC8vIFRoZSBkZWZlcnJhbCBpcyBjYXB0dXJlZCBIRVJFLCB3aGlsZSBjb25zdW1pbmcgdGhlIGV2ZW50LCBhbmQgbm90XG4gICAgICAgIC8vIGFmdGVyIHRoZSBxdWV1ZSB0YWlsIGJlbG93OiBzYW1lIHJlYXNvbmluZyBhcyBzdGVwLnRzLiBBbiBlYXJsaWVyXG4gICAgICAgIC8vIHN0ZXAgb3IgaG9vayB3aG9zZSBoeWRyYXRpb24gc2xvdCBzaXRzIGluIHRoYXQgdGFpbCBoYXMgdXN1YWxseVxuICAgICAgICAvLyBkZWxpdmVyZWQsIGFuZCBzbyBkZXJlZ2lzdGVyZWQgaXRzIGJhcnJpZXIsIGJ5IHRoZSB0aW1lIHRoZSB0YWlsXG4gICAgICAgIC8vIHJlc29sdmVzLiBSZWFkIHRoZW4sIGl0IHdvdWxkIGJlIGludmlzaWJsZSBhbmQgdGhpcyB3YWl0IHdvdWxkIHNraXBcbiAgICAgICAgLy8gYm90aCB0aGUgZ2F0ZSBBTkQgYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgJyBtYWNyb3Rhc2sgeWllbGQsIGxldHRpbmdcbiAgICAgICAgLy8gaXQgb3ZlcnRha2UgdGhlIGJyYW5jaCB0aGF0IGVhcmxpZXIgZGVsaXZlcnkganVzdCB3b2tlLiBFdmVyeSBldmVudFxuICAgICAgICAvLyBpbiBvbmUgZHJhaW4gd2luZG93IGlzIGNvbnN1bWVkIGJlZm9yZSBhbnkgc2xvdCBydW5zLCBzbyBjYXB0dXJpbmdcbiAgICAgICAgLy8gYXQgY29uc3VtcHRpb24gdGltZSBzZWVzIGFsbCBvZiB0aGVtLlxuICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAnd2FpdCdcbiAgICAgICAgKTtcbiAgICAgICAgLy8gRGVmZXIgKyByZXNvbHZlIGluIGEgREVUQUNIRUQgcHJvbWlzZSAobm90IGNoYWluZWQgb250byB0aGUgc2VyaWFsXG4gICAgICAgIC8vIGBwcm9taXNlUXVldWVgKS4gYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgIG1heSB3YWl0IG9uIGFuIGVhcmxpZXJcbiAgICAgICAgLy8gaG9vayBvciBzdGVwIGRlbGl2ZXJ5IHdob3NlIG93biByZXNvbHV0aW9uIGlzIGl0c2VsZiBkcml2ZW4gYnkgdGhlXG4gICAgICAgIC8vIHByb21pc2VRdWV1ZTsgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIGl0IHdvdWxkIGRlYWRsb2NrIHRoZSBzZXJpYWxcbiAgICAgICAgLy8gcXVldWUuIFdlIHN0aWxsIGFuY2hvciB0byB0aGUgcXVldWUgdGFpbCBmaXJzdCBzbyBwcmlvciBxdWV1ZWRcbiAgICAgICAgLy8gaHlkcmF0aW9uL29yZGVyaW5nIHdvcmsgcnVucyBpbiBldmVudC1sb2cgb3JkZXIuXG4gICAgICAgIGNvbnN0IHF1ZXVlQXRDb21wbGV0aW9uID0gY3R4LnByb21pc2VRdWV1ZTtcbiAgICAgICAgdm9pZCBxdWV1ZUF0Q29tcGxldGlvblxuICAgICAgICAgIC50aGVuKCgpID0+IGVhcmxpZXJEZWxpdmVyZWQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciB3YWl0ICR7Y29ycmVsYXRpb25JZH0gXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* VM/step-bundle stub for `@workflow/core/runtime/world-init`.
|
|
3
3
|
*
|
|
4
|
-
* Resolved via the `workflow` export condition. Empty by design
|
|
4
|
+
* Resolved via the `workflow` export condition. Empty by design: the host
|
|
5
5
|
* is responsible for loading `world.ts` and populating the globalThis
|
|
6
6
|
* world cache before any VM or step code executes. Including this module
|
|
7
7
|
* (rather than letting the resolver fall through to the host file) keeps
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* VM/step-bundle stub for `@workflow/core/runtime/world-init`.
|
|
3
3
|
*
|
|
4
|
-
* Resolved via the `workflow` export condition. Empty by design
|
|
4
|
+
* Resolved via the `workflow` export condition. Empty by design: the host
|
|
5
5
|
* is responsible for loading `world.ts` and populating the globalThis
|
|
6
6
|
* world cache before any VM or step code executes. Including this module
|
|
7
7
|
* (rather than letting the resolver fall through to the host file) keeps
|
|
@@ -12,4 +12,4 @@
|
|
|
12
12
|
* full rationale.
|
|
13
13
|
*/
|
|
14
14
|
export {};
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtaW5pdC1zdHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtmbG93L3dvcmxkLWluaXQtc3R1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZNL3N0ZXAtYnVuZGxlIHN0dWIgZm9yIGBAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLWluaXRgLlxuICpcbiAqIFJlc29sdmVkIHZpYSB0aGUgYHdvcmtmbG93YCBleHBvcnQgY29uZGl0aW9uLiBFbXB0eSBieSBkZXNpZ246IHRoZSBob3N0XG4gKiBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBgd29ybGQudHNgIGFuZCBwb3B1bGF0aW5nIHRoZSBnbG9iYWxUaGlzXG4gKiB3b3JsZCBjYWNoZSBiZWZvcmUgYW55IFZNIG9yIHN0ZXAgY29kZSBleGVjdXRlcy4gSW5jbHVkaW5nIHRoaXMgbW9kdWxlXG4gKiAocmF0aGVyIHRoYW4gbGV0dGluZyB0aGUgcmVzb2x2ZXIgZmFsbCB0aHJvdWdoIHRvIHRoZSBob3N0IGZpbGUpIGtlZXBzXG4gKiBgd29ybGQudHNgIGFuZCB0aGUgY29uZmlndXJlZCBzZXJ2ZXItb25seSB3b3JsZCBwYWNrYWdlIG91dCBvZiB0aGVcbiAqIHdvcmtmbG93IHNhbmRib3guXG4gKlxuICogU2VlIGAuLi9ydW50aW1lL3dvcmxkLWluaXQudHNgIGZvciB0aGUgaG9zdC1zaWRlIGltcGxlbWVudGF0aW9uIGFuZCB0aGVcbiAqIGZ1bGwgcmF0aW9uYWxlLlxuICovXG5cbmV4cG9ydCB7fTtcbiJdfQ==
|