footprintjs 10.0.1 → 10.2.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 (368) hide show
  1. package/AGENTS.md +2 -1
  2. package/CLAUDE.md +61 -7
  3. package/README.md +136 -312
  4. package/dist/esm/index.d.ts +62 -2
  5. package/dist/esm/index.js +13 -6
  6. package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
  7. package/dist/esm/lib/attempt/anySignal.js +39 -0
  8. package/dist/esm/lib/attempt/call.d.ts +88 -0
  9. package/dist/esm/lib/attempt/call.js +129 -0
  10. package/dist/esm/lib/attempt/category.d.ts +37 -0
  11. package/dist/esm/lib/attempt/category.js +131 -0
  12. package/dist/esm/lib/attempt/correlation.d.ts +95 -0
  13. package/dist/esm/lib/attempt/correlation.js +178 -0
  14. package/dist/esm/lib/attempt/deadline.d.ts +44 -0
  15. package/dist/esm/lib/attempt/deadline.js +101 -0
  16. package/dist/esm/lib/attempt/decision.d.ts +52 -0
  17. package/dist/esm/lib/attempt/decision.js +134 -0
  18. package/dist/esm/lib/attempt/effect.d.ts +76 -0
  19. package/dist/esm/lib/attempt/effect.js +160 -0
  20. package/dist/esm/lib/attempt/errors.d.ts +41 -0
  21. package/dist/esm/lib/attempt/errors.js +44 -0
  22. package/dist/esm/lib/attempt/index.d.ts +18 -0
  23. package/dist/esm/lib/attempt/index.js +15 -0
  24. package/dist/esm/lib/attempt/name.d.ts +21 -0
  25. package/dist/esm/lib/attempt/name.js +43 -0
  26. package/dist/esm/lib/attempt/observed.d.ts +66 -0
  27. package/dist/esm/lib/attempt/observed.js +171 -0
  28. package/dist/esm/lib/attempt/policy.d.ts +45 -0
  29. package/dist/esm/lib/attempt/policy.js +83 -0
  30. package/dist/esm/lib/attempt/record.d.ts +11 -0
  31. package/dist/esm/lib/attempt/record.js +24 -0
  32. package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
  33. package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
  34. package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
  35. package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
  36. package/dist/esm/lib/attempt/runner.d.ts +157 -0
  37. package/dist/esm/lib/attempt/runner.js +523 -0
  38. package/dist/esm/lib/attempt/standalone.d.ts +47 -0
  39. package/dist/esm/lib/attempt/standalone.js +126 -0
  40. package/dist/esm/lib/attempt/types.d.ts +453 -0
  41. package/dist/esm/lib/attempt/types.js +16 -0
  42. package/dist/esm/lib/budget/index.d.ts +9 -0
  43. package/dist/esm/lib/budget/index.js +9 -0
  44. package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
  45. package/dist/esm/lib/budget/timeBudget.js +666 -0
  46. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
  47. package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
  48. package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
  49. package/dist/esm/lib/builder/retryLoop.js +283 -0
  50. package/dist/esm/lib/builder/types.d.ts +35 -1
  51. package/dist/esm/lib/builder/types.js +1 -1
  52. package/dist/esm/lib/decide/decide.js +2 -2
  53. package/dist/esm/lib/decide/index.d.ts +1 -1
  54. package/dist/esm/lib/decide/index.js +2 -2
  55. package/dist/esm/lib/decide/types.d.ts +3 -0
  56. package/dist/esm/lib/decide/types.js +1 -8
  57. package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
  58. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  59. package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
  60. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
  61. package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
  62. package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
  63. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
  64. package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
  65. package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
  66. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
  67. package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
  68. package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
  69. package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
  70. package/dist/esm/lib/engine/handlers/stageError.js +23 -1
  71. package/dist/esm/lib/engine/index.d.ts +2 -2
  72. package/dist/esm/lib/engine/index.js +1 -1
  73. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  74. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
  75. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  76. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  77. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  78. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
  79. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  80. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  81. package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  82. package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
  83. package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
  84. package/dist/esm/lib/engine/narrative/index.js +1 -1
  85. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  86. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  87. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  88. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  89. package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
  90. package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
  91. package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
  92. package/dist/esm/lib/engine/narrative/types.js +1 -1
  93. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  94. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
  95. package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
  96. package/dist/esm/lib/engine/traversalContext.js +6 -3
  97. package/dist/esm/lib/engine/types.d.ts +52 -57
  98. package/dist/esm/lib/engine/types.js +1 -1
  99. package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
  100. package/dist/esm/lib/errors/terminalFailure.js +60 -0
  101. package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
  102. package/dist/esm/lib/filter/evaluator.js +135 -0
  103. package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
  104. package/dist/esm/lib/ids/idempotencyKey.js +24 -0
  105. package/dist/esm/lib/memory/StageContext.d.ts +123 -3
  106. package/dist/esm/lib/memory/StageContext.js +245 -4
  107. package/dist/esm/lib/memory/attention.d.ts +26 -0
  108. package/dist/esm/lib/memory/attention.js +171 -0
  109. package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
  110. package/dist/esm/lib/memory/borrowedMutation.js +14 -1
  111. package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
  112. package/dist/esm/lib/memory/frameTypes.js +3 -1
  113. package/dist/esm/lib/memory/redaction.d.ts +12 -0
  114. package/dist/esm/lib/memory/redaction.js +54 -5
  115. package/dist/esm/lib/pause/record.js +10 -1
  116. package/dist/esm/lib/pause/types.d.ts +19 -0
  117. package/dist/esm/lib/pause/types.js +17 -1
  118. package/dist/esm/lib/reactive/createTypedScope.js +3 -1
  119. package/dist/esm/lib/reactive/types.d.ts +36 -4
  120. package/dist/esm/lib/reactive/types.js +3 -1
  121. package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
  122. package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
  123. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
  124. package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
  125. package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
  126. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  127. package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
  128. package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
  129. package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
  130. package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
  131. package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
  132. package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
  133. package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
  134. package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
  135. package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
  136. package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
  137. package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  138. package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
  139. package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
  140. package/dist/esm/lib/recorder/attemptOTel.js +107 -0
  141. package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
  142. package/dist/esm/lib/recorder/attemptSeries.js +103 -0
  143. package/dist/esm/lib/recorder/hooks.d.ts +9 -0
  144. package/dist/esm/lib/recorder/hooks.js +4 -1
  145. package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
  146. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
  147. package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
  148. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
  149. package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
  150. package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
  151. package/dist/esm/lib/runner/RunnableChart.js +5 -1
  152. package/dist/esm/lib/runner/attach.d.ts +2 -1
  153. package/dist/esm/lib/runner/attach.js +8 -2
  154. package/dist/esm/lib/runner/checkpoint.js +3 -1
  155. package/dist/esm/lib/runner/deadline.d.ts +42 -0
  156. package/dist/esm/lib/runner/deadline.js +90 -0
  157. package/dist/esm/lib/runner/index.d.ts +3 -1
  158. package/dist/esm/lib/runner/index.js +2 -1
  159. package/dist/esm/lib/runner/options.d.ts +17 -0
  160. package/dist/esm/lib/runner/options.js +3 -1
  161. package/dist/esm/lib/runner/recordSink.d.ts +128 -0
  162. package/dist/esm/lib/runner/recordSink.js +296 -0
  163. package/dist/esm/lib/runner/resume.d.ts +3 -0
  164. package/dist/esm/lib/runner/resume.js +22 -2
  165. package/dist/esm/lib/runner/snapshot.d.ts +2 -2
  166. package/dist/esm/lib/runner/snapshot.js +6 -2
  167. package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
  168. package/dist/esm/lib/scope/ScopeFacade.js +304 -7
  169. package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  170. package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
  171. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  172. package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
  173. package/dist/esm/lib/scope/runtime.d.ts +3 -0
  174. package/dist/esm/lib/scope/runtime.js +1 -1
  175. package/dist/esm/lib/scope/types.d.ts +6 -0
  176. package/dist/esm/lib/scope/types.js +1 -1
  177. package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
  178. package/dist/esm/lib/sinks/fileSink.js +387 -0
  179. package/dist/esm/recorders.d.ts +8 -2
  180. package/dist/esm/recorders.js +7 -1
  181. package/dist/esm/sinks.d.ts +23 -0
  182. package/dist/esm/sinks.js +23 -0
  183. package/dist/esm/trace.d.ts +2 -2
  184. package/dist/esm/trace.js +1 -1
  185. package/dist/index.js +77 -60
  186. package/dist/lib/attempt/anySignal.js +43 -0
  187. package/dist/lib/attempt/call.js +134 -0
  188. package/dist/lib/attempt/category.js +136 -0
  189. package/dist/lib/attempt/correlation.js +186 -0
  190. package/dist/lib/attempt/deadline.js +112 -0
  191. package/dist/lib/attempt/decision.js +139 -0
  192. package/dist/lib/attempt/effect.js +174 -0
  193. package/dist/lib/attempt/errors.js +49 -0
  194. package/dist/lib/attempt/index.js +26 -0
  195. package/dist/lib/attempt/name.js +48 -0
  196. package/dist/lib/attempt/observed.js +177 -0
  197. package/dist/lib/attempt/policy.js +92 -0
  198. package/dist/lib/attempt/record.js +29 -0
  199. package/dist/lib/attempt/retryLoopContext.js +31 -0
  200. package/dist/lib/attempt/retryLoopTypes.js +3 -0
  201. package/dist/lib/attempt/runner.js +530 -0
  202. package/dist/lib/attempt/standalone.js +130 -0
  203. package/dist/lib/attempt/types.js +17 -0
  204. package/dist/lib/budget/index.js +17 -0
  205. package/dist/lib/budget/timeBudget.js +674 -0
  206. package/dist/lib/builder/FlowChartBuilder.js +199 -9
  207. package/dist/lib/builder/retryLoop.js +287 -0
  208. package/dist/lib/builder/types.js +1 -1
  209. package/dist/lib/decide/decide.js +2 -2
  210. package/dist/lib/decide/index.js +2 -2
  211. package/dist/lib/decide/types.js +1 -8
  212. package/dist/lib/engine/graph/StageNode.js +1 -1
  213. package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
  214. package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
  215. package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
  216. package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
  217. package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
  218. package/dist/lib/engine/handlers/StageRunner.js +36 -9
  219. package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
  220. package/dist/lib/engine/handlers/commitStage.js +24 -5
  221. package/dist/lib/engine/handlers/stageError.js +26 -2
  222. package/dist/lib/engine/index.js +1 -1
  223. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
  224. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  225. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
  226. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  227. package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
  228. package/dist/lib/engine/narrative/index.js +1 -1
  229. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  230. package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  231. package/dist/lib/engine/narrative/recorders/index.js +1 -1
  232. package/dist/lib/engine/narrative/types.js +1 -1
  233. package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
  234. package/dist/lib/engine/traversalContext.js +6 -3
  235. package/dist/lib/engine/types.js +1 -1
  236. package/dist/lib/errors/terminalFailure.js +64 -0
  237. package/dist/lib/filter/evaluator.js +139 -0
  238. package/dist/lib/ids/idempotencyKey.js +28 -0
  239. package/dist/lib/memory/StageContext.js +246 -5
  240. package/dist/lib/memory/attention.js +175 -0
  241. package/dist/lib/memory/borrowedMutation.js +16 -2
  242. package/dist/lib/memory/frameTypes.js +3 -1
  243. package/dist/lib/memory/redaction.js +54 -5
  244. package/dist/lib/pause/record.js +10 -1
  245. package/dist/lib/pause/types.js +17 -1
  246. package/dist/lib/reactive/createTypedScope.js +3 -1
  247. package/dist/lib/reactive/types.js +3 -1
  248. package/dist/lib/recorder/AttemptRecorder.js +417 -0
  249. package/dist/lib/recorder/ControlDepRecorder.js +50 -2
  250. package/dist/lib/recorder/EmitRecorder.js +1 -1
  251. package/dist/lib/recorder/InOutRecorder.js +75 -6
  252. package/dist/lib/recorder/QualityRecorder.js +87 -29
  253. package/dist/lib/recorder/TopologyRecorder.js +76 -2
  254. package/dist/lib/recorder/attemptMetricRows.js +209 -0
  255. package/dist/lib/recorder/attemptMetrics.js +174 -0
  256. package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
  257. package/dist/lib/recorder/attemptOTel.js +111 -0
  258. package/dist/lib/recorder/attemptSeries.js +113 -0
  259. package/dist/lib/recorder/hooks.js +4 -1
  260. package/dist/lib/runner/DeferredObserverTier.js +13 -1
  261. package/dist/lib/runner/ExecutionRuntime.js +57 -5
  262. package/dist/lib/runner/FlowChartExecutor.js +330 -101
  263. package/dist/lib/runner/RunnableChart.js +5 -1
  264. package/dist/lib/runner/attach.js +8 -2
  265. package/dist/lib/runner/checkpoint.js +3 -1
  266. package/dist/lib/runner/deadline.js +94 -0
  267. package/dist/lib/runner/index.js +4 -2
  268. package/dist/lib/runner/options.js +3 -1
  269. package/dist/lib/runner/recordSink.js +302 -0
  270. package/dist/lib/runner/resume.js +22 -2
  271. package/dist/lib/runner/snapshot.js +6 -2
  272. package/dist/lib/scope/ScopeFacade.js +303 -6
  273. package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
  274. package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
  275. package/dist/lib/scope/runtime.js +1 -1
  276. package/dist/lib/scope/types.js +1 -1
  277. package/dist/lib/sinks/fileSink.js +392 -0
  278. package/dist/recorders.js +10 -2
  279. package/dist/sinks.js +32 -0
  280. package/dist/trace.js +1 -1
  281. package/dist/types/index.d.ts +62 -2
  282. package/dist/types/lib/attempt/anySignal.d.ts +19 -0
  283. package/dist/types/lib/attempt/call.d.ts +88 -0
  284. package/dist/types/lib/attempt/category.d.ts +37 -0
  285. package/dist/types/lib/attempt/correlation.d.ts +95 -0
  286. package/dist/types/lib/attempt/deadline.d.ts +44 -0
  287. package/dist/types/lib/attempt/decision.d.ts +52 -0
  288. package/dist/types/lib/attempt/effect.d.ts +76 -0
  289. package/dist/types/lib/attempt/errors.d.ts +41 -0
  290. package/dist/types/lib/attempt/index.d.ts +18 -0
  291. package/dist/types/lib/attempt/name.d.ts +21 -0
  292. package/dist/types/lib/attempt/observed.d.ts +66 -0
  293. package/dist/types/lib/attempt/policy.d.ts +45 -0
  294. package/dist/types/lib/attempt/record.d.ts +11 -0
  295. package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
  296. package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
  297. package/dist/types/lib/attempt/runner.d.ts +157 -0
  298. package/dist/types/lib/attempt/standalone.d.ts +47 -0
  299. package/dist/types/lib/attempt/types.d.ts +453 -0
  300. package/dist/types/lib/budget/index.d.ts +9 -0
  301. package/dist/types/lib/budget/timeBudget.d.ts +136 -0
  302. package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
  303. package/dist/types/lib/builder/retryLoop.d.ts +56 -0
  304. package/dist/types/lib/builder/types.d.ts +35 -1
  305. package/dist/types/lib/decide/index.d.ts +1 -1
  306. package/dist/types/lib/decide/types.d.ts +3 -0
  307. package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
  308. package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
  309. package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
  310. package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
  311. package/dist/types/lib/engine/index.d.ts +2 -2
  312. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  313. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  314. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  315. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  316. package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  317. package/dist/types/lib/engine/narrative/index.d.ts +2 -2
  318. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  319. package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  320. package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
  321. package/dist/types/lib/engine/narrative/types.d.ts +74 -5
  322. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  323. package/dist/types/lib/engine/traversalContext.d.ts +7 -2
  324. package/dist/types/lib/engine/types.d.ts +52 -57
  325. package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
  326. package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
  327. package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
  328. package/dist/types/lib/memory/StageContext.d.ts +123 -3
  329. package/dist/types/lib/memory/attention.d.ts +26 -0
  330. package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
  331. package/dist/types/lib/memory/frameTypes.d.ts +38 -0
  332. package/dist/types/lib/memory/redaction.d.ts +12 -0
  333. package/dist/types/lib/pause/types.d.ts +19 -0
  334. package/dist/types/lib/reactive/types.d.ts +36 -4
  335. package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
  336. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
  337. package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
  338. package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
  339. package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
  340. package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
  341. package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
  342. package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
  343. package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  344. package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
  345. package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
  346. package/dist/types/lib/recorder/hooks.d.ts +9 -0
  347. package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
  348. package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
  349. package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
  350. package/dist/types/lib/runner/attach.d.ts +2 -1
  351. package/dist/types/lib/runner/deadline.d.ts +42 -0
  352. package/dist/types/lib/runner/index.d.ts +3 -1
  353. package/dist/types/lib/runner/options.d.ts +17 -0
  354. package/dist/types/lib/runner/recordSink.d.ts +128 -0
  355. package/dist/types/lib/runner/resume.d.ts +3 -0
  356. package/dist/types/lib/runner/snapshot.d.ts +2 -2
  357. package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
  358. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  359. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  360. package/dist/types/lib/scope/runtime.d.ts +3 -0
  361. package/dist/types/lib/scope/types.d.ts +6 -0
  362. package/dist/types/lib/sinks/fileSink.d.ts +135 -0
  363. package/dist/types/recorders.d.ts +8 -2
  364. package/dist/types/sinks.d.ts +23 -0
  365. package/dist/types/trace.d.ts +2 -2
  366. package/package.json +20 -6
  367. package/dist/esm/lib/decide/evaluator.js +0 -130
  368. package/dist/lib/decide/evaluator.js +0 -134
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StageAttention = void 0;
4
+ const foottrace_1 = require("foottrace");
5
+ const MAX_MARKS = 32;
6
+ const MAX_REFERENCES = 16;
7
+ const MAX_REFERENCE_LENGTH = 512;
8
+ const STOPPED_REASONS = new Set(['exhausted', 'declined', 'no-time-left']);
9
+ const MISSING_ATTENTION = Object.freeze({
10
+ kind: 'not-collected',
11
+ reason: 'EVIDENCE_NOT_COLLECTED',
12
+ evidence: Object.freeze([]),
13
+ });
14
+ function validReference(reference) {
15
+ return (typeof reference === 'string' &&
16
+ reference.length > 0 &&
17
+ reference.length <= MAX_REFERENCE_LENGTH &&
18
+ // eslint-disable-next-line no-control-regex -- Match the shared Foottrace evidence-reference boundary.
19
+ !/[\u0000-\u001f\u007f-\u009f]/.test(reference));
20
+ }
21
+ /** Reuse the one attempt grammar, including nested call addresses; never shorten an unaddressable proof. */
22
+ function attemptReference(record, owner) {
23
+ if (typeof record.series !== 'string' ||
24
+ !Number.isSafeInteger(record.attempt) ||
25
+ record.attempt < 1 ||
26
+ record.series.length + String(record.attempt).length + 1 > MAX_REFERENCE_LENGTH)
27
+ return undefined;
28
+ try {
29
+ const candidate = record.series + '@' + record.attempt;
30
+ const parts = (0, foottrace_1.parseAttemptId)(candidate);
31
+ if (!parts ||
32
+ parts.runtimeStageId !== owner ||
33
+ (record.kind === 'stage' ? parts.call !== undefined : parts.call === undefined))
34
+ return undefined;
35
+ const canonical = (0, foottrace_1.buildAttemptId)(parts.runtimeStageId, parts.attempt, parts.call);
36
+ return canonical === candidate && validReference(canonical) ? canonical : undefined;
37
+ }
38
+ catch {
39
+ return undefined;
40
+ }
41
+ }
42
+ /** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
43
+ class StageAttention {
44
+ marks;
45
+ omitted = false;
46
+ retryPossible = false;
47
+ summary;
48
+ terminal;
49
+ /** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
50
+ begin() {
51
+ this.marks = undefined;
52
+ this.omitted = false;
53
+ this.retryPossible = false;
54
+ this.summary = undefined;
55
+ this.terminal = undefined;
56
+ }
57
+ /** Called only after the frame retained this attempt. Raw error, target and decision payloads are never read. */
58
+ recordAttempt(record, owner) {
59
+ const reference = attemptReference(record, owner);
60
+ if (record.kind === 'stage' && record.series === owner) {
61
+ if (record.retryLoop === undefined && (record.of ?? 1) > 1)
62
+ this.retryPossible = true;
63
+ if (reference && record.next !== 'retry') {
64
+ this.terminal = { next: record.next, reason: record.reason, effect: record.effect, evidence: reference };
65
+ }
66
+ }
67
+ // The runner calls recordSummary before its final attempt. Finish that pending projection now too.
68
+ this.projectSummary();
69
+ const add = (kind, reason) => {
70
+ if (reference)
71
+ this.append({ kind, reason, evidence: [reference] });
72
+ else
73
+ this.missing();
74
+ };
75
+ if (record.effect === 'unknown')
76
+ add('unknown-effect', 'UNKNOWN_EFFECT_RECORDED');
77
+ if (record.outcome === 'timeout')
78
+ add('timeout', 'TIMEOUT_RECORDED');
79
+ // An SDK's suggested next/reason is not its actual policy; only a later ordinal proves its retry.
80
+ const observed = record.kind === 'observed';
81
+ if ((!observed && record.next === 'retry') || record.attempt > 1)
82
+ add('retried', 'RETRY_RECORDED');
83
+ if (!observed &&
84
+ record.next === 'stop' &&
85
+ STOPPED_REASONS.has(record.reason) &&
86
+ (record.of ?? 1) > 1 &&
87
+ record.retryLoop === undefined)
88
+ add('gave-up', 'RETRY_STOP_RECORDED');
89
+ }
90
+ recordSummary(summary) {
91
+ this.summary = summary;
92
+ this.projectSummary();
93
+ }
94
+ /** A summary-only cut wait has no phantom final attempt; use its actual retained summary. */
95
+ projectSummary() {
96
+ const last = this.summary?.last;
97
+ if (!last)
98
+ return;
99
+ const terminal = this.terminal;
100
+ const matching = terminal?.next === last.next && terminal.reason === last.reason;
101
+ const add = (kind, reason, proof) => {
102
+ const reference = proof ?? 'attemptSummary';
103
+ const key = kind + ':' + reason;
104
+ const marks = this.marks;
105
+ const previous = marks?.get(key);
106
+ if (proof && marks && previous?.evidence.includes('attemptSummary')) {
107
+ marks.set(key, { ...previous, evidence: previous.evidence.filter((item) => item !== 'attemptSummary') });
108
+ }
109
+ this.append({ kind, reason, evidence: [reference] });
110
+ };
111
+ if (last.effect === 'unknown')
112
+ add('unknown-effect', 'UNKNOWN_EFFECT_RECORDED', matching && terminal.effect === 'unknown' ? terminal.evidence : undefined);
113
+ if (this.retryPossible && last.next === 'stop' && STOPPED_REASONS.has(last.reason))
114
+ add('gave-up', 'RETRY_STOP_RECORDED', matching ? terminal.evidence : undefined);
115
+ }
116
+ /** Only the explicit retained stage-error path calls this; a diagnostic value never classifies itself. */
117
+ stageFailed(errors) {
118
+ try {
119
+ const descriptor = errors && typeof errors === 'object'
120
+ ? Object.getOwnPropertyDescriptor(errors, 'stageExecutionError')
121
+ : undefined;
122
+ if (descriptor && Object.hasOwn(descriptor, 'value')) {
123
+ this.append({ kind: 'error', reason: 'ERROR_RECORDED', evidence: ['errors:stageExecutionError'] });
124
+ return;
125
+ }
126
+ }
127
+ catch {
128
+ /* A malformed evidence bag is unavailable, never another stage failure. */
129
+ }
130
+ this.missing();
131
+ }
132
+ attemptDropped() {
133
+ this.append({ kind: 'not-collected', reason: 'EVIDENCE_NOT_COLLECTED', evidence: ['attemptsDropped'] });
134
+ }
135
+ /** Keep only bounded exact references; one slot is reserved to disclose omissions. */
136
+ append(attention) {
137
+ const key = attention.kind + ':' + attention.reason;
138
+ const previous = this.marks?.get(key);
139
+ const references = [...(previous?.evidence ?? [])];
140
+ for (const reference of attention.evidence) {
141
+ if (!validReference(reference)) {
142
+ this.omitted = true;
143
+ continue;
144
+ }
145
+ if (references.includes(reference))
146
+ continue;
147
+ if (references.length >= MAX_REFERENCES) {
148
+ this.omitted = true;
149
+ continue;
150
+ }
151
+ references.push(reference);
152
+ }
153
+ if (attention.kind !== 'not-collected' && references.length === 0) {
154
+ this.omitted = true;
155
+ return;
156
+ }
157
+ if (!previous && (this.marks?.size ?? 0) >= MAX_MARKS - 1) {
158
+ this.omitted = true;
159
+ return;
160
+ }
161
+ (this.marks ??= new Map()).set(key, { kind: attention.kind, reason: attention.reason, evidence: references });
162
+ }
163
+ missing() {
164
+ this.omitted = true;
165
+ }
166
+ /** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
167
+ snapshot() {
168
+ const result = [...(this.marks?.values() ?? [])].map((attention) => Object.freeze({ ...attention, evidence: Object.freeze([...attention.evidence]) }));
169
+ if (this.omitted && !result.some((attention) => attention.kind === 'not-collected'))
170
+ result.push(MISSING_ATTENTION);
171
+ return Object.freeze(result);
172
+ }
173
+ }
174
+ exports.StageAttention = StageAttention;
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHlDQUEyRDtBQUkzRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQzNFLE1BQU0saUJBQWlCLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLEVBQUUsZUFBZTtJQUNyQixNQUFNLEVBQUUsd0JBQXdCO0lBQ2hDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUM1QixDQUFDLENBQUM7QUFFSCxTQUFTLGNBQWMsQ0FBQyxTQUFrQjtJQUN4QyxPQUFPLENBQ0wsT0FBTyxTQUFTLEtBQUssUUFBUTtRQUM3QixTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDcEIsU0FBUyxDQUFDLE1BQU0sSUFBSSxvQkFBb0I7UUFDeEMsdUdBQXVHO1FBQ3ZHLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVELDRHQUE0RztBQUM1RyxTQUFTLGdCQUFnQixDQUFDLE1BQXFCLEVBQUUsS0FBYTtJQUM1RCxJQUNFLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO1FBQ2pDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQztRQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9B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SUFDaEgsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsc0dBQXNHO0lBQ3RHLFFBQVE7UUFDTixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2xGLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQztZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwSCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBMUlELHdDQTBJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFbmdpbmUtb3duZWQgYXR0ZW50aW9uIGlzIGNvbGxlY3RlZCB3aXRoIHJldGFpbmVkIGZhY3RzOyBzbmFwc2hvdHMgb25seSBjb3B5IHRoaXMgYm91bmRlZCBwcm9qZWN0aW9uLiAqL1xuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgYnVpbGRBdHRlbXB0SWQsIHBhcnNlQXR0ZW1wdElkIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBBdHRlbXB0U3VtbWFyeSB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuXG5jb25zdCBNQVhfTUFSS1MgPSAzMjtcbmNvbnN0IE1BWF9SRUZFUkVOQ0VTID0gMTY7XG5jb25zdCBNQVhfUkVGRVJFTkNFX0xFTkdUSCA9IDUxMjtcbmNvbnN0IFNUT1BQRURfUkVBU09OUyA9IG5ldyBTZXQoWydleGhhdXN0ZWQnLCAnZGVjbGluZWQnLCAnbm8tdGltZS1sZWZ0J10pO1xuY29uc3QgTUlTU0lOR19BVFRFTlRJT046IEF0dGVudGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBraW5kOiAnbm90LWNvbGxlY3RlZCcsXG4gIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLFxuICBldmlkZW5jZTogT2JqZWN0LmZyZWV6ZShbXSksXG59KTtcblxuZnVuY3Rpb24gdmFsaWRSZWZlcmVuY2UocmVmZXJlbmNlOiB1bmtub3duKTogcmVmZXJlbmNlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHJlZmVyZW5jZSA9PT0gJ3N0cmluZycgJiZcbiAgICByZWZlcmVuY2UubGVuZ3RoID4gMCAmJlxuICAgIHJlZmVyZW5jZS5sZW5ndGggPD0gTUFYX1JFRkVSRU5DRV9MRU5HVEggJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBNYXRjaCB0aGUgc2hhcmVkIEZvb3R0cmFjZSBldmlkZW5jZS1yZWZlcmVuY2UgYm91bmRhcnkuXG4gICAgIS9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXS8udGVzdChyZWZlcmVuY2UpXG4gICk7XG59XG5cbi8qKiBSZXVzZSB0aGUgb25lIGF0dGVtcHQgZ3JhbW1hciwgaW5jbHVkaW5nIG5lc3RlZCBjYWxsIGFkZHJlc3NlczsgbmV2ZXIgc2hvcnRlbiBhbiB1bmFkZHJlc3NhYmxlIHByb29mLiAqL1xuZnVuY3Rpb24gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQ6IEF0dGVtcHRSZWNvcmQsIG93bmVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlY29yZC5zZXJpZXMgIT09ICdzdHJpbmcnIHx8XG4gICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlY29yZC5hdHRlbXB0KSB8fFxuICAgIHJlY29yZC5hdHRlbXB0IDwgMSB8fFxuICAgIHJlY29yZC5zZXJpZXMubGVuZ3RoICsgU3RyaW5nKHJlY29yZC5hdHRlbXB0KS5sZW5ndGggKyAxID4gTUFYX1JFRkVSRU5DRV9MRU5HVEhcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gcmVjb3JkLnNlcmllcyArICdAJyArIHJlY29yZC5hdHRlbXB0O1xuICAgIGNvbnN0IHBhcnRzID0gcGFyc2VBdHRlbXB0SWQoY2FuZGlkYXRlKTtcbiAgICBpZiAoXG4gICAgICAhcGFydHMgfHxcbiAgICAgIHBhcnRzLnJ1bnRpbWVTdGFnZUlkICE9PSBvd25lciB8fFxuICAgICAgKHJlY29yZC5raW5kID09PSAnc3RhZ2UnID8gcGFydHMuY2FsbCAhPT0gdW5kZWZpbmVkIDogcGFydHMuY2FsbCA9PT0gdW5kZWZpbmVkKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2Fub25pY2FsID0gYnVpbGRBdHRlbXB0SWQocGFydHMucnVudGltZVN0YWdlSWQsIHBhcnRzLmF0dGVtcHQsIHBhcnRzLmNhbGwpO1xuICAgIHJldHVybiBjYW5vbmljYWwgPT09IGNhbmRpZGF0ZSAmJiB2YWxpZFJlZmVyZW5jZShjYW5vbmljYWwpID8gY2Fub25pY2FsIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbnR5cGUgVGVybWluYWxQcm9vZiA9IFBpY2s8QXR0ZW1wdFJlY29yZCwgJ25leHQnIHwgJ3JlYXNvbicgfCAnZWZmZWN0Jz4gJiB7IHJlYWRvbmx5IGV2aWRlbmNlOiBzdHJpbmcgfTtcblxuLyoqIE9uZSBleGVjdXRpb24ncyBvd25lcnNoaXAsIHBlbmRpbmcgc3VtbWFyeSwgbWFya3MgYW5kIG9taXNzaW9uIGFjY291bnRpbmcgc3RheSBpbiB0aGlzIGhlbHBlci4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUF0dGVudGlvbiB7XG4gIHByaXZhdGUgbWFya3M/OiBNYXA8c3RyaW5nLCBBdHRlbnRpb24+O1xuICBwcml2YXRlIG9taXR0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXRyeVBvc3NpYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgc3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICBwcml2YXRlIHRlcm1pbmFsPzogVGVybWluYWxQcm9vZjtcblxuICAvKiogQSBuZXcgZXhlY3V0aW9uIHN0YXJ0cyBmcmVzaDsgYW4gYXR0ZW1wdCBkaXNjYXJkIG5ldmVyIGNhbGxzIHRoaXMuIE5vIGNvbGxlY3Rpb24gaXMgcmVjb25zdHJ1Y3RlZC4gKi9cbiAgYmVnaW4oKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9taXR0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJldHJ5UG9zc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1bW1hcnkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50ZXJtaW5hbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgb25seSBhZnRlciB0aGUgZnJhbWUgcmV0YWluZWQgdGhpcyBhdHRlbXB0LiBSYXcgZXJyb3IsIHRhcmdldCBhbmQgZGVjaXNpb24gcGF5bG9hZHMgYXJlIG5ldmVyIHJlYWQuICovXG4gIHJlY29yZEF0dGVtcHQocmVjb3JkOiBBdHRlbXB0UmVjb3JkLCBvd25lcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQsIG93bmVyKTtcbiAgICBpZiAocmVjb3JkLmtpbmQgPT09ICdzdGFnZScgJiYgcmVjb3JkLnNlcmllcyA9PT0gb3duZXIpIHtcbiAgICAgIGlmIChyZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWQgJiYgKHJlY29yZC5vZiA/PyAxKSA+IDEpIHRoaXMucmV0cnlQb3NzaWJsZSA9IHRydWU7XG4gICAgICBpZiAocmVmZXJlbmNlICYmIHJlY29yZC5uZXh0ICE9PSAncmV0cnknKSB7XG4gICAgICAgIHRoaXMudGVybWluYWwgPSB7IG5leHQ6IHJlY29yZC5uZXh0LCByZWFzb246IHJlY29yZC5yZWFzb24sIGVmZmVjdDogcmVjb3JkLmVmZmVjdCwgZXZpZGVuY2U6IHJlZmVyZW5jZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBUaGUgcnVubmVyIGNhbGxzIHJlY29yZFN1bW1hcnkgYmVmb3JlIGl0cyBmaW5hbCBhdHRlbXB0LiBGaW5pc2ggdGhhdCBwZW5kaW5nIHByb2plY3Rpb24gbm93IHRvby5cbiAgICB0aGlzLnByb2plY3RTdW1tYXJ5KCk7XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10pID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UpIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgICBlbHNlIHRoaXMubWlzc2luZygpO1xuICAgIH07XG4gICAgaWYgKHJlY29yZC5lZmZlY3QgPT09ICd1bmtub3duJykgYWRkKCd1bmtub3duLWVmZmVjdCcsICdVTktOT1dOX0VGRkVDVF9SRUNPUkRFRCcpO1xuICAgIGlmIChyZWNvcmQub3V0Y29tZSA9PT0gJ3RpbWVvdXQnKSBhZGQoJ3RpbWVvdXQnLCAnVElNRU9VVF9SRUNPUkRFRCcpO1xuICAgIC8vIEFuIFNESydzIHN1Z2dlc3RlZCBuZXh0L3JlYXNvbiBpcyBub3QgaXRzIGFjdHVhbCBwb2xpY3k7IG9ubHkgYSBsYXRlciBvcmRpbmFsIHByb3ZlcyBpdHMgcmV0cnkuXG4gICAgY29uc3Qgb2JzZXJ2ZWQgPSByZWNvcmQua2luZCA9PT0gJ29ic2VydmVkJztcbiAgICBpZiAoKCFvYnNlcnZlZCAmJiByZWNvcmQubmV4dCA9PT0gJ3JldHJ5JykgfHwgcmVjb3JkLmF0dGVtcHQgPiAxKSBhZGQoJ3JldHJpZWQnLCAnUkVUUllfUkVDT1JERUQnKTtcbiAgICBpZiAoXG4gICAgICAhb2JzZXJ2ZWQgJiZcbiAgICAgIHJlY29yZC5uZXh0ID09PSAnc3RvcCcgJiZcbiAgICAgIFNUT1BQRURfUkVBU09OUy5oYXMocmVjb3JkLnJlYXNvbikgJiZcbiAgICAgIChyZWNvcmQub2YgPz8gMSkgPiAxICYmXG4gICAgICByZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICBhZGQoJ2dhdmUtdXAnLCAnUkVUUllfU1RPUF9SRUNPUkRFRCcpO1xuICB9XG5cbiAgcmVjb3JkU3VtbWFyeShzdW1tYXJ5OiBBdHRlbXB0U3VtbWFyeSk6IHZvaWQge1xuICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnk7XG4gICAgdGhpcy5wcm9qZWN0U3VtbWFyeSgpO1xuICB9XG5cbiAgLyoqIEEgc3VtbWFyeS1vbmx5IGN1dCB3YWl0IGhhcyBubyBwaGFudG9tIGZpbmFsIGF0dGVtcHQ7IHVzZSBpdHMgYWN0dWFsIHJldGFpbmVkIHN1bW1hcnkuICovXG4gIHByaXZhdGUgcHJvamVjdFN1bW1hcnkoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMuc3VtbWFyeT8ubGFzdDtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcbiAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMudGVybWluYWw7XG4gICAgY29uc3QgbWF0Y2hpbmcgPSB0ZXJtaW5hbD8ubmV4dCA9PT0gbGFzdC5uZXh0ICYmIHRlcm1pbmFsLnJlYXNvbiA9PT0gbGFzdC5yZWFzb247XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10sIHByb29mPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBwcm9vZiA/PyAnYXR0ZW1wdFN1bW1hcnknO1xuICAgICAgY29uc3Qga2V5ID0ga2luZCArICc6JyArIHJlYXNvbjtcbiAgICAgIGNvbnN0IG1hcmtzID0gdGhpcy5tYXJrcztcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gbWFya3M/LmdldChrZXkpO1xuICAgICAgaWYgKHByb29mICYmIG1hcmtzICYmIHByZXZpb3VzPy5ldmlkZW5jZS5pbmNsdWRlcygnYXR0ZW1wdFN1bW1hcnknKSkge1xuICAgICAgICBtYXJrcy5zZXQoa2V5LCB7IC4uLnByZXZpb3VzLCBldmlkZW5jZTogcHJldmlvdXMuZXZpZGVuY2UuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnYXR0ZW1wdFN1bW1hcnknKSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgfTtcbiAgICBpZiAobGFzdC5lZmZlY3QgPT09ICd1bmtub3duJylcbiAgICAgIGFkZChcbiAgICAgICAgJ3Vua25vd24tZWZmZWN0JyxcbiAgICAgICAgJ1VOS05PV05fRUZGRUNUX1JFQ09SREVEJyxcbiAgICAgICAgbWF0Y2hpbmcgJiYgdGVybWluYWwuZWZmZWN0ID09PSAndW5rbm93bicgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgaWYgKHRoaXMucmV0cnlQb3NzaWJsZSAmJiBsYXN0Lm5leHQgPT09ICdzdG9wJyAmJiBTVE9QUEVEX1JFQVNPTlMuaGFzKGxhc3QucmVhc29uKSlcbiAgICAgIGFkZCgnZ2F2ZS11cCcsICdSRVRSWV9TVE9QX1JFQ09SREVEJywgbWF0Y2hpbmcgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogT25seSB0aGUgZXhwbGljaXQgcmV0YWluZWQgc3RhZ2UtZXJyb3IgcGF0aCBjYWxscyB0aGlzOyBhIGRpYWdub3N0aWMgdmFsdWUgbmV2ZXIgY2xhc3NpZmllcyBpdHNlbGYuICovXG4gIHN0YWdlRmFpbGVkKGVycm9yczogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID1cbiAgICAgICAgZXJyb3JzICYmIHR5cGVvZiBlcnJvcnMgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVycm9ycywgJ3N0YWdlRXhlY3V0aW9uRXJyb3InKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgT2JqZWN0Lmhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSkge1xuICAgICAgICB0aGlzLmFwcGVuZCh7IGtpbmQ6ICdlcnJvcicsIHJlYXNvbjogJ0VSUk9SX1JFQ09SREVEJywgZXZpZGVuY2U6IFsnZXJyb3JzOnN0YWdlRXhlY3V0aW9uRXJyb3InXSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogQSBtYWxmb3JtZWQgZXZpZGVuY2UgYmFnIGlzIHVuYXZhaWxhYmxlLCBuZXZlciBhbm90aGVyIHN0YWdlIGZhaWx1cmUuICovXG4gICAgfVxuICAgIHRoaXMubWlzc2luZygpO1xuICB9XG5cbiAgYXR0ZW1wdERyb3BwZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBlbmQoeyBraW5kOiAnbm90LWNvbGxlY3RlZCcsIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLCBldmlkZW5jZTogWydhdHRlbXB0c0Ryb3BwZWQnXSB9KTtcbiAgfVxuXG4gIC8qKiBLZWVwIG9ubHkgYm91bmRlZCBleGFjdCByZWZlcmVuY2VzOyBvbmUgc2xvdCBpcyByZXNlcnZlZCB0byBkaXNjbG9zZSBvbWlzc2lvbnMuICovXG4gIGFwcGVuZChhdHRlbnRpb246IEF0dGVudGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGF0dGVudGlvbi5raW5kICsgJzonICsgYXR0ZW50aW9uLnJlYXNvbjtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubWFya3M/LmdldChrZXkpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBbLi4uKHByZXZpb3VzPy5ldmlkZW5jZSA/PyBbXSldO1xuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGF0dGVudGlvbi5ldmlkZW5jZSkge1xuICAgICAgaWYgKCF2YWxpZFJlZmVyZW5jZShyZWZlcmVuY2UpKSB7XG4gICAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlZmVyZW5jZXMuaW5jbHVkZXMocmVmZXJlbmNlKSkgY29udGludWU7XG4gICAgICBpZiAocmVmZXJlbmNlcy5sZW5ndGggPj0gTUFYX1JFRkVSRU5DRVMpIHtcbiAgICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgaWYgKGF0dGVudGlvbi5raW5kICE9PSAnbm90LWNvbGxlY3RlZCcgJiYgcmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcHJldmlvdXMgJiYgKHRoaXMubWFya3M/LnNpemUgPz8gMCkgPj0gTUFYX01BUktTIC0gMSkge1xuICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMubWFya3MgPz89IG5ldyBNYXAoKSkuc2V0KGtleSwgeyBraW5kOiBhdHRlbnRpb24ua2luZCwgcmVhc29uOiBhdHRlbnRpb24ucmVhc29uLCBldmlkZW5jZTogcmVmZXJlbmNlcyB9KTtcbiAgfVxuXG4gIG1pc3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBDb3B5IGFscmVhZHkgY29sbGVjdGVkIGJvdW5kZWQgbWFya3MsIG5ldmVyIGFuIGF0dGVtcHQgYXJyYXksIGRpYWdub3N0aWMgYmFnIG9yIGV4ZWN1dGlvbiB0cmVlLiAqL1xuICBzbmFwc2hvdCgpOiByZWFkb25seSBBdHRlbnRpb25bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLih0aGlzLm1hcmtzPy52YWx1ZXMoKSA/PyBbXSldLm1hcCgoYXR0ZW50aW9uKSA9PlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7IC4uLmF0dGVudGlvbiwgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoWy4uLmF0dGVudGlvbi5ldmlkZW5jZV0pIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMub21pdHRlZCAmJiAhcmVzdWx0LnNvbWUoKGF0dGVudGlvbikgPT4gYXR0ZW50aW9uLmtpbmQgPT09ICdub3QtY29sbGVjdGVkJykpIHJlc3VsdC5wdXNoKE1JU1NJTkdfQVRURU5USU9OKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG59XG4iXX0=
@@ -31,7 +31,7 @@
31
31
  * bytes are unchanged.
32
32
  */
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.borrowedMutationMessage = exports.committedMutationMessage = exports.deadFrameMessage = exports.firstDifferingPath = void 0;
34
+ exports.borrowedMutationMessage = exports.committedMutationMessage = exports.lateAttemptMessage = exports.deadFrameMessage = exports.firstDifferingPath = void 0;
35
35
  const foottrace_1 = require("foottrace");
