@workflow/core 5.0.0-beta.39 → 5.0.0-beta.40

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 (95) hide show
  1. package/dist/classify-error.d.ts.map +1 -1
  2. package/dist/classify-error.js +5 -2
  3. package/dist/correlation-id.d.ts +109 -0
  4. package/dist/correlation-id.d.ts.map +1 -0
  5. package/dist/correlation-id.js +139 -0
  6. package/dist/describe-error.d.ts.map +1 -1
  7. package/dist/describe-error.js +14 -1
  8. package/dist/events-consumer.d.ts +1 -0
  9. package/dist/events-consumer.d.ts.map +1 -1
  10. package/dist/events-consumer.js +11 -3
  11. package/dist/private.d.ts +17 -1
  12. package/dist/private.d.ts.map +1 -1
  13. package/dist/private.js +1 -1
  14. package/dist/runtime/constants.d.ts +19 -0
  15. package/dist/runtime/constants.d.ts.map +1 -1
  16. package/dist/runtime/constants.js +30 -1
  17. package/dist/runtime/deployment-guard.d.ts +99 -0
  18. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  19. package/dist/runtime/deployment-guard.js +154 -0
  20. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  21. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  22. package/dist/runtime/quickjs-assets.generated.js +30 -0
  23. package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
  24. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  25. package/dist/runtime/quickjs-entrypoint.js +1429 -0
  26. package/dist/runtime/quickjs-runtime.d.ts +193 -0
  27. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  28. package/dist/runtime/quickjs-runtime.js +1944 -0
  29. package/dist/runtime/run.d.ts +2 -0
  30. package/dist/runtime/run.d.ts.map +1 -1
  31. package/dist/runtime/run.js +9 -4
  32. package/dist/runtime/runs.d.ts +18 -1
  33. package/dist/runtime/runs.d.ts.map +1 -1
  34. package/dist/runtime/runs.js +96 -2
  35. package/dist/runtime/start.d.ts.map +1 -1
  36. package/dist/runtime/start.js +9 -1
  37. package/dist/runtime/suspension-handler.d.ts +7 -0
  38. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  39. package/dist/runtime/suspension-handler.js +29 -2
  40. package/dist/runtime/vm-mode.d.ts +44 -0
  41. package/dist/runtime/vm-mode.d.ts.map +1 -0
  42. package/dist/runtime/vm-mode.js +62 -0
  43. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  44. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  45. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  46. package/dist/runtime.d.ts +1 -1
  47. package/dist/runtime.d.ts.map +1 -1
  48. package/dist/runtime.js +484 -47
  49. package/dist/serialization/codec-devalue-vm.d.ts +9 -0
  50. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  51. package/dist/serialization/codec-devalue-vm.js +137 -0
  52. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  53. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  54. package/dist/serialization/reducers/class-vm.js +77 -0
  55. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  56. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  57. package/dist/serialization/reducers/common-vm.js +579 -0
  58. package/dist/serialization/reducers/common.d.ts.map +1 -1
  59. package/dist/serialization/reducers/common.js +28 -6
  60. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  61. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  62. package/dist/serialization/reducers/step-function-vm.js +97 -0
  63. package/dist/serialization/vm-bundle-entry.d.ts +12 -0
  64. package/dist/serialization/vm-bundle-entry.d.ts.map +1 -0
  65. package/dist/serialization/vm-bundle-entry.js +58 -0
  66. package/dist/serialization/workflow-vm.d.ts +24 -0
  67. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  68. package/dist/serialization/workflow-vm.js +66 -0
  69. package/dist/serialization.d.ts +2 -1
  70. package/dist/serialization.d.ts.map +1 -1
  71. package/dist/serialization.js +26 -21
  72. package/dist/source-map.d.ts +20 -0
  73. package/dist/source-map.d.ts.map +1 -1
  74. package/dist/source-map.js +47 -1
  75. package/dist/step.d.ts.map +1 -1
  76. package/dist/step.js +7 -2
  77. package/dist/telemetry/semantic-conventions.d.ts +78 -0
  78. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  79. package/dist/telemetry/semantic-conventions.js +56 -1
  80. package/dist/telemetry.d.ts +5 -0
  81. package/dist/telemetry.d.ts.map +1 -1
  82. package/dist/telemetry.js +13 -13
  83. package/dist/version.d.ts +1 -1
  84. package/dist/version.js +2 -2
  85. package/dist/workflow/abort-controller.d.ts.map +1 -1
  86. package/dist/workflow/abort-controller.js +6 -4
  87. package/dist/workflow/attribute-dispatcher.js +2 -2
  88. package/dist/workflow/hook.js +2 -2
  89. package/dist/workflow/sleep.js +2 -2
  90. package/dist/workflow.d.ts +49 -2
  91. package/dist/workflow.d.ts.map +1 -1
  92. package/dist/workflow.js +723 -569
  93. package/docs/api-reference/create-hook.mdx +1 -1
  94. package/docs/foundations/starting-workflows.mdx +74 -1
  95. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EAMjB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAsC1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,kBAAkB,CAe5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAW3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CA8B3D"}
