footprintjs 9.32.0 → 9.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/AGENTS.md +670 -194
  2. package/dist/esm/lib/capture/freeze.d.ts +47 -0
  3. package/dist/esm/lib/capture/freeze.js +60 -0
  4. package/dist/esm/lib/capture/index.d.ts +1 -0
  5. package/dist/esm/lib/capture/index.js +2 -1
  6. package/dist/esm/lib/detach/drivers/immediate.d.ts +25 -24
  7. package/dist/esm/lib/detach/drivers/immediate.js +26 -25
  8. package/dist/esm/lib/detach/drivers/microtaskBatch.d.ts +5 -4
  9. package/dist/esm/lib/detach/drivers/microtaskBatch.js +6 -5
  10. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +27 -7
  11. package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +4 -1
  12. package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +15 -2
  13. package/dist/esm/lib/memory/EventLog.d.ts +28 -3
  14. package/dist/esm/lib/memory/EventLog.js +31 -4
  15. package/dist/esm/lib/memory/StageContext.d.ts +20 -0
  16. package/dist/esm/lib/memory/StageContext.js +36 -10
  17. package/dist/esm/lib/memory/TransactionBuffer.d.ts +2 -2
  18. package/dist/esm/lib/memory/TransactionBuffer.js +6 -4
  19. package/dist/esm/lib/memory/backtrack.d.ts +24 -0
  20. package/dist/esm/lib/memory/backtrack.js +52 -41
  21. package/dist/esm/lib/memory/commitLogUtils.d.ts +129 -38
  22. package/dist/esm/lib/memory/commitLogUtils.js +252 -59
  23. package/dist/esm/lib/memory/deltaEncoding.d.ts +1 -1
  24. package/dist/esm/lib/memory/deltaEncoding.js +2 -2
  25. package/dist/esm/lib/memory/honesty.d.ts +5 -1
  26. package/dist/esm/lib/memory/honesty.js +11 -6
  27. package/dist/esm/lib/memory/index.d.ts +2 -2
  28. package/dist/esm/lib/memory/index.js +3 -3
  29. package/dist/esm/lib/memory/keyPaths.d.ts +125 -0
  30. package/dist/esm/lib/memory/keyPaths.js +227 -0
  31. package/dist/esm/lib/memory/logModel.d.ts +76 -0
  32. package/dist/esm/lib/memory/logModel.js +357 -0
  33. package/dist/esm/lib/memory/placeholders.d.ts +3 -3
  34. package/dist/esm/lib/memory/placeholders.js +4 -4
  35. package/dist/esm/lib/memory/redaction.d.ts +34 -1
  36. package/dist/esm/lib/memory/redaction.js +55 -4
  37. package/dist/esm/lib/memory/utils.d.ts +2 -6
  38. package/dist/esm/lib/memory/utils.js +4 -21
  39. package/dist/esm/lib/memory/verbs.d.ts +65 -22
  40. package/dist/esm/lib/memory/verbs.js +64 -23
  41. package/dist/esm/lib/runner/ExecutionRuntime.js +5 -3
  42. package/dist/esm/lib/runner/FlowChartExecutor.js +5 -5
  43. package/dist/esm/lib/scope/protection/readonlyInput.d.ts +2 -6
  44. package/dist/esm/lib/scope/protection/readonlyInput.js +4 -18
  45. package/dist/esm/lib/slice/elementProvenance.d.ts +4 -1
  46. package/dist/esm/lib/slice/elementProvenance.js +33 -15
  47. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +4 -0
  48. package/dist/esm/lib/slice/forwardSliceForKey.js +32 -9
  49. package/dist/esm/lib/slice/keyIndex.d.ts +50 -8
  50. package/dist/esm/lib/slice/keyIndex.js +97 -16
  51. package/dist/esm/lib/slice/keyTimeline.js +11 -6
  52. package/dist/esm/lib/slice/serialize.js +8 -2
  53. package/dist/esm/lib/slice/sliceForKey.js +22 -6
  54. package/dist/esm/lib/slice/types.d.ts +53 -7
  55. package/dist/esm/lib/slice/types.js +1 -1
  56. package/dist/esm/lib/time-travel/commitStops.js +46 -8
  57. package/dist/esm/lib/time-travel/stateAt.js +4 -14
  58. package/dist/esm/lib/time-travel/timeTravel.js +2 -2
  59. package/dist/esm/lib/time-travel/types.d.ts +4 -3
  60. package/dist/esm/lib/time-travel/types.js +1 -1
  61. package/dist/esm/trace.d.ts +2 -1
  62. package/dist/esm/trace.js +2 -6
  63. package/dist/lib/capture/freeze.js +64 -0
  64. package/dist/lib/capture/index.js +4 -2
  65. package/dist/lib/detach/drivers/immediate.js +26 -25
  66. package/dist/lib/detach/drivers/microtaskBatch.js +6 -5
  67. package/dist/lib/engine/handlers/SubflowExecutor.js +27 -7
  68. package/dist/lib/engine/handlers/SubflowInputMapper.js +15 -2
  69. package/dist/lib/memory/EventLog.js +31 -4
  70. package/dist/lib/memory/StageContext.js +35 -9
  71. package/dist/lib/memory/TransactionBuffer.js +6 -4
  72. package/dist/lib/memory/backtrack.js +52 -41
  73. package/dist/lib/memory/commitLogUtils.js +257 -61
  74. package/dist/lib/memory/deltaEncoding.js +2 -2
  75. package/dist/lib/memory/honesty.js +11 -6
  76. package/dist/lib/memory/index.js +3 -3
  77. package/dist/lib/memory/keyPaths.js +243 -0
  78. package/dist/lib/memory/logModel.js +365 -0
  79. package/dist/lib/memory/placeholders.js +4 -4
  80. package/dist/lib/memory/redaction.js +56 -3
  81. package/dist/lib/memory/utils.js +8 -26
  82. package/dist/lib/memory/verbs.js +64 -23
  83. package/dist/lib/runner/ExecutionRuntime.js +6 -4
  84. package/dist/lib/runner/FlowChartExecutor.js +6 -6
  85. package/dist/lib/scope/protection/readonlyInput.js +6 -21
  86. package/dist/lib/slice/elementProvenance.js +32 -14
  87. package/dist/lib/slice/forwardSliceForKey.js +31 -8
  88. package/dist/lib/slice/keyIndex.js +103 -17
  89. package/dist/lib/slice/keyTimeline.js +10 -5
  90. package/dist/lib/slice/serialize.js +8 -2
  91. package/dist/lib/slice/sliceForKey.js +21 -5
  92. package/dist/lib/slice/types.js +1 -1
  93. package/dist/lib/time-travel/commitStops.js +46 -8
  94. package/dist/lib/time-travel/stateAt.js +4 -14
  95. package/dist/lib/time-travel/timeTravel.js +2 -2
  96. package/dist/lib/time-travel/types.js +1 -1
  97. package/dist/trace.js +5 -7
  98. package/dist/types/lib/capture/freeze.d.ts +47 -0
  99. package/dist/types/lib/capture/index.d.ts +1 -0
  100. package/dist/types/lib/detach/drivers/immediate.d.ts +25 -24
  101. package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +5 -4
  102. package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +4 -1
  103. package/dist/types/lib/memory/EventLog.d.ts +28 -3
  104. package/dist/types/lib/memory/StageContext.d.ts +20 -0
  105. package/dist/types/lib/memory/TransactionBuffer.d.ts +2 -2
  106. package/dist/types/lib/memory/backtrack.d.ts +24 -0
  107. package/dist/types/lib/memory/commitLogUtils.d.ts +129 -38
  108. package/dist/types/lib/memory/deltaEncoding.d.ts +1 -1
  109. package/dist/types/lib/memory/honesty.d.ts +5 -1
  110. package/dist/types/lib/memory/index.d.ts +2 -2
  111. package/dist/types/lib/memory/keyPaths.d.ts +125 -0
  112. package/dist/types/lib/memory/logModel.d.ts +76 -0
  113. package/dist/types/lib/memory/placeholders.d.ts +3 -3
  114. package/dist/types/lib/memory/redaction.d.ts +34 -1
  115. package/dist/types/lib/memory/utils.d.ts +2 -6
  116. package/dist/types/lib/memory/verbs.d.ts +65 -22
  117. package/dist/types/lib/scope/protection/readonlyInput.d.ts +2 -6
  118. package/dist/types/lib/slice/elementProvenance.d.ts +4 -1
  119. package/dist/types/lib/slice/forwardSliceForKey.d.ts +4 -0
  120. package/dist/types/lib/slice/keyIndex.d.ts +50 -8
  121. package/dist/types/lib/slice/types.d.ts +53 -7
  122. package/dist/types/lib/time-travel/types.d.ts +4 -3
  123. package/dist/types/trace.d.ts +2 -1
  124. package/package.json +2 -1
@@ -174,7 +174,7 @@ class Cursor {
174
174
  const start = from ?? this.stops[this.step - 1];
175
175
  // No earlier stop (we are at `'start'`) ⇒ everything up to here: nothing
176
176
  // on a run cursor, and the subflow's `inputMapper` seed on a drilled one
177
- // (the start bookend covers the id-less commits that precede stage one).
177
+ // (the start bookend covers the seed that precedes stage one — `commitStops`).
178
178
  const toLeg = to.sourceIdx ?? 0;
179
179
  const fromLeg = start ? start.sourceIdx ?? 0 : toLeg;
180
180
  const afterIdx = start ? start.lastCommitIdx : -1;
@@ -362,4 +362,4 @@ function timeTravel(snapshot, options = {}) {
362
362
  return new Cursor(sources, options);
363
363
  }
364
364
  exports.timeTravel = timeTravel;
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZVRyYXZlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdGltZS10cmF2ZWwvdGltZVRyYXZlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRzs7O0FBRUgsNkNBQW9EO0FBQ3BELHlDQUF5QztBQUN6QyxxREFBdUQ7QUFDdkQsNkNBQXdGO0FBc0J4RixNQUFNLE1BQU07SUFDRCxLQUFLLENBQXlCO0lBQzlCLElBQUksQ0FBcUI7SUFDekIsbUJBQW1CLENBQXFCO0lBQ3hDLE1BQU0sQ0FBZ0M7SUFDdEMsV0FBVyxDQUFTO0lBRVosSUFBSSxDQUF3QjtJQUM1QixPQUFPLENBQThCO0lBQ3JDLE9BQU8sQ0FBMkI7SUFDbEMsTUFBTSxDQUFTO0lBQ3hCLElBQUksQ0FBUztJQUNyQixtRkFBbUY7SUFDM0UsUUFBUSxDQUF1QjtJQUV2QyxZQUNFLE9BQW9DLEVBQ3BDLE9BQWlDLEVBQ2pDLElBQWEsRUFDYixNQUEwQixFQUMxQixtQkFBNEI7UUFFNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRWxDLDJFQUEyRTtRQUMzRSwrQ0FBK0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSyxv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cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0aW1lVHJhdmVsIOKAlCBhIHJlYWRlcidzIGN1cnNvciBvdmVyIGEgZmluaXNoZWQgdHJhY2UuXG4gKlxuICogVGhlIGZpdmUgbGF3cyB0aGlzIGZpbGUgaW1wbGVtZW50cyAoYW5kIHRoZSBmb2xkZXIgUkVBRE1FIHN0YXRlcyB3aXRoIGFuXG4gKiBleGFtcGxlIGVhY2gpOlxuICpcbiAqICAgMS4gT05FIGN1cnNvci4gVGhpcyBvYmplY3QgaG9sZHMgdGhlIG9ubHkgcG9zaXRpb24uIGBkcmlsbCgpYCByZXR1cm5zIGFcbiAqICAgICAgc2VwYXJhdGUgY3Vyc29yIG92ZXIgYSBzZXBhcmF0ZSBsb2csIG5ldmVyIGEgc2Vjb25kIHBvc2l0aW9uIGhlcmUuXG4gKiAgIDIuIEEgbWlzcyBuZXZlciBtb3Zlcy4gRXZlcnkgcmVmdXNhbCByZXR1cm5zIHRoZSByZWFzb24gYW5kIGxlYXZlcyB0aGVcbiAqICAgICAgY3Vyc29yIGV4YWN0bHkgd2hlcmUgaXQgd2FzLlxuICogICAzLiBBIGZvbGQgcmVzdWx0IGlzIGRldGFjaGVkLiBgc3RhdGVBdGAgcmV0dXJucyBmcm96ZW4sIGNsb25lZCBzdGF0ZSB0aGF0XG4gKiAgICAgIHNoYXJlcyBub3RoaW5nIHdpdGggdGhlIGVuZ2luZS5cbiAqICAgNC4gTWFya3MgbGl2ZSBiZXNpZGUgdGhlIGxvZy4gVGhleSBhcmUgdGhlIHJlYWRlcidzIG5vdGVzLCBuZXZlciB3cml0dGVuXG4gKiAgICAgIGludG8gdGhlIHJ1bidzIHJlY29yZC5cbiAqICAgNS4gU3RvcHMgYXJlIERFUklWRUQgZnJvbSB0aGUgcmVjb3JkZWQgbG9nIOKAlCByZWFkLXRpbWUgcXVlcmllcyBvdmVyXG4gKiAgICAgIGNvbGxlY3RlZCBkYXRhLCBuZXZlciBhIHJlLXdhbGsgdGhhdCBpbnZlbnRzIHdoYXQgd2FzIG5vdCByZWNvcmRlZC5cbiAqXG4gKiBBIENIQUlOICg5LjE4LjApIGRvZXMgbm90IGFkZCBhIHNpeHRoIGxhdyBhbmQgZG9lcyBub3QgYmVuZCB0aGVzZSBmaXZlOiBpdFxuICogaXMgc3RpbGwgb25lIGN1cnNvciwgb3ZlciBzb3VyY2VzIHRoYXQgYXJlIHN0aWxsIG9ubHkgcmVhZC4gV2hhdCBpdCBhZGRzIGlzXG4gKiB0aGF0IHRoZSBTVEVQUyBydW4gYWNyb3NzIGEgcGF1c2UvcmVzdW1lIOKAlCBzZWUgYGNoYWluLnRzYCBmb3IgdGhlIG9yZGVyaW5nXG4gKiBhbmQgbGluZWFnZSBjaGVja3MsIGFuZCBmb3Igd2h5IGNvbW1pdCBpbmRpY2VzIHN0YXkgcnVuLWxvY2FsLlxuICovXG5cbmltcG9ydCB7IGlzUGxhaW5pc2gsIHJlYWRUcmVlIH0gZnJvbSAnLi9idW5kbGVzLmpzJztcbmltcG9ydCB7IHJlZnVzZUNoYWluIH0gZnJvbSAnLi9jaGFpbi5qcyc7XG5pbXBvcnQgeyBjb21taXRTdG9wc1N0cmF0ZWd5IH0gZnJvbSAnLi9jb21taXRTdG9wcy5qcyc7XG5pbXBvcnQgeyB0eXBlIEZvbGRNZW1vLCB0eXBlIFJlYWRTb3VyY2UsIGZvbGRMZWdzRnJvbSwgcmVhZFNvdXJjZSB9IGZyb20gJy4vc3RhdGVBdC5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZvbGRlZFN0YXRlLFxuICBNYXJrLFxuICBNb3ZlLFxuICBTdG9wLFxuICBUaW1lVHJhdmVsLFxuICBUaW1lVHJhdmVsT3B0aW9ucyxcbiAgVGltZVRyYXZlbFNvdXJjZSxcbiAgVGltZVRyYXZlbFN0cmF0ZWd5LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIEEgc3ViZmxvdyByZXN1bHQgYXMgdGhpcyBtb2R1bGUgbmVlZHMgdG8gcmVhZCBpdCDigJQgZHVjay10eXBlZCBvbiBwdXJwb3NlLiAqL1xuaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHRTaGFwZSB7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgdHJlZUNvbnRleHQ/OiB7XG4gICAgaGlzdG9yeT86IHVua25vd25bXTtcbiAgICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG59XG5cbmNsYXNzIEN1cnNvcjxUTWV0YT4gaW1wbGVtZW50cyBUaW1lVHJhdmVsPFRNZXRhPiB7XG4gIHJlYWRvbmx5IHN0b3BzOiByZWFkb25seSBTdG9wPFRNZXRhPltdO1xuICByZWFkb25seSBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG1vdW50UnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcGFyZW50OiBUaW1lVHJhdmVsPFRNZXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgc291cmNlQ291bnQ6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxlZ3M6IHJlYWRvbmx5IFJlYWRTb3VyY2VbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VzOiByZWFkb25seSBUaW1lVHJhdmVsU291cmNlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogVGltZVRyYXZlbE9wdGlvbnM8VE1ldGE+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXJrczogTWFya1tdO1xuICBwcml2YXRlIHN0ZXA6IG51bWJlcjtcbiAgLyoqIFRoZSBsYXN0IGZvbGQncyB3b3JraW5nIGNvcHksIHNvIGEgc3RlcCBmb3J3YXJkIGFwcGxpZXMgb25lIGJ1bmRsZSAoOS4yNS4wKS4gKi9cbiAgcHJpdmF0ZSBmb2xkTWVtbzogRm9sZE1lbW8gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc291cmNlczogcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdLFxuICAgIG9wdGlvbnM6IFRpbWVUcmF2ZWxPcHRpb25zPFRNZXRhPixcbiAgICBwYXRoPzogc3RyaW5nLFxuICAgIHBhcmVudD86IFRpbWVUcmF2ZWw8VE1ldGE+LFxuICAgIG1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuc291cmNlcyA9IHNvdXJjZXM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMubW91bnRSdW50aW1lU3RhZ2VJZCA9IG1vdW50UnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5sZWdzID0gc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gcmVhZFNvdXJjZShzb3VyY2UpKTtcbiAgICB0aGlzLnNvdXJjZUNvdW50ID0gc291cmNlcy5sZW5ndGg7XG5cbiAgICAvLyBUaGUgc2hpcHBlZCBzdHJhdGVneSBoYXMgbm8gdm9jYWJ1bGFyeSBvZiBpdHMgb3duIChgbWV0YWAgaXMgbmV2ZXIgc2V0KSxcbiAgICAvLyBzbyBpdCBzZXJ2ZXMgYW55IGBUTWV0YWAgYSBjYWxsZXIgYXNrZWQgZm9yLlxuICAgIGNvbnN0IHN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSA/PyAoY29tbWl0U3RvcHNTdHJhdGVneSBhcyBUaW1lVHJhdmVsU3RyYXRlZ3k8VE1ldGE+KTtcbiAgICAvLyBPTkUgQ0FMTCBQRVIgU09VUkNFLCB3aXRoIHRoYXQgc291cmNlJ3Mgb3duIGxvZyBhbmQgdHJlZTogYSBzdHJhdGVneVxuICAgIC8vIG5ldmVyIGhhcyB0byBrbm93IGl0IGlzIHBhcnQgb2YgYSBjaGFpbiwgYW5kIGl0cyBpbmRpY2VzIHN0YXkgbG9jYWwgdG9cbiAgICAvLyB0aGUgbGVnIGl0IHdhcyBoYW5kZWQuXG4gICAgY29uc3QgcGVyU291cmNlID0gdGhpcy5sZWdzLm1hcCgobGVnLCBpKSA9PiBzdHJhdGVneS5zdG9wc0ZvcihsZWcubG9nLCByZWFkVHJlZShzb3VyY2VzW2ldLmV4ZWN1dGlvblRyZWUpKSk7XG4gICAgdGhpcy5zdG9wcyA9IE9iamVjdC5mcmVlemUoc291cmNlcy5sZW5ndGggPT09IDEgPyBwZXJTb3VyY2VbMF0gOiBjaGFpblN0b3BzKHBlclNvdXJjZSkpO1xuICAgIHRoaXMuX21hcmtzID0gWy4uLihvcHRpb25zLm1hcmtzID8/IFtdKV07XG4gICAgdGhpcy5zdGVwID0gMDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQb3NpdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhdCgpOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcHNbdGhpcy5zdGVwXTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZVRvKHN0ZXA6IG51bWJlcik6IE1vdmU8VE1ldGE+IHtcbiAgICBjb25zdCBmcm9tID0gdGhpcy5hdCgpO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgcmV0dXJuIHsgbW92ZWQ6IHRydWUsIGZyb20sIHRvOiB0aGlzLnN0b3BzW3N0ZXBdIH07XG4gIH1cblxuICAvKiogTGF3IDI6IGEgcmVmdXNhbCBuZXZlciB0b3VjaGVzIGB0aGlzLnN0ZXBgLiAqL1xuICBwcml2YXRlIHJlZnVzZShyZWFzb246ICdjbGFtcGVkJyB8ICdtaXNzJyB8ICdlbXB0eScsIG5lYXJlc3Q/OiBTdG9wPFRNZXRhPik6IE1vdmU8VE1ldGE+IHtcbiAgICBjb25zdCBhdCA9IHRoaXMuYXQoKTtcbiAgICByZXR1cm4gbmVhcmVzdCA/IHsgbW92ZWQ6IGZhbHNlLCByZWFzb24sIGF0LCBuZWFyZXN0IH0gOiB7IG1vdmVkOiBmYWxzZSwgcmVhc29uLCBhdCB9O1xuICB9XG5cbiAgZmlyc3QoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGlmICh0aGlzLnN0ZXAgPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbygwKTtcbiAgfVxuXG4gIGxhc3QoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuc3RvcHMubGVuZ3RoIC0gMTtcbiAgICBpZiAodGhpcy5zdGVwID09PSBlbmQpIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhlbmQpO1xuICB9XG5cbiAgcHJldigpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJyk7XG4gICAgcmV0dXJuIHRoaXMubW92ZVRvKHRoaXMuc3RlcCAtIDEpO1xuICB9XG5cbiAgbmV4dCgpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG4gICAgaWYgKHRoaXMuc3RlcCA+PSB0aGlzLnN0b3BzLmxlbmd0aCAtIDEpIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyh0aGlzLnN0ZXAgKyAxKTtcbiAgfVxuXG4gIGp1bXBUbyh0YXJnZXQ6IG51bWJlciB8IHN0cmluZyk6IE1vdmU8VE1ldGE+IHtcbiAgICBpZiAodGhpcy5zdG9wcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnZW1wdHknKTtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgc3RlcCA9IE1hdGgudHJ1bmModGFyZ2V0KTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4oc3RlcCkpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycpO1xuICAgICAgaWYgKHN0ZXAgPCAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnLCB0aGlzLnN0b3BzWzBdKTtcbiAgICAgIGlmIChzdGVwID4gdGhpcy5zdG9wcy5sZW5ndGggLSAxKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnLCB0aGlzLnN0b3BzW3RoaXMuc3RvcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgaWYgKHN0ZXAgPT09IHRoaXMuc3RlcCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJyk7XG4gICAgICByZXR1cm4gdGhpcy5tb3ZlVG8oc3RlcCk7XG4gICAgfVxuXG4gICAgLy8gYCcnYCBpcyBub3QgYW4gYWRkcmVzczogaXQgaXMgd2hhdCB0aGUgYm9va2VuZHMgYW5kIGFueSBwcmUtc3RhZ2VcbiAgICAvLyByb290IGNvbW1pdCBjYXJyeS4gVGhvc2UgYXJlIHJlYWNoZWQgYnkgc3RlcCwgbmV2ZXIgYnkgaWQuXG4gICAgaWYgKHRhcmdldCA9PT0gJycpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuc3RvcHMuZmluZCgoc3RvcCkgPT4gc3RvcC5ydW50aW1lU3RhZ2VJZCA9PT0gdGFyZ2V0KTtcbiAgICBpZiAoIWhpdCkgcmV0dXJuIHRoaXMucmVmdXNlKCdtaXNzJywgdGhpcy5uZWFyZXN0VG8odGFyZ2V0KSk7XG4gICAgaWYgKGhpdC5zdGVwID09PSB0aGlzLnN0ZXApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhoaXQuc3RlcCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNsb3Nlc3QgbmFtYWJsZSBzdG9wIGZvciBhIGBydW50aW1lU3RhZ2VJZGAgdGhhdCBpcyBub3Qgb24gdGhpcyBheGlzOlxuICAgKiB0aGUgbGFzdCBzdG9wIG9mIHRoZSBzYW1lIFNUQUdFIChhIGRpZmZlcmVudCBpdGVyYXRpb24gb2YgdGhlIHNhbWUgbm9kZSksXG4gICAqIGVsc2UgdGhlIGxhc3Qgc3RvcCB3aG9zZSBjb21taXQgcHJlY2VkZXMgdGhlIG1pc3NlZCBpZCdzIGV4ZWN1dGlvbiBpbmRleC5cbiAgICogTmFtaW5nIGEgbmVpZ2hib3VyIGlzIGEgY291cnRlc3kgZm9yIHRoZSBVSSDigJQgaXQgbmV2ZXIgbW92ZXMgdGhlIGN1cnNvci5cbiAgICovXG4gIHByaXZhdGUgbmVhcmVzdFRvKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaGFzaCA9IHJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2ggPT09IC0xKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YWdlUGFydCA9IHJ1bnRpbWVTdGFnZUlkLnNsaWNlKDAsIGhhc2gpO1xuICAgIGNvbnN0IHdhbnRlZCA9IE51bWJlci5wYXJzZUludChydW50aW1lU3RhZ2VJZC5zbGljZShoYXNoICsgMSksIDEwKTtcblxuICAgIGxldCBzYW1lU3RhZ2U6IFN0b3A8VE1ldGE+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBieUluZGV4OiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHN0b3Agb2YgdGhpcy5zdG9wcykge1xuICAgICAgY29uc3Qgc3RvcEhhc2ggPSBzdG9wLnJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKCcjJyk7XG4gICAgICBpZiAoc3RvcEhhc2ggPT09IC0xKSBjb250aW51ZTtcbiAgICAgIGlmIChzdG9wLnJ1bnRpbWVTdGFnZUlkLnNsaWNlKDAsIHN0b3BIYXNoKSA9PT0gc3RhZ2VQYXJ0KSBzYW1lU3RhZ2UgPSBzdG9wO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4od2FudGVkKSkge1xuICAgICAgICBjb25zdCBpZHggPSBOdW1iZXIucGFyc2VJbnQoc3RvcC5ydW50aW1lU3RhZ2VJZC5zbGljZShzdG9wSGFzaCArIDEpLCAxMCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGlkeCkgJiYgaWR4IDw9IHdhbnRlZCkgYnlJbmRleCA9IHN0b3A7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYW1lU3RhZ2UgPz8gYnlJbmRleDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWFkaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHN0YXRlQXQoc3RvcD86IFN0b3A8VE1ldGE+KTogRm9sZGVkU3RhdGUge1xuICAgIGNvbnN0IHRhcmdldCA9IHN0b3AgPz8gdGhpcy5hdCgpO1xuICAgIGNvbnN0IGxlZyA9IHRhcmdldD8uc291cmNlSWR4ID8/IDA7XG4gICAgY29uc3QgZm9sZCA9IGZvbGRMZWdzRnJvbSh0aGlzLmxlZ3MsIGxlZywgdGFyZ2V0ID8gdGFyZ2V0Lmxhc3RDb21taXRJZHggOiAtMSwgdGhpcy5mb2xkTWVtbyk7XG4gICAgdGhpcy5mb2xkTWVtbyA9IGZvbGQubWVtbztcbiAgICBjb25zdCBmb2xkZWQgPSBmb2xkLmZvbGRlZDtcbiAgICAvLyBXaGljaCBsZWcgdGhlIGluZGV4IGJlbG9uZ3MgdG8sIGJ1dCBvbmx5IHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSDigJRcbiAgICAvLyBhIHNpbmdsZS1zb3VyY2UgZm9sZCBrZWVwcyB0aGUgOS4xNy4wIHNoYXBlIGV4YWN0bHkuXG4gICAgcmV0dXJuIHRoaXMubGVncy5sZW5ndGggPiAxID8geyAuLi5mb2xkZWQsIHNvdXJjZUlkeDogbGVnIH0gOiBmb2xkZWQ7XG4gIH1cblxuICBjaGFuZ2VkU2luY2UoZnJvbT86IFN0b3A8VE1ldGE+KTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIGNvbnN0IHRvID0gdGhpcy5hdCgpO1xuICAgIGlmICghdG8pIHJldHVybiBPYmplY3QuZnJlZXplKFtdKTtcbiAgICBjb25zdCBzdGFydCA9IGZyb20gPz8gdGhpcy5zdG9wc1t0aGlzLnN0ZXAgLSAxXTtcbiAgICAvLyBObyBlYXJsaWVyIHN0b3AgKHdlIGFyZSBhdCBgJ3N0YXJ0J2ApIOKHkiBldmVyeXRoaW5nIHVwIHRvIGhlcmU6IG5vdGhpbmdcbiAgICAvLyBvbiBhIHJ1biBjdXJzb3IsIGFuZCB0aGUgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCBvbiBhIGRyaWxsZWQgb25lXG4gICAgLy8gKHRoZSBzdGFydCBib29rZW5kIGNvdmVycyB0aGUgaWQtbGVzcyBjb21taXRzIHRoYXQgcHJlY2VkZSBzdGFnZSBvbmUpLlxuICAgIGNvbnN0IHRvTGVnID0gdG8uc291cmNlSWR4ID8/IDA7XG4gICAgY29uc3QgZnJvbUxlZyA9IHN0YXJ0ID8gc3RhcnQuc291cmNlSWR4ID8/IDAgOiB0b0xlZztcbiAgICBjb25zdCBhZnRlcklkeCA9IHN0YXJ0ID8gc3RhcnQubGFzdENvbW1pdElkeCA6IC0xO1xuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAvLyBBIHJhbmdlIHRoYXQgY3Jvc3NlcyBhIGNoYWluIHNlYW0gaXMgd2Fsa2VkIGxlZyBieSBsZWc6IHRoZSB0YWlsIG9mIHRoZVxuICAgIC8vIGxlZyBpdCBzdGFydGVkIGluLCBldmVyeSBsZWcgaW4gYmV0d2VlbiB3aG9sZSwgdGhlbiB0aGUgaGVhZCBvZiB0aGUgbGVnXG4gICAgLy8gaXQgZW5kcyBpbi4gQmFja3dhcmRzIHJhbmdlcyB3YWxrIG5vdGhpbmcgYW5kIGdpdmUgYFtdYCwgYXMgYmVmb3JlLlxuICAgIGZvciAobGV0IGxlZyA9IGZyb21MZWc7IGxlZyA8PSB0b0xlZyAmJiBsZWcgPCB0aGlzLmxlZ3MubGVuZ3RoOyBsZWcrKykge1xuICAgICAgY29uc3QgbG9nID0gdGhpcy5sZWdzW2xlZ10ubG9nO1xuICAgICAgY29uc3QgbG8gPSBsZWcgPT09IGZyb21MZWcgPyBhZnRlcklkeCArIDEgOiAwO1xuICAgICAgY29uc3QgaGkgPSBsZWcgPT09IHRvTGVnID8gdG8ubGFzdENvbW1pdElkeCA6IGxvZy5sZW5ndGggLSAxO1xuICAgICAgZm9yIChsZXQgaSA9IGxvOyBpIDw9IGhpOyBpKyspIHtcbiAgICAgICAgY29uc3QgYnVuZGxlID0gbG9nW2ldO1xuICAgICAgICBpZiAoIWJ1bmRsZSkgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgYnVuZGxlLnRyYWNlKSBrZXlzLmFkZChlbnRyeS5wYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoWy4uLmtleXNdLnNvcnQoKSk7XG4gIH1cblxuICAvLyDilIDilIAgTWFya3MgKGxhdyA0OiBiZXNpZGUgdGhlIGxvZywgbmV2ZXIgaW4gaXQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG1hcmsobmFtZTogc3RyaW5nLCBzdG9wPzogU3RvcDxUTWV0YT4pOiBNYXJrIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzdG9wID8/IHRoaXMuYXQoKTtcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbnRyeTogTWFyayA9IE9iamVjdC5mcmVlemUoeyBuYW1lLCBydW50aW1lU3RhZ2VJZDogdGFyZ2V0LnJ1bnRpbWVTdGFnZUlkLCBzdGVwOiB0YXJnZXQuc3RlcCB9KTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuX21hcmtzLmZpbmRJbmRleCgobSkgPT4gbS5uYW1lID09PSBuYW1lKTtcbiAgICBpZiAoZXhpc3RpbmcgPj0gMCkgdGhpcy5fbWFya3NbZXhpc3RpbmddID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLl9tYXJrcy5wdXNoKGVudHJ5KTtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBtYXJrcygpOiByZWFkb25seSBNYXJrW10ge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKFsuLi50aGlzLl9tYXJrc10pO1xuICB9XG5cbiAganVtcFRvTWFyayhuYW1lOiBzdHJpbmcpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLl9tYXJrcy5maW5kKChtKSA9PiBtLm5hbWUgPT09IG5hbWUpO1xuICAgIGlmICghZW50cnkpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycpO1xuICAgIC8vIFJlc29sdmUgYnkgcnVudGltZVN0YWdlSWQgZmlyc3Qg4oCUIHRoZSBhZGRyZXNzIHRoYXQgc3Vydml2ZXMgYSBjaGFuZ2Ugb2ZcbiAgICAvLyBzdHJhdGVneSDigJQgYW5kIGZhbGwgYmFjayB0byB0aGUgcmVtZW1iZXJlZCBzdGVwIG9ubHkgZm9yIHRoZSBib29rZW5kcyxcbiAgICAvLyB3aGljaCBoYXZlIG5vIHN0YWdlIGlkIG9mIHRoZWlyIG93bi5cbiAgICBjb25zdCBieUlkID0gZW50cnkucnVudGltZVN0YWdlSWRcbiAgICAgID8gdGhpcy5zdG9wcy5maW5kKChzdG9wKSA9PiBzdG9wLnJ1bnRpbWVTdGFnZUlkID09PSBlbnRyeS5ydW50aW1lU3RhZ2VJZClcbiAgICAgIDogdGhpcy5zdG9wc1tlbnRyeS5zdGVwXTtcbiAgICBpZiAoIWJ5SWQpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycsIHRoaXMubmVhcmVzdFRvKGVudHJ5LnJ1bnRpbWVTdGFnZUlkKSk7XG4gICAgaWYgKGJ5SWQuc3RlcCA9PT0gdGhpcy5zdGVwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnKTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG8oYnlJZC5zdGVwKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBEcmlsbGluZyAobGF3IDE6IGEgc2VwYXJhdGUgY3Vyc29yLCBub3QgYSBzZWNvbmQgcG9zaXRpb24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGRyaWxsKG1vdW50UnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFRpbWVUcmF2ZWw8VE1ldGE+IHwgdW5kZWZpbmVkIHtcbiAgICAvLyBPbiBhIGNoYWluLCB0aGUgbW91bnQgaXMgbG9va2VkIGZvciBpbiBldmVyeSBsZWcg4oCUIGEgc3ViZmxvdyB0aGF0IHJhblxuICAgIC8vIGJlZm9yZSB0aGUgcGF1c2UgaXMgaW4gdGhlIGZpcnN0IHNuYXBzaG90J3MgcmVzdWx0cywgb25lIHRoYXQgcmFuIGFmdGVyXG4gICAgLy8gaXMgaW4gdGhlIHNlY29uZCdzLiBJZHMgYXJlIHVuaXF1ZSBhY3Jvc3MgYSBzb3VuZCBjaGFpbiAoY2hhaW4udHNcbiAgICAvLyByZWZ1c2VzIG9uZSB3aGVyZSB0aGV5IGFyZSBub3QpLCBzbyB0aGUgZmlyc3QgaGl0IGlzIHRoZSBvbmx5IGhpdC5cbiAgICBsZXQgcmVzdWx0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc3VsdDogU3ViZmxvd1Jlc3VsdFNoYXBlIHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHRoaXMuc291cmNlcykge1xuICAgICAgLy8gQSBzdG9yZWQgcmVjb3JkaW5nJ3MgcmVzdWx0cyBhcmUgcGFyc2VkIEpTT046IHJlYWQgdGhlbSBhcyBhIG1hcCBvbmx5XG4gICAgICAvLyB3aGVuIHRoZXkgYXJlIG9uZSwgYW5kIGFzIFwibm8gc3ViZmxvd3NcIiBvdGhlcndpc2UuXG4gICAgICBpZiAoIWlzUGxhaW5pc2goc291cmNlLnN1YmZsb3dSZXN1bHRzKSkgY29udGludWU7XG4gICAgICBjb25zdCBoaXQgPSBzb3VyY2Uuc3ViZmxvd1Jlc3VsdHNbbW91bnRSdW50aW1lU3RhZ2VJZF0gYXMgU3ViZmxvd1Jlc3VsdFNoYXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGhpdCkge1xuICAgICAgICByZXN1bHRzID0gc291cmNlLnN1YmZsb3dSZXN1bHRzO1xuICAgICAgICByZXN1bHQgPSBoaXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0cmVlID0gcmVzdWx0Py50cmVlQ29udGV4dDtcbiAgICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdCB8fCAhdHJlZSB8fCAhQXJyYXkuaXNBcnJheSh0cmVlLmhpc3RvcnkpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gYHBhdGhgIGlzIHRoZSBzdWJmbG93IFBBVEgg4oCUIHRoZSBzYW1lIHN0cmluZyBmb3IgZXZlcnkgaXRlcmF0aW9uIG9mIGFcbiAgICAvLyBtb3VudCBpbnNpZGUgYSBsb29wLiBgbW91bnRSdW50aW1lU3RhZ2VJZGAgaXMgdGhlIGl0ZXJhdGlvbiBhY3R1YWxseVxuICAgIC8vIG9wZW5lZCwgc28gYSBVSSBjYW4gbGFiZWwgYW5kIGtleSB0aHJlZSBkcmlsbCBwYW5lbHMgb3ZlciBgc2Z4IzJgLFxuICAgIC8vIGBzZngjOGAsIGBzZngjMTRgIGFwYXJ0IGluc3RlYWQgb2YgY2FsbGluZyBhbGwgdGhyZWUgJ3NmeCcuXG4gICAgY29uc3QgY2hpbGRQYXRoID0gcmVzdWx0LnN1YmZsb3dJZCA/PyBtb3VudFJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IGNoaWxkOiBUaW1lVHJhdmVsU291cmNlID0ge1xuICAgICAgLy8gUm93cyBhcmUgbmFycm93ZWQgcGVyIGJ1bmRsZSB3aGVuIHRoZSBjaGlsZCByZWFkcyB0aGVtIOKAlCBhIHN0b3JlZFxuICAgICAgLy8gcmVjb3JkaW5nJ3MgaW5uZXIgaGlzdG9yeSBuZWVkcyBubyBjYXN0IGVpdGhlci5cbiAgICAgIGNvbW1pdExvZzogdHJlZS5oaXN0b3J5LFxuICAgICAgaW5pdGlhbFN0YXRlOiB0cmVlLmluaXRpYWxTdGF0ZSxcbiAgICAgIGV4ZWN1dGlvblRyZWU6IHRyZWUuc3RhZ2VDb250ZXh0cyxcbiAgICAgIC8vIE5lc3RlZCBzdWJmbG93IHJlc3VsdHMgYXJlIG1lcmdlZCBVUCBpbnRvIG9uZSBmbGF0LCBkdWFsLWtleWVkIG1hcCwgc29cbiAgICAgIC8vIHRoZSBjaGlsZCBjYW4gZHJpbGwgZnVydGhlciB0aHJvdWdoIHRoZSBzYW1lIG1hcC5cbiAgICAgIHN1YmZsb3dSZXN1bHRzOiByZXN1bHRzLFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBDdXJzb3I8VE1ldGE+KFtjaGlsZF0sIHsgc3RyYXRlZ3k6IHRoaXMub3B0aW9ucy5zdHJhdGVneSB9LCBjaGlsZFBhdGgsIHRoaXMsIG1vdW50UnVudGltZVN0YWdlSWQpO1xuICB9XG59XG5cbi8qKlxuICogUmUtc3RlcCBwZXItc291cmNlIHN0b3BzIGludG8gT05FIGF4aXMuXG4gKlxuICogVGhlIElOVEVSSU9SIGJvb2tlbmRzIGdvOiBhIGAnc3RhcnQnYCBvbiBhbnkgbGVnIGJ1dCB0aGUgZmlyc3QsIGFuZCBhblxuICogYCdlbmQnYCBvbiBhbnkgbGVnIGJ1dCB0aGUgbGFzdCwgYXJlIGJvb2tlbmRzIG9mIGEgbGVnIGFuZCBub3Qgb2YgdGhlIHJ1biDigJRcbiAqIGtlZXBpbmcgdGhlbSB3b3VsZCBwdXQgXCJ0aGUgcnVuIGlzIG92ZXJcIiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBheGlzLiBUaGVcbiAqIGNvbW1pdHMgdGhleSBjb3ZlcmVkIGFyZSBub3Qgb3JwaGFuZWQ6IGEgZm9sZCBhbHdheXMgcmVwbGF5cyBpdHMgbGVnIGZyb21cbiAqIHRoYXQgbGVnJ3Mgb3duIGJhc2UsIGFuZCBgY2hhbmdlZFNpbmNlYCB3YWxrcyBhIHNlYW0tY3Jvc3NpbmcgcmFuZ2UgbGVnIGJ5XG4gKiBsZWcgKGluY2x1ZGluZyB0aGUgaGVhZCBvZiB0aGUgbGVnIGl0IGVuZHMgaW4pLiBUaGUgc3RvcHMnIGBjb21taXRJZHhgIC9cbiAqIGBsYXN0Q29tbWl0SWR4YCByYW5nZXMgUEFSVElUSU9OIEVBQ0ggTEVHLCBuZXZlciBzcGFuIHRoZSBzZWFtOiBhIHN0b3Anc1xuICogcmFuZ2UgZW5kcyBhdCBpdHMgb3duIGxlZydzIGxhc3QgaW5kZXgsIGFuZCB0aGUgbmV4dCBsZWcncyBmaXJzdCBzdG9wIG9wZW5zXG4gKiBhdCB0aGF0IGxlZydzIDAuXG4gKi9cbmZ1bmN0aW9uIGNoYWluU3RvcHM8VE1ldGE+KHBlclNvdXJjZTogcmVhZG9ubHkgU3RvcDxUTWV0YT5bXVtdKTogU3RvcDxUTWV0YT5bXSB7XG4gIC8vIFwiSW50ZXJpb3JcIiBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSBsZWdzIHRoYXQgYWN0dWFsbHkgQ09OVFJJQlVURSBzdG9wczogYVxuICAvLyBsZWcgd2hvc2UgbG9nIHdhcyBlbXB0eSBoYXMgbm8gYm9va2VuZHMgdG8gZHJvcCBhbmQgbXVzdCBub3QgbWFrZSBpdHNcbiAgLy8gbmVpZ2hib3VyJ3MgYCdzdGFydCdgIG9yIGAnZW5kJ2AgaW50ZXJpb3Ig4oCUIHRoZSBjaGFpbmVkIGF4aXMgc3RpbGwgb3BlbnNcbiAgLy8gd2l0aCB0aGUgZmlyc3Qgc3RvcCB0aGF0IGV4aXN0cyBhbmQgY2xvc2VzIHdpdGggdGhlIGxhc3QuXG4gIGNvbnN0IGNvbnRyaWJ1dGluZyA9IHBlclNvdXJjZS5tYXAoKHN0b3BzKSA9PiBzdG9wcy5sZW5ndGggPiAwKTtcbiAgY29uc3QgZmlyc3RMZWcgPSBjb250cmlidXRpbmcuaW5kZXhPZih0cnVlKTtcbiAgY29uc3QgbGFzdExlZyA9IGNvbnRyaWJ1dGluZy5sYXN0SW5kZXhPZih0cnVlKTtcbiAgY29uc3Qgb3V0OiBTdG9wPFRNZXRhPltdID0gW107XG4gIGZvciAoY29uc3QgW3NvdXJjZUlkeCwgc3RvcHNdIG9mIHBlclNvdXJjZS5lbnRyaWVzKCkpIHtcbiAgICBmb3IgKGNvbnN0IHN0b3Agb2Ygc3RvcHMpIHtcbiAgICAgIGlmIChzb3VyY2VJZHggPiBmaXJzdExlZyAmJiBzdG9wLmtpbmQgPT09ICdzdGFydCcpIGNvbnRpbnVlO1xuICAgICAgaWYgKHNvdXJjZUlkeCA8IGxhc3RMZWcgJiYgc3RvcC5raW5kID09PSAnZW5kJykgY29udGludWU7XG4gICAgICBvdXQucHVzaCh7IC4uLnN0b3AsIHN0ZXA6IG91dC5sZW5ndGgsIHNvdXJjZUlkeCB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBPcGVuIGEgcmVhZGVyJ3MgY3Vyc29yIG92ZXIgYSBmaW5pc2hlZCBydW4uXG4gKlxuICogTm90aGluZyBoZXJlIGV4ZWN1dGVzIGFueXRoaW5nOiBgc25hcHNob3RgIGlzIGEgcmVjb3JkIG9mIGEgcnVuIHRoYXQgYWxyZWFkeVxuICogaGFwcGVuZWQsIGFuZCBldmVyeSBxdWVzdGlvbiBpcyBhbnN3ZXJlZCBieSByZWFkaW5nIGl0LiBBIHN0b3JlZCBKU09OXG4gKiBzbmFwc2hvdCB3b3JrcyBleGFjdGx5IGxpa2UgYSBsaXZlIG9uZSDigJQgc2luY2UgOS4xOC4wIGl0cyBgY29tbWl0TG9nYCBtYXkgYmVcbiAqIGFuIHVudmFsaWRhdGVkIGB1bmtub3duW11gLCBuYXJyb3dlZCBwZXIgYnVuZGxlIHdoZXJlIHRoZSBmb2xkIHJlYWRzIGl0LCBzb1xuICogYSByZXBsYXllZCByZWNvcmRpbmcgbmVlZHMgbm8gY2FzdC5cbiAqXG4gKiBAcGFyYW0gc25hcHNob3QgYGV4ZWN1dG9yLmdldFNuYXBzaG90KClgLCBvciBhbnkgb2JqZWN0IHdpdGggdGhlIHNhbWVcbiAqICAgc2hhcGUg4oCUIGluY2x1ZGluZyBvbmUgcm91bmQtdHJpcHBlZCB0aHJvdWdoIEpTT04sIG9yIGEgc3ViZmxvdyBzdWJ0cmVlXG4gKiAgIChgZ2V0U3VidHJlZVNuYXBzaG90KClgLCB3aG9zZSBsb2cgaXMgc3BlbGxlZCBgaGlzdG9yeWApLiBBbiBBUlJBWSBvZiB0aGVtXG4gKiAgIGlzIGEgQ0hBSU46IGEgcGF1c2UgYW5kIGl0cyByZXN1bWUgcmVhZCBhcyBvbmUgYXhpcyAoc2VlIGJlbG93KS5cbiAqIEBwYXJhbSBvcHRpb25zIGBzdHJhdGVneWAgY2hvb3NlcyBob3cgc3RvcHMgYXJlIGRlcml2ZWQgKGRlZmF1bHQ6XG4gKiAgIGBjb21taXRTdG9wc2AsIG9uZSBzdG9wIHBlciBleGVjdXRlZCBzdGFnZSk7IGBtYXJrc2Agc2VlZHMgdGhlIGN1cnNvciB3aXRoXG4gKiAgIGJvb2ttYXJrcywgZS5nLiByZXN0b3JlZCBmcm9tIGEgc2F2ZWQgcmVhZGluZyBzZXNzaW9uLlxuICpcbiAqIEB0aHJvd3Mgd2hlbiBhIGNoYWluIGlzIG5vdCBpbiBydW4gb3JkZXIsIG9yIGl0cyBsZWdzIGFyZSBub3QgZnJvbSBvbmVcbiAqICAgbGluZWFnZSDigJQgdGhyZWUgY2hlY2tzLCBlYWNoIHdpdGggaXRzIG93biByZWFzb24gKHNlZSBgY2hhaW4udHNgKTpcbiAqICAgbm8gYHJ1bnRpbWVTdGFnZUlkYCBtYXkgYXBwZWFyIGluIHR3byBsZWdzOyBlYWNoIGxlZydzIGZpcnN0IGV4ZWN1dGlvblxuICogICBpbmRleCBtdXN0IGJlIHBhc3QgdGhlIHByZXZpb3VzIGxlZydzIGxhc3QgKHRoZSBlbmdpbmUgbmV2ZXIgcmVzZXRzIHRoZVxuICogICBjb3VudGVyIGFjcm9zcyBhIHJlc3VtZSk7IGFuZCBlYWNoIGxlZydzIGBpbml0aWFsU3RhdGVgIG11c3QgZGVlcC1lcXVhbFxuICogICB0aGUgc3RhdGUgdGhlIGxlZ3MgYmVmb3JlIGl0IGZvbGQgdG8g4oCUIG9uIGEgcmVzdW1lIHRoYXQgYmFzZSBJUyB0aGUgc3RhdGVcbiAqICAgYXQgdGhlIHBhdXNlLCBzbyBhIGZvcmVpZ24gbGVnIHdob3NlIGluZGljZXMgbWVyZWx5IGhhcHBlbiB0byBiZSBoaWdoZXJcbiAqICAgaXMgcmVmdXNlZCB0b28uIFRoZSB0aGlyZCBjaGVjayBydW5zIG9ubHkgd2hlcmUgdGhlIHJlY29yZCBhbGxvd3MgaXQ6IHRoZVxuICogICBsYXRlciBsZWcgbXVzdCBjYXJyeSBhbiBgaW5pdGlhbFN0YXRlYCBhbmQgdGhlIGVhcmxpZXIgbGVncyBtdXN0IGZvbGQgZnJvbVxuICogICBhIHJlYWwgYmFzZSB3aXRoIG5vIHVucmVhZGFibGUgcm93czsgb3RoZXJ3aXNlIChhbiBvbGRlciByZWNvcmRpbmcgd2l0aFxuICogICBubyBiYXNlKSB0aGUgY2hhaW4gcmVzdHMgb24gdGhlIHR3byBpbmRleCBjaGVja3MgYWxvbmUsIGFuZCB0aGUgZm9sZCdzXG4gKiAgIGBiYXNpc2Agc2F5cyB3aGF0IGl0IHN0b29kIG9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB0dCA9IHRpbWVUcmF2ZWwoZXhlY3V0b3IuZ2V0U25hcHNob3QoKSk7XG4gKiB0dC5qdW1wVG8oJ3Njb3JlLXJpc2sjNCcpO1xuICogY29uc29sZS5sb2codHQuY2hhbmdlZFNpbmNlKCkpOyAgICAgICAgLy8gWydyaXNrU2NvcmUnLCAndGllciddXG4gKiBjb25zb2xlLmxvZyh0dC5zdGF0ZUF0KCkuc3RhdGUpOyAgICAgICAvLyBzdGF0ZSBhcyB0aGF0IHN0YWdlIGxlZnQgaXRcbiAqIHR0Lm1hcmsoJ3RoZSBiYWQgb25lJyk7XG4gKiBjb25zdCBpbm5lciA9IHR0LmRyaWxsKCdzZi1wYXltZW50IzcnKTsgLy8gYSBzZXBhcmF0ZSBjdXJzb3IsIGl0cyBvd24gbG9nXG4gKlxuICogLy8gQSBwYXVzZSBhbmQgaXRzIHJlc3VtZSwgcmVhZCBhcyBPTkUgYXhpczpcbiAqIGNvbnN0IGNoYWluZWQgPSB0aW1lVHJhdmVsKFtwYXVzZWRTbmFwc2hvdCwgcmVzdW1lZFNuYXBzaG90XSk7XG4gKiBjaGFpbmVkLmxhc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJ1bidzIHJlYWwgZW5kXG4gKiBjaGFpbmVkLmF0KCkhLnNvdXJjZUlkeDsgICAgICAgICAgICAgICAgLy8gMSDigJQgd2hpY2ggbGVnIHRoZSBpbmRpY2VzIGFyZSBpblxuICogY2hhaW5lZC5qdW1wVG8oJ2FwcHJvdmUjMycpOyAgICAgICAgICAgIC8vIGZpbmRzIGl0IGluIGVpdGhlciBsZWdcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZVRyYXZlbDxUTWV0YSA9IHVua25vd24+KFxuICBzbmFwc2hvdDogVGltZVRyYXZlbFNvdXJjZSB8IHJlYWRvbmx5IFRpbWVUcmF2ZWxTb3VyY2VbXSxcbiAgb3B0aW9uczogVGltZVRyYXZlbE9wdGlvbnM8VE1ldGE+ID0ge30sXG4pOiBUaW1lVHJhdmVsPFRNZXRhPiB7XG4gIGNvbnN0IHNvdXJjZXMgPSBBcnJheS5pc0FycmF5KHNuYXBzaG90KSA/IChzbmFwc2hvdCBhcyByZWFkb25seSBUaW1lVHJhdmVsU291cmNlW10pIDogW3NuYXBzaG90IGFzIFRpbWVUcmF2ZWxTb3VyY2VdO1xuICAvLyBBIG9uZS1lbGVtZW50IGFycmF5IGlzIG5vdCBhIGNoYWluOiBpdCBpcyB0aGUgcGxhaW4gY3Vyc29yLCBhbmQgc2tpcHMgdGhlXG4gIC8vIGxpbmVhZ2UgY2hlY2tzIGEgc2luZ2xlIHNvdXJjZSBjYW5ub3QgZmFpbC5cbiAgaWYgKHNvdXJjZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc3QgcmVmdXNhbCA9IHJlZnVzZUNoYWluKHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHJlYWRTb3VyY2Uoc291cmNlKSkpO1xuICAgIGlmIChyZWZ1c2FsKSB0aHJvdyBuZXcgRXJyb3IocmVmdXNhbCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBDdXJzb3I8VE1ldGE+KHNvdXJjZXMsIG9wdGlvbnMpO1xufVxuIl19
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZVRyYXZlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdGltZS10cmF2ZWwvdGltZVRyYXZlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRzs7O0FBRUgsNkNBQW9EO0FBQ3BELHlDQUF5QztBQUN6QyxxREFBdUQ7QUFDdkQsNkNBQXdGO0FBc0J4RixNQUFNLE1BQU07SUFDRCxLQUFLLENBQXlCO0lBQzlCLElBQUksQ0FBcUI7SUFDekIsbUJBQW1CLENBQXFCO0lBQ3hDLE1BQU0sQ0FBZ0M7SUFDdEMsV0FBVyxDQUFTO0lBRVosSUFBSSxDQUF3QjtJQUM1QixPQUFPLENBQThCO0lBQ3JDLE9BQU8sQ0FBMkI7SUFDbEMsTUFBTSxDQUFTO0lBQ3hCLElBQUksQ0FBUztJQUNyQixtRkFBbUY7SUFDM0UsUUFBUSxDQUF1QjtJQUV2QyxZQUNFLE9BQW9DLEVBQ3BDLE9BQWlDLEVBQ2pDLElBQWEsRUFDYixNQUEwQixFQUMxQixtQkFBNEI7UUFFNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRWxDLDJFQUEyRTtRQUMzRSwrQ0FBK0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSyxv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cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0aW1lVHJhdmVsIOKAlCBhIHJlYWRlcidzIGN1cnNvciBvdmVyIGEgZmluaXNoZWQgdHJhY2UuXG4gKlxuICogVGhlIGZpdmUgbGF3cyB0aGlzIGZpbGUgaW1wbGVtZW50cyAoYW5kIHRoZSBmb2xkZXIgUkVBRE1FIHN0YXRlcyB3aXRoIGFuXG4gKiBleGFtcGxlIGVhY2gpOlxuICpcbiAqICAgMS4gT05FIGN1cnNvci4gVGhpcyBvYmplY3QgaG9sZHMgdGhlIG9ubHkgcG9zaXRpb24uIGBkcmlsbCgpYCByZXR1cm5zIGFcbiAqICAgICAgc2VwYXJhdGUgY3Vyc29yIG92ZXIgYSBzZXBhcmF0ZSBsb2csIG5ldmVyIGEgc2Vjb25kIHBvc2l0aW9uIGhlcmUuXG4gKiAgIDIuIEEgbWlzcyBuZXZlciBtb3Zlcy4gRXZlcnkgcmVmdXNhbCByZXR1cm5zIHRoZSByZWFzb24gYW5kIGxlYXZlcyB0aGVcbiAqICAgICAgY3Vyc29yIGV4YWN0bHkgd2hlcmUgaXQgd2FzLlxuICogICAzLiBBIGZvbGQgcmVzdWx0IGlzIGRldGFjaGVkLiBgc3RhdGVBdGAgcmV0dXJucyBmcm96ZW4sIGNsb25lZCBzdGF0ZSB0aGF0XG4gKiAgICAgIHNoYXJlcyBub3RoaW5nIHdpdGggdGhlIGVuZ2luZS5cbiAqICAgNC4gTWFya3MgbGl2ZSBiZXNpZGUgdGhlIGxvZy4gVGhleSBhcmUgdGhlIHJlYWRlcidzIG5vdGVzLCBuZXZlciB3cml0dGVuXG4gKiAgICAgIGludG8gdGhlIHJ1bidzIHJlY29yZC5cbiAqICAgNS4gU3RvcHMgYXJlIERFUklWRUQgZnJvbSB0aGUgcmVjb3JkZWQgbG9nIOKAlCByZWFkLXRpbWUgcXVlcmllcyBvdmVyXG4gKiAgICAgIGNvbGxlY3RlZCBkYXRhLCBuZXZlciBhIHJlLXdhbGsgdGhhdCBpbnZlbnRzIHdoYXQgd2FzIG5vdCByZWNvcmRlZC5cbiAqXG4gKiBBIENIQUlOICg5LjE4LjApIGRvZXMgbm90IGFkZCBhIHNpeHRoIGxhdyBhbmQgZG9lcyBub3QgYmVuZCB0aGVzZSBmaXZlOiBpdFxuICogaXMgc3RpbGwgb25lIGN1cnNvciwgb3ZlciBzb3VyY2VzIHRoYXQgYXJlIHN0aWxsIG9ubHkgcmVhZC4gV2hhdCBpdCBhZGRzIGlzXG4gKiB0aGF0IHRoZSBTVEVQUyBydW4gYWNyb3NzIGEgcGF1c2UvcmVzdW1lIOKAlCBzZWUgYGNoYWluLnRzYCBmb3IgdGhlIG9yZGVyaW5nXG4gKiBhbmQgbGluZWFnZSBjaGVja3MsIGFuZCBmb3Igd2h5IGNvbW1pdCBpbmRpY2VzIHN0YXkgcnVuLWxvY2FsLlxuICovXG5cbmltcG9ydCB7IGlzUGxhaW5pc2gsIHJlYWRUcmVlIH0gZnJvbSAnLi9idW5kbGVzLmpzJztcbmltcG9ydCB7IHJlZnVzZUNoYWluIH0gZnJvbSAnLi9jaGFpbi5qcyc7XG5pbXBvcnQgeyBjb21taXRTdG9wc1N0cmF0ZWd5IH0gZnJvbSAnLi9jb21taXRTdG9wcy5qcyc7XG5pbXBvcnQgeyB0eXBlIEZvbGRNZW1vLCB0eXBlIFJlYWRTb3VyY2UsIGZvbGRMZWdzRnJvbSwgcmVhZFNvdXJjZSB9IGZyb20gJy4vc3RhdGVBdC5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZvbGRlZFN0YXRlLFxuICBNYXJrLFxuICBNb3ZlLFxuICBTdG9wLFxuICBUaW1lVHJhdmVsLFxuICBUaW1lVHJhdmVsT3B0aW9ucyxcbiAgVGltZVRyYXZlbFNvdXJjZSxcbiAgVGltZVRyYXZlbFN0cmF0ZWd5LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIEEgc3ViZmxvdyByZXN1bHQgYXMgdGhpcyBtb2R1bGUgbmVlZHMgdG8gcmVhZCBpdCDigJQgZHVjay10eXBlZCBvbiBwdXJwb3NlLiAqL1xuaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHRTaGFwZSB7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgdHJlZUNvbnRleHQ/OiB7XG4gICAgaGlzdG9yeT86IHVua25vd25bXTtcbiAgICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG59XG5cbmNsYXNzIEN1cnNvcjxUTWV0YT4gaW1wbGVtZW50cyBUaW1lVHJhdmVsPFRNZXRhPiB7XG4gIHJlYWRvbmx5IHN0b3BzOiByZWFkb25seSBTdG9wPFRNZXRhPltdO1xuICByZWFkb25seSBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG1vdW50UnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcGFyZW50OiBUaW1lVHJhdmVsPFRNZXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgc291cmNlQ291bnQ6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxlZ3M6IHJlYWRvbmx5IFJlYWRTb3VyY2VbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VzOiByZWFkb25seSBUaW1lVHJhdmVsU291cmNlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogVGltZVRyYXZlbE9wdGlvbnM8VE1ldGE+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXJrczogTWFya1tdO1xuICBwcml2YXRlIHN0ZXA6IG51bWJlcjtcbiAgLyoqIFRoZSBsYXN0IGZvbGQncyB3b3JraW5nIGNvcHksIHNvIGEgc3RlcCBmb3J3YXJkIGFwcGxpZXMgb25lIGJ1bmRsZSAoOS4yNS4wKS4gKi9cbiAgcHJpdmF0ZSBmb2xkTWVtbzogRm9sZE1lbW8gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc291cmNlczogcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdLFxuICAgIG9wdGlvbnM6IFRpbWVUcmF2ZWxPcHRpb25zPFRNZXRhPixcbiAgICBwYXRoPzogc3RyaW5nLFxuICAgIHBhcmVudD86IFRpbWVUcmF2ZWw8VE1ldGE+LFxuICAgIG1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuc291cmNlcyA9IHNvdXJjZXM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMubW91bnRSdW50aW1lU3RhZ2VJZCA9IG1vdW50UnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5sZWdzID0gc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gcmVhZFNvdXJjZShzb3VyY2UpKTtcbiAgICB0aGlzLnNvdXJjZUNvdW50ID0gc291cmNlcy5sZW5ndGg7XG5cbiAgICAvLyBUaGUgc2hpcHBlZCBzdHJhdGVneSBoYXMgbm8gdm9jYWJ1bGFyeSBvZiBpdHMgb3duIChgbWV0YWAgaXMgbmV2ZXIgc2V0KSxcbiAgICAvLyBzbyBpdCBzZXJ2ZXMgYW55IGBUTWV0YWAgYSBjYWxsZXIgYXNrZWQgZm9yLlxuICAgIGNvbnN0IHN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSA/PyAoY29tbWl0U3RvcHNTdHJhdGVneSBhcyBUaW1lVHJhdmVsU3RyYXRlZ3k8VE1ldGE+KTtcbiAgICAvLyBPTkUgQ0FMTCBQRVIgU09VUkNFLCB3aXRoIHRoYXQgc291cmNlJ3Mgb3duIGxvZyBhbmQgdHJlZTogYSBzdHJhdGVneVxuICAgIC8vIG5ldmVyIGhhcyB0byBrbm93IGl0IGlzIHBhcnQgb2YgYSBjaGFpbiwgYW5kIGl0cyBpbmRpY2VzIHN0YXkgbG9jYWwgdG9cbiAgICAvLyB0aGUgbGVnIGl0IHdhcyBoYW5kZWQuXG4gICAgY29uc3QgcGVyU291cmNlID0gdGhpcy5sZWdzLm1hcCgobGVnLCBpKSA9PiBzdHJhdGVneS5zdG9wc0ZvcihsZWcubG9nLCByZWFkVHJlZShzb3VyY2VzW2ldLmV4ZWN1dGlvblRyZWUpKSk7XG4gICAgdGhpcy5zdG9wcyA9IE9iamVjdC5mcmVlemUoc291cmNlcy5sZW5ndGggPT09IDEgPyBwZXJTb3VyY2VbMF0gOiBjaGFpblN0b3BzKHBlclNvdXJjZSkpO1xuICAgIHRoaXMuX21hcmtzID0gWy4uLihvcHRpb25zLm1hcmtzID8/IFtdKV07XG4gICAgdGhpcy5zdGVwID0gMDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQb3NpdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhdCgpOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcHNbdGhpcy5zdGVwXTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZVRvKHN0ZXA6IG51bWJlcik6IE1vdmU8VE1ldGE+IHtcbiAgICBjb25zdCBmcm9tID0gdGhpcy5hdCgpO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgcmV0dXJuIHsgbW92ZWQ6IHRydWUsIGZyb20sIHRvOiB0aGlzLnN0b3BzW3N0ZXBdIH07XG4gIH1cblxuICAvKiogTGF3IDI6IGEgcmVmdXNhbCBuZXZlciB0b3VjaGVzIGB0aGlzLnN0ZXBgLiAqL1xuICBwcml2YXRlIHJlZnVzZShyZWFzb246ICdjbGFtcGVkJyB8ICdtaXNzJyB8ICdlbXB0eScsIG5lYXJlc3Q/OiBTdG9wPFRNZXRhPik6IE1vdmU8VE1ldGE+IHtcbiAgICBjb25zdCBhdCA9IHRoaXMuYXQoKTtcbiAgICByZXR1cm4gbmVhcmVzdCA/IHsgbW92ZWQ6IGZhbHNlLCByZWFzb24sIGF0LCBuZWFyZXN0IH0gOiB7IG1vdmVkOiBmYWxzZSwgcmVhc29uLCBhdCB9O1xuICB9XG5cbiAgZmlyc3QoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGlmICh0aGlzLnN0ZXAgPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbygwKTtcbiAgfVxuXG4gIGxhc3QoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuc3RvcHMubGVuZ3RoIC0gMTtcbiAgICBpZiAodGhpcy5zdGVwID09PSBlbmQpIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhlbmQpO1xuICB9XG5cbiAgcHJldigpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJyk7XG4gICAgcmV0dXJuIHRoaXMubW92ZVRvKHRoaXMuc3RlcCAtIDEpO1xuICB9XG5cbiAgbmV4dCgpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG4gICAgaWYgKHRoaXMuc3RlcCA+PSB0aGlzLnN0b3BzLmxlbmd0aCAtIDEpIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyh0aGlzLnN0ZXAgKyAxKTtcbiAgfVxuXG4gIGp1bXBUbyh0YXJnZXQ6IG51bWJlciB8IHN0cmluZyk6IE1vdmU8VE1ldGE+IHtcbiAgICBpZiAodGhpcy5zdG9wcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnZW1wdHknKTtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgc3RlcCA9IE1hdGgudHJ1bmModGFyZ2V0KTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4oc3RlcCkpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycpO1xuICAgICAgaWYgKHN0ZXAgPCAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnLCB0aGlzLnN0b3BzWzBdKTtcbiAgICAgIGlmIChzdGVwID4gdGhpcy5zdG9wcy5sZW5ndGggLSAxKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnLCB0aGlzLnN0b3BzW3RoaXMuc3RvcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgaWYgKHN0ZXAgPT09IHRoaXMuc3RlcCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJyk7XG4gICAgICByZXR1cm4gdGhpcy5tb3ZlVG8oc3RlcCk7XG4gICAgfVxuXG4gICAgLy8gYCcnYCBpcyBub3QgYW4gYWRkcmVzczogaXQgaXMgd2hhdCB0aGUgYm9va2VuZHMgYW5kIGFueSBwcmUtc3RhZ2VcbiAgICAvLyByb290IGNvbW1pdCBjYXJyeS4gVGhvc2UgYXJlIHJlYWNoZWQgYnkgc3RlcCwgbmV2ZXIgYnkgaWQuXG4gICAgaWYgKHRhcmdldCA9PT0gJycpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuc3RvcHMuZmluZCgoc3RvcCkgPT4gc3RvcC5ydW50aW1lU3RhZ2VJZCA9PT0gdGFyZ2V0KTtcbiAgICBpZiAoIWhpdCkgcmV0dXJuIHRoaXMucmVmdXNlKCdtaXNzJywgdGhpcy5uZWFyZXN0VG8odGFyZ2V0KSk7XG4gICAgaWYgKGhpdC5zdGVwID09PSB0aGlzLnN0ZXApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhoaXQuc3RlcCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNsb3Nlc3QgbmFtYWJsZSBzdG9wIGZvciBhIGBydW50aW1lU3RhZ2VJZGAgdGhhdCBpcyBub3Qgb24gdGhpcyBheGlzOlxuICAgKiB0aGUgbGFzdCBzdG9wIG9mIHRoZSBzYW1lIFNUQUdFIChhIGRpZmZlcmVudCBpdGVyYXRpb24gb2YgdGhlIHNhbWUgbm9kZSksXG4gICAqIGVsc2UgdGhlIGxhc3Qgc3RvcCB3aG9zZSBjb21taXQgcHJlY2VkZXMgdGhlIG1pc3NlZCBpZCdzIGV4ZWN1dGlvbiBpbmRleC5cbiAgICogTmFtaW5nIGEgbmVpZ2hib3VyIGlzIGEgY291cnRlc3kgZm9yIHRoZSBVSSDigJQgaXQgbmV2ZXIgbW92ZXMgdGhlIGN1cnNvci5cbiAgICovXG4gIHByaXZhdGUgbmVhcmVzdFRvKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaGFzaCA9IHJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2ggPT09IC0xKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YWdlUGFydCA9IHJ1bnRpbWVTdGFnZUlkLnNsaWNlKDAsIGhhc2gpO1xuICAgIGNvbnN0IHdhbnRlZCA9IE51bWJlci5wYXJzZUludChydW50aW1lU3RhZ2VJZC5zbGljZShoYXNoICsgMSksIDEwKTtcblxuICAgIGxldCBzYW1lU3RhZ2U6IFN0b3A8VE1ldGE+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBieUluZGV4OiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHN0b3Agb2YgdGhpcy5zdG9wcykge1xuICAgICAgY29uc3Qgc3RvcEhhc2ggPSBzdG9wLnJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKCcjJyk7XG4gICAgICBpZiAoc3RvcEhhc2ggPT09IC0xKSBjb250aW51ZTtcbiAgICAgIGlmIChzdG9wLnJ1bnRpbWVTdGFnZUlkLnNsaWNlKDAsIHN0b3BIYXNoKSA9PT0gc3RhZ2VQYXJ0KSBzYW1lU3RhZ2UgPSBzdG9wO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4od2FudGVkKSkge1xuICAgICAgICBjb25zdCBpZHggPSBOdW1iZXIucGFyc2VJbnQoc3RvcC5ydW50aW1lU3RhZ2VJZC5zbGljZShzdG9wSGFzaCArIDEpLCAxMCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGlkeCkgJiYgaWR4IDw9IHdhbnRlZCkgYnlJbmRleCA9IHN0b3A7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYW1lU3RhZ2UgPz8gYnlJbmRleDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWFkaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHN0YXRlQXQoc3RvcD86IFN0b3A8VE1ldGE+KTogRm9sZGVkU3RhdGUge1xuICAgIGNvbnN0IHRhcmdldCA9IHN0b3AgPz8gdGhpcy5hdCgpO1xuICAgIGNvbnN0IGxlZyA9IHRhcmdldD8uc291cmNlSWR4ID8/IDA7XG4gICAgY29uc3QgZm9sZCA9IGZvbGRMZWdzRnJvbSh0aGlzLmxlZ3MsIGxlZywgdGFyZ2V0ID8gdGFyZ2V0Lmxhc3RDb21taXRJZHggOiAtMSwgdGhpcy5mb2xkTWVtbyk7XG4gICAgdGhpcy5mb2xkTWVtbyA9IGZvbGQubWVtbztcbiAgICBjb25zdCBmb2xkZWQgPSBmb2xkLmZvbGRlZDtcbiAgICAvLyBXaGljaCBsZWcgdGhlIGluZGV4IGJlbG9uZ3MgdG8sIGJ1dCBvbmx5IHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSDigJRcbiAgICAvLyBhIHNpbmdsZS1zb3VyY2UgZm9sZCBrZWVwcyB0aGUgOS4xNy4wIHNoYXBlIGV4YWN0bHkuXG4gICAgcmV0dXJuIHRoaXMubGVncy5sZW5ndGggPiAxID8geyAuLi5mb2xkZWQsIHNvdXJjZUlkeDogbGVnIH0gOiBmb2xkZWQ7XG4gIH1cblxuICBjaGFuZ2VkU2luY2UoZnJvbT86IFN0b3A8VE1ldGE+KTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIGNvbnN0IHRvID0gdGhpcy5hdCgpO1xuICAgIGlmICghdG8pIHJldHVybiBPYmplY3QuZnJlZXplKFtdKTtcbiAgICBjb25zdCBzdGFydCA9IGZyb20gPz8gdGhpcy5zdG9wc1t0aGlzLnN0ZXAgLSAxXTtcbiAgICAvLyBObyBlYXJsaWVyIHN0b3AgKHdlIGFyZSBhdCBgJ3N0YXJ0J2ApIOKHkiBldmVyeXRoaW5nIHVwIHRvIGhlcmU6IG5vdGhpbmdcbiAgICAvLyBvbiBhIHJ1biBjdXJzb3IsIGFuZCB0aGUgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCBvbiBhIGRyaWxsZWQgb25lXG4gICAgLy8gKHRoZSBzdGFydCBib29rZW5kIGNvdmVycyB0aGUgc2VlZCB0aGF0IHByZWNlZGVzIHN0YWdlIG9uZSDigJQgYGNvbW1pdFN0b3BzYCkuXG4gICAgY29uc3QgdG9MZWcgPSB0by5zb3VyY2VJZHggPz8gMDtcbiAgICBjb25zdCBmcm9tTGVnID0gc3RhcnQgPyBzdGFydC5zb3VyY2VJZHggPz8gMCA6IHRvTGVnO1xuICAgIGNvbnN0IGFmdGVySWR4ID0gc3RhcnQgPyBzdGFydC5sYXN0Q29tbWl0SWR4IDogLTE7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIC8vIEEgcmFuZ2UgdGhhdCBjcm9zc2VzIGEgY2hhaW4gc2VhbSBpcyB3YWxrZWQgbGVnIGJ5IGxlZzogdGhlIHRhaWwgb2YgdGhlXG4gICAgLy8gbGVnIGl0IHN0YXJ0ZWQgaW4sIGV2ZXJ5IGxlZyBpbiBiZXR3ZWVuIHdob2xlLCB0aGVuIHRoZSBoZWFkIG9mIHRoZSBsZWdcbiAgICAvLyBpdCBlbmRzIGluLiBCYWNrd2FyZHMgcmFuZ2VzIHdhbGsgbm90aGluZyBhbmQgZ2l2ZSBgW11gLCBhcyBiZWZvcmUuXG4gICAgZm9yIChsZXQgbGVnID0gZnJvbUxlZzsgbGVnIDw9IHRvTGVnICYmIGxlZyA8IHRoaXMubGVncy5sZW5ndGg7IGxlZysrKSB7XG4gICAgICBjb25zdCBsb2cgPSB0aGlzLmxlZ3NbbGVnXS5sb2c7XG4gICAgICBjb25zdCBsbyA9IGxlZyA9PT0gZnJvbUxlZyA/IGFmdGVySWR4ICsgMSA6IDA7XG4gICAgICBjb25zdCBoaSA9IGxlZyA9PT0gdG9MZWcgPyB0by5sYXN0Q29tbWl0SWR4IDogbG9nLmxlbmd0aCAtIDE7XG4gICAgICBmb3IgKGxldCBpID0gbG87IGkgPD0gaGk7IGkrKykge1xuICAgICAgICBjb25zdCBidW5kbGUgPSBsb2dbaV07XG4gICAgICAgIGlmICghYnVuZGxlKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBidW5kbGUudHJhY2UpIGtleXMuYWRkKGVudHJ5LnBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShbLi4ua2V5c10uc29ydCgpKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBNYXJrcyAobGF3IDQ6IGJlc2lkZSB0aGUgbG9nLCBuZXZlciBpbiBpdCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgbWFyayhuYW1lOiBzdHJpbmcsIHN0b3A/OiBTdG9wPFRNZXRhPik6IE1hcmsgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRhcmdldCA9IHN0b3AgPz8gdGhpcy5hdCgpO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVudHJ5OiBNYXJrID0gT2JqZWN0LmZyZWV6ZSh7IG5hbWUsIHJ1bnRpbWVTdGFnZUlkOiB0YXJnZXQucnVudGltZVN0YWdlSWQsIHN0ZXA6IHRhcmdldC5zdGVwIH0pO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fbWFya3MuZmluZEluZGV4KChtKSA9PiBtLm5hbWUgPT09IG5hbWUpO1xuICAgIGlmIChleGlzdGluZyA+PSAwKSB0aGlzLl9tYXJrc1tleGlzdGluZ10gPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuX21hcmtzLnB1c2goZW50cnkpO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIG1hcmtzKCk6IHJlYWRvbmx5IE1hcmtbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoWy4uLnRoaXMuX21hcmtzXSk7XG4gIH1cblxuICBqdW1wVG9NYXJrKG5hbWU6IHN0cmluZyk6IE1vdmU8VE1ldGE+IHtcbiAgICBpZiAodGhpcy5zdG9wcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnZW1wdHknKTtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuX21hcmtzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHRoaXMucmVmdXNlKCdtaXNzJyk7XG4gICAgLy8gUmVzb2x2ZSBieSBydW50aW1lU3RhZ2VJZCBmaXJzdCDigJQgdGhlIGFkZHJlc3MgdGhhdCBzdXJ2aXZlcyBhIGNoYW5nZSBvZlxuICAgIC8vIHN0cmF0ZWd5IOKAlCBhbmQgZmFsbCBiYWNrIHRvIHRoZSByZW1lbWJlcmVkIHN0ZXAgb25seSBmb3IgdGhlIGJvb2tlbmRzLFxuICAgIC8vIHdoaWNoIGhhdmUgbm8gc3RhZ2UgaWQgb2YgdGhlaXIgb3duLlxuICAgIGNvbnN0IGJ5SWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZFxuICAgICAgPyB0aGlzLnN0b3BzLmZpbmQoKHN0b3ApID0+IHN0b3AucnVudGltZVN0YWdlSWQgPT09IGVudHJ5LnJ1bnRpbWVTdGFnZUlkKVxuICAgICAgOiB0aGlzLnN0b3BzW2VudHJ5LnN0ZXBdO1xuICAgIGlmICghYnlJZCkgcmV0dXJuIHRoaXMucmVmdXNlKCdtaXNzJywgdGhpcy5uZWFyZXN0VG8oZW50cnkucnVudGltZVN0YWdlSWQpKTtcbiAgICBpZiAoYnlJZC5zdGVwID09PSB0aGlzLnN0ZXApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhieUlkLnN0ZXApO1xuICB9XG5cbiAgLy8g4pSA4pSAIERyaWxsaW5nIChsYXcgMTogYSBzZXBhcmF0ZSBjdXJzb3IsIG5vdCBhIHNlY29uZCBwb3NpdGlvbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZHJpbGwobW91bnRSdW50aW1lU3RhZ2VJZDogc3RyaW5nKTogVGltZVRyYXZlbDxUTWV0YT4gfCB1bmRlZmluZWQge1xuICAgIC8vIE9uIGEgY2hhaW4sIHRoZSBtb3VudCBpcyBsb29rZWQgZm9yIGluIGV2ZXJ5IGxlZyDigJQgYSBzdWJmbG93IHRoYXQgcmFuXG4gICAgLy8gYmVmb3JlIHRoZSBwYXVzZSBpcyBpbiB0aGUgZmlyc3Qgc25hcHNob3QncyByZXN1bHRzLCBvbmUgdGhhdCByYW4gYWZ0ZXJcbiAgICAvLyBpcyBpbiB0aGUgc2Vjb25kJ3MuIElkcyBhcmUgdW5pcXVlIGFjcm9zcyBhIHNvdW5kIGNoYWluIChjaGFpbi50c1xuICAgIC8vIHJlZnVzZXMgb25lIHdoZXJlIHRoZXkgYXJlIG5vdCksIHNvIHRoZSBmaXJzdCBoaXQgaXMgdGhlIG9ubHkgaGl0LlxuICAgIGxldCByZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmVzdWx0OiBTdWJmbG93UmVzdWx0U2hhcGUgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgdGhpcy5zb3VyY2VzKSB7XG4gICAgICAvLyBBIHN0b3JlZCByZWNvcmRpbmcncyByZXN1bHRzIGFyZSBwYXJzZWQgSlNPTjogcmVhZCB0aGVtIGFzIGEgbWFwIG9ubHlcbiAgICAgIC8vIHdoZW4gdGhleSBhcmUgb25lLCBhbmQgYXMgXCJubyBzdWJmbG93c1wiIG90aGVyd2lzZS5cbiAgICAgIGlmICghaXNQbGFpbmlzaChzb3VyY2Uuc3ViZmxvd1Jlc3VsdHMpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGhpdCA9IHNvdXJjZS5zdWJmbG93UmVzdWx0c1ttb3VudFJ1bnRpbWVTdGFnZUlkXSBhcyBTdWJmbG93UmVzdWx0U2hhcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIHJlc3VsdHMgPSBzb3VyY2Uuc3ViZmxvd1Jlc3VsdHM7XG4gICAgICAgIHJlc3VsdCA9IGhpdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRyZWUgPSByZXN1bHQ/LnRyZWVDb250ZXh0O1xuICAgIGlmICghcmVzdWx0cyB8fCAhcmVzdWx0IHx8ICF0cmVlIHx8ICFBcnJheS5pc0FycmF5KHRyZWUuaGlzdG9yeSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBgcGF0aGAgaXMgdGhlIHN1YmZsb3cgUEFUSCDigJQgdGhlIHNhbWUgc3RyaW5nIGZvciBldmVyeSBpdGVyYXRpb24gb2YgYVxuICAgIC8vIG1vdW50IGluc2lkZSBhIGxvb3AuIGBtb3VudFJ1bnRpbWVTdGFnZUlkYCBpcyB0aGUgaXRlcmF0aW9uIGFjdHVhbGx5XG4gICAgLy8gb3BlbmVkLCBzbyBhIFVJIGNhbiBsYWJlbCBhbmQga2V5IHRocmVlIGRyaWxsIHBhbmVscyBvdmVyIGBzZngjMmAsXG4gICAgLy8gYHNmeCM4YCwgYHNmeCMxNGAgYXBhcnQgaW5zdGVhZCBvZiBjYWxsaW5nIGFsbCB0aHJlZSAnc2Z4Jy5cbiAgICBjb25zdCBjaGlsZFBhdGggPSByZXN1bHQuc3ViZmxvd0lkID8/IG1vdW50UnVudGltZVN0YWdlSWQ7XG4gICAgY29uc3QgY2hpbGQ6IFRpbWVUcmF2ZWxTb3VyY2UgPSB7XG4gICAgICAvLyBSb3dzIGFyZSBuYXJyb3dlZCBwZXIgYnVuZGxlIHdoZW4gdGhlIGNoaWxkIHJlYWRzIHRoZW0g4oCUIGEgc3RvcmVkXG4gICAgICAvLyByZWNvcmRpbmcncyBpbm5lciBoaXN0b3J5IG5lZWRzIG5vIGNhc3QgZWl0aGVyLlxuICAgICAgY29tbWl0TG9nOiB0cmVlLmhpc3RvcnksXG4gICAgICBpbml0aWFsU3RhdGU6IHRyZWUuaW5pdGlhbFN0YXRlLFxuICAgICAgZXhlY3V0aW9uVHJlZTogdHJlZS5zdGFnZUNvbnRleHRzLFxuICAgICAgLy8gTmVzdGVkIHN1YmZsb3cgcmVzdWx0cyBhcmUgbWVyZ2VkIFVQIGludG8gb25lIGZsYXQsIGR1YWwta2V5ZWQgbWFwLCBzb1xuICAgICAgLy8gdGhlIGNoaWxkIGNhbiBkcmlsbCBmdXJ0aGVyIHRocm91Z2ggdGhlIHNhbWUgbWFwLlxuICAgICAgc3ViZmxvd1Jlc3VsdHM6IHJlc3VsdHMsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEN1cnNvcjxUTWV0YT4oW2NoaWxkXSwgeyBzdHJhdGVneTogdGhpcy5vcHRpb25zLnN0cmF0ZWd5IH0sIGNoaWxkUGF0aCwgdGhpcywgbW91bnRSdW50aW1lU3RhZ2VJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZS1zdGVwIHBlci1zb3VyY2Ugc3RvcHMgaW50byBPTkUgYXhpcy5cbiAqXG4gKiBUaGUgSU5URVJJT1IgYm9va2VuZHMgZ286IGEgYCdzdGFydCdgIG9uIGFueSBsZWcgYnV0IHRoZSBmaXJzdCwgYW5kIGFuXG4gKiBgJ2VuZCdgIG9uIGFueSBsZWcgYnV0IHRoZSBsYXN0LCBhcmUgYm9va2VuZHMgb2YgYSBsZWcgYW5kIG5vdCBvZiB0aGUgcnVuIOKAlFxuICoga2VlcGluZyB0aGVtIHdvdWxkIHB1dCBcInRoZSBydW4gaXMgb3ZlclwiIGluIHRoZSBtaWRkbGUgb2YgdGhlIGF4aXMuIFRoZVxuICogY29tbWl0cyB0aGV5IGNvdmVyZWQgYXJlIG5vdCBvcnBoYW5lZDogYSBmb2xkIGFsd2F5cyByZXBsYXlzIGl0cyBsZWcgZnJvbVxuICogdGhhdCBsZWcncyBvd24gYmFzZSwgYW5kIGBjaGFuZ2VkU2luY2VgIHdhbGtzIGEgc2VhbS1jcm9zc2luZyByYW5nZSBsZWcgYnlcbiAqIGxlZyAoaW5jbHVkaW5nIHRoZSBoZWFkIG9mIHRoZSBsZWcgaXQgZW5kcyBpbikuIFRoZSBzdG9wcycgYGNvbW1pdElkeGAgL1xuICogYGxhc3RDb21taXRJZHhgIHJhbmdlcyBQQVJUSVRJT04gRUFDSCBMRUcsIG5ldmVyIHNwYW4gdGhlIHNlYW06IGEgc3RvcCdzXG4gKiByYW5nZSBlbmRzIGF0IGl0cyBvd24gbGVnJ3MgbGFzdCBpbmRleCwgYW5kIHRoZSBuZXh0IGxlZydzIGZpcnN0IHN0b3Agb3BlbnNcbiAqIGF0IHRoYXQgbGVnJ3MgMC5cbiAqL1xuZnVuY3Rpb24gY2hhaW5TdG9wczxUTWV0YT4ocGVyU291cmNlOiByZWFkb25seSBTdG9wPFRNZXRhPltdW10pOiBTdG9wPFRNZXRhPltdIHtcbiAgLy8gXCJJbnRlcmlvclwiIGlzIG1lYXN1cmVkIGFnYWluc3QgdGhlIGxlZ3MgdGhhdCBhY3R1YWxseSBDT05UUklCVVRFIHN0b3BzOiBhXG4gIC8vIGxlZyB3aG9zZSBsb2cgd2FzIGVtcHR5IGhhcyBubyBib29rZW5kcyB0byBkcm9wIGFuZCBtdXN0IG5vdCBtYWtlIGl0c1xuICAvLyBuZWlnaGJvdXIncyBgJ3N0YXJ0J2Agb3IgYCdlbmQnYCBpbnRlcmlvciDigJQgdGhlIGNoYWluZWQgYXhpcyBzdGlsbCBvcGVuc1xuICAvLyB3aXRoIHRoZSBmaXJzdCBzdG9wIHRoYXQgZXhpc3RzIGFuZCBjbG9zZXMgd2l0aCB0aGUgbGFzdC5cbiAgY29uc3QgY29udHJpYnV0aW5nID0gcGVyU291cmNlLm1hcCgoc3RvcHMpID0+IHN0b3BzLmxlbmd0aCA+IDApO1xuICBjb25zdCBmaXJzdExlZyA9IGNvbnRyaWJ1dGluZy5pbmRleE9mKHRydWUpO1xuICBjb25zdCBsYXN0TGVnID0gY29udHJpYnV0aW5nLmxhc3RJbmRleE9mKHRydWUpO1xuICBjb25zdCBvdXQ6IFN0b3A8VE1ldGE+W10gPSBbXTtcbiAgZm9yIChjb25zdCBbc291cmNlSWR4LCBzdG9wc10gb2YgcGVyU291cmNlLmVudHJpZXMoKSkge1xuICAgIGZvciAoY29uc3Qgc3RvcCBvZiBzdG9wcykge1xuICAgICAgaWYgKHNvdXJjZUlkeCA+IGZpcnN0TGVnICYmIHN0b3Aua2luZCA9PT0gJ3N0YXJ0JykgY29udGludWU7XG4gICAgICBpZiAoc291cmNlSWR4IDwgbGFzdExlZyAmJiBzdG9wLmtpbmQgPT09ICdlbmQnKSBjb250aW51ZTtcbiAgICAgIG91dC5wdXNoKHsgLi4uc3RvcCwgc3RlcDogb3V0Lmxlbmd0aCwgc291cmNlSWR4IH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIE9wZW4gYSByZWFkZXIncyBjdXJzb3Igb3ZlciBhIGZpbmlzaGVkIHJ1bi5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXhlY3V0ZXMgYW55dGhpbmc6IGBzbmFwc2hvdGAgaXMgYSByZWNvcmQgb2YgYSBydW4gdGhhdCBhbHJlYWR5XG4gKiBoYXBwZW5lZCwgYW5kIGV2ZXJ5IHF1ZXN0aW9uIGlzIGFuc3dlcmVkIGJ5IHJlYWRpbmcgaXQuIEEgc3RvcmVkIEpTT05cbiAqIHNuYXBzaG90IHdvcmtzIGV4YWN0bHkgbGlrZSBhIGxpdmUgb25lIOKAlCBzaW5jZSA5LjE4LjAgaXRzIGBjb21taXRMb2dgIG1heSBiZVxuICogYW4gdW52YWxpZGF0ZWQgYHVua25vd25bXWAsIG5hcnJvd2VkIHBlciBidW5kbGUgd2hlcmUgdGhlIGZvbGQgcmVhZHMgaXQsIHNvXG4gKiBhIHJlcGxheWVkIHJlY29yZGluZyBuZWVkcyBubyBjYXN0LlxuICpcbiAqIEBwYXJhbSBzbmFwc2hvdCBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAsIG9yIGFueSBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogICBzaGFwZSDigJQgaW5jbHVkaW5nIG9uZSByb3VuZC10cmlwcGVkIHRocm91Z2ggSlNPTiwgb3IgYSBzdWJmbG93IHN1YnRyZWVcbiAqICAgKGBnZXRTdWJ0cmVlU25hcHNob3QoKWAsIHdob3NlIGxvZyBpcyBzcGVsbGVkIGBoaXN0b3J5YCkuIEFuIEFSUkFZIG9mIHRoZW1cbiAqICAgaXMgYSBDSEFJTjogYSBwYXVzZSBhbmQgaXRzIHJlc3VtZSByZWFkIGFzIG9uZSBheGlzIChzZWUgYmVsb3cpLlxuICogQHBhcmFtIG9wdGlvbnMgYHN0cmF0ZWd5YCBjaG9vc2VzIGhvdyBzdG9wcyBhcmUgZGVyaXZlZCAoZGVmYXVsdDpcbiAqICAgYGNvbW1pdFN0b3BzYCwgb25lIHN0b3AgcGVyIGV4ZWN1dGVkIHN0YWdlKTsgYG1hcmtzYCBzZWVkcyB0aGUgY3Vyc29yIHdpdGhcbiAqICAgYm9va21hcmtzLCBlLmcuIHJlc3RvcmVkIGZyb20gYSBzYXZlZCByZWFkaW5nIHNlc3Npb24uXG4gKlxuICogQHRocm93cyB3aGVuIGEgY2hhaW4gaXMgbm90IGluIHJ1biBvcmRlciwgb3IgaXRzIGxlZ3MgYXJlIG5vdCBmcm9tIG9uZVxuICogICBsaW5lYWdlIOKAlCB0aHJlZSBjaGVja3MsIGVhY2ggd2l0aCBpdHMgb3duIHJlYXNvbiAoc2VlIGBjaGFpbi50c2ApOlxuICogICBubyBgcnVudGltZVN0YWdlSWRgIG1heSBhcHBlYXIgaW4gdHdvIGxlZ3M7IGVhY2ggbGVnJ3MgZmlyc3QgZXhlY3V0aW9uXG4gKiAgIGluZGV4IG11c3QgYmUgcGFzdCB0aGUgcHJldmlvdXMgbGVnJ3MgbGFzdCAodGhlIGVuZ2luZSBuZXZlciByZXNldHMgdGhlXG4gKiAgIGNvdW50ZXIgYWNyb3NzIGEgcmVzdW1lKTsgYW5kIGVhY2ggbGVnJ3MgYGluaXRpYWxTdGF0ZWAgbXVzdCBkZWVwLWVxdWFsXG4gKiAgIHRoZSBzdGF0ZSB0aGUgbGVncyBiZWZvcmUgaXQgZm9sZCB0byDigJQgb24gYSByZXN1bWUgdGhhdCBiYXNlIElTIHRoZSBzdGF0ZVxuICogICBhdCB0aGUgcGF1c2UsIHNvIGEgZm9yZWlnbiBsZWcgd2hvc2UgaW5kaWNlcyBtZXJlbHkgaGFwcGVuIHRvIGJlIGhpZ2hlclxuICogICBpcyByZWZ1c2VkIHRvby4gVGhlIHRoaXJkIGNoZWNrIHJ1bnMgb25seSB3aGVyZSB0aGUgcmVjb3JkIGFsbG93cyBpdDogdGhlXG4gKiAgIGxhdGVyIGxlZyBtdXN0IGNhcnJ5IGFuIGBpbml0aWFsU3RhdGVgIGFuZCB0aGUgZWFybGllciBsZWdzIG11c3QgZm9sZCBmcm9tXG4gKiAgIGEgcmVhbCBiYXNlIHdpdGggbm8gdW5yZWFkYWJsZSByb3dzOyBvdGhlcndpc2UgKGFuIG9sZGVyIHJlY29yZGluZyB3aXRoXG4gKiAgIG5vIGJhc2UpIHRoZSBjaGFpbiByZXN0cyBvbiB0aGUgdHdvIGluZGV4IGNoZWNrcyBhbG9uZSwgYW5kIHRoZSBmb2xkJ3NcbiAqICAgYGJhc2lzYCBzYXlzIHdoYXQgaXQgc3Rvb2Qgb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHR0ID0gdGltZVRyYXZlbChleGVjdXRvci5nZXRTbmFwc2hvdCgpKTtcbiAqIHR0Lmp1bXBUbygnc2NvcmUtcmlzayM0Jyk7XG4gKiBjb25zb2xlLmxvZyh0dC5jaGFuZ2VkU2luY2UoKSk7ICAgICAgICAvLyBbJ3Jpc2tTY29yZScsICd0aWVyJ11cbiAqIGNvbnNvbGUubG9nKHR0LnN0YXRlQXQoKS5zdGF0ZSk7ICAgICAgIC8vIHN0YXRlIGFzIHRoYXQgc3RhZ2UgbGVmdCBpdFxuICogdHQubWFyaygndGhlIGJhZCBvbmUnKTtcbiAqIGNvbnN0IGlubmVyID0gdHQuZHJpbGwoJ3NmLXBheW1lbnQjNycpOyAvLyBhIHNlcGFyYXRlIGN1cnNvciwgaXRzIG93biBsb2dcbiAqXG4gKiAvLyBBIHBhdXNlIGFuZCBpdHMgcmVzdW1lLCByZWFkIGFzIE9ORSBheGlzOlxuICogY29uc3QgY2hhaW5lZCA9IHRpbWVUcmF2ZWwoW3BhdXNlZFNuYXBzaG90LCByZXN1bWVkU25hcHNob3RdKTtcbiAqIGNoYWluZWQubGFzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcnVuJ3MgcmVhbCBlbmRcbiAqIGNoYWluZWQuYXQoKSEuc291cmNlSWR4OyAgICAgICAgICAgICAgICAvLyAxIOKAlCB3aGljaCBsZWcgdGhlIGluZGljZXMgYXJlIGluXG4gKiBjaGFpbmVkLmp1bXBUbygnYXBwcm92ZSMzJyk7ICAgICAgICAgICAgLy8gZmluZHMgaXQgaW4gZWl0aGVyIGxlZ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVHJhdmVsPFRNZXRhID0gdW5rbm93bj4oXG4gIHNuYXBzaG90OiBUaW1lVHJhdmVsU291cmNlIHwgcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdLFxuICBvcHRpb25zOiBUaW1lVHJhdmVsT3B0aW9uczxUTWV0YT4gPSB7fSxcbik6IFRpbWVUcmF2ZWw8VE1ldGE+IHtcbiAgY29uc3Qgc291cmNlcyA9IEFycmF5LmlzQXJyYXkoc25hcHNob3QpID8gKHNuYXBzaG90IGFzIHJlYWRvbmx5IFRpbWVUcmF2ZWxTb3VyY2VbXSkgOiBbc25hcHNob3QgYXMgVGltZVRyYXZlbFNvdXJjZV07XG4gIC8vIEEgb25lLWVsZW1lbnQgYXJyYXkgaXMgbm90IGEgY2hhaW46IGl0IGlzIHRoZSBwbGFpbiBjdXJzb3IsIGFuZCBza2lwcyB0aGVcbiAgLy8gbGluZWFnZSBjaGVja3MgYSBzaW5nbGUgc291cmNlIGNhbm5vdCBmYWlsLlxuICBpZiAoc291cmNlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zdCByZWZ1c2FsID0gcmVmdXNlQ2hhaW4oc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gcmVhZFNvdXJjZShzb3VyY2UpKSk7XG4gICAgaWYgKHJlZnVzYWwpIHRocm93IG5ldyBFcnJvcihyZWZ1c2FsKTtcbiAgfVxuICByZXR1cm4gbmV3IEN1cnNvcjxUTWV0YT4oc291cmNlcywgb3B0aW9ucyk7XG59XG4iXX0=
@@ -21,4 +21,4 @@
21
21
  * `getSnapshot()`.
22
22
  */
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RpbWUtdHJhdmVsL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHRpbWUtdHJhdmVsL3R5cGVzLnRzIOKAlCB0aGUgc2hhcGVzIG9mIHRoZSByZWFkZXIncyBjdXJzb3IuXG4gKlxuICogV0hZIFRISVMgTU9EVUxFIEVYSVNUUyAoY29udGV4dCBmb3IgZnV0dXJlIHJlYWRlcnMsIGh1bWFuIG9yIExMTSk6XG4gKiBUaW1lIHRyYXZlbCBpbiBmb290cHJpbnRqcyBpcyBhIFJFQURFUidTIGN1cnNvciBvdmVyIGEgRklOSVNIRUQgdHJhY2UsIHdpdGhcbiAqIGEgZm9sZCBhdCBlYWNoIHN0b3AuIEl0IGlzIG5vdCB0aGUgV2Fsa2VyIOKAlCB0aGUgZW5naW5lJ3MgdHJhdmVyc2FsIOKAlCBhbmQgaXRcbiAqIG11c3QgbmV2ZXIgYmVjb21lIGEgc2Vjb25kIGxpdmUgY3Vyc29yOiBub3RoaW5nIGhlcmUgY2FuIG1vdmUsIHJlLXJ1biBvclxuICogbXV0YXRlIGFuIGV4ZWN1dGlvbi4gRXZlcnkgY29uc3VtZXIgKGEgd2h5LXBhbmVsLCBhIGZsb3cgdmlldywgYSBjaGFydFxuICogZGFzaGJvYXJkKSB3YXMgd3JpdGluZyB0aGUgc2FtZSBjb21taXQtaW5kZXggYXJpdGhtZXRpYyBieSBoYW5kLCBmcm9tIHRoZVxuICogc2FtZSBjb21taXQgbG9nLCBhbmQgZGlzYWdyZWVpbmcgYWJvdXQgdGhlIGFuc3dlcnMuIFRoaXMgaXMgdGhhdCBhcml0aG1ldGljLFxuICogb25jZSwgaW4gdGhlIGxpYnJhcnkgdGhhdCBvd25zIHRoZSBzdWJzdHJhdGUuXG4gKlxuICogREFHIHBvc2l0aW9uOiBtZW1vcnkg4oaQIHRpbWUtdHJhdmVsLiBUaGlzIG1vZHVsZSBtYXkgaW1wb3J0IE9OTFkgZnJvbVxuICogbWVtb3J5LyBwbHVzIGBlbmdpbmUvcnVudGltZVN0YWdlSWRgIOKAlCB0aGUgemVyby1kZXBlbmRlbmN5IGlkIGdyYW1tYXIgdGhhdFxuICogZGVmaW5lcyB3aGF0IGEgYHJ1bnRpbWVTdGFnZUlkYCBtZWFucywgYW5kIHRoZXJlZm9yZSB0aGUgb25lIHBpZWNlIG9mXG4gKiBlbmdpbmUvIGEgcmVhZGVyIG9mIGlkcyBjYW5ub3QgaG9uZXN0bHkgcmUtaW1wbGVtZW50LiBSZWNvcmRlcnMsIHRyYXZlcnNhbFxuICogYW5kIHJ1bm5lciBtdXN0IG5ldmVyIGJlIGltcG9ydGVkIGhlcmU7IHRoZVxuICogc25hcHNob3QgYXJyaXZlcyBhcyBhIHBsYWluIHN0cnVjdHVyYWwgc2hhcGUgKHtAbGluayBGb2xkU291cmNlfSxcbiAqIHtAbGluayBUaW1lVHJhdmVsU291cmNlfSkgc28gYSBzdG9yZWQgSlNPTiB0cmFjZSB3b3JrcyBleGFjdGx5IGxpa2UgYSBsaXZlXG4gKiBgZ2V0U25hcHNob3QoKWAuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWdpc3RlcmVkQ29kZSB9IGZyb20gJy4uL21lbW9yeS9ob25lc3R5LmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIFNvdXJjZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQW55dGhpbmcgdGhhdCBjYXJyaWVzIGEgY29tbWl0IGxvZyBhbmQgKGlkZWFsbHkpIGl0cyBmb2xkIGJhc2UuXG4gKlxuICogVHdvIGZpZWxkIHNwZWxsaW5ncywgYmVjYXVzZSB0aGUgbGlicmFyeSBhbHJlYWR5IGhhcyB0d286IHRoZSBydW4ncyBsb2cgaXNcbiAqIGBjb21taXRMb2dgIChgZ2V0U25hcHNob3QoKWApLCBhIHN1YmZsb3cncyBpcyBgaGlzdG9yeWBcbiAqIChgZ2V0U3VidHJlZVNuYXBzaG90KClgIC8gYHN1YmZsb3dSZXN1bHRzWy4uLl0udHJlZUNvbnRleHRgKS4gQm90aCBhcmVcbiAqIGFjY2VwdGVkIHNvIGEgY2FsbGVyIG5ldmVyIGhhcyB0byByZXNoYXBlIGEgc25hcHNob3QgdG8gYXNrIGEgcXVlc3Rpb24uXG4gKlxuICogQk9USCBTUEVMTElOR1MgVEFLRSBgcmVhZG9ubHkgdW5rbm93bltdYCAoOS4xOC4wKS4gQSBsaXZlIHNuYXBzaG90IGhhbmRzXG4gKiBvdmVyIHJlYWwge0BsaW5rIENvbW1pdEJ1bmRsZX1zIGFuZCBpcyBhc3NpZ25hYmxlIGV4YWN0bHkgYXMgYmVmb3JlOyBhXG4gKiBTVE9SRUQgcmVjb3JkaW5nIGlzIHBhcnNlZCBKU09OLCBhbmQgYSBjYXJlZnVsIGNvbnN1bWVyIHdpbGwgbm90IGNsYWltIHRoYXRcbiAqIHdoYXQgY2FtZSBiYWNrIG9mZiBkaXNrIGlzIGEgYENvbW1pdEJ1bmRsZWAuIFRoZSBuYXJyb3dpbmcgdGhlcmVmb3JlIGhhcHBlbnNcbiAqIEhFUkUsIHBlciBidW5kbGUsIHdoZXJlIHRoZSBmb2xkIGFjdHVhbGx5IHJlYWRzIG9uZSDigJQgdGhlIG9ubHkgcGxhY2UgdGhhdFxuICogY2FuIGhvbmVzdGx5IGRvIGl0LiBBbiBlbnRyeSB0aGF0IGlzIG5vdCBhIGJ1bmRsZSBiZWNvbWVzIGEgR0FQOiBpdCBrZWVwc1xuICogaXRzIGluZGV4IChzbyBldmVyeSBgY29tbWl0SWR4YCBzdGlsbCBhZGRyZXNzZXMgdGhlIHNhbWUgcG9zaXRpb24pLCBpdFxuICogY29udHJpYnV0ZXMgbm8gc3RhdGUsIGl0IGdldHMgbm8gc3RvcCwgYW5kIGFueSBmb2xkIHRoYXQgY3Jvc3NlcyBpdCByZXBvcnRzXG4gKiBpdCBpbiB7QGxpbmsgRm9sZGVkU3RhdGUuc2tpcHBlZH0gd2l0aCB0aGUgaW5kZXggYW5kIHRoZSByZWFzb24uXG4gKlxuICogRVZFUlkgRklFTEQgSVMgT1BUSU9OQUwsIGRlbGliZXJhdGVseSB0aGUgc2FtZSBzaGFwZSB7QGxpbmsgVGltZVRyYXZlbFNvdXJjZX1cbiAqIGhhczogYSBjb25zdW1lcidzIHN0b3JlZC1yZWNvcmRpbmcgdHlwZSAoYGNvbW1pdExvZz86IHJlYWRvbmx5IHVua25vd25bXWApXG4gKiBkcml2ZXMgYHN0YXRlQXRgIGFuZCBgdGltZVRyYXZlbGAgYWxpa2UsIHdpdGggbm8gY2FzdCBhdCBlaXRoZXIuIEEgc291cmNlXG4gKiB3aXRoIG5laXRoZXIgc3BlbGxpbmcgcHJlc2VudCBmb2xkcyB0byBpdHMgYmFzZSBhbmQgcmVwb3J0c1xuICogYHRocm91Z2hDb21taXRJZHg6IC0xYCDigJQgdGhlIHRydXRoZnVsIGFuc3dlciBmb3IgYSBsb2cgdGhhdCB3YXMgbm90IHRoZXJlLlxuICpcbiAqIFRISVMgSVMgQU4gSU5QVVQgU0hBUEUuIE5vdGhpbmcgdHlwZWQgYXMgYSBgRm9sZFNvdXJjZWAgcHJvbWlzZXMgdGhhdCBpdHNcbiAqIHJvd3MgYXJlIGJ1bmRsZXM7IGNvZGUgdGhhdCB3YW50cyB0byByZWFkIGBDb21taXRCdW5kbGVgIGZpZWxkcyBiYWNrIE9VVCBvZlxuICogb25lIG11c3QgbmFycm93IGVhY2ggcm93IHdpdGggYGlzQ29tbWl0QnVuZGxlYCBmaXJzdC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9sZFNvdXJjZSA9IHtcbiAgLyoqIFRoZSBydW4ncyBjb21taXQgbG9nLiBNYXkgYmUgQUJTRU5UIChhIHN0b3JlZCByZWNvcmRpbmcncyBvcHRpb25hbCBmaWVsZCk6IGFuIGFic2VudCBsb2cgZm9sZHMgdG8gdGhlIGJhc2UuICovXG4gIHJlYWRvbmx5IGNvbW1pdExvZz86IHJlYWRvbmx5IHVua25vd25bXTtcbiAgLyoqIEEgc3ViZmxvdyBzdWJ0cmVlJ3Mgb3duIGxvZyDigJQgdGhlIHNhbWUgdGhpbmcgdW5kZXIgaXRzIG90aGVyIG5hbWUuICovXG4gIHJlYWRvbmx5IGhpc3Rvcnk/OiByZWFkb25seSB1bmtub3duW107XG4gIHJlYWRvbmx5IGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuLyoqXG4gKiBBIHNuYXBzaG90LXNoYXBlZCBzb3VyY2UgZm9yIHtAbGluayB0aW1lVHJhdmVsfS5cbiAqXG4gKiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbCBhbmQgdGhlIHN0cnVjdHVyYWwgb25lcyBhcmUgYHVua25vd25gICg5LjE4LjApLCBzb1xuICogYSBsaXZlIGBnZXRTbmFwc2hvdCgpYCBpcyBhc3NpZ25hYmxlIGV4YWN0bHkgYXMgaXQgd2FzIEFORCBzbyBpcyBhIHN0b3JlZFxuICogcmVjb3JkaW5nIGEgY29uc3VtZXIgdHlwZWQgaG9uZXN0bHkg4oCUIGBjb21taXRMb2c6IHJlYWRvbmx5IHVua25vd25bXWAsXG4gKiBgZXhlY3V0aW9uVHJlZTogdW5rbm93bmAg4oCUIGJlY2F1c2UgcGFyc2VkIEpTT04gaXMgbm90IGEgYFN0YWdlU25hcHNob3RgXG4gKiB1bnRpbCBzb21ldGhpbmcgc2F5cyBzby4gVGhlIG5hcnJvd2luZyBoYXBwZW5zIGluc2lkZTogcm93cyBwZXIgYnVuZGxlXG4gKiAoc2VlIHtAbGluayBGb2xkU291cmNlfSksIHRoZSB0cmVlIGFuZCB0aGUgc3ViZmxvdyByZXN1bHRzIGFzIHBsYWluXG4gKiBvYmplY3RzLCBhbnl0aGluZyBlbHNlIHJlYWQgYXMgYWJzZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVUcmF2ZWxTb3VyY2Uge1xuICAvKiogVGhlIHJ1bidzIGNvbW1pdCBsb2cuIFNlZSB7QGxpbmsgRm9sZFNvdXJjZX0gb24gd2h5IHRoaXMgaXMgYHVua25vd25bXWAuICovXG4gIHJlYWRvbmx5IGNvbW1pdExvZz86IHJlYWRvbmx5IHVua25vd25bXTtcbiAgLyoqIEEgc3ViZmxvdyBzdWJ0cmVlJ3Mgb3duIGxvZyDigJQgdGhlIHNhbWUgdGhpbmcgdW5kZXIgaXRzIG90aGVyIG5hbWUuICovXG4gIHJlYWRvbmx5IGhpc3Rvcnk/OiByZWFkb25seSB1bmtub3duW107XG4gIHJlYWRvbmx5IGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogVGhlIHJ1bidzIGV4ZWN1dGlvbiB0cmVlIChgZ2V0U25hcHNob3QoKS5leGVjdXRpb25UcmVlYCkg4oCUIHdoYXQgbWFrZXMgYVxuICAgKiBtb3VudCBzdG9wIHNheSBga2luZDogJ21vdW50J2AgYXV0aG9yaXRhdGl2ZWx5IGluc3RlYWQgb2YgYnkgc2hhcGUuIEEgbGl2ZVxuICAgKiBzbmFwc2hvdCBoYW5kcyBhIHtAbGluayBTdGFnZVNuYXBzaG90fTsgYSBzdG9yZWQgb25lIGhhbmRzIHBhcnNlZCBKU09OLFxuICAgKiB3aGljaCBpcyByZWFkIGFzIGEgdHJlZSB3aGVuIGl0IGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBpZ25vcmVkIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU/OiBTdGFnZVNuYXBzaG90IHwgdW5rbm93bjtcbiAgLyoqXG4gICAqIER1YWwta2V5ZWQgc3ViZmxvdyByZXN1bHRzIChgZ2V0U25hcHNob3QoKS5zdWJmbG93UmVzdWx0c2ApIOKAlCB3aGF0XG4gICAqIHtAbGluayBUaW1lVHJhdmVsLmRyaWxsfSBuYXZpZ2F0ZXMuIEFic2VudCwgb3Igbm90IGEgcGxhaW4gb2JqZWN0IOKHklxuICAgKiBgZHJpbGxgIGFsd2F5cyByZXR1cm5zIGB1bmRlZmluZWRgLCB3aGljaCBpcyB0aGUgaG9uZXN0IGFuc3dlciBmb3IgYSBydW5cbiAgICogd2l0aCBubyBzdWJmbG93cy5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duO1xufVxuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiBhIHNvdXJjZSdzIGxvZyB0aGF0IGNvdWxkIG5vdCBiZSByZWFkIGFzIGEge0BsaW5rIENvbW1pdEJ1bmRsZX0uXG4gKlxuICogUmVwb3J0ZWQgcmF0aGVyIHRoYW4gdGhyb3duOiBhIHN0b3JlZCByZWNvcmRpbmcgd2l0aCBvbmUgY29ycnVwdCByb3cgaXNcbiAqIHN0aWxsIHdvcnRoIHJlYWRpbmcsIGFuZCBhIHJlYWRlciB0aGF0IGlzIHRvbGQgV0hJQ0ggaW5kZXggaXQgbG9zdCBjYW4gc2F5XG4gKiBzbyBvbiBzY3JlZW4uIGBpbmRleGAgaXMgdGhlIHBvc2l0aW9uIGluIHRoYXQgc291cmNlJ3Mgb3duIGxvZy5cbiAqXG4gKiBSZWdpc3RyeSBjb2RlOiBgJ2xvZy1nYXAnYCAoYG1lbW9yeS9ob25lc3R5LnRzIMK3IEhPTkVTVFlfQ09ERVNgLCBzZXJ2ZWQgb25cbiAqIGBmb290cHJpbnRqcy90cmFjZWApIHNheXMgd2hhdCBhIGdhcCBtZWFucy4gQSBnYXAgY2FycmllcyBubyBgY29kZWAgZmllbGQg4oCUXG4gKiBpdCBpcyByZWdpc3RlcmVkIHNvIGEgcmVhZGVyIGV4cGxhaW5zIGl0IGZyb20gdGhlIHNhbWUgcGxhY2UgYXMgdGhlIG90aGVyXG4gKiBob25lc3R5IHNpZ25hbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nR2FwIHtcbiAgLyoqIEFSUkFZIElOREVYIGluIHRoZSBzb3VyY2UncyBsb2cg4oCUIHRoZSBhZGRyZXNzIHRoZSBnYXAgb2NjdXBpZXMuICovXG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIC8qKiBXaHkgaXQgaXMgbm90IGEgYnVuZGxlLCBpbiB3b3JkcyBhIFVJIGNhbiBwcmludC4gKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgCBTdG9wcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBXaGF0IGtpbmQgb2YgcG9zaXRpb24gYSBzdG9wIGlzLlxuICpcbiAqIC0gYCdjb21taXQnYCDigJQgb25lIGV4ZWN1dGVkIHN0YWdlLlxuICogLSBgJ21vdW50J2AgIOKAlCBhIHN1YmZsb3cgbW91bnQ6IHRoZSBib3VuZGFyeSB3aG9zZSBpbm5lciBzdGFnZXMgbGl2ZSBpbiB0aGVcbiAqICAgc3ViZmxvdydzIE9XTiBsb2cgKGRyaWxsIGludG8gaXQgd2l0aCB7QGxpbmsgVGltZVRyYXZlbC5kcmlsbH0pLlxuICogLSBgJ3N0YXJ0J2AgIOKAlCB0aGUgYm9va2VuZCBCRUZPUkUgdGhlIGZpcnN0IHN0b3Agb2YgVEhJUyBheGlzLiBXaGF0IGl0IGZvbGRzXG4gKiAgIGRlcGVuZHMgb24gdGhlIHN0cmF0ZWd5LCBhbmQgdGhlIGRpZmZlcmVuY2UgaXMgbG9hZC1iZWFyaW5nOlxuICogICAtIG9uIGEgc3RyYXRlZ3kgdGhhdCBrZWVwcyBldmVyeSBzdGFnZSAoYGNvbW1pdFN0b3BzYCwgdGhlIG9uZSBzaGlwcGVkKVxuICogICAgIGl0IGlzIHRoZSBydW4ncyBmb2xkIEJBU0Ug4oCUIHRoZSBzdGF0ZSBubyBjb21taXQgaW5kZXggY2FuIHJlYWNoIOKAlCBwbHVzXG4gKiAgICAgYW55IGlkLWxlc3MgbGVhZGluZyBjb21taXQsIHdoaWNoIGlzIGhvdyBhIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWRcbiAqICAgICByZWFjaGVzIHRoZSBsb2cuIFNvIG9uIGEgZHJpbGxlZCBjdXJzb3IgaXQgaXMgZXhhY3RseSBcInRoZSBpbnB1dCB0aGlzXG4gKiAgICAgc3ViZmxvdyBiZWdhbiB3aXRoXCIuXG4gKiAgIC0gb24gYSBzdHJhdGVneSB0aGF0IEZJTFRFUlMgc3RhZ2VzIG91dCwgdGhlIGNvbW1pdHMgb2YgdGhlIGRyb3BwZWRcbiAqICAgICBzdGFnZXMgdGhhdCByYW4gQkVGT1JFIHRoZSBmaXJzdCBzdXJ2aXZpbmcgc3RvcCBoYXZlIHRvIGZvbGQgc29tZXdoZXJlLFxuICogICAgIGFuZCBgJ3N0YXJ0J2AgaXMgdGhlIG9ubHkgcGxhY2UgdGhleSBjYW4gZ28gd2l0aG91dCBvcnBoYW5pbmcgdGhlbS4gSXRzXG4gKiAgICAgZm9sZCBpcyB0aGVuIHRoZSBiYXNlIFBMVVMgdGhhdCBwcm9sb2d1ZSDigJQgdGhlIHN0YXRlIHRoZSBmaXJzdCBzdG9wXG4gKiAgICAgUkVBRCwgbm90IHRoZSBydW4ncyByYXcgYmFzZS4gU3VjaCBhIHN0YXJ0IE1VU1Qgc2F5IHNvIGJ5IHNldHRpbmdcbiAqICAgICB7QGxpbmsgU3RvcC5wcm9sb2d1ZX07IGEgcmVuZGVyZXIgdGhhdCBtZWFucyBcInRoZSBydW4ncyByYXcgYmFzZVwiIHJlYWRzXG4gKiAgICAgYGtpbmQgPT09ICdzdGFydCcgJiYgIXN0b3AucHJvbG9ndWVgLCBhbmQgZ2V0cyBhIHRydWUgYW5zd2VyIG9uIGV2ZXJ5XG4gKiAgICAgYXhpcyBpbnN0ZWFkIG9mIG9uZSB0aGF0IGlzIHRydWUgb25seSBvbiB0aGUgbGlicmFyeSdzIG93bi5cbiAqIC0gYCdlbmQnYCAgICDigJQgdGhlIGJvb2tlbmQgYWZ0ZXIgdGhlIGxhc3QgY29tbWl0OiBcInRoZSBydW4gaXMgb3ZlclwiLiBJdHNcbiAqICAgZm9sZCBlcXVhbHMgdGhlIGZpbmFsIHN0YWdlJ3MgYnkgY29uc3RydWN0aW9uOyB0aGUgdHdvIGFyZSBkaWZmZXJlbnRcbiAqICAgcXVlc3Rpb25zLCBub3QgYSBkdXBsaWNhdGVkIGFuc3dlci5cbiAqXG4gKiBOT1QgV0lERU5FRCwgREVMSUJFUkFURUxZLiBBIGZpbHRlcmluZyBzdHJhdGVneSdzIHN0YXJ0IGNvdWxkIGhhdmUgYmVlbiBhXG4gKiBmaWZ0aCBraW5kIChgJ3Byb2xvZ3VlJ2ApLCBidXQgYWRkaW5nIGEgbWVtYmVyIHRvIHRoaXMgdW5pb24gYnJlYWtzIGV2ZXJ5XG4gKiBjb25zdW1lciB3aXRoIGFuIGV4aGF1c3RpdmUgYHN3aXRjaGAgb3ZlciBpdCDigJQgYSBjb21waWxlIGVycm9yIGhhbmRlZCB0b1xuICogcmVhZGVycyB3aG8gZGlkIG5vdGhpbmcgd3JvbmcuIEEgZmxhZyBvbiB0aGUgc3RvcCBzYXlzIHRoZSBzYW1lIHRoaW5nIGFuZFxuICogY29zdHMgYW4gZXhpc3RpbmcgcmVhZGVyIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFN0b3BLaW5kID0gJ2NvbW1pdCcgfCAnbW91bnQnIHwgJ3N0YXJ0JyB8ICdlbmQnO1xuXG4vKipcbiAqIE9uZSBwb3NpdGlvbiBhIHJlYWRlcidzIGN1cnNvciBjYW4gcmVzdCBhdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNZXRhIHRoZSBTVFJBVEVHWSdTIG93biB2b2NhYnVsYXJ5LCBjYXJyaWVkIG9wYXF1ZWx5IGluXG4gKiAgIHtAbGluayBTdG9wLm1ldGF9LiBEZWZhdWx0cyB0byBgdW5rbm93bmAsIHNvIGV2ZXJ5IHByZS05LjE4IGBTdG9wYCBzdGlsbFxuICogICBtZWFucyB3aGF0IGl0IG1lYW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3A8VE1ldGEgPSB1bmtub3duPiB7XG4gIC8qKiBQb3NpdGlvbiBpbiBgVGltZVRyYXZlbC5zdG9wc2Ag4oCUIDAtYmFzZWQsIHRoZSBjdXJzb3IncyBzdGVwIG51bWJlci4gKi9cbiAgcmVhZG9ubHkgc3RlcDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHN0YWdlIHRoaXMgc3RvcCBpczogYFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleGAuXG4gICAqIGAnJ2AgZm9yIHRoZSBgJ3N0YXJ0J2AgLyBgJ2VuZCdgIGJvb2tlbmRzLCB3aGljaCBhcmUgbm90IHN0YWdlcy5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBUlJBWSBJTkRFWCBvZiB0aGlzIHN0b3AncyBGSVJTVCBjb21taXQgYnVuZGxlOyBgLTFgIGF0IGAnc3RhcnQnYC5cbiAgICogVGhpcyBpcyB0aGUgc3RvcCdzIGFkZHJlc3Mgb24gdGhlIGNvbW1pdCBheGlzLlxuICAgKlxuICAgKiBJbmRpY2VzIGFyZSBTT1VSQ0UtTE9DQUwuIE9uIGEgY2hhaW5lZCBjdXJzb3IgKHNlZVxuICAgKiB7QGxpbmsgdGltZVRyYXZlbH0pIHRoZXkgaW5kZXggdGhlIGxvZyBvZiB7QGxpbmsgU3RvcC5zb3VyY2VJZHh9LCBuZXZlciBhXG4gICAqIGNvbmNhdGVuYXRpb24g4oCUIGNvbW1pdCBpbmRpY2VzIGFyZSBydW4tbG9jYWwgYW5kIHRoZSBsaWJyYXJ5IHdpbGwgbm90XG4gICAqIGludmVudCBhIGdsb2JhbCBvbmUuXG4gICAqL1xuICByZWFkb25seSBjb21taXRJZHg6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFSUkFZIElOREVYIG9mIHRoZSBMQVNUIGNvbW1pdCBidW5kbGUgZm9sZGVkIGF0IHRoaXMgc3RvcCDigJQgdGhlIGVuZCBvZlxuICAgKiB0aGlzIHN0b3AncyBzbGljZSBvZiB0aGUgbG9nLiBTdG9wcyBQQVJUSVRJT04gdGhlIGxvZywgc28gdGhpcyBpcyB0aGVcbiAgICogaW5kZXgganVzdCBiZWZvcmUgdGhlIG5leHQgc3RvcCBiZWdpbnM7IGl0IGlzIGdyZWF0ZXIgdGhhblxuICAgKiB7QGxpbmsgY29tbWl0SWR4fSB3aGVuZXZlciBhIHN0YWdlIGNvbW1pdHRlZCBtb3JlIHRoYW4gb25lIGJ1bmRsZSAoYVxuICAgKiBzdWJmbG93IG1vdW50J3Mgb3V0cHV0LW1hcHBpbmcgKyBleGl0IHBhaXIsIGEgZm9yayBjaGlsZCdzIGVtcHR5IHJlcGVhdCksXG4gICAqIGFuZCBncmVhdGVyIGFnYWluIG9uIGEgZmlsdGVyaW5nIHN0cmF0ZWd5LCB3aGljaCBhYnNvcmJzIHRoZSBjb21taXRzIG9mXG4gICAqIHRoZSBzdGFnZXMgaXQgZHJvcHBlZC4gRm9sZGluZyB0aHJvdWdoIHRoaXMgaW5kZXgg4oCUIG5vdCB0aHJvdWdoXG4gICAqIGBjb21taXRJZHhgIOKAlCBpcyB3aGF0IG1ha2VzIGBzdGF0ZUF0KHN0b3ApYCBlcXVhbCB0aGUgc3RhdGUgdGhlIG5leHRcbiAgICogc3RhZ2Ugc3RhcnRlZCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdENvbW1pdElkeDogbnVtYmVyO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkIGZyb20gdGhlIGJ1aWxkZXIgKHRoZSBwb3N0LW1vdW50LCBwcmVmaXhlZCBmb3JtKS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBwYXRoIHRoaXMgc3RhZ2UgcmFuIHVuZGVyLCB3aGVuIGl0IHJhbiBpbnNpZGUgb25lLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aD86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWUg4oCUIHdoYXQgYSBVSSBwdXRzIG9uIHRoZSBheGlzIHRpY2suICovXG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IFN0b3BLaW5kO1xuICAvKipcbiAgICogVEhFIFNUUkFURUdZJ1MgT1dOIFZPQ0FCVUxBUlksIGNhcnJpZWQgdmVyYmF0aW0uIFRoZSBwb3J0IGFzc2lnbnMgaXQgTk9cbiAgICogbWVhbmluZzogaXQgbmV2ZXIgcmVhZHMgaXQsIG5ldmVyIHZhbGlkYXRlcyBpdCwgbmV2ZXIgYnJhbmNoZXMgb24gaXQsIGFuZFxuICAgKiBwYXNzZXMgaXQgdGhyb3VnaCBgdGltZVRyYXZlbGAsIGBqdW1wVG9gLCBgZHJpbGxgIGFuZCBtYXJrcyBCWSBSRUZFUkVOQ0VcbiAgICog4oCUIG5ldmVyIGNsb25lZCwgbmV2ZXIgZnJvemVuLiBUaGUgc3RvcCBob2xkcyB0aGUgdmVyeSBvYmplY3QgdGhlIHN0cmF0ZWd5XG4gICAqIHB1dCB0aGVyZSwgc28gYSBtdXRhdGlvbiB0aHJvdWdoIG9uZSBob2xkZXIgaXMgdmlzaWJsZSB0byBldmVyeSBvdGhlci5cbiAgICpcbiAgICogV0hZIElUIEVYSVNUUy4ge0BsaW5rIGtpbmR9IGlzIHRoZSBQT1JUJ3Mgdm9jYWJ1bGFyeSDigJQgdGhlIGZvdXIgcG9zaXRpb25zXG4gICAqIHRoZSBzdWJzdHJhdGUgaXRzZWxmIGtub3dzLiBBIGRvbWFpbiBzdHJhdGVneSBjbGFzc2lmaWVzIHN0YWdlcyBpbiBpdHMgb3duXG4gICAqIHRlcm1zIChhIG1pbGVzdG9uZSwgYSB0dXJuLCBhIHRvb2wgY2FsbCwgYSBiZWF0KSBhbmQgaGFkIG5vd2hlcmUgdG8gcHV0XG4gICAqIHRoYXQsIHNvIHRoZSBhbnN3ZXIgdHJhdmVsbGVkIGJ5IHJlLWRlcml2aW5nIGl0IGZyb20gYHJ1bnRpbWVTdGFnZUlkYCBhdFxuICAgKiBldmVyeSByZWFkOiBhIHNlY29uZCBydW4gb2YgdGhlIGNsYXNzaWZpZXIgdGhhdCBqdXN0IHJhbiwgYW5kIGEgc2Vjb25kXG4gICAqIGNoYW5jZSB0byBkaXNhZ3JlZSB3aXRoIGl0LiBBIHN0b3Agbm93IGNhcnJpZXMgd2hhdCBpdHMgc3RyYXRlZ3kga25ldy5cbiAgICpcbiAgICogQWJzZW50IG9uIGV2ZXJ5IHN0b3AgYGNvbW1pdFN0b3BzYCBwcm9kdWNlcyDigJQgdGhlIHNoaXBwZWQgc3RyYXRlZ3kgaGFzIG5vXG4gICAqIHZvY2FidWxhcnkgYmV5b25kIGBraW5kYCwgYW5kIHNheXMgc28gYnkgb21pc3Npb24gcmF0aGVyIHRoYW4gYnkgYG51bGxgLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YT86IFRNZXRhO1xuICAvKipcbiAgICogT25seSBtZWFuaW5nZnVsIG9uIGBraW5kOiAnc3RhcnQnYC4gYHRydWVgIHdoZW4gdGhpcyBzdGFydCBmb2xkcyB0aGVcbiAgICogY29tbWl0cyBvZiBTVEFHRVMgVEhJUyBBWElTIERPRVMgTk9UIFNIT1cg4oCUIHRoZSBwcm9sb2d1ZSBhIGZpbHRlcmluZ1xuICAgKiBzdHJhdGVneSBtdXN0IHB1dCBzb21ld2hlcmUuIEFic2VudCAobmV2ZXIgYGZhbHNlYCkgb24gYW4gYXhpcyB3aG9zZSBzdGFydFxuICAgKiBpcyB0aGUgcnVuJ3MgcmF3IGZvbGQgYmFzZS5cbiAgICpcbiAgICogQSByZWFkZXIgdGhhdCB3YW50cyBcInRoZSBzdGF0ZSBiZWZvcmUgYW55dGhpbmcgcmFuXCIgY2hlY2tzXG4gICAqIGBraW5kID09PSAnc3RhcnQnICYmICFwcm9sb2d1ZWA7IG9uZSB0aGF0IHdhbnRzIFwidGhlIHN0YXRlIHRoZSBmaXJzdCBzdG9wXG4gICAqIHJlYWRcIiBqdXN0IGZvbGRzIHRoZSBzdGFydC4gU2VlIHtAbGluayBTdG9wS2luZH0uXG4gICAqL1xuICByZWFkb25seSBwcm9sb2d1ZT86IHRydWU7XG4gIC8qKlxuICAgKiBXaGljaCBTT1VSQ0UgdGhpcyBzdG9wJ3MgY29tbWl0IGluZGljZXMgYmVsb25nIHRvLCBvbiBhIGNoYWluZWQgY3Vyc29yIOKAlFxuICAgKiB0aGUgcG9zaXRpb24gaW4gdGhlIGFycmF5IGhhbmRlZCB0byB7QGxpbmsgdGltZVRyYXZlbH0uIEFic2VudCBvbiBhIGN1cnNvclxuICAgKiBvdmVyIGEgc2luZ2xlIHNvdXJjZSwgd2hpY2ggaXMgZXZlcnkgY3Vyc29yIGJ1aWx0IGJlZm9yZSA5LjE4LjAuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VJZHg/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGBbc3RhcnQsIOKApnN0YWdlcywgZW5kXWAgc2hhcGUgYGNvbW1pdFN0b3BzYCByZXR1cm5zIGZvciBhIE5PTi1FTVBUWSBsb2dcbiAqIOKAlCBzcGxpdCBvdXQsIHNvIGEgc3RyYXRlZ3kgdGhhdCBjb21wb3NlcyBpdCBzdG9wcyB3cml0aW5nIGl0cyBvd24gZ3VhcmQuXG4gKlxuICogU2VlIHtAbGluayBzcGxpdEF4aXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tlbmRlZEF4aXM8VE1ldGEgPSB1bmtub3duPiB7XG4gIC8qKiBUaGUgYCdzdGFydCdgIGJvb2tlbmQg4oCUIHRoZSBvbmx5IHN0b3AgdGhhdCBtYXkgb3BlbiBhdCBgY29tbWl0SWR4OiAtMWAuICovXG4gIHJlYWRvbmx5IHN0YXJ0OiBTdG9wPFRNZXRhPjtcbiAgLyoqIEV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGUgYm9va2VuZHMsIGluIGV4ZWN1dGlvbiBvcmRlci4gTWF5IGJlIGVtcHR5LiAqL1xuICByZWFkb25seSBzdGFnZXM6IHJlYWRvbmx5IFN0b3A8VE1ldGE+W107XG4gIC8qKiBUaGUgYCdlbmQnYCBib29rZW5kIOKAlCB0aGUgb25seSBzdG9wIHRoYXQgZm9sZHMgdGhlIHdob2xlIGxvZy4gKi9cbiAgcmVhZG9ubHkgZW5kOiBTdG9wPFRNZXRhPjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzcGxpdEF4aXN9IGFuc3dlcnMgd2hlbiB0aGVyZSBpcyBubyBib29rZW5kZWQgYXhpcyB0byBzcGxpdC5cbiAqXG4gKiAtIGAnZW1wdHknYCDigJQgbm8gc3RvcHMgYXQgYWxsLiBUaGUgbG9nIGl0c2VsZiB3YXMgZW1wdHk7IGEgdHJ1dGhmdWwgYXhpc1xuICogICB3aXRoIG5vd2hlcmUgdG8gc3RhbmQsIE5PVCBhIGJyb2tlbiBvbmUuXG4gKiAtIGAnbm90LWJvb2tlbmRlZCdgIOKAlCBzdG9wcyBleGlzdCBidXQgdGhlIGZpcnN0IGlzIG5vdCBhIGAnc3RhcnQnYCBvciB0aGVcbiAqICAgbGFzdCBpcyBub3QgYW4gYCdlbmQnYC4gT25seSBhIHN0cmF0ZWd5IGNhbiBjYXVzZSB0aGlzOyBhIHJ1biBjYW5ub3QuXG4gKi9cbmV4cG9ydCB0eXBlIEF4aXNSZWZ1c2FsID0gJ2VtcHR5JyB8ICdub3QtYm9va2VuZGVkJztcblxuLyoqIFRoZSByZXN1bHQgb2Yge0BsaW5rIHNwbGl0QXhpc306IHRoZSBheGlzLCBvciB3aHkgdGhlcmUgaXMgbm9uZS4gKi9cbmV4cG9ydCB0eXBlIEF4aXNTcGxpdDxUTWV0YSA9IHVua25vd24+ID1cbiAgfCAoeyByZWFkb25seSBvazogdHJ1ZSB9ICYgQm9va2VuZGVkQXhpczxUTWV0YT4pXG4gIHwge1xuICAgICAgcmVhZG9ubHkgb2s6IGZhbHNlO1xuICAgICAgcmVhZG9ubHkgcmVhc29uOiBBeGlzUmVmdXNhbDtcbiAgICAgIC8qKiBUaGUga2luZHMgdGhhdCB3ZXJlIGFjdHVhbGx5IHRoZXJlIOKAlCB3aGF0IHRvIHByaW50IGluIHRoZSByZWZ1c2FsLiAqL1xuICAgICAgcmVhZG9ubHkga2luZHM6IHJlYWRvbmx5IFN0b3BLaW5kW107XG4gICAgfTtcblxuLy8g4pSA4pSAIFRoZSBmb2xkIHJlc3VsdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIb3cgYSBmb2xkZWQgc3RhdGUgd2FzIGRlcml2ZWQg4oCUIHRoZSBob25lc3R5IGZpZWxkIChgJ2luaXRpYWwrbG9nJ2Agb3JcbiAqIGAnbG9nLW9ubHknYCkuIEEgcGFydGlhbCBhbnN3ZXIgc2F5cyBpdCBpcyBwYXJ0aWFsLCBuZXZlciBhIHNpbGVudCBvbmUuXG4gKlxuICogV2hhdCBlYWNoIHZhbHVlIG1lYW5zIGlzIHJlZ2lzdGVyZWQgT05DRSwgd2l0aCB0aGUgb3RoZXIgaG9uZXN0eSBzaWduYWxzLCBpblxuICogYG1lbW9yeS9ob25lc3R5LnRzIMK3IEhPTkVTVFlfQ09ERVNgIChzZXJ2ZWQgYXMgYEhPTkVTVFlfQ09ERVNgIG9uXG4gKiBgZm9vdHByaW50anMvdHJhY2VgKTsgdGhpcyB1bmlvbiBkZWNsYXJlcyBpdHMgbWVtYmVycyB0aHJvdWdoXG4gKiBgUmVnaXN0ZXJlZENvZGVgLCBzbyBhIGNvZGUgdGhlIHJlZ2lzdHJ5IGRvZXMgbm90IGhvbGQgZG9lcyBub3QgY29tcGlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgRm9sZEJhc2lzID0gUmVnaXN0ZXJlZENvZGU8J2luaXRpYWwrbG9nJyB8ICdsb2ctb25seSc+O1xuXG4vKiogQSBkZXRhY2hlZCBmb2xkIG9mIHRoZSBsb2cgdXAgdG8gb25lIHN0b3AuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlZFN0YXRlIHtcbiAgLyoqIFRoZSBzdGF0ZSwgZGVlcGx5IGZyb3plbiBhbmQgZnVsbHkgZGV0YWNoZWQgZnJvbSB0aGUgZW5naW5lLiAqL1xuICByZWFkb25seSBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBIb3cgaXQgd2FzIGRlcml2ZWQg4oCUIHNlZSB7QGxpbmsgRm9sZEJhc2lzfS4gKi9cbiAgcmVhZG9ubHkgYmFzaXM6IEZvbGRCYXNpcztcbiAgLyoqXG4gICAqIGB0cnVlYCB3aGVuIGFueSBjb21taXQgZm9sZGVkIGluIGRlY2xhcmVkIHJlZGFjdGVkIHBhdGhzLCBzbyB0aGlzIHN0YXRlXG4gICAqIGNhcnJpZXMgYCdSRURBQ1RFRCdgIHBsYWNlaG9sZGVycyB3aGVyZSB0aGUgZW5naW5lIHNjcnViYmVkIHZhbHVlcyBhdFxuICAgKiB3cml0ZSB0aW1lLiBUaGUgbG9nIGlzIHJlZGFjdGVkIHdoZXJlIGl0IHdhcyB3cml0dGVuOyBhIGZvbGQgbXVzdCBTQVkgc29cbiAgICogcmF0aGVyIHRoYW4gcHJlc2VudCBhIHNjcnViYmVkIHZhbHVlIGFzIHRoZSByZWFsIG9uZS5cbiAgICpcbiAgICogUmVnaXN0cnkgY29kZTogYCdyZWRhY3RlZCdgIChgbWVtb3J5L2hvbmVzdHkudHMgwrcgSE9ORVNUWV9DT0RFU2AsIHNlcnZlZCBvblxuICAgKiBgZm9vdHByaW50anMvdHJhY2VgKSBzYXlzIHdoYXQgdGhpcyBmaWVsZCBhbmQge0BsaW5rIEZvbGRlZFN0YXRlLnJlZGFjdGVkUGF0aHN9IG1lYW47XG4gICAqIG5laXRoZXIgY2FycmllcyBhIGBjb2RlYC4gVGhlIHBsYWNlaG9sZGVyIGlzIHRoZSBsb2cncyBzdHJpbmcsXG4gICAqIGBtZW1vcnkvcGxhY2Vob2xkZXJzLnRzIMK3IExPR19QTEFDRUhPTERFUmAuXG4gICAqL1xuICByZWFkb25seSByZWRhY3RlZDogYm9vbGVhbjtcbiAgLyoqIFRoZSByZWRhY3RlZCBwYXRocyBzZWVuIGFjcm9zcyB0aGUgZm9sZGVkIHByZWZpeCDigJQgc29ydGVkLCBkZWR1cGVkLiAqL1xuICByZWFkb25seSByZWRhY3RlZFBhdGhzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFRoZSBsYXN0IGNvbW1pdCBpbmRleCBmb2xkZWQgaW47IGAtMWAgd2hlbiBub3RoaW5nIHdhcyBmb2xkZWQuICovXG4gIHJlYWRvbmx5IHRocm91Z2hDb21taXRJZHg6IG51bWJlcjtcbiAgLyoqXG4gICAqIEVudHJpZXMgb2YgdGhlIGZvbGRlZCBwcmVmaXggdGhhdCB3ZXJlIG5vdCBjb21taXQgYnVuZGxlcywgd2l0aCB0aGUgaW5kZXhcbiAgICogYW5kIHRoZSByZWFzb24uIEFCU0VOVCB3aGVuIG5vdGhpbmcgd2FzIHNraXBwZWQsIHdoaWNoIGlzIGV2ZXJ5IGZvbGQgb3ZlclxuICAgKiBhIGxpdmUgc25hcHNob3Qg4oCUIGEgY2xlYW4gZm9sZCdzIHNoYXBlIGlzIGJ5dGUtaWRlbnRpY2FsIHRvIDkuMTcuMCdzLlxuICAgKlxuICAgKiBBIGdhcCBjb250cmlidXRlcyBubyBzdGF0ZSwgc28gYSBmb2xkIHRoYXQgcmVwb3J0cyBvbmUgaXMgSU5DT01QTEVURSBhdFxuICAgKiBleGFjdGx5IHRoZSBwbGFjZXMgaXQgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBza2lwcGVkPzogcmVhZG9ubHkgTG9nR2FwW107XG4gIC8qKlxuICAgKiBXaGljaCBzb3VyY2Ugb2YgYSBDSEFJTiB0aGlzIGZvbGQgZW5kZWQgaW4g4oCUIGB0aHJvdWdoQ29tbWl0SWR4YCBpbmRleGVzXG4gICAqIHRoYXQgc291cmNlJ3MgbG9nLiBBYnNlbnQgb24gYSBzaW5nbGUtc291cmNlIGN1cnNvci5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUlkeD86IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIE1vdmVtZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFdoeSBhIG1vdmUgZGlkIG5vdCBoYXBwZW4uXG4gKlxuICogLSBgJ2NsYW1wZWQnYCDigJQgdGhlIG1vdmUgd291bGQgbGFuZCBPVVRTSURFIHRoZSBheGlzIChgcHJldigpYCBhdCB0aGUgZmlyc3RcbiAqICAgc3RvcCwgYG5leHQoKWAgYXQgdGhlIGxhc3QsIGEgc3RlcCBudW1iZXIgYmVsb3cgMCBvciBwYXN0IHRoZSBlbmQpLCBvciBvblxuICogICB0aGUgdmVyeSBzdG9wIHRoZSBjdXJzb3IgYWxyZWFkeSBzdGFuZHMgb24uIEVpdGhlciB3YXkgbm90aGluZyBtb3ZlZC4gV2hlblxuICogICB0aGUgdGFyZ2V0IHdhcyBvdXQgb2YgcmFuZ2UsIGBuZWFyZXN0YCBuYW1lcyB0aGUgZW5kIHRoYXQgd2FzIGhpdCDigJQgdGhlXG4gKiAgIGN1cnNvciBpdHNlbGYgbWF5IGJlIG5vd2hlcmUgbmVhciBpdC5cbiAqIC0gYCdtaXNzJ2Ag4oCUIHRoZSB0YXJnZXQgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBheGlzLlxuICogLSBgJ2VtcHR5J2Ag4oCUIHRoaXMgY3Vyc29yIGhhcyBubyBzdG9wcyBhdCBhbGwgKGFuIGVtcHR5IGxvZykuXG4gKi9cbmV4cG9ydCB0eXBlIE1vdmVSZWZ1c2FsID0gJ2NsYW1wZWQnIHwgJ21pc3MnIHwgJ2VtcHR5JztcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFza2luZyB0aGUgY3Vyc29yIHRvIG1vdmUuXG4gKlxuICogQSByZWZ1c2VkIG1vdmUgTkVWRVIgbW92ZXMgdGhlIGN1cnNvci4gVGhhdCBpcyB0aGUgbGF3IGEgcmVhZGVyJ3MgVUkgcmVzdHNcbiAqIG9uOiBhIG1pc3R5cGVkIGlkIG9yIGEgc3RlcCBwYXN0IHRoZSBlbmQgbGVhdmVzIHRoZSBwYW5lbCBzaG93aW5nIGV4YWN0bHlcbiAqIHdoYXQgaXQgc2hvd2VkIGJlZm9yZSwgd2l0aCBhIHJlYXNvbiB0byBkaXNwbGF5IOKAlCBuZXZlciBhIHNpbGVudCBqdW1wIHRvXG4gKiBzb21ld2hlcmUgdGhlIHVzZXIgZGlkIG5vdCBhc2sgZm9yLlxuICovXG5leHBvcnQgdHlwZSBNb3ZlPFRNZXRhID0gdW5rbm93bj4gPVxuICB8IHsgcmVhZG9ubHkgbW92ZWQ6IHRydWU7IHJlYWRvbmx5IGZyb206IFN0b3A8VE1ldGE+IHwgdW5kZWZpbmVkOyByZWFkb25seSB0bzogU3RvcDxUTWV0YT4gfVxuICB8IHtcbiAgICAgIHJlYWRvbmx5IG1vdmVkOiBmYWxzZTtcbiAgICAgIHJlYWRvbmx5IHJlYXNvbjogTW92ZVJlZnVzYWw7XG4gICAgICAvKiogV2hlcmUgdGhlIGN1cnNvciBzdGlsbCBpcyAoYWJzZW50IG9ubHkgd2hlbiB0aGVyZSBhcmUgbm8gc3RvcHMpLiAqL1xuICAgICAgcmVhZG9ubHkgYXQ/OiBTdG9wPFRNZXRhPjtcbiAgICAgIC8qKiBUaGUgY2xvc2VzdCBzdG9wIHRvIHdoYXQgd2FzIGFza2VkIGZvciwgd2hlbiBvbmUgY2FuIGJlIG5hbWVkLiAqL1xuICAgICAgcmVhZG9ubHkgbmVhcmVzdD86IFN0b3A8VE1ldGE+O1xuICAgIH07XG5cbi8vIOKUgOKUgCBNYXJrcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBIHJlYWRlcidzIGJvb2ttYXJrLiBMaXZlcyBCRVNJREUgdGhlIGxvZywgaW4gdGhlIHtAbGluayBUaW1lVHJhdmVsfVxuICogaW5zdGFuY2Ug4oCUIG5ldmVyIHdyaXR0ZW4gaW50byB0aGUgY29tbWl0IGxvZyBvciB0aGUgc25hcHNob3QsIHdoaWNoIGFyZSB0aGVcbiAqIHJ1bidzIHJlY29yZCBhbmQgbm90IHRoZSByZWFkZXIncyBub3Rlcy5cbiAqXG4gKiBBIG1hcmsgbmFtZXMgaXRzIHN0b3AgYnkgYHJ1bnRpbWVTdGFnZUlkYCwgbm90IGJ5IHN0ZXAgbnVtYmVyOiBzdGVwIG51bWJlcnNcbiAqIGJlbG9uZyB0byBvbmUgc3RyYXRlZ3kncyBheGlzLCBgcnVudGltZVN0YWdlSWRgIGlzIHRoZSBzYW1lIHN0YWdlIG9uIGV2ZXJ5XG4gKiBheGlzLCBzbyBhIG1hcmsgc3Vydml2ZXMgYSBjaGFuZ2Ugb2Ygc3RyYXRlZ3kgYW5kIGEgcmUtZGVyaXZhdGlvbiBvZiBzdG9wcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXJrIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogVGhlIHN0ZXAgdGhlIG1hcmsgd2FzIHBsYWNlZCBhdCwgb24gdGhlIGF4aXMgaW4gZm9yY2UgYXQgdGhlIHRpbWUuICovXG4gIHJlYWRvbmx5IHN0ZXA6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFRoZSBzdHJhdGVneSBzZWFtIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEhvdyBzdG9wcyBhcmUgREVSSVZFRCBmcm9tIGEgcmVjb3JkZWQgbG9nLiBUaGUgc2VhbS5cbiAqXG4gKiBmb290cHJpbnRqcyBzaGlwcyBvbmUgc3RyYXRlZ3kg4oCUIGBjb21taXRTdG9wc2AsIG9uZSBzdG9wIHBlciBleGVjdXRlZCBzdGFnZVxuICog4oCUIGJlY2F1c2UgdGhhdCBpcyB0aGUgb25seSBzdG9wIGdyYW1tYXIgdGhlIHN1YnN0cmF0ZSBpdHNlbGYga25vd3MuIEFcbiAqIGNvbnN1bWVyIHdpdGggYSByaWNoZXIgdm9jYWJ1bGFyeSAobWlsZXN0b25lcywgdG9vbCBjYWxscywgdHVybnMpIHN1cHBsaWVzXG4gKiBpdHMgb3duIGFuZCBnZXRzIHRoZSBzYW1lIGN1cnNvciBvdmVyIGl0LCBhbmQgcHV0cyB0aGF0IHZvY2FidWxhcnkgb25cbiAqIHtAbGluayBTdG9wLm1ldGF9IHJhdGhlciB0aGFuIHJlLWRlcml2aW5nIGl0IGF0IGV2ZXJ5IHJlYWQuXG4gKlxuICogVGhlIGxhdyBhIHN0cmF0ZWd5IG11c3Qga2VlcDogc3RvcHMgYXJlIERFUklWRUQgRlJPTSBUSEUgUkVDT1JERUQgTE9HLlxuICogQSBzdHJhdGVneSBtYXkgZ3JvdXAsIGZpbHRlciwgbGFiZWwgYW5kIG9yZGVyIHdoYXQgd2FzIHJlY29yZGVkLiBJdCBtYXkgbm90XG4gKiByZS13YWxrIHRoZSBleGVjdXRpb24gdHJlZSB0byBzeW50aGVzaXplIGEgc3RvcCBmb3Igc29tZXRoaW5nIHRoYXQgd2FzIG5ldmVyXG4gKiBjb21taXR0ZWQg4oCUIGEgY3Vyc29yIHRoYXQgc3RvcHMgd2hlcmUgbm8gZXZpZGVuY2UgZXhpc3RzIGlzIHRlbGxpbmcgYSBzdG9yeSxcbiAqIG5vdCByZWFkaW5nIG9uZS5cbiAqXG4gKiBPTiBBIENIQUlOLCBgc3RvcHNGb3JgIGlzIGNhbGxlZCBPTkNFIFBFUiBTT1VSQ0Ugd2l0aCB0aGF0IHNvdXJjZSdzIG93biBsb2dcbiAqIGFuZCB0cmVlLCBhbmQgdGhlIGN1cnNvciByZS1zdGVwcyB0aGUgcmVzdWx0cyBpbnRvIG9uZSBheGlzLiBTbyBhIHN0cmF0ZWd5XG4gKiBuZXZlciBoYXMgdG8ga25vdyBpdCBpcyBwYXJ0IG9mIGEgY2hhaW4sIGFuZCBpdHMgYGNvbW1pdElkeGAvYGxhc3RDb21taXRJZHhgXG4gKiBzdGF5IHNvdXJjZS1sb2NhbCDigJQgd2hpY2ggaXMgd2hhdCB0aGV5IGFsd2F5cyB3ZXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVUcmF2ZWxTdHJhdGVneTxUTWV0YSA9IHVua25vd24+IHtcbiAgc3RvcHNGb3IoY29tbWl0TG9nOiByZWFkb25seSBDb21taXRCdW5kbGVbXSwgZXhlY3V0aW9uVHJlZT86IFN0YWdlU25hcHNob3QpOiBTdG9wPFRNZXRhPltdO1xufVxuXG4vLyDilIDilIAgVGhlIGN1cnNvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBIHJlYWRlcidzIGN1cnNvciBvdmVyIG9uZSBmaW5pc2hlZCBsb2csIHdpdGggYSBmb2xkIGF0IGVhY2ggc3RvcC5cbiAqXG4gKiBPTkUgY3Vyc29yOiB0aGlzIG9iamVjdCBob2xkcyB0aGUgb25seSBwb3NpdGlvbi4gRXZlcnkgcXVlc3Rpb24gYSByZWFkZXJcbiAqIGFza3Mg4oCUIHdoYXQgY2hhbmdlZCBoZXJlLCB3aGF0IGRpZCBzdGF0ZSBsb29rIGxpa2UsIHdoYXQgaXMgaW5zaWRlIHRoaXNcbiAqIG1vdW50IOKAlCBpcyBhbnN3ZXJlZCByZWxhdGl2ZSB0byBpdC4gYGRyaWxsKClgIHJldHVybnMgYSBTRVBBUkFURSBjdXJzb3Igb3ZlclxuICogYSBzZXBhcmF0ZSBsb2cgKGEgc3ViZmxvdydzIG93biksIG5ldmVyIGEgc2Vjb25kIHBvc2l0aW9uIG9uIHRoaXMgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVUcmF2ZWw8VE1ldGEgPSB1bmtub3duPiB7XG4gIC8qKiBUaGUgYXhpcywgaW4gZXhlY3V0aW9uIG9yZGVyLiBFbXB0eSB3aGVuIHRoZSBsb2cgaXMgZW1wdHkuICovXG4gIHJlYWRvbmx5IHN0b3BzOiByZWFkb25seSBTdG9wPFRNZXRhPltdO1xuICAvKiogVGhlIHN1YmZsb3cgcGF0aCB0aGlzIGN1cnNvciBjb3ZlcnM7IGB1bmRlZmluZWRgIGZvciB0aGUgcnVuIGl0c2VsZi4gKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIG1vdW50IHRoaXMgY3Vyc29yIHdhcyBkcmlsbGVkIG91dCBvZiDigJQgYFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNpZHhgLlxuICAgKiBgdW5kZWZpbmVkYCBvbiBhIHJ1bidzIG93biBjdXJzb3IuXG4gICAqXG4gICAqIFdIWSBCT1RIOiBhIHN1YmZsb3cgbW91bnRlZCBpbnNpZGUgYSBsb29wIHJ1bnMgc2V2ZXJhbCB0aW1lcywgYW5kIGV2ZXJ5XG4gICAqIGl0ZXJhdGlvbiBzaGFyZXMgb25lIHtAbGluayBwYXRofS4gVGhpcyBpcyB0aGUgaXRlcmF0aW9uIHRoYXQgd2FzIGFjdHVhbGx5XG4gICAqIG9wZW5lZCwgc28gdGhyZWUgZHJpbGwgcGFuZWxzIG92ZXIgYHNmeCMyYCwgYHNmeCM4YCBhbmQgYHNmeCMxNGAgY2FuIGJlXG4gICAqIGxhYmVsbGVkIGFuZCBrZXllZCBhcGFydCBpbnN0ZWFkIG9mIGFsbCByZWFkaW5nIGBzZnhgLlxuICAgKi9cbiAgcmVhZG9ubHkgbW91bnRSdW50aW1lU3RhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKiogVGhlIGN1cnNvciB0aGlzIG9uZSB3YXMgZHJpbGxlZCBvdXQgb2YsIGlmIGFueS4gKi9cbiAgcmVhZG9ubHkgcGFyZW50OiBUaW1lVHJhdmVsPFRNZXRhPiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEhvdyBtYW55IFNPVVJDRVMgdGhpcyBjdXJzb3IgcmVhZHMg4oCUIGAxYCBmb3IgYSBub3JtYWwgY3Vyc29yLCBtb3JlIGZvciBhXG4gICAqIGNoYWluZWQgb25lIChhIHBhdXNlL3Jlc3VtZSByZWFkIGFzIG9uZSBheGlzKS4gRXZlcnkgc3RvcCBvZiBhIGNoYWluZWRcbiAgICogY3Vyc29yIGNhcnJpZXMgdGhlIHtAbGluayBTdG9wLnNvdXJjZUlkeH0gaXRzIGluZGljZXMgYmVsb25nIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlQ291bnQ6IG51bWJlcjtcblxuICAvKiogV2hlcmUgdGhlIGN1cnNvciBpczsgYHVuZGVmaW5lZGAgb25seSB3aGVuIHRoZXJlIGFyZSBubyBzdG9wcy4gKi9cbiAgYXQoKTogU3RvcDxUTWV0YT4gfCB1bmRlZmluZWQ7XG5cbiAgZmlyc3QoKTogTW92ZTxUTWV0YT47XG4gIGxhc3QoKTogTW92ZTxUTWV0YT47XG4gIHByZXYoKTogTW92ZTxUTWV0YT47XG4gIG5leHQoKTogTW92ZTxUTWV0YT47XG5cbiAgLyoqXG4gICAqIE1vdmUgdG8gYSBzdGVwIG51bWJlciBvciB0byBhIGBydW50aW1lU3RhZ2VJZGAuXG4gICAqIEEgbWlzcyByZWZ1c2VzIGFuZCBuYW1lcyB0aGUgYG5lYXJlc3RgIHN0b3AgaXQgY291bGQgZmluZC5cbiAgICovXG4gIGp1bXBUbyh0YXJnZXQ6IG51bWJlciB8IHN0cmluZyk6IE1vdmU8VE1ldGE+O1xuXG4gIC8qKlxuICAgKiBGb2xkIG9mIHRoZSBsb2cgdGhyb3VnaCBgc3RvcGAgKGRlZmF1bHQ6IHRoZSBjdXJyZW50IHN0b3ApLiBEZXRhY2hlZC5cbiAgICpcbiAgICogYHN0b3BgIG11c3QgY29tZSBmcm9tIFRISVMgY3Vyc29yJ3MgYXhpczogaXRzIGBsYXN0Q29tbWl0SWR4YCBhbmRcbiAgICogYHNvdXJjZUlkeGAgYXJlIHJlYWQgYXMgYWRkcmVzc2VzIGludG8gdGhpcyBjdXJzb3IncyBvd24gbGVncywgc28gYSBzdG9wXG4gICAqIGZyb20gYW5vdGhlciBjdXJzb3IgaXMgZm9sZGVkIGF0IHdoYXRldmVyIHRob3NlIG51bWJlcnMgbWVhbiBoZXJlIOKAlCBvbiBhXG4gICAqIGNoYWluLCBhIGZvcmVpZ24gc3RvcCB3aXRoIG5vIGBzb3VyY2VJZHhgIGZvbGRzIGxlZyAwLlxuICAgKi9cbiAgc3RhdGVBdChzdG9wPzogU3RvcDxUTWV0YT4pOiBGb2xkZWRTdGF0ZTtcblxuICAvKipcbiAgICogVGhlIHN0YXRlIGtleXMgd3JpdHRlbiBiZXR3ZWVuIHR3byBzdG9wcyDigJQgcmVhZCBzdHJhaWdodCBvZmYgdGhlIGJ1bmRsZXMnXG4gICAqIHRyYWNlcywgc28gaXQgY29zdHMgbm8gZm9sZCBhdCBhbGwuXG4gICAqXG4gICAqIFdpdGggbm8gYXJndW1lbnQ6IHdoYXQgdGhlIENVUlJFTlQgc3RvcCBjaGFuZ2VkIChpLmUuIHNpbmNlIHRoZSBzdG9wXG4gICAqIGJlZm9yZSBpdCkuIFdpdGggYSBgZnJvbWAgc3RvcDogZXZlcnl0aGluZyB3cml0dGVuIGFmdGVyIGBmcm9tYCB1cCB0byBhbmRcbiAgICogaW5jbHVkaW5nIHRoZSBjdXJyZW50IHN0b3AuIEJhY2t3YXJkcyBvciBlcXVhbCByYW5nZXMgZ2l2ZSBgW11gLiBPbiBhXG4gICAqIGNoYWluZWQgY3Vyc29yIGEgcmFuZ2UgdGhhdCBjcm9zc2VzIHRoZSBzZWFtIGlzIHdhbGtlZCBzb3VyY2UgYnkgc291cmNlLlxuICAgKi9cbiAgY2hhbmdlZFNpbmNlKGZyb20/OiBTdG9wPFRNZXRhPik6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBCb29rbWFyayBhIHN0b3AgKGRlZmF1bHQ6IHRoZSBjdXJyZW50IG9uZSkuIFJldHVybnMgdGhlIG1hcmssIG9yXG4gICAqICBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vIHN0b3AgdG8gbmFtZS4gKi9cbiAgbWFyayhuYW1lOiBzdHJpbmcsIHN0b3A/OiBTdG9wPFRNZXRhPik6IE1hcmsgfCB1bmRlZmluZWQ7XG4gIC8qKiBBIGRldGFjaGVkIGNvcHkgb2YgdGhpcyBjdXJzb3IncyBtYXJrcywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBwbGFjZWQuICovXG4gIG1hcmtzKCk6IHJlYWRvbmx5IE1hcmtbXTtcbiAgLyoqIE1vdmUgdG8gYSBtYXJrJ3Mgc3RvcC4gQSBtYXJrIHdob3NlIHN0YWdlIGlzIG5vdCBvbiB0aGlzIGF4aXMgbWlzc2VzLiAqL1xuICBqdW1wVG9NYXJrKG5hbWU6IHN0cmluZyk6IE1vdmU8VE1ldGE+O1xuXG4gIC8qKlxuICAgKiBBIGN1cnNvciBvdmVyIHRoZSBzdWJmbG93IG1vdW50ZWQgYXQgYG1vdW50UnVudGltZVN0YWdlSWRgIOKAlCB0aGUgc2FtZVxuICAgKiBpbnRlcmZhY2UsIGl0cyBvd24gbG9nLCBpdHMgb3duIGZvbGQgYmFzZS4gYHVuZGVmaW5lZGAgd2hlbiB0aGF0IG1vdW50IGlzXG4gICAqIG5vdCBpbiB0aGlzIHJ1bidzIHN1YmZsb3cgcmVzdWx0cy5cbiAgICpcbiAgICogQSBzdG9wIGluc2lkZSBhIHN1YmZsb3cgaXMgTk9UIGEgc3RvcCBvZiB0aGlzIGN1cnNvcjogc3ViZmxvd3MgcnVuIGluXG4gICAqIGlzb2xhdGVkIHJ1bnRpbWVzIGFuZCBjb21taXQgdG8gdGhlaXIgb3duIGxvZywgc28gdGhlIG91dGVyIGF4aXMgaG9sZHNcbiAgICogb25seSB0aGUgbW91bnQgYm91bmRhcnkuIERyaWxsaW5nIGlzIGhvdyB5b3UgZ2V0IGluc2lkZTsgdGhlcmUgaXMgbm8gd2F5XG4gICAqIHRvIGJlIGluIHR3byBwbGFjZXMgYXQgb25jZS5cbiAgICovXG4gIGRyaWxsKG1vdW50UnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFRpbWVUcmF2ZWw8VE1ldGE+IHwgdW5kZWZpbmVkO1xufVxuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHRpbWVUcmF2ZWx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lVHJhdmVsT3B0aW9uczxUTWV0YSA9IHVua25vd24+IHtcbiAgLyoqIEhvdyBzdG9wcyBhcmUgZGVyaXZlZC4gRGVmYXVsdDogYGNvbW1pdFN0b3BzYC4gKi9cbiAgcmVhZG9ubHkgc3RyYXRlZ3k/OiBUaW1lVHJhdmVsU3RyYXRlZ3k8VE1ldGE+O1xuICAvKiogTWFya3MgdG8gc2VlZCB0aGUgY3Vyc29yIHdpdGgg4oCUIGUuZy4gcmVzdG9yZWQgZnJvbSBhIHNhdmVkIHNlc3Npb24uICovXG4gIHJlYWRvbmx5IG1hcmtzPzogcmVhZG9ubHkgTWFya1tdO1xufVxuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RpbWUtdHJhdmVsL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHRpbWUtdHJhdmVsL3R5cGVzLnRzIOKAlCB0aGUgc2hhcGVzIG9mIHRoZSByZWFkZXIncyBjdXJzb3IuXG4gKlxuICogV0hZIFRISVMgTU9EVUxFIEVYSVNUUyAoY29udGV4dCBmb3IgZnV0dXJlIHJlYWRlcnMsIGh1bWFuIG9yIExMTSk6XG4gKiBUaW1lIHRyYXZlbCBpbiBmb290cHJpbnRqcyBpcyBhIFJFQURFUidTIGN1cnNvciBvdmVyIGEgRklOSVNIRUQgdHJhY2UsIHdpdGhcbiAqIGEgZm9sZCBhdCBlYWNoIHN0b3AuIEl0IGlzIG5vdCB0aGUgV2Fsa2VyIOKAlCB0aGUgZW5naW5lJ3MgdHJhdmVyc2FsIOKAlCBhbmQgaXRcbiAqIG11c3QgbmV2ZXIgYmVjb21lIGEgc2Vjb25kIGxpdmUgY3Vyc29yOiBub3RoaW5nIGhlcmUgY2FuIG1vdmUsIHJlLXJ1biBvclxuICogbXV0YXRlIGFuIGV4ZWN1dGlvbi4gRXZlcnkgY29uc3VtZXIgKGEgd2h5LXBhbmVsLCBhIGZsb3cgdmlldywgYSBjaGFydFxuICogZGFzaGJvYXJkKSB3YXMgd3JpdGluZyB0aGUgc2FtZSBjb21taXQtaW5kZXggYXJpdGhtZXRpYyBieSBoYW5kLCBmcm9tIHRoZVxuICogc2FtZSBjb21taXQgbG9nLCBhbmQgZGlzYWdyZWVpbmcgYWJvdXQgdGhlIGFuc3dlcnMuIFRoaXMgaXMgdGhhdCBhcml0aG1ldGljLFxuICogb25jZSwgaW4gdGhlIGxpYnJhcnkgdGhhdCBvd25zIHRoZSBzdWJzdHJhdGUuXG4gKlxuICogREFHIHBvc2l0aW9uOiBtZW1vcnkg4oaQIHRpbWUtdHJhdmVsLiBUaGlzIG1vZHVsZSBtYXkgaW1wb3J0IE9OTFkgZnJvbVxuICogbWVtb3J5LyBwbHVzIGBlbmdpbmUvcnVudGltZVN0YWdlSWRgIOKAlCB0aGUgemVyby1kZXBlbmRlbmN5IGlkIGdyYW1tYXIgdGhhdFxuICogZGVmaW5lcyB3aGF0IGEgYHJ1bnRpbWVTdGFnZUlkYCBtZWFucywgYW5kIHRoZXJlZm9yZSB0aGUgb25lIHBpZWNlIG9mXG4gKiBlbmdpbmUvIGEgcmVhZGVyIG9mIGlkcyBjYW5ub3QgaG9uZXN0bHkgcmUtaW1wbGVtZW50LiBSZWNvcmRlcnMsIHRyYXZlcnNhbFxuICogYW5kIHJ1bm5lciBtdXN0IG5ldmVyIGJlIGltcG9ydGVkIGhlcmU7IHRoZVxuICogc25hcHNob3QgYXJyaXZlcyBhcyBhIHBsYWluIHN0cnVjdHVyYWwgc2hhcGUgKHtAbGluayBGb2xkU291cmNlfSxcbiAqIHtAbGluayBUaW1lVHJhdmVsU291cmNlfSkgc28gYSBzdG9yZWQgSlNPTiB0cmFjZSB3b3JrcyBleGFjdGx5IGxpa2UgYSBsaXZlXG4gKiBgZ2V0U25hcHNob3QoKWAuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWdpc3RlcmVkQ29kZSB9IGZyb20gJy4uL21lbW9yeS9ob25lc3R5LmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIFNvdXJjZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQW55dGhpbmcgdGhhdCBjYXJyaWVzIGEgY29tbWl0IGxvZyBhbmQgKGlkZWFsbHkpIGl0cyBmb2xkIGJhc2UuXG4gKlxuICogVHdvIGZpZWxkIHNwZWxsaW5ncywgYmVjYXVzZSB0aGUgbGlicmFyeSBhbHJlYWR5IGhhcyB0d286IHRoZSBydW4ncyBsb2cgaXNcbiAqIGBjb21taXRMb2dgIChgZ2V0U25hcHNob3QoKWApLCBhIHN1YmZsb3cncyBpcyBgaGlzdG9yeWBcbiAqIChgZ2V0U3VidHJlZVNuYXBzaG90KClgIC8gYHN1YmZsb3dSZXN1bHRzWy4uLl0udHJlZUNvbnRleHRgKS4gQm90aCBhcmVcbiAqIGFjY2VwdGVkIHNvIGEgY2FsbGVyIG5ldmVyIGhhcyB0byByZXNoYXBlIGEgc25hcHNob3QgdG8gYXNrIGEgcXVlc3Rpb24uXG4gKlxuICogQk9USCBTUEVMTElOR1MgVEFLRSBgcmVhZG9ubHkgdW5rbm93bltdYCAoOS4xOC4wKS4gQSBsaXZlIHNuYXBzaG90IGhhbmRzXG4gKiBvdmVyIHJlYWwge0BsaW5rIENvbW1pdEJ1bmRsZX1zIGFuZCBpcyBhc3NpZ25hYmxlIGV4YWN0bHkgYXMgYmVmb3JlOyBhXG4gKiBTVE9SRUQgcmVjb3JkaW5nIGlzIHBhcnNlZCBKU09OLCBhbmQgYSBjYXJlZnVsIGNvbnN1bWVyIHdpbGwgbm90IGNsYWltIHRoYXRcbiAqIHdoYXQgY2FtZSBiYWNrIG9mZiBkaXNrIGlzIGEgYENvbW1pdEJ1bmRsZWAuIFRoZSBuYXJyb3dpbmcgdGhlcmVmb3JlIGhhcHBlbnNcbiAqIEhFUkUsIHBlciBidW5kbGUsIHdoZXJlIHRoZSBmb2xkIGFjdHVhbGx5IHJlYWRzIG9uZSDigJQgdGhlIG9ubHkgcGxhY2UgdGhhdFxuICogY2FuIGhvbmVzdGx5IGRvIGl0LiBBbiBlbnRyeSB0aGF0IGlzIG5vdCBhIGJ1bmRsZSBiZWNvbWVzIGEgR0FQOiBpdCBrZWVwc1xuICogaXRzIGluZGV4IChzbyBldmVyeSBgY29tbWl0SWR4YCBzdGlsbCBhZGRyZXNzZXMgdGhlIHNhbWUgcG9zaXRpb24pLCBpdFxuICogY29udHJpYnV0ZXMgbm8gc3RhdGUsIGl0IGdldHMgbm8gc3RvcCwgYW5kIGFueSBmb2xkIHRoYXQgY3Jvc3NlcyBpdCByZXBvcnRzXG4gKiBpdCBpbiB7QGxpbmsgRm9sZGVkU3RhdGUuc2tpcHBlZH0gd2l0aCB0aGUgaW5kZXggYW5kIHRoZSByZWFzb24uXG4gKlxuICogRVZFUlkgRklFTEQgSVMgT1BUSU9OQUwsIGRlbGliZXJhdGVseSB0aGUgc2FtZSBzaGFwZSB7QGxpbmsgVGltZVRyYXZlbFNvdXJjZX1cbiAqIGhhczogYSBjb25zdW1lcidzIHN0b3JlZC1yZWNvcmRpbmcgdHlwZSAoYGNvbW1pdExvZz86IHJlYWRvbmx5IHVua25vd25bXWApXG4gKiBkcml2ZXMgYHN0YXRlQXRgIGFuZCBgdGltZVRyYXZlbGAgYWxpa2UsIHdpdGggbm8gY2FzdCBhdCBlaXRoZXIuIEEgc291cmNlXG4gKiB3aXRoIG5laXRoZXIgc3BlbGxpbmcgcHJlc2VudCBmb2xkcyB0byBpdHMgYmFzZSBhbmQgcmVwb3J0c1xuICogYHRocm91Z2hDb21taXRJZHg6IC0xYCDigJQgdGhlIHRydXRoZnVsIGFuc3dlciBmb3IgYSBsb2cgdGhhdCB3YXMgbm90IHRoZXJlLlxuICpcbiAqIFRISVMgSVMgQU4gSU5QVVQgU0hBUEUuIE5vdGhpbmcgdHlwZWQgYXMgYSBgRm9sZFNvdXJjZWAgcHJvbWlzZXMgdGhhdCBpdHNcbiAqIHJvd3MgYXJlIGJ1bmRsZXM7IGNvZGUgdGhhdCB3YW50cyB0byByZWFkIGBDb21taXRCdW5kbGVgIGZpZWxkcyBiYWNrIE9VVCBvZlxuICogb25lIG11c3QgbmFycm93IGVhY2ggcm93IHdpdGggYGlzQ29tbWl0QnVuZGxlYCBmaXJzdC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9sZFNvdXJjZSA9IHtcbiAgLyoqIFRoZSBydW4ncyBjb21taXQgbG9nLiBNYXkgYmUgQUJTRU5UIChhIHN0b3JlZCByZWNvcmRpbmcncyBvcHRpb25hbCBmaWVsZCk6IGFuIGFic2VudCBsb2cgZm9sZHMgdG8gdGhlIGJhc2UuICovXG4gIHJlYWRvbmx5IGNvbW1pdExvZz86IHJlYWRvbmx5IHVua25vd25bXTtcbiAgLyoqIEEgc3ViZmxvdyBzdWJ0cmVlJ3Mgb3duIGxvZyDigJQgdGhlIHNhbWUgdGhpbmcgdW5kZXIgaXRzIG90aGVyIG5hbWUuICovXG4gIHJlYWRvbmx5IGhpc3Rvcnk/OiByZWFkb25seSB1bmtub3duW107XG4gIHJlYWRvbmx5IGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuLyoqXG4gKiBBIHNuYXBzaG90LXNoYXBlZCBzb3VyY2UgZm9yIHtAbGluayB0aW1lVHJhdmVsfS5cbiAqXG4gKiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbCBhbmQgdGhlIHN0cnVjdHVyYWwgb25lcyBhcmUgYHVua25vd25gICg5LjE4LjApLCBzb1xuICogYSBsaXZlIGBnZXRTbmFwc2hvdCgpYCBpcyBhc3NpZ25hYmxlIGV4YWN0bHkgYXMgaXQgd2FzIEFORCBzbyBpcyBhIHN0b3JlZFxuICogcmVjb3JkaW5nIGEgY29uc3VtZXIgdHlwZWQgaG9uZXN0bHkg4oCUIGBjb21taXRMb2c6IHJlYWRvbmx5IHVua25vd25bXWAsXG4gKiBgZXhlY3V0aW9uVHJlZTogdW5rbm93bmAg4oCUIGJlY2F1c2UgcGFyc2VkIEpTT04gaXMgbm90IGEgYFN0YWdlU25hcHNob3RgXG4gKiB1bnRpbCBzb21ldGhpbmcgc2F5cyBzby4gVGhlIG5hcnJvd2luZyBoYXBwZW5zIGluc2lkZTogcm93cyBwZXIgYnVuZGxlXG4gKiAoc2VlIHtAbGluayBGb2xkU291cmNlfSksIHRoZSB0cmVlIGFuZCB0aGUgc3ViZmxvdyByZXN1bHRzIGFzIHBsYWluXG4gKiBvYmplY3RzLCBhbnl0aGluZyBlbHNlIHJlYWQgYXMgYWJzZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVUcmF2ZWxTb3VyY2Uge1xuICAvKiogVGhlIHJ1bidzIGNvbW1pdCBsb2cuIFNlZSB7QGxpbmsgRm9sZFNvdXJjZX0gb24gd2h5IHRoaXMgaXMgYHVua25vd25bXWAuICovXG4gIHJlYWRvbmx5IGNvbW1pdExvZz86IHJlYWRvbmx5IHVua25vd25bXTtcbiAgLyoqIEEgc3ViZmxvdyBzdWJ0cmVlJ3Mgb3duIGxvZyDigJQgdGhlIHNhbWUgdGhpbmcgdW5kZXIgaXRzIG90aGVyIG5hbWUuICovXG4gIHJlYWRvbmx5IGhpc3Rvcnk/OiByZWFkb25seSB1bmtub3duW107XG4gIHJlYWRvbmx5IGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogVGhlIHJ1bidzIGV4ZWN1dGlvbiB0cmVlIChgZ2V0U25hcHNob3QoKS5leGVjdXRpb25UcmVlYCkg4oCUIHdoYXQgbWFrZXMgYVxuICAgKiBtb3VudCBzdG9wIHNheSBga2luZDogJ21vdW50J2AgYXV0aG9yaXRhdGl2ZWx5IGluc3RlYWQgb2YgYnkgc2hhcGUuIEEgbGl2ZVxuICAgKiBzbmFwc2hvdCBoYW5kcyBhIHtAbGluayBTdGFnZVNuYXBzaG90fTsgYSBzdG9yZWQgb25lIGhhbmRzIHBhcnNlZCBKU09OLFxuICAgKiB3aGljaCBpcyByZWFkIGFzIGEgdHJlZSB3aGVuIGl0IGlzIGEgcGxhaW4gb2JqZWN0IGFuZCBpZ25vcmVkIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU/OiBTdGFnZVNuYXBzaG90IHwgdW5rbm93bjtcbiAgLyoqXG4gICAqIER1YWwta2V5ZWQgc3ViZmxvdyByZXN1bHRzIChgZ2V0U25hcHNob3QoKS5zdWJmbG93UmVzdWx0c2ApIOKAlCB3aGF0XG4gICAqIHtAbGluayBUaW1lVHJhdmVsLmRyaWxsfSBuYXZpZ2F0ZXMuIEFic2VudCwgb3Igbm90IGEgcGxhaW4gb2JqZWN0IOKHklxuICAgKiBgZHJpbGxgIGFsd2F5cyByZXR1cm5zIGB1bmRlZmluZWRgLCB3aGljaCBpcyB0aGUgaG9uZXN0IGFuc3dlciBmb3IgYSBydW5cbiAgICogd2l0aCBubyBzdWJmbG93cy5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duO1xufVxuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiBhIHNvdXJjZSdzIGxvZyB0aGF0IGNvdWxkIG5vdCBiZSByZWFkIGFzIGEge0BsaW5rIENvbW1pdEJ1bmRsZX0uXG4gKlxuICogUmVwb3J0ZWQgcmF0aGVyIHRoYW4gdGhyb3duOiBhIHN0b3JlZCByZWNvcmRpbmcgd2l0aCBvbmUgY29ycnVwdCByb3cgaXNcbiAqIHN0aWxsIHdvcnRoIHJlYWRpbmcsIGFuZCBhIHJlYWRlciB0aGF0IGlzIHRvbGQgV0hJQ0ggaW5kZXggaXQgbG9zdCBjYW4gc2F5XG4gKiBzbyBvbiBzY3JlZW4uIGBpbmRleGAgaXMgdGhlIHBvc2l0aW9uIGluIHRoYXQgc291cmNlJ3Mgb3duIGxvZy5cbiAqXG4gKiBSZWdpc3RyeSBjb2RlOiBgJ2xvZy1nYXAnYCAoYG1lbW9yeS9ob25lc3R5LnRzIMK3IEhPTkVTVFlfQ09ERVNgLCBzZXJ2ZWQgb25cbiAqIGBmb290cHJpbnRqcy90cmFjZWApIHNheXMgd2hhdCBhIGdhcCBtZWFucy4gQSBnYXAgY2FycmllcyBubyBgY29kZWAgZmllbGQg4oCUXG4gKiBpdCBpcyByZWdpc3RlcmVkIHNvIGEgcmVhZGVyIGV4cGxhaW5zIGl0IGZyb20gdGhlIHNhbWUgcGxhY2UgYXMgdGhlIG90aGVyXG4gKiBob25lc3R5IHNpZ25hbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nR2FwIHtcbiAgLyoqIEFSUkFZIElOREVYIGluIHRoZSBzb3VyY2UncyBsb2cg4oCUIHRoZSBhZGRyZXNzIHRoZSBnYXAgb2NjdXBpZXMuICovXG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIC8qKiBXaHkgaXQgaXMgbm90IGEgYnVuZGxlLCBpbiB3b3JkcyBhIFVJIGNhbiBwcmludC4gKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgCBTdG9wcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBXaGF0IGtpbmQgb2YgcG9zaXRpb24gYSBzdG9wIGlzLlxuICpcbiAqIC0gYCdjb21taXQnYCDigJQgb25lIGV4ZWN1dGVkIHN0YWdlLlxuICogLSBgJ21vdW50J2AgIOKAlCBhIHN1YmZsb3cgbW91bnQ6IHRoZSBib3VuZGFyeSB3aG9zZSBpbm5lciBzdGFnZXMgbGl2ZSBpbiB0aGVcbiAqICAgc3ViZmxvdydzIE9XTiBsb2cgKGRyaWxsIGludG8gaXQgd2l0aCB7QGxpbmsgVGltZVRyYXZlbC5kcmlsbH0pLlxuICogLSBgJ3N0YXJ0J2AgIOKAlCB0aGUgYm9va2VuZCBCRUZPUkUgdGhlIGZpcnN0IHN0b3Agb2YgVEhJUyBheGlzLiBXaGF0IGl0IGZvbGRzXG4gKiAgIGRlcGVuZHMgb24gdGhlIHN0cmF0ZWd5LCBhbmQgdGhlIGRpZmZlcmVuY2UgaXMgbG9hZC1iZWFyaW5nOlxuICogICAtIG9uIGEgc3RyYXRlZ3kgdGhhdCBrZWVwcyBldmVyeSBzdGFnZSAoYGNvbW1pdFN0b3BzYCwgdGhlIG9uZSBzaGlwcGVkKVxuICogICAgIGl0IGlzIHRoZSBydW4ncyBmb2xkIEJBU0Ug4oCUIHRoZSBzdGF0ZSBubyBjb21taXQgaW5kZXggY2FuIHJlYWNoIOKAlCBwbHVzXG4gKiAgICAgdGhlIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWQgd2hlbiB0aGUgbG9nIG9wZW5zIHdpdGggb25lICh0aGVcbiAqICAgICBtb3VudCdzIGNvbW1pdCwgc3RhbXBlZCB3aXRoIHRoZSBtb3VudCdzIHJ1bnRpbWVTdGFnZUlkIHNpbmNlIFIxMyBhbmRcbiAqICAgICB3aXRoIGAnJ2AgdGhyb3VnaCA5LjMzLjApLiBTbyBvbiBhIGRyaWxsZWQgY3Vyc29yIGl0IGlzIGV4YWN0bHkgXCJ0aGVcbiAqICAgICBpbnB1dCB0aGlzIHN1YmZsb3cgYmVnYW4gd2l0aFwiLlxuICogICAtIG9uIGEgc3RyYXRlZ3kgdGhhdCBGSUxURVJTIHN0YWdlcyBvdXQsIHRoZSBjb21taXRzIG9mIHRoZSBkcm9wcGVkXG4gKiAgICAgc3RhZ2VzIHRoYXQgcmFuIEJFRk9SRSB0aGUgZmlyc3Qgc3Vydml2aW5nIHN0b3AgaGF2ZSB0byBmb2xkIHNvbWV3aGVyZSxcbiAqICAgICBhbmQgYCdzdGFydCdgIGlzIHRoZSBvbmx5IHBsYWNlIHRoZXkgY2FuIGdvIHdpdGhvdXQgb3JwaGFuaW5nIHRoZW0uIEl0c1xuICogICAgIGZvbGQgaXMgdGhlbiB0aGUgYmFzZSBQTFVTIHRoYXQgcHJvbG9ndWUg4oCUIHRoZSBzdGF0ZSB0aGUgZmlyc3Qgc3RvcFxuICogICAgIFJFQUQsIG5vdCB0aGUgcnVuJ3MgcmF3IGJhc2UuIFN1Y2ggYSBzdGFydCBNVVNUIHNheSBzbyBieSBzZXR0aW5nXG4gKiAgICAge0BsaW5rIFN0b3AucHJvbG9ndWV9OyBhIHJlbmRlcmVyIHRoYXQgbWVhbnMgXCJ0aGUgcnVuJ3MgcmF3IGJhc2VcIiByZWFkc1xuICogICAgIGBraW5kID09PSAnc3RhcnQnICYmICFzdG9wLnByb2xvZ3VlYCwgYW5kIGdldHMgYSB0cnVlIGFuc3dlciBvbiBldmVyeVxuICogICAgIGF4aXMgaW5zdGVhZCBvZiBvbmUgdGhhdCBpcyB0cnVlIG9ubHkgb24gdGhlIGxpYnJhcnkncyBvd24uXG4gKiAtIGAnZW5kJ2AgICAg4oCUIHRoZSBib29rZW5kIGFmdGVyIHRoZSBsYXN0IGNvbW1pdDogXCJ0aGUgcnVuIGlzIG92ZXJcIi4gSXRzXG4gKiAgIGZvbGQgZXF1YWxzIHRoZSBmaW5hbCBzdGFnZSdzIGJ5IGNvbnN0cnVjdGlvbjsgdGhlIHR3byBhcmUgZGlmZmVyZW50XG4gKiAgIHF1ZXN0aW9ucywgbm90IGEgZHVwbGljYXRlZCBhbnN3ZXIuXG4gKlxuICogTk9UIFdJREVORUQsIERFTElCRVJBVEVMWS4gQSBmaWx0ZXJpbmcgc3RyYXRlZ3kncyBzdGFydCBjb3VsZCBoYXZlIGJlZW4gYVxuICogZmlmdGgga2luZCAoYCdwcm9sb2d1ZSdgKSwgYnV0IGFkZGluZyBhIG1lbWJlciB0byB0aGlzIHVuaW9uIGJyZWFrcyBldmVyeVxuICogY29uc3VtZXIgd2l0aCBhbiBleGhhdXN0aXZlIGBzd2l0Y2hgIG92ZXIgaXQg4oCUIGEgY29tcGlsZSBlcnJvciBoYW5kZWQgdG9cbiAqIHJlYWRlcnMgd2hvIGRpZCBub3RoaW5nIHdyb25nLiBBIGZsYWcgb24gdGhlIHN0b3Agc2F5cyB0aGUgc2FtZSB0aGluZyBhbmRcbiAqIGNvc3RzIGFuIGV4aXN0aW5nIHJlYWRlciBub3RoaW5nLlxuICovXG5leHBvcnQgdHlwZSBTdG9wS2luZCA9ICdjb21taXQnIHwgJ21vdW50JyB8ICdzdGFydCcgfCAnZW5kJztcblxuLyoqXG4gKiBPbmUgcG9zaXRpb24gYSByZWFkZXIncyBjdXJzb3IgY2FuIHJlc3QgYXQuXG4gKlxuICogQHR5cGVQYXJhbSBUTWV0YSB0aGUgU1RSQVRFR1knUyBvd24gdm9jYWJ1bGFyeSwgY2FycmllZCBvcGFxdWVseSBpblxuICogICB7QGxpbmsgU3RvcC5tZXRhfS4gRGVmYXVsdHMgdG8gYHVua25vd25gLCBzbyBldmVyeSBwcmUtOS4xOCBgU3RvcGAgc3RpbGxcbiAqICAgbWVhbnMgd2hhdCBpdCBtZWFudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9wPFRNZXRhID0gdW5rbm93bj4ge1xuICAvKiogUG9zaXRpb24gaW4gYFRpbWVUcmF2ZWwuc3RvcHNgIOKAlCAwLWJhc2VkLCB0aGUgY3Vyc29yJ3Mgc3RlcCBudW1iZXIuICovXG4gIHJlYWRvbmx5IHN0ZXA6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBzdGFnZSB0aGlzIHN0b3AgaXM6IGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgLlxuICAgKiBgJydgIGZvciB0aGUgYCdzdGFydCdgIC8gYCdlbmQnYCBib29rZW5kcywgd2hpY2ggYXJlIG5vdCBzdGFnZXMuXG4gICAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKipcbiAgICogQVJSQVkgSU5ERVggb2YgdGhpcyBzdG9wJ3MgRklSU1QgY29tbWl0IGJ1bmRsZTsgYC0xYCBhdCBgJ3N0YXJ0J2AuXG4gICAqIFRoaXMgaXMgdGhlIHN0b3AncyBhZGRyZXNzIG9uIHRoZSBjb21taXQgYXhpcy5cbiAgICpcbiAgICogSW5kaWNlcyBhcmUgU09VUkNFLUxPQ0FMLiBPbiBhIGNoYWluZWQgY3Vyc29yIChzZWVcbiAgICoge0BsaW5rIHRpbWVUcmF2ZWx9KSB0aGV5IGluZGV4IHRoZSBsb2cgb2Yge0BsaW5rIFN0b3Auc291cmNlSWR4fSwgbmV2ZXIgYVxuICAgKiBjb25jYXRlbmF0aW9uIOKAlCBjb21taXQgaW5kaWNlcyBhcmUgcnVuLWxvY2FsIGFuZCB0aGUgbGlicmFyeSB3aWxsIG5vdFxuICAgKiBpbnZlbnQgYSBnbG9iYWwgb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0SWR4OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBUlJBWSBJTkRFWCBvZiB0aGUgTEFTVCBjb21taXQgYnVuZGxlIGZvbGRlZCBhdCB0aGlzIHN0b3Ag4oCUIHRoZSBlbmQgb2ZcbiAgICogdGhpcyBzdG9wJ3Mgc2xpY2Ugb2YgdGhlIGxvZy4gU3RvcHMgUEFSVElUSU9OIHRoZSBsb2csIHNvIHRoaXMgaXMgdGhlXG4gICAqIGluZGV4IGp1c3QgYmVmb3JlIHRoZSBuZXh0IHN0b3AgYmVnaW5zOyBpdCBpcyBncmVhdGVyIHRoYW5cbiAgICoge0BsaW5rIGNvbW1pdElkeH0gd2hlbmV2ZXIgYSBzdGFnZSBjb21taXR0ZWQgbW9yZSB0aGFuIG9uZSBidW5kbGUgKGFcbiAgICogc3ViZmxvdyBtb3VudCdzIG91dHB1dC1tYXBwaW5nICsgZXhpdCBwYWlyLCBhIGZvcmsgY2hpbGQncyBlbXB0eSByZXBlYXQpLFxuICAgKiBhbmQgZ3JlYXRlciBhZ2FpbiBvbiBhIGZpbHRlcmluZyBzdHJhdGVneSwgd2hpY2ggYWJzb3JicyB0aGUgY29tbWl0cyBvZlxuICAgKiB0aGUgc3RhZ2VzIGl0IGRyb3BwZWQuIEZvbGRpbmcgdGhyb3VnaCB0aGlzIGluZGV4IOKAlCBub3QgdGhyb3VnaFxuICAgKiBgY29tbWl0SWR4YCDigJQgaXMgd2hhdCBtYWtlcyBgc3RhdGVBdChzdG9wKWAgZXF1YWwgdGhlIHN0YXRlIHRoZSBuZXh0XG4gICAqIHN0YWdlIHN0YXJ0ZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGxhc3RDb21taXRJZHg6IG51bWJlcjtcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZCBmcm9tIHRoZSBidWlsZGVyICh0aGUgcG9zdC1tb3VudCwgcHJlZml4ZWQgZm9ybSkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgcGF0aCB0aGlzIHN0YWdlIHJhbiB1bmRlciwgd2hlbiBpdCByYW4gaW5zaWRlIG9uZS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg/OiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lIOKAlCB3aGF0IGEgVUkgcHV0cyBvbiB0aGUgYXhpcyB0aWNrLiAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICByZWFkb25seSBraW5kOiBTdG9wS2luZDtcbiAgLyoqXG4gICAqIFRIRSBTVFJBVEVHWSdTIE9XTiBWT0NBQlVMQVJZLCBjYXJyaWVkIHZlcmJhdGltLiBUaGUgcG9ydCBhc3NpZ25zIGl0IE5PXG4gICAqIG1lYW5pbmc6IGl0IG5ldmVyIHJlYWRzIGl0LCBuZXZlciB2YWxpZGF0ZXMgaXQsIG5ldmVyIGJyYW5jaGVzIG9uIGl0LCBhbmRcbiAgICogcGFzc2VzIGl0IHRocm91Z2ggYHRpbWVUcmF2ZWxgLCBganVtcFRvYCwgYGRyaWxsYCBhbmQgbWFya3MgQlkgUkVGRVJFTkNFXG4gICAqIOKAlCBuZXZlciBjbG9uZWQsIG5ldmVyIGZyb3plbi4gVGhlIHN0b3AgaG9sZHMgdGhlIHZlcnkgb2JqZWN0IHRoZSBzdHJhdGVneVxuICAgKiBwdXQgdGhlcmUsIHNvIGEgbXV0YXRpb24gdGhyb3VnaCBvbmUgaG9sZGVyIGlzIHZpc2libGUgdG8gZXZlcnkgb3RoZXIuXG4gICAqXG4gICAqIFdIWSBJVCBFWElTVFMuIHtAbGluayBraW5kfSBpcyB0aGUgUE9SVCdzIHZvY2FidWxhcnkg4oCUIHRoZSBmb3VyIHBvc2l0aW9uc1xuICAgKiB0aGUgc3Vic3RyYXRlIGl0c2VsZiBrbm93cy4gQSBkb21haW4gc3RyYXRlZ3kgY2xhc3NpZmllcyBzdGFnZXMgaW4gaXRzIG93blxuICAgKiB0ZXJtcyAoYSBtaWxlc3RvbmUsIGEgdHVybiwgYSB0b29sIGNhbGwsIGEgYmVhdCkgYW5kIGhhZCBub3doZXJlIHRvIHB1dFxuICAgKiB0aGF0LCBzbyB0aGUgYW5zd2VyIHRyYXZlbGxlZCBieSByZS1kZXJpdmluZyBpdCBmcm9tIGBydW50aW1lU3RhZ2VJZGAgYXRcbiAgICogZXZlcnkgcmVhZDogYSBzZWNvbmQgcnVuIG9mIHRoZSBjbGFzc2lmaWVyIHRoYXQganVzdCByYW4sIGFuZCBhIHNlY29uZFxuICAgKiBjaGFuY2UgdG8gZGlzYWdyZWUgd2l0aCBpdC4gQSBzdG9wIG5vdyBjYXJyaWVzIHdoYXQgaXRzIHN0cmF0ZWd5IGtuZXcuXG4gICAqXG4gICAqIEFic2VudCBvbiBldmVyeSBzdG9wIGBjb21taXRTdG9wc2AgcHJvZHVjZXMg4oCUIHRoZSBzaGlwcGVkIHN0cmF0ZWd5IGhhcyBub1xuICAgKiB2b2NhYnVsYXJ5IGJleW9uZCBga2luZGAsIGFuZCBzYXlzIHNvIGJ5IG9taXNzaW9uIHJhdGhlciB0aGFuIGJ5IGBudWxsYC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGE/OiBUTWV0YTtcbiAgLyoqXG4gICAqIE9ubHkgbWVhbmluZ2Z1bCBvbiBga2luZDogJ3N0YXJ0J2AuIGB0cnVlYCB3aGVuIHRoaXMgc3RhcnQgZm9sZHMgdGhlXG4gICAqIGNvbW1pdHMgb2YgU1RBR0VTIFRISVMgQVhJUyBET0VTIE5PVCBTSE9XIOKAlCB0aGUgcHJvbG9ndWUgYSBmaWx0ZXJpbmdcbiAgICogc3RyYXRlZ3kgbXVzdCBwdXQgc29tZXdoZXJlLiBBYnNlbnQgKG5ldmVyIGBmYWxzZWApIG9uIGFuIGF4aXMgd2hvc2Ugc3RhcnRcbiAgICogaXMgdGhlIHJ1bidzIHJhdyBmb2xkIGJhc2UuXG4gICAqXG4gICAqIEEgcmVhZGVyIHRoYXQgd2FudHMgXCJ0aGUgc3RhdGUgYmVmb3JlIGFueXRoaW5nIHJhblwiIGNoZWNrc1xuICAgKiBga2luZCA9PT0gJ3N0YXJ0JyAmJiAhcHJvbG9ndWVgOyBvbmUgdGhhdCB3YW50cyBcInRoZSBzdGF0ZSB0aGUgZmlyc3Qgc3RvcFxuICAgKiByZWFkXCIganVzdCBmb2xkcyB0aGUgc3RhcnQuIFNlZSB7QGxpbmsgU3RvcEtpbmR9LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvbG9ndWU/OiB0cnVlO1xuICAvKipcbiAgICogV2hpY2ggU09VUkNFIHRoaXMgc3RvcCdzIGNvbW1pdCBpbmRpY2VzIGJlbG9uZyB0bywgb24gYSBjaGFpbmVkIGN1cnNvciDigJRcbiAgICogdGhlIHBvc2l0aW9uIGluIHRoZSBhcnJheSBoYW5kZWQgdG8ge0BsaW5rIHRpbWVUcmF2ZWx9LiBBYnNlbnQgb24gYSBjdXJzb3JcbiAgICogb3ZlciBhIHNpbmdsZSBzb3VyY2UsIHdoaWNoIGlzIGV2ZXJ5IGN1cnNvciBidWlsdCBiZWZvcmUgOS4xOC4wLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSWR4PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBgW3N0YXJ0LCDigKZzdGFnZXMsIGVuZF1gIHNoYXBlIGBjb21taXRTdG9wc2AgcmV0dXJucyBmb3IgYSBOT04tRU1QVFkgbG9nXG4gKiDigJQgc3BsaXQgb3V0LCBzbyBhIHN0cmF0ZWd5IHRoYXQgY29tcG9zZXMgaXQgc3RvcHMgd3JpdGluZyBpdHMgb3duIGd1YXJkLlxuICpcbiAqIFNlZSB7QGxpbmsgc3BsaXRBeGlzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb29rZW5kZWRBeGlzPFRNZXRhID0gdW5rbm93bj4ge1xuICAvKiogVGhlIGAnc3RhcnQnYCBib29rZW5kIOKAlCB0aGUgb25seSBzdG9wIHRoYXQgbWF5IG9wZW4gYXQgYGNvbW1pdElkeDogLTFgLiAqL1xuICByZWFkb25seSBzdGFydDogU3RvcDxUTWV0YT47XG4gIC8qKiBFdmVyeXRoaW5nIGJldHdlZW4gdGhlIGJvb2tlbmRzLCBpbiBleGVjdXRpb24gb3JkZXIuIE1heSBiZSBlbXB0eS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VzOiByZWFkb25seSBTdG9wPFRNZXRhPltdO1xuICAvKiogVGhlIGAnZW5kJ2AgYm9va2VuZCDigJQgdGhlIG9ubHkgc3RvcCB0aGF0IGZvbGRzIHRoZSB3aG9sZSBsb2cuICovXG4gIHJlYWRvbmx5IGVuZDogU3RvcDxUTWV0YT47XG59XG5cbi8qKlxuICogV2hhdCB7QGxpbmsgc3BsaXRBeGlzfSBhbnN3ZXJzIHdoZW4gdGhlcmUgaXMgbm8gYm9va2VuZGVkIGF4aXMgdG8gc3BsaXQuXG4gKlxuICogLSBgJ2VtcHR5J2Ag4oCUIG5vIHN0b3BzIGF0IGFsbC4gVGhlIGxvZyBpdHNlbGYgd2FzIGVtcHR5OyBhIHRydXRoZnVsIGF4aXNcbiAqICAgd2l0aCBub3doZXJlIHRvIHN0YW5kLCBOT1QgYSBicm9rZW4gb25lLlxuICogLSBgJ25vdC1ib29rZW5kZWQnYCDigJQgc3RvcHMgZXhpc3QgYnV0IHRoZSBmaXJzdCBpcyBub3QgYSBgJ3N0YXJ0J2Agb3IgdGhlXG4gKiAgIGxhc3QgaXMgbm90IGFuIGAnZW5kJ2AuIE9ubHkgYSBzdHJhdGVneSBjYW4gY2F1c2UgdGhpczsgYSBydW4gY2Fubm90LlxuICovXG5leHBvcnQgdHlwZSBBeGlzUmVmdXNhbCA9ICdlbXB0eScgfCAnbm90LWJvb2tlbmRlZCc7XG5cbi8qKiBUaGUgcmVzdWx0IG9mIHtAbGluayBzcGxpdEF4aXN9OiB0aGUgYXhpcywgb3Igd2h5IHRoZXJlIGlzIG5vbmUuICovXG5leHBvcnQgdHlwZSBBeGlzU3BsaXQ8VE1ldGEgPSB1bmtub3duPiA9XG4gIHwgKHsgcmVhZG9ubHkgb2s6IHRydWUgfSAmIEJvb2tlbmRlZEF4aXM8VE1ldGE+KVxuICB8IHtcbiAgICAgIHJlYWRvbmx5IG9rOiBmYWxzZTtcbiAgICAgIHJlYWRvbmx5IHJlYXNvbjogQXhpc1JlZnVzYWw7XG4gICAgICAvKiogVGhlIGtpbmRzIHRoYXQgd2VyZSBhY3R1YWxseSB0aGVyZSDigJQgd2hhdCB0byBwcmludCBpbiB0aGUgcmVmdXNhbC4gKi9cbiAgICAgIHJlYWRvbmx5IGtpbmRzOiByZWFkb25seSBTdG9wS2luZFtdO1xuICAgIH07XG5cbi8vIOKUgOKUgCBUaGUgZm9sZCByZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogSG93IGEgZm9sZGVkIHN0YXRlIHdhcyBkZXJpdmVkIOKAlCB0aGUgaG9uZXN0eSBmaWVsZCAoYCdpbml0aWFsK2xvZydgIG9yXG4gKiBgJ2xvZy1vbmx5J2ApLiBBIHBhcnRpYWwgYW5zd2VyIHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICpcbiAqIFdoYXQgZWFjaCB2YWx1ZSBtZWFucyBpcyByZWdpc3RlcmVkIE9OQ0UsIHdpdGggdGhlIG90aGVyIGhvbmVzdHkgc2lnbmFscywgaW5cbiAqIGBtZW1vcnkvaG9uZXN0eS50cyDCtyBIT05FU1RZX0NPREVTYCAoc2VydmVkIGFzIGBIT05FU1RZX0NPREVTYCBvblxuICogYGZvb3RwcmludGpzL3RyYWNlYCk7IHRoaXMgdW5pb24gZGVjbGFyZXMgaXRzIG1lbWJlcnMgdGhyb3VnaFxuICogYFJlZ2lzdGVyZWRDb2RlYCwgc28gYSBjb2RlIHRoZSByZWdpc3RyeSBkb2VzIG5vdCBob2xkIGRvZXMgbm90IGNvbXBpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIEZvbGRCYXNpcyA9IFJlZ2lzdGVyZWRDb2RlPCdpbml0aWFsK2xvZycgfCAnbG9nLW9ubHknPjtcblxuLyoqIEEgZGV0YWNoZWQgZm9sZCBvZiB0aGUgbG9nIHVwIHRvIG9uZSBzdG9wLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkZWRTdGF0ZSB7XG4gIC8qKiBUaGUgc3RhdGUsIGRlZXBseSBmcm96ZW4gYW5kIGZ1bGx5IGRldGFjaGVkIGZyb20gdGhlIGVuZ2luZS4gKi9cbiAgcmVhZG9ubHkgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogSG93IGl0IHdhcyBkZXJpdmVkIOKAlCBzZWUge0BsaW5rIEZvbGRCYXNpc30uICovXG4gIHJlYWRvbmx5IGJhc2lzOiBGb2xkQmFzaXM7XG4gIC8qKlxuICAgKiBgdHJ1ZWAgd2hlbiBhbnkgY29tbWl0IGZvbGRlZCBpbiBkZWNsYXJlZCByZWRhY3RlZCBwYXRocywgc28gdGhpcyBzdGF0ZVxuICAgKiBjYXJyaWVzIGAnUkVEQUNURUQnYCBwbGFjZWhvbGRlcnMgd2hlcmUgdGhlIGVuZ2luZSBzY3J1YmJlZCB2YWx1ZXMgYXRcbiAgICogd3JpdGUgdGltZS4gVGhlIGxvZyBpcyByZWRhY3RlZCB3aGVyZSBpdCB3YXMgd3JpdHRlbjsgYSBmb2xkIG11c3QgU0FZIHNvXG4gICAqIHJhdGhlciB0aGFuIHByZXNlbnQgYSBzY3J1YmJlZCB2YWx1ZSBhcyB0aGUgcmVhbCBvbmUuXG4gICAqXG4gICAqIFJlZ2lzdHJ5IGNvZGU6IGAncmVkYWN0ZWQnYCAoYG1lbW9yeS9ob25lc3R5LnRzIMK3IEhPTkVTVFlfQ09ERVNgLCBzZXJ2ZWQgb25cbiAgICogYGZvb3RwcmludGpzL3RyYWNlYCkgc2F5cyB3aGF0IHRoaXMgZmllbGQgYW5kIHtAbGluayBGb2xkZWRTdGF0ZS5yZWRhY3RlZFBhdGhzfSBtZWFuO1xuICAgKiBuZWl0aGVyIGNhcnJpZXMgYSBgY29kZWAuIFRoZSBwbGFjZWhvbGRlciBpcyB0aGUgbG9nJ3Mgc3RyaW5nLFxuICAgKiBgbWVtb3J5L3BsYWNlaG9sZGVycy50cyDCtyBMT0dfUExBQ0VIT0xERVJgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkYWN0ZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgcmVkYWN0ZWQgcGF0aHMgc2VlbiBhY3Jvc3MgdGhlIGZvbGRlZCBwcmVmaXgg4oCUIHNvcnRlZCwgZGVkdXBlZC4gKi9cbiAgcmVhZG9ubHkgcmVkYWN0ZWRQYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBUaGUgbGFzdCBjb21taXQgaW5kZXggZm9sZGVkIGluOyBgLTFgIHdoZW4gbm90aGluZyB3YXMgZm9sZGVkLiAqL1xuICByZWFkb25seSB0aHJvdWdoQ29tbWl0SWR4OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFbnRyaWVzIG9mIHRoZSBmb2xkZWQgcHJlZml4IHRoYXQgd2VyZSBub3QgY29tbWl0IGJ1bmRsZXMsIHdpdGggdGhlIGluZGV4XG4gICAqIGFuZCB0aGUgcmVhc29uLiBBQlNFTlQgd2hlbiBub3RoaW5nIHdhcyBza2lwcGVkLCB3aGljaCBpcyBldmVyeSBmb2xkIG92ZXJcbiAgICogYSBsaXZlIHNuYXBzaG90IOKAlCBhIGNsZWFuIGZvbGQncyBzaGFwZSBpcyBieXRlLWlkZW50aWNhbCB0byA5LjE3LjAncy5cbiAgICpcbiAgICogQSBnYXAgY29udHJpYnV0ZXMgbm8gc3RhdGUsIHNvIGEgZm9sZCB0aGF0IHJlcG9ydHMgb25lIGlzIElOQ09NUExFVEUgYXRcbiAgICogZXhhY3RseSB0aGUgcGxhY2VzIGl0IG5hbWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZD86IHJlYWRvbmx5IExvZ0dhcFtdO1xuICAvKipcbiAgICogV2hpY2ggc291cmNlIG9mIGEgQ0hBSU4gdGhpcyBmb2xkIGVuZGVkIGluIOKAlCBgdGhyb3VnaENvbW1pdElkeGAgaW5kZXhlc1xuICAgKiB0aGF0IHNvdXJjZSdzIGxvZy4gQWJzZW50IG9uIGEgc2luZ2xlLXNvdXJjZSBjdXJzb3IuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VJZHg/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBNb3ZlbWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBXaHkgYSBtb3ZlIGRpZCBub3QgaGFwcGVuLlxuICpcbiAqIC0gYCdjbGFtcGVkJ2Ag4oCUIHRoZSBtb3ZlIHdvdWxkIGxhbmQgT1VUU0lERSB0aGUgYXhpcyAoYHByZXYoKWAgYXQgdGhlIGZpcnN0XG4gKiAgIHN0b3AsIGBuZXh0KClgIGF0IHRoZSBsYXN0LCBhIHN0ZXAgbnVtYmVyIGJlbG93IDAgb3IgcGFzdCB0aGUgZW5kKSwgb3Igb25cbiAqICAgdGhlIHZlcnkgc3RvcCB0aGUgY3Vyc29yIGFscmVhZHkgc3RhbmRzIG9uLiBFaXRoZXIgd2F5IG5vdGhpbmcgbW92ZWQuIFdoZW5cbiAqICAgdGhlIHRhcmdldCB3YXMgb3V0IG9mIHJhbmdlLCBgbmVhcmVzdGAgbmFtZXMgdGhlIGVuZCB0aGF0IHdhcyBoaXQg4oCUIHRoZVxuICogICBjdXJzb3IgaXRzZWxmIG1heSBiZSBub3doZXJlIG5lYXIgaXQuXG4gKiAtIGAnbWlzcydgIOKAlCB0aGUgdGFyZ2V0IGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgYXhpcy5cbiAqIC0gYCdlbXB0eSdgIOKAlCB0aGlzIGN1cnNvciBoYXMgbm8gc3RvcHMgYXQgYWxsIChhbiBlbXB0eSBsb2cpLlxuICovXG5leHBvcnQgdHlwZSBNb3ZlUmVmdXNhbCA9ICdjbGFtcGVkJyB8ICdtaXNzJyB8ICdlbXB0eSc7XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiBhc2tpbmcgdGhlIGN1cnNvciB0byBtb3ZlLlxuICpcbiAqIEEgcmVmdXNlZCBtb3ZlIE5FVkVSIG1vdmVzIHRoZSBjdXJzb3IuIFRoYXQgaXMgdGhlIGxhdyBhIHJlYWRlcidzIFVJIHJlc3RzXG4gKiBvbjogYSBtaXN0eXBlZCBpZCBvciBhIHN0ZXAgcGFzdCB0aGUgZW5kIGxlYXZlcyB0aGUgcGFuZWwgc2hvd2luZyBleGFjdGx5XG4gKiB3aGF0IGl0IHNob3dlZCBiZWZvcmUsIHdpdGggYSByZWFzb24gdG8gZGlzcGxheSDigJQgbmV2ZXIgYSBzaWxlbnQganVtcCB0b1xuICogc29tZXdoZXJlIHRoZSB1c2VyIGRpZCBub3QgYXNrIGZvci5cbiAqL1xuZXhwb3J0IHR5cGUgTW92ZTxUTWV0YSA9IHVua25vd24+ID1cbiAgfCB7IHJlYWRvbmx5IG1vdmVkOiB0cnVlOyByZWFkb25seSBmcm9tOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZDsgcmVhZG9ubHkgdG86IFN0b3A8VE1ldGE+IH1cbiAgfCB7XG4gICAgICByZWFkb25seSBtb3ZlZDogZmFsc2U7XG4gICAgICByZWFkb25seSByZWFzb246IE1vdmVSZWZ1c2FsO1xuICAgICAgLyoqIFdoZXJlIHRoZSBjdXJzb3Igc3RpbGwgaXMgKGFic2VudCBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIHN0b3BzKS4gKi9cbiAgICAgIHJlYWRvbmx5IGF0PzogU3RvcDxUTWV0YT47XG4gICAgICAvKiogVGhlIGNsb3Nlc3Qgc3RvcCB0byB3aGF0IHdhcyBhc2tlZCBmb3IsIHdoZW4gb25lIGNhbiBiZSBuYW1lZC4gKi9cbiAgICAgIHJlYWRvbmx5IG5lYXJlc3Q/OiBTdG9wPFRNZXRhPjtcbiAgICB9O1xuXG4vLyDilIDilIAgTWFya3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQSByZWFkZXIncyBib29rbWFyay4gTGl2ZXMgQkVTSURFIHRoZSBsb2csIGluIHRoZSB7QGxpbmsgVGltZVRyYXZlbH1cbiAqIGluc3RhbmNlIOKAlCBuZXZlciB3cml0dGVuIGludG8gdGhlIGNvbW1pdCBsb2cgb3IgdGhlIHNuYXBzaG90LCB3aGljaCBhcmUgdGhlXG4gKiBydW4ncyByZWNvcmQgYW5kIG5vdCB0aGUgcmVhZGVyJ3Mgbm90ZXMuXG4gKlxuICogQSBtYXJrIG5hbWVzIGl0cyBzdG9wIGJ5IGBydW50aW1lU3RhZ2VJZGAsIG5vdCBieSBzdGVwIG51bWJlcjogc3RlcCBudW1iZXJzXG4gKiBiZWxvbmcgdG8gb25lIHN0cmF0ZWd5J3MgYXhpcywgYHJ1bnRpbWVTdGFnZUlkYCBpcyB0aGUgc2FtZSBzdGFnZSBvbiBldmVyeVxuICogYXhpcywgc28gYSBtYXJrIHN1cnZpdmVzIGEgY2hhbmdlIG9mIHN0cmF0ZWd5IGFuZCBhIHJlLWRlcml2YXRpb24gb2Ygc3RvcHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFyayB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFRoZSBzdGVwIHRoZSBtYXJrIHdhcyBwbGFjZWQgYXQsIG9uIHRoZSBheGlzIGluIGZvcmNlIGF0IHRoZSB0aW1lLiAqL1xuICByZWFkb25seSBzdGVwOiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBUaGUgc3RyYXRlZ3kgc2VhbSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIb3cgc3RvcHMgYXJlIERFUklWRUQgZnJvbSBhIHJlY29yZGVkIGxvZy4gVGhlIHNlYW0uXG4gKlxuICogZm9vdHByaW50anMgc2hpcHMgb25lIHN0cmF0ZWd5IOKAlCBgY29tbWl0U3RvcHNgLCBvbmUgc3RvcCBwZXIgZXhlY3V0ZWQgc3RhZ2VcbiAqIOKAlCBiZWNhdXNlIHRoYXQgaXMgdGhlIG9ubHkgc3RvcCBncmFtbWFyIHRoZSBzdWJzdHJhdGUgaXRzZWxmIGtub3dzLiBBXG4gKiBjb25zdW1lciB3aXRoIGEgcmljaGVyIHZvY2FidWxhcnkgKG1pbGVzdG9uZXMsIHRvb2wgY2FsbHMsIHR1cm5zKSBzdXBwbGllc1xuICogaXRzIG93biBhbmQgZ2V0cyB0aGUgc2FtZSBjdXJzb3Igb3ZlciBpdCwgYW5kIHB1dHMgdGhhdCB2b2NhYnVsYXJ5IG9uXG4gKiB7QGxpbmsgU3RvcC5tZXRhfSByYXRoZXIgdGhhbiByZS1kZXJpdmluZyBpdCBhdCBldmVyeSByZWFkLlxuICpcbiAqIFRoZSBsYXcgYSBzdHJhdGVneSBtdXN0IGtlZXA6IHN0b3BzIGFyZSBERVJJVkVEIEZST00gVEhFIFJFQ09SREVEIExPRy5cbiAqIEEgc3RyYXRlZ3kgbWF5IGdyb3VwLCBmaWx0ZXIsIGxhYmVsIGFuZCBvcmRlciB3aGF0IHdhcyByZWNvcmRlZC4gSXQgbWF5IG5vdFxuICogcmUtd2FsayB0aGUgZXhlY3V0aW9uIHRyZWUgdG8gc3ludGhlc2l6ZSBhIHN0b3AgZm9yIHNvbWV0aGluZyB0aGF0IHdhcyBuZXZlclxuICogY29tbWl0dGVkIOKAlCBhIGN1cnNvciB0aGF0IHN0b3BzIHdoZXJlIG5vIGV2aWRlbmNlIGV4aXN0cyBpcyB0ZWxsaW5nIGEgc3RvcnksXG4gKiBub3QgcmVhZGluZyBvbmUuXG4gKlxuICogT04gQSBDSEFJTiwgYHN0b3BzRm9yYCBpcyBjYWxsZWQgT05DRSBQRVIgU09VUkNFIHdpdGggdGhhdCBzb3VyY2UncyBvd24gbG9nXG4gKiBhbmQgdHJlZSwgYW5kIHRoZSBjdXJzb3IgcmUtc3RlcHMgdGhlIHJlc3VsdHMgaW50byBvbmUgYXhpcy4gU28gYSBzdHJhdGVneVxuICogbmV2ZXIgaGFzIHRvIGtub3cgaXQgaXMgcGFydCBvZiBhIGNoYWluLCBhbmQgaXRzIGBjb21taXRJZHhgL2BsYXN0Q29tbWl0SWR4YFxuICogc3RheSBzb3VyY2UtbG9jYWwg4oCUIHdoaWNoIGlzIHdoYXQgdGhleSBhbHdheXMgd2VyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lVHJhdmVsU3RyYXRlZ3k8VE1ldGEgPSB1bmtub3duPiB7XG4gIHN0b3BzRm9yKGNvbW1pdExvZzogcmVhZG9ubHkgQ29tbWl0QnVuZGxlW10sIGV4ZWN1dGlvblRyZWU/OiBTdGFnZVNuYXBzaG90KTogU3RvcDxUTWV0YT5bXTtcbn1cblxuLy8g4pSA4pSAIFRoZSBjdXJzb3Ig4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQSByZWFkZXIncyBjdXJzb3Igb3ZlciBvbmUgZmluaXNoZWQgbG9nLCB3aXRoIGEgZm9sZCBhdCBlYWNoIHN0b3AuXG4gKlxuICogT05FIGN1cnNvcjogdGhpcyBvYmplY3QgaG9sZHMgdGhlIG9ubHkgcG9zaXRpb24uIEV2ZXJ5IHF1ZXN0aW9uIGEgcmVhZGVyXG4gKiBhc2tzIOKAlCB3aGF0IGNoYW5nZWQgaGVyZSwgd2hhdCBkaWQgc3RhdGUgbG9vayBsaWtlLCB3aGF0IGlzIGluc2lkZSB0aGlzXG4gKiBtb3VudCDigJQgaXMgYW5zd2VyZWQgcmVsYXRpdmUgdG8gaXQuIGBkcmlsbCgpYCByZXR1cm5zIGEgU0VQQVJBVEUgY3Vyc29yIG92ZXJcbiAqIGEgc2VwYXJhdGUgbG9nIChhIHN1YmZsb3cncyBvd24pLCBuZXZlciBhIHNlY29uZCBwb3NpdGlvbiBvbiB0aGlzIG9uZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lVHJhdmVsPFRNZXRhID0gdW5rbm93bj4ge1xuICAvKiogVGhlIGF4aXMsIGluIGV4ZWN1dGlvbiBvcmRlci4gRW1wdHkgd2hlbiB0aGUgbG9nIGlzIGVtcHR5LiAqL1xuICByZWFkb25seSBzdG9wczogcmVhZG9ubHkgU3RvcDxUTWV0YT5bXTtcbiAgLyoqIFRoZSBzdWJmbG93IHBhdGggdGhpcyBjdXJzb3IgY292ZXJzOyBgdW5kZWZpbmVkYCBmb3IgdGhlIHJ1biBpdHNlbGYuICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBtb3VudCB0aGlzIGN1cnNvciB3YXMgZHJpbGxlZCBvdXQgb2Yg4oCUIGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjaWR4YC5cbiAgICogYHVuZGVmaW5lZGAgb24gYSBydW4ncyBvd24gY3Vyc29yLlxuICAgKlxuICAgKiBXSFkgQk9USDogYSBzdWJmbG93IG1vdW50ZWQgaW5zaWRlIGEgbG9vcCBydW5zIHNldmVyYWwgdGltZXMsIGFuZCBldmVyeVxuICAgKiBpdGVyYXRpb24gc2hhcmVzIG9uZSB7QGxpbmsgcGF0aH0uIFRoaXMgaXMgdGhlIGl0ZXJhdGlvbiB0aGF0IHdhcyBhY3R1YWxseVxuICAgKiBvcGVuZWQsIHNvIHRocmVlIGRyaWxsIHBhbmVscyBvdmVyIGBzZngjMmAsIGBzZngjOGAgYW5kIGBzZngjMTRgIGNhbiBiZVxuICAgKiBsYWJlbGxlZCBhbmQga2V5ZWQgYXBhcnQgaW5zdGVhZCBvZiBhbGwgcmVhZGluZyBgc2Z4YC5cbiAgICovXG4gIHJlYWRvbmx5IG1vdW50UnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFRoZSBjdXJzb3IgdGhpcyBvbmUgd2FzIGRyaWxsZWQgb3V0IG9mLCBpZiBhbnkuICovXG4gIHJlYWRvbmx5IHBhcmVudDogVGltZVRyYXZlbDxUTWV0YT4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBIb3cgbWFueSBTT1VSQ0VTIHRoaXMgY3Vyc29yIHJlYWRzIOKAlCBgMWAgZm9yIGEgbm9ybWFsIGN1cnNvciwgbW9yZSBmb3IgYVxuICAgKiBjaGFpbmVkIG9uZSAoYSBwYXVzZS9yZXN1bWUgcmVhZCBhcyBvbmUgYXhpcykuIEV2ZXJ5IHN0b3Agb2YgYSBjaGFpbmVkXG4gICAqIGN1cnNvciBjYXJyaWVzIHRoZSB7QGxpbmsgU3RvcC5zb3VyY2VJZHh9IGl0cyBpbmRpY2VzIGJlbG9uZyB0by5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUNvdW50OiBudW1iZXI7XG5cbiAgLyoqIFdoZXJlIHRoZSBjdXJzb3IgaXM7IGB1bmRlZmluZWRgIG9ubHkgd2hlbiB0aGVyZSBhcmUgbm8gc3RvcHMuICovXG4gIGF0KCk6IFN0b3A8VE1ldGE+IHwgdW5kZWZpbmVkO1xuXG4gIGZpcnN0KCk6IE1vdmU8VE1ldGE+O1xuICBsYXN0KCk6IE1vdmU8VE1ldGE+O1xuICBwcmV2KCk6IE1vdmU8VE1ldGE+O1xuICBuZXh0KCk6IE1vdmU8VE1ldGE+O1xuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIGEgc3RlcCBudW1iZXIgb3IgdG8gYSBgcnVudGltZVN0YWdlSWRgLlxuICAgKiBBIG1pc3MgcmVmdXNlcyBhbmQgbmFtZXMgdGhlIGBuZWFyZXN0YCBzdG9wIGl0IGNvdWxkIGZpbmQuXG4gICAqL1xuICBqdW1wVG8odGFyZ2V0OiBudW1iZXIgfCBzdHJpbmcpOiBNb3ZlPFRNZXRhPjtcblxuICAvKipcbiAgICogRm9sZCBvZiB0aGUgbG9nIHRocm91Z2ggYHN0b3BgIChkZWZhdWx0OiB0aGUgY3VycmVudCBzdG9wKS4gRGV0YWNoZWQuXG4gICAqXG4gICAqIGBzdG9wYCBtdXN0IGNvbWUgZnJvbSBUSElTIGN1cnNvcidzIGF4aXM6IGl0cyBgbGFzdENvbW1pdElkeGAgYW5kXG4gICAqIGBzb3VyY2VJZHhgIGFyZSByZWFkIGFzIGFkZHJlc3NlcyBpbnRvIHRoaXMgY3Vyc29yJ3Mgb3duIGxlZ3MsIHNvIGEgc3RvcFxuICAgKiBmcm9tIGFub3RoZXIgY3Vyc29yIGlzIGZvbGRlZCBhdCB3aGF0ZXZlciB0aG9zZSBudW1iZXJzIG1lYW4gaGVyZSDigJQgb24gYVxuICAgKiBjaGFpbiwgYSBmb3JlaWduIHN0b3Agd2l0aCBubyBgc291cmNlSWR4YCBmb2xkcyBsZWcgMC5cbiAgICovXG4gIHN0YXRlQXQoc3RvcD86IFN0b3A8VE1ldGE+KTogRm9sZGVkU3RhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBrZXlzIHdyaXR0ZW4gYmV0d2VlbiB0d28gc3RvcHMg4oCUIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBidW5kbGVzJ1xuICAgKiB0cmFjZXMsIHNvIGl0IGNvc3RzIG5vIGZvbGQgYXQgYWxsLlxuICAgKlxuICAgKiBXaXRoIG5vIGFyZ3VtZW50OiB3aGF0IHRoZSBDVVJSRU5UIHN0b3AgY2hhbmdlZCAoaS5lLiBzaW5jZSB0aGUgc3RvcFxuICAgKiBiZWZvcmUgaXQpLiBXaXRoIGEgYGZyb21gIHN0b3A6IGV2ZXJ5dGhpbmcgd3JpdHRlbiBhZnRlciBgZnJvbWAgdXAgdG8gYW5kXG4gICAqIGluY2x1ZGluZyB0aGUgY3VycmVudCBzdG9wLiBCYWNrd2FyZHMgb3IgZXF1YWwgcmFuZ2VzIGdpdmUgYFtdYC4gT24gYVxuICAgKiBjaGFpbmVkIGN1cnNvciBhIHJhbmdlIHRoYXQgY3Jvc3NlcyB0aGUgc2VhbSBpcyB3YWxrZWQgc291cmNlIGJ5IHNvdXJjZS5cbiAgICovXG4gIGNoYW5nZWRTaW5jZShmcm9tPzogU3RvcDxUTWV0YT4pOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogQm9va21hcmsgYSBzdG9wIChkZWZhdWx0OiB0aGUgY3VycmVudCBvbmUpLiBSZXR1cm5zIHRoZSBtYXJrLCBvclxuICAgKiAgYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBpcyBubyBzdG9wIHRvIG5hbWUuICovXG4gIG1hcmsobmFtZTogc3RyaW5nLCBzdG9wPzogU3RvcDxUTWV0YT4pOiBNYXJrIHwgdW5kZWZpbmVkO1xuICAvKiogQSBkZXRhY2hlZCBjb3B5IG9mIHRoaXMgY3Vyc29yJ3MgbWFya3MsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcGxhY2VkLiAqL1xuICBtYXJrcygpOiByZWFkb25seSBNYXJrW107XG4gIC8qKiBNb3ZlIHRvIGEgbWFyaydzIHN0b3AuIEEgbWFyayB3aG9zZSBzdGFnZSBpcyBub3Qgb24gdGhpcyBheGlzIG1pc3Nlcy4gKi9cbiAganVtcFRvTWFyayhuYW1lOiBzdHJpbmcpOiBNb3ZlPFRNZXRhPjtcblxuICAvKipcbiAgICogQSBjdXJzb3Igb3ZlciB0aGUgc3ViZmxvdyBtb3VudGVkIGF0IGBtb3VudFJ1bnRpbWVTdGFnZUlkYCDigJQgdGhlIHNhbWVcbiAgICogaW50ZXJmYWNlLCBpdHMgb3duIGxvZywgaXRzIG93biBmb2xkIGJhc2UuIGB1bmRlZmluZWRgIHdoZW4gdGhhdCBtb3VudCBpc1xuICAgKiBub3QgaW4gdGhpcyBydW4ncyBzdWJmbG93IHJlc3VsdHMuXG4gICAqXG4gICAqIEEgc3RvcCBpbnNpZGUgYSBzdWJmbG93IGlzIE5PVCBhIHN0b3Agb2YgdGhpcyBjdXJzb3I6IHN1YmZsb3dzIHJ1biBpblxuICAgKiBpc29sYXRlZCBydW50aW1lcyBhbmQgY29tbWl0IHRvIHRoZWlyIG93biBsb2csIHNvIHRoZSBvdXRlciBheGlzIGhvbGRzXG4gICAqIG9ubHkgdGhlIG1vdW50IGJvdW5kYXJ5LiBEcmlsbGluZyBpcyBob3cgeW91IGdldCBpbnNpZGU7IHRoZXJlIGlzIG5vIHdheVxuICAgKiB0byBiZSBpbiB0d28gcGxhY2VzIGF0IG9uY2UuXG4gICAqL1xuICBkcmlsbChtb3VudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBUaW1lVHJhdmVsPFRNZXRhPiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayB0aW1lVHJhdmVsfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVRyYXZlbE9wdGlvbnM8VE1ldGEgPSB1bmtub3duPiB7XG4gIC8qKiBIb3cgc3RvcHMgYXJlIGRlcml2ZWQuIERlZmF1bHQ6IGBjb21taXRTdG9wc2AuICovXG4gIHJlYWRvbmx5IHN0cmF0ZWd5PzogVGltZVRyYXZlbFN0cmF0ZWd5PFRNZXRhPjtcbiAgLyoqIE1hcmtzIHRvIHNlZWQgdGhlIGN1cnNvciB3aXRoIOKAlCBlLmcuIHJlc3RvcmVkIGZyb20gYSBzYXZlZCBzZXNzaW9uLiAqL1xuICByZWFkb25seSBtYXJrcz86IHJlYWRvbmx5IE1hcmtbXTtcbn1cbiJdfQ==
package/dist/trace.js CHANGED
@@ -31,8 +31,8 @@
31
31
  * ```
32
32
  */
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.topologyRecorder = exports.TopologyRecorder = exports.CommitRangeIndex = exports.SequenceStore = exports.KeyedStore = exports.BoundaryStateStore = exports.HONESTY_CODES = exports.sliceToJSON = exports.sliceForKey = exports.resolveKeysReadSource = exports.normaliseStateKey = exports.keyTimeline = exports.keysReadFromMap = exports.keysReadFromExecutionTree = exports.forwardSliceToJSON = exports.forwardSliceForKey = exports.formatTimeline = exports.formatSlice = exports.formatForwardSlice = exports.elementProvenance = exports.arrayProvenance = exports.formatCausalChain = exports.flattenCausalDAG = exports.causalChain = exports.timeTravel = exports.tagStops = exports.stateAt = exports.splitAxis = exports.isCommitBundle = exports.filterStops = exports.commitStopsStrategy = exports.commitStops = exports.findLastWriter = exports.findCommits = exports.findCommit = exports.commitValueAt = exports.commitIndexOf = exports.buildCommitIndex = exports.UnknownVerbError = exports.pathSegments = exports.walkSubflowSpec = exports.parseBranchSegment = exports.isBranchSegment = exports.hasBranchSegmentMarker = exports.buildBranchSegment = exports.BRANCH_SEGMENT_MARKER = exports.splitStageId = exports.parseRuntimeStageId = exports.createExecutionCounter = exports.buildRuntimeStageId = void 0;
35
- exports.qualityTrace = exports.formatQualityTrace = exports.QualityRecorder = exports.controlDepRecorder = exports.ControlDepRecorder = exports.ROOT_SUBFLOW_ID = exports.ROOT_RUNTIME_STAGE_ID = exports.inOutRecorder = exports.InOutRecorder = void 0;
34
+ exports.CommitRangeIndex = exports.SequenceStore = exports.KeyedStore = exports.BoundaryStateStore = exports.HONESTY_CODES = exports.sliceToJSON = exports.sliceForKey = exports.resolveKeysReadSource = exports.normaliseStateKey = exports.keyTimeline = exports.keysReadFromMap = exports.keysReadFromExecutionTree = exports.forwardSliceToJSON = exports.forwardSliceForKey = exports.formatTimeline = exports.formatSlice = exports.formatForwardSlice = exports.elementProvenance = exports.arrayProvenance = exports.formatCausalChain = exports.flattenCausalDAG = exports.causalChain = exports.timeTravel = exports.tagStops = exports.stateAt = exports.splitAxis = exports.isCommitBundle = exports.filterStops = exports.commitStopsStrategy = exports.commitStops = exports.findLastWriterWithBasis = exports.findLastWriter = exports.findCommits = exports.findCommit = exports.commitValueAtWithBasis = exports.commitValueAt = exports.commitIndexOf = exports.buildCommitIndex = exports.UnknownVerbError = exports.pathSegments = exports.walkSubflowSpec = exports.parseBranchSegment = exports.isBranchSegment = exports.hasBranchSegmentMarker = exports.buildBranchSegment = exports.BRANCH_SEGMENT_MARKER = exports.splitStageId = exports.parseRuntimeStageId = exports.createExecutionCounter = exports.buildRuntimeStageId = void 0;
35
+ exports.qualityTrace = exports.formatQualityTrace = exports.QualityRecorder = exports.controlDepRecorder = exports.ControlDepRecorder = exports.ROOT_SUBFLOW_ID = exports.ROOT_RUNTIME_STAGE_ID = exports.inOutRecorder = exports.InOutRecorder = exports.topologyRecorder = exports.TopologyRecorder = void 0;
36
36
  var runtimeStageId_js_1 = require("./lib/engine/runtimeStageId.js");
37
37
  Object.defineProperty(exports, "buildRuntimeStageId", { enumerable: true, get: function () { return runtimeStageId_js_1.buildRuntimeStageId; } });
38
38
  Object.defineProperty(exports, "createExecutionCounter", { enumerable: true, get: function () { return runtimeStageId_js_1.createExecutionCounter; } });
@@ -66,17 +66,15 @@ Object.defineProperty(exports, "pathSegments", { enumerable: true, get: function
66
66
  // naming the row, instead of being folded as a merge.
67
67
  var index_js_1 = require("./lib/memory/index.js");
68
68
  Object.defineProperty(exports, "UnknownVerbError", { enumerable: true, get: function () { return index_js_1.UnknownVerbError; } });
69
- // Commit log queries — typed utilities for backtracking.
70
- // commitValueAt reconstructs the FULL value of a key at a commit index —
71
- // required under `commitValues: 'delta'` (#13c-B), where an `append`
72
- // bundle's `overwrite[key]` holds only the tail.
73
69
  var commitLogUtils_js_1 = require("./lib/memory/commitLogUtils.js");
74
70
  Object.defineProperty(exports, "buildCommitIndex", { enumerable: true, get: function () { return commitLogUtils_js_1.buildCommitIndex; } });
75
71
  Object.defineProperty(exports, "commitIndexOf", { enumerable: true, get: function () { return commitLogUtils_js_1.commitIndexOf; } });
76
72
  Object.defineProperty(exports, "commitValueAt", { enumerable: true, get: function () { return commitLogUtils_js_1.commitValueAt; } });
73
+ Object.defineProperty(exports, "commitValueAtWithBasis", { enumerable: true, get: function () { return commitLogUtils_js_1.commitValueAtWithBasis; } });
77
74
  Object.defineProperty(exports, "findCommit", { enumerable: true, get: function () { return commitLogUtils_js_1.findCommit; } });
78
75
  Object.defineProperty(exports, "findCommits", { enumerable: true, get: function () { return commitLogUtils_js_1.findCommits; } });
79
76
  Object.defineProperty(exports, "findLastWriter", { enumerable: true, get: function () { return commitLogUtils_js_1.findLastWriter; } });
77
+ Object.defineProperty(exports, "findLastWriterWithBasis", { enumerable: true, get: function () { return commitLogUtils_js_1.findLastWriterWithBasis; } });
80
78
  var index_js_2 = require("./lib/time-travel/index.js");
81
79
  Object.defineProperty(exports, "commitStops", { enumerable: true, get: function () { return index_js_2.commitStops; } });
82
80
  Object.defineProperty(exports, "commitStopsStrategy", { enumerable: true, get: function () { return index_js_2.commitStopsStrategy; } });
@@ -135,4 +133,4 @@ Object.defineProperty(exports, "QualityRecorder", { enumerable: true, get: funct
135
133
  var qualityTrace_js_1 = require("./lib/recorder/qualityTrace.js");
136
134
  Object.defineProperty(exports, "formatQualityTrace", { enumerable: true, get: function () { return qualityTrace_js_1.formatQualityTrace; } });
137
135
  Object.defineProperty(exports, "qualityTrace", { enumerable: true, get: function () { return qualityTrace_js_1.qualityTrace; } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7Ozs7QUFJSCxvRUFLd0M7QUFKdEMsd0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsMkhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsd0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsaUhBQUEsWUFBWSxPQUFBO0FBR2QsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSxnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLHdFQUF3RTtBQUN4RSx3REFBd0Q7QUFDeEQsNENBQTRDO0FBQzVDLGtFQU11QztBQUxyQyx5SEFBQSxxQkFBcUIsT0FBQTtBQUNyQixzSEFBQSxrQkFBa0IsT0FBQTtBQUNsQiwwSEFBQSxzQkFBc0IsT0FBQTtBQUN0QixtSEFBQSxlQUFlLE9BQUE7QUFDZixzSEFBQSxrQkFBa0IsT0FBQTtBQU1wQixzRUFBa0U7QUFBekQscUhBQUEsZUFBZSxPQUFBO0FBRXhCLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxvRUFBb0U7QUFDcEUsa0RBQXFEO0FBQTVDLHdHQUFBLFlBQVksT0FBQTtBQUVyQix1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxzREFBc0Q7QUFDdEQsa0RBQXlEO0FBQWhELDRHQUFBLGdCQUFnQixPQUFBO0FBRXpCLHlEQUF5RDtBQUN6RCx5RUFBeUU7QUFDekUscUVBQXFFO0FBQ3JFLGlEQUFpRDtBQUNqRCxvRUFPd0M7QUFOdEMscUhBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsa0hBQUEsYUFBYSxPQUFBO0FBQ2Isa0hBQUEsYUFBYSxPQUFBO0FBQ2IsK0dBQUEsVUFBVSxPQUFBO0FBQ1YsZ0hBQUEsV0FBVyxPQUFBO0FBQ1gsbUhBQUEsY0FBYyxPQUFBO0FBMENoQix1REFTb0M7QUFSbEMsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsK0dBQUEsbUJBQW1CLE9BQUE7QUFDbkIsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsMEdBQUEsY0FBYyxPQUFBO0FBQ2QscUdBQUEsU0FBUyxPQUFBO0FBQ1QsbUdBQUEsT0FBTyxPQUFBO0FBQ1Asb0dBQUEsUUFBUSxPQUFBO0FBQ1Isc0dBQUEsVUFBVSxPQUFBO0FBZ0JaLDBEQUE2RjtBQUFwRiwyR0FBQSxXQUFXLE9BQUE7QUFBRSxnSEFBQSxnQkFBZ0IsT0FBQTtBQUFFLGlIQUFBLGlCQUFpQixPQUFBO0FBMkN6RCxpREFlOEI7QUFkNUIsMkdBQUEsZUFBZSxPQUFBO0FBQ2YsNkdBQUEsaUJBQWlCLE9BQUE7QUFDakIsOEdBQUEsa0JBQWtCLE9BQUE7QUFDbEIsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsMEdBQUEsY0FBYyxPQUFBO0FBQ2QsOEdBQUEsa0JBQWtCLE9BQUE7QUFDbEIsOEdBQUEsa0JBQWtCLE9BQUE7QUFDbEIscUhBQUEseUJBQXlCLE9BQUE7QUFDekIsMkdBQUEsZUFBZSxPQUFBO0FBQ2YsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsNkdBQUEsaUJBQWlCLE9BQUE7QUFDakIsaUhBQUEscUJBQXFCLE9BQUE7QUFDckIsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsdUdBQUEsV0FBVyxPQUFBO0FBY2Isa0RBQXNEO0FBQTdDLHlHQUFBLGFBQWEsT0FBQTtBQUV0QixtRUFBbUU7QUFDbkUsaUVBQWlFO0FBQ2pFLGlFQUFpRTtBQUNqRSw0Q0FBNEM7QUFDNUMsOEVBQTBFO0FBQWpFLDJIQUFBLGtCQUFrQixPQUFBO0FBQzNCLDhEQUEwRDtBQUFqRCwyR0FBQSxVQUFVLE9BQUE7QUFDbkIsb0VBQWdFO0FBQXZELGlIQUFBLGFBQWEsT0FBQTtBQVN0QiwwRUFBc0U7QUFBN0QsdUhBQUEsZ0JBQWdCLE9BQUE7QUFVekIsMEVBQXdGO0FBQS9FLHVIQUFBLGdCQUFnQixPQUFBO0FBQUUsdUhBQUEsZ0JBQWdCLE9BQUE7QUFLM0Msb0VBQXVIO0FBQTlHLGlIQUFBLGFBQWEsT0FBQTtBQUFFLGlIQUFBLGFBQWEsT0FBQTtBQUFFLHlIQUFBLHFCQUFxQixPQUFBO0FBQUUsbUhBQUEsZUFBZSxPQUFBO0FBTzdFLDhFQUE4RjtBQUFyRiwySEFBQSxrQkFBa0IsT0FBQTtBQUFFLDJIQUFBLGtCQUFrQixPQUFBO0FBSS9DLHdFQUFvRTtBQUEzRCxxSEFBQSxlQUFlLE9BQUE7QUFJeEIsa0VBQWtGO0FBQXpFLHFIQUFBLGtCQUFrQixPQUFBO0FBQUUsK0dBQUEsWUFBWSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBmb290cHJpbnRqcy90cmFjZSDigJQgRXhlY3V0aW9uIHRyYWNpbmcsIGRlYnVnZ2luZywgYW5kIGJhY2t0cmFja2luZyB1dGlsaXRpZXMuXG4gKlxuICogUnVudGltZSBzdGFnZSBJRHMsIGNvbW1pdCBsb2cgcXVlcmllcywgYW5kIHJlY29yZGVyIGJhc2UgY2xhc3Nlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgcGFyc2VSdW50aW1lU3RhZ2VJZCwgZmluZExhc3RXcml0ZXIsIEtleWVkU3RvcmUsIFNlcXVlbmNlU3RvcmUgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogLy8gUGFyc2UgYSBydW50aW1lU3RhZ2VJZFxuICogY29uc3QgeyBzdGFnZUlkLCBleGVjdXRpb25JbmRleCB9ID0gcGFyc2VSdW50aW1lU3RhZ2VJZCgnY2FsbC1sbG0jNScpO1xuICpcbiAqIC8vIEJhY2t0cmFjazogd2hvIHdyb3RlICdzeXN0ZW1Qcm9tcHQnIGJlZm9yZSBjb21taXQgYXQgaWR4IDg/XG4gKiBjb25zdCB3cml0ZXIgPSBmaW5kTGFzdFdyaXRlcihjb21taXRMb2csICdzeXN0ZW1Qcm9tcHQnLCA4KTtcbiAqXG4gKiAvLyB2NSBwcmltYXJ5IEFQSTogY29tcG9zZSBhIFN0b3JlIGFzIGEgZmllbGQgKG9uZSBwdXJwb3NlIHBlciByZWNvcmRlcikuXG4gKiAvLyBLZXllZFN0b3JlPFQ+IOKAlCAxOjEgKG9uZSBlbnRyeSBwZXIgc3RlcClcbiAqIGNsYXNzIE15UmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICdteS1yZWNvcmRlcic7XG4gKiAgIHByaXZhdGUgc3RvcmUgPSBuZXcgS2V5ZWRTdG9yZTxNeUVudHJ5PigpO1xuICogICBvbldyaXRlKGUpIHsgdGhpcy5zdG9yZS5zZXQoZS5ydW50aW1lU3RhZ2VJZCwgeyAuLi4gfSk7IH1cbiAqIH1cbiAqXG4gKiAvLyBTZXF1ZW5jZVN0b3JlPFQ+IOKAlCAxOk4gKG11bHRpcGxlIGVudHJpZXMgcGVyIHN0ZXAsIG9yZGVyaW5nIG1hdHRlcnMpXG4gKiBjbGFzcyBBdWRpdFJlY29yZGVyIHtcbiAqICAgcmVhZG9ubHkgaWQgPSAnYXVkaXQnO1xuICogICBwcml2YXRlIHN0b3JlID0gbmV3IFNlcXVlbmNlU3RvcmU8QXVkaXRFbnRyeT4oKTtcbiAqICAgb25SZWFkKGUpIHsgdGhpcy5zdG9yZS5wdXNoKHsgcnVudGltZVN0YWdlSWQ6IGUucnVudGltZVN0YWdlSWQsIC4uLiB9KTsgfVxuICogfVxuICogYGBgXG4gKi9cblxuLy8gUnVudGltZSBzdGFnZSBJRCDigJQgdW5pcXVlIGV4ZWN1dGlvbiBzdGVwIGlkZW50aWZpZXJzXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvdW50ZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvcnVudGltZVN0YWdlSWQuanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRSdW50aW1lU3RhZ2VJZCxcbiAgY3JlYXRlRXhlY3V0aW9uQ291bnRlcixcbiAgcGFyc2VSdW50aW1lU3RhZ2VJZCxcbiAgc3BsaXRTdGFnZUlkLFxufSBmcm9tICcuL2xpYi9lbmdpbmUvcnVudGltZVN0YWdlSWQuanMnO1xuXG4vLyBHZW5lcmF0ZWQgYnJhbmNoIHNlZ21lbnRzIOKAlCB0aGUgc3ViZmxvdyBwYXRoIHNlZ21lbnRzIGBhZGRQYXJhbGxlbEZvckVhY2hgXG4vLyBtaW50cyBmb3IgaXRzIGJyYW5jaGVzIChgPHN0YWdlSWQ+fjxpbmRleD5gKS4gQSBicmFuY2ggaXMgYWRkcmVzc2VkIGJ5IHRoZVxuLy8gT1JESU5BUlkgZ3JhbW1hciBhYm92ZSwgc28gbm90aGluZyBoZXJlIGlzIG5lZWRlZCB0byBSRUFEIG9uZTsgdGhlc2UgZXhpc3Qgc29cbi8vIGEgY29uc3VtZXIgY2FuIFRFTEwgYSBnZW5lcmF0ZWQgYnJhbmNoIGZyb20gYSBoYW5kLWF1dGhvcmVkIHN1YmZsb3cgKHRvIGxhYmVsXG4vLyBpdCBcImJyYW5jaCAyIG9mIHJldmlldy1jaHVua3NcIiBpbnN0ZWFkIG9mIGEgc3ViZmxvdyBuYW1lKSwgYW5kIHNvIHRoZVxuLy8gcmVzZXJ2ZWQgbWFya2VyIGlzIGRpc2NvdmVyYWJsZSByYXRoZXIgdGhhbiBmb2xrbG9yZS5cbi8vIERlc2lnbjogZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQuXG5leHBvcnQge1xuICBCUkFOQ0hfU0VHTUVOVF9NQVJLRVIsXG4gIGJ1aWxkQnJhbmNoU2VnbWVudCxcbiAgaGFzQnJhbmNoU2VnbWVudE1hcmtlcixcbiAgaXNCcmFuY2hTZWdtZW50LFxuICBwYXJzZUJyYW5jaFNlZ21lbnQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9icmFuY2hTZWdtZW50LmpzJztcblxuLy8gd2Fsa1N1YmZsb3dTcGVjIOKAlCBmbGF0IG9yZGVyZWQgdHJhdmVyc2FsIG9mIGEgc3ViZmxvdydzIHN0cnVjdHVyZVxuLy8gKGNvbnN1bWUgdmlhIFN0cnVjdHVyZVJlY29yZGVyLm9uU3ViZmxvd01vdW50ZWQncyBzdWJmbG93U3BlYyBwYXlsb2FkKVxuZXhwb3J0IHR5cGUgeyBXYWxrZXJJdGVtLCBXYWxrZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL3dhbGtTdWJmbG93U3BlYy5qcyc7XG5leHBvcnQgeyB3YWxrU3ViZmxvd1NwZWMgfSBmcm9tICcuL2xpYi9lbmdpbmUvd2Fsa1N1YmZsb3dTcGVjLmpzJztcblxuLy8gUGF0aCBzZWdtZW50cyDigJQgdGhlIHN1cHBvcnRlZCB3YXkgdG8gdGFrZSBhIGBUcmFjZUVudHJ5LnBhdGhgIGFwYXJ0LiBQYXRoc1xuLy8gYXJlIGpvaW5lZCB3aXRoIGFuIEFTQ0lJIFVuaXQtU2VwYXJhdG9yIChuZXZlciBhIGRvdDogYSBzdGF0ZSBrZXkgbWF5IGl0c2VsZlxuLy8gY29udGFpbiBhIGRvdCwgc28gYSBkb3Qgc2VwYXJhdG9yIHdvdWxkIG1ha2UgYFsnYS5iJ11gIGFuZCBgWydhJywnYiddYFxuLy8gaW5kaXN0aW5ndWlzaGFibGUpLCB3aGljaCBpcyBhbiBlbmNvZGluZywgbm90IGEgZGlzcGxheSBjaGFyYWN0ZXIuIFJlbmRlciBhXG4vLyBwYXRoIHRocm91Z2ggdGhpcyBpbnN0ZWFkIG9mIHNwbGl0dGluZyBvbiB0aGUgZGVsaW1pdGVyIHlvdXJzZWxmLlxuZXhwb3J0IHsgcGF0aFNlZ21lbnRzIH0gZnJvbSAnLi9saWIvbWVtb3J5L3V0aWxzLmpzJztcblxuLy8gVGhlIHJlZnVzYWwgdGhlIGNvbW1pdC1sb2cgcmVhZGVycyByYWlzZSBmb3IgYSByb3cgd2hvc2UgdmVyYiBpcyBub3Rcbi8vIHNldCB8IG1lcmdlIHwgYXBwZW5kIHwgZGVsZXRlIChgY29tbWl0VmFsdWVBdGAsIGBhcnJheVByb3ZlbmFuY2VgLCBhbmRcbi8vIGBhcHBseVNtYXJ0TWVyZ2VgIG9uIGAvYWR2YW5jZWRgKTogYSBmb3JlaWduIG9yIGNvcnJ1cHRlZCBsb2cgZmFpbHMgbG91ZGx5LFxuLy8gbmFtaW5nIHRoZSByb3csIGluc3RlYWQgb2YgYmVpbmcgZm9sZGVkIGFzIGEgbWVyZ2UuXG5leHBvcnQgeyBVbmtub3duVmVyYkVycm9yIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLy8gQ29tbWl0IGxvZyBxdWVyaWVzIOKAlCB0eXBlZCB1dGlsaXRpZXMgZm9yIGJhY2t0cmFja2luZy5cbi8vIGNvbW1pdFZhbHVlQXQgcmVjb25zdHJ1Y3RzIHRoZSBGVUxMIHZhbHVlIG9mIGEga2V5IGF0IGEgY29tbWl0IGluZGV4IOKAlFxuLy8gcmVxdWlyZWQgdW5kZXIgYGNvbW1pdFZhbHVlczogJ2RlbHRhJ2AgKCMxM2MtQiksIHdoZXJlIGFuIGBhcHBlbmRgXG4vLyBidW5kbGUncyBgb3ZlcndyaXRlW2tleV1gIGhvbGRzIG9ubHkgdGhlIHRhaWwuXG5leHBvcnQge1xuICBidWlsZENvbW1pdEluZGV4LFxuICBjb21taXRJbmRleE9mLFxuICBjb21taXRWYWx1ZUF0LFxuICBmaW5kQ29tbWl0LFxuICBmaW5kQ29tbWl0cyxcbiAgZmluZExhc3RXcml0ZXIsXG59IGZyb20gJy4vbGliL21lbW9yeS9jb21taXRMb2dVdGlscy5qcyc7XG5cbi8vIOKUgOKUgCB0aW1lLXRyYXZlbC8g4oCUIHRoZSBSRUFERVInUyBjdXJzb3Igb3ZlciBhIGZpbmlzaGVkIHRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQSBUcmFjZSBpcyB3aGF0IHRoZSBydW4gcmVjb3JkZWQ7IHRpbWUgdHJhdmVsIGlzIGEgY3Vyc29yIG92ZXIgaXQgd2l0aCBhXG4vLyBGb2xkIGF0IGVhY2ggc3RvcC4gSXQgaXMgTk9UIHRoZSBlbmdpbmUncyB3YWxrIGFuZCBuZXZlciBiZWNvbWVzIGEgc2Vjb25kXG4vLyBsaXZlIGN1cnNvcjogZXZlcnl0aGluZyBiZWxvdyBpcyBhIHJlYWQtdGltZSBxdWVyeSBvdmVyIGFscmVhZHktY29sbGVjdGVkXG4vLyBkYXRhLlxuLy9cbi8vIGBzdGF0ZUF0KHNuYXBzaG90IHwgc3VidHJlZSwgY29tbWl0SWR4KWAgaXMgdGhlIGZvbGQg4oCUIHRoZSBydW4nc1xuLy8gYGluaXRpYWxTdGF0ZWAgcmVwbGF5ZWQgdGhyb3VnaCBgY29tbWl0TG9nWzAuLmNvbW1pdElkeF1gIHdpdGggdGhlIFNBTUUgdmVyYlxuLy8gc3dpdGNoIHRoZSBsaXZlIGNvbW1pdCB1c2VzLCByZXR1cm5lZCBkZXRhY2hlZCBhbmQgZnJvemVuLCBhbmQgaG9uZXN0IGFib3V0XG4vLyBob3cgaXQgd2FzIGRlcml2ZWQgKGBiYXNpc2ApIGFuZCB3aGVyZSB0aGUgbG9nIHdhcyBzY3J1YmJlZCAoYHJlZGFjdGVkYCkuXG4vL1xuLy8gYHRpbWVUcmF2ZWwoc25hcHNob3QpYCBpcyB0aGUgY3Vyc29yOiBzdG9wcywgcHJldi9uZXh0L2p1bXBUbywgbWFya3MgYmVzaWRlXG4vLyB0aGUgbG9nLCBhbmQgYGRyaWxsKG1vdW50KWAgaW50byBhIHN1YmZsb3cncyBvd24gbG9nIOKAlCB0aGUgc2FtZSBpbnRlcmZhY2UsXG4vLyBpdHMgb3duIGJhc2UuIEhvdyBzdG9wcyBhcmUgREVSSVZFRCBpcyB0aGUgc2VhbSAoYFRpbWVUcmF2ZWxTdHJhdGVneWApO1xuLy8gZm9vdHByaW50anMgc2hpcHMgYGNvbW1pdFN0b3BzYCAob25lIHN0b3AgcGVyIGV4ZWN1dGVkIHN0YWdlKSBiZWNhdXNlIHRoYXRcbi8vIGlzIHRoZSBvbmx5IHN0b3AgZ3JhbW1hciB0aGUgc3Vic3RyYXRlIGl0c2VsZiBrbm93cyDigJQgYW5kLCBzaW5jZSA5LjIxLjAsXG4vLyBgdGFnU3RvcHModGFncz8pYDogdGhlIHN0b3BzIGEgY2hhcnQgREVDTEFSRUQgYXQgYnVpbGQgdGltZSAoYC50YWcoKWApLFxuLy8gcmVhZCBiYWNrIG9mZiBgQ29tbWl0QnVuZGxlLnRhZ3NgLCBzbyBhIHN0b3JlZCByZWNvcmRpbmcgc2NydWJzIGJ5IGl0cyBvd25cbi8vIG1pbGVzdG9uZXMgd2l0aCBubyBpZCBjb252ZW50aW9ucyBpbiB0aGUgcmVhZGVyLlxuLy8gU2VlIHNyYy9saWIvdGltZS10cmF2ZWwvUkVBRE1FLm1kLlxuZXhwb3J0IHR5cGUge1xuICBBeGlzUmVmdXNhbCxcbiAgQXhpc1NwbGl0LFxuICBCb29rZW5kZWRBeGlzLFxuICBGb2xkQmFzaXMsXG4gIEZvbGRlZFN0YXRlLFxuICBGb2xkU291cmNlLFxuICBMb2dHYXAsXG4gIE1hcmssXG4gIE1vdmUsXG4gIE1vdmVSZWZ1c2FsLFxuICBTdG9wLFxuICBTdG9wRmlsdGVyLFxuICBTdG9wS2luZCxcbiAgVGltZVRyYXZlbCxcbiAgVGltZVRyYXZlbE9wdGlvbnMsXG4gIFRpbWVUcmF2ZWxTb3VyY2UsXG4gIFRpbWVUcmF2ZWxTdHJhdGVneSxcbn0gZnJvbSAnLi9saWIvdGltZS10cmF2ZWwvaW5kZXguanMnO1xuZXhwb3J0IHtcbiAgY29tbWl0U3RvcHMsXG4gIGNvbW1pdFN0b3BzU3RyYXRlZ3ksXG4gIGZpbHRlclN0b3BzLFxuICBpc0NvbW1pdEJ1bmRsZSxcbiAgc3BsaXRBeGlzLFxuICBzdGF0ZUF0LFxuICB0YWdTdG9wcyxcbiAgdGltZVRyYXZlbCxcbn0gZnJvbSAnLi9saWIvdGltZS10cmF2ZWwvaW5kZXguanMnO1xuXG4vLyBDYXVzYWwgY2hhaW4g4oCUIGJhY2t3YXJkIHByb2dyYW0gc2xpY2luZyBvbiBjb21taXQgbG9nIChEQUcpLlxuLy8gUkZDLTAwMyBEMzogYENhdXNhbEVkZ2VgICh0eXBlZC9rZXllZC93ZWlnaHRlZCBwYXJlbnQgbGlua3Mgb25cbi8vIGBDYXVzYWxOb2RlLnBhcmVudEVkZ2VzYCkgKyB0aGUgYGNvbnRyb2xEZXBzYCBvcHRpb24gKGBDb250cm9sRGVwTG9va3VwYClcbi8vIGFkZCBjb250cm9sLWRlcGVuZGVuY2UgZWRnZXMgdG8gdGhlIHNsaWNlLlxuZXhwb3J0IHR5cGUge1xuICBDYXVzYWxDaGFpbk9wdGlvbnMsXG4gIENhdXNhbEVkZ2UsXG4gIENhdXNhbE5vZGUsXG4gIENvbnRyb2xEZXBlbmRlbmN5LFxuICBDb250cm9sRGVwTG9va3VwLFxuICBFZGdlV2VpZ2hlcixcbiAgS2V5c1JlYWRMb29rdXAsXG59IGZyb20gJy4vbGliL21lbW9yeS9iYWNrdHJhY2suanMnO1xuZXhwb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcsIGZvcm1hdENhdXNhbENoYWluIH0gZnJvbSAnLi9saWIvbWVtb3J5L2JhY2t0cmFjay5qcyc7XG4vLyBSRkMtMDAzIEQyIOKAlCBob25lc3R5IG1hcmtlcnM6IHRoZSB1bnRyYWNrZWQgcmVhZCBwYXRocyBhIHN0YWdlIGNvbnN1bWVkXG4vLyAoYENvbW1pdEJ1bmRsZS51bnRyYWNrZWRTb3VyY2VzYCDihpIgYENhdXNhbE5vZGUuaW5jb21wbGV0ZVNvdXJjZXNgKS5cbmV4cG9ydCB0eXBlIHsgVW50cmFja2VkU291cmNlIH0gZnJvbSAnLi9saWIvbWVtb3J5L3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIHNsaWNlLyDigJQgdmFyaWFibGUtZmlyc3Qgc2xpY2luZywgYm90aCBkaXJlY3Rpb25zICh0cmlhZ2UgcXVlcnkgbGF5ZXIpIOKUgOKUgFxuLy8gT25lIGNvbnRyYWN0IGZvciBldmVyeSB0cmlhZ2Ugc3VyZmFjZSAoVUkgcGFuZWwsIExMTSB0b29sLCBvZmZsaW5lXG4vLyBhdXRvcHN5IGFnZW50KTogdmFyaWFibGUgaW4g4oaSIHNsaWNlIG91dC5cbi8vXG4vLyBCQUNLV0FSRCDigJQgYHNsaWNlRm9yS2V5YCBhbmNob3JzIGF0IHRoZSBrZXkncyBsYXN0IHdyaXRlciB0aGVuIGRlbGVnYXRlc1xuLy8gdG8gY2F1c2FsQ2hhaW47IGBhcnJheVByb3ZlbmFuY2VgIC8gYGVsZW1lbnRQcm92ZW5hbmNlYCAoYXBwZW5kLWZvbGQpXG4vLyBhbnN3ZXIgZWxlbWVudC1sZXZlbCBxdWVzdGlvbnMgbGlrZSBcIndoaWNoIHN0YWdlIHByb2R1Y2VkIGhpc3RvcnlbN10/XCIg4oCUXG4vLyB0aGUgZml4IGZvciB0aGUgYWdlbnQgbWVnYS1rZXkgcHJvYmxlbSwgd2l0aCBob25lc3QgYXR0cmlidXRpb24gbGFiZWxzLlxuLy9cbi8vIEZPUldBUkQg4oCUIGBmb3J3YXJkU2xpY2VGb3JLZXlgIHdhbGtzIHRoZSBvdGhlciB3YXk6IGZyb20gYSB3cml0ZSwgdGhyb3VnaFxuLy8gdGhlIHZhbHVlJ3MgTElWRSBSQU5HRSAoaXQgbGl2ZXMgdW50aWwgdGhlIGtleSdzIG5leHQgd3JpdGUpLCB0byBldmVyeVxuLy8gc3RhZ2UgdGhhdCByZWFkIGl0IGFuZCBldmVyeSB3cml0ZSB0aG9zZSByZWFkcyBmZWQuIGBrZXlUaW1lbGluZWAgaXMgdGhlXG4vLyBmbGF0IGNocm9ub2xvZ2ljYWwgdmlldyBvZiB0aGUgc2FtZSBmYWN0cy4gRmVkIGVkZ2VzIGFyZSBFWEFDVCB1bmRlciB0aGVcbi8vIGB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnYCBkaWFsIGFuZCBzdGFtcGVkIENPTlNFUlZBVElWRSB3aXRob3V0XG4vLyBpdCDigJQgbmV2ZXIgdGhlIG90aGVyIHdheSByb3VuZC4gU2VlIHNyYy9saWIvc2xpY2UvUkVBRE1FLm1kLlxuZXhwb3J0IHR5cGUge1xuICBBcnJheVByb3ZlbmFuY2UsXG4gIEF0dHJpYnV0aW9uQmFzaXMsXG4gIEVsZW1lbnRCaXJ0aCxcbiAgRmVkQmFzaXMsXG4gIEZvcndhcmRFZGdlLFxuICBGb3J3YXJkTm9kZSxcbiAgRm9yd2FyZFJlYWQsXG4gIEZvcndhcmRTbGljZSxcbiAgRm9yd2FyZFNsaWNlSlNPTixcbiAgSG9uZXN0eU5vdGUsXG4gIEhvbmVzdHlOb3RlQ29kZSxcbiAgS2V5TW9tZW50LFxuICBLZXlzUmVhZFNvdXJjZSxcbiAgS2V5VGltZWxpbmUsXG4gIE1pc3NpbmdQcm92ZW5hbmNlUmVhc29uLFxuICBNaXNzaW5nU2xpY2VSZWFzb24sXG4gIFJlYWRzQ292ZXJhZ2UsXG4gIFNsaWNlSlNPTixcbiAgU3RhdGVLZXksXG4gIFZhcmlhYmxlU2xpY2UsXG59IGZyb20gJy4vbGliL3NsaWNlL2luZGV4LmpzJztcbmV4cG9ydCB0eXBlIHsgRm9yd2FyZFNsaWNlRm9yS2V5T3B0aW9ucywgS2V5VGltZWxpbmVPcHRpb25zLCBTbGljZUZvcktleU9wdGlvbnMgfSBmcm9tICcuL2xpYi9zbGljZS9pbmRleC5qcyc7XG5leHBvcnQge1xuICBhcnJheVByb3ZlbmFuY2UsXG4gIGVsZW1lbnRQcm92ZW5hbmNlLFxuICBmb3JtYXRGb3J3YXJkU2xpY2UsXG4gIGZvcm1hdFNsaWNlLFxuICBmb3JtYXRUaW1lbGluZSxcbiAgZm9yd2FyZFNsaWNlRm9yS2V5LFxuICBmb3J3YXJkU2xpY2VUb0pTT04sXG4gIGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWUsXG4gIGtleXNSZWFkRnJvbU1hcCxcbiAga2V5VGltZWxpbmUsXG4gIG5vcm1hbGlzZVN0YXRlS2V5LFxuICByZXNvbHZlS2V5c1JlYWRTb3VyY2UsXG4gIHNsaWNlRm9yS2V5LFxuICBzbGljZVRvSlNPTixcbn0gZnJvbSAnLi9saWIvc2xpY2UvaW5kZXguanMnO1xuXG4vLyDilIDilIAgaG9uZXN0eSDigJQgdGhlIE9ORSByZWdpc3RyeSBvZiB3aGF0IGEgcmVhZGVyIGNhbm5vdCBzZWUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUaGUgaG9uZXN0eSBzaWduYWxzIHRoaXMgZG9vcidzIHJlYWRlcnMgcHJvZHVjZSDigJQgYSBzbGljZSdzIGBIb25lc3R5Tm90ZS5jb2RlYCBhbmQgYG1pc3NpbmdgXG4vLyByZWFzb24sIGEgZmVkIGVkZ2UncyBhbmQgYW4gZWxlbWVudCBiaXJ0aCdzIGBiYXNpc2AsIGEgZm9sZCdzIGBiYXNpc2AgYW5kIGByZWRhY3RlZGAgcGF0aHMsIGFcbi8vIGBMb2dHYXBgLCBhIGNhdXNhbCBub2RlJ3MgYGluY29tcGxldGVTb3VyY2VzYCBhbmQgYHRydW5jYXRlZGAg4oCUIGVhY2ggaGFzIGEgY29kZSBoZXJlIGFuZCB0aGUgT05FXG4vLyBzZW50ZW5jZSB0aGF0IHNheXMgd2hhdCBpdCBtZWFucywgc28gYSBsZW5zIG9yIGFuIGFnZW50IHRvb2wgZXhwbGFpbnMgYW55IG9mIHRoZW0gZnJvbSBvbmUgcGxhY2Vcbi8vIGluc3RlYWQgb2Yga2VlcGluZyBpdHMgb3duIHRhYmxlLiBUaGUgdW5pb25zIG9mIHRob3NlIGNvZGVzIGV4cG9ydGVkIGFib3ZlIChgSG9uZXN0eU5vdGVDb2RlYCxcbi8vIGBNaXNzaW5nU2xpY2VSZWFzb25gLCBgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb25gLCBgRmVkQmFzaXNgLCBgQXR0cmlidXRpb25CYXNpc2AsIGBGb2xkQmFzaXNgKSBhcmVcbi8vIHN1YnNldHMgb2YgYEhvbmVzdHlDb2RlYCwgYW5kIHRlc3QvYXJjaGl0ZWN0dXJlL2hvbmVzdHktdm9jYWJ1bGFyeS50ZXN0LnRzIGZhaWxzIG9uIGEgdW5pb24gb2Zcbi8vIHN0cmluZyBsaXRlcmFscyB0aGlzIGRvb3IgZXhwb3J0cyB0aGF0IGlzIG5laXRoZXIgcmVnaXN0ZXJlZCBub3IgbmFtZWQgdGhlcmUgYXMgYSBkaWZmZXJlbnQga2luZFxuLy8gb2Ygd29yZC4gU2VlIHNyYy9saWIvbWVtb3J5L1JFQURNRS5tZC5cbmV4cG9ydCB0eXBlIHsgSG9uZXN0eUNvZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuZXhwb3J0IHsgSE9ORVNUWV9DT0RFUyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vIOKUgOKUgCB2NSBTdG9yZXMgKGNvbmNyZXRlLCBjb21wb3NhYmxlIOKAlCBwcmltYXJ5IHJlY29yZGVyIEFQSSkg4pSA4pSA4pSA4pSA4pSAXG4vLyBDb21wb3NlIHRoZXNlIHZpYSBgbmV3IFN0b3JlPFQ+KClgIGFzIGEgZmllbGQgb24geW91ciByZWNvcmRlclxuLy8gY2xhc3MuIE9uZSBwdXJwb3NlIHBlciByZWNvcmRlcjogc3RvcmVzIGFyZSBzdG9yYWdlOyByZWNvcmRlcnNcbi8vIGFyZSBldmVudC1ob29rIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbnMuXG5leHBvcnQgeyBCb3VuZGFyeVN0YXRlU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Cb3VuZGFyeVN0YXRlU3RvcmUuanMnO1xuZXhwb3J0IHsgS2V5ZWRTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL0tleWVkU3RvcmUuanMnO1xuZXhwb3J0IHsgU2VxdWVuY2VTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL1NlcXVlbmNlU3RvcmUuanMnO1xuXG4vLyDilIDilIAgdjUuMSBDb21taXQgZ3JvdXBpbmcgcHJpbWl0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSW50ZXJ2YWwgaW5kZXggb3ZlciBjb21taXQgaW5kaWNlcy4gQnVpbHQgaW5jcmVtZW50YWxseSBkdXJpbmdcbi8vIHRyYXZlcnNhbDogb3BlbigpIG9uIGJvdW5kYXJ5IGVudHJ5LCBjbG9zZSgpIG9uIGV4aXQuIFF1ZXJ5IGF0IGFueVxuLy8gY29tbWl0IHBvc2l0aW9uIHdpdGggZW5jbG9zaW5nKCkvb3ZlcmxhcHBpbmcoKS4gR2VuZXJpYyBvdmVyIFRMYWJlbFxuLy8g4oCUIGZvb3RwcmludGpzIG93bnMgWkVSTyBrbm93bGVkZ2Ugb2Ygd2hhdCBjb25zdW1lcnMgdXNlIGFzIGxhYmVscy5cbi8vIFNlZSBkb2NzL2Rlc2lnbi9jb21taXQtcmFuZ2UtaW5kZXgubWQgZm9yIHRoZSBmdWxsIGNvbnRyYWN0LlxuZXhwb3J0IHR5cGUgeyBSYW5nZUVudHJ5LCBSYW5nZVRva2VuIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5leHBvcnQgeyBDb21taXRSYW5nZUluZGV4IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5cbi8vIFRvcG9sb2d5UmVjb3JkZXIg4oCUIGNvbXBvc2l0aW9uIGdyYXBoIGFjY3VtdWxhdG9yIChzdWJmbG93cyArIGNvbnRyb2wtZmxvdyBlZGdlcylcbmV4cG9ydCB0eXBlIHtcbiAgVG9wb2xvZ3ksXG4gIFRvcG9sb2d5RWRnZSxcbiAgVG9wb2xvZ3lJbmNvbWluZ0tpbmQsXG4gIFRvcG9sb2d5Tm9kZSxcbiAgVG9wb2xvZ3lSZWNvcmRlck9wdGlvbnMsXG59IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgVG9wb2xvZ3lSZWNvcmRlciwgdG9wb2xvZ3lSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuXG4vLyBJbk91dFJlY29yZGVyIOKAlCBjaGFydCBpbi9vdXQgc3RyZWFtIChlbnRyeS9leGl0IHBhaXJzIGF0IGV2ZXJ5IGNoYXJ0IGJvdW5kYXJ5LFxuLy8gaW5jbHVkaW5nIHRoZSB0b3AtbGV2ZWwgcnVuIGFuZCBldmVyeSBzdWJmbG93KVxuZXhwb3J0IHR5cGUgeyBJbk91dEVudHJ5LCBJbk91dFBoYXNlLCBJbk91dFJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY29yZGVyL0luT3V0UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgSW5PdXRSZWNvcmRlciwgaW5PdXRSZWNvcmRlciwgUk9PVF9SVU5USU1FX1NUQUdFX0lELCBST09UX1NVQkZMT1dfSUQgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Jbk91dFJlY29yZGVyLmpzJztcblxuLy8gQ29udHJvbERlcFJlY29yZGVyIOKAlCBjb250cm9sLWRlcGVuZGVuY2UgdHJhY2tpbmcgKFJGQy0wMDMgRDUpOiByZWNvcmRzXG4vLyBvbkRlY2lzaW9uL29uU2VsZWN0ZWQgKyB0aGUgRDEgcnVudGltZSBhbmNlc3RvciBjaGFpbiwgYW5zd2VycyBcIndoaWNoXG4vLyBkZWNpc2lvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIOKAlCB0aGUgYnVpbHQtaW4gcHJvZHVjZXIgZm9yXG4vLyBjYXVzYWxDaGFpbidzIGBjb250cm9sRGVwc2Agb3B0aW9uLlxuZXhwb3J0IHR5cGUgeyBDb250cm9sRGVjaXNpb25SZWNvcmQsIENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29udHJvbERlcFJlY29yZGVyLCBjb250cm9sRGVwUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIuanMnO1xuXG4vLyBRdWFsaXR5UmVjb3JkZXIg4oCUIHBlci1zdGVwIHF1YWxpdHkgc2NvcmluZyB3aXRoIGJhY2t0cmFja2luZ1xuZXhwb3J0IHR5cGUgeyBRdWFsaXR5RW50cnksIFF1YWxpdHlSZWNvcmRlck9wdGlvbnMsIFF1YWxpdHlTY29yaW5nRm4gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUXVhbGl0eVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvUXVhbGl0eVJlY29yZGVyLmpzJztcblxuLy8gcXVhbGl0eVRyYWNlIOKAlCBRdWFsaXR5IFN0YWNrIFRyYWNlIChiYWNrdHJhY2sgZnJvbSBsb3ctc2NvcmluZyBzdGVwcylcbmV4cG9ydCB0eXBlIHsgUXVhbGl0eUZyYW1lLCBRdWFsaXR5U3RhY2tUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG5leHBvcnQgeyBmb3JtYXRRdWFsaXR5VHJhY2UsIHF1YWxpdHlUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG4iXX0=
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7Ozs7QUFJSCxvRUFLd0M7QUFKdEMsd0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsMkhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsd0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsaUhBQUEsWUFBWSxPQUFBO0FBR2QsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSxnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLHdFQUF3RTtBQUN4RSx3REFBd0Q7QUFDeEQsNENBQTRDO0FBQzVDLGtFQU11QztBQUxyQyx5SEFBQSxxQkFBcUIsT0FBQTtBQUNyQixzSEFBQSxrQkFBa0IsT0FBQTtBQUNsQiwwSEFBQSxzQkFBc0IsT0FBQTtBQUN0QixtSEFBQSxlQUFlLE9BQUE7QUFDZixzSEFBQSxrQkFBa0IsT0FBQTtBQU1wQixzRUFBa0U7QUFBekQscUhBQUEsZUFBZSxPQUFBO0FBRXhCLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxvRUFBb0U7QUFDcEUsa0RBQXFEO0FBQTVDLHdHQUFBLFlBQVksT0FBQTtBQUVyQix1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxzREFBc0Q7QUFDdEQsa0RBQXlEO0FBQWhELDRHQUFBLGdCQUFnQixPQUFBO0FBYXpCLG9FQVN3QztBQVJ0QyxxSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQixrSEFBQSxhQUFhLE9BQUE7QUFDYixrSEFBQSxhQUFhLE9BQUE7QUFDYiwySEFBQSxzQkFBc0IsT0FBQTtBQUN0QiwrR0FBQSxVQUFVLE9BQUE7QUFDVixnSEFBQSxXQUFXLE9BQUE7QUFDWCxtSEFBQSxjQUFjLE9BQUE7QUFDZCw0SEFBQSx1QkFBdUIsT0FBQTtBQTBDekIsdURBU29DO0FBUmxDLHVHQUFBLFdBQVcsT0FBQTtBQUNYLCtHQUFBLG1CQUFtQixPQUFBO0FBQ25CLHVHQUFBLFdBQVcsT0FBQTtBQUNYLDBHQUFBLGNBQWMsT0FBQTtBQUNkLHFHQUFBLFNBQVMsT0FBQTtBQUNULG1HQUFBLE9BQU8sT0FBQTtBQUNQLG9HQUFBLFFBQVEsT0FBQTtBQUNSLHNHQUFBLFVBQVUsT0FBQTtBQWdCWiwwREFBNkY7QUFBcEYsMkdBQUEsV0FBVyxPQUFBO0FBQUUsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFBRSxpSEFBQSxpQkFBaUIsT0FBQTtBQTJDekQsaURBZThCO0FBZDVCLDJHQUFBLGVBQWUsT0FBQTtBQUNmLDZHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDhHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHVHQUFBLFdBQVcsT0FBQTtBQUNYLDBHQUFBLGNBQWMsT0FBQTtBQUNkLDhHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLDhHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHFIQUFBLHlCQUF5QixPQUFBO0FBQ3pCLDJHQUFBLGVBQWUsT0FBQTtBQUNmLHVHQUFBLFdBQVcsT0FBQTtBQUNYLDZHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLGlIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLHVHQUFBLFdBQVcsT0FBQTtBQUNYLHVHQUFBLFdBQVcsT0FBQTtBQWNiLGtEQUFzRDtBQUE3Qyx5R0FBQSxhQUFhLE9BQUE7QUFFdEIsbUVBQW1FO0FBQ25FLGlFQUFpRTtBQUNqRSxpRUFBaUU7QUFDakUsNENBQTRDO0FBQzVDLDhFQUEwRTtBQUFqRSwySEFBQSxrQkFBa0IsT0FBQTtBQUMzQiw4REFBMEQ7QUFBakQsMkdBQUEsVUFBVSxPQUFBO0FBQ25CLG9FQUFnRTtBQUF2RCxpSEFBQSxhQUFhLE9BQUE7QUFTdEIsMEVBQXNFO0FBQTdELHVIQUFBLGdCQUFnQixPQUFBO0FBVXpCLDBFQUF3RjtBQUEvRSx1SEFBQSxnQkFBZ0IsT0FBQTtBQUFFLHVIQUFBLGdCQUFnQixPQUFBO0FBSzNDLG9FQUF1SDtBQUE5RyxpSEFBQSxhQUFhLE9BQUE7QUFBRSxpSEFBQSxhQUFhLE9BQUE7QUFBRSx5SEFBQSxxQkFBcUIsT0FBQTtBQUFFLG1IQUFBLGVBQWUsT0FBQTtBQU83RSw4RUFBOEY7QUFBckYsMkhBQUEsa0JBQWtCLE9BQUE7QUFBRSwySEFBQSxrQkFBa0IsT0FBQTtBQUkvQyx3RUFBb0U7QUFBM0QscUhBQUEsZUFBZSxPQUFBO0FBSXhCLGtFQUFrRjtBQUF6RSxxSEFBQSxrQkFBa0IsT0FBQTtBQUFFLCtHQUFBLFlBQVksT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZm9vdHByaW50anMvdHJhY2Ug4oCUIEV4ZWN1dGlvbiB0cmFjaW5nLCBkZWJ1Z2dpbmcsIGFuZCBiYWNrdHJhY2tpbmcgdXRpbGl0aWVzLlxuICpcbiAqIFJ1bnRpbWUgc3RhZ2UgSURzLCBjb21taXQgbG9nIHF1ZXJpZXMsIGFuZCByZWNvcmRlciBiYXNlIGNsYXNzZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHBhcnNlUnVudGltZVN0YWdlSWQsIGZpbmRMYXN0V3JpdGVyLCBLZXllZFN0b3JlLCBTZXF1ZW5jZVN0b3JlIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIC8vIFBhcnNlIGEgcnVudGltZVN0YWdlSWRcbiAqIGNvbnN0IHsgc3RhZ2VJZCwgZXhlY3V0aW9uSW5kZXggfSA9IHBhcnNlUnVudGltZVN0YWdlSWQoJ2NhbGwtbGxtIzUnKTtcbiAqXG4gKiAvLyBCYWNrdHJhY2s6IHdobyB3cm90ZSAnc3lzdGVtUHJvbXB0JyBiZWZvcmUgY29tbWl0IGF0IGlkeCA4P1xuICogY29uc3Qgd3JpdGVyID0gZmluZExhc3RXcml0ZXIoY29tbWl0TG9nLCAnc3lzdGVtUHJvbXB0JywgOCk7XG4gKlxuICogLy8gdjUgcHJpbWFyeSBBUEk6IGNvbXBvc2UgYSBTdG9yZSBhcyBhIGZpZWxkIChvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXIpLlxuICogLy8gS2V5ZWRTdG9yZTxUPiDigJQgMToxIChvbmUgZW50cnkgcGVyIHN0ZXApXG4gKiBjbGFzcyBNeVJlY29yZGVyIHtcbiAqICAgcmVhZG9ubHkgaWQgPSAnbXktcmVjb3JkZXInO1xuICogICBwcml2YXRlIHN0b3JlID0gbmV3IEtleWVkU3RvcmU8TXlFbnRyeT4oKTtcbiAqICAgb25Xcml0ZShlKSB7IHRoaXMuc3RvcmUuc2V0KGUucnVudGltZVN0YWdlSWQsIHsgLi4uIH0pOyB9XG4gKiB9XG4gKlxuICogLy8gU2VxdWVuY2VTdG9yZTxUPiDigJQgMTpOIChtdWx0aXBsZSBlbnRyaWVzIHBlciBzdGVwLCBvcmRlcmluZyBtYXR0ZXJzKVxuICogY2xhc3MgQXVkaXRSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ2F1ZGl0JztcbiAqICAgcHJpdmF0ZSBzdG9yZSA9IG5ldyBTZXF1ZW5jZVN0b3JlPEF1ZGl0RW50cnk+KCk7XG4gKiAgIG9uUmVhZChlKSB7IHRoaXMuc3RvcmUucHVzaCh7IHJ1bnRpbWVTdGFnZUlkOiBlLnJ1bnRpbWVTdGFnZUlkLCAuLi4gfSk7IH1cbiAqIH1cbiAqIGBgYFxuICovXG5cbi8vIFJ1bnRpbWUgc3RhZ2UgSUQg4oCUIHVuaXF1ZSBleGVjdXRpb24gc3RlcCBpZGVudGlmaWVyc1xuZXhwb3J0IHR5cGUgeyBFeGVjdXRpb25Db3VudGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL3J1bnRpbWVTdGFnZUlkLmpzJztcbmV4cG9ydCB7XG4gIGJ1aWxkUnVudGltZVN0YWdlSWQsXG4gIGNyZWF0ZUV4ZWN1dGlvbkNvdW50ZXIsXG4gIHBhcnNlUnVudGltZVN0YWdlSWQsXG4gIHNwbGl0U3RhZ2VJZCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL3J1bnRpbWVTdGFnZUlkLmpzJztcblxuLy8gR2VuZXJhdGVkIGJyYW5jaCBzZWdtZW50cyDigJQgdGhlIHN1YmZsb3cgcGF0aCBzZWdtZW50cyBgYWRkUGFyYWxsZWxGb3JFYWNoYFxuLy8gbWludHMgZm9yIGl0cyBicmFuY2hlcyAoYDxzdGFnZUlkPn48aW5kZXg+YCkuIEEgYnJhbmNoIGlzIGFkZHJlc3NlZCBieSB0aGVcbi8vIE9SRElOQVJZIGdyYW1tYXIgYWJvdmUsIHNvIG5vdGhpbmcgaGVyZSBpcyBuZWVkZWQgdG8gUkVBRCBvbmU7IHRoZXNlIGV4aXN0IHNvXG4vLyBhIGNvbnN1bWVyIGNhbiBURUxMIGEgZ2VuZXJhdGVkIGJyYW5jaCBmcm9tIGEgaGFuZC1hdXRob3JlZCBzdWJmbG93ICh0byBsYWJlbFxuLy8gaXQgXCJicmFuY2ggMiBvZiByZXZpZXctY2h1bmtzXCIgaW5zdGVhZCBvZiBhIHN1YmZsb3cgbmFtZSksIGFuZCBzbyB0aGVcbi8vIHJlc2VydmVkIG1hcmtlciBpcyBkaXNjb3ZlcmFibGUgcmF0aGVyIHRoYW4gZm9sa2xvcmUuXG4vLyBEZXNpZ246IGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kLlxuZXhwb3J0IHtcbiAgQlJBTkNIX1NFR01FTlRfTUFSS0VSLFxuICBidWlsZEJyYW5jaFNlZ21lbnQsXG4gIGhhc0JyYW5jaFNlZ21lbnRNYXJrZXIsXG4gIGlzQnJhbmNoU2VnbWVudCxcbiAgcGFyc2VCcmFuY2hTZWdtZW50LFxufSBmcm9tICcuL2xpYi9lbmdpbmUvYnJhbmNoU2VnbWVudC5qcyc7XG5cbi8vIHdhbGtTdWJmbG93U3BlYyDigJQgZmxhdCBvcmRlcmVkIHRyYXZlcnNhbCBvZiBhIHN1YmZsb3cncyBzdHJ1Y3R1cmVcbi8vIChjb25zdW1lIHZpYSBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkJ3Mgc3ViZmxvd1NwZWMgcGF5bG9hZClcbmV4cG9ydCB0eXBlIHsgV2Fsa2VySXRlbSwgV2Fsa2VyT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS93YWxrU3ViZmxvd1NwZWMuanMnO1xuZXhwb3J0IHsgd2Fsa1N1YmZsb3dTcGVjIH0gZnJvbSAnLi9saWIvZW5naW5lL3dhbGtTdWJmbG93U3BlYy5qcyc7XG5cbi8vIFBhdGggc2VnbWVudHMg4oCUIHRoZSBzdXBwb3J0ZWQgd2F5IHRvIHRha2UgYSBgVHJhY2VFbnRyeS5wYXRoYCBhcGFydC4gUGF0aHNcbi8vIGFyZSBqb2luZWQgd2l0aCBhbiBBU0NJSSBVbml0LVNlcGFyYXRvciAobmV2ZXIgYSBkb3Q6IGEgc3RhdGUga2V5IG1heSBpdHNlbGZcbi8vIGNvbnRhaW4gYSBkb3QsIHNvIGEgZG90IHNlcGFyYXRvciB3b3VsZCBtYWtlIGBbJ2EuYiddYCBhbmQgYFsnYScsJ2InXWBcbi8vIGluZGlzdGluZ3Vpc2hhYmxlKSwgd2hpY2ggaXMgYW4gZW5jb2RpbmcsIG5vdCBhIGRpc3BsYXkgY2hhcmFjdGVyLiBSZW5kZXIgYVxuLy8gcGF0aCB0aHJvdWdoIHRoaXMgaW5zdGVhZCBvZiBzcGxpdHRpbmcgb24gdGhlIGRlbGltaXRlciB5b3Vyc2VsZi5cbmV4cG9ydCB7IHBhdGhTZWdtZW50cyB9IGZyb20gJy4vbGliL21lbW9yeS91dGlscy5qcyc7XG5cbi8vIFRoZSByZWZ1c2FsIHRoZSBjb21taXQtbG9nIHJlYWRlcnMgcmFpc2UgZm9yIGEgcm93IHdob3NlIHZlcmIgaXMgbm90XG4vLyBzZXQgfCBtZXJnZSB8IGFwcGVuZCB8IGRlbGV0ZSAoYGNvbW1pdFZhbHVlQXRgLCBgYXJyYXlQcm92ZW5hbmNlYCwgYW5kXG4vLyBgYXBwbHlTbWFydE1lcmdlYCBvbiBgL2FkdmFuY2VkYCk6IGEgZm9yZWlnbiBvciBjb3JydXB0ZWQgbG9nIGZhaWxzIGxvdWRseSxcbi8vIG5hbWluZyB0aGUgcm93LCBpbnN0ZWFkIG9mIGJlaW5nIGZvbGRlZCBhcyBhIG1lcmdlLlxuZXhwb3J0IHsgVW5rbm93blZlcmJFcnJvciB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vIENvbW1pdCBsb2cgcXVlcmllcyDigJQgdHlwZWQgdXRpbGl0aWVzIGZvciBiYWNrdHJhY2tpbmcuXG4vLyBjb21taXRWYWx1ZUF0IHJlY29uc3RydWN0cyB0aGUgRlVMTCB2YWx1ZSBvZiBhIGtleSBhdCBhIGNvbW1pdCBpbmRleCDigJRcbi8vIHJlcXVpcmVkIHVuZGVyIGBjb21taXRWYWx1ZXM6ICdkZWx0YSdgICgjMTNjLUIpLCB3aGVyZSBhbiBgYXBwZW5kYFxuLy8gYnVuZGxlJ3MgYG92ZXJ3cml0ZVtrZXldYCBob2xkcyBvbmx5IHRoZSB0YWlsLlxuZXhwb3J0IHR5cGUge1xuICBWYWx1ZUJhc2lzLFxuICBWYWx1ZUJhc2lzT3B0aW9ucyxcbiAgVmFsdWVXaXRoQmFzaXMsXG4gIFdyaXRlckJhc2lzLFxuICBXcml0ZXJXaXRoQmFzaXMsXG59IGZyb20gJy4vbGliL21lbW9yeS9jb21taXRMb2dVdGlscy5qcyc7XG5leHBvcnQge1xuICBidWlsZENvbW1pdEluZGV4LFxuICBjb21taXRJbmRleE9mLFxuICBjb21taXRWYWx1ZUF0LFxuICBjb21taXRWYWx1ZUF0V2l0aEJhc2lzLFxuICBmaW5kQ29tbWl0LFxuICBmaW5kQ29tbWl0cyxcbiAgZmluZExhc3RXcml0ZXIsXG4gIGZpbmRMYXN0V3JpdGVyV2l0aEJhc2lzLFxufSBmcm9tICcuL2xpYi9tZW1vcnkvY29tbWl0TG9nVXRpbHMuanMnO1xuXG4vLyDilIDilIAgdGltZS10cmF2ZWwvIOKAlCB0aGUgUkVBREVSJ1MgY3Vyc29yIG92ZXIgYSBmaW5pc2hlZCB0cmFjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEEgVHJhY2UgaXMgd2hhdCB0aGUgcnVuIHJlY29yZGVkOyB0aW1lIHRyYXZlbCBpcyBhIGN1cnNvciBvdmVyIGl0IHdpdGggYVxuLy8gRm9sZCBhdCBlYWNoIHN0b3AuIEl0IGlzIE5PVCB0aGUgZW5naW5lJ3Mgd2FsayBhbmQgbmV2ZXIgYmVjb21lcyBhIHNlY29uZFxuLy8gbGl2ZSBjdXJzb3I6IGV2ZXJ5dGhpbmcgYmVsb3cgaXMgYSByZWFkLXRpbWUgcXVlcnkgb3ZlciBhbHJlYWR5LWNvbGxlY3RlZFxuLy8gZGF0YS5cbi8vXG4vLyBgc3RhdGVBdChzbmFwc2hvdCB8IHN1YnRyZWUsIGNvbW1pdElkeClgIGlzIHRoZSBmb2xkIOKAlCB0aGUgcnVuJ3Ncbi8vIGBpbml0aWFsU3RhdGVgIHJlcGxheWVkIHRocm91Z2ggYGNvbW1pdExvZ1swLi5jb21taXRJZHhdYCB3aXRoIHRoZSBTQU1FIHZlcmJcbi8vIHN3aXRjaCB0aGUgbGl2ZSBjb21taXQgdXNlcywgcmV0dXJuZWQgZGV0YWNoZWQgYW5kIGZyb3plbiwgYW5kIGhvbmVzdCBhYm91dFxuLy8gaG93IGl0IHdhcyBkZXJpdmVkIChgYmFzaXNgKSBhbmQgd2hlcmUgdGhlIGxvZyB3YXMgc2NydWJiZWQgKGByZWRhY3RlZGApLlxuLy9cbi8vIGB0aW1lVHJhdmVsKHNuYXBzaG90KWAgaXMgdGhlIGN1cnNvcjogc3RvcHMsIHByZXYvbmV4dC9qdW1wVG8sIG1hcmtzIGJlc2lkZVxuLy8gdGhlIGxvZywgYW5kIGBkcmlsbChtb3VudClgIGludG8gYSBzdWJmbG93J3Mgb3duIGxvZyDigJQgdGhlIHNhbWUgaW50ZXJmYWNlLFxuLy8gaXRzIG93biBiYXNlLiBIb3cgc3RvcHMgYXJlIERFUklWRUQgaXMgdGhlIHNlYW0gKGBUaW1lVHJhdmVsU3RyYXRlZ3lgKTtcbi8vIGZvb3RwcmludGpzIHNoaXBzIGBjb21taXRTdG9wc2AgKG9uZSBzdG9wIHBlciBleGVjdXRlZCBzdGFnZSkgYmVjYXVzZSB0aGF0XG4vLyBpcyB0aGUgb25seSBzdG9wIGdyYW1tYXIgdGhlIHN1YnN0cmF0ZSBpdHNlbGYga25vd3Mg4oCUIGFuZCwgc2luY2UgOS4yMS4wLFxuLy8gYHRhZ1N0b3BzKHRhZ3M/KWA6IHRoZSBzdG9wcyBhIGNoYXJ0IERFQ0xBUkVEIGF0IGJ1aWxkIHRpbWUgKGAudGFnKClgKSxcbi8vIHJlYWQgYmFjayBvZmYgYENvbW1pdEJ1bmRsZS50YWdzYCwgc28gYSBzdG9yZWQgcmVjb3JkaW5nIHNjcnVicyBieSBpdHMgb3duXG4vLyBtaWxlc3RvbmVzIHdpdGggbm8gaWQgY29udmVudGlvbnMgaW4gdGhlIHJlYWRlci5cbi8vIFNlZSBzcmMvbGliL3RpbWUtdHJhdmVsL1JFQURNRS5tZC5cbmV4cG9ydCB0eXBlIHtcbiAgQXhpc1JlZnVzYWwsXG4gIEF4aXNTcGxpdCxcbiAgQm9va2VuZGVkQXhpcyxcbiAgRm9sZEJhc2lzLFxuICBGb2xkZWRTdGF0ZSxcbiAgRm9sZFNvdXJjZSxcbiAgTG9nR2FwLFxuICBNYXJrLFxuICBNb3ZlLFxuICBNb3ZlUmVmdXNhbCxcbiAgU3RvcCxcbiAgU3RvcEZpbHRlcixcbiAgU3RvcEtpbmQsXG4gIFRpbWVUcmF2ZWwsXG4gIFRpbWVUcmF2ZWxPcHRpb25zLFxuICBUaW1lVHJhdmVsU291cmNlLFxuICBUaW1lVHJhdmVsU3RyYXRlZ3ksXG59IGZyb20gJy4vbGliL3RpbWUtdHJhdmVsL2luZGV4LmpzJztcbmV4cG9ydCB7XG4gIGNvbW1pdFN0b3BzLFxuICBjb21taXRTdG9wc1N0cmF0ZWd5LFxuICBmaWx0ZXJTdG9wcyxcbiAgaXNDb21taXRCdW5kbGUsXG4gIHNwbGl0QXhpcyxcbiAgc3RhdGVBdCxcbiAgdGFnU3RvcHMsXG4gIHRpbWVUcmF2ZWwsXG59IGZyb20gJy4vbGliL3RpbWUtdHJhdmVsL2luZGV4LmpzJztcblxuLy8gQ2F1c2FsIGNoYWluIOKAlCBiYWNrd2FyZCBwcm9ncmFtIHNsaWNpbmcgb24gY29tbWl0IGxvZyAoREFHKS5cbi8vIFJGQy0wMDMgRDM6IGBDYXVzYWxFZGdlYCAodHlwZWQva2V5ZWQvd2VpZ2h0ZWQgcGFyZW50IGxpbmtzIG9uXG4vLyBgQ2F1c2FsTm9kZS5wYXJlbnRFZGdlc2ApICsgdGhlIGBjb250cm9sRGVwc2Agb3B0aW9uIChgQ29udHJvbERlcExvb2t1cGApXG4vLyBhZGQgY29udHJvbC1kZXBlbmRlbmNlIGVkZ2VzIHRvIHRoZSBzbGljZS5cbmV4cG9ydCB0eXBlIHtcbiAgQ2F1c2FsQ2hhaW5PcHRpb25zLFxuICBDYXVzYWxFZGdlLFxuICBDYXVzYWxOb2RlLFxuICBDb250cm9sRGVwZW5kZW5jeSxcbiAgQ29udHJvbERlcExvb2t1cCxcbiAgRWRnZVdlaWdoZXIsXG4gIEtleXNSZWFkTG9va3VwLFxufSBmcm9tICcuL2xpYi9tZW1vcnkvYmFja3RyYWNrLmpzJztcbmV4cG9ydCB7IGNhdXNhbENoYWluLCBmbGF0dGVuQ2F1c2FsREFHLCBmb3JtYXRDYXVzYWxDaGFpbiB9IGZyb20gJy4vbGliL21lbW9yeS9iYWNrdHJhY2suanMnO1xuLy8gUkZDLTAwMyBEMiDigJQgaG9uZXN0eSBtYXJrZXJzOiB0aGUgdW50cmFja2VkIHJlYWQgcGF0aHMgYSBzdGFnZSBjb25zdW1lZFxuLy8gKGBDb21taXRCdW5kbGUudW50cmFja2VkU291cmNlc2Ag4oaSIGBDYXVzYWxOb2RlLmluY29tcGxldGVTb3VyY2VzYCkuXG5leHBvcnQgdHlwZSB7IFVudHJhY2tlZFNvdXJjZSB9IGZyb20gJy4vbGliL21lbW9yeS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgCBzbGljZS8g4oCUIHZhcmlhYmxlLWZpcnN0IHNsaWNpbmcsIGJvdGggZGlyZWN0aW9ucyAodHJpYWdlIHF1ZXJ5IGxheWVyKSDilIDilIBcbi8vIE9uZSBjb250cmFjdCBmb3IgZXZlcnkgdHJpYWdlIHN1cmZhY2UgKFVJIHBhbmVsLCBMTE0gdG9vbCwgb2ZmbGluZVxuLy8gYXV0b3BzeSBhZ2VudCk6IHZhcmlhYmxlIGluIOKGkiBzbGljZSBvdXQuXG4vL1xuLy8gQkFDS1dBUkQg4oCUIGBzbGljZUZvcktleWAgYW5jaG9ycyBhdCB0aGUga2V5J3MgbGFzdCB3cml0ZXIgdGhlbiBkZWxlZ2F0ZXNcbi8vIHRvIGNhdXNhbENoYWluOyBgYXJyYXlQcm92ZW5hbmNlYCAvIGBlbGVtZW50UHJvdmVuYW5jZWAgKGFwcGVuZC1mb2xkKVxuLy8gYW5zd2VyIGVsZW1lbnQtbGV2ZWwgcXVlc3Rpb25zIGxpa2UgXCJ3aGljaCBzdGFnZSBwcm9kdWNlZCBoaXN0b3J5WzddP1wiIOKAlFxuLy8gdGhlIGZpeCBmb3IgdGhlIGFnZW50IG1lZ2Eta2V5IHByb2JsZW0sIHdpdGggaG9uZXN0IGF0dHJpYnV0aW9uIGxhYmVscy5cbi8vXG4vLyBGT1JXQVJEIOKAlCBgZm9yd2FyZFNsaWNlRm9yS2V5YCB3YWxrcyB0aGUgb3RoZXIgd2F5OiBmcm9tIGEgd3JpdGUsIHRocm91Z2hcbi8vIHRoZSB2YWx1ZSdzIExJVkUgUkFOR0UgKGl0IGxpdmVzIHVudGlsIHRoZSBrZXkncyBuZXh0IHdyaXRlKSwgdG8gZXZlcnlcbi8vIHN0YWdlIHRoYXQgcmVhZCBpdCBhbmQgZXZlcnkgd3JpdGUgdGhvc2UgcmVhZHMgZmVkLiBga2V5VGltZWxpbmVgIGlzIHRoZVxuLy8gZmxhdCBjaHJvbm9sb2dpY2FsIHZpZXcgb2YgdGhlIHNhbWUgZmFjdHMuIEZlZCBlZGdlcyBhcmUgRVhBQ1QgdW5kZXIgdGhlXG4vLyBgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4J2AgZGlhbCBhbmQgc3RhbXBlZCBDT05TRVJWQVRJVkUgd2l0aG91dFxuLy8gaXQg4oCUIG5ldmVyIHRoZSBvdGhlciB3YXkgcm91bmQuIFNlZSBzcmMvbGliL3NsaWNlL1JFQURNRS5tZC5cbmV4cG9ydCB0eXBlIHtcbiAgQXJyYXlQcm92ZW5hbmNlLFxuICBBdHRyaWJ1dGlvbkJhc2lzLFxuICBFbGVtZW50QmlydGgsXG4gIEZlZEJhc2lzLFxuICBGb3J3YXJkRWRnZSxcbiAgRm9yd2FyZE5vZGUsXG4gIEZvcndhcmRSZWFkLFxuICBGb3J3YXJkU2xpY2UsXG4gIEZvcndhcmRTbGljZUpTT04sXG4gIEhvbmVzdHlOb3RlLFxuICBIb25lc3R5Tm90ZUNvZGUsXG4gIEtleU1vbWVudCxcbiAgS2V5c1JlYWRTb3VyY2UsXG4gIEtleVRpbWVsaW5lLFxuICBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbixcbiAgTWlzc2luZ1NsaWNlUmVhc29uLFxuICBSZWFkc0NvdmVyYWdlLFxuICBTbGljZUpTT04sXG4gIFN0YXRlS2V5LFxuICBWYXJpYWJsZVNsaWNlLFxufSBmcm9tICcuL2xpYi9zbGljZS9pbmRleC5qcyc7XG5leHBvcnQgdHlwZSB7IEZvcndhcmRTbGljZUZvcktleU9wdGlvbnMsIEtleVRpbWVsaW5lT3B0aW9ucywgU2xpY2VGb3JLZXlPcHRpb25zIH0gZnJvbSAnLi9saWIvc2xpY2UvaW5kZXguanMnO1xuZXhwb3J0IHtcbiAgYXJyYXlQcm92ZW5hbmNlLFxuICBlbGVtZW50UHJvdmVuYW5jZSxcbiAgZm9ybWF0Rm9yd2FyZFNsaWNlLFxuICBmb3JtYXRTbGljZSxcbiAgZm9ybWF0VGltZWxpbmUsXG4gIGZvcndhcmRTbGljZUZvcktleSxcbiAgZm9yd2FyZFNsaWNlVG9KU09OLFxuICBrZXlzUmVhZEZyb21FeGVjdXRpb25UcmVlLFxuICBrZXlzUmVhZEZyb21NYXAsXG4gIGtleVRpbWVsaW5lLFxuICBub3JtYWxpc2VTdGF0ZUtleSxcbiAgcmVzb2x2ZUtleXNSZWFkU291cmNlLFxuICBzbGljZUZvcktleSxcbiAgc2xpY2VUb0pTT04sXG59IGZyb20gJy4vbGliL3NsaWNlL2luZGV4LmpzJztcblxuLy8g4pSA4pSAIGhvbmVzdHkg4oCUIHRoZSBPTkUgcmVnaXN0cnkgb2Ygd2hhdCBhIHJlYWRlciBjYW5ub3Qgc2VlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVGhlIGhvbmVzdHkgc2lnbmFscyB0aGlzIGRvb3IncyByZWFkZXJzIHByb2R1Y2Ug4oCUIGEgc2xpY2UncyBgSG9uZXN0eU5vdGUuY29kZWAgYW5kIGBtaXNzaW5nYFxuLy8gcmVhc29uLCBhIGZlZCBlZGdlJ3MgYW5kIGFuIGVsZW1lbnQgYmlydGgncyBgYmFzaXNgLCBhIGZvbGQncyBgYmFzaXNgIGFuZCBgcmVkYWN0ZWRgIHBhdGhzLCBhXG4vLyBgTG9nR2FwYCwgYSBjYXVzYWwgbm9kZSdzIGBpbmNvbXBsZXRlU291cmNlc2AgYW5kIGB0cnVuY2F0ZWRgIOKAlCBlYWNoIGhhcyBhIGNvZGUgaGVyZSBhbmQgdGhlIE9ORVxuLy8gc2VudGVuY2UgdGhhdCBzYXlzIHdoYXQgaXQgbWVhbnMsIHNvIGEgbGVucyBvciBhbiBhZ2VudCB0b29sIGV4cGxhaW5zIGFueSBvZiB0aGVtIGZyb20gb25lIHBsYWNlXG4vLyBpbnN0ZWFkIG9mIGtlZXBpbmcgaXRzIG93biB0YWJsZS4gVGhlIHVuaW9ucyBvZiB0aG9zZSBjb2RlcyBleHBvcnRlZCBhYm92ZSAoYEhvbmVzdHlOb3RlQ29kZWAsXG4vLyBgTWlzc2luZ1NsaWNlUmVhc29uYCwgYE1pc3NpbmdQcm92ZW5hbmNlUmVhc29uYCwgYEZlZEJhc2lzYCwgYEF0dHJpYnV0aW9uQmFzaXNgLCBgRm9sZEJhc2lzYCkgYXJlXG4vLyBzdWJzZXRzIG9mIGBIb25lc3R5Q29kZWAsIGFuZCB0ZXN0L2FyY2hpdGVjdHVyZS9ob25lc3R5LXZvY2FidWxhcnkudGVzdC50cyBmYWlscyBvbiBhIHVuaW9uIG9mXG4vLyBzdHJpbmcgbGl0ZXJhbHMgdGhpcyBkb29yIGV4cG9ydHMgdGhhdCBpcyBuZWl0aGVyIHJlZ2lzdGVyZWQgbm9yIG5hbWVkIHRoZXJlIGFzIGEgZGlmZmVyZW50IGtpbmRcbi8vIG9mIHdvcmQuIFNlZSBzcmMvbGliL21lbW9yeS9SRUFETUUubWQuXG5leHBvcnQgdHlwZSB7IEhvbmVzdHlDb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcbmV4cG9ydCB7IEhPTkVTVFlfQ09ERVMgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vLyDilIDilIAgdjUgU3RvcmVzIChjb25jcmV0ZSwgY29tcG9zYWJsZSDigJQgcHJpbWFyeSByZWNvcmRlciBBUEkpIOKUgOKUgOKUgOKUgOKUgFxuLy8gQ29tcG9zZSB0aGVzZSB2aWEgYG5ldyBTdG9yZTxUPigpYCBhcyBhIGZpZWxkIG9uIHlvdXIgcmVjb3JkZXJcbi8vIGNsYXNzLiBPbmUgcHVycG9zZSBwZXIgcmVjb3JkZXI6IHN0b3JlcyBhcmUgc3RvcmFnZTsgcmVjb3JkZXJzXG4vLyBhcmUgZXZlbnQtaG9vayBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25zLlxuZXhwb3J0IHsgQm91bmRhcnlTdGF0ZVN0b3JlIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQm91bmRhcnlTdGF0ZVN0b3JlLmpzJztcbmV4cG9ydCB7IEtleWVkU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9LZXllZFN0b3JlLmpzJztcbmV4cG9ydCB7IFNlcXVlbmNlU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9TZXF1ZW5jZVN0b3JlLmpzJztcblxuLy8g4pSA4pSAIHY1LjEgQ29tbWl0IGdyb3VwaW5nIHByaW1pdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEludGVydmFsIGluZGV4IG92ZXIgY29tbWl0IGluZGljZXMuIEJ1aWx0IGluY3JlbWVudGFsbHkgZHVyaW5nXG4vLyB0cmF2ZXJzYWw6IG9wZW4oKSBvbiBib3VuZGFyeSBlbnRyeSwgY2xvc2UoKSBvbiBleGl0LiBRdWVyeSBhdCBhbnlcbi8vIGNvbW1pdCBwb3NpdGlvbiB3aXRoIGVuY2xvc2luZygpL292ZXJsYXBwaW5nKCkuIEdlbmVyaWMgb3ZlciBUTGFiZWxcbi8vIOKAlCBmb290cHJpbnRqcyBvd25zIFpFUk8ga25vd2xlZGdlIG9mIHdoYXQgY29uc3VtZXJzIHVzZSBhcyBsYWJlbHMuXG4vLyBTZWUgZG9jcy9kZXNpZ24vY29tbWl0LXJhbmdlLWluZGV4Lm1kIGZvciB0aGUgZnVsbCBjb250cmFjdC5cbmV4cG9ydCB0eXBlIHsgUmFuZ2VFbnRyeSwgUmFuZ2VUb2tlbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL0NvbW1pdFJhbmdlSW5kZXguanMnO1xuZXhwb3J0IHsgQ29tbWl0UmFuZ2VJbmRleCB9IGZyb20gJy4vbGliL3JlY29yZGVyL0NvbW1pdFJhbmdlSW5kZXguanMnO1xuXG4vLyBUb3BvbG9neVJlY29yZGVyIOKAlCBjb21wb3NpdGlvbiBncmFwaCBhY2N1bXVsYXRvciAoc3ViZmxvd3MgKyBjb250cm9sLWZsb3cgZWRnZXMpXG5leHBvcnQgdHlwZSB7XG4gIFRvcG9sb2d5LFxuICBUb3BvbG9neUVkZ2UsXG4gIFRvcG9sb2d5SW5jb21pbmdLaW5kLFxuICBUb3BvbG9neU5vZGUsXG4gIFRvcG9sb2d5UmVjb3JkZXJPcHRpb25zLFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9Ub3BvbG9neVJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFRvcG9sb2d5UmVjb3JkZXIsIHRvcG9sb2d5UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Ub3BvbG9neVJlY29yZGVyLmpzJztcblxuLy8gSW5PdXRSZWNvcmRlciDigJQgY2hhcnQgaW4vb3V0IHN0cmVhbSAoZW50cnkvZXhpdCBwYWlycyBhdCBldmVyeSBjaGFydCBib3VuZGFyeSxcbi8vIGluY2x1ZGluZyB0aGUgdG9wLWxldmVsIHJ1biBhbmQgZXZlcnkgc3ViZmxvdylcbmV4cG9ydCB0eXBlIHsgSW5PdXRFbnRyeSwgSW5PdXRQaGFzZSwgSW5PdXRSZWNvcmRlck9wdGlvbnMgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Jbk91dFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IEluT3V0UmVjb3JkZXIsIGluT3V0UmVjb3JkZXIsIFJPT1RfUlVOVElNRV9TVEFHRV9JRCwgUk9PVF9TVUJGTE9XX0lEIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci5qcyc7XG5cbi8vIENvbnRyb2xEZXBSZWNvcmRlciDigJQgY29udHJvbC1kZXBlbmRlbmNlIHRyYWNraW5nIChSRkMtMDAzIEQ1KTogcmVjb3Jkc1xuLy8gb25EZWNpc2lvbi9vblNlbGVjdGVkICsgdGhlIEQxIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4sIGFuc3dlcnMgXCJ3aGljaFxuLy8gZGVjaXNpb24gYWxsb3dlZCB0aGlzIHN0YWdlIHRvIHJ1bj9cIiDigJQgdGhlIGJ1aWx0LWluIHByb2R1Y2VyIGZvclxuLy8gY2F1c2FsQ2hhaW4ncyBgY29udHJvbERlcHNgIG9wdGlvbi5cbmV4cG9ydCB0eXBlIHsgQ29udHJvbERlY2lzaW9uUmVjb3JkLCBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29udHJvbERlcFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IENvbnRyb2xEZXBSZWNvcmRlciwgY29udHJvbERlcFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29udHJvbERlcFJlY29yZGVyLmpzJztcblxuLy8gUXVhbGl0eVJlY29yZGVyIOKAlCBwZXItc3RlcCBxdWFsaXR5IHNjb3Jpbmcgd2l0aCBiYWNrdHJhY2tpbmdcbmV4cG9ydCB0eXBlIHsgUXVhbGl0eUVudHJ5LCBRdWFsaXR5UmVjb3JkZXJPcHRpb25zLCBRdWFsaXR5U2NvcmluZ0ZuIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvUXVhbGl0eVJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFF1YWxpdHlSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1F1YWxpdHlSZWNvcmRlci5qcyc7XG5cbi8vIHF1YWxpdHlUcmFjZSDigJQgUXVhbGl0eSBTdGFjayBUcmFjZSAoYmFja3RyYWNrIGZyb20gbG93LXNjb3Jpbmcgc3RlcHMpXG5leHBvcnQgdHlwZSB7IFF1YWxpdHlGcmFtZSwgUXVhbGl0eVN0YWNrVHJhY2UgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UuanMnO1xuZXhwb3J0IHsgZm9ybWF0UXVhbGl0eVRyYWNlLCBxdWFsaXR5VHJhY2UgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UuanMnO1xuIl19
@@ -0,0 +1,47 @@
1
+ /**
2
+ * freeze.ts — the ONE deep-freeze walk (moved here from `scope/protection/readonlyInput.ts` in F3).
3
+ *
4
+ * WHY HERE. Five places freeze a tree, all through this walk: run args (`readonlyInput ·
5
+ * createFrozenArgs`), the fold base served as `initialState` (`ExecutionRuntime · getFoldBase`), the
6
+ * dev-mode snapshot (`FlowChartExecutor · getSnapshot`), every state `stateAt` hands out
7
+ * (`time-travel/stateAt.ts`) and, since F3, every commit bundle (`EventLog · record`). `memory/` must
8
+ * not import `scope/` (that edge closed the memory ⇄ scope ⇄ recorder module cycle F0 removed), so the
9
+ * walk lives in this leaf, which imports nothing.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { deepFreeze } from './freeze.js';
14
+ *
15
+ * const args = deepFreeze({ order: { lines: [{ sku: 'A' }] }, bytes: new Uint8Array([1]) });
16
+ * Object.isFrozen(args.order.lines[0]); // true
17
+ * Object.isFrozen(args.bytes); // false — a typed array cannot be frozen; it is skipped
18
+ * ```
19
+ */
20
+ /**
21
+ * How {@link deepFreeze} walks an ARRAY.
22
+ *
23
+ * - `'every-key'` (the default) — every own property, as for any other object: the index elements
24
+ * AND any expando (`arr.note = { … }`). The contract args protection and the dev-mode snapshot
25
+ * rely on.
26
+ * - `'indices'` — the index elements only, so no key string is allocated per element; this is what
27
+ * keeps freezing a 10,000-element commit inside its budget (`bench/element-writes.ts`). An object
28
+ * hung on an array EXPANDO is then left unfrozen — the commit log's named hole
29
+ * (`EventLog · record`).
30
+ */
31
+ export type ArrayWalk = 'every-key' | 'indices';
32
+ /**
33
+ * Freezes `obj` and every object reachable through its own properties, and returns `obj`.
34
+ *
35
+ * - An object that is ALREADY frozen is left as it is, and not descended — 9.32.0's contract, kept:
36
+ * args may hold a caller's frozen object with live parts inside (a class instance a stage calls),
37
+ * and freezing past it would break them. It is also what ends a cycle. The commit log never meets
38
+ * one: its payloads are fresh `structuredClone`s.
39
+ * - ArrayBuffer views (typed arrays, `DataView`) are skipped: `Object.freeze` throws on a non-empty
40
+ * typed array, so a `Uint8Array` in state, args or the fold base used to fail the run or the
41
+ * snapshot here.
42
+ * - What `Object.freeze` cannot reach stays mutable — Map and Set contents, a Date's time, the
43
+ * bytes behind a buffer. A frozen RegExp's `lastIndex` is read-only, so a `/g` or `/y` regex
44
+ * taken from a frozen tree throws when `exec` or `replace` advance it.
45
+ * - Functions are not descended (they are not values the engine stores).
46
+ */
47
+ export declare function deepFreeze<T>(obj: T, arrays?: ArrayWalk): T;
@@ -16,6 +16,7 @@
16
16
  * module — see the mapping notes in `policies.ts`.
17
17
  */
18
18
  export { hasCircularReference } from './circular.js';
19
+ export { type ArrayWalk, deepFreeze } from './freeze.js';
19
20
  export { invokeRecorderHook } from './invokeHook.js';
20
21
  export type { RetentionPolicy } from './policies.js';
21
22
  export type { ReadSummaryMarker, SummaryValueType, WriteSummaryMarker } from './summarize.js';
@@ -1,32 +1,33 @@
1
1
  /**
2
- * detach/drivers/immediate.ts — Run detached work synchronously inside `schedule()`.
2
+ * detach/drivers/immediate.ts — Start detached work at once: no batch, no timer.
3
3
  *
4
- * Pattern: Null-object driver for the "no actual deferral" case. Same
5
- * intent as a `setTimeout(fn, 0)` shim that just calls `fn()`
6
- * — keeps the API surface uniform so consumers can swap drivers
7
- * without changing call sites.
8
- * Role: Test fixture + opt-in for consumers who want fire-and-forget
9
- * ergonomics (the handle API) without actually deferring. Useful
10
- * for:
4
+ * Pattern: The thinnest driver. `schedule()` registers the handle, marks it
5
+ * `running` SYNCHRONOUSLY and starts `runChild` on the next
6
+ * microtask (`Promise.resolve().then(...)`) — one microtask per
7
+ * call, nothing shared with other calls. It keeps the API surface
8
+ * uniform so consumers can swap drivers without changing call sites.
9
+ * Role: Test fixture + opt-in for consumers who want the handle API
10
+ * without a queue to flush. Useful for:
11
11
  *
12
- * - unit tests where deterministic, synchronous completion
13
- * beats microtask gymnastics
14
- * - very small detach payloads where the overhead of a
15
- * microtask roundtrip exceeds the work itself
16
- * - debugging — easier to step through with breakpoints
12
+ * - unit tests where a handle that reads `running` the moment
13
+ * `schedule()` returns beats waiting for a batch flush
14
+ * - very small detach payloads where batching buys nothing
15
+ * - debugging — fewer moving parts to step through
17
16
  *
18
- * Performance:
19
- * - Sync runChild → handle becomes terminal before `schedule()` returns
20
- * - Async runChild → handle marks running sync, terminal at runChild's
21
- * resolution. The `wait()` Promise is the same one consumers use for
22
- * any other driver; behaviour is uniform.
17
+ * What is synchronous, and what is not (test/lib/detach/immediate.test.ts, P1, pins the `running` status):
18
+ * - SYNC: the registry entry exists and `_markRunning()` has run before
19
+ * `schedule()` returns, so the handle reads `running`.
20
+ * - LATER: `runChild` is called on the next microtask EVEN when it is a
21
+ * sync function, and the handle becomes terminal only after the
22
+ * returned promise settles. The `wait()` Promise is the same one
23
+ * consumers use for any other driver; behaviour is uniform.
23
24
  *
24
- * Caveat — this is NOT a passive-recorder by default:
25
- * When runChild is sync, the parent stage observes the work's side
26
- * effects WITHIN its own slice. That's intentional for the test/debug
27
- * use case but means consumers should NOT use `immediateDriver` for
28
- * long-running work in production hot paths — pick `microtaskBatchDriver`
29
- * for that.
25
+ * Caveat — this does NOT run the work inside the parent's slice:
26
+ * The child starts once the parent's current synchronous code has
27
+ * finished, but it is neither batched nor deferred beyond that one
28
+ * microtask, so it can interleave with the parent's next `await`. For
29
+ * work that should leave the hot path as a single batch, pick
30
+ * `microtaskBatchDriver`.
30
31
  */
31
32
  import { type ChildRunner } from '../runChild.js';
32
33
  import type { DetachDriver } from '../types.js';