@workflow/core 5.0.0-beta.6 → 5.0.0-beta.8

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.
Files changed (69) hide show
  1. package/dist/classify-error.d.ts +4 -3
  2. package/dist/classify-error.d.ts.map +1 -1
  3. package/dist/classify-error.js +29 -5
  4. package/dist/describe-error.d.ts.map +1 -1
  5. package/dist/describe-error.js +52 -6
  6. package/dist/encryption.d.ts +7 -1
  7. package/dist/encryption.d.ts.map +1 -1
  8. package/dist/encryption.js +13 -6
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -1
  12. package/dist/runtime/constants.d.ts +47 -0
  13. package/dist/runtime/constants.d.ts.map +1 -1
  14. package/dist/runtime/constants.js +86 -8
  15. package/dist/runtime/helpers.d.ts.map +1 -1
  16. package/dist/runtime/helpers.js +10 -2
  17. package/dist/runtime/replay-budget.d.ts +98 -0
  18. package/dist/runtime/replay-budget.d.ts.map +1 -0
  19. package/dist/runtime/replay-budget.js +191 -0
  20. package/dist/runtime/resume-hook.d.ts.map +1 -1
  21. package/dist/runtime/resume-hook.js +2 -1
  22. package/dist/runtime/runs.d.ts.map +1 -1
  23. package/dist/runtime/runs.js +4 -1
  24. package/dist/runtime/step-executor.d.ts.map +1 -1
  25. package/dist/runtime/step-executor.js +8 -1
  26. package/dist/runtime/step-handler.d.ts.map +1 -1
  27. package/dist/runtime/step-handler.js +10 -1
  28. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  29. package/dist/runtime/suspension-handler.js +6 -2
  30. package/dist/runtime.d.ts.map +1 -1
  31. package/dist/runtime.js +288 -174
  32. package/dist/serialization/types.d.ts +7 -0
  33. package/dist/serialization/types.d.ts.map +1 -1
  34. package/dist/serialization/types.js +1 -1
  35. package/dist/serialization.d.ts +1 -0
  36. package/dist/serialization.d.ts.map +1 -1
  37. package/dist/serialization.js +100 -11
  38. package/dist/set-attributes.d.ts +15 -0
  39. package/dist/set-attributes.d.ts.map +1 -0
  40. package/dist/set-attributes.js +17 -0
  41. package/dist/source-map.d.ts.map +1 -1
  42. package/dist/source-map.js +44 -6
  43. package/dist/step/context-storage.d.ts +14 -0
  44. package/dist/step/context-storage.d.ts.map +1 -1
  45. package/dist/step/context-storage.js +1 -1
  46. package/dist/step/writable-stream.d.ts.map +1 -1
  47. package/dist/step/writable-stream.js +36 -3
  48. package/dist/step.d.ts.map +1 -1
  49. package/dist/step.js +15 -4
  50. package/dist/symbols.d.ts +16 -0
  51. package/dist/symbols.d.ts.map +1 -1
  52. package/dist/symbols.js +17 -1
  53. package/dist/version.d.ts +1 -1
  54. package/dist/version.js +2 -2
  55. package/dist/workflow/abort-controller.d.ts.map +1 -1
  56. package/dist/workflow/abort-controller.js +13 -2
  57. package/dist/workflow/hook.d.ts.map +1 -1
  58. package/dist/workflow/hook.js +12 -3
  59. package/dist/workflow/index.d.ts +1 -0
  60. package/dist/workflow/index.d.ts.map +1 -1
  61. package/dist/workflow/index.js +2 -1
  62. package/dist/workflow/set-attributes.d.ts +74 -0
  63. package/dist/workflow/set-attributes.d.ts.map +1 -0
  64. package/dist/workflow/set-attributes.js +81 -0
  65. package/dist/workflow/sleep.d.ts.map +1 -1
  66. package/dist/workflow/sleep.js +22 -3
  67. package/dist/workflow.d.ts.map +1 -1
  68. package/dist/workflow.js +14 -5
  69. package/package.json +7 -7
@@ -1,3 +1,4 @@
1
+ import { CorruptedEventLogError } from '@workflow/errors';
1
2
  import { EventConsumerResult } from '../events-consumer.js';
2
3
  import { hydrateStepReturnValue } from '../serialization.js';
3
4
  import { ABORT_HOOK_TOKEN, ABORT_STREAM_NAME } from '../symbols.js';