1
+ {"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EAOjB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAsC1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,kBAAkB,CAe5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAW3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAkC3D"}
@@ -1,4 +1,4 @@
1
- import { CorruptedEventLogError, MaxEventsExceededError, ReplayDivergenceError, RUN_ERROR_CODES, RuntimeDecryptionError, StepNotRegisteredError, ThrottleError, WorkflowNotRegisteredError, WorkflowRuntimeError, WorkflowWorldError, } from '@workflow/errors';
1
+ import { CorruptedEventLogError, MaxEventsExceededError, ReplayDivergenceError, RUN_ERROR_CODES, RuntimeDecryptionError, StepNotRegisteredError, ThrottleError, WorkflowDeploymentMismatchError, WorkflowNotRegisteredError, WorkflowRuntimeError, WorkflowWorldError, } from '@workflow/errors';
2
2
  const WORLD_CONTRACT_ERROR_CODES = new Set([
3
3
  'PARSE_ERROR',
4
4
  'SCHEMA_VALIDATION',
@@ -97,6 +97,9 @@ export function classifyRunError(err) {
97
97
  if (MaxEventsExceededError.is(err)) {
98
98
  return RUN_ERROR_CODES.MAX_EVENTS_EXCEEDED;
99
99
  }
100
+ if (WorkflowDeploymentMismatchError.is(err)) {
101
+ return RUN_ERROR_CODES.DEPLOYMENT_MISMATCH;
102
+ }
100
103
  // World-layer faults — both a malformed response (contract violation) and a
101
104
  // transient infrastructure failure (throttle / 5xx / transport / timeout,
102
105
  // e.g. a firewall challenge) — are the backend's fault, not the user's.
@@ -114,4 +117,4 @@ export function classifyRunError(err) {
114
117
  }
115
118
  return RUN_ERROR_CODES.USER_ERROR;
116
119
  }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xhc3NpZnktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGVBQWUsRUFFZixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYiwwQkFBMEIsRUFDMUIsb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDekMsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixlQUFlLENBQUMsb0JBQW9CO0NBQ3JDLENBQUMsQ0FBQztBQUVIOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUV0RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLG9CQUFvQixDQUFDLEVBQUU7SUFDdkIsc0JBQXNCLENBQUMsRUFBRTtJQUN6QiwwQkFBMEIsQ0FBQyxFQUFFO0lBQzdCLCtEQUErRDtJQUMvRCx5REFBeUQ7SUFDekQsb0VBQW9FO0lBQ3BFLGtDQUFrQztJQUNsQyxzQkFBc0IsQ0FBQyxFQUFFO0NBQzFCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBWTtJQUMvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JELE9BQU8sQ0FDTCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0NBQW9DLENBQUM7UUFDNUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsK0JBQStCLENBQUM7UUFDdkQsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3hCLEtBQUssS0FBSyxJQUFJO1lBQ2QsTUFBTSxJQUFJLEtBQUs7WUFDZixLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsR0FBWTtJQUNoRCxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksMkJBQTJCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQVk7SUFDM0MsSUFBSSxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQztJQUM3QyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSx3RUFBd0U7SUFDeEUsOEVBQThFO0lBQzlFLDBFQUEwRTtJQUMxRSw4RUFBOEU7SUFDOUUsMERBQTBEO0lBQzFELElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxPQUFPLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQzNDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakIsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxlQUFlLENBQUMsVUFBVSxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb3JydXB0ZWRFdmVudExvZ0Vycm9yLFxuICBNYXhFdmVudHNFeGNlZWRlZEVycm9yLFxuICBSZXBsYXlEaXZlcmdlbmNlRXJyb3IsXG4gIFJVTl9FUlJPUl9DT0RFUyxcbiAgdHlwZSBSdW5FcnJvckNvZGUsXG4gIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IsXG4gIFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3IsXG4gIFRocm90dGxlRXJyb3IsXG4gIFdvcmtmbG93Tm90UmVnaXN0ZXJlZEVycm9yLFxuICBXb3JrZmxvd1J1bnRpbWVFcnJvcixcbiAgV29ya2Zsb3dXb3JsZEVycm9yLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcblxuY29uc3QgV09STERfQ09OVFJBQ1RfRVJST1JfQ09ERVMgPSBuZXcgU2V0KFtcbiAgJ1BBUlNFX0VSUk9SJyxcbiAgJ1NDSEVNQV9WQUxJREFUSU9OJyxcbiAgUlVOX0VSUk9SX0NPREVTLldPUkxEX0NPTlRSQUNUX0VSUk9SLFxuXSk7XG5cbi8qKlxuICogYFdvcmtmbG93V29ybGRFcnJvci5jb2RlYCB2YWx1ZXMgdGhhdCBtYXJrIGEgdHJhbnNpZW50IHRyYW5zcG9ydCBmYWlsdXJlXG4gKiAoc2V0IGJ5IHdvcmxkLXZlcmNlbCdzIEhUVFAgY2xpZW50KTogYFRSQU5TUE9SVGAgY292ZXJzIGFuIGV4aGF1c3RlZFxuICogUmV0cnlBZ2VudCAoYFVORF9FUlJfUkVRX1JFVFJZYCDigJQgZS5nLiB0aGUgZmlyZXdhbGwgaW4gZnJvbnQgb2ZcbiAqIHdvcmtmbG93LXNlcnZlciBzaGVkZGluZyBsb2FkIHdpdGggNDI5LzUwMyksIGEgZHJvcHBlZCBzb2NrZXQsIG9yIGFcbiAqIGNvbm5lY3QvRE5TIGZhaWx1cmU7IGBUSU1FT1VUYCBjb3ZlcnMgYSByZXF1ZXN0IHRoYXQgZXhjZWVkZWQgdGhlIGNsaWVudFxuICogdGltZW91dC4gQm90aCBhcmUgaW5mcmFzdHJ1Y3R1cmUgZmFpbHVyZXMgYSBmcmVzaCBpbnZvY2F0aW9uIGNhbiByZWNvdmVyXG4gKiBmcm9tLiBLZXB0IGRpc3RpbmN0IGZyb20gYFdPUkxEX0NPTlRSQUNUX0VSUk9SX0NPREVTYCBzbyBhIHRyYW5zcG9ydCBibGlwIGlzXG4gKiBuZXZlciBtaXNjbGFzc2lmaWVkIGFzIHRoZSBzZXJ2ZXIgcmV0dXJuaW5nIGEgbWFsZm9ybWVkIHJlc3BvbnNlLlxuICovXG5jb25zdCBSRVRSWUFCTEVfV09STERfRVJST1JfQ09ERVMgPSBuZXcgU2V0KFsnVFJBTlNQT1JUJywgJ1RJTUVPVVQnXSk7XG5cbi8qKlxuICogU2V0IG9mIGVycm9yIG5hbWVzIHRoYXQgc2hvdWxkIGNsYXNzaWZ5IGFzIGdlbmVyaWMgYFJVTlRJTUVfRVJST1JgLiBFYWNoXG4gKiBgKi5pcygpYCBzdGF0aWMgZG9lcyBhIG5hbWUtYmFzZWQgZHVjayBjaGVjaywgc28gc3ViY2xhc3NpbmcgYWxvbmUgaXNcbiAqIG5vdCBlbm91Z2gg4oCUIHdlIGhhdmUgdG8gZW51bWVyYXRlIGV2ZXJ5IGNvbmNyZXRlIHN1YmNsYXNzIHdlIHdhbnQgdG9cbiAqIHJlY29nbml6ZS4gS2VlcCBpbiBzeW5jIHdpdGggdGhlIGBXb3JrZmxvd1J1bnRpbWVFcnJvcmAgY2xhc3MgaGllcmFyY2h5XG4gKiBpbiBgQHdvcmtmbG93L2Vycm9yc2AuXG4gKi9cbmNvbnN0IFJVTlRJTUVfRVJST1JfQ0hFQ0tTID0gW1xuICBXb3JrZmxvd1J1bnRpbWVFcnJvci5pcyxcbiAgU3RlcE5vdFJlZ2lzdGVyZWRFcnJvci5pcyxcbiAgV29ya2Zsb3dOb3RSZWdpc3RlcmVkRXJyb3IuaXMsXG4gIC8vIFNESy1sZXZlbCBlbmNyeXB0aW9uIGZhaWx1cmVzIChtb3N0IG5vdGFibHkgQUVTLUdDTSBhdXRoLXRhZ1xuICAvLyBtaXNtYXRjaGVzIHN1cmZhY2luZyBhcyBhIG5hdGl2ZSBgT3BlcmF0aW9uRXJyb3JgIGZyb21cbiAgLy8gYEFFU0NpcGhlckpvYi5vbkRvbmVgKSBhcmUgd3JhcHBlZCBpbiBgUnVudGltZURlY3J5cHRpb25FcnJvcmAgYXRcbiAgLy8gdGhlIGVuY3J5cHRpb24gbW9kdWxlIGJvdW5kYXJ5LlxuICBSdW50aW1lRGVjcnlwdGlvbkVycm9yLmlzLFxuXTtcblxuLyoqXG4gKiBDbGFzc2lmeSBhbiBlcnJvciB0aGF0IGNhdXNlZCBhIHdvcmtmbG93IHJ1biB0byBmYWlsLlxuICpcbiAqIEFmdGVyIHRoZSBzdHJ1Y3R1cmFsIHNlcGFyYXRpb24gb2YgaW5mcmFzdHJ1Y3R1cmUgdnMgdXNlciBjb2RlIGVycm9yXG4gKiBoYW5kbGluZywgdGhlIG9ubHkgZXJyb3JzIHRoYXQgcmVhY2ggdGhlIGBydW5fZmFpbGVkYCB0cnkvY2F0Y2ggYXJlOlxuICogLSBVc2VyIGNvZGUgZXJyb3JzICh0aHJvd3MgZnJvbSB3b3JrZmxvdyBmdW5jdGlvbnMsIHByb3BhZ2F0ZWQgc3RlcCBmYWlsdXJlcylcbiAqIC0gV29ya2Zsb3dSdW50aW1lRXJyb3IgYW5kIHN1YmNsYXNzZXMgKG1pc3NpbmcgdGltZXN0YW1wcywgd29ya2Zsb3cvc3RlcFxuICogICBub3QgcmVnaXN0ZXJlZCwgY29ycnVwdGVkIGV2ZW50IGxvZywgZXRjLilcbiAqXG4gKiBVc2VzIGVhY2ggc3ViY2xhc3MncyBgLmlzKClgIHN0YXRpYyAoYSBuYW1lLWJhc2VkIGR1Y2sgY2hlY2spIGluc3RlYWQgb2ZcbiAqIGEgc2luZ2xlIGBpbnN0YW5jZW9mYCBjaGVjayBiZWNhdXNlIHdvcmtmbG93cyBleGVjdXRlIGluIGEgc2VwYXJhdGVcbiAqIGB2bWAgcmVhbG06IHRoZSBWTS1jb250ZXh0IGBXb3JrZmxvd1J1bnRpbWVFcnJvcmAgYW5kIHRoZSBob3N0LWNvbnRleHRcbiAqIG9uZSBhcmUgZGlzdGluY3QgY2xhc3Nlcywgc28gYGluc3RhbmNlb2ZgIHJldHVybnMgYGZhbHNlYCBmb3IgYW55IGVycm9yXG4gKiB0aHJvd24gaW5zaWRlIHRoZSB3b3JrZmxvdyBWTSBhbmQgd2UnZCBtaXNjbGFzc2lmeSBnZW51aW5lIHJ1bnRpbWVcbiAqIGVycm9ycyBhcyB1c2VyIGVycm9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV29ybGRDb250cmFjdEVycm9yKGVycjogdW5rbm93bik6IGVyciBpcyBXb3JrZmxvd1dvcmxkRXJyb3Ige1xuICBpZiAoIVdvcmtmbG93V29ybGRFcnJvci5pcyhlcnIpIHx8IGVyci5zdGF0dXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNhdXNlID0gJ2NhdXNlJyBpbiBlcnIgPyBlcnIuY2F1c2UgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAoXG4gICAgKGVyci5jb2RlICE9PSB1bmRlZmluZWQgJiYgV09STERfQ09OVFJBQ1RfRVJST1JfQ09ERVMuaGFzKGVyci5jb2RlKSkgfHxcbiAgICBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UgYm9keSBmb3IgJykgfHxcbiAgICBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdTY2hlbWEgdmFsaWRhdGlvbiBmYWlsZWQgZm9yICcpIHx8XG4gICAgKHR5cGVvZiBjYXVzZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIGNhdXNlICE9PSBudWxsICYmXG4gICAgICAnbmFtZScgaW4gY2F1c2UgJiZcbiAgICAgIGNhdXNlLm5hbWUgPT09ICdab2RFcnJvcicpXG4gICk7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGFuIGVycm9yIGZyb20gYSB3b3JsZCAod29ya2Zsb3ctc2VydmVyKSBjYWxsIGlzIGEgdHJhbnNpZW50XG4gKiBpbmZyYXN0cnVjdHVyZSBmYWlsdXJlIHRoYXQgc2hvdWxkIGJlIHJldHJpZWQgYnkgcmVkZWxpdmVyaW5nIHRoZSBxdWV1ZVxuICogbWVzc2FnZSwgcmF0aGVyIHRoYW4gZmFpbGluZyB0aGUgcnVuLiBBIGZyZXNoIGludm9jYXRpb24gd2lsbCBsaWtlbHlcbiAqIHN1Y2NlZWQgb25jZSB0aGUgYmFja2VuZCAob3IgdGhlIGZpcmV3YWxsIGluIGZyb250IG9mIGl0KSByZWNvdmVycy5cbiAqXG4gKiAtIGBUaHJvdHRsZUVycm9yYCAoNDI5KTogcmF0ZSBsaW1pdGVkIC8gbG9hZCBzaGVkXG4gKiAtIGBXb3JrZmxvd1dvcmxkRXJyb3JgIHdpdGggYHN0YXR1cyA+PSA1MDBgOiBzZXJ2ZXItc2lkZSBlcnJvclxuICogLSBgV29ya2Zsb3dXb3JsZEVycm9yYCB3aXRoIGEgcmV0cnlhYmxlIHRyYW5zcG9ydCBgY29kZWAgKGBUUkFOU1BPUlRgIC9cbiAqICAgYFRJTUVPVVRgKTogdGhlIHJlcXVlc3QgbmV2ZXIgcHJvZHVjZWQgYSB1c2FibGUgcmVzcG9uc2VcbiAqXG4gKiBVc2VzIGAuaXMoKWAgbmFtZS1iYXNlZCBkdWNrIGNoZWNrcyAobm90IGBpbnN0YW5jZW9mYCkgZm9yIHRoZSBzYW1lXG4gKiBjcm9zcy1gdm1gLXJlYWxtIHJlYXNvbiBkZXNjcmliZWQgb24gYGNsYXNzaWZ5UnVuRXJyb3JgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRyeWFibGVXb3JsZEVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoVGhyb3R0bGVFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFXb3JrZmxvd1dvcmxkRXJyb3IuaXMoZXJyKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZXJyLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIGVyci5zdGF0dXMgPj0gNTAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGVyci5jb2RlICE9PSB1bmRlZmluZWQgJiYgUkVUUllBQkxFX1dPUkxEX0VSUk9SX0NPREVTLmhhcyhlcnIuY29kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeVJ1bkVycm9yKGVycjogdW5rbm93bik6IFJ1bkVycm9yQ29kZSB7XG4gIGlmIChSZXBsYXlEaXZlcmdlbmNlRXJyb3IuaXMoZXJyKSkge1xuICAgIHJldHVybiBSVU5fRVJST1JfQ09ERVMuUkVQTEFZX0RJVkVSR0VOQ0U7XG4gIH1cblxuICBpZiAoQ29ycnVwdGVkRXZlbnRMb2dFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5DT1JSVVBURURfRVZFTlRfTE9HO1xuICB9XG5cbiAgaWYgKE1heEV2ZW50c0V4Y2VlZGVkRXJyb3IuaXMoZXJyKSkge1xuICAgIHJldHVybiBSVU5fRVJST1JfQ09ERVMuTUFYX0VWRU5UU19FWENFRURFRDtcbiAgfVxuXG4gIC8vIFdvcmxkLWxheWVyIGZhdWx0cyDigJQgYm90aCBhIG1hbGZvcm1lZCByZXNwb25zZSAoY29udHJhY3QgdmlvbGF0aW9uKSBhbmQgYVxuICAvLyB0cmFuc2llbnQgaW5mcmFzdHJ1Y3R1cmUgZmFpbHVyZSAodGhyb3R0bGUgLyA1eHggLyB0cmFuc3BvcnQgLyB0aW1lb3V0LFxuICAvLyBlLmcuIGEgZmlyZXdhbGwgY2hhbGxlbmdlKSDigJQgYXJlIHRoZSBiYWNrZW5kJ3MgZmF1bHQsIG5vdCB0aGUgdXNlcidzLlxuICAvLyBCdWNrZXQgdGhlbSB1bmRlciBXT1JMRF9DT05UUkFDVF9FUlJPUiByYXRoZXIgdGhhbiBVU0VSX0VSUk9SIHNvIGRhc2hib2FyZHNcbiAgLy8gYXR0cmlidXRlIGFuIG91dGFnZSBjb3JyZWN0bHkuIE5vdGUgdGhlIHJldHJ5YWJsZSB2YXJpYW50cyBhcmUgbm9ybWFsbHlcbiAgLy8gcmVkZWxpdmVyZWQgdmlhIHRoZSBxdWV1ZSAoc2VlIGBpc1JldHJ5YWJsZVdvcmxkRXJyb3JgKSBhbmQgb25seSByZWFjaCB0aGlzXG4gIC8vIHRlcm1pbmFsIGNsYXNzaWZpY2F0aW9uIGlmIHRoZSBydW4gdWx0aW1hdGVseSBnaXZlcyB1cC5cbiAgaWYgKGlzV29ybGRDb250cmFjdEVycm9yKGVycikgfHwgaXNSZXRyeWFibGVXb3JsZEVycm9yKGVycikpIHtcbiAgICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLldPUkxEX0NPTlRSQUNUX0VSUk9SO1xuICB9XG5cbiAgZm9yIChjb25zdCBpc01hdGNoIG9mIFJVTlRJTUVfRVJST1JfQ0hFQ0tTKSB7XG4gICAgaWYgKGlzTWF0Y2goZXJyKSkge1xuICAgICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5SVU5USU1FX0VSUk9SO1xuICAgIH1cbiAgfVxuICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLlVTRVJfRVJST1I7XG59XG4iXX0=
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xhc3NpZnktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGVBQWUsRUFFZixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYiwrQkFBK0IsRUFDL0IsMEJBQTBCLEVBQzFCLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixNQUFNLDBCQUEwQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3pDLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsZUFBZSxDQUFDLG9CQUFvQjtDQUNyQyxDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFdEU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixvQkFBb0IsQ0FBQyxFQUFFO0lBQ3ZCLHNCQUFzQixDQUFDLEVBQUU7SUFDekIsMEJBQTBCLENBQUMsRUFBRTtJQUM3QiwrREFBK0Q7SUFDL0QseURBQXlEO0lBQ3pELG9FQUFvRTtJQUNwRSxrQ0FBa0M7SUFDbEMsc0JBQXNCLENBQUMsRUFBRTtDQUMxQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQVk7SUFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRCxPQUFPLENBQ0wsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BFLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLG9DQUFvQyxDQUFDO1FBQzVELEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLCtCQUErQixDQUFDO1FBQ3ZELENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUTtZQUN4QixLQUFLLEtBQUssSUFBSTtZQUNkLE1BQU0sSUFBSSxLQUFLO1lBQ2YsS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEdBQVk7SUFDaEQsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFZO0lBQzNDLElBQUkscUJBQXFCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxlQUFlLENBQUMsaUJBQWlCLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksc0JBQXNCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksc0JBQXNCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksK0JBQStCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUM7SUFDN0MsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsOEVBQThFO0lBQzlFLDBEQUEwRDtJQUMxRCxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUQsT0FBTyxlQUFlLENBQUMsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssTUFBTSxPQUFPLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sZUFBZSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDLFVBQVUsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29ycnVwdGVkRXZlbnRMb2dFcnJvcixcbiAgTWF4RXZlbnRzRXhjZWVkZWRFcnJvcixcbiAgUmVwbGF5RGl2ZXJnZW5jZUVycm9yLFxuICBSVU5fRVJST1JfQ09ERVMsXG4gIHR5cGUgUnVuRXJyb3JDb2RlLFxuICBSdW50aW1lRGVjcnlwdGlvbkVycm9yLFxuICBTdGVwTm90UmVnaXN0ZXJlZEVycm9yLFxuICBUaHJvdHRsZUVycm9yLFxuICBXb3JrZmxvd0RlcGxveW1lbnRNaXNtYXRjaEVycm9yLFxuICBXb3JrZmxvd05vdFJlZ2lzdGVyZWRFcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG4gIFdvcmtmbG93V29ybGRFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5cbmNvbnN0IFdPUkxEX0NPTlRSQUNUX0VSUk9SX0NPREVTID0gbmV3IFNldChbXG4gICdQQVJTRV9FUlJPUicsXG4gICdTQ0hFTUFfVkFMSURBVElPTicsXG4gIFJVTl9FUlJPUl9DT0RFUy5XT1JMRF9DT05UUkFDVF9FUlJPUixcbl0pO1xuXG4vKipcbiAqIGBXb3JrZmxvd1dvcmxkRXJyb3IuY29kZWAgdmFsdWVzIHRoYXQgbWFyayBhIHRyYW5zaWVudCB0cmFuc3BvcnQgZmFpbHVyZVxuICogKHNldCBieSB3b3JsZC12ZXJjZWwncyBIVFRQIGNsaWVudCk6IGBUUkFOU1BPUlRgIGNvdmVycyBhbiBleGhhdXN0ZWRcbiAqIFJldHJ5QWdlbnQgKGBVTkRfRVJSX1JFUV9SRVRSWWAg4oCUIGUuZy4gdGhlIGZpcmV3YWxsIGluIGZyb250IG9mXG4gKiB3b3JrZmxvdy1zZXJ2ZXIgc2hlZGRpbmcgbG9hZCB3aXRoIDQyOS81MDMpLCBhIGRyb3BwZWQgc29ja2V0LCBvciBhXG4gKiBjb25uZWN0L0ROUyBmYWlsdXJlOyBgVElNRU9VVGAgY292ZXJzIGEgcmVxdWVzdCB0aGF0IGV4Y2VlZGVkIHRoZSBjbGllbnRcbiAqIHRpbWVvdXQuIEJvdGggYXJlIGluZnJhc3RydWN0dXJlIGZhaWx1cmVzIGEgZnJlc2ggaW52b2NhdGlvbiBjYW4gcmVjb3ZlclxuICogZnJvbS4gS2VwdCBkaXN0aW5jdCBmcm9tIGBXT1JMRF9DT05UUkFDVF9FUlJPUl9DT0RFU2Agc28gYSB0cmFuc3BvcnQgYmxpcCBpc1xuICogbmV2ZXIgbWlzY2xhc3NpZmllZCBhcyB0aGUgc2VydmVyIHJldHVybmluZyBhIG1hbGZvcm1lZCByZXNwb25zZS5cbiAqL1xuY29uc3QgUkVUUllBQkxFX1dPUkxEX0VSUk9SX0NPREVTID0gbmV3IFNldChbJ1RSQU5TUE9SVCcsICdUSU1FT1VUJ10pO1xuXG4vKipcbiAqIFNldCBvZiBlcnJvciBuYW1lcyB0aGF0IHNob3VsZCBjbGFzc2lmeSBhcyBnZW5lcmljIGBSVU5USU1FX0VSUk9SYC4gRWFjaFxuICogYCouaXMoKWAgc3RhdGljIGRvZXMgYSBuYW1lLWJhc2VkIGR1Y2sgY2hlY2ssIHNvIHN1YmNsYXNzaW5nIGFsb25lIGlzXG4gKiBub3QgZW5vdWdoIOKAlCB3ZSBoYXZlIHRvIGVudW1lcmF0ZSBldmVyeSBjb25jcmV0ZSBzdWJjbGFzcyB3ZSB3YW50IHRvXG4gKiByZWNvZ25pemUuIEtlZXAgaW4gc3luYyB3aXRoIHRoZSBgV29ya2Zsb3dSdW50aW1lRXJyb3JgIGNsYXNzIGhpZXJhcmNoeVxuICogaW4gYEB3b3JrZmxvdy9lcnJvcnNgLlxuICovXG5jb25zdCBSVU5USU1FX0VSUk9SX0NIRUNLUyA9IFtcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IuaXMsXG4gIFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3IuaXMsXG4gIFdvcmtmbG93Tm90UmVnaXN0ZXJlZEVycm9yLmlzLFxuICAvLyBTREstbGV2ZWwgZW5jcnlwdGlvbiBmYWlsdXJlcyAobW9zdCBub3RhYmx5IEFFUy1HQ00gYXV0aC10YWdcbiAgLy8gbWlzbWF0Y2hlcyBzdXJmYWNpbmcgYXMgYSBuYXRpdmUgYE9wZXJhdGlvbkVycm9yYCBmcm9tXG4gIC8vIGBBRVNDaXBoZXJKb2Iub25Eb25lYCkgYXJlIHdyYXBwZWQgaW4gYFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3JgIGF0XG4gIC8vIHRoZSBlbmNyeXB0aW9uIG1vZHVsZSBib3VuZGFyeS5cbiAgUnVudGltZURlY3J5cHRpb25FcnJvci5pcyxcbl07XG5cbi8qKlxuICogQ2xhc3NpZnkgYW4gZXJyb3IgdGhhdCBjYXVzZWQgYSB3b3JrZmxvdyBydW4gdG8gZmFpbC5cbiAqXG4gKiBBZnRlciB0aGUgc3RydWN0dXJhbCBzZXBhcmF0aW9uIG9mIGluZnJhc3RydWN0dXJlIHZzIHVzZXIgY29kZSBlcnJvclxuICogaGFuZGxpbmcsIHRoZSBvbmx5IGVycm9ycyB0aGF0IHJlYWNoIHRoZSBgcnVuX2ZhaWxlZGAgdHJ5L2NhdGNoIGFyZTpcbiAqIC0gVXNlciBjb2RlIGVycm9ycyAodGhyb3dzIGZyb20gd29ya2Zsb3cgZnVuY3Rpb25zLCBwcm9wYWdhdGVkIHN0ZXAgZmFpbHVyZXMpXG4gKiAtIFdvcmtmbG93UnVudGltZUVycm9yIGFuZCBzdWJjbGFzc2VzIChtaXNzaW5nIHRpbWVzdGFtcHMsIHdvcmtmbG93L3N0ZXBcbiAqICAgbm90IHJlZ2lzdGVyZWQsIGNvcnJ1cHRlZCBldmVudCBsb2csIGV0Yy4pXG4gKlxuICogVXNlcyBlYWNoIHN1YmNsYXNzJ3MgYC5pcygpYCBzdGF0aWMgKGEgbmFtZS1iYXNlZCBkdWNrIGNoZWNrKSBpbnN0ZWFkIG9mXG4gKiBhIHNpbmdsZSBgaW5zdGFuY2VvZmAgY2hlY2sgYmVjYXVzZSB3b3JrZmxvd3MgZXhlY3V0ZSBpbiBhIHNlcGFyYXRlXG4gKiBgdm1gIHJlYWxtOiB0aGUgVk0tY29udGV4dCBgV29ya2Zsb3dSdW50aW1lRXJyb3JgIGFuZCB0aGUgaG9zdC1jb250ZXh0XG4gKiBvbmUgYXJlIGRpc3RpbmN0IGNsYXNzZXMsIHNvIGBpbnN0YW5jZW9mYCByZXR1cm5zIGBmYWxzZWAgZm9yIGFueSBlcnJvclxuICogdGhyb3duIGluc2lkZSB0aGUgd29ya2Zsb3cgVk0gYW5kIHdlJ2QgbWlzY2xhc3NpZnkgZ2VudWluZSBydW50aW1lXG4gKiBlcnJvcnMgYXMgdXNlciBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dvcmxkQ29udHJhY3RFcnJvcihlcnI6IHVua25vd24pOiBlcnIgaXMgV29ya2Zsb3dXb3JsZEVycm9yIHtcbiAgaWYgKCFXb3JrZmxvd1dvcmxkRXJyb3IuaXMoZXJyKSB8fCBlcnIuc3RhdHVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjYXVzZSA9ICdjYXVzZScgaW4gZXJyID8gZXJyLmNhdXNlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gKFxuICAgIChlcnIuY29kZSAhPT0gdW5kZWZpbmVkICYmIFdPUkxEX0NPTlRSQUNUX0VSUk9SX0NPREVTLmhhcyhlcnIuY29kZSkpIHx8XG4gICAgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnRmFpbGVkIHRvIHBhcnNlIHJlc3BvbnNlIGJvZHkgZm9yICcpIHx8XG4gICAgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnU2NoZW1hIHZhbGlkYXRpb24gZmFpbGVkIGZvciAnKSB8fFxuICAgICh0eXBlb2YgY2F1c2UgPT09ICdvYmplY3QnICYmXG4gICAgICBjYXVzZSAhPT0gbnVsbCAmJlxuICAgICAgJ25hbWUnIGluIGNhdXNlICYmXG4gICAgICBjYXVzZS5uYW1lID09PSAnWm9kRXJyb3InKVxuICApO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBhbiBlcnJvciBmcm9tIGEgd29ybGQgKHdvcmtmbG93LXNlcnZlcikgY2FsbCBpcyBhIHRyYW5zaWVudFxuICogaW5mcmFzdHJ1Y3R1cmUgZmFpbHVyZSB0aGF0IHNob3VsZCBiZSByZXRyaWVkIGJ5IHJlZGVsaXZlcmluZyB0aGUgcXVldWVcbiAqIG1lc3NhZ2UsIHJhdGhlciB0aGFuIGZhaWxpbmcgdGhlIHJ1bi4gQSBmcmVzaCBpbnZvY2F0aW9uIHdpbGwgbGlrZWx5XG4gKiBzdWNjZWVkIG9uY2UgdGhlIGJhY2tlbmQgKG9yIHRoZSBmaXJld2FsbCBpbiBmcm9udCBvZiBpdCkgcmVjb3ZlcnMuXG4gKlxuICogLSBgVGhyb3R0bGVFcnJvcmAgKDQyOSk6IHJhdGUgbGltaXRlZCAvIGxvYWQgc2hlZFxuICogLSBgV29ya2Zsb3dXb3JsZEVycm9yYCB3aXRoIGBzdGF0dXMgPj0gNTAwYDogc2VydmVyLXNpZGUgZXJyb3JcbiAqIC0gYFdvcmtmbG93V29ybGRFcnJvcmAgd2l0aCBhIHJldHJ5YWJsZSB0cmFuc3BvcnQgYGNvZGVgIChgVFJBTlNQT1JUYCAvXG4gKiAgIGBUSU1FT1VUYCk6IHRoZSByZXF1ZXN0IG5ldmVyIHByb2R1Y2VkIGEgdXNhYmxlIHJlc3BvbnNlXG4gKlxuICogVXNlcyBgLmlzKClgIG5hbWUtYmFzZWQgZHVjayBjaGVja3MgKG5vdCBgaW5zdGFuY2VvZmApIGZvciB0aGUgc2FtZVxuICogY3Jvc3MtYHZtYC1yZWFsbSByZWFzb24gZGVzY3JpYmVkIG9uIGBjbGFzc2lmeVJ1bkVycm9yYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0cnlhYmxlV29ybGRFcnJvcihlcnI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKFRocm90dGxlRXJyb3IuaXMoZXJyKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICghV29ya2Zsb3dXb3JsZEVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGVyci5zdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBlcnIuc3RhdHVzID49IDUwMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBlcnIuY29kZSAhPT0gdW5kZWZpbmVkICYmIFJFVFJZQUJMRV9XT1JMRF9FUlJPUl9DT0RFUy5oYXMoZXJyLmNvZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlSdW5FcnJvcihlcnI6IHVua25vd24pOiBSdW5FcnJvckNvZGUge1xuICBpZiAoUmVwbGF5RGl2ZXJnZW5jZUVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLlJFUExBWV9ESVZFUkdFTkNFO1xuICB9XG5cbiAgaWYgKENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IuaXMoZXJyKSkge1xuICAgIHJldHVybiBSVU5fRVJST1JfQ09ERVMuQ09SUlVQVEVEX0VWRU5UX0xPRztcbiAgfVxuXG4gIGlmIChNYXhFdmVudHNFeGNlZWRlZEVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLk1BWF9FVkVOVFNfRVhDRUVERUQ7XG4gIH1cblxuICBpZiAoV29ya2Zsb3dEZXBsb3ltZW50TWlzbWF0Y2hFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5ERVBMT1lNRU5UX01JU01BVENIO1xuICB9XG5cbiAgLy8gV29ybGQtbGF5ZXIgZmF1bHRzIOKAlCBib3RoIGEgbWFsZm9ybWVkIHJlc3BvbnNlIChjb250cmFjdCB2aW9sYXRpb24pIGFuZCBhXG4gIC8vIHRyYW5zaWVudCBpbmZyYXN0cnVjdHVyZSBmYWlsdXJlICh0aHJvdHRsZSAvIDV4eCAvIHRyYW5zcG9ydCAvIHRpbWVvdXQsXG4gIC8vIGUuZy4gYSBmaXJld2FsbCBjaGFsbGVuZ2UpIOKAlCBhcmUgdGhlIGJhY2tlbmQncyBmYXVsdCwgbm90IHRoZSB1c2VyJ3MuXG4gIC8vIEJ1Y2tldCB0aGVtIHVuZGVyIFdPUkxEX0NPTlRSQUNUX0VSUk9SIHJhdGhlciB0aGFuIFVTRVJfRVJST1Igc28gZGFzaGJvYXJkc1xuICAvLyBhdHRyaWJ1dGUgYW4gb3V0YWdlIGNvcnJlY3RseS4gTm90ZSB0aGUgcmV0cnlhYmxlIHZhcmlhbnRzIGFyZSBub3JtYWxseVxuICAvLyByZWRlbGl2ZXJlZCB2aWEgdGhlIHF1ZXVlIChzZWUgYGlzUmV0cnlhYmxlV29ybGRFcnJvcmApIGFuZCBvbmx5IHJlYWNoIHRoaXNcbiAgLy8gdGVybWluYWwgY2xhc3NpZmljYXRpb24gaWYgdGhlIHJ1biB1bHRpbWF0ZWx5IGdpdmVzIHVwLlxuICBpZiAoaXNXb3JsZENvbnRyYWN0RXJyb3IoZXJyKSB8fCBpc1JldHJ5YWJsZVdvcmxkRXJyb3IoZXJyKSkge1xuICAgIHJldHVybiBSVU5fRVJST1JfQ09ERVMuV09STERfQ09OVFJBQ1RfRVJST1I7XG4gIH1cblxuICBmb3IgKGNvbnN0IGlzTWF0Y2ggb2YgUlVOVElNRV9FUlJPUl9DSEVDS1MpIHtcbiAgICBpZiAoaXNNYXRjaChlcnIpKSB7XG4gICAgICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLlJVTlRJTUVfRVJST1I7XG4gICAgfVxuICB9XG4gIHJldHVybiBSVU5fRVJST1JfQ09ERVMuVVNFUl9FUlJPUjtcbn1cbiJdfQ==
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Correlation-id generation for the entity families a replay can create.
3
+ *
4
+ * Correlation ids are minted by the workflow VM and are the server's identity
5
+ * gate: a conditional create on the id is what makes a duplicate write from a
6
+ * second live replay idempotent instead of additive. That only works if two
7
+ * replays of the same run mint the same id for the same entity.
8
+ *
9
+ * Historically every id was the Nth draw of *one* monotonic ULID sequence per
10
+ * run, shared by steps, waits, hooks, attribute writes, abort controllers and
11
+ * stream ids alike. Every id was therefore an ordinal over the whole run, and a
12
+ * single extra draw of any kind renumbered every entity of every kind after it.
13
+ * Two replays that agreed about every step but disagreed about one `sleep()`
14
+ * would mint different ids for all subsequent steps, so their writes appended
15
+ * side by side instead of colliding, and the settled log ended up holding two
16
+ * names for one logical step. Only one of them can be consumed on the next
17
+ * replay; the other is fatal (`onUnconsumedEvent`).
18
+ *
19
+ * Per-kind sources narrow that coupling to one kind at a time: each family
20
+ * draws from its own independent incrementing sequence, so a disagreement about
21
+ * how many hooks or sleeps were created no longer renames steps.
22
+ *
23
+ * Ids stay syntactically valid ULIDs (10 Crockford characters of
24
+ * `fixedTimestamp` plus 16 of body), because correlation ids are validated as
25
+ * prefixed 26-char ULIDs by the backend, and they stay monotonic *within* a
26
+ * kind, because `hooks.list` is ordered by hook id.
27
+ *
28
+ * Monotonicity is per kind, and two kinds mint `hook_` ids (`hook` and
29
+ * `abortHook`), so listing order is only creation order *within* each of them.
30
+ * No world filters system hooks out of a listing, so a run that constructs an
31
+ * abort controller and also creates its own hooks lists that system hook at a
32
+ * position decided by its kind's hash rather than at its creation position.
33
+ * Order among the user's own hooks is unaffected.
34
+ *
35
+ * This does not make ids independent of *ordinal position within their own
36
+ * kind*: two replays that disagree about how many steps ran still mint
37
+ * different ids for the next step. That is a narrower failure than the shared
38
+ * sequence's, not an eliminated one.
39
+ */
40
+ /** Entity families that draw correlation ids, each from its own sequence. */
41
+ export type CorrelationIdKind =
42
+ /** `step_` ids, one per step invocation. */
43
+ 'step'
44
+ /** `wait_` ids, one per `sleep()`. */
45
+ | 'wait'
46
+ /** `hook_` ids for hooks created by workflow code. */
47
+ | 'hook'
48
+ /** `attr_` ids, one per attribute write. */
49
+ | 'attr'
50
+ /**
51
+ * The abort controller's own id, which becomes its stream name and hook
52
+ * token. Separate from `hook` so constructing an abort controller does not
53
+ * renumber later user hooks.
54
+ */
55
+ | 'abort'
56
+ /** `hook_` ids for the internal system hook backing an abort controller. */
57
+ | 'abortHook'
58
+ /**
59
+ * Ids minted during serialization (`STABLE_ULID`): stream names, and an abort
60
+ * holder's stream name and `abrt_` hook token when it reaches serialization
61
+ * without an identity yet (`reduceAbortWithListener`), which is why `abort`
62
+ * above is not the only mint path for an abort identity. Not correlation ids,
63
+ * but they drew from the same shared sequence, so a workflow that serialized
64
+ * a stream renumbered every entity created after it.
65
+ */
66
+ | 'stream';
67
+ /** Mints the ULID body of a correlation id for one entity family. */
68
+ export type CorrelationIdGenerator = (kind: CorrelationIdKind) => string;
69
+ /**
70
+ * Builds a replay's correlation-id generator.
71
+ *
72
+ * `perKind: false` returns the run's single shared monotonic sequence and
73
+ * ignores the kind entirely, so both schemes go through one call path and the
74
+ * flag is the only difference between them.
75
+ */
76
+ export declare function createCorrelationIdGenerator(options: {
77
+ /**
78
+ * The run's replay-stable seed. Must not vary between replays of one run, and
79
+ * must differ between runs, or two runs would mint identical ids.
80
+ */
81
+ seed: string;
82
+ fixedTimestamp: number;
83
+ /** The run's shared monotonic sequence, used as-is when `perKind` is false. */
84
+ positional: () => string;
85
+ perKind: boolean;
86
+ }): CorrelationIdGenerator;
87
+ /** Length of a ULID, exported so tests need not restate it. */
88
+ export declare const CORRELATION_ID_LENGTH: number;
89
+ /**
90
+ * Whether each entity family draws correlation ids from its own sequence rather
91
+ * than from one sequence shared by the whole run. Off unless opted in, so an SDK
92
+ * upgrade alone never moves a run between schemes.
93
+ *
94
+ * The invariant either way: a run must replay under the scheme that minted its
95
+ * ids. A replay under the other scheme mints ids its own earlier events do not
96
+ * carry, so it can consume none of them and fails the run. Two things can break
97
+ * it, and both are about turning the flag on rather than about upgrading:
98
+ *
99
+ * - Enabling it while runs are in flight. On Vercel, skew protection keeps a run
100
+ * on the deployment that started it, so a run only ever sees the value baked
101
+ * into its own deployment. Elsewhere (world-postgres, world-local, a
102
+ * self-hosted process) nothing pins a run to the code that started it, so
103
+ * enable it during a quiet window.
104
+ * - A rolling deploy that leaves both values live, which puts two schemes on one
105
+ * run concurrently — the side-by-side append this whole mechanism exists to
106
+ * avoid. Roll the value out to the whole fleet at once.
107
+ */
108
+ export declare function isPerKindCorrelationIdsEnabled(): boolean;
109
+ //# sourceMappingURL=correlation-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correlation-id.d.ts","sourceRoot":"","sources":["../src/correlation-id.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB;AAC3B,4CAA4C;AAC1C,MAAM;AACR,sCAAsC;GACpC,MAAM;AACR,sDAAsD;GACpD,MAAM;AACR,4CAA4C;GAC1C,MAAM;AACR;;;;GAIG;GACD,OAAO;AACT,4EAA4E;GAC1E,WAAW;AACb;;;;;;;GAOG;GACD,QAAQ,CAAC;AAEb,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,MAAM,CAAC;AAoGzE;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,sBAAsB,CAmBzB;AAED,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,QAA0B,CAAC;AAE7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAExD"}
@@ -0,0 +1,139 @@
1
+ import { encodeTime, incrementBase32 } from 'ulid';
2
+ const CROCKFORD = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
3
+ /** Number of Crockford characters in a ULID's random component. */
4
+ const BODY_CHARS = 16;
5
+ /** Number of Crockford characters in a ULID's timestamp component. */
6
+ const TIME_CHARS = 10;
7
+ function mul32(a, b) {
8
+ return Math.imul(a, b) >>> 0;
9
+ }
10
+ function rotl32(value, shift) {
11
+ return ((value << shift) | (value >>> (32 - shift))) >>> 0;
12
+ }
13
+ /** MurmurHash3's 32-bit finalizer. */
14
+ function fmix32(input) {
15
+ let h = input >>> 0;
16
+ h = (h ^ (h >>> 16)) >>> 0;
17
+ h = mul32(h, 0x85ebca6b);
18
+ h = (h ^ (h >>> 13)) >>> 0;
19
+ h = mul32(h, 0xc2b2ae35);
20
+ return (h ^ (h >>> 16)) >>> 0;
21
+ }
22
+ /**
23
+ * Deterministic 128-bit hash of a string, as four 32-bit lanes.
24
+ *
25
+ * A MurmurHash3-style mixer over UTF-16 code units, rotating which lane absorbs
26
+ * each unit and diffusing across lanes at the end. Only determinism and
27
+ * diffusion matter here: this is not a cryptographic hash, claims no
28
+ * bit-compatibility with any reference implementation, and must not be used for
29
+ * anything that outlives a deployment's replays.
30
+ */
31
+ function hash128(input) {
32
+ const lanes = [
33
+ 0x9e3779b1, 0x85ebca77, 0xc2b2ae3d, 0x27d4eb2f,
34
+ ];
35
+ for (let i = 0; i < input.length; i++) {
36
+ let k = input.charCodeAt(i) >>> 0;
37
+ k = mul32(k, 0xcc9e2d51);
38
+ k = rotl32(k, 15);
39
+ k = mul32(k, 0x1b873593);
40
+ const lane = i & 3;
41
+ let h = (lanes[lane] ^ k) >>> 0;
42
+ h = rotl32(h, 13);
43
+ lanes[lane] = (mul32(h, 5) + 0xe6546b64) >>> 0;
44
+ }
45
+ lanes[0] = (lanes[0] ^ input.length) >>> 0;
46
+ // Two passes so every lane depends on every other lane.
47
+ for (let pass = 0; pass < 2; pass++) {
48
+ for (let lane = 0; lane < 4; lane++) {
49
+ const previous = lanes[(lane + 3) & 3];
50
+ lanes[lane] = fmix32((lanes[lane] ^ previous) >>> 0);
51
+ }
52
+ }
53
+ return lanes;
54
+ }
55
+ /**
56
+ * Derives a kind's starting body: 80 bits of a 128-bit hash as 16 Crockford
57
+ * characters, most significant first.
58
+ *
59
+ * The leading character is confined to the alphabet's lower half so the body
60
+ * starts below half of the 80-bit space. `incrementBase32` throws on overflow,
61
+ * and without this a base that happened to land near `Z…Z` would make overflow
62
+ * reachable after few draws rather than after 2^79 of them.
63
+ */
64
+ function deriveBody(seed, kind) {
65
+ const lanes = hash128(`${seed} correlation-kind ${kind}`);
66
+ const bytes = [
67
+ (lanes[0] >>> 24) & 0xff,
68
+ (lanes[0] >>> 16) & 0xff,
69
+ (lanes[0] >>> 8) & 0xff,
70
+ lanes[0] & 0xff,
71
+ (lanes[1] >>> 24) & 0xff,
72
+ (lanes[1] >>> 16) & 0xff,
73
+ (lanes[1] >>> 8) & 0xff,
74
+ lanes[1] & 0xff,
75
+ (lanes[2] >>> 24) & 0xff,
76
+ (lanes[2] >>> 16) & 0xff,
77
+ ];
78
+ let body = '';
79
+ let accumulator = 0;
80
+ let bits = 0;
81
+ for (const byte of bytes) {
82
+ accumulator = ((accumulator << 8) | byte) >>> 0;
83
+ bits += 8;
84
+ while (bits >= 5) {
85
+ const index = (accumulator >>> (bits - 5)) & 31;
86
+ body += CROCKFORD[body.length === 0 ? index & 15 : index];
87
+ bits -= 5;
88
+ }
89
+ }
90
+ return body;
91
+ }
92
+ /**
93
+ * Builds a replay's correlation-id generator.
94
+ *
95
+ * `perKind: false` returns the run's single shared monotonic sequence and
96
+ * ignores the kind entirely, so both schemes go through one call path and the
97
+ * flag is the only difference between them.
98
+ */
99
+ export function createCorrelationIdGenerator(options) {
100
+ const { seed, fixedTimestamp, positional, perKind } = options;
101
+ if (!perKind) {
102
+ return positional;
103
+ }
104
+ const time = encodeTime(fixedTimestamp, TIME_CHARS);
105
+ const bodies = new Map();
106
+ return (kind) => {
107
+ const previous = bodies.get(kind);
108
+ const body = previous === undefined
109
+ ? deriveBody(seed, kind)
110
+ : incrementBase32(previous);
111
+ bodies.set(kind, body);
112
+ return `${time}${body}`;
113
+ };
114
+ }
115
+ /** Length of a ULID, exported so tests need not restate it. */
116
+ export const CORRELATION_ID_LENGTH = TIME_CHARS + BODY_CHARS;
117
+ /**
118
+ * Whether each entity family draws correlation ids from its own sequence rather
119
+ * than from one sequence shared by the whole run. Off unless opted in, so an SDK
120
+ * upgrade alone never moves a run between schemes.
121
+ *
122
+ * The invariant either way: a run must replay under the scheme that minted its
123
+ * ids. A replay under the other scheme mints ids its own earlier events do not
124
+ * carry, so it can consume none of them and fails the run. Two things can break
125
+ * it, and both are about turning the flag on rather than about upgrading:
126
+ *
127
+ * - Enabling it while runs are in flight. On Vercel, skew protection keeps a run
128
+ * on the deployment that started it, so a run only ever sees the value baked
129
+ * into its own deployment. Elsewhere (world-postgres, world-local, a
130
+ * self-hosted process) nothing pins a run to the code that started it, so
131
+ * enable it during a quiet window.
132
+ * - A rolling deploy that leaves both values live, which puts two schemes on one
133
+ * run concurrently — the side-by-side append this whole mechanism exists to
134
+ * avoid. Roll the value out to the whole fleet at once.
135
+ */
136
+ export function isPerKindCorrelationIdsEnabled() {
137
+ return process.env.WORKFLOW_PER_KIND_CORRELATION_IDS === '1';
138
+ }
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24taWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29ycmVsYXRpb24taWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUF5RW5ELE1BQU0sU0FBUyxHQUFHLGtDQUFrQyxDQUFDO0FBRXJELG1FQUFtRTtBQUNuRSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFdEIsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUV0QixTQUFTLEtBQUssQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDMUMsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELHNDQUFzQztBQUN0QyxTQUFTLE1BQU0sQ0FBQyxLQUFhO0lBQzNCLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsT0FBTyxDQUFDLEtBQWE7SUFDNUIsTUFBTSxLQUFLLEdBQXFDO1FBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7S0FDL0MsQ0FBQztJQUNGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLHdEQUF3RDtJQUN4RCxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7UUFDcEMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxJQUFZLEVBQUUsSUFBdUI7SUFDdkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRCxNQUFNLEtBQUssR0FBRztRQUNaLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUk7UUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSTtRQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJO1FBQ3ZCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO1FBQ2YsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSTtRQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJO1FBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUk7UUFDdkIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7UUFDZixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJO1FBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUk7S0FDekIsQ0FBQztJQUNGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ1YsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEQsSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE9BVTVDO0lBQ0MsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUU5RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQUVwRCxPQUFPLENBQUMsSUFBdUIsRUFBRSxFQUFFO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQ1IsUUFBUSxLQUFLLFNBQVM7WUFDcEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkIsT0FBTyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFFN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSw4QkFBOEI7SUFDNUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxLQUFLLEdBQUcsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5jb2RlVGltZSwgaW5jcmVtZW50QmFzZTMyIH0gZnJvbSAndWxpZCc7XG5cbi8qKlxuICogQ29ycmVsYXRpb24taWQgZ2VuZXJhdGlvbiBmb3IgdGhlIGVudGl0eSBmYW1pbGllcyBhIHJlcGxheSBjYW4gY3JlYXRlLlxuICpcbiAqIENvcnJlbGF0aW9uIGlkcyBhcmUgbWludGVkIGJ5IHRoZSB3b3JrZmxvdyBWTSBhbmQgYXJlIHRoZSBzZXJ2ZXIncyBpZGVudGl0eVxuICogZ2F0ZTogYSBjb25kaXRpb25hbCBjcmVhdGUgb24gdGhlIGlkIGlzIHdoYXQgbWFrZXMgYSBkdXBsaWNhdGUgd3JpdGUgZnJvbSBhXG4gKiBzZWNvbmQgbGl2ZSByZXBsYXkgaWRlbXBvdGVudCBpbnN0ZWFkIG9mIGFkZGl0aXZlLiBUaGF0IG9ubHkgd29ya3MgaWYgdHdvXG4gKiByZXBsYXlzIG9mIHRoZSBzYW1lIHJ1biBtaW50IHRoZSBzYW1lIGlkIGZvciB0aGUgc2FtZSBlbnRpdHkuXG4gKlxuICogSGlzdG9yaWNhbGx5IGV2ZXJ5IGlkIHdhcyB0aGUgTnRoIGRyYXcgb2YgKm9uZSogbW9ub3RvbmljIFVMSUQgc2VxdWVuY2UgcGVyXG4gKiBydW4sIHNoYXJlZCBieSBzdGVwcywgd2FpdHMsIGhvb2tzLCBhdHRyaWJ1dGUgd3JpdGVzLCBhYm9ydCBjb250cm9sbGVycyBhbmRcbiAqIHN0cmVhbSBpZHMgYWxpa2UuIEV2ZXJ5IGlkIHdhcyB0aGVyZWZvcmUgYW4gb3JkaW5hbCBvdmVyIHRoZSB3aG9sZSBydW4sIGFuZCBhXG4gKiBzaW5nbGUgZXh0cmEgZHJhdyBvZiBhbnkga2luZCByZW51bWJlcmVkIGV2ZXJ5IGVudGl0eSBvZiBldmVyeSBraW5kIGFmdGVyIGl0LlxuICogVHdvIHJlcGxheXMgdGhhdCBhZ3JlZWQgYWJvdXQgZXZlcnkgc3RlcCBidXQgZGlzYWdyZWVkIGFib3V0IG9uZSBgc2xlZXAoKWBcbiAqIHdvdWxkIG1pbnQgZGlmZmVyZW50IGlkcyBmb3IgYWxsIHN1YnNlcXVlbnQgc3RlcHMsIHNvIHRoZWlyIHdyaXRlcyBhcHBlbmRlZFxuICogc2lkZSBieSBzaWRlIGluc3RlYWQgb2YgY29sbGlkaW5nLCBhbmQgdGhlIHNldHRsZWQgbG9nIGVuZGVkIHVwIGhvbGRpbmcgdHdvXG4gKiBuYW1lcyBmb3Igb25lIGxvZ2ljYWwgc3RlcC4gT25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29uc3VtZWQgb24gdGhlIG5leHRcbiAqIHJlcGxheTsgdGhlIG90aGVyIGlzIGZhdGFsIChgb25VbmNvbnN1bWVkRXZlbnRgKS5cbiAqXG4gKiBQZXIta2luZCBzb3VyY2VzIG5hcnJvdyB0aGF0IGNvdXBsaW5nIHRvIG9uZSBraW5kIGF0IGEgdGltZTogZWFjaCBmYW1pbHlcbiAqIGRyYXdzIGZyb20gaXRzIG93biBpbmRlcGVuZGVudCBpbmNyZW1lbnRpbmcgc2VxdWVuY2UsIHNvIGEgZGlzYWdyZWVtZW50IGFib3V0XG4gKiBob3cgbWFueSBob29rcyBvciBzbGVlcHMgd2VyZSBjcmVhdGVkIG5vIGxvbmdlciByZW5hbWVzIHN0ZXBzLlxuICpcbiAqIElkcyBzdGF5IHN5bnRhY3RpY2FsbHkgdmFsaWQgVUxJRHMgKDEwIENyb2NrZm9yZCBjaGFyYWN0ZXJzIG9mXG4gKiBgZml4ZWRUaW1lc3RhbXBgIHBsdXMgMTYgb2YgYm9keSksIGJlY2F1c2UgY29ycmVsYXRpb24gaWRzIGFyZSB2YWxpZGF0ZWQgYXNcbiAqIHByZWZpeGVkIDI2LWNoYXIgVUxJRHMgYnkgdGhlIGJhY2tlbmQsIGFuZCB0aGV5IHN0YXkgbW9ub3RvbmljICp3aXRoaW4qIGFcbiAqIGtpbmQsIGJlY2F1c2UgYGhvb2tzLmxpc3RgIGlzIG9yZGVyZWQgYnkgaG9vayBpZC5cbiAqXG4gKiBNb25vdG9uaWNpdHkgaXMgcGVyIGtpbmQsIGFuZCB0d28ga2luZHMgbWludCBgaG9va19gIGlkcyAoYGhvb2tgIGFuZFxuICogYGFib3J0SG9va2ApLCBzbyBsaXN0aW5nIG9yZGVyIGlzIG9ubHkgY3JlYXRpb24gb3JkZXIgKndpdGhpbiogZWFjaCBvZiB0aGVtLlxuICogTm8gd29ybGQgZmlsdGVycyBzeXN0ZW0gaG9va3Mgb3V0IG9mIGEgbGlzdGluZywgc28gYSBydW4gdGhhdCBjb25zdHJ1Y3RzIGFuXG4gKiBhYm9ydCBjb250cm9sbGVyIGFuZCBhbHNvIGNyZWF0ZXMgaXRzIG93biBob29rcyBsaXN0cyB0aGF0IHN5c3RlbSBob29rIGF0IGFcbiAqIHBvc2l0aW9uIGRlY2lkZWQgYnkgaXRzIGtpbmQncyBoYXNoIHJhdGhlciB0aGFuIGF0IGl0cyBjcmVhdGlvbiBwb3NpdGlvbi5cbiAqIE9yZGVyIGFtb25nIHRoZSB1c2VyJ3Mgb3duIGhvb2tzIGlzIHVuYWZmZWN0ZWQuXG4gKlxuICogVGhpcyBkb2VzIG5vdCBtYWtlIGlkcyBpbmRlcGVuZGVudCBvZiAqb3JkaW5hbCBwb3NpdGlvbiB3aXRoaW4gdGhlaXIgb3duXG4gKiBraW5kKjogdHdvIHJlcGxheXMgdGhhdCBkaXNhZ3JlZSBhYm91dCBob3cgbWFueSBzdGVwcyByYW4gc3RpbGwgbWludFxuICogZGlmZmVyZW50IGlkcyBmb3IgdGhlIG5leHQgc3RlcC4gVGhhdCBpcyBhIG5hcnJvd2VyIGZhaWx1cmUgdGhhbiB0aGUgc2hhcmVkXG4gKiBzZXF1ZW5jZSdzLCBub3QgYW4gZWxpbWluYXRlZCBvbmUuXG4gKi9cblxuLyoqIEVudGl0eSBmYW1pbGllcyB0aGF0IGRyYXcgY29ycmVsYXRpb24gaWRzLCBlYWNoIGZyb20gaXRzIG93biBzZXF1ZW5jZS4gKi9cbmV4cG9ydCB0eXBlIENvcnJlbGF0aW9uSWRLaW5kID1cbiAgLyoqIGBzdGVwX2AgaWRzLCBvbmUgcGVyIHN0ZXAgaW52b2NhdGlvbi4gKi9cbiAgfCAnc3RlcCdcbiAgLyoqIGB3YWl0X2AgaWRzLCBvbmUgcGVyIGBzbGVlcCgpYC4gKi9cbiAgfCAnd2FpdCdcbiAgLyoqIGBob29rX2AgaWRzIGZvciBob29rcyBjcmVhdGVkIGJ5IHdvcmtmbG93IGNvZGUuICovXG4gIHwgJ2hvb2snXG4gIC8qKiBgYXR0cl9gIGlkcywgb25lIHBlciBhdHRyaWJ1dGUgd3JpdGUuICovXG4gIHwgJ2F0dHInXG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgY29udHJvbGxlcidzIG93biBpZCwgd2hpY2ggYmVjb21lcyBpdHMgc3RyZWFtIG5hbWUgYW5kIGhvb2tcbiAgICogdG9rZW4uIFNlcGFyYXRlIGZyb20gYGhvb2tgIHNvIGNvbnN0cnVjdGluZyBhbiBhYm9ydCBjb250cm9sbGVyIGRvZXMgbm90XG4gICAqIHJlbnVtYmVyIGxhdGVyIHVzZXIgaG9va3MuXG4gICAqL1xuICB8ICdhYm9ydCdcbiAgLyoqIGBob29rX2AgaWRzIGZvciB0aGUgaW50ZXJuYWwgc3lzdGVtIGhvb2sgYmFja2luZyBhbiBhYm9ydCBjb250cm9sbGVyLiAqL1xuICB8ICdhYm9ydEhvb2snXG4gIC8qKlxuICAgKiBJZHMgbWludGVkIGR1cmluZyBzZXJpYWxpemF0aW9uIChgU1RBQkxFX1VMSURgKTogc3RyZWFtIG5hbWVzLCBhbmQgYW4gYWJvcnRcbiAgICogaG9sZGVyJ3Mgc3RyZWFtIG5hbWUgYW5kIGBhYnJ0X2AgaG9vayB0b2tlbiB3aGVuIGl0IHJlYWNoZXMgc2VyaWFsaXphdGlvblxuICAgKiB3aXRob3V0IGFuIGlkZW50aXR5IHlldCAoYHJlZHVjZUFib3J0V2l0aExpc3RlbmVyYCksIHdoaWNoIGlzIHdoeSBgYWJvcnRgXG4gICAqIGFib3ZlIGlzIG5vdCB0aGUgb25seSBtaW50IHBhdGggZm9yIGFuIGFib3J0IGlkZW50aXR5LiBOb3QgY29ycmVsYXRpb24gaWRzLFxuICAgKiBidXQgdGhleSBkcmV3IGZyb20gdGhlIHNhbWUgc2hhcmVkIHNlcXVlbmNlLCBzbyBhIHdvcmtmbG93IHRoYXQgc2VyaWFsaXplZFxuICAgKiBhIHN0cmVhbSByZW51bWJlcmVkIGV2ZXJ5IGVudGl0eSBjcmVhdGVkIGFmdGVyIGl0LlxuICAgKi9cbiAgfCAnc3RyZWFtJztcblxuLyoqIE1pbnRzIHRoZSBVTElEIGJvZHkgb2YgYSBjb3JyZWxhdGlvbiBpZCBmb3Igb25lIGVudGl0eSBmYW1pbHkuICovXG5leHBvcnQgdHlwZSBDb3JyZWxhdGlvbklkR2VuZXJhdG9yID0gKGtpbmQ6IENvcnJlbGF0aW9uSWRLaW5kKSA9PiBzdHJpbmc7XG5cbmNvbnN0IENST0NLRk9SRCA9ICcwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWic7XG5cbi8qKiBOdW1iZXIgb2YgQ3JvY2tmb3JkIGNoYXJhY3RlcnMgaW4gYSBVTElEJ3MgcmFuZG9tIGNvbXBvbmVudC4gKi9cbmNvbnN0IEJPRFlfQ0hBUlMgPSAxNjtcblxuLyoqIE51bWJlciBvZiBDcm9ja2ZvcmQgY2hhcmFjdGVycyBpbiBhIFVMSUQncyB0aW1lc3RhbXAgY29tcG9uZW50LiAqL1xuY29uc3QgVElNRV9DSEFSUyA9IDEwO1xuXG5mdW5jdGlvbiBtdWwzMihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmltdWwoYSwgYikgPj4+IDA7XG59XG5cbmZ1bmN0aW9uIHJvdGwzMih2YWx1ZTogbnVtYmVyLCBzaGlmdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuICgodmFsdWUgPDwgc2hpZnQpIHwgKHZhbHVlID4+PiAoMzIgLSBzaGlmdCkpKSA+Pj4gMDtcbn1cblxuLyoqIE11cm11ckhhc2gzJ3MgMzItYml0IGZpbmFsaXplci4gKi9cbmZ1bmN0aW9uIGZtaXgzMihpbnB1dDogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGggPSBpbnB1dCA+Pj4gMDtcbiAgaCA9IChoIF4gKGggPj4+IDE2KSkgPj4+IDA7XG4gIGggPSBtdWwzMihoLCAweDg1ZWJjYTZiKTtcbiAgaCA9IChoIF4gKGggPj4+IDEzKSkgPj4+IDA7XG4gIGggPSBtdWwzMihoLCAweGMyYjJhZTM1KTtcbiAgcmV0dXJuIChoIF4gKGggPj4+IDE2KSkgPj4+IDA7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyAxMjgtYml0IGhhc2ggb2YgYSBzdHJpbmcsIGFzIGZvdXIgMzItYml0IGxhbmVzLlxuICpcbiAqIEEgTXVybXVySGFzaDMtc3R5bGUgbWl4ZXIgb3ZlciBVVEYtMTYgY29kZSB1bml0cywgcm90YXRpbmcgd2hpY2ggbGFuZSBhYnNvcmJzXG4gKiBlYWNoIHVuaXQgYW5kIGRpZmZ1c2luZyBhY3Jvc3MgbGFuZXMgYXQgdGhlIGVuZC4gT25seSBkZXRlcm1pbmlzbSBhbmRcbiAqIGRpZmZ1c2lvbiBtYXR0ZXIgaGVyZTogdGhpcyBpcyBub3QgYSBjcnlwdG9ncmFwaGljIGhhc2gsIGNsYWltcyBub1xuICogYml0LWNvbXBhdGliaWxpdHkgd2l0aCBhbnkgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLCBhbmQgbXVzdCBub3QgYmUgdXNlZCBmb3JcbiAqIGFueXRoaW5nIHRoYXQgb3V0bGl2ZXMgYSBkZXBsb3ltZW50J3MgcmVwbGF5cy5cbiAqL1xuZnVuY3Rpb24gaGFzaDEyOChpbnB1dDogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBsYW5lczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgMHg5ZTM3NzliMSwgMHg4NWViY2E3NywgMHhjMmIyYWUzZCwgMHgyN2Q0ZWIyZixcbiAgXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGxldCBrID0gaW5wdXQuY2hhckNvZGVBdChpKSA+Pj4gMDtcbiAgICBrID0gbXVsMzIoaywgMHhjYzllMmQ1MSk7XG4gICAgayA9IHJvdGwzMihrLCAxNSk7XG4gICAgayA9IG11bDMyKGssIDB4MWI4NzM1OTMpO1xuICAgIGNvbnN0IGxhbmUgPSBpICYgMztcbiAgICBsZXQgaCA9IChsYW5lc1tsYW5lXSBeIGspID4+PiAwO1xuICAgIGggPSByb3RsMzIoaCwgMTMpO1xuICAgIGxhbmVzW2xhbmVdID0gKG11bDMyKGgsIDUpICsgMHhlNjU0NmI2NCkgPj4+IDA7XG4gIH1cbiAgbGFuZXNbMF0gPSAobGFuZXNbMF0gXiBpbnB1dC5sZW5ndGgpID4+PiAwO1xuICAvLyBUd28gcGFzc2VzIHNvIGV2ZXJ5IGxhbmUgZGVwZW5kcyBvbiBldmVyeSBvdGhlciBsYW5lLlxuICBmb3IgKGxldCBwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykge1xuICAgIGZvciAobGV0IGxhbmUgPSAwOyBsYW5lIDwgNDsgbGFuZSsrKSB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IGxhbmVzWyhsYW5lICsgMykgJiAzXTtcbiAgICAgIGxhbmVzW2xhbmVdID0gZm1peDMyKChsYW5lc1tsYW5lXSBeIHByZXZpb3VzKSA+Pj4gMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsYW5lcztcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEga2luZCdzIHN0YXJ0aW5nIGJvZHk6IDgwIGJpdHMgb2YgYSAxMjgtYml0IGhhc2ggYXMgMTYgQ3JvY2tmb3JkXG4gKiBjaGFyYWN0ZXJzLCBtb3N0IHNpZ25pZmljYW50IGZpcnN0LlxuICpcbiAqIFRoZSBsZWFkaW5nIGNoYXJhY3RlciBpcyBjb25maW5lZCB0byB0aGUgYWxwaGFiZXQncyBsb3dlciBoYWxmIHNvIHRoZSBib2R5XG4gKiBzdGFydHMgYmVsb3cgaGFsZiBvZiB0aGUgODAtYml0IHNwYWNlLiBgaW5jcmVtZW50QmFzZTMyYCB0aHJvd3Mgb24gb3ZlcmZsb3csXG4gKiBhbmQgd2l0aG91dCB0aGlzIGEgYmFzZSB0aGF0IGhhcHBlbmVkIHRvIGxhbmQgbmVhciBgWuKAplpgIHdvdWxkIG1ha2Ugb3ZlcmZsb3dcbiAqIHJlYWNoYWJsZSBhZnRlciBmZXcgZHJhd3MgcmF0aGVyIHRoYW4gYWZ0ZXIgMl43OSBvZiB0aGVtLlxuICovXG5mdW5jdGlvbiBkZXJpdmVCb2R5KHNlZWQ6IHN0cmluZywga2luZDogQ29ycmVsYXRpb25JZEtpbmQpOiBzdHJpbmcge1xuICBjb25zdCBsYW5lcyA9IGhhc2gxMjgoYCR7c2VlZH0gY29ycmVsYXRpb24ta2luZCAke2tpbmR9YCk7XG4gIGNvbnN0IGJ5dGVzID0gW1xuICAgIChsYW5lc1swXSA+Pj4gMjQpICYgMHhmZixcbiAgICAobGFuZXNbMF0gPj4+IDE2KSAmIDB4ZmYsXG4gICAgKGxhbmVzWzBdID4+PiA4KSAmIDB4ZmYsXG4gICAgbGFuZXNbMF0gJiAweGZmLFxuICAgIChsYW5lc1sxXSA+Pj4gMjQpICYgMHhmZixcbiAgICAobGFuZXNbMV0gPj4+IDE2KSAmIDB4ZmYsXG4gICAgKGxhbmVzWzFdID4+PiA4KSAmIDB4ZmYsXG4gICAgbGFuZXNbMV0gJiAweGZmLFxuICAgIChsYW5lc1syXSA+Pj4gMjQpICYgMHhmZixcbiAgICAobGFuZXNbMl0gPj4+IDE2KSAmIDB4ZmYsXG4gIF07XG4gIGxldCBib2R5ID0gJyc7XG4gIGxldCBhY2N1bXVsYXRvciA9IDA7XG4gIGxldCBiaXRzID0gMDtcbiAgZm9yIChjb25zdCBieXRlIG9mIGJ5dGVzKSB7XG4gICAgYWNjdW11bGF0b3IgPSAoKGFjY3VtdWxhdG9yIDw8IDgpIHwgYnl0ZSkgPj4+IDA7XG4gICAgYml0cyArPSA4O1xuICAgIHdoaWxlIChiaXRzID49IDUpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gKGFjY3VtdWxhdG9yID4+PiAoYml0cyAtIDUpKSAmIDMxO1xuICAgICAgYm9keSArPSBDUk9DS0ZPUkRbYm9keS5sZW5ndGggPT09IDAgPyBpbmRleCAmIDE1IDogaW5kZXhdO1xuICAgICAgYml0cyAtPSA1O1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm9keTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSByZXBsYXkncyBjb3JyZWxhdGlvbi1pZCBnZW5lcmF0b3IuXG4gKlxuICogYHBlcktpbmQ6IGZhbHNlYCByZXR1cm5zIHRoZSBydW4ncyBzaW5nbGUgc2hhcmVkIG1vbm90b25pYyBzZXF1ZW5jZSBhbmRcbiAqIGlnbm9yZXMgdGhlIGtpbmQgZW50aXJlbHksIHNvIGJvdGggc2NoZW1lcyBnbyB0aHJvdWdoIG9uZSBjYWxsIHBhdGggYW5kIHRoZVxuICogZmxhZyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvcnJlbGF0aW9uSWRHZW5lcmF0b3Iob3B0aW9uczoge1xuICAvKipcbiAgICogVGhlIHJ1bidzIHJlcGxheS1zdGFibGUgc2VlZC4gTXVzdCBub3QgdmFyeSBiZXR3ZWVuIHJlcGxheXMgb2Ygb25lIHJ1biwgYW5kXG4gICAqIG11c3QgZGlmZmVyIGJldHdlZW4gcnVucywgb3IgdHdvIHJ1bnMgd291bGQgbWludCBpZGVudGljYWwgaWRzLlxuICAgKi9cbiAgc2VlZDogc3RyaW5nO1xuICBmaXhlZFRpbWVzdGFtcDogbnVtYmVyO1xuICAvKiogVGhlIHJ1bidzIHNoYXJlZCBtb25vdG9uaWMgc2VxdWVuY2UsIHVzZWQgYXMtaXMgd2hlbiBgcGVyS2luZGAgaXMgZmFsc2UuICovXG4gIHBvc2l0aW9uYWw6ICgpID0+IHN0cmluZztcbiAgcGVyS2luZDogYm9vbGVhbjtcbn0pOiBDb3JyZWxhdGlvbklkR2VuZXJhdG9yIHtcbiAgY29uc3QgeyBzZWVkLCBmaXhlZFRpbWVzdGFtcCwgcG9zaXRpb25hbCwgcGVyS2luZCB9ID0gb3B0aW9ucztcblxuICBpZiAoIXBlcktpbmQpIHtcbiAgICByZXR1cm4gcG9zaXRpb25hbDtcbiAgfVxuXG4gIGNvbnN0IHRpbWUgPSBlbmNvZGVUaW1lKGZpeGVkVGltZXN0YW1wLCBUSU1FX0NIQVJTKTtcbiAgY29uc3QgYm9kaWVzID0gbmV3IE1hcDxDb3JyZWxhdGlvbklkS2luZCwgc3RyaW5nPigpO1xuXG4gIHJldHVybiAoa2luZDogQ29ycmVsYXRpb25JZEtpbmQpID0+IHtcbiAgICBjb25zdCBwcmV2aW91cyA9IGJvZGllcy5nZXQoa2luZCk7XG4gICAgY29uc3QgYm9keSA9XG4gICAgICBwcmV2aW91cyA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gZGVyaXZlQm9keShzZWVkLCBraW5kKVxuICAgICAgICA6IGluY3JlbWVudEJhc2UzMihwcmV2aW91cyk7XG4gICAgYm9kaWVzLnNldChraW5kLCBib2R5KTtcbiAgICByZXR1cm4gYCR7dGltZX0ke2JvZHl9YDtcbiAgfTtcbn1cblxuLyoqIExlbmd0aCBvZiBhIFVMSUQsIGV4cG9ydGVkIHNvIHRlc3RzIG5lZWQgbm90IHJlc3RhdGUgaXQuICovXG5leHBvcnQgY29uc3QgQ09SUkVMQVRJT05fSURfTEVOR1RIID0gVElNRV9DSEFSUyArIEJPRFlfQ0hBUlM7XG5cbi8qKlxuICogV2hldGhlciBlYWNoIGVudGl0eSBmYW1pbHkgZHJhd3MgY29ycmVsYXRpb24gaWRzIGZyb20gaXRzIG93biBzZXF1ZW5jZSByYXRoZXJcbiAqIHRoYW4gZnJvbSBvbmUgc2VxdWVuY2Ugc2hhcmVkIGJ5IHRoZSB3aG9sZSBydW4uIE9mZiB1bmxlc3Mgb3B0ZWQgaW4sIHNvIGFuIFNES1xuICogdXBncmFkZSBhbG9uZSBuZXZlciBtb3ZlcyBhIHJ1biBiZXR3ZWVuIHNjaGVtZXMuXG4gKlxuICogVGhlIGludmFyaWFudCBlaXRoZXIgd2F5OiBhIHJ1biBtdXN0IHJlcGxheSB1bmRlciB0aGUgc2NoZW1lIHRoYXQgbWludGVkIGl0c1xuICogaWRzLiBBIHJlcGxheSB1bmRlciB0aGUgb3RoZXIgc2NoZW1lIG1pbnRzIGlkcyBpdHMgb3duIGVhcmxpZXIgZXZlbnRzIGRvIG5vdFxuICogY2FycnksIHNvIGl0IGNhbiBjb25zdW1lIG5vbmUgb2YgdGhlbSBhbmQgZmFpbHMgdGhlIHJ1bi4gVHdvIHRoaW5ncyBjYW4gYnJlYWtcbiAqIGl0LCBhbmQgYm90aCBhcmUgYWJvdXQgdHVybmluZyB0aGUgZmxhZyBvbiByYXRoZXIgdGhhbiBhYm91dCB1cGdyYWRpbmc6XG4gKlxuICogLSBFbmFibGluZyBpdCB3aGlsZSBydW5zIGFyZSBpbiBmbGlnaHQuIE9uIFZlcmNlbCwgc2tldyBwcm90ZWN0aW9uIGtlZXBzIGEgcnVuXG4gKiAgIG9uIHRoZSBkZXBsb3ltZW50IHRoYXQgc3RhcnRlZCBpdCwgc28gYSBydW4gb25seSBldmVyIHNlZXMgdGhlIHZhbHVlIGJha2VkXG4gKiAgIGludG8gaXRzIG93biBkZXBsb3ltZW50LiBFbHNld2hlcmUgKHdvcmxkLXBvc3RncmVzLCB3b3JsZC1sb2NhbCwgYVxuICogICBzZWxmLWhvc3RlZCBwcm9jZXNzKSBub3RoaW5nIHBpbnMgYSBydW4gdG8gdGhlIGNvZGUgdGhhdCBzdGFydGVkIGl0LCBzb1xuICogICBlbmFibGUgaXQgZHVyaW5nIGEgcXVpZXQgd2luZG93LlxuICogLSBBIHJvbGxpbmcgZGVwbG95IHRoYXQgbGVhdmVzIGJvdGggdmFsdWVzIGxpdmUsIHdoaWNoIHB1dHMgdHdvIHNjaGVtZXMgb24gb25lXG4gKiAgIHJ1biBjb25jdXJyZW50bHkg4oCUIHRoZSBzaWRlLWJ5LXNpZGUgYXBwZW5kIHRoaXMgd2hvbGUgbWVjaGFuaXNtIGV4aXN0cyB0b1xuICogICBhdm9pZC4gUm9sbCB0aGUgdmFsdWUgb3V0IHRvIHRoZSB3aG9sZSBmbGVldCBhdCBvbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQZXJLaW5kQ29ycmVsYXRpb25JZHNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUEVSX0tJTkRfQ09SUkVMQVRJT05fSURTID09PSAnMSc7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"describe-error.d.ts","sourceRoot":"","sources":["../src/describe-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAGlB,MAAM,kBAAkB,CAAC;AAS1B;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,EAAE,YAAY,CAAC;IACxB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6CD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,GAC3B,gBAAgB,CAkDlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,SAAS,CAAC,EAAE,YAAY,GACvB,gBAAgB,CA4ElB"}
1
+ {"version":3,"file":"describe-error.d.ts","sourceRoot":"","sources":["../src/describe-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAGlB,MAAM,kBAAkB,CAAC;AAS1B;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,EAAE,YAAY,CAAC;IACxB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+CD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,GAC3B,gBAAgB,CAqDlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,SAAS,CAAC,EAAE,YAAY,GACvB,gBAAgB,CAsFlB"}
@@ -21,6 +21,7 @@ const REPLAY_TIMEOUT_HINT = 'The workflow replay between step boundaries took to
21
21
  const MAX_DELIVERIES_HINT = 'The workflow queue exceeded its max-delivery budget. This usually indicates a persistent runtime failure — check the most recent stack traces for the underlying cause.';
22
22
  const MAX_EVENTS_HINT = 'The workflow exceeded the maximum number of events per run. This usually means unbounded work in the workflow function — e.g. a loop that keeps creating steps without terminating. Break long-running workflows into child workflows to stay under the limit.';
23
23
  const WORLD_CONTRACT_HINT = 'The workflow backend returned data that violated the SDK contract. This is not retryable; please report it with the stack trace and runId.';
24
+ const DEPLOYMENT_MISMATCH_HINT = "The run was delivered to a deployment other than the deployment it is pinned to, and was stopped to protect against code-skew errors after the runtime failed to re-route it there. Verify that the run's deployment is still available and that queue callbacks route to it.";
24
25
  function normalizeErrorCode(code) {
25
26
  // Values read back from persisted events are `string | undefined` — we
26
27
  // only trust codes that match a known entry in `RUN_ERROR_CODES`.
@@ -77,6 +78,9 @@ export function describeRunError(signal) {
77
78
  hint: WORLD_CONTRACT_HINT,
78
79
  };
79
80
  }
81
+ if (errorCode === RUN_ERROR_CODES.DEPLOYMENT_MISMATCH) {
82
+ return { attribution: 'sdk', errorCode, hint: DEPLOYMENT_MISMATCH_HINT };
83
+ }
80
84
  if (name === 'WorkflowRuntimeError' || name === 'StepNotRegisteredError') {
81
85
  return { attribution: 'sdk', errorCode, hint: RUNTIME_ERROR_HINT };
82
86
  }
@@ -129,6 +133,15 @@ export function describeError(err, errorCode) {
129
133
  hint: CORRUPTED_EVENT_LOG_HINT,
130
134
  };
131
135
  }
136
+ // Check DEPLOYMENT_MISMATCH before the generic WorkflowRuntimeError branch —
137
+ // WorkflowDeploymentMismatchError subclasses it, but has its own code + hint.
138
+ if (effectiveCode === RUN_ERROR_CODES.DEPLOYMENT_MISMATCH) {
139
+ return {
140
+ attribution: 'sdk',
141
+ errorCode: effectiveCode,
142
+ hint: DEPLOYMENT_MISMATCH_HINT,
143
+ };
144
+ }
132
145
  if (err instanceof WorkflowRuntimeError) {
133
146
  return {
134
147
  attribution: 'sdk',
@@ -173,4 +186,4 @@ export function describeError(err, errorCode) {
173
186
  }
174
187
  return { attribution: 'user', errorCode: effectiveCode };
175
188
  }
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpYmUtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVzY3JpYmUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLCtCQUErQixFQUMvQixpQ0FBaUMsR0FDbEMsTUFBTSxxQkFBcUIsQ0FBQztBQTRDN0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNsQywyQkFBMkI7SUFDM0IsdUJBQXVCO0lBQ3ZCLGlDQUFpQztJQUNqQyxtQ0FBbUM7Q0FDcEMsQ0FBQyxDQUFDO0FBRUgsU0FBUyx1QkFBdUIsQ0FBQyxHQUFZO0lBQzNDLE9BQU8sQ0FDTCxHQUFHLFlBQVkseUJBQXlCO1FBQ3hDLEdBQUcsWUFBWSxxQkFBcUI7UUFDcEMsR0FBRyxZQUFZLCtCQUErQjtRQUM5QyxHQUFHLFlBQVksaUNBQWlDLENBQ2pELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSx3QkFBd0IsR0FDNUIsMkpBQTJKLENBQUM7QUFDOUosTUFBTSxrQkFBa0IsR0FDdEIsd0lBQXdJLENBQUM7QUFDM0ksTUFBTSxrQkFBa0IsR0FDdEIsNklBQTZJLENBQUM7QUFDaEosTUFBTSx3QkFBd0IsR0FDNUIsZ0tBQWdLLENBQUM7QUFDbkssTUFBTSxtQkFBbUIsR0FDdkIsZ1pBQWdaLENBQUM7QUFDblosTUFBTSxtQkFBbUIsR0FDdkIseUtBQXlLLENBQUM7QUFDNUssTUFBTSxlQUFlLEdBQ25CLGdRQUFnUSxDQUFDO0FBQ25RLE1BQU0sbUJBQW1CLEdBQ3ZCLDRJQUE0SSxDQUFDO0FBRS9JLFNBQVMsa0JBQWtCLENBQUMsSUFBd0I7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QUFPO1lBQ0wsV0FBVyxFQUFFLEtBQUs7WUFDbEIsU0FBUyxFQUFFLGFBQWE7WUFDeEIsSUFBSSxFQUFFLG1CQUFtQjtTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksYUFBYSxLQUFLLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFELE9BQU87WUFDTCxXQUFXLEVBQUUsTUFBTTtZQUNuQixTQUFTLEVBQUUsYUFBYTtZQUN4QixJQUFJLEVBQUUsZUFBZTtTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksYUFBYSxLQUFLLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFELE9BQU87WUFDTCxXQUFXLEVBQUUsS0FBSztZQUNsQixTQUFTLEVBQUUsYUFBYTtZQUN4QixJQUFJLEVBQUUsd0JBQXdCO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxhQUFhLEtBQUssZUFBZSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDM0QsT0FBTztZQUNMLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLElBQUksRUFBRSxtQkFBbUI7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IsXG4gIFJVTl9FUlJPUl9DT0RFUyxcbiAgdHlwZSBSdW5FcnJvckNvZGUsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgY2xhc3NpZnlSdW5FcnJvciB9IGZyb20gJy4vY2xhc3NpZnktZXJyb3IuanMnO1xuaW1wb3J0IHtcbiAgTm90SW5TdGVwQ29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yLFxuICBVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3IsXG59IGZyb20gJy4vY29udGV4dC1lcnJvcnMuanMnO1xuXG4vKipcbiAqIEF0dHJpYnV0aW9uIG9mIGEgd29ya2Zsb3cvc3RlcCBmYWlsdXJlIGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogLSBgdXNlcmA6IHRoZSBlcnJvciBjYW1lIGZyb20gY3VzdG9tZXIgY29kZSAoYSBzdGVwIG9yIHdvcmtmbG93IGZ1bmN0aW9uXG4gKiAgIHRocmV3LCBvciBhIHZhbHVlIHRoZXkgcGFzc2VkIGFjcm9zcyBhIGJvdW5kYXJ5IHdhc24ndCBzZXJpYWxpemFibGUpLlxuICogLSBgc2RrYDogdGhlIFNESyBwcm9kdWNlZCB0aGUgZXJyb3IgaXRzZWxmIOKAlCBhbiBpbnRlcm5hbCBpbnZhcmlhbnQgYnJva2UsXG4gKiAgIG9yIGEgcnVudGltZSBndWFyZCByZWplY3RlZCB0aGUgY2FsbC4gVGhlc2Ugc2hvdWxkIGJlIHJhcmU7IHdoZW4gdGhleVxuICogICBoYXBwZW4gd2Ugd2FudCB0byBmcmFtZSB0aGUgdGVybWluYWwgb3V0cHV0IGFzIFwidGhpcyBpcyB1cywgbm90IHlvdS5cIlxuICovXG5leHBvcnQgdHlwZSBFcnJvckF0dHJpYnV0aW9uID0gJ3VzZXInIHwgJ3Nkayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JEZXNjcmlwdGlvbiB7XG4gIGF0dHJpYnV0aW9uOiBFcnJvckF0dHJpYnV0aW9uO1xuICBlcnJvckNvZGU6IFJ1bkVycm9yQ29kZTtcbiAgLyoqXG4gICAqIFNob3J0LCBjbGFzcy1hd2FyZSBoaW50IHRvIGhlbHAgYSB1c2VyIHVuZGVyc3RhbmQgd2hhdCB0aGUgZXJyb3IgbWVhbnMuXG4gICAqIE9ubHkgc2V0IGZvciB3ZWxsLWtub3duIFNESyBlcnJvciBjbGFzc2VzIChTZXJpYWxpemF0aW9uRXJyb3IsXG4gICAqIFdvcmtmbG93UnVudGltZUVycm9yLCBjb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMpOyBgdW5kZWZpbmVkYCBmb3IgcGxhaW5cbiAgICogdXNlciBlcnJvcnMsIHdoZXJlIHRoZSBzdGFjayBpcyBhbHJlYWR5IHRoZSBtb3N0IHVzZWZ1bCB0aGluZyB0byBzaG93LlxuICAgKi9cbiAgaGludD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFcnJvciBzaWduYWwgZmllbGRzIGNhcnJpZWQgb24gcGVyc2lzdGVkIGZhaWx1cmUgZXZlbnRzIChlLmcuXG4gKiBgcnVuX2ZhaWxlZGAgLyBgc3RlcF9mYWlsZWRgKS4gVGhlIHNoYXBlIGlzIGludGVudGlvbmFsbHkgbG9vc2U6XG4gKlxuICogLSBgZXJyb3JDb2RlYCBpcyB0eXBlZCBhcyBgc3RyaW5nYCByYXRoZXIgdGhhbiBgUnVuRXJyb3JDb2RlYCBiZWNhdXNlXG4gKiAgIHRoZSB2YWx1ZSBjb21lcyBmcm9tIHN0b3JlZCBKU09OL0NCT1IgYW5kIG1heSBwcmVkYXRlIHRoZSBjdXJyZW50XG4gKiAgIGVudW0g4oCUIGNhbGxlcnMgc2hvdWxkIG5vdCBuYXJyb3cgb24gaXQgYmxpbmRseS4gVmFsdWVzIHRoYXQgZG9uJ3RcbiAqICAgbWF0Y2ggYSBrbm93biBgUlVOX0VSUk9SX0NPREVTYCBlbnRyeSBmYWxsIHRocm91Z2ggdG8gVVNFUl9FUlJPUi5cbiAqIC0gYGVycm9yTmFtZWAgaXMgdGhlIHRocm93biBgRXJyb3IjbmFtZWAuIEl0IGlzIG5vdCB1bml2ZXJzYWxseVxuICogICBwZXJzaXN0ZWQgdG9kYXk7IGNhbGxlcnMgdGhhdCBoYXZlIGFjY2VzcyB0byBpdCAoZWl0aGVyIHZpYSBhblxuICogICBpbi1tZW1vcnkgdGhyb3cgb3IgYSByaWNoZXIgcGF5bG9hZCkgY2FuIHBhc3MgaXQgaW4gdG8gc2hhcnBlblxuICogICB0aGUgYXR0cmlidXRpb24gYW5kIGhpbnQuIFdoZW4gYWJzZW50LCBgZGVzY3JpYmVSdW5FcnJvcmAgc3RpbGxcbiAqICAgcmV0dXJucyBhIHNlbnNpYmxlIGF0dHJpYnV0aW9uIGZyb20gYGVycm9yQ29kZWAgYWxvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkRXJyb3JTaWduYWwge1xuICBlcnJvckNvZGU/OiBzdHJpbmc7XG4gIGVycm9yTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgQ09OVEVYVF9FUlJPUl9OQU1FUyA9IG5ldyBTZXQoW1xuICAnTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcicsXG4gICdOb3RJblN0ZXBDb250ZXh0RXJyb3InLFxuICAnTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcicsXG4gICdVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3InLFxuXSk7XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGVyciBpbnN0YW5jZW9mIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJblN0ZXBDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIHx8XG4gICAgZXJyIGluc3RhbmNlb2YgVW5hdmFpbGFibGVJbldvcmtmbG93Q29udGV4dEVycm9yXG4gICk7XG59XG5cbmNvbnN0IFNFUklBTElaQVRJT05fRVJST1JfSElOVCA9XG4gICdBIHZhbHVlIHBhc3NlZCBhY3Jvc3MgYSB3b3JrZmxvdy9zdGVwIGJvdW5kYXJ5IGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLiBTZWUgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBvZmZlbmRpbmcgcGF0aCBhbmQgdGhlIExlYXJuIE1vcmUgbGluayBmb3IgZGV0YWlscy4nO1xuY29uc3QgQ09OVEVYVF9FUlJPUl9ISU5UID1cbiAgJ0Egd29ya2Zsb3ctb25seSBvciBzdGVwLW9ubHkgQVBJIHdhcyBjYWxsZWQgZnJvbSB0aGUgd3JvbmcgY29udGV4dC4gVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4YWN0IEFQSSBhbmQgaG93IHRvIG1vdmUgdGhlIGNhbGwuJztcbmNvbnN0IFJVTlRJTUVfRVJST1JfSElOVCA9XG4gICdUaGlzIGlzIGFuIGludGVybmFsIHdvcmtmbG93IFNESyBlcnJvciwgbm90IGEgYnVnIGluIHlvdXIgY29kZS4gSWYgaXQga2VlcHMgaGFwcGVuaW5nLCBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHN0YWNrIHRyYWNlIGFuZCB0aGUgcnVuSWQuJztcbmNvbnN0IENPUlJVUFRFRF9FVkVOVF9MT0dfSElOVCA9XG4gICdUaGUgd29ya2Zsb3cgZXZlbnQgbG9nIGNvbnRhaW5zIG9ycGhhbmVkIG9yIG1pc21hdGNoZWQgZXZlbnRzIGFuZCBjYW5ub3QgYmUgcmVwbGF5ZWQuIFRoaXMgaXMgYW4gaW50ZXJuYWwgd29ya2Zsb3cgU0RLIGVycm9yOyBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHJ1bklkLic7XG5jb25zdCBSRVBMQVlfVElNRU9VVF9ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyByZXBsYXkgYmV0d2VlbiBzdGVwIGJvdW5kYXJpZXMgdG9vayB0b28gbG9uZy4gVGhpcyBib3VuZHMgd29ya2Zsb3ctVk0gYW5kIGV2ZW50LWxvZyByZXBsYXkgdGltZSBvbmx5IOKAlCBzdGVwIGJvZGllcyAoYFwidXNlIHN0ZXBcImAgZnVuY3Rpb25zKSBhcmUgZXhjbHVkZWQuIFRoaXMgdXN1YWxseSBtZWFucyB0aGUgZXZlbnQgbG9nIGlzIHVudXN1YWxseSBsYXJnZSBvciB0aGUgd29ya2Zsb3cgZnVuY3Rpb24gaXMgZG9pbmcgaGVhdnkgc3luY2hyb25vdXMgd29yayBpbiB3b3JrZmxvdyBjb2RlIG91dHNpZGUgb2Ygc3RlcCBib2RpZXMuIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ1ZGdldCB2aWEgdGhlIFdPUktGTE9XX1JFUExBWV9USU1FT1VUX01TIGVudiB2YXIgaWYgbmVlZGVkLic7XG5jb25zdCBNQVhfREVMSVZFUklFU19ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyBxdWV1ZSBleGNlZWRlZCBpdHMgbWF4LWRlbGl2ZXJ5IGJ1ZGdldC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIHBlcnNpc3RlbnQgcnVudGltZSBmYWlsdXJlIOKAlCBjaGVjayB0aGUgbW9zdCByZWNlbnQgc3RhY2sgdHJhY2VzIGZvciB0aGUgdW5kZXJseWluZyBjYXVzZS4nO1xuY29uc3QgTUFYX0VWRU5UU19ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyBleGNlZWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHBlciBydW4uIFRoaXMgdXN1YWxseSBtZWFucyB1bmJvdW5kZWQgd29yayBpbiB0aGUgd29ya2Zsb3cgZnVuY3Rpb24g4oCUIGUuZy4gYSBsb29wIHRoYXQga2VlcHMgY3JlYXRpbmcgc3RlcHMgd2l0aG91dCB0ZXJtaW5hdGluZy4gQnJlYWsgbG9uZy1ydW5uaW5nIHdvcmtmbG93cyBpbnRvIGNoaWxkIHdvcmtmbG93cyB0byBzdGF5IHVuZGVyIHRoZSBsaW1pdC4nO1xuY29uc3QgV09STERfQ09OVFJBQ1RfSElOVCA9XG4gICdUaGUgd29ya2Zsb3cgYmFja2VuZCByZXR1cm5lZCBkYXRhIHRoYXQgdmlvbGF0ZWQgdGhlIFNESyBjb250cmFjdC4gVGhpcyBpcyBub3QgcmV0cnlhYmxlOyBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHN0YWNrIHRyYWNlIGFuZCBydW5JZC4nO1xuXG5mdW5jdGlvbiBub3JtYWxpemVFcnJvckNvZGUoY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUnVuRXJyb3JDb2RlIHtcbiAgLy8gVmFsdWVzIHJlYWQgYmFjayBmcm9tIHBlcnNpc3RlZCBldmVudHMgYXJlIGBzdHJpbmcgfCB1bmRlZmluZWRgIOKAlCB3ZVxuICAvLyBvbmx5IHRydXN0IGNvZGVzIHRoYXQgbWF0Y2ggYSBrbm93biBlbnRyeSBpbiBgUlVOX0VSUk9SX0NPREVTYC5cbiAgY29uc3Qga25vd24gPSBPYmplY3QudmFsdWVzKFJVTl9FUlJPUl9DT0RFUykgYXMgcmVhZG9ubHkgc3RyaW5nW107XG4gIGlmIChjb2RlICYmIGtub3duLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgcmV0dXJuIGNvZGUgYXMgUnVuRXJyb3JDb2RlO1xuICB9XG4gIHJldHVybiBSVU5fRVJST1JfQ09ERVMuVVNFUl9FUlJPUjtcbn1cblxuLyoqXG4gKiBEYXRhLWRyaXZlbiB2YXJpYW50IG9mIHtAbGluayBkZXNjcmliZUVycm9yfSB0aGF0IHdvcmtzIGZyb20gcGVyc2lzdGVkXG4gKiBldmVudCBmaWVsZHMgaW5zdGVhZCBvZiBhIGxpdmUgYEVycm9yYCBpbnN0YW5jZS4gSW50ZW5kZWQgZm9yIENMSS93ZWJcbiAqIHJlbmRlcmVycyB0aGF0IHJlYWQgZmFpbHVyZSBldmVudHMgYW5kIG5vIGxvbmdlciBoYXZlIHRoZSBvcmlnaW5hbFxuICogdGhyb3duIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlUnVuRXJyb3IoXG4gIHNpZ25hbDogUGVyc2lzdGVkRXJyb3JTaWduYWxcbik6IEVycm9yRGVzY3JpcHRpb24ge1xuICBjb25zdCBuYW1lID0gc2lnbmFsLmVycm9yTmFtZTtcbiAgY29uc3QgZXJyb3JDb2RlID1cbiAgICBuYW1lID09PSAnQ29ycnVwdGVkRXZlbnRMb2dFcnJvcidcbiAgICAgID8gUlVOX0VSUk9SX0NPREVTLkNPUlJVUFRFRF9FVkVOVF9MT0dcbiAgICAgIDogbm9ybWFsaXplRXJyb3JDb2RlKHNpZ25hbC5lcnJvckNvZGUpO1xuXG4gIGlmIChuYW1lID09PSAnU2VyaWFsaXphdGlvbkVycm9yJykge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAndXNlcicsIGVycm9yQ29kZSwgaGludDogU0VSSUFMSVpBVElPTl9FUlJPUl9ISU5UIH07XG4gIH1cbiAgaWYgKG5hbWUgJiYgQ09OVEVYVF9FUlJPUl9OQU1FUy5oYXMobmFtZSkpIHtcbiAgICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGUsIGhpbnQ6IENPTlRFWFRfRVJST1JfSElOVCB9O1xuICB9XG4gIGlmIChuYW1lID09PSAnQ29ycnVwdGVkRXZlbnRMb2dFcnJvcicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlLFxuICAgICAgaGludDogQ09SUlVQVEVEX0VWRU5UX0xPR19ISU5ULFxuICAgIH07XG4gIH1cbiAgaWYgKGVycm9yQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLlJFUExBWV9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICdzZGsnLCBlcnJvckNvZGUsIGhpbnQ6IFJFUExBWV9USU1FT1VUX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuTUFYX0RFTElWRVJJRVNfRVhDRUVERUQpIHtcbiAgICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3NkaycsIGVycm9yQ29kZSwgaGludDogTUFYX0RFTElWRVJJRVNfSElOVCB9O1xuICB9XG4gIGlmIChlcnJvckNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5NQVhfRVZFTlRTX0VYQ0VFREVEKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICd1c2VyJywgZXJyb3JDb2RlLCBoaW50OiBNQVhfRVZFTlRTX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuQ09SUlVQVEVEX0VWRU5UX0xPRykge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGUsXG4gICAgICBoaW50OiBDT1JSVVBURURfRVZFTlRfTE9HX0hJTlQsXG4gICAgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuV09STERfQ09OVFJBQ1RfRVJST1IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlLFxuICAgICAgaGludDogV09STERfQ09OVFJBQ1RfSElOVCxcbiAgICB9O1xuICB9XG4gIGlmIChuYW1lID09PSAnV29ya2Zsb3dSdW50aW1lRXJyb3InIHx8IG5hbWUgPT09ICdTdGVwTm90UmVnaXN0ZXJlZEVycm9yJykge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuUlVOVElNRV9FUlJPUikge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQgfTtcbiAgfVxuICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGUgfTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhbiBlcnJvciBmb3IgdXNlci1mYWNpbmcgcHJlc2VudGF0aW9uLiBQdXJlbHkgaW5mb3JtYXRpb25hbCDigJRcbiAqIGRvZXMgbm90IGNoYW5nZSBhbnkgcGVyc2lzdGVkIGV2ZW50IGRhdGEgb3IgZXJyb3IgY2xhc3NpZmljYXRpb24gdXNlZCBieVxuICogdGhlIHJ1bnRpbWUuXG4gKlxuICogVGhlIGF0dHJpYnV0aW9uIGhlcmUgaXMgbW9yZSBudWFuY2VkIHRoYW4gYGNsYXNzaWZ5UnVuRXJyb3JgOlxuICpcbiAqIC0gYFNlcmlhbGl6YXRpb25FcnJvcmAgaXMgdGVjaG5pY2FsbHkgcmFpc2VkIGJ5IHRoZSBTREssIGJ1dCBpdCBhbG1vc3RcbiAqICAgYWx3YXlzIHBvaW50cyBhdCBzb21ldGhpbmcgdGhlIGNhbGxlciBkaWQgKHBhc3NlZCBhIG5vbi1zZXJpYWxpemFibGVcbiAqICAgdmFsdWUsIGRpZG4ndCByZWdpc3RlciBhIGNsYXNzKS4gV2UgYXR0cmlidXRlIGl0IHRvIHRoZSB1c2VyLlxuICogLSBDb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMgKGBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yYCwgZXRjLikgbGlrZXdpc2VcbiAqICAgZGVzY3JpYmUgYSB1c2VyIG1pc3Rha2UuXG4gKiAtIGBXb3JrZmxvd1J1bnRpbWVFcnJvcmAgKGFuZCBzdWJjbGFzc2VzIGxpa2UgYFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3JgKVxuICogICBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgU0RLIGludmFyaWFudCBicm9rZSDigJQgc3VyZmFjZSB0aGF0IGFzIGBzZGtgLlxuICpcbiAqIEBwYXJhbSBlcnIgVGhlIGVycm9yIHZhbHVlIHRocm93biBieSB0aGUgd29ya2Zsb3cgLyBzdGVwLlxuICogQHBhcmFtIGVycm9yQ29kZSBPcHRpb25hbCBwcmVjb21wdXRlZCBlcnJvciBjb2RlLiBDYWxsZXJzIHRoYXQgYWxyZWFkeVxuICogICBrbm93IHRoZSBjb2RlIChlLmcuIGBSRVBMQVlfVElNRU9VVGAgb3IgYE1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEYCwgd2hpY2hcbiAqICAgYGNsYXNzaWZ5UnVuRXJyb3JgIGNhbid0IGRlcml2ZSBmcm9tIHRoZSBlcnJvciBhbG9uZSkgc2hvdWxkIHBhc3MgaXQgc29cbiAqICAgdGhlIGF0dHJpYnV0aW9uIGFuZCBoaW50IHJlZmxlY3QgdGhlIGFjdHVhbCBmYWlsdXJlIGNhdGVnb3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihcbiAgZXJyOiB1bmtub3duLFxuICBlcnJvckNvZGU/OiBSdW5FcnJvckNvZGVcbik6IEVycm9yRGVzY3JpcHRpb24ge1xuICBjb25zdCBlZmZlY3RpdmVDb2RlID0gZXJyb3JDb2RlID8/IGNsYXNzaWZ5UnVuRXJyb3IoZXJyKTtcblxuICBpZiAoU2VyaWFsaXphdGlvbkVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IFNFUklBTElaQVRJT05fRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IENPTlRFWFRfRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IuaXMoZXJyKSkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBDT1JSVVBURURfRVZFTlRfTE9HX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChlcnIgaW5zdGFuY2VvZiBXb3JrZmxvd1J1bnRpbWVFcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChlZmZlY3RpdmVDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuUkVQTEFZX1RJTUVPVVQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlOiBlZmZlY3RpdmVDb2RlLFxuICAgICAgaGludDogUkVQTEFZX1RJTUVPVVRfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5NQVhfREVMSVZFUklFU19FWENFRURFRCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBNQVhfREVMSVZFUklFU19ISU5ULFxuICAgIH07XG4gIH1cblxuICBpZiAoZWZmZWN0aXZlQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLk1BWF9FVkVOVFNfRVhDRUVERUQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IE1BWF9FVkVOVFNfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5DT1JSVVBURURfRVZFTlRfTE9HKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IENPUlJVUFRFRF9FVkVOVF9MT0dfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5XT1JMRF9DT05UUkFDVF9FUlJPUikge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBXT1JMRF9DT05UUkFDVF9ISU5ULFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUgfTtcbn1cbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpYmUtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVzY3JpYmUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLCtCQUErQixFQUMvQixpQ0FBaUMsR0FDbEMsTUFBTSxxQkFBcUIsQ0FBQztBQTRDN0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNsQywyQkFBMkI7SUFDM0IsdUJBQXVCO0lBQ3ZCLGlDQUFpQztJQUNqQyxtQ0FBbUM7Q0FDcEMsQ0FBQyxDQUFDO0FBRUgsU0FBUyx1QkFBdUIsQ0FBQyxHQUFZO0lBQzNDLE9BQU8sQ0FDTCxHQUFHLFlBQVkseUJBQXlCO1FBQ3hDLEdBQUcsWUFBWSxxQkFBcUI7UUFDcEMsR0FBRyxZQUFZLCtCQUErQjtRQUM5QyxHQUFHLFlBQVksaUNBQWlDLENBQ2pELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSx3QkFBd0IsR0FDNUIsMkpBQTJKLENBQUM7QUFDOUosTUFBTSxrQkFBa0IsR0FDdEIsd0lBQXdJLENBQUM7QUFDM0ksTUFBTSxrQkFBa0IsR0FDdEIsNklBQTZJLENBQUM7QUFDaEosTUFBTSx3QkFBd0IsR0FDNUIsZ0tBQWdLLENBQUM7QUFDbkssTUFBTSxtQkFBbUIsR0FDdkIsZ1pBQWdaLENBQUM7QUFDblosTUFBTSxtQkFBbUIsR0FDdkIseUtBQXlLLENBQUM7QUFDNUssTUFBTSxlQUFlLEdBQ25CLGdRQUFnUSxDQUFDO0FBQ25RLE1BQU0sbUJBQW1CLEdBQ3ZCLDRJQUE0SSxDQUFDO0FBQy9JLE1BQU0sd0JBQXdCLEdBQzVCLCtRQUEr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YSxFQUFFLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IsXG4gIFJVTl9FUlJPUl9DT0RFUyxcbiAgdHlwZSBSdW5FcnJvckNvZGUsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgY2xhc3NpZnlSdW5FcnJvciB9IGZyb20gJy4vY2xhc3NpZnktZXJyb3IuanMnO1xuaW1wb3J0IHtcbiAgTm90SW5TdGVwQ29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yLFxuICBVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3IsXG59IGZyb20gJy4vY29udGV4dC1lcnJvcnMuanMnO1xuXG4vKipcbiAqIEF0dHJpYnV0aW9uIG9mIGEgd29ya2Zsb3cvc3RlcCBmYWlsdXJlIGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogLSBgdXNlcmA6IHRoZSBlcnJvciBjYW1lIGZyb20gY3VzdG9tZXIgY29kZSAoYSBzdGVwIG9yIHdvcmtmbG93IGZ1bmN0aW9uXG4gKiAgIHRocmV3LCBvciBhIHZhbHVlIHRoZXkgcGFzc2VkIGFjcm9zcyBhIGJvdW5kYXJ5IHdhc24ndCBzZXJpYWxpemFibGUpLlxuICogLSBgc2RrYDogdGhlIFNESyBwcm9kdWNlZCB0aGUgZXJyb3IgaXRzZWxmIOKAlCBhbiBpbnRlcm5hbCBpbnZhcmlhbnQgYnJva2UsXG4gKiAgIG9yIGEgcnVudGltZSBndWFyZCByZWplY3RlZCB0aGUgY2FsbC4gVGhlc2Ugc2hvdWxkIGJlIHJhcmU7IHdoZW4gdGhleVxuICogICBoYXBwZW4gd2Ugd2FudCB0byBmcmFtZSB0aGUgdGVybWluYWwgb3V0cHV0IGFzIFwidGhpcyBpcyB1cywgbm90IHlvdS5cIlxuICovXG5leHBvcnQgdHlwZSBFcnJvckF0dHJpYnV0aW9uID0gJ3VzZXInIHwgJ3Nkayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JEZXNjcmlwdGlvbiB7XG4gIGF0dHJpYnV0aW9uOiBFcnJvckF0dHJpYnV0aW9uO1xuICBlcnJvckNvZGU6IFJ1bkVycm9yQ29kZTtcbiAgLyoqXG4gICAqIFNob3J0LCBjbGFzcy1hd2FyZSBoaW50IHRvIGhlbHAgYSB1c2VyIHVuZGVyc3RhbmQgd2hhdCB0aGUgZXJyb3IgbWVhbnMuXG4gICAqIE9ubHkgc2V0IGZvciB3ZWxsLWtub3duIFNESyBlcnJvciBjbGFzc2VzIChTZXJpYWxpemF0aW9uRXJyb3IsXG4gICAqIFdvcmtmbG93UnVudGltZUVycm9yLCBjb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMpOyBgdW5kZWZpbmVkYCBmb3IgcGxhaW5cbiAgICogdXNlciBlcnJvcnMsIHdoZXJlIHRoZSBzdGFjayBpcyBhbHJlYWR5IHRoZSBtb3N0IHVzZWZ1bCB0aGluZyB0byBzaG93LlxuICAgKi9cbiAgaGludD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFcnJvciBzaWduYWwgZmllbGRzIGNhcnJpZWQgb24gcGVyc2lzdGVkIGZhaWx1cmUgZXZlbnRzIChlLmcuXG4gKiBgcnVuX2ZhaWxlZGAgLyBgc3RlcF9mYWlsZWRgKS4gVGhlIHNoYXBlIGlzIGludGVudGlvbmFsbHkgbG9vc2U6XG4gKlxuICogLSBgZXJyb3JDb2RlYCBpcyB0eXBlZCBhcyBgc3RyaW5nYCByYXRoZXIgdGhhbiBgUnVuRXJyb3JDb2RlYCBiZWNhdXNlXG4gKiAgIHRoZSB2YWx1ZSBjb21lcyBmcm9tIHN0b3JlZCBKU09OL0NCT1IgYW5kIG1heSBwcmVkYXRlIHRoZSBjdXJyZW50XG4gKiAgIGVudW0g4oCUIGNhbGxlcnMgc2hvdWxkIG5vdCBuYXJyb3cgb24gaXQgYmxpbmRseS4gVmFsdWVzIHRoYXQgZG9uJ3RcbiAqICAgbWF0Y2ggYSBrbm93biBgUlVOX0VSUk9SX0NPREVTYCBlbnRyeSBmYWxsIHRocm91Z2ggdG8gVVNFUl9FUlJPUi5cbiAqIC0gYGVycm9yTmFtZWAgaXMgdGhlIHRocm93biBgRXJyb3IjbmFtZWAuIEl0IGlzIG5vdCB1bml2ZXJzYWxseVxuICogICBwZXJzaXN0ZWQgdG9kYXk7IGNhbGxlcnMgdGhhdCBoYXZlIGFjY2VzcyB0byBpdCAoZWl0aGVyIHZpYSBhblxuICogICBpbi1tZW1vcnkgdGhyb3cgb3IgYSByaWNoZXIgcGF5bG9hZCkgY2FuIHBhc3MgaXQgaW4gdG8gc2hhcnBlblxuICogICB0aGUgYXR0cmlidXRpb24gYW5kIGhpbnQuIFdoZW4gYWJzZW50LCBgZGVzY3JpYmVSdW5FcnJvcmAgc3RpbGxcbiAqICAgcmV0dXJucyBhIHNlbnNpYmxlIGF0dHJpYnV0aW9uIGZyb20gYGVycm9yQ29kZWAgYWxvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkRXJyb3JTaWduYWwge1xuICBlcnJvckNvZGU/OiBzdHJpbmc7XG4gIGVycm9yTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgQ09OVEVYVF9FUlJPUl9OQU1FUyA9IG5ldyBTZXQoW1xuICAnTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcicsXG4gICdOb3RJblN0ZXBDb250ZXh0RXJyb3InLFxuICAnTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcicsXG4gICdVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3InLFxuXSk7XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGVyciBpbnN0YW5jZW9mIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJblN0ZXBDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIHx8XG4gICAgZXJyIGluc3RhbmNlb2YgVW5hdmFpbGFibGVJbldvcmtmbG93Q29udGV4dEVycm9yXG4gICk7XG59XG5cbmNvbnN0IFNFUklBTElaQVRJT05fRVJST1JfSElOVCA9XG4gICdBIHZhbHVlIHBhc3NlZCBhY3Jvc3MgYSB3b3JrZmxvdy9zdGVwIGJvdW5kYXJ5IGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLiBTZWUgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBvZmZlbmRpbmcgcGF0aCBhbmQgdGhlIExlYXJuIE1vcmUgbGluayBmb3IgZGV0YWlscy4nO1xuY29uc3QgQ09OVEVYVF9FUlJPUl9ISU5UID1cbiAgJ0Egd29ya2Zsb3ctb25seSBvciBzdGVwLW9ubHkgQVBJIHdhcyBjYWxsZWQgZnJvbSB0aGUgd3JvbmcgY29udGV4dC4gVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4YWN0IEFQSSBhbmQgaG93IHRvIG1vdmUgdGhlIGNhbGwuJztcbmNvbnN0IFJVTlRJTUVfRVJST1JfSElOVCA9XG4gICdUaGlzIGlzIGFuIGludGVybmFsIHdvcmtmbG93IFNESyBlcnJvciwgbm90IGEgYnVnIGluIHlvdXIgY29kZS4gSWYgaXQga2VlcHMgaGFwcGVuaW5nLCBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHN0YWNrIHRyYWNlIGFuZCB0aGUgcnVuSWQuJztcbmNvbnN0IENPUlJVUFRFRF9FVkVOVF9MT0dfSElOVCA9XG4gICdUaGUgd29ya2Zsb3cgZXZlbnQgbG9nIGNvbnRhaW5zIG9ycGhhbmVkIG9yIG1pc21hdGNoZWQgZXZlbnRzIGFuZCBjYW5ub3QgYmUgcmVwbGF5ZWQuIFRoaXMgaXMgYW4gaW50ZXJuYWwgd29ya2Zsb3cgU0RLIGVycm9yOyBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHJ1bklkLic7XG5jb25zdCBSRVBMQVlfVElNRU9VVF9ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyByZXBsYXkgYmV0d2VlbiBzdGVwIGJvdW5kYXJpZXMgdG9vayB0b28gbG9uZy4gVGhpcyBib3VuZHMgd29ya2Zsb3ctVk0gYW5kIGV2ZW50LWxvZyByZXBsYXkgdGltZSBvbmx5IOKAlCBzdGVwIGJvZGllcyAoYFwidXNlIHN0ZXBcImAgZnVuY3Rpb25zKSBhcmUgZXhjbHVkZWQuIFRoaXMgdXN1YWxseSBtZWFucyB0aGUgZXZlbnQgbG9nIGlzIHVudXN1YWxseSBsYXJnZSBvciB0aGUgd29ya2Zsb3cgZnVuY3Rpb24gaXMgZG9pbmcgaGVhdnkgc3luY2hyb25vdXMgd29yayBpbiB3b3JrZmxvdyBjb2RlIG91dHNpZGUgb2Ygc3RlcCBib2RpZXMuIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ1ZGdldCB2aWEgdGhlIFdPUktGTE9XX1JFUExBWV9USU1FT1VUX01TIGVudiB2YXIgaWYgbmVlZGVkLic7XG5jb25zdCBNQVhfREVMSVZFUklFU19ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyBxdWV1ZSBleGNlZWRlZCBpdHMgbWF4LWRlbGl2ZXJ5IGJ1ZGdldC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIHBlcnNpc3RlbnQgcnVudGltZSBmYWlsdXJlIOKAlCBjaGVjayB0aGUgbW9zdCByZWNlbnQgc3RhY2sgdHJhY2VzIGZvciB0aGUgdW5kZXJseWluZyBjYXVzZS4nO1xuY29uc3QgTUFYX0VWRU5UU19ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyBleGNlZWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHBlciBydW4uIFRoaXMgdXN1YWxseSBtZWFucyB1bmJvdW5kZWQgd29yayBpbiB0aGUgd29ya2Zsb3cgZnVuY3Rpb24g4oCUIGUuZy4gYSBsb29wIHRoYXQga2VlcHMgY3JlYXRpbmcgc3RlcHMgd2l0aG91dCB0ZXJtaW5hdGluZy4gQnJlYWsgbG9uZy1ydW5uaW5nIHdvcmtmbG93cyBpbnRvIGNoaWxkIHdvcmtmbG93cyB0byBzdGF5IHVuZGVyIHRoZSBsaW1pdC4nO1xuY29uc3QgV09STERfQ09OVFJBQ1RfSElOVCA9XG4gICdUaGUgd29ya2Zsb3cgYmFja2VuZCByZXR1cm5lZCBkYXRhIHRoYXQgdmlvbGF0ZWQgdGhlIFNESyBjb250cmFjdC4gVGhpcyBpcyBub3QgcmV0cnlhYmxlOyBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHN0YWNrIHRyYWNlIGFuZCBydW5JZC4nO1xuY29uc3QgREVQTE9ZTUVOVF9NSVNNQVRDSF9ISU5UID1cbiAgXCJUaGUgcnVuIHdhcyBkZWxpdmVyZWQgdG8gYSBkZXBsb3ltZW50IG90aGVyIHRoYW4gdGhlIGRlcGxveW1lbnQgaXQgaXMgcGlubmVkIHRvLCBhbmQgd2FzIHN0b3BwZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvZGUtc2tldyBlcnJvcnMgYWZ0ZXIgdGhlIHJ1bnRpbWUgZmFpbGVkIHRvIHJlLXJvdXRlIGl0IHRoZXJlLiBWZXJpZnkgdGhhdCB0aGUgcnVuJ3MgZGVwbG95bWVudCBpcyBzdGlsbCBhdmFpbGFibGUgYW5kIHRoYXQgcXVldWUgY2FsbGJhY2tzIHJvdXRlIHRvIGl0LlwiO1xuXG5mdW5jdGlvbiBub3JtYWxpemVFcnJvckNvZGUoY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUnVuRXJyb3JDb2RlIHtcbiAgLy8gVmFsdWVzIHJlYWQgYmFjayBmcm9tIHBlcnNpc3RlZCBldmVudHMgYXJlIGBzdHJpbmcgfCB1bmRlZmluZWRgIOKAlCB3ZVxuICAvLyBvbmx5IHRydXN0IGNvZGVzIHRoYXQgbWF0Y2ggYSBrbm93biBlbnRyeSBpbiBgUlVOX0VSUk9SX0NPREVTYC5cbiAgY29uc3Qga25vd24gPSBPYmplY3QudmFsdWVzKFJVTl9FUlJPUl9DT0RFUykgYXMgcmVhZG9ubHkgc3RyaW5nW107XG4gIGlmIChjb2RlICYmIGtub3duLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgcmV0dXJuIGNvZGUgYXMgUnVuRXJyb3JDb2RlO1xuICB9XG4gIHJldHVybiBSVU5fRVJST1JfQ09ERVMuVVNFUl9FUlJPUjtcbn1cblxuLyoqXG4gKiBEYXRhLWRyaXZlbiB2YXJpYW50IG9mIHtAbGluayBkZXNjcmliZUVycm9yfSB0aGF0IHdvcmtzIGZyb20gcGVyc2lzdGVkXG4gKiBldmVudCBmaWVsZHMgaW5zdGVhZCBvZiBhIGxpdmUgYEVycm9yYCBpbnN0YW5jZS4gSW50ZW5kZWQgZm9yIENMSS93ZWJcbiAqIHJlbmRlcmVycyB0aGF0IHJlYWQgZmFpbHVyZSBldmVudHMgYW5kIG5vIGxvbmdlciBoYXZlIHRoZSBvcmlnaW5hbFxuICogdGhyb3duIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlUnVuRXJyb3IoXG4gIHNpZ25hbDogUGVyc2lzdGVkRXJyb3JTaWduYWxcbik6IEVycm9yRGVzY3JpcHRpb24ge1xuICBjb25zdCBuYW1lID0gc2lnbmFsLmVycm9yTmFtZTtcbiAgY29uc3QgZXJyb3JDb2RlID1cbiAgICBuYW1lID09PSAnQ29ycnVwdGVkRXZlbnRMb2dFcnJvcidcbiAgICAgID8gUlVOX0VSUk9SX0NPREVTLkNPUlJVUFRFRF9FVkVOVF9MT0dcbiAgICAgIDogbm9ybWFsaXplRXJyb3JDb2RlKHNpZ25hbC5lcnJvckNvZGUpO1xuXG4gIGlmIChuYW1lID09PSAnU2VyaWFsaXphdGlvbkVycm9yJykge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAndXNlcicsIGVycm9yQ29kZSwgaGludDogU0VSSUFMSVpBVElPTl9FUlJPUl9ISU5UIH07XG4gIH1cbiAgaWYgKG5hbWUgJiYgQ09OVEVYVF9FUlJPUl9OQU1FUy5oYXMobmFtZSkpIHtcbiAgICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGUsIGhpbnQ6IENPTlRFWFRfRVJST1JfSElOVCB9O1xuICB9XG4gIGlmIChuYW1lID09PSAnQ29ycnVwdGVkRXZlbnRMb2dFcnJvcicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlLFxuICAgICAgaGludDogQ09SUlVQVEVEX0VWRU5UX0xPR19ISU5ULFxuICAgIH07XG4gIH1cbiAgaWYgKGVycm9yQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLlJFUExBWV9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICdzZGsnLCBlcnJvckNvZGUsIGhpbnQ6IFJFUExBWV9USU1FT1VUX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuTUFYX0RFTElWRVJJRVNfRVhDRUVERUQpIHtcbiAgICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3NkaycsIGVycm9yQ29kZSwgaGludDogTUFYX0RFTElWRVJJRVNfSElOVCB9O1xuICB9XG4gIGlmIChlcnJvckNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5NQVhfRVZFTlRTX0VYQ0VFREVEKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICd1c2VyJywgZXJyb3JDb2RlLCBoaW50OiBNQVhfRVZFTlRTX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuQ09SUlVQVEVEX0VWRU5UX0xPRykge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGUsXG4gICAgICBoaW50OiBDT1JSVVBURURfRVZFTlRfTE9HX0hJTlQsXG4gICAgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuV09STERfQ09OVFJBQ1RfRVJST1IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlLFxuICAgICAgaGludDogV09STERfQ09OVFJBQ1RfSElOVCxcbiAgICB9O1xuICB9XG4gIGlmIChlcnJvckNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5ERVBMT1lNRU5UX01JU01BVENIKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICdzZGsnLCBlcnJvckNvZGUsIGhpbnQ6IERFUExPWU1FTlRfTUlTTUFUQ0hfSElOVCB9O1xuICB9XG4gIGlmIChuYW1lID09PSAnV29ya2Zsb3dSdW50aW1lRXJyb3InIHx8IG5hbWUgPT09ICdTdGVwTm90UmVnaXN0ZXJlZEVycm9yJykge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuUlVOVElNRV9FUlJPUikge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQgfTtcbiAgfVxuICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGUgfTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhbiBlcnJvciBmb3IgdXNlci1mYWNpbmcgcHJlc2VudGF0aW9uLiBQdXJlbHkgaW5mb3JtYXRpb25hbCDigJRcbiAqIGRvZXMgbm90IGNoYW5nZSBhbnkgcGVyc2lzdGVkIGV2ZW50IGRhdGEgb3IgZXJyb3IgY2xhc3NpZmljYXRpb24gdXNlZCBieVxuICogdGhlIHJ1bnRpbWUuXG4gKlxuICogVGhlIGF0dHJpYnV0aW9uIGhlcmUgaXMgbW9yZSBudWFuY2VkIHRoYW4gYGNsYXNzaWZ5UnVuRXJyb3JgOlxuICpcbiAqIC0gYFNlcmlhbGl6YXRpb25FcnJvcmAgaXMgdGVjaG5pY2FsbHkgcmFpc2VkIGJ5IHRoZSBTREssIGJ1dCBpdCBhbG1vc3RcbiAqICAgYWx3YXlzIHBvaW50cyBhdCBzb21ldGhpbmcgdGhlIGNhbGxlciBkaWQgKHBhc3NlZCBhIG5vbi1zZXJpYWxpemFibGVcbiAqICAgdmFsdWUsIGRpZG4ndCByZWdpc3RlciBhIGNsYXNzKS4gV2UgYXR0cmlidXRlIGl0IHRvIHRoZSB1c2VyLlxuICogLSBDb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMgKGBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yYCwgZXRjLikgbGlrZXdpc2VcbiAqICAgZGVzY3JpYmUgYSB1c2VyIG1pc3Rha2UuXG4gKiAtIGBXb3JrZmxvd1J1bnRpbWVFcnJvcmAgKGFuZCBzdWJjbGFzc2VzIGxpa2UgYFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3JgKVxuICogICBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgU0RLIGludmFyaWFudCBicm9rZSDigJQgc3VyZmFjZSB0aGF0IGFzIGBzZGtgLlxuICpcbiAqIEBwYXJhbSBlcnIgVGhlIGVycm9yIHZhbHVlIHRocm93biBieSB0aGUgd29ya2Zsb3cgLyBzdGVwLlxuICogQHBhcmFtIGVycm9yQ29kZSBPcHRpb25hbCBwcmVjb21wdXRlZCBlcnJvciBjb2RlLiBDYWxsZXJzIHRoYXQgYWxyZWFkeVxuICogICBrbm93IHRoZSBjb2RlIChlLmcuIGBSRVBMQVlfVElNRU9VVGAgb3IgYE1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEYCwgd2hpY2hcbiAqICAgYGNsYXNzaWZ5UnVuRXJyb3JgIGNhbid0IGRlcml2ZSBmcm9tIHRoZSBlcnJvciBhbG9uZSkgc2hvdWxkIHBhc3MgaXQgc29cbiAqICAgdGhlIGF0dHJpYnV0aW9uIGFuZCBoaW50IHJlZmxlY3QgdGhlIGFjdHVhbCBmYWlsdXJlIGNhdGVnb3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihcbiAgZXJyOiB1bmtub3duLFxuICBlcnJvckNvZGU/OiBSdW5FcnJvckNvZGVcbik6IEVycm9yRGVzY3JpcHRpb24ge1xuICBjb25zdCBlZmZlY3RpdmVDb2RlID0gZXJyb3JDb2RlID8/IGNsYXNzaWZ5UnVuRXJyb3IoZXJyKTtcblxuICBpZiAoU2VyaWFsaXphdGlvbkVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IFNFUklBTElaQVRJT05fRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IENPTlRFWFRfRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IuaXMoZXJyKSkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBDT1JSVVBURURfRVZFTlRfTE9HX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIC8vIENoZWNrIERFUExPWU1FTlRfTUlTTUFUQ0ggYmVmb3JlIHRoZSBnZW5lcmljIFdvcmtmbG93UnVudGltZUVycm9yIGJyYW5jaCDigJRcbiAgLy8gV29ya2Zsb3dEZXBsb3ltZW50TWlzbWF0Y2hFcnJvciBzdWJjbGFzc2VzIGl0LCBidXQgaGFzIGl0cyBvd24gY29kZSArIGhpbnQuXG4gIGlmIChlZmZlY3RpdmVDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuREVQTE9ZTUVOVF9NSVNNQVRDSCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBERVBMT1lNRU5UX01JU01BVENIX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChlcnIgaW5zdGFuY2VvZiBXb3JrZmxvd1J1bnRpbWVFcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChlZmZlY3RpdmVDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuUkVQTEFZX1RJTUVPVVQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlOiBlZmZlY3RpdmVDb2RlLFxuICAgICAgaGludDogUkVQTEFZX1RJTUVPVVRfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5NQVhfREVMSVZFUklFU19FWENFRURFRCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBNQVhfREVMSVZFUklFU19ISU5ULFxuICAgIH07XG4gIH1cblxuICBpZiAoZWZmZWN0aXZlQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLk1BWF9FVkVOVFNfRVhDRUVERUQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IE1BWF9FVkVOVFNfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5DT1JSVVBURURfRVZFTlRfTE9HKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IENPUlJVUFRFRF9FVkVOVF9MT0dfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5XT1JMRF9DT05UUkFDVF9FUlJPUikge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBXT1JMRF9DT05UUkFDVF9ISU5ULFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUgfTtcbn1cbiJdfQ==
@@ -55,6 +55,7 @@ export declare class EventsConsumer {
55
55
  private pendingUnconsumedTimeout;
56
56
  private unconsumedCheckVersion;
57
57
  constructor(events: Event[], options: EventsConsumerOptions);
58
+ append(events: Event[]): void;
58
59
  /**
59
60
  * Registers a callback function to be called after an event has been consumed
60
61
  * by a different callback. The callback can return:
@@ -1 +1 @@
1
- {"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,iBAAiB,CAAC;AAGxD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAmB3C,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAM;IAC9B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAM;IACjD,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAK;gBAEvB,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAQ3D;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,qBAAqB;IAgBnC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,OAAO,CA0Bb;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,gBAAgB;CAqCzB"}
1
+ {"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,iBAAiB,CAAC;AAGxD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAmB3C,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAM;IACjD,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAK;gBAEvB,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAW3D,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAK7B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,qBAAqB;IAgBnC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,OAAO,CA0Bb;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,gBAAgB;CAqCzB"}