36
36
  /** Render one path segment for a human: `lines[0].qty`, not `lines.0.qty`. */
37
37
  function joinSegment(prefix, segment, intoArray) {
@@ -97,6 +97,20 @@ function deadFrameMessage(stageName, runtimeStageId, key) {
97
97
  "Read the key again through the CURRENT stage's scope and write there.");
98
98
  }
99
99
  exports.deadFrameMessage = deadFrameMessage;
100
+ /**
101
+ * The refusal raised in an attempt that has ENDED (P1b) — timed out, aborted or
102
+ * failed — when the function behind it touches its scope anyway. The engine
103
+ * stopped waiting for it; whatever it does now would land beside a later
104
+ * attempt (or after the stage's commit), so it is refused. A write or emit is
105
+ * recorded on the stage (`StageSnapshot.lateWrites`) before this is thrown.
106
+ */
107
+ function lateAttemptMessage(stageName, series, attempt, key) {
108
+ return (`[footprint] Stage "${stageName}" (${series}): attempt ${attempt} has already ended, and \`${key}\` was ` +
109
+ 'touched through its scope afterwards — refused. The engine stopped waiting for this attempt (its cap, the ' +
110
+ "run's deadline, a cancellation, or its own error); its work must not land beside a later attempt. Pass " +
111
+ '`scope.$attempt().signal` to the calls it makes, so they stop when the attempt does.');
112
+ }
113
+ exports.lateAttemptMessage = lateAttemptMessage;
100
114
  /**
101
115
  * The warning text for a key the stage WROTE after changing, in place, the
102
116
  * committed value it had read before its first write (copy-on-write, 9.29.0).
@@ -134,4 +148,4 @@ function borrowedMutationMessage(stageName, key, path) {
134
148
  'which the scope proxy cannot intercept.');
135
149
  }
136
150
  exports.borrowedMutationMessage = borrowedMutationMessage;
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUVILHlDQUFzQztBQUV0Qyw4RUFBOEU7QUFDOUUsU0FBUyxXQUFXLENBQUMsTUFBYyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtJQUN0RSxJQUFJLFNBQVM7UUFBRSxPQUFPLEdBQUcsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE1BQWUsRUFBRSxLQUFjLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUN4RixJQUFJLElBQUEscUJBQVMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3pELElBQUksS0FBSyxJQUFJLEVBQUU7UUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLDJDQUEyQztJQUMzRSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRWhILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUUxRCxJQUFJLGFBQWEs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LEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyx3Q0FBd0M7UUFDM0Ysb0dBQW9HO1FBQ3BHLG1HQUFtRztRQUNuRyw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLEtBQUs7UUFDTCx5REFBeUQ7UUFDekQsd0RBQXdELEdBQUcsY0FBYztRQUN6RSw2RkFBNkY7UUFDN0YseUNBQXlDLENBQzFDLENBQUM7QUFDSixDQUFDO0FBZEQsMERBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1lbW9yeS9ib3Jyb3dlZE11dGF0aW9uIOKAlCB0aGUgaG9uZXN0IGJvdW5kYXJ5J3MgdHdvIHRleHRzOiB0aGUgZGV2LW1vZGVcbiAqIFJFUE9SVCBmb3IgYSB3cml0ZSB0aGUgZW5naW5lIGNhbm5vdCBzZWUgKHtAbGluayBib3Jyb3dlZE11dGF0aW9uTWVzc2FnZX0pXG4gKiBhbmQgdGhlIFJFRlVTQUwgZm9yIGEgd3JpdGUgZnJvbSBhIGhhbmRsZSBoZWxkIHBhc3QgaXRzIHN0YWdlXG4gKiAoe0BsaW5rIGRlYWRGcmFtZU1lc3NhZ2V9LCB0aHJvd24gYnkgYFNjb3BlRmFjYWRlIMK3IGFzc2VydExpdmVgKS5cbiAqXG4gKiDilIDilIAgVGhlIGhvbmVzdCBib3VuZGFyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIFRoZSB0eXBlZCBzY29wZSBpbnRlcmNlcHRzIGV2ZXJ5IHdyaXRlIGl0IGNhbiByZWFjaDogYSBwcm9wZXJ0eSBhdCBhbnlcbiAqIGRlcHRoLCBhbiBpbmRleGVkIGVsZW1lbnQsIGFuIGFycmF5IG1ldGhvZC4gV2hhdCBpdCBjYW5ub3QgcmVhY2ggaXMgYW5cbiAqIGVsZW1lbnQgaGFuZGVkIG91dCBieSBhIFJFQUQgTUVUSE9EIOKAlCBgZmluZGAsIGBmaWx0ZXJgLCBgZm9y4oCmb2ZgLCBgZm9yRWFjaGAsXG4gKiBkZXN0cnVjdHVyaW5nIOKAlCBiZWNhdXNlIHdyYXBwaW5nIHRob3NlIHdvdWxkIG1lYW4gcmV0dXJuaW5nIHByb3hpZXMgb3V0IG9mXG4gKiBldmVyeSByZWFkIChgbWFwYCB3b3VsZCBidWlsZCBhbiBhcnJheSBvZiBwcm94aWVzLCBgZmlsdGVyYCB3b3VsZCBjb21wYXJlXG4gKiBwcm94aWVzLCBhIHJldHVybmVkIHZhbHVlIHdvdWxkIGVzY2FwZSB0aGUgc3RhZ2Ugc3RpbGwgYm91bmQgdG8gaXQpLiBUaGF0IGlzXG4gKiBhIGNvc3QgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBwYXksIGFuZCBhIHNlbWFudGljIGNoYW5nZSBpdCBzaG91bGQgbm90IG1ha2UuXG4gKlxuICogU28gdGhlIGFuc3dlciBmb3IgdGhhdCBmYW1pbHkgaXMgbm90IGludGVyY2VwdGlvbiDigJQgaXQgaXMgYSBSRVBPUlQuIEEgcmVhZFxuICogaXMgQk9SUk9XRUQ7IG11dGF0aW5nIGl0IGluIHBsYWNlIGlzIG91dCBvZiBjb250cmFjdC4gVGhpcyBtb2R1bGUgZGV0ZWN0cyB0aGVcbiAqIHZpb2xhdGlvbiBhZnRlciB0aGUgZmFjdCBhbmQgbmFtZXMgaXQgKGEgZGV2LW1vZGUgd2FybmluZyBhdCBjb21taXQg4oCUIHRoZVxuICogd3JpdGUgYWxyZWFkeSBoYXBwZW5lZCwgc28gaXQgY2Fubm90IGJlIHJlZnVzZWQpLCBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIHJ1blxuICogZW5kIHdpdGggYSBjb21taXQgbG9nIHRoYXQgZGlzYWdyZWVzIHdpdGggZmluYWwgc3RhdGUgYW5kIG5vdGhpbmcgc2F5aW5nIHNvLlxuICpcbiAqIOKUgOKUgCBIb3cg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBgcmVhZFRyYWNraW5nOiAnZnVsbCdgICh0aGUgZGVmYXVsdCkgYWxyZWFkeSByZXRhaW5zIGEgQ0xPTkUgb2YgZXZlcnkgdmFsdWVcbiAqIGEgc3RhZ2UgcmVhZC4gQXQgY29tbWl0LCBhIGtleSB0aGUgc3RhZ2UgcmVhZCBidXQgbmV2ZXIgV1JPVEUgbXVzdCBzdGlsbFxuICogaG9sZCB3aGF0IGl0IGhlbGQgYXQgcmVhZCB0aW1lIOKAlCBjb21taXR0ZWQgc3RhdGUgaXMgaW1tdXRhYmxlLWFmdGVyLXN3YXAgYW5kXG4gKiB0aGUgYnVmZmVyJ3Mgd29ya2luZyBjb3B5IGlzIHByaXZhdGUuIElmIGl0IGRpZmZlcnMsIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2FuXG4gKiBoYXZlIGNoYW5nZWQgaXQgaXMgdGhlIHN0YWdlIGl0c2VsZiwgaW4gcGxhY2UuXG4gKlxuICogRGV2LW1vZGUgb25seSAoYGVuYWJsZURldk1vZGUoKWApLCBzbyB0aGUgZGVmYXVsdCBydW4gcGF5cyBub3RoaW5nIGFuZCBpdHNcbiAqIGJ5dGVzIGFyZSB1bmNoYW5nZWQuXG4gKi9cblxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIFJlbmRlciBvbmUgcGF0aCBzZWdtZW50IGZvciBhIGh1bWFuOiBgbGluZXNbMF0ucXR5YCwgbm90IGBsaW5lcy4wLnF0eWAuICovXG5mdW5jdGlvbiBqb2luU2VnbWVudChwcmVmaXg6IHN0cmluZywgc2VnbWVudDogc3RyaW5nLCBpbnRvQXJyYXk6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoaW50b0FycmF5KSByZXR1cm4gYCR7cHJlZml4fVske3NlZ21lbnR9XWA7XG4gIHJldHVybiBwcmVmaXggPT09ICcnID8gc2VnbWVudCA6IGAke3ByZWZpeH0uJHtzZWdtZW50fWA7XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IHBhdGggYXQgd2hpY2ggYGFmdGVyYCBzdG9wcyBhZ3JlZWluZyB3aXRoIGBiZWZvcmVgLCBvciBgdW5kZWZpbmVkYFxuICogd2hlbiB0aGV5IGFyZSBzdHJ1Y3R1cmFsbHkgZXF1YWwuIERlcHRoLWZpcnN0LCBvd24ga2V5cyBvbmx5IOKAlCB0aGUgc2FtZVxuICogc2hhcGVzIGBkZWVwRXF1YWxgIGhhbmRsZXMsIHNpbmNlIGNvbW1pdHRlZCBzdGF0ZSBpcyBKU09OLXNoYXBlZC5cbiAqXG4gKiBDeWNsZS1zYWZlIGJ5IGNvbnN0cnVjdGlvbjogaXQgb25seSByZWN1cnNlcyBpbnRvIHBhaXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5XG4gKiBgZGVlcEVxdWFsYCwgYW5kIHN0b3BzIGF0IHRoZSBmaXJzdCBkaXNhZ3JlZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdERpZmZlcmluZ1BhdGgoYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93biwgcHJlZml4ID0gJycsIGRlcHRoID0gMCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZWVwRXF1YWwoYmVmb3JlLCBhZnRlciwgJ2NvcGllcycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGVwdGggPj0gMjQpIHJldHVybiBwcmVmaXg7IC8vIHBhdGhvbG9naWNhbCBuZXN0aW5nIOKAlCBuYW1lIHdoYXQgd2UgaGF2ZVxuICBpZiAoYmVmb3JlID09PSBudWxsIHx8IGFmdGVyID09PSBudWxsIHx8IHR5cGVvZiBiZWZvcmUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBhZnRlciAhPT0gJ29iamVjdCcpIHJldHVybiBwcmVmaXg7XG5cbiAgY29uc3QgYmVmb3JlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmVmb3JlKTtcbiAgaWYgKGJlZm9yZUlzQXJyYXkgIT09IEFycmF5LmlzQXJyYXkoYWZ0ZXIpKSByZXR1cm4gcHJlZml4O1xuXG4gIGlmIChiZWZvcmVJc0FycmF5KSB7XG4gICAgY29uc3QgYSA9IGJlZm9yZSBhcyB1bmtub3duW107XG4gICAgY29uc3QgYiA9IGFmdGVyIGFzIHVua25vd25bXTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gcHJlZml4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFbaV0sIGJbaV0sIGpvaW5TZWdtZW50KHByZWZpeCwgU3RyaW5nKGkpLCB0cnVlKSwgZGVwdGggKyAxKTtcbiAgICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuXG4gIGNvbnN0IGEgPSBiZWZvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGIgPSBhZnRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGEpLCAuLi5PYmplY3Qua2V5cyhiKV0pO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFba2V5XSwgYltrZXldLCBqb2luU2VnbWVudChwcmVmaXgsIGtleSwgZmFsc2UpLCBkZXB0aCArIDEpO1xuICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgfVxuICByZXR1cm4gcHJlZml4O1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHRleHQgZm9yIGEgd3JpdGUgdGhhdCByZWFjaGVkIGEgZnJhbWUgQUZURVIgaXRzIHN0YWdlIGNvbW1pdHRlZC5cbiAqIEEgc2NvcGUsIGFuZCBldmVyeSBwcm94eSByZWFkIG91dCBvZiBpdCwgaXMgYm91bmQgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWRcbiAqIHRvOyBrZXB0IHBhc3QgdGhhdCBzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlXG4gKiB3b3VsZCBzaXQgaW4gYSBidWZmZXIgbm90aGluZyBldmVyIGNvbW1pdHMg4oCUIG5vIHRyYWNlIHJvdywgc3RhdGUgdW5jaGFuZ2VkLlxuICogVGhlIHRocm93IHN1cmZhY2VzIGluIHRoZSBzdGFnZSB0aGF0IG1hZGUgdGhlIHdyaXRlICh0aGUgZW5naW5lJ3MgZXJyb3JcbiAqIHBhdGggbmFtZXMgaXQpOyB0aGlzIHRleHQgbmFtZXMgdGhlIHN0YWdlIHRoZSBoYW5kbGUgY2FtZSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhZEZyYW1lTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmcm9tID0gcnVudGltZVN0YWdlSWQgPyBgXCIke3N0YWdlTmFtZX1cIiAoJHtydW50aW1lU3RhZ2VJZH0pYCA6IGBcIiR7c3RhZ2VOYW1lfVwiYDtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgJHtmcm9tfSBoYXMgYWxyZWFkeSBjb21taXR0ZWQg4oCUIGl0cyBzY29wZSBpcyBkZWFkLCBhbmQgYSB3cml0ZSB0byBcXGAke2tleX1cXGAgYCArXG4gICAgJ2p1c3QgcmVhY2hlZCBpdCBmcm9tIGEgbGF0ZXIgc3RhZ2UgKHRoaXMgZXJyb3IgaXMgcmFpc2VkIGluIHRoYXQgc3RhZ2UpLiBBIHNjb3BlLCBhbmQgYW55dGhpbmcgcmVhZCAnICtcbiAgICAnb3V0IG9mIGl0IChgc2NvcGUua2AsIGBzY29wZS5rLmFyclswXWApLCBiZWxvbmdzIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkIHRvOyBoZWxkIHBhc3QgdGhhdCAnICtcbiAgICBcInN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGUgd291bGQgdmFuaXNoIHdpdGggbm8gdHJhY2Ugcm93LiBcIiArXG4gICAgXCJSZWFkIHRoZSBrZXkgYWdhaW4gdGhyb3VnaCB0aGUgQ1VSUkVOVCBzdGFnZSdzIHNjb3BlIGFuZCB3cml0ZSB0aGVyZS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEga2V5IHRoZSBzdGFnZSBXUk9URSBhZnRlciBjaGFuZ2luZywgaW4gcGxhY2UsIHRoZVxuICogY29tbWl0dGVkIHZhbHVlIGl0IGhhZCByZWFkIGJlZm9yZSBpdHMgZmlyc3Qgd3JpdGUgKGNvcHktb24td3JpdGUsIDkuMjkuMCkuXG4gKiBUaGUgY29tbWl0IGNvbXBhcmVzIHdoYXQgdGhlIHN0YWdlIHdyb3RlIGFnYWluc3QgY29tbWl0dGVkIHN0YXRlIOKAlCB0aGVcbiAqIG9iamVjdCB0aGUgaW4tcGxhY2UgY2hhbmdlIGFsc28gbW92ZWQg4oCUIHNvIGl0IHJlY29yZHMgbm8gY2hhbmdlOiBsaXZlIHN0YXRlXG4gKiBrZWVwcyB0aGUgZWRpdCwgdGhlIGxvZyBhbmQgZXZlcnkgZm9sZCBkbyBub3QuICg5LjI4LjAgcmVjb3JkZWQgaXQgd2hlbiB0aGVcbiAqIGVkaXQgY2FtZSBhZnRlciB0aGUgZmlyc3Qgd3JpdGUsIGJ5IGFjY2lkZW50IG9mIGEgd2hvbGUtc3RhdGUgY2xvbmUuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0dGVkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSBvbiB0aGUgY29tbWl0dGVkIHZhbHVlIGl0IHJlYWQgYmVmb3JlIGAgK1xuICAgICdpdHMgZmlyc3Qgd3JpdGUsIHRoZW4gd3JvdGUgdGhlIGtleS4gVGhlIGNvbW1pdCBjb21wYXJlcyB0aGUgd3JpdHRlbiB2YWx1ZSB3aXRoIGNvbW1pdHRlZCBzdGF0ZSDigJQgJyArXG4gICAgJ3doaWNoIHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBOTyBjaGFuZ2U6IGxpdmUgc3RhdGUga2VlcHMgdGhlIGVkaXQsIHRoZSBjb21taXQgJyArXG4gICAgJ2xvZyBhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgaXQgZG8gbm90LiBSZWFkcyBhcmUgQk9SUk9XRUQuIEJ1aWxkIHRoZSBuZXh0IHZhbHVlIGluc3RlYWQgJyArXG4gICAgYChcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIHsgLi4udmFsdWUsIOKApiB9KVxcYCksIG9yIHJlYWQgdGhlIGtleSBhZ2FpbiBhZnRlciB0aGUgc3RhZ2UncyBmaXJzdCBgICtcbiAgICBcIndyaXRlIOKAlCB0aGF0IHJlYWQgaXMgdGhlIHN0YWdlJ3Mgb3duIGNvcHkuXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgd2FybmluZyB0ZXh0LiBOYW1lcyB0aGUgc3RhZ2UsIHRoZSBleGFjdCBwYXRoIHRoYXQgbW92ZWQsIGFuZCB0aGUgdHdvXG4gKiB3YXlzIHRvIHdyaXRlIGl0IGJhY2sg4oCUIGJlY2F1c2UgXCJ5b3UgbXV0YXRlZCBzb21ldGhpbmdcIiBpcyBub3QgYWN0aW9uYWJsZVxuICogYW5kIHRoaXMgaXMgdGhlIG9uZSBmYWlsdXJlIG1vZGUgdGhlIHdob2xlIGRlc2lnbiBleGlzdHMgdG8gcHJldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvcnJvd2VkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSwgb24gYSB2YWx1ZSBpdCBvbmx5IHJlYWQuIGAgK1xuICAgICdmb290cHJpbnQgbmV2ZXIgc2F3IHRoYXQgd3JpdGU6IHRoZXJlIGlzIG5vIHRyYWNlIHJvdyBmb3IgaXQsIHNvIHRoZSBjb21taXQgbG9nLCB0aGUgY2F1c2FsIGNoYWluICcgK1xuICAgICdhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgdGhlIGxvZyB3aWxsIGRpc2FncmVlIHdpdGggZmluYWwgc3RhdGUg4oCUIGFuZCB1bmRlciBhIGRpZmZlcmVudCB3cml0ZSAnICtcbiAgICAnb3JkZXIgdGhlIGNoYW5nZSBpcyBkcm9wcGVkIGVudGlyZWx5LiBSZWFkcyBhcmUgQk9SUk9XRUQuICcgK1xuICAgICdXcml0ZSB0aHJvdWdoIHRoZSBzY29wZSBpbnN0ZWFkIChgc2NvcGUuJyArXG4gICAgd2hlcmUgK1xuICAgICcgPSDigKZgIOKAlCBwcm9wZXJ0eSBhbmQgaW5kZXhlZCBhY2Nlc3MgYXJlIGJvdGggdHJhY2tlZCksICcgK1xuICAgIGBvciBoYW5kIGJhY2sgdGhlIHdob2xlIHZhbHVlIHdpdGggXFxgc2NvcGUuJHNldFZhbHVlKCcke2tleX0nLCBuZXh0KVxcYC4gYCArXG4gICAgJ1RoaXMgdXN1YWxseSBjb21lcyBmcm9tIG11dGF0aW5nIGFuIGVsZW1lbnQgcmVhY2hlZCBieSBgZmluZGAvYGZpbHRlcmAvYGZvcuKApm9mYC9gZm9yRWFjaGAsICcgK1xuICAgICd3aGljaCB0aGUgc2NvcGUgcHJveHkgY2Fubm90IGludGVyY2VwdC4nXG4gICk7XG59XG4iXX0=
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUVILHlDQUFzQztBQUV0Qyw4RUFBOEU7QUFDOUUsU0FBUyxXQUFXLENBQUMsTUFBYyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtJQUN0RSxJQUFJLFNBQVM7UUFBRSxPQUFPLEdBQUcsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE1BQWUsRUFBRSxLQUFjLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUN4RixJQUFJLElBQUEscUJBQVMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3pELElBQUksS0FBSyxJQUFJLEVBQUU7UUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLDJDQUEyQztJQUMzRSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRWhILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUUxRCxJQUFJLGFBQWEs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LENBQzdDLENBQUM7QUFDSixDQUFDO0FBVkQsNERBVUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxHQUFXLEVBQUUsSUFBWTtJQUNsRixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyx3Q0FBd0M7UUFDM0Ysb0dBQW9HO1FBQ3BHLG1HQUFtRztRQUNuRyw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLEtBQUs7UUFDTCx5REFBeUQ7UUFDekQsd0RBQXdELEdBQUcsY0FBYztRQUN6RSw2RkFBNkY7UUFDN0YseUNBQXlDLENBQzFDLENBQUM7QUFDSixDQUFDO0FBZEQsMERBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1lbW9yeS9ib3Jyb3dlZE11dGF0aW9uIOKAlCB0aGUgaG9uZXN0IGJvdW5kYXJ5J3MgdHdvIHRleHRzOiB0aGUgZGV2LW1vZGVcbiAqIFJFUE9SVCBmb3IgYSB3cml0ZSB0aGUgZW5naW5lIGNhbm5vdCBzZWUgKHtAbGluayBib3Jyb3dlZE11dGF0aW9uTWVzc2FnZX0pXG4gKiBhbmQgdGhlIFJFRlVTQUwgZm9yIGEgd3JpdGUgZnJvbSBhIGhhbmRsZSBoZWxkIHBhc3QgaXRzIHN0YWdlXG4gKiAoe0BsaW5rIGRlYWRGcmFtZU1lc3NhZ2V9LCB0aHJvd24gYnkgYFNjb3BlRmFjYWRlIMK3IGFzc2VydExpdmVgKS5cbiAqXG4gKiDilIDilIAgVGhlIGhvbmVzdCBib3VuZGFyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIFRoZSB0eXBlZCBzY29wZSBpbnRlcmNlcHRzIGV2ZXJ5IHdyaXRlIGl0IGNhbiByZWFjaDogYSBwcm9wZXJ0eSBhdCBhbnlcbiAqIGRlcHRoLCBhbiBpbmRleGVkIGVsZW1lbnQsIGFuIGFycmF5IG1ldGhvZC4gV2hhdCBpdCBjYW5ub3QgcmVhY2ggaXMgYW5cbiAqIGVsZW1lbnQgaGFuZGVkIG91dCBieSBhIFJFQUQgTUVUSE9EIOKAlCBgZmluZGAsIGBmaWx0ZXJgLCBgZm9y4oCmb2ZgLCBgZm9yRWFjaGAsXG4gKiBkZXN0cnVjdHVyaW5nIOKAlCBiZWNhdXNlIHdyYXBwaW5nIHRob3NlIHdvdWxkIG1lYW4gcmV0dXJuaW5nIHByb3hpZXMgb3V0IG9mXG4gKiBldmVyeSByZWFkIChgbWFwYCB3b3VsZCBidWlsZCBhbiBhcnJheSBvZiBwcm94aWVzLCBgZmlsdGVyYCB3b3VsZCBjb21wYXJlXG4gKiBwcm94aWVzLCBhIHJldHVybmVkIHZhbHVlIHdvdWxkIGVzY2FwZSB0aGUgc3RhZ2Ugc3RpbGwgYm91bmQgdG8gaXQpLiBUaGF0IGlzXG4gKiBhIGNvc3QgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBwYXksIGFuZCBhIHNlbWFudGljIGNoYW5nZSBpdCBzaG91bGQgbm90IG1ha2UuXG4gKlxuICogU28gdGhlIGFuc3dlciBmb3IgdGhhdCBmYW1pbHkgaXMgbm90IGludGVyY2VwdGlvbiDigJQgaXQgaXMgYSBSRVBPUlQuIEEgcmVhZFxuICogaXMgQk9SUk9XRUQ7IG11dGF0aW5nIGl0IGluIHBsYWNlIGlzIG91dCBvZiBjb250cmFjdC4gVGhpcyBtb2R1bGUgZGV0ZWN0cyB0aGVcbiAqIHZpb2xhdGlvbiBhZnRlciB0aGUgZmFjdCBhbmQgbmFtZXMgaXQgKGEgZGV2LW1vZGUgd2FybmluZyBhdCBjb21taXQg4oCUIHRoZVxuICogd3JpdGUgYWxyZWFkeSBoYXBwZW5lZCwgc28gaXQgY2Fubm90IGJlIHJlZnVzZWQpLCBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIHJ1blxuICogZW5kIHdpdGggYSBjb21taXQgbG9nIHRoYXQgZGlzYWdyZWVzIHdpdGggZmluYWwgc3RhdGUgYW5kIG5vdGhpbmcgc2F5aW5nIHNvLlxuICpcbiAqIOKUgOKUgCBIb3cg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBgcmVhZFRyYWNraW5nOiAnZnVsbCdgICh0aGUgZGVmYXVsdCkgYWxyZWFkeSByZXRhaW5zIGEgQ0xPTkUgb2YgZXZlcnkgdmFsdWVcbiAqIGEgc3RhZ2UgcmVhZC4gQXQgY29tbWl0LCBhIGtleSB0aGUgc3RhZ2UgcmVhZCBidXQgbmV2ZXIgV1JPVEUgbXVzdCBzdGlsbFxuICogaG9sZCB3aGF0IGl0IGhlbGQgYXQgcmVhZCB0aW1lIOKAlCBjb21taXR0ZWQgc3RhdGUgaXMgaW1tdXRhYmxlLWFmdGVyLXN3YXAgYW5kXG4gKiB0aGUgYnVmZmVyJ3Mgd29ya2luZyBjb3B5IGlzIHByaXZhdGUuIElmIGl0IGRpZmZlcnMsIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2FuXG4gKiBoYXZlIGNoYW5nZWQgaXQgaXMgdGhlIHN0YWdlIGl0c2VsZiwgaW4gcGxhY2UuXG4gKlxuICogRGV2LW1vZGUgb25seSAoYGVuYWJsZURldk1vZGUoKWApLCBzbyB0aGUgZGVmYXVsdCBydW4gcGF5cyBub3RoaW5nIGFuZCBpdHNcbiAqIGJ5dGVzIGFyZSB1bmNoYW5nZWQuXG4gKi9cblxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIFJlbmRlciBvbmUgcGF0aCBzZWdtZW50IGZvciBhIGh1bWFuOiBgbGluZXNbMF0ucXR5YCwgbm90IGBsaW5lcy4wLnF0eWAuICovXG5mdW5jdGlvbiBqb2luU2VnbWVudChwcmVmaXg6IHN0cmluZywgc2VnbWVudDogc3RyaW5nLCBpbnRvQXJyYXk6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoaW50b0FycmF5KSByZXR1cm4gYCR7cHJlZml4fVske3NlZ21lbnR9XWA7XG4gIHJldHVybiBwcmVmaXggPT09ICcnID8gc2VnbWVudCA6IGAke3ByZWZpeH0uJHtzZWdtZW50fWA7XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IHBhdGggYXQgd2hpY2ggYGFmdGVyYCBzdG9wcyBhZ3JlZWluZyB3aXRoIGBiZWZvcmVgLCBvciBgdW5kZWZpbmVkYFxuICogd2hlbiB0aGV5IGFyZSBzdHJ1Y3R1cmFsbHkgZXF1YWwuIERlcHRoLWZpcnN0LCBvd24ga2V5cyBvbmx5IOKAlCB0aGUgc2FtZVxuICogc2hhcGVzIGBkZWVwRXF1YWxgIGhhbmRsZXMsIHNpbmNlIGNvbW1pdHRlZCBzdGF0ZSBpcyBKU09OLXNoYXBlZC5cbiAqXG4gKiBDeWNsZS1zYWZlIGJ5IGNvbnN0cnVjdGlvbjogaXQgb25seSByZWN1cnNlcyBpbnRvIHBhaXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5XG4gKiBgZGVlcEVxdWFsYCwgYW5kIHN0b3BzIGF0IHRoZSBmaXJzdCBkaXNhZ3JlZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdERpZmZlcmluZ1BhdGgoYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93biwgcHJlZml4ID0gJycsIGRlcHRoID0gMCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZWVwRXF1YWwoYmVmb3JlLCBhZnRlciwgJ2NvcGllcycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGVwdGggPj0gMjQpIHJldHVybiBwcmVmaXg7IC8vIHBhdGhvbG9naWNhbCBuZXN0aW5nIOKAlCBuYW1lIHdoYXQgd2UgaGF2ZVxuICBpZiAoYmVmb3JlID09PSBudWxsIHx8IGFmdGVyID09PSBudWxsIHx8IHR5cGVvZiBiZWZvcmUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBhZnRlciAhPT0gJ29iamVjdCcpIHJldHVybiBwcmVmaXg7XG5cbiAgY29uc3QgYmVmb3JlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmVmb3JlKTtcbiAgaWYgKGJlZm9yZUlzQXJyYXkgIT09IEFycmF5LmlzQXJyYXkoYWZ0ZXIpKSByZXR1cm4gcHJlZml4O1xuXG4gIGlmIChiZWZvcmVJc0FycmF5KSB7XG4gICAgY29uc3QgYSA9IGJlZm9yZSBhcyB1bmtub3duW107XG4gICAgY29uc3QgYiA9IGFmdGVyIGFzIHVua25vd25bXTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gcHJlZml4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFbaV0sIGJbaV0sIGpvaW5TZWdtZW50KHByZWZpeCwgU3RyaW5nKGkpLCB0cnVlKSwgZGVwdGggKyAxKTtcbiAgICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuXG4gIGNvbnN0IGEgPSBiZWZvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGIgPSBhZnRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGEpLCAuLi5PYmplY3Qua2V5cyhiKV0pO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFba2V5XSwgYltrZXldLCBqb2luU2VnbWVudChwcmVmaXgsIGtleSwgZmFsc2UpLCBkZXB0aCArIDEpO1xuICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgfVxuICByZXR1cm4gcHJlZml4O1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHRleHQgZm9yIGEgd3JpdGUgdGhhdCByZWFjaGVkIGEgZnJhbWUgQUZURVIgaXRzIHN0YWdlIGNvbW1pdHRlZC5cbiAqIEEgc2NvcGUsIGFuZCBldmVyeSBwcm94eSByZWFkIG91dCBvZiBpdCwgaXMgYm91bmQgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWRcbiAqIHRvOyBrZXB0IHBhc3QgdGhhdCBzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlXG4gKiB3b3VsZCBzaXQgaW4gYSBidWZmZXIgbm90aGluZyBldmVyIGNvbW1pdHMg4oCUIG5vIHRyYWNlIHJvdywgc3RhdGUgdW5jaGFuZ2VkLlxuICogVGhlIHRocm93IHN1cmZhY2VzIGluIHRoZSBzdGFnZSB0aGF0IG1hZGUgdGhlIHdyaXRlICh0aGUgZW5naW5lJ3MgZXJyb3JcbiAqIHBhdGggbmFtZXMgaXQpOyB0aGlzIHRleHQgbmFtZXMgdGhlIHN0YWdlIHRoZSBoYW5kbGUgY2FtZSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhZEZyYW1lTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmcm9tID0gcnVudGltZVN0YWdlSWQgPyBgXCIke3N0YWdlTmFtZX1cIiAoJHtydW50aW1lU3RhZ2VJZH0pYCA6IGBcIiR7c3RhZ2VOYW1lfVwiYDtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgJHtmcm9tfSBoYXMgYWxyZWFkeSBjb21taXR0ZWQg4oCUIGl0cyBzY29wZSBpcyBkZWFkLCBhbmQgYSB3cml0ZSB0byBcXGAke2tleX1cXGAgYCArXG4gICAgJ2p1c3QgcmVhY2hlZCBpdCBmcm9tIGEgbGF0ZXIgc3RhZ2UgKHRoaXMgZXJyb3IgaXMgcmFpc2VkIGluIHRoYXQgc3RhZ2UpLiBBIHNjb3BlLCBhbmQgYW55dGhpbmcgcmVhZCAnICtcbiAgICAnb3V0IG9mIGl0IChgc2NvcGUua2AsIGBzY29wZS5rLmFyclswXWApLCBiZWxvbmdzIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkIHRvOyBoZWxkIHBhc3QgdGhhdCAnICtcbiAgICBcInN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGUgd291bGQgdmFuaXNoIHdpdGggbm8gdHJhY2Ugcm93LiBcIiArXG4gICAgXCJSZWFkIHRoZSBrZXkgYWdhaW4gdGhyb3VnaCB0aGUgQ1VSUkVOVCBzdGFnZSdzIHNjb3BlIGFuZCB3cml0ZSB0aGVyZS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHJhaXNlZCBpbiBhbiBhdHRlbXB0IHRoYXQgaGFzIEVOREVEIChQMWIpIOKAlCB0aW1lZCBvdXQsIGFib3J0ZWQgb3JcbiAqIGZhaWxlZCDigJQgd2hlbiB0aGUgZnVuY3Rpb24gYmVoaW5kIGl0IHRvdWNoZXMgaXRzIHNjb3BlIGFueXdheS4gVGhlIGVuZ2luZVxuICogc3RvcHBlZCB3YWl0aW5nIGZvciBpdDsgd2hhdGV2ZXIgaXQgZG9lcyBub3cgd291bGQgbGFuZCBiZXNpZGUgYSBsYXRlclxuICogYXR0ZW1wdCAob3IgYWZ0ZXIgdGhlIHN0YWdlJ3MgY29tbWl0KSwgc28gaXQgaXMgcmVmdXNlZC4gQSB3cml0ZSBvciBlbWl0IGlzXG4gKiByZWNvcmRlZCBvbiB0aGUgc3RhZ2UgKGBTdGFnZVNuYXBzaG90LmxhdGVXcml0ZXNgKSBiZWZvcmUgdGhpcyBpcyB0aHJvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXRlQXR0ZW1wdE1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHNlcmllczogc3RyaW5nLCBhdHRlbXB0OiBudW1iZXIsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiAoJHtzZXJpZXN9KTogYXR0ZW1wdCAke2F0dGVtcHR9IGhhcyBhbHJlYWR5IGVuZGVkLCBhbmQgXFxgJHtrZXl9XFxgIHdhcyBgICtcbiAgICAndG91Y2hlZCB0aHJvdWdoIGl0cyBzY29wZSBhZnRlcndhcmRzIOKAlCByZWZ1c2VkLiBUaGUgZW5naW5lIHN0b3BwZWQgd2FpdGluZyBmb3IgdGhpcyBhdHRlbXB0IChpdHMgY2FwLCB0aGUgJyArXG4gICAgXCJydW4ncyBkZWFkbGluZSwgYSBjYW5jZWxsYXRpb24sIG9yIGl0cyBvd24gZXJyb3IpOyBpdHMgd29yayBtdXN0IG5vdCBsYW5kIGJlc2lkZSBhIGxhdGVyIGF0dGVtcHQuIFBhc3MgXCIgK1xuICAgICdgc2NvcGUuJGF0dGVtcHQoKS5zaWduYWxgIHRvIHRoZSBjYWxscyBpdCBtYWtlcywgc28gdGhleSBzdG9wIHdoZW4gdGhlIGF0dGVtcHQgZG9lcy4nXG4gICk7XG59XG5cbi8qKlxuICogVGhlIHdhcm5pbmcgdGV4dCBmb3IgYSBrZXkgdGhlIHN0YWdlIFdST1RFIGFmdGVyIGNoYW5naW5nLCBpbiBwbGFjZSwgdGhlXG4gKiBjb21taXR0ZWQgdmFsdWUgaXQgaGFkIHJlYWQgYmVmb3JlIGl0cyBmaXJzdCB3cml0ZSAoY29weS1vbi13cml0ZSwgOS4yOS4wKS5cbiAqIFRoZSBjb21taXQgY29tcGFyZXMgd2hhdCB0aGUgc3RhZ2Ugd3JvdGUgYWdhaW5zdCBjb21taXR0ZWQgc3RhdGUg4oCUIHRoZVxuICogb2JqZWN0IHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBubyBjaGFuZ2U6IGxpdmUgc3RhdGVcbiAqIGtlZXBzIHRoZSBlZGl0LCB0aGUgbG9nIGFuZCBldmVyeSBmb2xkIGRvIG5vdC4gKDkuMjguMCByZWNvcmRlZCBpdCB3aGVuIHRoZVxuICogZWRpdCBjYW1lIGFmdGVyIHRoZSBmaXJzdCB3cml0ZSwgYnkgYWNjaWRlbnQgb2YgYSB3aG9sZS1zdGF0ZSBjbG9uZS4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXR0ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFIG9uIHRoZSBjb21taXR0ZWQgdmFsdWUgaXQgcmVhZCBiZWZvcmUgYCArXG4gICAgJ2l0cyBmaXJzdCB3cml0ZSwgdGhlbiB3cm90ZSB0aGUga2V5LiBUaGUgY29tbWl0IGNvbXBhcmVzIHRoZSB3cml0dGVuIHZhbHVlIHdpdGggY29tbWl0dGVkIHN0YXRlIOKAlCAnICtcbiAgICAnd2hpY2ggdGhlIGluLXBsYWNlIGNoYW5nZSBhbHNvIG1vdmVkIOKAlCBzbyBpdCByZWNvcmRzIE5PIGNoYW5nZTogbGl2ZSBzdGF0ZSBrZWVwcyB0aGUgZWRpdCwgdGhlIGNvbW1pdCAnICtcbiAgICAnbG9nIGFuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyBpdCBkbyBub3QuIFJlYWRzIGFyZSBCT1JST1dFRC4gQnVpbGQgdGhlIG5leHQgdmFsdWUgaW5zdGVhZCAnICtcbiAgICBgKFxcYHNjb3BlLiRzZXRWYWx1ZSgnJHtrZXl9JywgeyAuLi52YWx1ZSwg4oCmIH0pXFxgKSwgb3IgcmVhZCB0aGUga2V5IGFnYWluIGFmdGVyIHRoZSBzdGFnZSdzIGZpcnN0IGAgK1xuICAgIFwid3JpdGUg4oCUIHRoYXQgcmVhZCBpcyB0aGUgc3RhZ2UncyBvd24gY29weS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQuIE5hbWVzIHRoZSBzdGFnZSwgdGhlIGV4YWN0IHBhdGggdGhhdCBtb3ZlZCwgYW5kIHRoZSB0d29cbiAqIHdheXMgdG8gd3JpdGUgaXQgYmFjayDigJQgYmVjYXVzZSBcInlvdSBtdXRhdGVkIHNvbWV0aGluZ1wiIGlzIG5vdCBhY3Rpb25hYmxlXG4gKiBhbmQgdGhpcyBpcyB0aGUgb25lIGZhaWx1cmUgbW9kZSB0aGUgd2hvbGUgZGVzaWduIGV4aXN0cyB0byBwcmV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFLCBvbiBhIHZhbHVlIGl0IG9ubHkgcmVhZC4gYCArXG4gICAgJ2Zvb3RwcmludCBuZXZlciBzYXcgdGhhdCB3cml0ZTogdGhlcmUgaXMgbm8gdHJhY2Ugcm93IGZvciBpdCwgc28gdGhlIGNvbW1pdCBsb2csIHRoZSBjYXVzYWwgY2hhaW4gJyArXG4gICAgJ2FuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyB0aGUgbG9nIHdpbGwgZGlzYWdyZWUgd2l0aCBmaW5hbCBzdGF0ZSDigJQgYW5kIHVuZGVyIGEgZGlmZmVyZW50IHdyaXRlICcgK1xuICAgICdvcmRlciB0aGUgY2hhbmdlIGlzIGRyb3BwZWQgZW50aXJlbHkuIFJlYWRzIGFyZSBCT1JST1dFRC4gJyArXG4gICAgJ1dyaXRlIHRocm91Z2ggdGhlIHNjb3BlIGluc3RlYWQgKGBzY29wZS4nICtcbiAgICB3aGVyZSArXG4gICAgJyA9IOKApmAg4oCUIHByb3BlcnR5IGFuZCBpbmRleGVkIGFjY2VzcyBhcmUgYm90aCB0cmFja2VkKSwgJyArXG4gICAgYG9yIGhhbmQgYmFjayB0aGUgd2hvbGUgdmFsdWUgd2l0aCBcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIG5leHQpXFxgLiBgICtcbiAgICAnVGhpcyB1c3VhbGx5IGNvbWVzIGZyb20gbXV0YXRpbmcgYW4gZWxlbWVudCByZWFjaGVkIGJ5IGBmaW5kYC9gZmlsdGVyYC9gZm9y4oCmb2ZgL2Bmb3JFYWNoYCwgJyArXG4gICAgJ3doaWNoIHRoZSBzY29wZSBwcm94eSBjYW5ub3QgaW50ZXJjZXB0LidcbiAgKTtcbn1cbiJdfQ==
@@ -8,8 +8,10 @@
8
8
  * in the record's `types.ts` until C6; the record names nothing outside itself now
9
9
  * (`RECORD_FILES`, scripts/layering.config.cjs), so they sit beside the frame that writes them.
10
10
  *
11
+ * A retried stage's node also carries its attempts (`attempts`, `attemptSummary` — the attempt leaf's types, L0).
12
+ *
11
13
  * A `StageSnapshot` is an `ExecutionTree` (`types.ts`), the shape the record's readers walk:
12
14
  * `commitStops`, `tagStops` and `keysReadFromExecutionTree` take one.
13
15
  */