@@ -118,6 +119,16 @@ export function createCreateAbortController(ctx) {
118
119
  if (event.correlationId !== correlationId) {
119
120
  return EventConsumerResult.NotConsumed;
120
121
  }
122
+ const eventToken = 'eventData' in event && event.eventData && 'token' in event.eventData
123
+ ? event.eventData.token
124
+ : undefined;
125
+ if (typeof eventToken === 'string' &&
126
+ eventToken !== this[ABORT_HOOK_TOKEN]) {
127
+ ctx.promiseQueue = ctx.promiseQueue.then(() => {
128
+ ctx.onWorkflowError(new CorruptedEventLogError(`Corrupted event log: abort hook event ${event.eventType} for ${correlationId} belongs to token "${eventToken}", but the current abort hook expects "${this[ABORT_HOOK_TOKEN]}"`));
129
+ });
130
+ return EventConsumerResult.Finished;
131
+ }
121
132
  if (event.eventType === 'hook_created') {
122
133
  const queueItem = ctx.invocationsQueue.get(correlationId);
123
134
  if (queueItem && queueItem.type === 'hook') {
@@ -140,7 +151,7 @@ export function createCreateAbortController(ctx) {
140
151
  // ends up undefined on replay.
141
152
  const rawPayload = event.eventData?.payload;
142
153
  ctx.promiseQueue = ctx.promiseQueue.then(async () => {
143
- let reason = undefined;
154
+ let reason;
144
155
  if (rawPayload !== undefined) {
145
156
  try {
146
157
  const hydrated = (await hydrateStepReturnValue(rawPayload, ctx.runId, ctx.encryptionKey, ctx.globalThis));
@@ -242,4 +253,4 @@ export function createAbortSignalStatics() {
242
253
  },
243
254
  };
244
255
  }
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJvcnQtY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9hYm9ydC1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixNQUFNLEdBQVksU0FBUyxDQUFDO0lBRW5CLENBQUMsaUJBQWlCLENBQUMsQ0FBUztJQUM1QixDQUFDLGdCQUFnQixDQUFDLENBQVM7SUFFcEMsVUFBVSxHQUFzQixFQUFFLENBQUM7SUFDbkMsUUFBUSxHQUFpRCxJQUFJLENBQUM7SUFFOUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFxRDtRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksVUFBa0IsRUFBRSxTQUFpQjtRQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxD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QVEsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUM3QyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMvQixNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNoRCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDO1lBRUYsS0FBSyxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7b0JBQUUsU0FBUztnQkFDdkMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO29CQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN2QixTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDckMsT0FBTyxFQUFFLENBQUM7b0JBQ1osQ0FBQztnQkFDSCxDQUFDLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTztZQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFO2dCQUM5RCwrQ0FBK0M7Z0JBQy9DLG9EQUFvRCxDQUN2RCxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCB9IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgQUJPUlRfSE9PS19UT0tFTiwgQUJPUlRfU1RSRUFNX05BTUUgfSBmcm9tICcuLi9zeW1ib2xzLmpzJztcbmltcG9ydCB7IGdldEFib3J0U3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcblxuLyoqXG4gKiBBIGxpZ2h0d2VpZ2h0IEFib3J0U2lnbmFsIGltcGxlbWVudGF0aW9uIGZvciB0aGUgd29ya2Zsb3cgVk0gY29udGV4dC5cbiAqXG4gKiBgc2lnbmFsLmFib3J0ZWRgIGFuZCBsaXN0ZW5lcnMgYXJlIHVwZGF0ZWQgaW4gdHdvIHNjZW5hcmlvczpcbiAqIDEuIE9uIGZpcnN0LXJ1bjogd2hlbiBgYWJvcnQoKWAgaXMgY2FsbGVkIGluIHRoZSB3b3JrZmxvdyBjb2RlXG4gKiAyLiBPbiByZXBsYXk6IHdoZW4gdGhlIGV2ZW50cyBjb25zdW1lciBwcm9jZXNzZXMgdGhlIGBob29rX3JlY2VpdmVkYFxuICogICAgZXZlbnQgKGNoYWluZWQgdGhyb3VnaCBwcm9taXNlUXVldWUgZm9yIGRldGVybWluaXN0aWMgb3JkZXJpbmcpXG4gKlxuICogT24gcmVwbGF5LCBgYWJvcnQoKWAgaW4gdGhlIHdvcmtmbG93IGNvZGUgYmVjb21lcyBhIG5vLW9wIHNpbmNlXG4gKiBgX3NldEFib3J0ZWRgIHdhcyBhbHJlYWR5IGNhbGxlZCBieSB0aGUgZXZlbnRzIGNvbnN1bWVyLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dBYm9ydFNpZ25hbCB7XG4gIGFib3J0ZWQgPSBmYWxzZTtcbiAgcmVhc29uOiB1bmtub3duID0gdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5IFtBQk9SVF9TVFJFQU1fTkFNRV06IHN0cmluZztcbiAgcmVhZG9ubHkgW0FCT1JUX0hPT0tfVE9LRU5dOiBzdHJpbmc7XG5cbiAgI2xpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgI29uYWJvcnQ6ICgodGhpczogV29ya2Zsb3dBYm9ydFNpZ25hbCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBnZXQgb25hYm9ydCgpOiAoKHRoaXM6IFdvcmtmbG93QWJvcnRTaWduYWwpID0+IHZvaWQpIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI29uYWJvcnQ7XG4gIH1cblxuICBzZXQgb25hYm9ydChoYW5kbGVyOiAoKHRoaXM6IFdvcmtmbG93QWJvcnRTaWduYWwpID0+IHZvaWQpIHwgbnVsbCkge1xuICAgIHRoaXMuI29uYWJvcnQgPSBoYW5kbGVyO1xuICAgIGlmIChoYW5kbGVyICYmIHRoaXMuYWJvcnRlZCkge1xuICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbU5hbWU6IHN0cmluZywgaG9va1Rva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzW0FCT1JUX1NUUkVBTV9OQU1FXSA9IHN0cmVhbU5hbWU7XG4gICAgdGhpc1tBQk9SVF9IT09LX1RPS0VOXSA9IGhvb2tUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgU2V0cyBhYm9ydGVkIHN0YXRlIGFuZCBmaXJlcyBsaXN0ZW5lcnMuXG4gICAqIENhbGxlZCBieSBhYm9ydCgpIG9uIGZpcnN0LXJ1biwgb3IgYnkgdGhlIGV2ZW50cyBjb25zdW1lciBvbiByZXBsYXkuXG4gICAqIElkZW1wb3RlbnQg4oCUIHNlY29uZCBjYWxsIGlzIGEgbm8tb3AuXG4gICAqL1xuICBfc2V0QWJvcnRlZChyZWFzb24/OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkgcmV0dXJuO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgaWYgKHRoaXMuI29uYWJvcnQpIHtcbiAgICAgIHRoaXMuI29uYWJvcnQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNsaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuICAgIHRoaXMuI2xpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgIT09ICdhYm9ydCcpIHJldHVybjtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAvLyBGaXJlIHN5bmNocm9ub3VzbHksIG5vdCBvbiBhIG1pY3JvdGFzay4gTmF0aXZlIEFib3J0U2lnbmFsIGZpcmVzIG9uIGFcbiAgICAgIC8vIG1pY3JvdGFzayBwZXIgc3BlYywgYnV0IGluc2lkZSB0aGUgd29ya2Zsb3cgVk0gd2UgZGVsaWJlcmF0ZWx5IGRpdmVyZ2VcbiAgICAgIC8vIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheTogbGlzdGVuZXIgb3JkZXJpbmcgbXVzdCBiZSB0aWVkIHRvIHRoZVxuICAgICAgLy8gb3JjaGVzdHJhdG9yJ3Mgc3luYyBleGVjdXRpb24gcGF0aCwgbm90IHRvIG1pY3JvdGFzayBzY2hlZHVsaW5nLlxuICAgICAgbGlzdGVuZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4jbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgIT09ICdhYm9ydCcpIHJldHVybjtcbiAgICB0aGlzLiNsaXN0ZW5lcnMgPSB0aGlzLiNsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiBsICE9PSBsaXN0ZW5lcik7XG4gIH1cblxuICB0aHJvd0lmQWJvcnRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyAoXG4gICAgICAgIHRoaXMucmVhc29uID8/XG4gICAgICAgIG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgd29ya2Zsb3ctY29udGV4dCBgQWJvcnRDb250cm9sbGVyYCBjbGFzcyB0aGF0IHVzZXMgaG9va3MgZm9yXG4gKiBkdXJhYmxlIHN0YXRlIGFuZCBzdHJlYW1zIGZvciByZWFsLXRpbWUgc3RlcCBwcm9wYWdhdGlvbi5cbiAqXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgYGNyZWF0ZUNyZWF0ZUhvb2soKWAgaW4gYHdvcmtmbG93L2hvb2sudHNgOlxuICogLSBSZWdpc3RlcnMgYSBob29rIGluIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZSBvbiBjb25zdHJ1Y3Rpb25cbiAqIC0gU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIGNvbnN1bWVyIGZvciBob29rX2NyZWF0ZWQvaG9va19yZWNlaXZlZCBldmVudHNcbiAqIC0gYGFib3J0KClgIGNhbGxzIGBfc2V0QWJvcnRlZGAgKyBtYXJrcyB0aGUgaG9vayBmb3IgcmVzdW1wdGlvblxuICogLSBUaGUgc3VzcGVuc2lvbiBoYW5kbGVyIHByb2Nlc3NlcyB0aGUgYWJvcnQgKGNyZWF0ZXMgZXZlbnQgKyB3cml0ZXMgc3RyZWFtKVxuICogLSBPbiByZXBsYXksIHRoZSBldmVudHMgY29uc3VtZXIgY2FsbHMgYF9zZXRBYm9ydGVkYCB3aGVuIGhvb2tfcmVjZWl2ZWRcbiAqICAgaXMgcHJvY2Vzc2VkLCBhbmQgYGFib3J0KClgIGluIHRoZSB3b3JrZmxvdyBjb2RlIGJlY29tZXMgYSBuby1vcFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3JlYXRlQWJvcnRDb250cm9sbGVyKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBjbGFzcyBXb3JrZmxvd0Fib3J0Q29udHJvbGxlciB7XG4gICAgcmVhZG9ubHkgc2lnbmFsOiBXb3JrZmxvd0Fib3J0U2lnbmFsO1xuICAgIHJlYWRvbmx5IFtBQk9SVF9TVFJFQU1fTkFNRV06IHN0cmluZztcbiAgICByZWFkb25seSBbQUJPUlRfSE9PS19UT0tFTl06IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgY29uc3QgaWQgPSBjdHguZ2VuZXJhdGVVbGlkKCk7XG4gICAgICBjb25zdCBzdHJlYW1OYW1lID0gZ2V0QWJvcnRTdHJlYW1JZChpZCk7XG4gICAgICBjb25zdCBob29rVG9rZW4gPSBgYWJydF8ke2lkfWA7XG5cbiAgICAgIHRoaXNbQUJPUlRfU1RSRUFNX05BTUVdID0gc3RyZWFtTmFtZTtcbiAgICAgIHRoaXNbQUJPUlRfSE9PS19UT0tFTl0gPSBob29rVG9rZW47XG4gICAgICB0aGlzLnNpZ25hbCA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKHN0cmVhbU5hbWUsIGhvb2tUb2tlbik7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGFuIGludGVybmFsIHN5c3RlbSBob29rIGluIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZS5cbiAgICAgIC8vIGlzU3lzdGVtIHByZXZlbnRzIHRva2VuIG5hbWVzcGFjZSBjb25mbGljdHMgd2l0aCB1c2VyIGhvb2tzLlxuICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IGBob29rXyR7Y3R4LmdlbmVyYXRlVWxpZCgpfWA7XG4gICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5zZXQoY29ycmVsYXRpb25JZCwge1xuICAgICAgICB0eXBlOiAnaG9vaycsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHRva2VuOiBob29rVG9rZW4sXG4gICAgICAgIGlzV2ViaG9vazogZmFsc2UsXG4gICAgICAgIGlzU3lzdGVtOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byBldmVudHMgZm9yIHRoaXMgaG9vaydzIGxpZmVjeWNsZVxuICAgICAgY3R4LmV2ZW50c0NvbnN1bWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnKSB7XG4gICAgICAgICAgLy8gVGhlIGFib3J0IHdhcyByZWNvcmRlZCBpbiB0aGUgZXZlbnQgbG9nIChmcm9tIGEgcHJldmlvdXMgcnVuJ3NcbiAgICAgICAgICAvLyBhYm9ydCgpIGNhbGwsIG9yIGZyb20gYSBzdGVwL2V4dGVybmFsIGFib3J0KS4gVXBkYXRlIHNpZ25hbFxuICAgICAgICAgIC8vIHN0YXRlIGFuZCBmaXJlIGxpc3RlbmVycyBhdCB0aGlzIGRldGVybWluaXN0aWMgcG9pbnQgaW4gdGhlXG4gICAgICAgICAgLy8gcHJvbWlzZVF1ZXVlIOKAlCBzYW1lIG9yZGVyaW5nIGFzIGhvb2sgcGF5bG9hZCBkZWxpdmVyeS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoZSBwYXlsb2FkIGlzIHRoZSBkZWh5ZHJhdGVkIGZvcm0gd3JpdHRlbiBieSB0aGUgc3VzcGVuc2lvblxuICAgICAgICAgIC8vIGhhbmRsZXIgKGEgVWludDhBcnJheSwgcG9zc2libHkgZW5jcnlwdGVkKS4gSHlkcmF0ZSBpdCB2aWEgdGhlXG4gICAgICAgICAgLy8gc2FtZSBtYWNoaW5lcnkgYXMgcmVndWxhciBob29rIHBheWxvYWRzICh3b3JrZmxvdy9ob29rLnRzOjExNylcbiAgICAgICAgICAvLyBzbyB0aGUgcmVhc29uIHJvdW5kLXRyaXBzIHdpdGggZnVsbCB0eXBlIGZpZGVsaXR5LiBSZWFkaW5nIHRoZVxuICAgICAgICAgIC8vIHJhdyBwYXlsb2FkIGhlcmUgaXMgYSBidWcg4oCUIGl0J3Mgbm90IGEgcGxhaW4gb2JqZWN0IGFmdGVyXG4gICAgICAgICAgLy8gZGVoeWRyYXRpb24sIHNvIGAncmVhc29uJyBpbiBwYXlsb2FkYCBpcyBmYWxzZSBhbmQgcmVhc29uXG4gICAgICAgICAgLy8gZW5kcyB1cCB1bmRlZmluZWQgb24gcmVwbGF5LlxuICAgICAgICAgIGNvbnN0IHJhd1BheWxvYWQgPSBldmVudC5ldmVudERhdGE/LnBheWxvYWQ7XG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVhc29uOiB1bmtub3duID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHJhd1BheWxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gKGF3YWl0IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgICByYXdQYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICAgICkpIGFzIHsgcmVhc29uPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVkICYmXG4gICAgICAgICAgICAgICAgICB0eXBlb2YgaHlkcmF0ZWQgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgICAncmVhc29uJyBpbiBoeWRyYXRlZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmVhc29uID0gaHlkcmF0ZWQucmVhc29uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gQmVzdC1lZmZvcnQ6IGlmIGh5ZHJhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIC8vIHJlYXNvbi4gVGhlIHNpZ25hbCBzdGlsbCBhYm9ydHM7IHRoZSB1c2VyIGp1c3Qgd29uJ3Qgc2VlXG4gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIHJlYXNvbi4gTWF0Y2hlcyBXb3JrZmxvd0Fib3J0U2lnbmFsJ3Mgc3BlY1xuICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIChET01FeGNlcHRpb24gQWJvcnRFcnJvcikuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLl9zZXRBYm9ydGVkKHJlYXNvbik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGFib3J0KHJlYXNvbj86IHVua25vd24pOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSByZXR1cm47IC8vIG5vLW9wIChhbHJlYWR5IGFib3J0ZWQsIGUuZy4gZnJvbSByZXBsYXkpXG5cbiAgICAgIC8vIFVwZGF0ZSBzaWduYWwgc3RhdGUgYW5kIGZpcmUgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHlcbiAgICAgIHRoaXMuc2lnbmFsLl9zZXRBYm9ydGVkKHJlYXNvbik7XG5cbiAgICAgIC8vIE1hcmsgdGhlIGhvb2sgZm9yIHJlc3VtcHRpb24gc28gdGhlIHN1c3BlbnNpb24gaGFuZGxlciByZWNvcmRzXG4gICAgICAvLyB0aGUgYWJvcnQgaW4gdGhlIGV2ZW50IGxvZyBhbmQgd3JpdGVzIHRoZSBzdHJlYW0gcGFja2V0LlxuICAgICAgZm9yIChjb25zdCBbLCBpdGVtXSBvZiBjdHguaW52b2NhdGlvbnNRdWV1ZSkge1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnaG9vaycgJiYgaXRlbS50b2tlbiA9PT0gdGhpc1tBQk9SVF9IT09LX1RPS0VOXSkge1xuICAgICAgICAgIGl0ZW0uYWJvcnRSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGl0ZW0uYWJvcnRSZWFzb24gPSByZWFzb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHdvcmtmbG93LWNvbnRleHQgYEFib3J0U2lnbmFsYCBvYmplY3Qgd2l0aCBzdGF0aWMgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsU3RhdGljcygpOiB7XG4gIGFib3J0OiAocmVhc29uPzogdW5rbm93bikgPT4gV29ya2Zsb3dBYm9ydFNpZ25hbDtcbiAgYW55OiAoXG4gICAgc2lnbmFsczogSXRlcmFibGU8e1xuICAgICAgYWJvcnRlZDogYm9vbGVhbjtcbiAgICAgIHJlYXNvbj86IHVua25vd247XG4gICAgICBhZGRFdmVudExpc3RlbmVyPzogRnVuY3Rpb247XG4gICAgfT5cbiAgKSA9PiBXb3JrZmxvd0Fib3J0U2lnbmFsO1xuICB0aW1lb3V0OiAoKSA9PiBuZXZlcjtcbn0ge1xuICByZXR1cm4ge1xuICAgIGFib3J0KHJlYXNvbj86IHVua25vd24pOiBXb3JrZmxvd0Fib3J0U2lnbmFsIHtcbiAgICAgIGNvbnN0IHNpZ25hbCA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKCcnLCAnJyk7XG4gICAgICBzaWduYWwuX3NldEFib3J0ZWQoXG4gICAgICAgIHJlYXNvbiA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICAgICk7XG4gICAgICByZXR1cm4gc2lnbmFsO1xuICAgIH0sXG5cbiAgICBhbnkoXG4gICAgICBzaWduYWxzOiBJdGVyYWJsZTx7XG4gICAgICAgIGFib3J0ZWQ6IGJvb2xlYW47XG4gICAgICAgIHJlYXNvbj86IHVua25vd247XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXI/OiBGdW5jdGlvbjtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcj86IEZ1bmN0aW9uO1xuICAgICAgfT5cbiAgICApOiBXb3JrZmxvd0Fib3J0U2lnbmFsIHtcbiAgICAgIGNvbnN0IGNvbXBvc2l0ZSA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKCcnLCAnJyk7XG5cbiAgICAgIC8vIE1hdGVyaWFsaXplIHRoZSBpdGVyYWJsZSBvbmNlLiBOYXRpdmUgQWJvcnRTaWduYWwuYW55IGRvZXMgdGhlIHNhbWU6XG4gICAgICAvLyBzaW5nbGUtc2hvdCBpdGVyYWJsZXMgKGUuZy4gZ2VuZXJhdG9ycykgd291bGQgb3RoZXJ3aXNlIHByb2R1Y2UgemVyb1xuICAgICAgLy8gZW50cmllcyBvbiB0aGUgc2Vjb25kIHBhc3MgYmVsb3cuXG4gICAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHNpZ25hbHMpO1xuXG4gICAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBhcnIpIHtcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgY29tcG9zaXRlLl9zZXRBYm9ydGVkKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgIHJldHVybiBjb21wb3NpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGlzdGVuIHRvIGVhY2ggc2lnbmFsIOKAlCBmaXJzdCBvbmUgdG8gYWJvcnQgd2lucy4gVHJhY2sgbGlzdGVuZXJzIHNvXG4gICAgICAvLyB3ZSBjYW4gcmVtb3ZlIHRoZW0gYWZ0ZXIgdGhlIGNvbXBvc2l0ZSBhYm9ydHM7IG90aGVyd2lzZSB0aGUgY2xvc3VyZXNcbiAgICAgIC8vIChjYXB0dXJpbmcgYGNvbXBvc2l0ZWApIHByZXZlbnQgR0MgZm9yIGFueSBpbnB1dCBzaWduYWwgdGhhdCBvdXRsaXZlc1xuICAgICAgLy8gdGhlIGNvbXBvc2l0ZSAoZS5nLiBhIGxvbmctbGl2ZWQgZXh0ZXJuYWwgY29udHJvbGxlcikuXG4gICAgICBjb25zdCBsaXN0ZW5lcnM6IEFycmF5PHtcbiAgICAgICAgc2lnbmFsOiAodHlwZW9mIGFycilbbnVtYmVyXTtcbiAgICAgICAgbGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgICB9PiA9IFtdO1xuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB7IHNpZ25hbCwgbGlzdGVuZXIgfSBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICBpZiAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGlzdGVuZXJzLmxlbmd0aCA9IDA7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBhcnIpIHtcbiAgICAgICAgaWYgKCFzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcikgY29udGludWU7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghY29tcG9zaXRlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIGNvbXBvc2l0ZS5fc2V0QWJvcnRlZChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKHsgc2lnbmFsLCBsaXN0ZW5lciB9KTtcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9zaXRlO1xuICAgIH0sXG5cbiAgICB0aW1lb3V0KCk6IG5ldmVyIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Fib3J0U2lnbmFsLnRpbWVvdXQoKSBpcyBub3Qgc3VwcG9ydGVkIGluIHdvcmtmbG93IGZ1bmN0aW9ucy4gJyArXG4gICAgICAgICAgJ1VzZSBzbGVlcCgpIHdpdGggYW4gQWJvcnRDb250cm9sbGVyIGluc3RlYWQuICcgK1xuICAgICAgICAgICdTZWU6IC9kb2NzL2Vycm9ycy9hYm9ydC1zaWduYWwtdGltZW91dC1pbi13b3JrZmxvdydcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJvcnQtY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9hYm9ydC1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixNQUFNLEdBQVksU0FBUyxDQUFDO0lBRW5CLENBQUMsaUJBQWlCLENBQUMsQ0FBUztJQUM1QixDQUFDLGdCQUFnQixDQUFDLENBQVM7SUFFcEMsVUFBVSxHQUFzQixFQUFFLENBQUM7SUFDbkMsUUFBUSxHQUFpRCxJQUFJLENBQUM7SUFFOUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFxRDtRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksVUFBa0IsRUFBRSxTQUFpQjtRQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE1BQWdCO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLFFBQW9CO1FBQ2pELElBQUksSUFBSSxLQUFLLE9BQU87WUFBRSxPQUFPO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLHdFQUF3RTtZQUN4RSx5RUFBeUU7WUFDekUsa0VBQWtFO1lBQ2xFLG1FQUFtRTtZQUNuRSxRQUFRLEVBQUUsQ0FBQztZQUNYLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVksRUFBRSxRQUFvQjtRQUNwRCxJQUFJLElBQUksS0FBSyxPQUFPO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQ0osSUFBSSxDQUFDLE1BQU07Z0JBQ1gsSUFBSSxZQUFZLENBQUMsNEJBQTRCLEVBQUUsWUFBWSxDQUFDLENBQzdELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsR0FBZ0M7SUFDMUUsT0FBTyxNQUFNLHVCQUF1QjtRQUN6QixNQUFNLENBQXNCO1FBQzVCLENBQUMsaUJBQWlCLENBQUMsQ0FBUztRQUM1QixDQUFDLGdCQUFnQixDQUFDLENBQVM7UUFFcEM7WUFDRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUUvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFN0QsNkRBQTZEO1lBQzdELCtEQUErRDtZQUMvRCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ25ELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO2dCQUN0QyxJQUFJLEVBQUUsTUFBTTtnQkFDWixhQUFhO2dCQUNiLEtBQUssRUFBRSxTQUFTO2dCQUNoQixTQUFTLEVBQUUsS0FBSztnQkFDaEIsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFFSCxnREFBZ0Q7WUFDaEQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO2dCQUN6QyxDQUFDO2dCQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxhQUFhLEVBQUUsQ0FBQztvQkFDMUMsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pDLENBQUM7Z0JBRUQsTUFBTSxVQUFVLEdBQ2QsV0FBVyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUztvQkFDbkUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztvQkFDdkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFFaEIsSUFDRSxPQUFPLFVBQVUsS0FBSyxRQUFRO29CQUM5QixVQUFVLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ3JDLENBQUM7b0JBQ0QsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksc0JBQXNCLENBQ3hCLHlDQUF5QyxLQUFLLENBQUMsU0FBUyxRQUFRLGFBQWEsc0JBQXNCLFVBQVUsMENBQTBDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQ2pMLENBQ0YsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDdEMsQ0FBQztnQkFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssY0FBYyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzFELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7d0JBQzNDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNuQyxDQUFDO29CQUNELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO2dCQUN0QyxDQUFDO2dCQUVELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxlQUFlLEVBQUUsQ0FBQztvQkFDeEMsaUVBQWlFO29CQUNqRSw4REFBOEQ7b0JBQzlELDhEQUE4RDtvQkFDOUQseURBQXlEO29CQUN6RCxFQUFFO29CQUNGLCtEQUErRDtvQkFDL0QsaUVBQWlFO29CQUNqRSxpRUFBaUU7b0JBQ2pFLGlFQUFpRTtvQkFDakUsNERBQTREO29CQUM1RCw0REFBNEQ7b0JBQzVELCtCQUErQjtvQkFDL0IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7b0JBQzVDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ2xELElBQUksTUFBZSxDQUFDO3dCQUNwQixJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQzs0QkFDN0IsSUFBSSxDQUFDO2dDQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxzQkFBc0IsQ0FDNUMsVUFBVSxFQUNWLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsR0FBRyxDQUFDLGFBQWEsRUFDakIsR0FBRyxDQUFDLFVBQVUsQ0FDZixDQUFxQyxDQUFDO2dDQUN2QyxJQUNFLFFBQVE7b0NBQ1IsT0FBTyxRQUFRLEtBQUssUUFBUTtvQ0FDNUIsUUFBUSxJQUFJLFFBQVEsRUFDcEIsQ0FBQztvQ0FDRCxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQ0FDM0IsQ0FBQzs0QkFDSCxDQUFDOzRCQUFDLE1BQU0sQ0FBQztnQ0FDUCwwREFBMEQ7Z0NBQzFELDJEQUEyRDtnQ0FDM0QsMERBQTBEO2dDQUMxRCxzQ0FBc0M7NEJBQ3hDLENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEMsQ0FBQyxDQUFDLENBQUM7b0JBRUgsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDM0MsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7Z0JBQ3RDLENBQUM7Z0JBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRSxDQUFDO29CQUN4QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMzQyxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDdEMsQ0FBQztnQkFFRCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLENBQUMsTUFBZ0I7WUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxDQUFDLDRDQUE0QztZQUU3RSx1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFaEMsaUVBQWlFO1lBQ2pFLDJEQUEyRDtZQUMzRCxLQUFLLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUMxQixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBV3RDLE9BQU87UUFDTCxLQUFLLENBQUMsTUFBZ0I7WUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLFdBQVcsQ0FDaEIsTUFBTSxJQUFJLElBQUksWUFBWSxDQUFDLDRCQUE0QixFQUFFLFlBQVksQ0FBQyxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELEdBQUcsQ0FDRCxPQUtFO1lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFbEQsdUVBQXVFO1lBQ3ZFLHVFQUF1RTtZQUN2RSxvQ0FBb0M7WUFDcEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVoQyxLQUFLLE1BQU0sTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDbkIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JDLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztZQUVELHNFQUFzRTtZQUN0RSx3RUFBd0U7WUFDeEUsd0VBQXdFO1lBQ3hFLHlEQUF5RDtZQUN6RCxNQUFNLFNBQVMsR0FHVixFQUFFLENBQUM7WUFDUixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLEtBQUssTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzt3QkFDL0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDaEQsQ0FBQztnQkFDSCxDQUFDO2dCQUNELFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQztZQUVGLEtBQUssTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO29CQUFFLFNBQVM7Z0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDdkIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3JDLE9BQU8sRUFBRSxDQUFDO29CQUNaLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO2dCQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDckMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU87WUFDTCxNQUFNLElBQUksS0FBSyxDQUNiLGdFQUFnRTtnQkFDOUQsK0NBQStDO2dCQUMvQyxvREFBb0QsQ0FDdkQsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IEV2ZW50Q29uc3VtZXJSZXN1bHQgfSBmcm9tICcuLi9ldmVudHMtY29uc3VtZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQgfSBmcm9tICcuLi9wcml2YXRlLmpzJztcbmltcG9ydCB7IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IEFCT1JUX0hPT0tfVE9LRU4sIEFCT1JUX1NUUkVBTV9OQU1FIH0gZnJvbSAnLi4vc3ltYm9scy5qcyc7XG5pbXBvcnQgeyBnZXRBYm9ydFN0cmVhbUlkIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5cbi8qKlxuICogQSBsaWdodHdlaWdodCBBYm9ydFNpZ25hbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHdvcmtmbG93IFZNIGNvbnRleHQuXG4gKlxuICogYHNpZ25hbC5hYm9ydGVkYCBhbmQgbGlzdGVuZXJzIGFyZSB1cGRhdGVkIGluIHR3byBzY2VuYXJpb3M6XG4gKiAxLiBPbiBmaXJzdC1ydW46IHdoZW4gYGFib3J0KClgIGlzIGNhbGxlZCBpbiB0aGUgd29ya2Zsb3cgY29kZVxuICogMi4gT24gcmVwbGF5OiB3aGVuIHRoZSBldmVudHMgY29uc3VtZXIgcHJvY2Vzc2VzIHRoZSBgaG9va19yZWNlaXZlZGBcbiAqICAgIGV2ZW50IChjaGFpbmVkIHRocm91Z2ggcHJvbWlzZVF1ZXVlIGZvciBkZXRlcm1pbmlzdGljIG9yZGVyaW5nKVxuICpcbiAqIE9uIHJlcGxheSwgYGFib3J0KClgIGluIHRoZSB3b3JrZmxvdyBjb2RlIGJlY29tZXMgYSBuby1vcCBzaW5jZVxuICogYF9zZXRBYm9ydGVkYCB3YXMgYWxyZWFkeSBjYWxsZWQgYnkgdGhlIGV2ZW50cyBjb25zdW1lci5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtmbG93QWJvcnRTaWduYWwge1xuICBhYm9ydGVkID0gZmFsc2U7XG4gIHJlYXNvbjogdW5rbm93biA9IHVuZGVmaW5lZDtcblxuICByZWFkb25seSBbQUJPUlRfU1RSRUFNX05BTUVdOiBzdHJpbmc7XG4gIHJlYWRvbmx5IFtBQk9SVF9IT09LX1RPS0VOXTogc3RyaW5nO1xuXG4gICNsaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG4gICNvbmFib3J0OiAoKHRoaXM6IFdvcmtmbG93QWJvcnRTaWduYWwpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgZ2V0IG9uYWJvcnQoKTogKCh0aGlzOiBXb3JrZmxvd0Fib3J0U2lnbmFsKSA9PiB2b2lkKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLiNvbmFib3J0O1xuICB9XG5cbiAgc2V0IG9uYWJvcnQoaGFuZGxlcjogKCh0aGlzOiBXb3JrZmxvd0Fib3J0U2lnbmFsKSA9PiB2b2lkKSB8IG51bGwpIHtcbiAgICB0aGlzLiNvbmFib3J0ID0gaGFuZGxlcjtcbiAgICBpZiAoaGFuZGxlciAmJiB0aGlzLmFib3J0ZWQpIHtcbiAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW1OYW1lOiBzdHJpbmcsIGhvb2tUb2tlbjogc3RyaW5nKSB7XG4gICAgdGhpc1tBQk9SVF9TVFJFQU1fTkFNRV0gPSBzdHJlYW1OYW1lO1xuICAgIHRoaXNbQUJPUlRfSE9PS19UT0tFTl0gPSBob29rVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIFNldHMgYWJvcnRlZCBzdGF0ZSBhbmQgZmlyZXMgbGlzdGVuZXJzLlxuICAgKiBDYWxsZWQgYnkgYWJvcnQoKSBvbiBmaXJzdC1ydW4sIG9yIGJ5IHRoZSBldmVudHMgY29uc3VtZXIgb24gcmVwbGF5LlxuICAgKiBJZGVtcG90ZW50IOKAlCBzZWNvbmQgY2FsbCBpcyBhIG5vLW9wLlxuICAgKi9cbiAgX3NldEFib3J0ZWQocmVhc29uPzogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFib3J0ZWQpIHJldHVybjtcbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIGlmICh0aGlzLiNvbmFib3J0KSB7XG4gICAgICB0aGlzLiNvbmFib3J0LmNhbGwodGhpcyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jbGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cbiAgICB0aGlzLiNsaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmICh0eXBlICE9PSAnYWJvcnQnKSByZXR1cm47XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgLy8gRmlyZSBzeW5jaHJvbm91c2x5LCBub3Qgb24gYSBtaWNyb3Rhc2suIE5hdGl2ZSBBYm9ydFNpZ25hbCBmaXJlcyBvbiBhXG4gICAgICAvLyBtaWNyb3Rhc2sgcGVyIHNwZWMsIGJ1dCBpbnNpZGUgdGhlIHdvcmtmbG93IFZNIHdlIGRlbGliZXJhdGVseSBkaXZlcmdlXG4gICAgICAvLyBmb3IgZGV0ZXJtaW5pc3RpYyByZXBsYXk6IGxpc3RlbmVyIG9yZGVyaW5nIG11c3QgYmUgdGllZCB0byB0aGVcbiAgICAgIC8vIG9yY2hlc3RyYXRvcidzIHN5bmMgZXhlY3V0aW9uIHBhdGgsIG5vdCB0byBtaWNyb3Rhc2sgc2NoZWR1bGluZy5cbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuI2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmICh0eXBlICE9PSAnYWJvcnQnKSByZXR1cm47XG4gICAgdGhpcy4jbGlzdGVuZXJzID0gdGhpcy4jbGlzdGVuZXJzLmZpbHRlcigobCkgPT4gbCAhPT0gbGlzdGVuZXIpO1xuICB9XG5cbiAgdGhyb3dJZkFib3J0ZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgdGhyb3cgKFxuICAgICAgICB0aGlzLnJlYXNvbiA/P1xuICAgICAgICBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHdvcmtmbG93LWNvbnRleHQgYEFib3J0Q29udHJvbGxlcmAgY2xhc3MgdGhhdCB1c2VzIGhvb2tzIGZvclxuICogZHVyYWJsZSBzdGF0ZSBhbmQgc3RyZWFtcyBmb3IgcmVhbC10aW1lIHN0ZXAgcHJvcGFnYXRpb24uXG4gKlxuICogRm9sbG93cyB0aGUgc2FtZSBwYXR0ZXJuIGFzIGBjcmVhdGVDcmVhdGVIb29rKClgIGluIGB3b3JrZmxvdy9ob29rLnRzYDpcbiAqIC0gUmVnaXN0ZXJzIGEgaG9vayBpbiB0aGUgaW52b2NhdGlvbnMgcXVldWUgb24gY29uc3RydWN0aW9uXG4gKiAtIFN1YnNjcmliZXMgdG8gdGhlIGV2ZW50cyBjb25zdW1lciBmb3IgaG9va19jcmVhdGVkL2hvb2tfcmVjZWl2ZWQgZXZlbnRzXG4gKiAtIGBhYm9ydCgpYCBjYWxscyBgX3NldEFib3J0ZWRgICsgbWFya3MgdGhlIGhvb2sgZm9yIHJlc3VtcHRpb25cbiAqIC0gVGhlIHN1c3BlbnNpb24gaGFuZGxlciBwcm9jZXNzZXMgdGhlIGFib3J0IChjcmVhdGVzIGV2ZW50ICsgd3JpdGVzIHN0cmVhbSlcbiAqIC0gT24gcmVwbGF5LCB0aGUgZXZlbnRzIGNvbnN1bWVyIGNhbGxzIGBfc2V0QWJvcnRlZGAgd2hlbiBob29rX3JlY2VpdmVkXG4gKiAgIGlzIHByb2Nlc3NlZCwgYW5kIGBhYm9ydCgpYCBpbiB0aGUgd29ya2Zsb3cgY29kZSBiZWNvbWVzIGEgbm8tb3BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNyZWF0ZUFib3J0Q29udHJvbGxlcihjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gY2xhc3MgV29ya2Zsb3dBYm9ydENvbnRyb2xsZXIge1xuICAgIHJlYWRvbmx5IHNpZ25hbDogV29ya2Zsb3dBYm9ydFNpZ25hbDtcbiAgICByZWFkb25seSBbQUJPUlRfU1RSRUFNX05BTUVdOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgW0FCT1JUX0hPT0tfVE9LRU5dOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIGNvbnN0IGlkID0gY3R4LmdlbmVyYXRlVWxpZCgpO1xuICAgICAgY29uc3Qgc3RyZWFtTmFtZSA9IGdldEFib3J0U3RyZWFtSWQoaWQpO1xuICAgICAgY29uc3QgaG9va1Rva2VuID0gYGFicnRfJHtpZH1gO1xuXG4gICAgICB0aGlzW0FCT1JUX1NUUkVBTV9OQU1FXSA9IHN0cmVhbU5hbWU7XG4gICAgICB0aGlzW0FCT1JUX0hPT0tfVE9LRU5dID0gaG9va1Rva2VuO1xuICAgICAgdGhpcy5zaWduYWwgPSBuZXcgV29ya2Zsb3dBYm9ydFNpZ25hbChzdHJlYW1OYW1lLCBob29rVG9rZW4pO1xuXG4gICAgICAvLyBSZWdpc3RlciBhbiBpbnRlcm5hbCBzeXN0ZW0gaG9vayBpbiB0aGUgaW52b2NhdGlvbnMgcXVldWUuXG4gICAgICAvLyBpc1N5c3RlbSBwcmV2ZW50cyB0b2tlbiBuYW1lc3BhY2UgY29uZmxpY3RzIHdpdGggdXNlciBob29rcy5cbiAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgaG9va18ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHtcbiAgICAgICAgdHlwZTogJ2hvb2snLFxuICAgICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgICB0b2tlbjogaG9va1Rva2VuLFxuICAgICAgICBpc1dlYmhvb2s6IGZhbHNlLFxuICAgICAgICBpc1N5c3RlbTogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gZXZlbnRzIGZvciB0aGlzIGhvb2sncyBsaWZlY3ljbGVcbiAgICAgIGN0eC5ldmVudHNDb25zdW1lci5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudFRva2VuID1cbiAgICAgICAgICAnZXZlbnREYXRhJyBpbiBldmVudCAmJiBldmVudC5ldmVudERhdGEgJiYgJ3Rva2VuJyBpbiBldmVudC5ldmVudERhdGFcbiAgICAgICAgICAgID8gZXZlbnQuZXZlbnREYXRhLnRva2VuXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGV2ZW50VG9rZW4gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgZXZlbnRUb2tlbiAhPT0gdGhpc1tBQk9SVF9IT09LX1RPS0VOXVxuICAgICAgICApIHtcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yKFxuICAgICAgICAgICAgICAgIGBDb3JydXB0ZWQgZXZlbnQgbG9nOiBhYm9ydCBob29rIGV2ZW50ICR7ZXZlbnQuZXZlbnRUeXBlfSBmb3IgJHtjb3JyZWxhdGlvbklkfSBiZWxvbmdzIHRvIHRva2VuIFwiJHtldmVudFRva2VufVwiLCBidXQgdGhlIGN1cnJlbnQgYWJvcnQgaG9vayBleHBlY3RzIFwiJHt0aGlzW0FCT1JUX0hPT0tfVE9LRU5dfVwiYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCcpIHtcbiAgICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgICAgICBxdWV1ZUl0ZW0uaGFzQ3JlYXRlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19yZWNlaXZlZCcpIHtcbiAgICAgICAgICAvLyBUaGUgYWJvcnQgd2FzIHJlY29yZGVkIGluIHRoZSBldmVudCBsb2cgKGZyb20gYSBwcmV2aW91cyBydW4nc1xuICAgICAgICAgIC8vIGFib3J0KCkgY2FsbCwgb3IgZnJvbSBhIHN0ZXAvZXh0ZXJuYWwgYWJvcnQpLiBVcGRhdGUgc2lnbmFsXG4gICAgICAgICAgLy8gc3RhdGUgYW5kIGZpcmUgbGlzdGVuZXJzIGF0IHRoaXMgZGV0ZXJtaW5pc3RpYyBwb2ludCBpbiB0aGVcbiAgICAgICAgICAvLyBwcm9taXNlUXVldWUg4oCUIHNhbWUgb3JkZXJpbmcgYXMgaG9vayBwYXlsb2FkIGRlbGl2ZXJ5LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIHBheWxvYWQgaXMgdGhlIGRlaHlkcmF0ZWQgZm9ybSB3cml0dGVuIGJ5IHRoZSBzdXNwZW5zaW9uXG4gICAgICAgICAgLy8gaGFuZGxlciAoYSBVaW50OEFycmF5LCBwb3NzaWJseSBlbmNyeXB0ZWQpLiBIeWRyYXRlIGl0IHZpYSB0aGVcbiAgICAgICAgICAvLyBzYW1lIG1hY2hpbmVyeSBhcyByZWd1bGFyIGhvb2sgcGF5bG9hZHMgKHdvcmtmbG93L2hvb2sudHM6MTE3KVxuICAgICAgICAgIC8vIHNvIHRoZSByZWFzb24gcm91bmQtdHJpcHMgd2l0aCBmdWxsIHR5cGUgZmlkZWxpdHkuIFJlYWRpbmcgdGhlXG4gICAgICAgICAgLy8gcmF3IHBheWxvYWQgaGVyZSBpcyBhIGJ1ZyDigJQgaXQncyBub3QgYSBwbGFpbiBvYmplY3QgYWZ0ZXJcbiAgICAgICAgICAvLyBkZWh5ZHJhdGlvbiwgc28gYCdyZWFzb24nIGluIHBheWxvYWRgIGlzIGZhbHNlIGFuZCByZWFzb25cbiAgICAgICAgICAvLyBlbmRzIHVwIHVuZGVmaW5lZCBvbiByZXBsYXkuXG4gICAgICAgICAgY29uc3QgcmF3UGF5bG9hZCA9IGV2ZW50LmV2ZW50RGF0YT8ucGF5bG9hZDtcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCByZWFzb246IHVua25vd247XG4gICAgICAgICAgICBpZiAocmF3UGF5bG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHlkcmF0ZWQgPSAoYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICAgIHJhd1BheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICAgKSkgYXMgeyByZWFzb24/OiB1bmtub3duIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiBoeWRyYXRlZCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICdyZWFzb24nIGluIGh5ZHJhdGVkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZWFzb24gPSBoeWRyYXRlZC5yZWFzb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBCZXN0LWVmZm9ydDogaWYgaHlkcmF0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgLy8gcmVhc29uLiBUaGUgc2lnbmFsIHN0aWxsIGFib3J0czsgdGhlIHVzZXIganVzdCB3b24ndCBzZWVcbiAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgcmVhc29uLiBNYXRjaGVzIFdvcmtmbG93QWJvcnRTaWduYWwncyBzcGVjXG4gICAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgKERPTUV4Y2VwdGlvbiBBYm9ydEVycm9yKS5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaWduYWwuX3NldEFib3J0ZWQocmVhc29uKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJykge1xuICAgICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWJvcnQocmVhc29uPzogdW5rbm93bik6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHJldHVybjsgLy8gbm8tb3AgKGFscmVhZHkgYWJvcnRlZCwgZS5nLiBmcm9tIHJlcGxheSlcblxuICAgICAgLy8gVXBkYXRlIHNpZ25hbCBzdGF0ZSBhbmQgZmlyZSBsaXN0ZW5lcnMgc3luY2hyb25vdXNseVxuICAgICAgdGhpcy5zaWduYWwuX3NldEFib3J0ZWQocmVhc29uKTtcblxuICAgICAgLy8gTWFyayB0aGUgaG9vayBmb3IgcmVzdW1wdGlvbiBzbyB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyIHJlY29yZHNcbiAgICAgIC8vIHRoZSBhYm9ydCBpbiB0aGUgZXZlbnQgbG9nIGFuZCB3cml0ZXMgdGhlIHN0cmVhbSBwYWNrZXQuXG4gICAgICBmb3IgKGNvbnN0IFssIGl0ZW1dIG9mIGN0eC5pbnZvY2F0aW9uc1F1ZXVlKSB7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdob29rJyAmJiBpdGVtLnRva2VuID09PSB0aGlzW0FCT1JUX0hPT0tfVE9LRU5dKSB7XG4gICAgICAgICAgaXRlbS5hYm9ydFJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgaXRlbS5hYm9ydFJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgd29ya2Zsb3ctY29udGV4dCBgQWJvcnRTaWduYWxgIG9iamVjdCB3aXRoIHN0YXRpYyBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJvcnRTaWduYWxTdGF0aWNzKCk6IHtcbiAgYWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiBXb3JrZmxvd0Fib3J0U2lnbmFsO1xuICBhbnk6IChcbiAgICBzaWduYWxzOiBJdGVyYWJsZTx7XG4gICAgICBhYm9ydGVkOiBib29sZWFuO1xuICAgICAgcmVhc29uPzogdW5rbm93bjtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXI/OiBGdW5jdGlvbjtcbiAgICB9PlxuICApID0+IFdvcmtmbG93QWJvcnRTaWduYWw7XG4gIHRpbWVvdXQ6ICgpID0+IG5ldmVyO1xufSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnQocmVhc29uPzogdW5rbm93bik6IFdvcmtmbG93QWJvcnRTaWduYWwge1xuICAgICAgY29uc3Qgc2lnbmFsID0gbmV3IFdvcmtmbG93QWJvcnRTaWduYWwoJycsICcnKTtcbiAgICAgIHNpZ25hbC5fc2V0QWJvcnRlZChcbiAgICAgICAgcmVhc29uID8/IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBzaWduYWw7XG4gICAgfSxcblxuICAgIGFueShcbiAgICAgIHNpZ25hbHM6IEl0ZXJhYmxlPHtcbiAgICAgICAgYWJvcnRlZDogYm9vbGVhbjtcbiAgICAgICAgcmVhc29uPzogdW5rbm93bjtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcj86IEZ1bmN0aW9uO1xuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyPzogRnVuY3Rpb247XG4gICAgICB9PlxuICAgICk6IFdvcmtmbG93QWJvcnRTaWduYWwge1xuICAgICAgY29uc3QgY29tcG9zaXRlID0gbmV3IFdvcmtmbG93QWJvcnRTaWduYWwoJycsICcnKTtcblxuICAgICAgLy8gTWF0ZXJpYWxpemUgdGhlIGl0ZXJhYmxlIG9uY2UuIE5hdGl2ZSBBYm9ydFNpZ25hbC5hbnkgZG9lcyB0aGUgc2FtZTpcbiAgICAgIC8vIHNpbmdsZS1zaG90IGl0ZXJhYmxlcyAoZS5nLiBnZW5lcmF0b3JzKSB3b3VsZCBvdGhlcndpc2UgcHJvZHVjZSB6ZXJvXG4gICAgICAvLyBlbnRyaWVzIG9uIHRoZSBzZWNvbmQgcGFzcyBiZWxvdy5cbiAgICAgIGNvbnN0IGFyciA9IEFycmF5LmZyb20oc2lnbmFscyk7XG5cbiAgICAgIGZvciAoY29uc3Qgc2lnbmFsIG9mIGFycikge1xuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICBjb21wb3NpdGUuX3NldEFib3J0ZWQoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMaXN0ZW4gdG8gZWFjaCBzaWduYWwg4oCUIGZpcnN0IG9uZSB0byBhYm9ydCB3aW5zLiBUcmFjayBsaXN0ZW5lcnMgc29cbiAgICAgIC8vIHdlIGNhbiByZW1vdmUgdGhlbSBhZnRlciB0aGUgY29tcG9zaXRlIGFib3J0czsgb3RoZXJ3aXNlIHRoZSBjbG9zdXJlc1xuICAgICAgLy8gKGNhcHR1cmluZyBgY29tcG9zaXRlYCkgcHJldmVudCBHQyBmb3IgYW55IGlucHV0IHNpZ25hbCB0aGF0IG91dGxpdmVzXG4gICAgICAvLyB0aGUgY29tcG9zaXRlIChlLmcuIGEgbG9uZy1saXZlZCBleHRlcm5hbCBjb250cm9sbGVyKS5cbiAgICAgIGNvbnN0IGxpc3RlbmVyczogQXJyYXk8e1xuICAgICAgICBzaWduYWw6ICh0eXBlb2YgYXJyKVtudW1iZXJdO1xuICAgICAgICBsaXN0ZW5lcjogKCkgPT4gdm9pZDtcbiAgICAgIH0+ID0gW107XG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHsgc2lnbmFsLCBsaXN0ZW5lciB9IG9mIGxpc3RlbmVycykge1xuICAgICAgICAgIGlmIChzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaXN0ZW5lcnMubGVuZ3RoID0gMDtcbiAgICAgIH07XG5cbiAgICAgIGZvciAoY29uc3Qgc2lnbmFsIG9mIGFycikge1xuICAgICAgICBpZiAoIXNpZ25hbC5hZGRFdmVudExpc3RlbmVyKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb21wb3NpdGUuYWJvcnRlZCkge1xuICAgICAgICAgICAgY29tcG9zaXRlLl9zZXRBYm9ydGVkKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goeyBzaWduYWwsIGxpc3RlbmVyIH0pO1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wb3NpdGU7XG4gICAgfSxcblxuICAgIHRpbWVvdXQoKTogbmV2ZXIge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQWJvcnRTaWduYWwudGltZW91dCgpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gd29ya2Zsb3cgZnVuY3Rpb25zLiAnICtcbiAgICAgICAgICAnVXNlIHNsZWVwKCkgd2l0aCBhbiBBYm9ydENvbnRyb2xsZXIgaW5zdGVhZC4gJyArXG4gICAgICAgICAgJ1NlZTogL2RvY3MvZXJyb3JzL2Fib3J0LXNpZ25hbC10aW1lb3V0LWluLXdvcmtmbG93J1xuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAGvB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,CA2Q5E"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAGvB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,CA2R5E"}
@@ -1,4 +1,4 @@
1
- import { HookConflictError, WorkflowRuntimeError } from '@workflow/errors';
1
+ import { CorruptedEventLogError, HookConflictError } from '@workflow/errors';
2
2
  import { withResolvers } from '@workflow/utils';
3
3
  import { EventConsumerResult } from '../events-consumer.js';
4
4
  import { WorkflowSuspension } from '../global.js';
@@ -47,6 +47,15 @@ export function createCreateHook(ctx) {
47
47
  // We're not interested in this event - the correlationId belongs to a different entity
48
48
  return EventConsumerResult.NotConsumed;
49
49
  }
50
+ const eventToken = 'eventData' in event && event.eventData && 'token' in event.eventData
51
+ ? event.eventData.token
52
+ : undefined;
53
+ if (typeof eventToken === 'string' && eventToken !== token) {
54
+ ctx.promiseQueue = ctx.promiseQueue.then(() => {
55
+ ctx.onWorkflowError(new CorruptedEventLogError(`Corrupted event log: hook event ${event.eventType} for ${correlationId} belongs to token "${eventToken}", but the current hook consumer expects "${token}"`));
56
+ });
57
+ return EventConsumerResult.Finished;
58
+ }
50
59
  // Check for hook_created event to mark this hook as already created
51
60
  if (event.eventType === 'hook_created') {
52
61
  const queueItem = ctx.invocationsQueue.get(correlationId);
@@ -115,7 +124,7 @@ export function createCreateHook(ctx) {
115
124
  }
116
125
  // An unexpected event type has been received, this event log looks corrupted. Let's fail immediately.
117
126
  ctx.promiseQueue = ctx.promiseQueue.then(() => {
118
- ctx.onWorkflowError(new WorkflowRuntimeError(`Unexpected event type for hook ${correlationId} (token: ${token}) "${event.eventType}"`));
127
+ ctx.onWorkflowError(new CorruptedEventLogError(`Unexpected event type for hook ${correlationId} (token: ${token}) "${event.eventType}"`));
119
128
  });
120
129
  return EventConsumerResult.Finished;
121
130
  });
@@ -213,4 +222,4 @@ export function createCreateHook(ctx) {
213
222
  return hook;
214
223
  };
215
224
  }
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUNMLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBZ0M7SUFDL0QsT0FBTyxTQUFTLGNBQWMsQ0FBVSxVQUF1QixFQUFFO1FBQy9ELDZCQUE2QjtRQUM3QixNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXBELHlFQUF5RTtRQUN6RSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUU3QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRTtZQUN0QyxJQUFJLEVBQUUsTUFBTTtZQUNaLGFBQWE7WUFDYixLQUFLO1lBQ0wsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFNBQVM7U0FDVixDQUFDLENBQUM7UUFFSCxxRUFBcUU7UUFDckUsTUFBTSxhQUFhLEdBQXdCLEVBQUUsQ0FBQztRQUU5QywwREFBMEQ7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Q0gsQ0FBQztZQUVELE9BQU8sRUFBRSxXQUFXO1lBRXBCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVc7U0FDOUIsQ0FBQztRQUVGLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsaUNBQWlDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxJQUFJLFNBQVMsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLElBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvb2tDb25mbGljdEVycm9yLCBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBQcm9taXNlV2l0aFJlc29sdmVycywgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEhvb2tDb25mbGljdEV2ZW50LCBIb29rUmVjZWl2ZWRFdmVudCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IEhvb2ssIEhvb2tPcHRpb25zIH0gZnJvbSAnLi4vY3JlYXRlLWhvb2suanMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgd2ViaG9va0xvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBzY2hlZHVsZVdoZW5JZGxlLFxuICB0eXBlIFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlU3RlcFJldHVyblZhbHVlIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDcmVhdGVIb29rKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVIb29rSW1wbDxUID0gYW55PihvcHRpb25zOiBIb29rT3B0aW9ucyA9IHt9KTogSG9vazxUPiB7XG4gICAgLy8gR2VuZXJhdGUgaG9vayBJRCBhbmQgdG9rZW5cbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYGhvb2tfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcbiAgICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW4gPz8gY3R4LmdlbmVyYXRlTmFub2lkKCk7XG5cbiAgICAvLyBBZGQgaG9vayBjcmVhdGlvbiB0byBpbnZvY2F0aW9ucyBxdWV1ZSAodXNpbmcgTWFwIGZvciBPKDEpIG9wZXJhdGlvbnMpXG4gICAgY29uc3QgaXNXZWJob29rID0gb3B0aW9ucy5pc1dlYmhvb2sgPz8gZmFsc2U7XG5cbiAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5zZXQoY29ycmVsYXRpb25JZCwge1xuICAgICAgdHlwZTogJ2hvb2snLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICBpc1dlYmhvb2ssXG4gICAgfSk7XG5cbiAgICAvLyBRdWV1ZSBvZiBob29rIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBidXQgbm90IHlldCBwcm9jZXNzZWRcbiAgICBjb25zdCBwYXlsb2Fkc1F1ZXVlOiBIb29rUmVjZWl2ZWRFdmVudFtdID0gW107XG5cbiAgICAvLyBRdWV1ZSBvZiBwcm9taXNlcyB0aGF0IHJlc29sdmUgdG8gdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+W10gPSBbXTtcblxuICAgIGxldCBldmVudExvZ0VtcHR5ID0gZmFsc2U7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgZXZlbnQgbG9nIGNvbmZpcm1zIGRpc3Bvc2FsIGhhcHBlbmVkIChyZXBsYXkgbm8tb3ApXG4gICAgbGV0IGhhc0Rpc3Bvc2VkRXZlbnQgPSBmYWxzZTtcblxuICAgIC8vIFRyYWNrIGlmIHdlIGhhdmUgYSBjb25mbGljdCBzbyB3ZSBjYW4gcmVqZWN0IGZ1dHVyZSBhd2FpdHNcbiAgICBsZXQgaGFzQ29uZmxpY3QgPSBmYWxzZTtcbiAgICBsZXQgY29uZmxpY3RFcnJvclJlZjogSG9va0NvbmZsaWN0RXJyb3IgfCBudWxsID0gbnVsbDtcblxuICAgIHdlYmhvb2tMb2dnZXIuZGVidWcoJ0hvb2sgY29uc3VtZXIgc2V0dXAnLCB7IGNvcnJlbGF0aW9uSWQsIHRva2VuIH0pO1xuICAgIGN0eC5ldmVudHNDb25zdW1lci5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXZlbnRzIGFuZCB0aGVyZSBhcmUgcHJvbWlzZXMgd2FpdGluZyxcbiAgICAgIC8vIGl0IG1lYW5zIHRoZSBob29rIGhhcyBiZWVuIGF3YWl0ZWQsIGJ1dCBhbiBpbmNvbWluZyBwYXlsb2FkIGhhcyBub3QgeWV0IGJlZW4gcmVjZWl2ZWQuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSB3b3JrZmxvdyBzaG91bGQgYmUgc3VzcGVuZGVkIHVudGlsIHRoZSBob29rIGlzIHJlc3VtZWQuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIGV2ZW50TG9nRW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwICYmIHBheWxvYWRzUXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgLy8gV2UncmUgbm90IGludGVyZXN0ZWQgaW4gdGhpcyBldmVudCAtIHRoZSBjb3JyZWxhdGlvbklkIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaG9va19jcmVhdGVkIGV2ZW50IHRvIG1hcmsgdGhpcyBob29rIGFzIGFscmVhZHkgY3JlYXRlZFxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCcpIHtcbiAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgICBxdWV1ZUl0ZW0uaGFzQ3JlYXRlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGhvb2tfY29uZmxpY3QgZXZlbnQgLSBhbm90aGVyIHdvcmtmbG93IGlzIHVzaW5nIHRoaXMgdG9rZW5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NvbmZsaWN0Jykge1xuICAgICAgICAvLyBSZW1vdmUgdGhpcyBob29rIGZyb20gdGhlIGludm9jYXRpb25zIHF1ZXVlXG4gICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcblxuICAgICAgICAvLyBTdG9yZSB0aGUgY29uZmxpY3QgZXZlbnQgc28gd2UgY2FuIHJlamVjdCBhbnkgYXdhaXRlZCBwcm9taXNlcy5cbiAgICAgICAgLy8gQ2hhaW4gdGhyb3VnaCBwcm9taXNlUXVldWUgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgb3JkZXJpbmcuXG4gICAgICAgIGNvbnN0IGNvbmZsaWN0RXZlbnQgPSBldmVudCBhcyBIb29rQ29uZmxpY3RFdmVudDtcbiAgICAgICAgY29uc3QgY29uZmxpY3RFcnJvciA9IG5ldyBIb29rQ29uZmxpY3RFcnJvcihcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS50b2tlbixcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS5jb25mbGljdGluZ1J1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWFyayB0aGF0IHdlIGhhdmUgYSBjb25mbGljdCBzbyBmdXR1cmUgYXdhaXRzIGFsc28gcmVqZWN0XG4gICAgICAgIGhhc0NvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgY29uZmxpY3RFcnJvclJlZiA9IGNvbmZsaWN0RXJyb3I7XG5cbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgZHJhaW4gcGVuZGluZyBwcm9taXNlcyBzeW5jaHJvbm91c2x5IHNvIHRoZSBudWxsIGV2ZW50XG4gICAgICAgIC8vIGhhbmRsZXIgd29uJ3Qgc2VlIHRoZW0gYW5kIHRyaWdnZXIgYSBzcHVyaW91cyBXb3JrZmxvd1N1c3BlbnNpb24uXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgcmVqZWN0aW9ucyBhcmUgZGVmZXJyZWQgdGhyb3VnaCBwcm9taXNlUXVldWUgZm9yIG9yZGVyaW5nLlxuICAgICAgICBjb25zdCBwZW5kaW5nUHJvbWlzZXMgPSBwcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBwcm9taXNlcy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZXIgb2YgcGVuZGluZ1Byb21pc2VzKSB7XG4gICAgICAgICAgICByZXNvbHZlci5yZWplY3QoY29uZmxpY3RFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnKSB7XG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHByb21pc2VzLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBwYXlsb2FkIGZyb20gdGhlIGV2ZW50IGRhdGEuXG4gICAgICAgICAgICAvLyBDaGFpbiB0aHJvdWdoIGN0eC5wcm9taXNlUXVldWUgdG8gZW5zdXJlIHRoYXQgYXN5bmNcbiAgICAgICAgICAgIC8vIGRlc2VyaWFsaXphdGlvbiAoZS5nLiwgZGVjcnlwdGlvbikgcmVzb2x2ZXMgaW4gZXZlbnQgbG9nIG9yZGVyLlxuICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbmV4dC5yZXNvbHZlKHBheWxvYWQgYXMgVCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgbmV4dC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF5bG9hZHNRdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgLy8gVGVybWluYWwgc3RhdGUgLSByZW1vdmUgZnJvbSBxdWV1ZSAobGlrZSBzdGVwX2NvbXBsZXRlZC93YWl0X2NvbXBsZXRlZClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAvLyBNYXJrIHRoYXQgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZFxuICAgICAgICBoYXNEaXNwb3NlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gV2UncmUgZG9uZSBwcm9jZXNzaW5nIGFueSBtb3JlIGV2ZW50cyBmb3IgdGhpcyBob29rXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBBbiB1bmV4cGVjdGVkIGV2ZW50IHR5cGUgaGFzIGJlZW4gcmVjZWl2ZWQsIHRoaXMgZXZlbnQgbG9nIGxvb2tzIGNvcnJ1cHRlZC4gTGV0J3MgZmFpbCBpbW1lZGlhdGVseS5cbiAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgIG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIGBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIGhvb2sgJHtjb3JyZWxhdGlvbklkfSAodG9rZW46ICR7dG9rZW59KSBcIiR7ZXZlbnQuZXZlbnRUeXBlfVwiYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgaG9vayBoYXMgYmVlbiBkaXNwb3NlZFxuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IHByb21pc2UgdGhhdCB3YWl0cyBmb3IgdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgZnVuY3Rpb24gY3JlYXRlSG9va1Byb21pc2UoKTogUHJvbWlzZTxUPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFQ+KCk7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgYSBjb25mbGljdCwgcmVqZWN0IHRocm91Z2ggdGhlIHByb21pc2VRdWV1ZSB0byBtYWludGFpblxuICAgICAgLy8gZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyB3aXRoIGFueSBwcmlvciBxdWV1ZWQgcmVzb2x1dGlvbnMuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QgJiYgY29uZmxpY3RFcnJvclJlZikge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlcnMucmVqZWN0KGNvbmZsaWN0RXJyb3JSZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bG9hZHNRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRQYXlsb2FkID0gcGF5bG9hZHNRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAobmV4dFBheWxvYWQpIHtcbiAgICAgICAgICAvLyBDaGFpbiB0aHJvdWdoIGN0eC5wcm9taXNlUXVldWUgdG8gZW5zdXJlIHRoYXQgYXN5bmNcbiAgICAgICAgICAvLyBkZXNlcmlhbGl6YXRpb24gKGUuZy4sIGRlY3J5cHRpb24pIHJlc29sdmVzIGluIGV2ZW50IGxvZyBvcmRlci5cbiAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMrKztcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgIG5leHRQYXlsb2FkLmV2ZW50RGF0YS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShwYXlsb2FkIGFzIFQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZXJzLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50TG9nRW1wdHkpIHtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHByb21pc2VzLnB1c2gocmVzb2x2ZXJzKTtcblxuICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwb3NlIHRoZSBob29rXG4gICAgZnVuY3Rpb24gZGlzcG9zZUhvb2soKTogdm9pZCB7XG4gICAgICBpZiAoaXNEaXNwb3NlZCkge1xuICAgICAgICByZXR1cm47IC8vIEFscmVhZHkgZGlzcG9zZWQsIG5vdGhpbmcgdG8gZG9cbiAgICAgIH1cbiAgICAgIGlzRGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgICAvLyBJZiB0aGUgZXZlbnQgbG9nIGFscmVhZHkgY29udGFpbnMgaG9va19kaXNwb3NlZCwgdGhpcyBpcyBhIHJlcGxheSDigJQgbm8tb3BcbiAgICAgIGlmIChoYXNEaXNwb3NlZEV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRpc3Bvc2VkIGZsYWcgb24gdGhlIGV4aXN0aW5nIHF1ZXVlIGl0ZW1cbiAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBxdWV1ZUl0ZW0uZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBEcmFpbiBhbnkgcGVuZGluZyBwcm9taXNlcyB0aGF0IGFyZSB3YWl0aW5nIGZvciBwYXlsb2Fkcy5cbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgcHJvbWlzZXMgY3JlYXRlZCBieSBgYXdhaXQgaG9va2Agb3IgdGhlIGFzeW5jIGl0ZXJhdG9yJ3NcbiAgICAgIC8vIGB5aWVsZCBhd2FpdCB0aGlzYCB3b3VsZCBoYW5nIGZvcmV2ZXIgc2luY2UgdGhlIGV2ZW50IGNvbnN1bWVyIHdpbGxcbiAgICAgIC8vIG5ldmVyIGRlbGl2ZXIgYW5vdGhlciBob29rX3JlY2VpdmVkIGFmdGVyIGRpc3Bvc2FsLlxuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHdlYmhvb2tMb2dnZXIuZGVidWcoJ0hvb2sgZGlzcG9zZWQnLCB7IGNvcnJlbGF0aW9uSWQsIHRva2VuIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGhvb2s6IEhvb2s8VD4gPSB7XG4gICAgICB0b2tlbixcblxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogSW50ZW50aW9uYWxseSB0aGVuYWJsZVxuICAgICAgdGhlbjxUUmVzdWx0MSA9IFQsIFRSZXN1bHQyID0gbmV2ZXI+KFxuICAgICAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsXG4gICAgICApOiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUhvb2tQcm9taXNlKCkudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XG4gICAgICB9LFxuXG4gICAgICAvLyBTdXBwb3J0IGBmb3IgYXdhaXQgKGNvbnN0IHBheWxvYWQgb2YgaG9vaykgeyDigKYgfWAgc3ludGF4XG4gICAgICBhc3luYyAqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgd2hpbGUgKCFpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgeWllbGQgYXdhaXQgdGhpcztcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZGlzcG9zZTogZGlzcG9zZUhvb2ssXG5cbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VIb29rLFxuICAgIH07XG5cbiAgICAvLyBBbHNvIHJlZ2lzdGVyIHdpdGggdGhlIFZNJ3MgU3ltYm9sLmRpc3Bvc2Ugc28gYHVzaW5nYCB3b3JrcyBpbnNpZGVcbiAgICAvLyB0aGUgd29ya2Zsb3cgc2FuZGJveCAodGhlIFZNIG1heSBoYXZlIGEgcG9seWZpbGxlZCBTeW1ib2wuZGlzcG9zZVxuICAgIC8vIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBob3N0J3MpLlxuICAgIGNvbnN0IHZtRGlzcG9zZSA9IGN0eC5nbG9iYWxUaGlzLlN5bWJvbC5kaXNwb3NlO1xuICAgIGlmICh2bURpc3Bvc2UgJiYgdm1EaXNwb3NlICE9PSBTeW1ib2wuZGlzcG9zZSkge1xuICAgICAgKGhvb2sgYXMgYW55KVt2bURpc3Bvc2VdID0gZGlzcG9zZUhvb2s7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvb2s7XG4gIH07XG59XG4iXX0=
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUNMLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBZ0M7SUFDL0QsT0FBTyxTQUFTLGNBQWMsQ0FBVSxVQUF1QixFQUFFO1FBQy9ELDZCQUE2QjtRQUM3QixNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXBELHlFQUF5RTtRQUN6RSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUU3QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRTtZQUN0QyxJQUFJLEVBQUUsTUFBTTtZQUNaLGFBQWE7WUFDYixLQUFLO1lBQ0wsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFNBQVM7U0FDVixDQUFDLENBQUM7UUFFSCxxRUFBcUU7UUFDckUsTUFBTSxhQUFhLEdBQXdCLEVBQUUsQ0FBQztRQUU5QywwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQThCLEVBQUUsQ0FBQztRQUUvQyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFMUIsbUVBQW1FO1FBQ25FLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRTdCLDZEQUE2RDtRQUM3RCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxnQkFBZ0IsR0FBNkIsSUFBSSxDQUFDO1FBRXRELGFBQWEsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyRSxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLHlEQUF5RDtZQUN6RCx5RkFBeUY7WUFDekYsNEVBQTRFO1lBQzVFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUVyQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7d0JBQ3pCLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQzFDLHVGQUF1RjtnQkFDdkYsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDekMsQ0FBQztZQUVELE1BQU0sVUFBVSxHQUNkLFdBQVcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVM7Z0JBQ25FLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7Z0JBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFaEIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUMzRCxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDNUMsR0FBRyxDQUFDLGVBQWUsQ0FDakIsSUFBSSxzQkFBc0IsQ0FDeEIsbUNBQW1DLEtBQUssQ0FBQyxTQUFTLFFBQVEsYUFBYSxzQkFBc0IsVUFBVSw2Q0FBNkMsS0FBSyxHQUFHLENBQzdKLENBQ0YsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQ3hDLDhDQUE4QztnQkFDOUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFM0Msa0VBQWtFO2dCQUNsRSwrREFBK0Q7Z0JBQy9ELE1BQU0sYUFBYSxHQUFHLEtBQTBCLENBQUM7Z0JBQ2pELE1BQU0sYUFBYSxHQUFHLElBQUksaUJBQWlCLENBQ3pDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUM3QixhQUFhLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUN6QyxDQUFDO2dCQUVGLDREQUE0RDtnQkFDNUQsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDbkIsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO2dCQUVqQyxxRUFBcUU7Z0JBQ3JFLG9FQUFvRTtnQkFDcEUsd0VBQXdFO2dCQUN4RSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUVwQixHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDNUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDdkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDakMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDVCwrQ0FBK0M7d0JBQy9DLHNEQUFzRDt3QkFDdEQsa0VBQWtFO3dCQUNsRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzt3QkFDeEIsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTs0QkFDbEQsSUFBSSxDQUFDO2dDQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sc0JBQXNCLENBQzFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUN2QixHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxhQUFhLEVBQ2pCLEdBQUcsQ0FBQyxVQUFVLENBQ2YsQ0FBQztnQ0FDRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQVksQ0FBQyxDQUFDOzRCQUM3QixDQUFDOzRCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0NBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDckIsQ0FBQztvQ0FBUyxDQUFDO2dDQUNULEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDOzRCQUMxQixDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBRUQsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDeEMsMEVBQTBFO2dCQUMxRSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQyxxREFBcUQ7Z0JBQ3JELGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDeEIsc0RBQXNEO2dCQUN0RCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsc0dBQXNHO1lBQ3RHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLHNCQUFzQixDQUN4QixrQ0FBa0MsYUFBYSxZQUFZLEtBQUssTUFBTSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQ3pGLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzQ0FBc0M7UUFDdEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLCtFQUErRTtRQUMvRSxTQUFTLGlCQUFpQjtZQUN4QixNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUssQ0FBQztZQUVyQyxxRUFBcUU7WUFDckUsNERBQTREO1lBQzVELElBQUksV0FBVyxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM1QyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUMzQixDQUFDO1lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLHNEQUFzRDtvQkFDdEQsa0VBQWtFO29CQUNsRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDeEIsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDbEQsSUFBSSxDQUFDOzRCQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sc0JBQXNCLENBQzFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUM3QixHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxhQUFhLEVBQ2pCLEdBQUcsQ0FBQyxVQUFVLENBQ2YsQ0FBQzs0QkFDRixTQUFTLENBQUMsT0FBTyxDQUFDLE9BQVksQ0FBQyxDQUFDO3dCQUNsQyxDQUFDO3dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7NEJBQ2YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDMUIsQ0FBQztnQ0FBUyxDQUFDOzRCQUNULEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dCQUMxQixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUN6QixHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzdELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV6QixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxTQUFTLFdBQVc7WUFDbEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsa0NBQWtDO1lBQzVDLENBQUM7WUFDRCxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBRWxCLDRFQUE0RTtZQUM1RSxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLE9BQU87WUFDVCxDQUFDO1lBRUQsK0NBQStDO1lBQy9DLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDM0MsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQztZQUVELDREQUE0RDtZQUM1RCx5RUFBeUU7WUFDekUsc0VBQXNFO1lBQ3RFLHNEQUFzRDtZQUN0RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUN6QixHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzdELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQVk7WUFDcEIsS0FBSztZQUVMLHNFQUFzRTtZQUN0RSxJQUFJLENBQ0YsV0FBcUUsRUFDckUsVUFBdUU7Z0JBRXZFLE9BQU8saUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCwyREFBMkQ7WUFDM0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUMzQixPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ25CLE1BQU0sTUFBTSxJQUFJLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxFQUFFLFdBQVc7WUFFcEIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVztTQUM5QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLG9FQUFvRTtRQUNwRSxpQ0FBaUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2hELElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0MsSUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUN6QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ycnVwdGVkRXZlbnRMb2dFcnJvciwgSG9va0NvbmZsaWN0RXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHR5cGUgUHJvbWlzZVdpdGhSZXNvbHZlcnMsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBIb29rQ29uZmxpY3RFdmVudCwgSG9va1JlY2VpdmVkRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHR5cGUgeyBIb29rLCBIb29rT3B0aW9ucyB9IGZyb20gJy4uL2NyZWF0ZS1ob29rLmpzJztcbmltcG9ydCB7IEV2ZW50Q29uc3VtZXJSZXN1bHQgfSBmcm9tICcuLi9ldmVudHMtY29uc3VtZXIuanMnO1xuaW1wb3J0IHsgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi4vZ2xvYmFsLmpzJztcbmltcG9ydCB7IHdlYmhvb2tMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3JlYXRlSG9vayhjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlSG9va0ltcGw8VCA9IGFueT4ob3B0aW9uczogSG9va09wdGlvbnMgPSB7fSk6IEhvb2s8VD4ge1xuICAgIC8vIEdlbmVyYXRlIGhvb2sgSUQgYW5kIHRva2VuXG4gICAgY29uc3QgY29ycmVsYXRpb25JZCA9IGBob29rXyR7Y3R4LmdlbmVyYXRlVWxpZCgpfWA7XG4gICAgY29uc3QgdG9rZW4gPSBvcHRpb25zLnRva2VuID8/IGN0eC5nZW5lcmF0ZU5hbm9pZCgpO1xuXG4gICAgLy8gQWRkIGhvb2sgY3JlYXRpb24gdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IGlzV2ViaG9vayA9IG9wdGlvbnMuaXNXZWJob29rID8/IGZhbHNlO1xuXG4gICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHtcbiAgICAgIHR5cGU6ICdob29rJyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICB0b2tlbixcbiAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgaXNXZWJob29rLFxuICAgIH0pO1xuXG4gICAgLy8gUXVldWUgb2YgaG9vayBldmVudHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkXG4gICAgY29uc3QgcGF5bG9hZHNRdWV1ZTogSG9va1JlY2VpdmVkRXZlbnRbXSA9IFtdO1xuXG4gICAgLy8gUXVldWUgb2YgcHJvbWlzZXMgdGhhdCByZXNvbHZlIHRvIHRoZSBuZXh0IGhvb2sgcGF5bG9hZFxuICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltdID0gW107XG5cbiAgICBsZXQgZXZlbnRMb2dFbXB0eSA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZCAocmVwbGF5IG5vLW9wKVxuICAgIGxldCBoYXNEaXNwb3NlZEV2ZW50ID0gZmFsc2U7XG5cbiAgICAvLyBUcmFjayBpZiB3ZSBoYXZlIGEgY29uZmxpY3Qgc28gd2UgY2FuIHJlamVjdCBmdXR1cmUgYXdhaXRzXG4gICAgbGV0IGhhc0NvbmZsaWN0ID0gZmFsc2U7XG4gICAgbGV0IGNvbmZsaWN0RXJyb3JSZWY6IEhvb2tDb25mbGljdEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbiAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGNvbnN1bWVyIHNldHVwJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgdGhlcmUgYXJlIHByb21pc2VzIHdhaXRpbmcsXG4gICAgICAvLyBpdCBtZWFucyB0aGUgaG9vayBoYXMgYmVlbiBhd2FpdGVkLCBidXQgYW4gaW5jb21pbmcgcGF5bG9hZCBoYXMgbm90IHlldCBiZWVuIHJlY2VpdmVkLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgd29ya2Zsb3cgc2hvdWxkIGJlIHN1c3BlbmRlZCB1bnRpbCB0aGUgaG9vayBpcyByZXN1bWVkLlxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBldmVudExvZ0VtcHR5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoID4gMCAmJiBwYXlsb2Fkc1F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXZlbnRUb2tlbiA9XG4gICAgICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAmJiAndG9rZW4nIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgID8gZXZlbnQuZXZlbnREYXRhLnRva2VuXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0eXBlb2YgZXZlbnRUb2tlbiA9PT0gJ3N0cmluZycgJiYgZXZlbnRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yKFxuICAgICAgICAgICAgICBgQ29ycnVwdGVkIGV2ZW50IGxvZzogaG9vayBldmVudCAke2V2ZW50LmV2ZW50VHlwZX0gZm9yICR7Y29ycmVsYXRpb25JZH0gYmVsb25ncyB0byB0b2tlbiBcIiR7ZXZlbnRUb2tlbn1cIiwgYnV0IHRoZSBjdXJyZW50IGhvb2sgY29uc3VtZXIgZXhwZWN0cyBcIiR7dG9rZW59XCJgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaG9va19jcmVhdGVkIGV2ZW50IHRvIG1hcmsgdGhpcyBob29rIGFzIGFscmVhZHkgY3JlYXRlZFxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCcpIHtcbiAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgICBxdWV1ZUl0ZW0uaGFzQ3JlYXRlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGhvb2tfY29uZmxpY3QgZXZlbnQgLSBhbm90aGVyIHdvcmtmbG93IGlzIHVzaW5nIHRoaXMgdG9rZW5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NvbmZsaWN0Jykge1xuICAgICAgICAvLyBSZW1vdmUgdGhpcyBob29rIGZyb20gdGhlIGludm9jYXRpb25zIHF1ZXVlXG4gICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcblxuICAgICAgICAvLyBTdG9yZSB0aGUgY29uZmxpY3QgZXZlbnQgc28gd2UgY2FuIHJlamVjdCBhbnkgYXdhaXRlZCBwcm9taXNlcy5cbiAgICAgICAgLy8gQ2hhaW4gdGhyb3VnaCBwcm9taXNlUXVldWUgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgb3JkZXJpbmcuXG4gICAgICAgIGNvbnN0IGNvbmZsaWN0RXZlbnQgPSBldmVudCBhcyBIb29rQ29uZmxpY3RFdmVudDtcbiAgICAgICAgY29uc3QgY29uZmxpY3RFcnJvciA9IG5ldyBIb29rQ29uZmxpY3RFcnJvcihcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS50b2tlbixcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS5jb25mbGljdGluZ1J1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWFyayB0aGF0IHdlIGhhdmUgYSBjb25mbGljdCBzbyBmdXR1cmUgYXdhaXRzIGFsc28gcmVqZWN0XG4gICAgICAgIGhhc0NvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgY29uZmxpY3RFcnJvclJlZiA9IGNvbmZsaWN0RXJyb3I7XG5cbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgZHJhaW4gcGVuZGluZyBwcm9taXNlcyBzeW5jaHJvbm91c2x5IHNvIHRoZSBudWxsIGV2ZW50XG4gICAgICAgIC8vIGhhbmRsZXIgd29uJ3Qgc2VlIHRoZW0gYW5kIHRyaWdnZXIgYSBzcHVyaW91cyBXb3JrZmxvd1N1c3BlbnNpb24uXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgcmVqZWN0aW9ucyBhcmUgZGVmZXJyZWQgdGhyb3VnaCBwcm9taXNlUXVldWUgZm9yIG9yZGVyaW5nLlxuICAgICAgICBjb25zdCBwZW5kaW5nUHJvbWlzZXMgPSBwcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBwcm9taXNlcy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZXIgb2YgcGVuZGluZ1Byb21pc2VzKSB7XG4gICAgICAgICAgICByZXNvbHZlci5yZWplY3QoY29uZmxpY3RFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnKSB7XG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHByb21pc2VzLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBwYXlsb2FkIGZyb20gdGhlIGV2ZW50IGRhdGEuXG4gICAgICAgICAgICAvLyBDaGFpbiB0aHJvdWdoIGN0eC5wcm9taXNlUXVldWUgdG8gZW5zdXJlIHRoYXQgYXN5bmNcbiAgICAgICAgICAgIC8vIGRlc2VyaWFsaXphdGlvbiAoZS5nLiwgZGVjcnlwdGlvbikgcmVzb2x2ZXMgaW4gZXZlbnQgbG9nIG9yZGVyLlxuICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbmV4dC5yZXNvbHZlKHBheWxvYWQgYXMgVCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgbmV4dC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF5bG9hZHNRdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgLy8gVGVybWluYWwgc3RhdGUgLSByZW1vdmUgZnJvbSBxdWV1ZSAobGlrZSBzdGVwX2NvbXBsZXRlZC93YWl0X2NvbXBsZXRlZClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAvLyBNYXJrIHRoYXQgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZFxuICAgICAgICBoYXNEaXNwb3NlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gV2UncmUgZG9uZSBwcm9jZXNzaW5nIGFueSBtb3JlIGV2ZW50cyBmb3IgdGhpcyBob29rXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBBbiB1bmV4cGVjdGVkIGV2ZW50IHR5cGUgaGFzIGJlZW4gcmVjZWl2ZWQsIHRoaXMgZXZlbnQgbG9nIGxvb2tzIGNvcnJ1cHRlZC4gTGV0J3MgZmFpbCBpbW1lZGlhdGVseS5cbiAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgIG5ldyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yKFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSBmb3IgaG9vayAke2NvcnJlbGF0aW9uSWR9ICh0b2tlbjogJHt0b2tlbn0pIFwiJHtldmVudC5ldmVudFR5cGV9XCJgXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIC8vIFRyYWNrIGlmIHRoZSBob29rIGhhcyBiZWVuIGRpc3Bvc2VkXG4gICAgbGV0IGlzRGlzcG9zZWQgPSBmYWxzZTtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgcHJvbWlzZSB0aGF0IHdhaXRzIGZvciB0aGUgbmV4dCBob29rIHBheWxvYWRcbiAgICBmdW5jdGlvbiBjcmVhdGVIb29rUHJvbWlzZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcblxuICAgICAgLy8gSWYgd2UgaGF2ZSBhIGNvbmZsaWN0LCByZWplY3QgdGhyb3VnaCB0aGUgcHJvbWlzZVF1ZXVlIHRvIG1haW50YWluXG4gICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIHdpdGggYW55IHByaW9yIHF1ZXVlZCByZXNvbHV0aW9ucy5cbiAgICAgIGlmIChoYXNDb25mbGljdCAmJiBjb25mbGljdEVycm9yUmVmKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVycy5yZWplY3QoY29uZmxpY3RFcnJvclJlZik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXlsb2Fkc1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dFBheWxvYWQgPSBwYXlsb2Fkc1F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChuZXh0UGF5bG9hZCkge1xuICAgICAgICAgIC8vIENoYWluIHRocm91Z2ggY3R4LnByb21pc2VRdWV1ZSB0byBlbnN1cmUgdGhhdCBhc3luY1xuICAgICAgICAgIC8vIGRlc2VyaWFsaXphdGlvbiAoZS5nLiwgZGVjcnlwdGlvbikgcmVzb2x2ZXMgaW4gZXZlbnQgbG9nIG9yZGVyLlxuICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgbmV4dFBheWxvYWQuZXZlbnREYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgIGN0eC5lbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKHBheWxvYWQgYXMgVCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXNvbHZlcnMucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRMb2dFbXB0eSkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZXMucHVzaChyZXNvbHZlcnMpO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgfVxuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Bvc2UgdGhlIGhvb2tcbiAgICBmdW5jdGlvbiBkaXNwb3NlSG9vaygpOiB2b2lkIHtcbiAgICAgIGlmIChpc0Rpc3Bvc2VkKSB7XG4gICAgICAgIHJldHVybjsgLy8gQWxyZWFkeSBkaXNwb3NlZCwgbm90aGluZyB0byBkb1xuICAgICAgfVxuICAgICAgaXNEaXNwb3NlZCA9IHRydWU7XG5cbiAgICAgIC8vIElmIHRoZSBldmVudCBsb2cgYWxyZWFkeSBjb250YWlucyBob29rX2Rpc3Bvc2VkLCB0aGlzIGlzIGEgcmVwbGF5IOKAlCBuby1vcFxuICAgICAgaWYgKGhhc0Rpc3Bvc2VkRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGlzcG9zZWQgZmxhZyBvbiB0aGUgZXhpc3RpbmcgcXVldWUgaXRlbVxuICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgIHF1ZXVlSXRlbS5kaXNwb3NlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIERyYWluIGFueSBwZW5kaW5nIHByb21pc2VzIHRoYXQgYXJlIHdhaXRpbmcgZm9yIHBheWxvYWRzLlxuICAgICAgLy8gV2l0aG91dCB0aGlzLCBwcm9taXNlcyBjcmVhdGVkIGJ5IGBhd2FpdCBob29rYCBvciB0aGUgYXN5bmMgaXRlcmF0b3Inc1xuICAgICAgLy8gYHlpZWxkIGF3YWl0IHRoaXNgIHdvdWxkIGhhbmcgZm9yZXZlciBzaW5jZSB0aGUgZXZlbnQgY29uc3VtZXIgd2lsbFxuICAgICAgLy8gbmV2ZXIgZGVsaXZlciBhbm90aGVyIGhvb2tfcmVjZWl2ZWQgYWZ0ZXIgZGlzcG9zYWwuXG4gICAgICBpZiAocHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcm9taXNlcy5sZW5ndGggPSAwO1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgd2ViaG9va0xvZ2dlci5kZWJ1ZygnSG9vayBkaXNwb3NlZCcsIHsgY29ycmVsYXRpb25JZCwgdG9rZW4gfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaG9vazogSG9vazxUPiA9IHtcbiAgICAgIHRva2VuLFxuXG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGhlblByb3BlcnR5OiBJbnRlbnRpb25hbGx5IHRoZW5hYmxlXG4gICAgICB0aGVuPFRSZXN1bHQxID0gVCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgICAgIG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICAgICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGxcbiAgICAgICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlSG9va1Byb21pc2UoKS50aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIFN1cHBvcnQgYGZvciBhd2FpdCAoY29uc3QgcGF5bG9hZCBvZiBob29rKSB7IOKApiB9YCBzeW50YXhcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICB3aGlsZSAoIWlzRGlzcG9zZWQpIHtcbiAgICAgICAgICB5aWVsZCBhd2FpdCB0aGlzO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkaXNwb3NlOiBkaXNwb3NlSG9vayxcblxuICAgICAgW1N5bWJvbC5kaXNwb3NlXTogZGlzcG9zZUhvb2ssXG4gICAgfTtcblxuICAgIC8vIEFsc28gcmVnaXN0ZXIgd2l0aCB0aGUgVk0ncyBTeW1ib2wuZGlzcG9zZSBzbyBgdXNpbmdgIHdvcmtzIGluc2lkZVxuICAgIC8vIHRoZSB3b3JrZmxvdyBzYW5kYm94ICh0aGUgVk0gbWF5IGhhdmUgYSBwb2x5ZmlsbGVkIFN5bWJvbC5kaXNwb3NlXG4gICAgLy8gdGhhdCBkaWZmZXJzIGZyb20gdGhlIGhvc3QncykuXG4gICAgY29uc3Qgdm1EaXNwb3NlID0gY3R4Lmdsb2JhbFRoaXMuU3ltYm9sLmRpc3Bvc2U7XG4gICAgaWYgKHZtRGlzcG9zZSAmJiB2bURpc3Bvc2UgIT09IFN5bWJvbC5kaXNwb3NlKSB7XG4gICAgICAoaG9vayBhcyBhbnkpW3ZtRGlzcG9zZV0gPSBkaXNwb3NlSG9vaztcbiAgICB9XG5cbiAgICByZXR1cm4gaG9vaztcbiAgfTtcbn1cbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import type { StepMetadata } from '../step/get-step-metadata.js';
2
2
  export { FatalError, RetryableError, type RetryableErrorOptions, } from '@workflow/errors';
3
3
  export type { Hook, HookOptions } from '../create-hook.js';
4
+ export { experimental_setAttributes } from './set-attributes.js';
4
5
  export { sleep } from '../sleep.js';
5
6
  export { createHook, createWebhook } from './create-hook.js';
6
7
  export { defineHook } from './define-hook.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,wBAAgB,eAAe,IAAI,YAAY,CAM9C;AACD,wBAAgB,UAAU,SAMzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,wBAAgB,eAAe,IAAI,YAAY,CAM9C;AACD,wBAAgB,UAAU,SAMzB"}
@@ -1,5 +1,6 @@
1
1
  import { throwNotInStepContext, throwUnavailableInWorkflowContext, } from '../context-errors.js';
2
2
  export { FatalError, RetryableError, } from '@workflow/errors';
3
+ export { experimental_setAttributes } from './set-attributes.js';
3
4
  export { sleep } from '../sleep.js';
4
5
  export { createHook, createWebhook } from './create-hook.js';
5
6
  export { defineHook } from './define-hook.js';
@@ -13,4 +14,4 @@ export function getStepMetadata() {
13
14
  export function resumeHook() {
14
15
  throwUnavailableInWorkflowContext('resumeHook()', 'https://workflow-sdk.dev/docs/api-reference/workflow-api/resume-hook', resumeHook);
15
16
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixpQ0FBaUMsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsR0FFZixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELG9FQUFvRTtBQUNwRSw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLGVBQWU7SUFDN0IscUJBQXFCLENBQ25CLG1CQUFtQixFQUNuQix3RUFBd0UsRUFDeEUsZUFBZSxDQUNoQixDQUFDO0FBQ0osQ0FBQztBQUNELE1BQU0sVUFBVSxVQUFVO0lBQ3hCLGlDQUFpQyxDQUMvQixjQUFjLEVBQ2Qsc0VBQXNFLEVBQ3RFLFVBQVUsQ0FDWCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHRocm93Tm90SW5TdGVwQ29udGV4dCxcbiAgdGhyb3dVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0LFxufSBmcm9tICcuLi9jb250ZXh0LWVycm9ycy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0ZXBNZXRhZGF0YSB9IGZyb20gJy4uL3N0ZXAvZ2V0LXN0ZXAtbWV0YWRhdGEuanMnO1xuXG5leHBvcnQge1xuICBGYXRhbEVycm9yLFxuICBSZXRyeWFibGVFcnJvcixcbiAgdHlwZSBSZXRyeWFibGVFcnJvck9wdGlvbnMsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuZXhwb3J0IHR5cGUgeyBIb29rLCBIb29rT3B0aW9ucyB9IGZyb20gJy4uL2NyZWF0ZS1ob29rLmpzJztcbmV4cG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vc2xlZXAuanMnO1xuZXhwb3J0IHsgY3JlYXRlSG9vaywgY3JlYXRlV2ViaG9vayB9IGZyb20gJy4vY3JlYXRlLWhvb2suanMnO1xuZXhwb3J0IHsgZGVmaW5lSG9vayB9IGZyb20gJy4vZGVmaW5lLWhvb2suanMnO1xuZXhwb3J0IHsgZ2V0V29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gJy4vZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzJztcbmV4cG9ydCB7IGdldFdyaXRhYmxlIH0gZnJvbSAnLi93cml0YWJsZS1zdHJlYW0uanMnO1xuXG4vLyB3b3JrZmxvd3MgY2FuJ3QgdXNlIHRoZXNlIGZ1bmN0aW9ucywgYnV0IHdlIHN0aWxsIG5lZWQgdG8gcHJvdmlkZVxuLy8gdGhlIGV4cG9ydCBzbyBidW5kbGluZyBkb2Vzbid0IGZhaWwgd2hlbiBzdGVwIGFuZCB3b3JrZmxvdyBhcmUgaW4gc2FtZSBmaWxlXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RlcE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YSB7XG4gIHRocm93Tm90SW5TdGVwQ29udGV4dChcbiAgICAnZ2V0U3RlcE1ldGFkYXRhKCknLFxuICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2dldC1zdGVwLW1ldGFkYXRhJyxcbiAgICBnZXRTdGVwTWV0YWRhdGFcbiAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVIb29rKCkge1xuICB0aHJvd1VuYXZhaWxhYmxlSW5Xb3JrZmxvd0NvbnRleHQoXG4gICAgJ3Jlc3VtZUhvb2soKScsXG4gICAgJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9kb2NzL2FwaS1yZWZlcmVuY2Uvd29ya2Zsb3ctYXBpL3Jlc3VtZS1ob29rJyxcbiAgICByZXN1bWVIb29rXG4gICk7XG59XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixpQ0FBaUMsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsR0FFZixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELG9FQUFvRTtBQUNwRSw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLGVBQWU7SUFDN0IscUJBQXFCLENBQ25CLG1CQUFtQixFQUNuQix3RUFBd0UsRUFDeEUsZUFBZSxDQUNoQixDQUFDO0FBQ0osQ0FBQztBQUNELE1BQU0sVUFBVSxVQUFVO0lBQ3hCLGlDQUFpQyxDQUMvQixjQUFjLEVBQ2Qsc0VBQXNFLEVBQ3RFLFVBQVUsQ0FDWCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHRocm93Tm90SW5TdGVwQ29udGV4dCxcbiAgdGhyb3dVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0LFxufSBmcm9tICcuLi9jb250ZXh0LWVycm9ycy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0ZXBNZXRhZGF0YSB9IGZyb20gJy4uL3N0ZXAvZ2V0LXN0ZXAtbWV0YWRhdGEuanMnO1xuXG5leHBvcnQge1xuICBGYXRhbEVycm9yLFxuICBSZXRyeWFibGVFcnJvcixcbiAgdHlwZSBSZXRyeWFibGVFcnJvck9wdGlvbnMsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuZXhwb3J0IHR5cGUgeyBIb29rLCBIb29rT3B0aW9ucyB9IGZyb20gJy4uL2NyZWF0ZS1ob29rLmpzJztcbmV4cG9ydCB7IGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzIH0gZnJvbSAnLi9zZXQtYXR0cmlidXRlcy5qcyc7XG5leHBvcnQgeyBzbGVlcCB9IGZyb20gJy4uL3NsZWVwLmpzJztcbmV4cG9ydCB7IGNyZWF0ZUhvb2ssIGNyZWF0ZVdlYmhvb2sgfSBmcm9tICcuL2NyZWF0ZS1ob29rLmpzJztcbmV4cG9ydCB7IGRlZmluZUhvb2sgfSBmcm9tICcuL2RlZmluZS1ob29rLmpzJztcbmV4cG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuL2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5leHBvcnQgeyBnZXRXcml0YWJsZSB9IGZyb20gJy4vd3JpdGFibGUtc3RyZWFtLmpzJztcblxuLy8gd29ya2Zsb3dzIGNhbid0IHVzZSB0aGVzZSBmdW5jdGlvbnMsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHByb3ZpZGVcbi8vIHRoZSBleHBvcnQgc28gYnVuZGxpbmcgZG9lc24ndCBmYWlsIHdoZW4gc3RlcCBhbmQgd29ya2Zsb3cgYXJlIGluIHNhbWUgZmlsZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0ZXBNZXRhZGF0YSgpOiBTdGVwTWV0YWRhdGEge1xuICB0aHJvd05vdEluU3RlcENvbnRleHQoXG4gICAgJ2dldFN0ZXBNZXRhZGF0YSgpJyxcbiAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9nZXQtc3RlcC1tZXRhZGF0YScsXG4gICAgZ2V0U3RlcE1ldGFkYXRhXG4gICk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzdW1lSG9vaygpIHtcbiAgdGhyb3dVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0KFxuICAgICdyZXN1bWVIb29rKCknLFxuICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93LWFwaS9yZXN1bWUtaG9vaycsXG4gICAgcmVzdW1lSG9va1xuICApO1xufVxuIl19
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Options accepted by `experimental_setAttributes`.
3
+ */
4
+ export interface ExperimentalSetAttributesOptions {
5
+ /**
6
+ * Permit attribute keys that start with the reserved `$` prefix.
7
+ * **Default: `false`.**
8
+ *
9
+ * The `$` namespace is reserved for framework and library code that
10
+ * is built on top of the workflow SDK (telemetry, agent metadata,
11
+ * platform-emitted tags, etc.). User code MUST NOT write keys in
12
+ * this namespace; validation rejects them so accidental collisions
13
+ * with tooling-owned keys can't slip through.
14
+ *
15
+ * Only flip this to `true` if your caller is itself a framework or
16
+ * library that owns a `$`-prefixed sub-namespace and knows the
17
+ * conventions of any other tools writing into it. Misuse can
18
+ * conflict with observability surfaces, agent dashboards, or future
19
+ * platform features that rely on the reserved namespace.
20
+ */
21
+ allowReservedAttributes?: boolean;
22
+ }
23
+ /**
24
+ * Attach plaintext string key/value metadata to the current workflow run.
25
+ *
26
+ * **EXPERIMENTAL.** The `experimental_` prefix is deliberate — the
27
+ * shape, semantics, and dispatch path are likely to change before this
28
+ * is renamed to a stable export. Use only when you can absorb a
29
+ * breaking rename later.
30
+ *
31
+ * Callable only from a workflow body (`'use workflow'`). The call is
32
+ * dispatched through the workflow runtime as a step, so the mutation
33
+ * is recorded in the event log and survives replay.
34
+ *
35
+ * Validation runs in the VM (cheap, deterministic) before the step
36
+ * dispatch — violations throw `FatalError` without queuing a step. An
37
+ * empty record is a no-op. `value: undefined` removes the key from the
38
+ * run's attribute map.
39
+ *
40
+ * **Reserved namespace.** Keys starting with `$` are reserved for
41
+ * framework/library code (telemetry, agent metadata, etc.). User code
42
+ * trying to write a `$`-prefixed key throws `FatalError`. If you are a
43
+ * framework author and need to set a reserved key, pass
44
+ * `{ allowReservedAttributes: true }` as the second argument — see
45
+ * `ExperimentalSetAttributesOptions` for the trade-offs.
46
+ *
47
+ * **WARNING**: While this feature is experimental, calling e.g.
48
+ * `Promise.all([experimental_setAttributes({ a: '1' }), experimental_setAttributes({ a: '2' })])`
49
+ * is not guaranteed to be ordered consistently, but the equivalent
50
+ * sequential `.then()` chain is.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * import { experimental_setAttributes } from 'workflow';
55
+ *
56
+ * export async function myWorkflow() {
57
+ * 'use workflow';
58
+ * await experimental_setAttributes({ phase: 'init' });
59
+ * // ... work ...
60
+ * await experimental_setAttributes({ phase: 'done', orderId: 'ord_123' });
61
+ * await experimental_setAttributes({ orderId: undefined }); // remove
62
+ * }
63
+ * ```
64
+ *
65
+ * @example Framework / library code writing into the reserved namespace.
66
+ * ```ts
67
+ * await experimental_setAttributes(
68
+ * { '$agent.kind': 'durable-agent' },
69
+ * { allowReservedAttributes: true }
70
+ * );
71
+ * ```
72
+ */
73
+ export declare function experimental_setAttributes(attrs: Record<string, string | undefined>, options?: ExperimentalSetAttributesOptions): Promise<void>;
74
+ //# sourceMappingURL=set-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-attributes.d.ts","sourceRoot":"","sources":["../../src/workflow/set-attributes.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;;;;;;;;;;;;;;OAeG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -0,0 +1,81 @@
1
+ import { FatalError } from '@workflow/errors';
2
+ import { AttributeValidationError, validateAttributeChanges, } from '@workflow/world';
3
+ import { WORKFLOW_USE_STEP } from '../symbols.js';
4
+ /**
5
+ * Attach plaintext string key/value metadata to the current workflow run.
6
+ *
7
+ * **EXPERIMENTAL.** The `experimental_` prefix is deliberate — the
8
+ * shape, semantics, and dispatch path are likely to change before this
9
+ * is renamed to a stable export. Use only when you can absorb a
10
+ * breaking rename later.
11
+ *
12
+ * Callable only from a workflow body (`'use workflow'`). The call is
13
+ * dispatched through the workflow runtime as a step, so the mutation
14
+ * is recorded in the event log and survives replay.
15
+ *
16
+ * Validation runs in the VM (cheap, deterministic) before the step
17
+ * dispatch — violations throw `FatalError` without queuing a step. An
18
+ * empty record is a no-op. `value: undefined` removes the key from the
19
+ * run's attribute map.
20
+ *
21
+ * **Reserved namespace.** Keys starting with `$` are reserved for
22
+ * framework/library code (telemetry, agent metadata, etc.). User code
23
+ * trying to write a `$`-prefixed key throws `FatalError`. If you are a
24
+ * framework author and need to set a reserved key, pass
25
+ * `{ allowReservedAttributes: true }` as the second argument — see
26
+ * `ExperimentalSetAttributesOptions` for the trade-offs.
27
+ *
28
+ * **WARNING**: While this feature is experimental, calling e.g.
29
+ * `Promise.all([experimental_setAttributes({ a: '1' }), experimental_setAttributes({ a: '2' })])`
30
+ * is not guaranteed to be ordered consistently, but the equivalent
31
+ * sequential `.then()` chain is.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * import { experimental_setAttributes } from 'workflow';
36
+ *
37
+ * export async function myWorkflow() {
38
+ * 'use workflow';
39
+ * await experimental_setAttributes({ phase: 'init' });
40
+ * // ... work ...
41
+ * await experimental_setAttributes({ phase: 'done', orderId: 'ord_123' });
42
+ * await experimental_setAttributes({ orderId: undefined }); // remove
43
+ * }
44
+ * ```
45
+ *
46
+ * @example Framework / library code writing into the reserved namespace.
47
+ * ```ts
48
+ * await experimental_setAttributes(
49
+ * { '$agent.kind': 'durable-agent' },
50
+ * { allowReservedAttributes: true }
51
+ * );
52
+ * ```
53
+ */
54
+ export async function experimental_setAttributes(attrs, options = {}) {
55
+ if (attrs === null || typeof attrs !== 'object' || Array.isArray(attrs)) {
56
+ throw new FatalError(`experimental_setAttributes requires a plain object, got ${attrs === null ? 'null' : Array.isArray(attrs) ? 'array' : typeof attrs}`);
57
+ }
58
+ const changes = Object.entries(attrs).map(([key, value]) => ({
59
+ key,
60
+ value: value === undefined ? null : value,
61
+ }));
62
+ if (changes.length === 0)
63
+ return;
64
+ const allowReservedAttributes = options.allowReservedAttributes === true;
65
+ try {
66
+ validateAttributeChanges(changes, { allowReservedAttributes });
67
+ }
68
+ catch (err) {
69
+ if (err instanceof AttributeValidationError) {
70
+ throw new FatalError(err.message);
71
+ }
72
+ throw err;
73
+ }
74
+ const useStep = globalThis[WORKFLOW_USE_STEP];
75
+ if (!useStep) {
76
+ throw new FatalError('experimental_setAttributes() called outside a workflow runtime context. ' +
77
+ 'It must be called from within a workflow body (`use workflow`).');
78
+ }
79
+ await useStep('__builtin_set_attributes')(changes, allowReservedAttributes ? { allowReservedAttributes: true } : {});
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFFTCx3QkFBd0IsRUFDeEIsd0JBQXdCLEdBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBeUJsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMEJBQTBCLENBQzlDLEtBQXlDLEVBQ3pDLFVBQTRDLEVBQUU7SUFFOUMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEUsTUFBTSxJQUFJLFVBQVUsQ0FDbEIsMkRBQ0UsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FDcEUsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQXNCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUMxRCxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLEdBQUc7UUFDSCxLQUFLLEVBQUUsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO0tBQzFDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQ2pDLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUksQ0FBQztJQUN6RSxJQUFJLENBQUM7UUFDSCx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLEdBQUcsWUFBWSx3QkFBd0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBSSxVQUFzQyxDQUFDLGlCQUFpQixDQU81RCxDQUFDO0lBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLFVBQVUsQ0FDbEIsMEVBQTBFO1lBQ3hFLGlFQUFpRSxDQUNwRSxDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQ3ZDLE9BQU8sRUFDUCx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNqRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7XG4gIHR5cGUgQXR0cmlidXRlQ2hhbmdlLFxuICBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IsXG4gIHZhbGlkYXRlQXR0cmlidXRlQ2hhbmdlcyxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IFdPUktGTE9XX1VTRV9TVEVQIH0gZnJvbSAnLi4vc3ltYm9scy5qcyc7XG5cbi8qKlxuICogT3B0aW9ucyBhY2NlcHRlZCBieSBgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBlcm1pdCBhdHRyaWJ1dGUga2V5cyB0aGF0IHN0YXJ0IHdpdGggdGhlIHJlc2VydmVkIGAkYCBwcmVmaXguXG4gICAqICoqRGVmYXVsdDogYGZhbHNlYC4qKlxuICAgKlxuICAgKiBUaGUgYCRgIG5hbWVzcGFjZSBpcyByZXNlcnZlZCBmb3IgZnJhbWV3b3JrIGFuZCBsaWJyYXJ5IGNvZGUgdGhhdFxuICAgKiBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIHdvcmtmbG93IFNESyAodGVsZW1ldHJ5LCBhZ2VudCBtZXRhZGF0YSxcbiAgICogcGxhdGZvcm0tZW1pdHRlZCB0YWdzLCBldGMuKS4gVXNlciBjb2RlIE1VU1QgTk9UIHdyaXRlIGtleXMgaW5cbiAgICogdGhpcyBuYW1lc3BhY2U7IHZhbGlkYXRpb24gcmVqZWN0cyB0aGVtIHNvIGFjY2lkZW50YWwgY29sbGlzaW9uc1xuICAgKiB3aXRoIHRvb2xpbmctb3duZWQga2V5cyBjYW4ndCBzbGlwIHRocm91Z2guXG4gICAqXG4gICAqIE9ubHkgZmxpcCB0aGlzIHRvIGB0cnVlYCBpZiB5b3VyIGNhbGxlciBpcyBpdHNlbGYgYSBmcmFtZXdvcmsgb3JcbiAgICogbGlicmFyeSB0aGF0IG93bnMgYSBgJGAtcHJlZml4ZWQgc3ViLW5hbWVzcGFjZSBhbmQga25vd3MgdGhlXG4gICAqIGNvbnZlbnRpb25zIG9mIGFueSBvdGhlciB0b29scyB3cml0aW5nIGludG8gaXQuIE1pc3VzZSBjYW5cbiAgICogY29uZmxpY3Qgd2l0aCBvYnNlcnZhYmlsaXR5IHN1cmZhY2VzLCBhZ2VudCBkYXNoYm9hcmRzLCBvciBmdXR1cmVcbiAgICogcGxhdGZvcm0gZmVhdHVyZXMgdGhhdCByZWx5IG9uIHRoZSByZXNlcnZlZCBuYW1lc3BhY2UuXG4gICAqL1xuICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQXR0YWNoIHBsYWludGV4dCBzdHJpbmcga2V5L3ZhbHVlIG1ldGFkYXRhIHRvIHRoZSBjdXJyZW50IHdvcmtmbG93IHJ1bi5cbiAqXG4gKiAqKkVYUEVSSU1FTlRBTC4qKiBUaGUgYGV4cGVyaW1lbnRhbF9gIHByZWZpeCBpcyBkZWxpYmVyYXRlIOKAlCB0aGVcbiAqIHNoYXBlLCBzZW1hbnRpY3MsIGFuZCBkaXNwYXRjaCBwYXRoIGFyZSBsaWtlbHkgdG8gY2hhbmdlIGJlZm9yZSB0aGlzXG4gKiBpcyByZW5hbWVkIHRvIGEgc3RhYmxlIGV4cG9ydC4gVXNlIG9ubHkgd2hlbiB5b3UgY2FuIGFic29yYiBhXG4gKiBicmVha2luZyByZW5hbWUgbGF0ZXIuXG4gKlxuICogQ2FsbGFibGUgb25seSBmcm9tIGEgd29ya2Zsb3cgYm9keSAoYCd1c2Ugd29ya2Zsb3cnYCkuIFRoZSBjYWxsIGlzXG4gKiBkaXNwYXRjaGVkIHRocm91Z2ggdGhlIHdvcmtmbG93IHJ1bnRpbWUgYXMgYSBzdGVwLCBzbyB0aGUgbXV0YXRpb25cbiAqIGlzIHJlY29yZGVkIGluIHRoZSBldmVudCBsb2cgYW5kIHN1cnZpdmVzIHJlcGxheS5cbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bnMgaW4gdGhlIFZNIChjaGVhcCwgZGV0ZXJtaW5pc3RpYykgYmVmb3JlIHRoZSBzdGVwXG4gKiBkaXNwYXRjaCDigJQgdmlvbGF0aW9ucyB0aHJvdyBgRmF0YWxFcnJvcmAgd2l0aG91dCBxdWV1aW5nIGEgc3RlcC4gQW5cbiAqIGVtcHR5IHJlY29yZCBpcyBhIG5vLW9wLiBgdmFsdWU6IHVuZGVmaW5lZGAgcmVtb3ZlcyB0aGUga2V5IGZyb20gdGhlXG4gKiBydW4ncyBhdHRyaWJ1dGUgbWFwLlxuICpcbiAqICoqUmVzZXJ2ZWQgbmFtZXNwYWNlLioqIEtleXMgc3RhcnRpbmcgd2l0aCBgJGAgYXJlIHJlc2VydmVkIGZvclxuICogZnJhbWV3b3JrL2xpYnJhcnkgY29kZSAodGVsZW1ldHJ5LCBhZ2VudCBtZXRhZGF0YSwgZXRjLikuIFVzZXIgY29kZVxuICogdHJ5aW5nIHRvIHdyaXRlIGEgYCRgLXByZWZpeGVkIGtleSB0aHJvd3MgYEZhdGFsRXJyb3JgLiBJZiB5b3UgYXJlIGFcbiAqIGZyYW1ld29yayBhdXRob3IgYW5kIG5lZWQgdG8gc2V0IGEgcmVzZXJ2ZWQga2V5LCBwYXNzXG4gKiBgeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9YCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IOKAlCBzZWVcbiAqIGBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9uc2AgZm9yIHRoZSB0cmFkZS1vZmZzLlxuICpcbiAqICoqV0FSTklORyoqOiBXaGlsZSB0aGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLCBjYWxsaW5nIGUuZy5cbiAqIGBQcm9taXNlLmFsbChbZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoeyBhOiAnMScgfSksIGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzKHsgYTogJzInIH0pXSlgXG4gKiBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBvcmRlcmVkIGNvbnNpc3RlbnRseSwgYnV0IHRoZSBlcXVpdmFsZW50XG4gKiBzZXF1ZW50aWFsIGAudGhlbigpYCBjaGFpbiBpcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzIH0gZnJvbSAnd29ya2Zsb3cnO1xuICpcbiAqIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBteVdvcmtmbG93KCkge1xuICogICAndXNlIHdvcmtmbG93JztcbiAqICAgYXdhaXQgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoeyBwaGFzZTogJ2luaXQnIH0pO1xuICogICAvLyAuLi4gd29yayAuLi5cbiAqICAgYXdhaXQgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoeyBwaGFzZTogJ2RvbmUnLCBvcmRlcklkOiAnb3JkXzEyMycgfSk7XG4gKiAgIGF3YWl0IGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzKHsgb3JkZXJJZDogdW5kZWZpbmVkIH0pOyAvLyByZW1vdmVcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZyYW1ld29yayAvIGxpYnJhcnkgY29kZSB3cml0aW5nIGludG8gdGhlIHJlc2VydmVkIG5hbWVzcGFjZS5cbiAqIGBgYHRzXG4gKiBhd2FpdCBleHBlcmltZW50YWxfc2V0QXR0cmlidXRlcyhcbiAqICAgeyAnJGFnZW50LmtpbmQnOiAnZHVyYWJsZS1hZ2VudCcgfSxcbiAqICAgeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9XG4gKiApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBlcmltZW50YWxfc2V0QXR0cmlidXRlcyhcbiAgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoYXR0cnMgPT09IG51bGwgfHwgdHlwZW9mIGF0dHJzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGF0dHJzKSkge1xuICAgIHRocm93IG5ldyBGYXRhbEVycm9yKFxuICAgICAgYGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzIHJlcXVpcmVzIGEgcGxhaW4gb2JqZWN0LCBnb3QgJHtcbiAgICAgICAgYXR0cnMgPT09IG51bGwgPyAnbnVsbCcgOiBBcnJheS5pc0FycmF5KGF0dHJzKSA/ICdhcnJheScgOiB0eXBlb2YgYXR0cnNcbiAgICAgIH1gXG4gICAgKTtcbiAgfVxuICBjb25zdCBjaGFuZ2VzOiBBdHRyaWJ1dGVDaGFuZ2VbXSA9IE9iamVjdC5lbnRyaWVzKGF0dHJzKS5tYXAoXG4gICAgKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlOiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlLFxuICAgIH0pXG4gICk7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9IG9wdGlvbnMuYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgPT09IHRydWU7XG4gIHRyeSB7XG4gICAgdmFsaWRhdGVBdHRyaWJ1dGVDaGFuZ2VzKGNoYW5nZXMsIHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBGYXRhbEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIGNvbnN0IHVzZVN0ZXAgPSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbV09SS0ZMT1dfVVNFX1NURVBdIGFzXG4gICAgfCAoKFxuICAgICAgICBzdGVwTmFtZTogc3RyaW5nXG4gICAgICApID0+IChcbiAgICAgICAgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW10sXG4gICAgICAgIG9wdGlvbnM/OiB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogYm9vbGVhbiB9XG4gICAgICApID0+IFByb21pc2U8dm9pZD4pXG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmICghdXNlU3RlcCkge1xuICAgIHRocm93IG5ldyBGYXRhbEVycm9yKFxuICAgICAgJ2V4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzKCkgY2FsbGVkIG91dHNpZGUgYSB3b3JrZmxvdyBydW50aW1lIGNvbnRleHQuICcgK1xuICAgICAgICAnSXQgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB3b3JrZmxvdyBib2R5IChgdXNlIHdvcmtmbG93YCkuJ1xuICAgICk7XG4gIH1cbiAgYXdhaXQgdXNlU3RlcCgnX19idWlsdGluX3NldF9hdHRyaWJ1dGVzJykoXG4gICAgY2hhbmdlcyxcbiAgICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA/IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfSA6IHt9XG4gICk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CAsEjB"}
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CAgGjB"}
@@ -1,4 +1,4 @@
1
- import { WorkflowRuntimeError } from '@workflow/errors';
1
+ import { CorruptedEventLogError } from '@workflow/errors';
2
2
  import { parseDurationToDate, withResolvers } from '@workflow/utils';
3
3
  import { EventConsumerResult } from '../events-consumer.js';
4
4
  import { WorkflowSuspension } from '../global.js';
@@ -42,6 +42,25 @@ export function createSleep(ctx) {
42
42
  }
43
43
  // Check for wait_completed event
44
44
  if (event.eventType === 'wait_completed') {
45
+ const eventResumeAt = event.eventData?.resumeAt;
46
+ if (eventResumeAt !== undefined) {
47
+ const queueItem = ctx.invocationsQueue.get(correlationId);
48
+ const expectedResumeAt = queueItem && queueItem.type === 'wait'
49
+ ? queueItem.resumeAt
50
+ : resumeAt;
51
+ const eventResumeAtDate = new Date(eventResumeAt);
52
+ const eventResumeAtMs = eventResumeAtDate.getTime();
53
+ const expectedResumeAtMs = expectedResumeAt.getTime();
54
+ const eventResumeAtForMessage = Number.isFinite(eventResumeAtMs)
55
+ ? eventResumeAtDate.toISOString()
56
+ : String(eventResumeAt);
57
+ if (eventResumeAtMs !== expectedResumeAtMs) {
58
+ ctx.promiseQueue = ctx.promiseQueue.then(() => {
59
+ ctx.onWorkflowError(new CorruptedEventLogError(`Corrupted event log: wait_completed event for ${correlationId} has resumeAt "${eventResumeAtForMessage}", but the current wait consumer expects "${expectedResumeAt.toISOString()}"`));
60
+ });
61
+ return EventConsumerResult.Finished;
62
+ }
63
+ }
45
64
  // Remove this wait from the invocations queue (O(1) delete using Map)
46
65
  ctx.invocationsQueue.delete(correlationId);
47
66
  // Wait has elapsed - chain through promiseQueue to ensure
@@ -53,11 +72,11 @@ export function createSleep(ctx) {
53
72
  }
54
73
  // An unexpected event type has been received, this event log looks corrupted. Let's fail immediately.
55
74
  ctx.promiseQueue = ctx.promiseQueue.then(() => {
56
- ctx.onWorkflowError(new WorkflowRuntimeError(`Unexpected event type for wait ${correlationId} "${event.eventType}"`));
75
+ ctx.onWorkflowError(new CorruptedEventLogError(`Unexpected event type for wait ${correlationId} "${event.eventType}"`));
57
76
  });
58
77
  return EventConsumerResult.Finished;
59
78
  });
60
79
  return promise;
61
80
  };
62
81
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQWdDO0lBQzFELE9BQU8sS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBa0M7UUFFbEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFhLEVBQVEsQ0FBQztRQUNuRCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBRW5ELDRCQUE0QjtRQUM1QixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQTRCO1lBQ3hDLElBQUksRUFBRSxNQUFNO1lBQ1osYUFBYTtZQUNiLFFBQVE7U0FDVCxDQUFDO1FBQ0YsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbEQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQywrREFBK0Q7WUFDL0QsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUN6QixHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzdELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDekMsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDMUMsdUZBQXVGO2dCQUN2RixPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsNkVBQTZFO1lBQzdFLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDdkMsdUVBQXVFO2dCQUN2RSx3QkFBd0I7Z0JBQ3hCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzNDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNqQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxpQ0FBaUM7WUFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3pDLHNFQUFzRTtnQkFDdEUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFM0MsMERBQTBEO2dCQUMxRCxxREFBcUQ7Z0JBQ3JELEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM1QyxPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsc0dBQXNHO1lBQ3RHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLG9CQUFvQixDQUN0QixrQ0FBa0MsYUFBYSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FDdkUsQ0FDRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xlZXAoY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHNsZWVwSW1wbChcbiAgICBwYXJhbTogU3RyaW5nVmFsdWUgfCBEYXRlIHwgbnVtYmVyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gd2l0aFJlc29sdmVyczx2b2lkPigpO1xuICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgd2FpdF8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSByZXN1bWUgdGltZVxuICAgIGNvbnN0IHJlc3VtZUF0ID0gcGFyc2VEdXJhdGlvblRvRGF0ZShwYXJhbSk7XG5cbiAgICAvLyBBZGQgd2FpdCB0byBpbnZvY2F0aW9ucyBxdWV1ZSAodXNpbmcgTWFwIGZvciBPKDEpIG9wZXJhdGlvbnMpXG4gICAgY29uc3Qgd2FpdEl0ZW06IFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtID0ge1xuICAgICAgdHlwZTogJ3dhaXQnLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHJlc3VtZUF0LFxuICAgIH07XG4gICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHdhaXRJdGVtKTtcblxuICAgIGN0eC5ldmVudHNDb25zdW1lci5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXZlbnRzIGFuZCB3ZSdyZSB3YWl0aW5nIGZvciB3YWl0X2NvbXBsZXRlZCxcbiAgICAgIC8vIHN1c3BlbmQgdGhlIHdvcmtmbG93IHVudGlsIHRoZSB3YWl0IGZpcmVzXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgLy8gV2UncmUgbm90IGludGVyZXN0ZWQgaW4gdGhpcyBldmVudCAtIHRoZSBjb3JyZWxhdGlvbklkIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igd2FpdF9jcmVhdGVkIGV2ZW50IHRvIG1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgZXZlbnQgY3JlYXRlZFxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCcpIHtcbiAgICAgICAgLy8gTWFyayB0aGlzIHdhaXQgYXMgaGF2aW5nIHRoZSBjcmVhdGVkIGV2ZW50LCBidXQga2VlcCBpdCBpbiB0aGUgcXVldWVcbiAgICAgICAgLy8gTygxKSBsb29rdXAgdXNpbmcgTWFwXG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ3dhaXQnKSB7XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgcXVldWVJdGVtLnJlc3VtZUF0ID0gZXZlbnQuZXZlbnREYXRhLnJlc3VtZUF0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igd2FpdF9jb21wbGV0ZWQgZXZlbnRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCcpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgd2FpdCBmcm9tIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZSAoTygxKSBkZWxldGUgdXNpbmcgTWFwKVxuICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgLy8gV2FpdCBoYXMgZWxhcHNlZCAtIGNoYWluIHRocm91Z2ggcHJvbWlzZVF1ZXVlIHRvIGVuc3VyZVxuICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zLlxuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gdW5leHBlY3RlZCBldmVudCB0eXBlIGhhcyBiZWVuIHJlY2VpdmVkLCB0aGlzIGV2ZW50IGxvZyBsb29rcyBjb3JydXB0ZWQuIExldCdzIGZhaWwgaW1tZWRpYXRlbHkuXG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICBgVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciB3YWl0ICR7Y29ycmVsYXRpb25JZH0gXCIke2V2ZW50LmV2ZW50VHlwZX1cImBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQWdDO0lBQzFELE9BQU8sS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBa0M7UUFFbEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFhLEVBQVEsQ0FBQztRQUNuRCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBRW5ELDRCQUE0QjtRQUM1QixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQTRCO1lBQ3hDLElBQUksRUFBRSxNQUFNO1lBQ1osYUFBYTtZQUNiLFFBQVE7U0FDVCxDQUFDO1FBQ0YsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbEQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQywrREFBK0Q7WUFDL0QsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUN6QixHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzdELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDekMsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDMUMsdUZBQXVGO2dCQUN2RixPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsNkVBQTZFO1lBQzdFLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDdkMsdUVBQXVFO2dCQUN2RSx3QkFBd0I7Z0JBQ3hCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzNDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNqQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxpQ0FBaUM7WUFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO2dCQUNoRCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxnQkFBZ0IsR0FDcEIsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTTt3QkFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRO3dCQUNwQixDQUFDLENBQUMsUUFBUSxDQUFDO29CQUNmLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ2xELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNwRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN0RCxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO3dCQUM5RCxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO3dCQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUUxQixJQUFJLGVBQWUsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO3dCQUMzQyxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDNUMsR0FBRyxDQUFDLGVBQWUsQ0FDakIsSUFBSSxzQkFBc0IsQ0FDeEIsaURBQWlELGFBQWEsa0JBQWtCLHVCQUF1Qiw2Q0FBNkMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FDdEwsQ0FDRixDQUFDO3dCQUNKLENBQUMsQ0FBQyxDQUFDO3dCQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsc0VBQXNFO2dCQUN0RSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUUzQywwREFBMEQ7Z0JBQzFELHFEQUFxRDtnQkFDckQsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzVDLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxzR0FBc0c7WUFDdEcsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksc0JBQXNCLENBQ3hCLGtDQUFrQyxhQUFhLEtBQUssS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUN2RSxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHBhcnNlRHVyYXRpb25Ub0RhdGUsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdWYWx1ZSB9IGZyb20gJ21zJztcbmltcG9ydCB7IEV2ZW50Q29uc3VtZXJSZXN1bHQgfSBmcm9tICcuLi9ldmVudHMtY29uc3VtZXIuanMnO1xuaW1wb3J0IHsgdHlwZSBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSwgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi4vZ2xvYmFsLmpzJztcbmltcG9ydCB7XG4gIHNjaGVkdWxlV2hlbklkbGUsXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgd2FpdCBhcyBoYXZpbmcgdGhlIGV2ZW50IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKSB7XG4gICAgICAgIC8vIE1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgY3JlYXRlZCBldmVudCwgYnV0IGtlZXAgaXQgaW4gdGhlIHF1ZXVlXG4gICAgICAgIC8vIE8oMSkgbG9va3VwIHVzaW5nIE1hcFxuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0Jykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSXRlbS5yZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY29tcGxldGVkIGV2ZW50XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXQgPSBldmVudC5ldmVudERhdGE/LnJlc3VtZUF0O1xuICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXQgPVxuICAgICAgICAgICAgcXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnd2FpdCdcbiAgICAgICAgICAgICAgPyBxdWV1ZUl0ZW0ucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiByZXN1bWVBdDtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0RGF0ZSA9IG5ldyBEYXRlKGV2ZW50UmVzdW1lQXQpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRNcyA9IGV2ZW50UmVzdW1lQXREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VtZUF0TXMgPSBleHBlY3RlZFJlc3VtZUF0LmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0Rm9yTWVzc2FnZSA9IE51bWJlci5pc0Zpbml0ZShldmVudFJlc3VtZUF0TXMpXG4gICAgICAgICAgICA/IGV2ZW50UmVzdW1lQXREYXRlLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogU3RyaW5nKGV2ZW50UmVzdW1lQXQpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50UmVzdW1lQXRNcyAhPT0gZXhwZWN0ZWRSZXN1bWVBdE1zKSB7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgICBuZXcgQ29ycnVwdGVkRXZlbnRMb2dFcnJvcihcbiAgICAgICAgICAgICAgICAgIGBDb3JydXB0ZWQgZXZlbnQgbG9nOiB3YWl0X2NvbXBsZXRlZCBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfSBoYXMgcmVzdW1lQXQgXCIke2V2ZW50UmVzdW1lQXRGb3JNZXNzYWdlfVwiLCBidXQgdGhlIGN1cnJlbnQgd2FpdCBjb25zdW1lciBleHBlY3RzIFwiJHtleHBlY3RlZFJlc3VtZUF0LnRvSVNPU3RyaW5nKCl9XCJgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhpcyB3YWl0IGZyb20gdGhlIGludm9jYXRpb25zIHF1ZXVlIChPKDEpIGRlbGV0ZSB1c2luZyBNYXApXG4gICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcblxuICAgICAgICAvLyBXYWl0IGhhcyBlbGFwc2VkIC0gY2hhaW4gdGhyb3VnaCBwcm9taXNlUXVldWUgdG8gZW5zdXJlXG4gICAgICAgIC8vIGRldGVybWluaXN0aWMgb3JkZXJpbmcgb2YgYWxsIHByb21pc2UgcmVzb2x1dGlvbnMuXG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBBbiB1bmV4cGVjdGVkIGV2ZW50IHR5cGUgaGFzIGJlZW4gcmVjZWl2ZWQsIHRoaXMgZXZlbnQgbG9nIGxvb2tzIGNvcnJ1cHRlZC4gTGV0J3MgZmFpbCBpbW1lZGlhdGVseS5cbiAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgIG5ldyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yKFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSBmb3Igd2FpdCAke2NvcnJlbGF0aW9uSWR9IFwiJHtldmVudC5ldmVudFR5cGV9XCJgXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgGjD,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS,GACnC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAwsB/B"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA0GjD,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS,GACnC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAusB/B"}