14
16
  Object.defineProperty(exports, "__esModule", { value: true });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBmcmFtZVR5cGVzLnRzIOKAlCB0aGUgdHlwZXMgb2YgdGhlIGVuZ2luZSdzIGZyYW1lIChMNCk6IHdoYXQgb25lIHN0YWdlIGluc2lkZSBhIHJ1biByZXBvcnRzLlxuICpcbiAqIEl0cyBzbmFwc2hvdCAoYFN0YWdlU25hcHNob3RgLCBvbmUgbm9kZSBvZiB0aGUgZXhlY3V0aW9uIHRyZWUpLCBpdHMgZmxvdyBtZXNzYWdlc1xuICogKGBGbG93TWVzc2FnZWAsIGBGbG93Q29udHJvbFR5cGVgKSBhbmQgdGhlIHR3byByZXRlbnRpb24gZGlhbHMgdGhhdCBzaGFwZSB3aGF0IHRoZSBzbmFwc2hvdFxuICoga2VlcHMgKGBSZWFkVHJhY2tpbmdNb2RlYCwgYFdyaXRlVHJhY2tpbmdNb2RlYCwgb3ZlciBgY2FwdHVyZS9gJ3MgYFJldGVudGlvblBvbGljeWApLiBUaGV5IGxpdmVkXG4gKiBpbiB0aGUgcmVjb3JkJ3MgYHR5cGVzLnRzYCB1bnRpbCBDNjsgdGhlIHJlY29yZCBuYW1lcyBub3RoaW5nIG91dHNpZGUgaXRzZWxmIG5vd1xuICogKGBSRUNPUkRfRklMRVNgLCBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janMpLCBzbyB0aGV5IHNpdCBiZXNpZGUgdGhlIGZyYW1lIHRoYXQgd3JpdGVzIHRoZW0uXG4gKlxuICogQSBgU3RhZ2VTbmFwc2hvdGAgaXMgYW4gYEV4ZWN1dGlvblRyZWVgIChgdHlwZXMudHNgKSwgdGhlIHNoYXBlIHRoZSByZWNvcmQncyByZWFkZXJzIHdhbGs6XG4gKiBgY29tbWl0U3RvcHNgLCBgdGFnU3RvcHNgIGFuZCBga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZWAgdGFrZSBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZXRlbnRpb25Qb2xpY3kgfSBmcm9tICcuLi9jYXB0dXJlL3BvbGljaWVzLmpzJztcblxuLy8g4pSA4pSAIEZsb3cgQ29udHJvbCBOYXJyYXRpdmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBUeXBlcyBvZiBjb250cm9sIGZsb3cgZGVjaXNpb25zIGNhcHR1cmVkIGJ5IHRoZSBleGVjdXRpb24gZW5naW5lLiAqL1xuZXhwb3J0IHR5cGUgRmxvd0NvbnRyb2xUeXBlID0gJ25leHQnIHwgJ2JyYW5jaCcgfCAnY2hpbGRyZW4nIHwgJ3NlbGVjdGVkJyB8ICdzdWJmbG93JyB8ICdsb29wJztcblxuLyoqIEEgc2luZ2xlIGZsb3cgY29udHJvbCBuYXJyYXRpdmUgZW50cnkuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dNZXNzYWdlIHtcbiAgdHlwZTogRmxvd0NvbnRyb2xUeXBlO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0YXJnZXRTdGFnZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICByYXRpb25hbGU/OiBzdHJpbmc7XG4gIGNvdW50PzogbnVtYmVyO1xuICBpdGVyYXRpb24/OiBudW1iZXI7XG4gIHRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFJlYWQgLyBXcml0ZSBUcmFja2luZyAoIzE0LCAjMTNjLUEpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIFRoZSBwb2xpY3kgZmFtaWx5IGFuZCBtYXJrZXIgc2hhcGVzIGFyZSBvd25lZCBieSBgY2FwdHVyZS9gIChzaGFyZWQgd2l0aFxuLy8gdGhlIGRlZmVycmVkLW9ic2VydmVyIGNhcHR1cmUgdGllcikuXG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCByZWFkcyBhcmUgcmVjb3JkZWQgaW50byBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYC5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyByZWFkIHZpZXcuIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB0aGlzIGlzXG4gKiAgIHdoYXQgc25hcHNob3QgY29uc3VtZXJzIChsZW5zLCBhZ2VudGZvb3RwcmludCkgc2VlIHRvZGF5LlxuICogLSBgJ3N1bW1hcnknYCDigJQgcmVhZHMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfSAodHlwZSArIHNpemVcbiAqICAgcHJveHkgKyBzaG9ydCBwcmV2aWV3KSBpbnN0ZWFkIG9mIHRoZSBjbG9uZWQgdmFsdWUuIE8oMSktaXNoIHBlciByZWFkIOKAlFxuICogICBubyB2YWx1ZSBjbG9uZSwgbm8gc2VyaWFsaXphdGlvbiBvZiBsYXJnZSBvYmplY3RzLlxuICogLSBgJ29mZidgIOKAlCByZWFkcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlUmVhZHNgIGlzIGFic2VudCBmcm9tIHRoZVxuICogICBzbmFwc2hvdC4gWmVybyBwZXItcmVhZCBjb3N0LiBWYWx1ZXMgYXJlIHN0aWxsIHJlYWRhYmxlLCBhbmQgdGhlXG4gKiAgIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgZXZlbnQgc3RpbGwgZmlyZXMgKGl0IHBhc3NlcyB0aGUgbGl2ZSByZWZlcmVuY2UgYW5kXG4gKiAgIG5ldmVyIGNsb25lZCkg4oCUIHNvIG5hcnJhdGl2ZSBvdXRwdXQgaXMgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuIFRoZSBwb2xpY3lcbiAqICAgc2NvcGVzIE9OTFkgdGhlIHNuYXBzaG90J3MgYHN0YWdlUmVhZHNgIHBheWxvYWQuXG4gKlxuICogU2V0IHZpYSBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHJlYWRUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuXG4gKlxuICogQWxpYXMgb2YgdGhlIHNoYXJlZCB7QGxpbmsgUmV0ZW50aW9uUG9saWN5fSBmYW1pbHkgKCMxM2MtQSkg4oCUIGtlcHQgYXMgdGhlXG4gKiBzaGlwcGVkIHB1YmxpYyBuYW1lIGZvciB0aGUgcmVhZCBkaWFsLlxuICovXG5leHBvcnQgdHlwZSBSZWFkVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IHRyYWNrZWQgd3JpdGVzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYFxuICogKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfS5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG9cbiAqICAgdGhlIHN0YWdlJ3Mgd3JpdGUgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCB3cml0ZXMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFdyaXRlU3VtbWFyeU1hcmtlcn0gaW5zdGVhZCBvZlxuICogICB0aGUgY2xvbmVkIHZhbHVlLlxuICogLSBgJ29mZidgIOKAlCB3cml0ZXMgYXJlIG5vdCByZWNvcmRlZCBhdCBhbGw7IGBzdGFnZVdyaXRlc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBUaGUgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0IHRvIHNoYXJlZCBzdGF0ZSBhbmQgc3RpbGxcbiAqICAgYXBwZWFyIGluIHRoZSBjb21taXQgbG9nIOKAlCBvbmx5IHRoZSBwZXItc3RhZ2Ugc25hcHNob3QgYm9va2tlZXBpbmcgKGFuZFxuICogICB0aGVyZWZvcmUgdGhlIGNvbW1pdCBvYnNlcnZlcidzIG11dGF0aW9ucyBwYXlsb2FkKSBpcyBhZmZlY3RlZC4gKFRoZVxuICogICBjb21taXQgbG9nJ3Mgb3duIHZhbHVlIGVuY29kaW5nIGhhcyBpdHMgb3duIGxvc3NsZXNzIGRpYWwg4oCUXG4gKiAgIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfSwgIzEzYy1CLilcbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLiBTZWVcbiAqIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMud3JpdGVUcmFja2luZ2AgZm9yIHRoZSBmdWxsIG9ic2VydmFibGUtY29uc2VxdWVuY2VcbiAqIGNvbnRyYWN0IChvbkNvbW1pdCBwYXlsb2FkLCByZWRhY3Rpb24gcHJlY2VkZW5jZSwgd2hhdCBpcyBPVVQgb2Ygc2NvcGUpLlxuICovXG5leHBvcnQgdHlwZSBXcml0ZVRyYWNraW5nTW9kZSA9IFJldGVudGlvblBvbGljeTtcblxuLy8g4pSA4pSAIFN0YWdlIFNuYXBzaG90IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogU2VyaWFsaXNhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RhZ2UncyBzdGF0ZSAoZm9yIGRlYnVnZ2luZyAvIHZpc3VhbGlzYXRpb24pLiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VTbmFwc2hvdCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXggKi9cbiAgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgc3RhZ2UgZG9lcyAoZnJvbSBidWlsZGVyKS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIg4oCUIHByZXNlbnQgd2hlbiB0aGlzIHN0YWdlIGlzIGEgc3ViZmxvdyBlbnRyeSBwb2ludC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBpc0RlY2lkZXI/OiBib29sZWFuO1xuICBpc0Zvcms/OiBib29sZWFuO1xuICAvKiogVXNlci1sZXZlbCB3cml0ZXMgbWFkZSBieSB0aGlzIHN0YWdlIChwcmUtbmFtZXNwYWNlIGtleXMg4oaSIHZhbHVlcykuXG4gICAqICBTaGFwZSBkZXBlbmRzIG9uIHtAbGluayBXcml0ZVRyYWNraW5nTW9kZX06IGNsb25lZCB2YWx1ZXMgdW5kZXIgYCdmdWxsJ2BcbiAgICogIChkZWZhdWx0KSwge0BsaW5rIFdyaXRlU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnQgdW5kZXJcbiAgICogIGAnb2ZmJ2AuIFJlZGFjdGVkIHdyaXRlcyBzaG93IGAnW1JFREFDVEVEXSdgIHJlZ2FyZGxlc3Mgb2YgbW9kZS4gKi9cbiAgc3RhZ2VXcml0ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFVzZXItbGV2ZWwgcmVhZHMgbWFkZSBieSB0aGlzIHN0YWdlIChwcmUtbmFtZXNwYWNlIGtleXMg4oaSIHZhbHVlcyBhdCByZWFkXG4gICAqICB0aW1lKS4gU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgUmVhZFRyYWNraW5nTW9kZX06IGNsb25lZCB2YWx1ZXMgdW5kZXJcbiAgICogIGAnZnVsbCdgIChkZWZhdWx0KSwge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfXMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudFxuICAgKiAgdW5kZXIgYCdvZmYnYC4gKi9cbiAgc3RhZ2VSZWFkcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBsb2dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbWV0cmljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2YWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZmxvd01lc3NhZ2VzPzogRmxvd01lc3NhZ2VbXTtcbiAgbmV4dD86IFN0YWdlU25hcHNob3Q7XG4gIGNoaWxkcmVuPzogU3RhZ2VTbmFwc2hvdFtdO1xufTtcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZyYW1lVHlwZXMudHMg4oCUIHRoZSB0eXBlcyBvZiB0aGUgZW5naW5lJ3MgZnJhbWUgKEw0KTogd2hhdCBvbmUgc3RhZ2UgaW5zaWRlIGEgcnVuIHJlcG9ydHMuXG4gKlxuICogSXRzIHNuYXBzaG90IChgU3RhZ2VTbmFwc2hvdGAsIG9uZSBub2RlIG9mIHRoZSBleGVjdXRpb24gdHJlZSksIGl0cyBmbG93IG1lc3NhZ2VzXG4gKiAoYEZsb3dNZXNzYWdlYCwgYEZsb3dDb250cm9sVHlwZWApIGFuZCB0aGUgdHdvIHJldGVudGlvbiBkaWFscyB0aGF0IHNoYXBlIHdoYXQgdGhlIHNuYXBzaG90XG4gKiBrZWVwcyAoYFJlYWRUcmFja2luZ01vZGVgLCBgV3JpdGVUcmFja2luZ01vZGVgLCBvdmVyIGBjYXB0dXJlL2AncyBgUmV0ZW50aW9uUG9saWN5YCkuIFRoZXkgbGl2ZWRcbiAqIGluIHRoZSByZWNvcmQncyBgdHlwZXMudHNgIHVudGlsIEM2OyB0aGUgcmVjb3JkIG5hbWVzIG5vdGhpbmcgb3V0c2lkZSBpdHNlbGYgbm93XG4gKiAoYFJFQ09SRF9GSUxFU2AsIHNjcmlwdHMvbGF5ZXJpbmcuY29uZmlnLmNqcyksIHNvIHRoZXkgc2l0IGJlc2lkZSB0aGUgZnJhbWUgdGhhdCB3cml0ZXMgdGhlbS5cbiAqXG4gKiBBIHJldHJpZWQgc3RhZ2UncyBub2RlIGFsc28gY2FycmllcyBpdHMgYXR0ZW1wdHMgKGBhdHRlbXB0c2AsIGBhdHRlbXB0U3VtbWFyeWAg4oCUIHRoZSBhdHRlbXB0IGxlYWYncyB0eXBlcywgTDApLlxuICpcbiAqIEEgYFN0YWdlU25hcHNob3RgIGlzIGFuIGBFeGVjdXRpb25UcmVlYCAoYHR5cGVzLnRzYCksIHRoZSBzaGFwZSB0aGUgcmVjb3JkJ3MgcmVhZGVycyB3YWxrOlxuICogYGNvbW1pdFN0b3BzYCwgYHRhZ1N0b3BzYCBhbmQgYGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWVgIHRha2Ugb25lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXR0ZW50aW9uIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBBdHRlbXB0U3VtbWFyeSwgTGF0ZVdyaXRlIH0gZnJvbSAnLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4uL2NhcHR1cmUvcG9saWNpZXMuanMnO1xuXG4vLyDilIDilIAgRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFR5cGVzIG9mIGNvbnRyb2wgZmxvdyBkZWNpc2lvbnMgY2FwdHVyZWQgYnkgdGhlIGV4ZWN1dGlvbiBlbmdpbmUuICovXG5leHBvcnQgdHlwZSBGbG93Q29udHJvbFR5cGUgPSAnbmV4dCcgfCAnYnJhbmNoJyB8ICdjaGlsZHJlbicgfCAnc2VsZWN0ZWQnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuXG4vKiogQSBzaW5nbGUgZmxvdyBjb250cm9sIG5hcnJhdGl2ZSBlbnRyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd01lc3NhZ2Uge1xuICB0eXBlOiBGbG93Q29udHJvbFR5cGU7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHRhcmdldFN0YWdlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgY291bnQ/OiBudW1iZXI7XG4gIGl0ZXJhdGlvbj86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUmVhZCAvIFdyaXRlIFRyYWNraW5nICgjMTQsICMxM2MtQSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8gVGhlIHBvbGljeSBmYW1pbHkgYW5kIG1hcmtlciBzaGFwZXMgYXJlIG93bmVkIGJ5IGBjYXB0dXJlL2AgKHNoYXJlZCB3aXRoXG4vLyB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgY2FwdHVyZSB0aWVyKS5cblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHJlYWRzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgLlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHJlYWQgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHRoaXMgaXNcbiAqICAgd2hhdCBzbmFwc2hvdCBjb25zdW1lcnMgKGxlbnMsIGFnZW50Zm9vdHByaW50KSBzZWUgdG9kYXkuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCByZWFkcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9ICh0eXBlICsgc2l6ZVxuICogICBwcm94eSArIHNob3J0IHByZXZpZXcpIGluc3RlYWQgb2YgdGhlIGNsb25lZCB2YWx1ZS4gTygxKS1pc2ggcGVyIHJlYWQg4oCUXG4gKiAgIG5vIHZhbHVlIGNsb25lLCBubyBzZXJpYWxpemF0aW9uIG9mIGxhcmdlIG9iamVjdHMuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHJlYWRzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VSZWFkc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBaZXJvIHBlci1yZWFkIGNvc3QuIFZhbHVlcyBhcmUgc3RpbGwgcmVhZGFibGUsIGFuZCB0aGVcbiAqICAgYFNjb3BlUmVjb3JkZXIub25SZWFkYCBldmVudCBzdGlsbCBmaXJlcyAoaXQgcGFzc2VzIHRoZSBsaXZlIHJlZmVyZW5jZSBhbmRcbiAqICAgbmV2ZXIgY2xvbmVkKSDigJQgc28gbmFycmF0aXZlIG91dHB1dCBpcyBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS4gVGhlIHBvbGljeVxuICogICBzY29wZXMgT05MWSB0aGUgc25hcHNob3QncyBgc3RhZ2VSZWFkc2AgcGF5bG9hZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS5cbiAqXG4gKiBBbGlhcyBvZiB0aGUgc2hhcmVkIHtAbGluayBSZXRlbnRpb25Qb2xpY3l9IGZhbWlseSAoIzEzYy1BKSDigJQga2VwdCBhcyB0aGVcbiAqIHNoaXBwZWQgcHVibGljIG5hbWUgZm9yIHRoZSByZWFkIGRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCB3cml0ZXMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgXG4gKiAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2Yge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9LlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyB3cml0ZSB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvci5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHdyaXRlcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfSBpbnN0ZWFkIG9mXG4gKiAgIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHdyaXRlcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlV3JpdGVzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFRoZSB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQgdG8gc2hhcmVkIHN0YXRlIGFuZCBzdGlsbFxuICogICBhcHBlYXIgaW4gdGhlIGNvbW1pdCBsb2cg4oCUIG9ubHkgdGhlIHBlci1zdGFnZSBzbmFwc2hvdCBib29ra2VlcGluZyAoYW5kXG4gKiAgIHRoZXJlZm9yZSB0aGUgY29tbWl0IG9ic2VydmVyJ3MgbXV0YXRpb25zIHBheWxvYWQpIGlzIGFmZmVjdGVkLiAoVGhlXG4gKiAgIGNvbW1pdCBsb2cncyBvd24gdmFsdWUgZW5jb2RpbmcgaGFzIGl0cyBvd24gbG9zc2xlc3MgZGlhbCDigJRcbiAqICAge0BsaW5rIENvbW1pdFZhbHVlc01vZGV9LCAjMTNjLUIuKVxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuIFNlZVxuICogYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucy53cml0ZVRyYWNraW5nYCBmb3IgdGhlIGZ1bGwgb2JzZXJ2YWJsZS1jb25zZXF1ZW5jZVxuICogY29udHJhY3QgKG9uQ29tbWl0IHBheWxvYWQsIHJlZGFjdGlvbiBwcmVjZWRlbmNlLCB3aGF0IGlzIE9VVCBvZiBzY29wZSkuXG4gKi9cbmV4cG9ydCB0eXBlIFdyaXRlVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vLyDilIDilIAgU3RhZ2UgU25hcHNob3Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBTZXJpYWxpc2FibGUgcmVwcmVzZW50YXRpb24gb2YgYSBzdGFnZSdzIHN0YXRlIChmb3IgZGVidWdnaW5nIC8gdmlzdWFsaXNhdGlvbikuICovXG5leHBvcnQgdHlwZSBTdGFnZVNuYXBzaG90ID0ge1xuICBpZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleCAqL1xuICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzIChmcm9tIGJ1aWxkZXIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgcHJlc2VudCB3aGVuIHRoaXMgc3RhZ2UgaXMgYSBzdWJmbG93IGVudHJ5IHBvaW50LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzRGVjaWRlcj86IGJvb2xlYW47XG4gIGlzRm9yaz86IGJvb2xlYW47XG4gIC8qKiBVc2VyLWxldmVsIHdyaXRlcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzKS5cbiAgICogIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFdyaXRlVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlciBgJ2Z1bGwnYFxuICAgKiAgKGRlZmF1bHQpLCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfXMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgYCdvZmYnYC4gUmVkYWN0ZWQgd3JpdGVzIHNob3cgYCdbUkVEQUNURURdJ2AgcmVnYXJkbGVzcyBvZiBtb2RlLiAqL1xuICBzdGFnZVdyaXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogVXNlci1sZXZlbCByZWFkcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzIGF0IHJlYWRcbiAgICogIHRpbWUpLiBTaGFwZSBkZXBlbmRzIG9uIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlclxuICAgKiAgYCdmdWxsJ2AgKGRlZmF1bHQpLCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50XG4gICAqICB1bmRlciBgJ29mZidgLiAqL1xuICBzdGFnZVJlYWRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxvZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtZXRyaWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmbG93TWVzc2FnZXM/OiBGbG93TWVzc2FnZVtdO1xuICAvKipcbiAgICogRXZlcnkgYXR0ZW1wdCBvZiB0aGlzIGV4ZWN1dGlvbiwgaW4gb3JkZXIg4oCUIHdoZW4gaXQgc3RhcnRlZCwgaG93IGxvbmcgaXQgdG9vaywgaG93IGl0IGVuZGVkLCBhbmQgdGhlXG4gICAqIHJldHJ5LW9yLXN0b3AgZGVjaXNpb24gdGhhdCBmb2xsb3dlZCAoYEF0dGVtcHRSZWNvcmRgKTogdGhlIHN0YWdlJ3Mgb3duIHVuZGVyIGl0cyByZXRyeSBwb2xpY3ksIGEgYHRpbWVvdXRNc2BcbiAgICogb3IgYSBydW4gZGVhZGxpbmUgKDEwLjEsIGBraW5kOiAnc3RhZ2UnYCksIGFuZCB0aG9zZSBvZiB0aGUgY2FsbHMgaXQgbWFkZSB0aHJvdWdoIGBzY29wZS4kY2FsbGAgYW5kIHRoZVxuICAgKiBvdXRzaWRlIGF0dGVtcHRzIGl0IHJlcG9ydGVkIHRocm91Z2ggYG9ic2VydmVkKClgIChQMiwgYGtpbmQ6ICdjYWxsJ2AgLyBgJ29ic2VydmVkJ2AsIHRoZSBmaXJzdCAxMDAwIOKAlFxuICAgKiBgU3RhZ2VDb250ZXh0IMK3IE1BWF9DQUxMX1JFQ09SRFNgKS4gQWJzZW50IHdoZW4gdGhlcmUgYXJlIG5vbmUuIFRoZSBjb21taXQgbG9nIG5ldmVyIGNhcnJpZXMgYXR0ZW1wdHM6IGFcbiAgICogcmV0cmllZCBzdGFnZSBpcyBzdGlsbCBPTkUgYnVuZGxlLlxuICAgKi9cbiAgYXR0ZW1wdHM/OiByZWFkb25seSBBdHRlbXB0UmVjb3JkW107XG4gIC8qKlxuICAgKiBDYWxsIGFuZCBvYnNlcnZlZCBhdHRlbXB0IHJlY29yZHMgdGhpcyBleGVjdXRpb24gbWFkZSBwYXN0IHRoZSBmaXJzdCAxMDAwIOKAlCBjb3VudGVkLCBub3Qga2VwdCAoZWFjaCBzdGlsbFxuICAgKiBmaXJlZCBgb25BdHRlbXB0YCkuIEFic2VudCB3aGVuIG5vbmUgd2VyZSBkcm9wcGVkLlxuICAgKi9cbiAgYXR0ZW1wdHNEcm9wcGVkPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHNlcmllcyBhdCBhIGdsYW5jZSDigJQgY291bnRzIHBlciBvdXRjb21lLCBhbmQgaG93IGl0IGVuZGVkLiBTdGFtcGVkIHdoZW4gdGhlIHNlcmllcyBlbmRzOiBhYnNlbnQgd2hpbGUgaXRcbiAgICogaXMgc3RpbGwgcnVubmluZyAoYSBzbmFwc2hvdCB0YWtlbiBtaWQtc3RhZ2UpIGFuZCB3aXRob3V0IGEgcG9saWN5LlxuICAgKi9cbiAgYXR0ZW1wdFN1bW1hcnk/OiBBdHRlbXB0U3VtbWFyeTtcbiAgLyoqXG4gICAqIFdyaXRlcyAoYW5kIGVtaXRzKSBhbiBhdHRlbXB0IHRyaWVkIEFGVEVSIGl0IGhhZCBlbmRlZCDigJQgdGltZWQgb3V0LCBhYm9ydGVkIG9yIGZhaWxlZCDigJQgaW4gdGhlIG9yZGVyIHRoZXkgY2FtZVxuICAgKiAoUDFiKS4gRWFjaCB3YXMgZHJvcHBlZCBhdCB0aGUgc2NvcGUsIHNvIG5vbmUgcmVhY2hlZCB0aGUgc3RhZ2UncyBidWZmZXIsIGl0cyBjb21taXQgb3IgYSByZWNvcmRlcjsgdGhpcyBpc1xuICAgKiB0aGUgcmVjb3JkIHRoYXQgdGhleSB3ZXJlIHRyaWVkIOKAlCB0aGUgZmlyc3QgMTAwIChgTUFYX0xBVEVfV1JJVEVTYCkuIEFuIGFiYW5kb25lZCBmdW5jdGlvbiBjYW4ga2VlcCBydW5uaW5nXG4gICAqIGFmdGVyIHRoZSBydW4gZW5kZWQsIHNvIHRoZSBsaXN0IGNhbiBncm93IGFmdGVyIGEgc25hcHNob3Qgd2FzIHRha2VuLiBOYW1lcyBvbmx5LCBuZXZlciB2YWx1ZXMuIEFic2VudCB3aGVuXG4gICAqIHRoZXJlIHdlcmUgbm9uZS5cbiAgICovXG4gIGxhdGVXcml0ZXM/OiByZWFkb25seSBMYXRlV3JpdGVbXTtcbiAgLyoqXG4gICAqIEZpeGVkLXJlYXNvbiBtYXJrcyBjb2xsZWN0ZWQgYXMgdGhpcyBleGVjdXRpb24gcnVucy4gQWJzZW50IHdoZW4gbm8gZmFjdCBuZWVkcyBhdHRlbnRpb24uXG4gICAqIEF0dGVtcHQgZXZpZGVuY2UgdXNlcyBjYW5vbmljYWwgRm9vdHRyYWNlIGF0dGVtcHQgSURzLiBTdW1tYXJ5LW9ubHkgYW5kIHN0YWdlLWVycm9yIHByb29mIHJlc29sdmVzIHdpdGhpbiBUSElTIG5vZGVcbiAgICogdGhyb3VnaCBhdHRlbXB0U3VtbWFyeSwgZXJyb3JzOnN0YWdlRXhlY3V0aW9uRXJyb3Igb3IgYXR0ZW1wdHNEcm9wcGVkLiBRdWFsaXR5IG1hcmtzIGFyZSByZWFkLXRpbWUgcmVjb3JkZXIgd29yay5cbiAgICogTWFya3MgcmV0YWluIG5vIGVycm9yIHRleHQsIHZhbHVlcywgdGFyZ2V0cyBvciBpZGVtcG90ZW5jeSBrZXlzOyBvbWl0dGVkIHByb29mIGlzIGRpc2Nsb3NlZCBhcyBub3QtY29sbGVjdGVkLlxuICAgKi9cbiAgYXR0ZW50aW9uPzogcmVhZG9ubHkgQXR0ZW50aW9uW107XG4gIG5leHQ/OiBTdGFnZVNuYXBzaG90O1xuICBjaGlsZHJlbj86IFN0YWdlU25hcHNob3RbXTtcbn07XG4iXX0=