@logixjs/sandbox 0.0.1 → 0.0.2

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 (248) hide show
  1. package/LICENSE +201 -0
  2. package/package.json +3 -1
  3. package/public/sandbox/chunks/chunk-2AUQRESB.js +1114 -0
  4. package/public/sandbox/chunks/chunk-2F72LQKW.js +194 -0
  5. package/public/sandbox/chunks/chunk-2PYDGDD3.js +4071 -0
  6. package/public/sandbox/chunks/chunk-2UGKSXDZ.js +16 -0
  7. package/public/sandbox/chunks/chunk-2XVE7F26.js +153 -0
  8. package/public/sandbox/chunks/chunk-3A7TFNZN.js +219 -0
  9. package/public/sandbox/chunks/chunk-3BHC6JAV.js +1070 -0
  10. package/public/sandbox/chunks/chunk-3U4CAKCX.js +61 -0
  11. package/public/sandbox/chunks/chunk-3VU3JLZO.js +272 -0
  12. package/public/sandbox/chunks/chunk-4CPONKWY.js +1170 -0
  13. package/public/sandbox/chunks/chunk-4GMUQTWH.js +850 -0
  14. package/public/sandbox/chunks/chunk-4KIYG5E4.js +749 -0
  15. package/public/sandbox/chunks/chunk-4MY35XR3.js +175 -0
  16. package/public/sandbox/chunks/chunk-5DNHJMHA.js +69 -0
  17. package/public/sandbox/chunks/chunk-5EC4S7X6.js +42 -0
  18. package/public/sandbox/chunks/chunk-5FB7QFSH.js +227 -0
  19. package/public/sandbox/chunks/chunk-5GEYCJW2.js +206 -0
  20. package/public/sandbox/chunks/chunk-5PT7Q5SS.js +373 -0
  21. package/public/sandbox/chunks/chunk-5WN5IGKA.js +166 -0
  22. package/public/sandbox/chunks/chunk-5XOBKSOT.js +213 -0
  23. package/public/sandbox/chunks/chunk-67RVISUC.js +313 -0
  24. package/public/sandbox/chunks/chunk-6ELJEKZS.js +12 -0
  25. package/public/sandbox/chunks/chunk-6FKWRVP4.js +85 -0
  26. package/public/sandbox/chunks/chunk-6JRP52YT.js +34 -0
  27. package/public/sandbox/chunks/chunk-6JYAC3G6.js +42 -0
  28. package/public/sandbox/chunks/chunk-6TUOP63Q.js +86 -0
  29. package/public/sandbox/chunks/{chunk-A6JFUNQQ.js → chunk-74C5VW7Z.js} +2 -2
  30. package/public/sandbox/chunks/chunk-75DQFC5M.js +16 -0
  31. package/public/sandbox/chunks/{chunk-UCFEP3BH.js → chunk-7GPAF2UK.js} +1 -1
  32. package/public/sandbox/chunks/chunk-7KQFTS2Y.js +135 -0
  33. package/public/sandbox/chunks/chunk-7POKWYE3.js +112 -0
  34. package/public/sandbox/chunks/chunk-7VUEF5F3.js +395 -0
  35. package/public/sandbox/chunks/chunk-7W5APZS2.js +77 -0
  36. package/public/sandbox/chunks/chunk-A6OFCXDQ.js +397 -0
  37. package/public/sandbox/chunks/chunk-A7HLOSO6.js +216 -0
  38. package/public/sandbox/chunks/chunk-AGF4RRCB.js +408 -0
  39. package/public/sandbox/chunks/chunk-ASJSJAAL.js +122 -0
  40. package/public/sandbox/chunks/chunk-ASVMK364.js +283 -0
  41. package/public/sandbox/chunks/chunk-AUDTI2BQ.js +895 -0
  42. package/public/sandbox/chunks/chunk-B2SZTA3M.js +16 -0
  43. package/public/sandbox/chunks/chunk-B6YS2UMV.js +372 -0
  44. package/public/sandbox/chunks/chunk-BCEO3MGD.js +244 -0
  45. package/public/sandbox/chunks/chunk-BCOO65D4.js +373 -0
  46. package/public/sandbox/chunks/chunk-BJOWSSEL.js +38 -0
  47. package/public/sandbox/chunks/chunk-BS2WBFW4.js +373 -0
  48. package/public/sandbox/chunks/chunk-BUVHG3NJ.js +439 -0
  49. package/public/sandbox/chunks/chunk-BVE33AN6.js +42 -0
  50. package/public/sandbox/chunks/chunk-BWTGJZVP.js +19 -0
  51. package/public/sandbox/chunks/chunk-BXD7GZC3.js +1025 -0
  52. package/public/sandbox/chunks/chunk-BZH4EUUD.js +164 -0
  53. package/public/sandbox/chunks/{chunk-HFV5GJPK.js → chunk-C2MYMMO4.js} +3 -3
  54. package/public/sandbox/chunks/chunk-CRE4NJJ6.js +271 -0
  55. package/public/sandbox/chunks/chunk-CVZPRIDB.js +706 -0
  56. package/public/sandbox/chunks/chunk-CWOXD5NG.js +991 -0
  57. package/public/sandbox/chunks/chunk-D6DOC3BJ.js +373 -0
  58. package/public/sandbox/chunks/chunk-DEPSGFSY.js +1698 -0
  59. package/public/sandbox/chunks/chunk-DM7C5NP5.js +819 -0
  60. package/public/sandbox/chunks/chunk-DN33LMOF.js +1112 -0
  61. package/public/sandbox/chunks/{chunk-S46P7MC6.js → chunk-DT7YIIWE.js} +2 -2
  62. package/public/sandbox/chunks/chunk-DVB5WRCI.js +260 -0
  63. package/public/sandbox/chunks/{chunk-TOHCFMQS.js → chunk-E3EVW7NR.js} +11 -18
  64. package/public/sandbox/chunks/chunk-E5BV567Q.js +417 -0
  65. package/public/sandbox/chunks/chunk-E7BIWMQQ.js +203 -0
  66. package/public/sandbox/chunks/chunk-EAKGPSOQ.js +83 -0
  67. package/public/sandbox/chunks/chunk-EGUYL2ER.js +75 -0
  68. package/public/sandbox/chunks/chunk-EP5GQYZ5.js +85 -0
  69. package/public/sandbox/chunks/chunk-ET6CJEHC.js +221 -0
  70. package/public/sandbox/chunks/chunk-EU67YZHZ.js +1070 -0
  71. package/public/sandbox/chunks/{chunk-PTSJJANP.js → chunk-EYNDQLSB.js} +1 -1
  72. package/public/sandbox/chunks/{chunk-CEGSWZ5S.js → chunk-EZTMVCJF.js} +1 -1
  73. package/public/sandbox/chunks/chunk-F5CLVIS6.js +907 -0
  74. package/public/sandbox/chunks/chunk-F743SKYD.js +85 -0
  75. package/public/sandbox/chunks/chunk-FEGFZ5OX.js +86 -0
  76. package/public/sandbox/chunks/chunk-FG5B7ZX3.js +373 -0
  77. package/public/sandbox/chunks/chunk-FKZPYMDG.js +373 -0
  78. package/public/sandbox/chunks/chunk-FNLXHWIU.js +220 -0
  79. package/public/sandbox/chunks/chunk-FQRUTYAD.js +1991 -0
  80. package/public/sandbox/chunks/{chunk-VLYP4WUS.js → chunk-FY5A73NK.js} +5 -5
  81. package/public/sandbox/chunks/chunk-G7FAOG3O.js +221 -0
  82. package/public/sandbox/chunks/chunk-GFXHUC7Y.js +73 -0
  83. package/public/sandbox/chunks/chunk-GIPXUIZQ.js +534 -0
  84. package/public/sandbox/chunks/chunk-GP37MEGJ.js +52 -0
  85. package/public/sandbox/chunks/chunk-GXL5QCMF.js +4511 -0
  86. package/public/sandbox/chunks/chunk-GZ2NSE6A.js +177 -0
  87. package/public/sandbox/chunks/chunk-GZATW4YD.js +69 -0
  88. package/public/sandbox/chunks/chunk-H4EBXROQ.js +166 -0
  89. package/public/sandbox/chunks/chunk-HETCPK6Z.js +153 -0
  90. package/public/sandbox/chunks/chunk-HGUFQ2QC.js +4431 -0
  91. package/public/sandbox/chunks/chunk-HGV3VNH3.js +255 -0
  92. package/public/sandbox/chunks/chunk-HIJ67QWR.js +5397 -0
  93. package/public/sandbox/chunks/chunk-IDHERBKW.js +1114 -0
  94. package/public/sandbox/chunks/chunk-IDTK4FIY.js +102 -0
  95. package/public/sandbox/chunks/chunk-ILFVY7H5.js +164 -0
  96. package/public/sandbox/chunks/chunk-ISGSRYGO.js +57 -0
  97. package/public/sandbox/chunks/chunk-J45VPU24.js +408 -0
  98. package/public/sandbox/chunks/chunk-JAUIM3O5.js +42 -0
  99. package/public/sandbox/chunks/chunk-JB7OQEM6.js +373 -0
  100. package/public/sandbox/chunks/chunk-JCKW6NHD.js +15 -0
  101. package/public/sandbox/chunks/chunk-JMA7GY7Z.js +221 -0
  102. package/public/sandbox/chunks/chunk-JY46J6IL.js +836 -0
  103. package/public/sandbox/chunks/{chunk-X72PZOFA.js → chunk-K2MQ66O7.js} +1 -1
  104. package/public/sandbox/chunks/chunk-KA7PZA6F.js +464 -0
  105. package/public/sandbox/chunks/chunk-KDEQTUID.js +102 -0
  106. package/public/sandbox/chunks/chunk-KDJR27JV.js +1696 -0
  107. package/public/sandbox/chunks/chunk-KFE3JO6N.js +77 -0
  108. package/public/sandbox/chunks/chunk-KLDSYWT5.js +536 -0
  109. package/public/sandbox/chunks/chunk-KQWWFYBF.js +203 -0
  110. package/public/sandbox/chunks/chunk-KTFZSXOW.js +6473 -0
  111. package/public/sandbox/chunks/chunk-KXVIC55U.js +108 -0
  112. package/public/sandbox/chunks/{chunk-HNEDTEGQ.js → chunk-L4PNO2H6.js} +1 -1
  113. package/public/sandbox/chunks/{chunk-WE4STGO2.js → chunk-L4ZNW5DI.js} +2 -2
  114. package/public/sandbox/chunks/chunk-LBUINGZ4.js +836 -0
  115. package/public/sandbox/chunks/chunk-LIYPPU6I.js +112 -0
  116. package/public/sandbox/chunks/chunk-LJHTOJXW.js +221 -0
  117. package/public/sandbox/chunks/{chunk-BWSNPKO5.js → chunk-LQL23SWJ.js} +2 -2
  118. package/public/sandbox/chunks/chunk-LTFCYZQ6.js +46 -0
  119. package/public/sandbox/chunks/chunk-LTWLVCKQ.js +166 -0
  120. package/public/sandbox/chunks/chunk-LWI7BXFN.js +395 -0
  121. package/public/sandbox/chunks/chunk-LYBBX6WM.js +225 -0
  122. package/public/sandbox/chunks/chunk-MXE7HIBM.js +474 -0
  123. package/public/sandbox/chunks/chunk-MYBDYNK4.js +6004 -0
  124. package/public/sandbox/chunks/chunk-NC2MIWZX.js +732 -0
  125. package/public/sandbox/chunks/chunk-NE447XAF.js +597 -0
  126. package/public/sandbox/chunks/chunk-NEAYV5C2.js +255 -0
  127. package/public/sandbox/chunks/chunk-NMGFJZ4I.js +26 -0
  128. package/public/sandbox/chunks/chunk-NWCJJZNQ.js +71 -0
  129. package/public/sandbox/chunks/chunk-O57OZBDR.js +214 -0
  130. package/public/sandbox/chunks/chunk-OJJT664Q.js +731 -0
  131. package/public/sandbox/chunks/chunk-OKTBUTCH.js +1175 -0
  132. package/public/sandbox/chunks/chunk-OQ4SYV5D.js +534 -0
  133. package/public/sandbox/chunks/chunk-OTVVIHJD.js +219 -0
  134. package/public/sandbox/chunks/chunk-OWTMSCF7.js +1052 -0
  135. package/public/sandbox/chunks/chunk-P5ZQNFC3.js +122 -0
  136. package/public/sandbox/chunks/chunk-PBPT2U2N.js +1698 -0
  137. package/public/sandbox/chunks/chunk-PHBJLCP3.js +836 -0
  138. package/public/sandbox/chunks/chunk-PHV4HYHB.js +397 -0
  139. package/public/sandbox/chunks/chunk-PIXQ6SOX.js +4071 -0
  140. package/public/sandbox/chunks/chunk-PKJL6YLK.js +73 -0
  141. package/public/sandbox/chunks/chunk-PKPOITIU.js +221 -0
  142. package/public/sandbox/chunks/{chunk-NQW73ACJ.js → chunk-PMXBOYQI.js} +1 -1
  143. package/public/sandbox/chunks/chunk-PQLZD7NR.js +836 -0
  144. package/public/sandbox/chunks/chunk-QEESVOZU.js +16 -0
  145. package/public/sandbox/chunks/chunk-QGIM3FQK.js +159 -0
  146. package/public/sandbox/chunks/chunk-QL5JNEDO.js +69 -0
  147. package/public/sandbox/chunks/chunk-QQOZ3RMH.js +867 -0
  148. package/public/sandbox/chunks/chunk-QUMEVT2F.js +194 -0
  149. package/public/sandbox/chunks/chunk-QVZBXYVY.js +102 -0
  150. package/public/sandbox/chunks/chunk-R5HQS6RB.js +135 -0
  151. package/public/sandbox/chunks/chunk-R75Q2CTT.js +900 -0
  152. package/public/sandbox/chunks/chunk-RBB6SHW2.js +253 -0
  153. package/public/sandbox/chunks/chunk-RDHNRWQP.js +383 -0
  154. package/public/sandbox/chunks/chunk-RIWOEI3T.js +1101 -0
  155. package/public/sandbox/chunks/chunk-RS5FFPUV.js +103 -0
  156. package/public/sandbox/chunks/chunk-RYSSJBGX.js +203 -0
  157. package/public/sandbox/chunks/chunk-S3KBAE5Z.js +1114 -0
  158. package/public/sandbox/chunks/chunk-S6ZZHV6G.js +244 -0
  159. package/public/sandbox/chunks/chunk-SFXJ24HY.js +499 -0
  160. package/public/sandbox/chunks/chunk-SH7TP5CJ.js +1109 -0
  161. package/public/sandbox/chunks/chunk-SI5OKFFY.js +317 -0
  162. package/public/sandbox/chunks/chunk-SIXNQNIR.js +86 -0
  163. package/public/sandbox/chunks/chunk-ST353BOX.js +42 -0
  164. package/public/sandbox/chunks/chunk-SYEHKMLP.js +1140 -0
  165. package/public/sandbox/chunks/chunk-SZ4KQUJU.js +69 -0
  166. package/public/sandbox/chunks/{chunk-5SOP6EKV.js → chunk-SZI65PSP.js} +5 -10
  167. package/public/sandbox/chunks/chunk-T7RLTSMX.js +78 -0
  168. package/public/sandbox/chunks/chunk-TJ2RLUTW.js +57 -0
  169. package/public/sandbox/chunks/chunk-TJB73XPN.js +4071 -0
  170. package/public/sandbox/chunks/chunk-TXJCYO56.js +4046 -0
  171. package/public/sandbox/chunks/chunk-U5J3LCYI.js +731 -0
  172. package/public/sandbox/chunks/chunk-UABFN3NH.js +208 -0
  173. package/public/sandbox/chunks/chunk-UBMUY7WO.js +13 -0
  174. package/public/sandbox/chunks/chunk-UC27CE32.js +69 -0
  175. package/public/sandbox/chunks/chunk-UJGVDFZN.js +147 -0
  176. package/public/sandbox/chunks/chunk-UNVLTK4N.js +122 -0
  177. package/public/sandbox/chunks/chunk-UQKQ6V3V.js +208 -0
  178. package/public/sandbox/chunks/chunk-UZZBHWIO.js +703 -0
  179. package/public/sandbox/chunks/chunk-VKZIJERL.js +1114 -0
  180. package/public/sandbox/chunks/chunk-VQQEAGID.js +372 -0
  181. package/public/sandbox/chunks/{chunk-3LX3KIQQ.js → chunk-W365QUZ5.js} +3 -5
  182. package/public/sandbox/chunks/chunk-WJY2LSWG.js +1052 -0
  183. package/public/sandbox/chunks/chunk-WNOBN3DX.js +391 -0
  184. package/public/sandbox/chunks/chunk-X2Z5VYG3.js +245 -0
  185. package/public/sandbox/chunks/chunk-X74KU74D.js +959 -0
  186. package/public/sandbox/chunks/chunk-XE7ULSGQ.js +46 -0
  187. package/public/sandbox/chunks/chunk-XRXUJZ3X.js +431 -0
  188. package/public/sandbox/chunks/chunk-XWHIN7CC.js +85 -0
  189. package/public/sandbox/chunks/chunk-Y2TVGGVL.js +527 -0
  190. package/public/sandbox/chunks/chunk-YMVMZA3U.js +1395 -0
  191. package/public/sandbox/chunks/chunk-YOBLFWDV.js +431 -0
  192. package/public/sandbox/chunks/chunk-YR2RFEZA.js +11 -0
  193. package/public/sandbox/chunks/chunk-YTD6A35P.js +836 -0
  194. package/public/sandbox/chunks/chunk-Z5L7EZXS.js +81 -0
  195. package/public/sandbox/chunks/chunk-Z65I5ET2.js +108 -0
  196. package/public/sandbox/chunks/chunk-Z6LV34RO.js +390 -0
  197. package/public/sandbox/chunks/chunk-ZAKUP6QG.js +1634 -0
  198. package/public/sandbox/chunks/chunk-ZHNYE2YH.js +731 -0
  199. package/public/sandbox/chunks/chunk-ZHQX3B3Y.js +867 -0
  200. package/public/sandbox/chunks/chunk-ZIXDFRHJ.js +731 -0
  201. package/public/sandbox/chunks/chunk-ZPZ2MZ4D.js +528 -0
  202. package/public/sandbox/chunks/chunk-ZQD6NZXB.js +373 -0
  203. package/public/sandbox/chunks/chunk-ZVVBP7ON.js +16 -0
  204. package/public/sandbox/chunks/chunk-ZWE3P6X2.js +11 -0
  205. package/public/sandbox/logix-core/Bound.js +14 -14
  206. package/public/sandbox/logix-core/Debug.js +12 -10
  207. package/public/sandbox/logix-core/EffectOp.js +3 -4
  208. package/public/sandbox/logix-core/Env.js +5 -2
  209. package/public/sandbox/logix-core/ExternalStore.js +239 -0
  210. package/public/sandbox/logix-core/Flow.js +7 -8
  211. package/public/sandbox/logix-core/Kernel.js +7 -4
  212. package/public/sandbox/logix-core/Link.js +33 -25
  213. package/public/sandbox/logix-core/Middleware.js +13 -11
  214. package/public/sandbox/logix-core/Module.js +93 -30
  215. package/public/sandbox/logix-core/ModuleTag.js +28 -25
  216. package/public/sandbox/logix-core/Observability.js +21 -19
  217. package/public/sandbox/logix-core/Process.js +27 -22
  218. package/public/sandbox/logix-core/ReadQuery.js +7 -11
  219. package/public/sandbox/logix-core/Reflection.js +173 -53
  220. package/public/sandbox/logix-core/Resource.js +6 -3
  221. package/public/sandbox/logix-core/Root.js +7 -3
  222. package/public/sandbox/logix-core/Runtime.js +54 -40
  223. package/public/sandbox/logix-core/ScopeRegistry.js +6 -3
  224. package/public/sandbox/logix-core/StateTrait.js +17 -14
  225. package/public/sandbox/logix-core/TraitLifecycle.js +8 -8
  226. package/public/sandbox/logix-core/Workflow.js +332 -0
  227. package/public/sandbox/logix-core.js +11133 -6622
  228. package/public/sandbox/logix-core.manifest.json +4 -2
  229. package/public/sandbox/worker.js +3 -3
  230. package/public/sandbox/chunks/chunk-4LRLOTMA.js +0 -1698
  231. package/public/sandbox/chunks/chunk-CDLXJHXY.js +0 -120
  232. package/public/sandbox/chunks/chunk-CZRI7MHA.js +0 -46
  233. package/public/sandbox/chunks/chunk-EJDFUZ4B.js +0 -408
  234. package/public/sandbox/chunks/chunk-IP63FME6.js +0 -282
  235. package/public/sandbox/chunks/chunk-JIXTOQXJ.js +0 -1103
  236. package/public/sandbox/chunks/chunk-MPUSOFJ3.js +0 -1928
  237. package/public/sandbox/chunks/chunk-ON2LY6HJ.js +0 -135
  238. package/public/sandbox/chunks/chunk-POIBXAH5.js +0 -995
  239. package/public/sandbox/chunks/chunk-PQ652ULI.js +0 -6359
  240. package/public/sandbox/chunks/chunk-RJQ4PG2F.js +0 -77
  241. package/public/sandbox/chunks/chunk-S4EXG3OS.js +0 -533
  242. package/public/sandbox/chunks/chunk-SUXDGXVE.js +0 -390
  243. package/public/sandbox/chunks/chunk-TOQ6SJ6O.js +0 -244
  244. package/public/sandbox/chunks/chunk-UKYAF3NL.js +0 -1036
  245. package/public/sandbox/chunks/chunk-UMVN3AWO.js +0 -395
  246. package/public/sandbox/chunks/chunk-WFV5PPWJ.js +0 -194
  247. package/public/sandbox/chunks/chunk-YF6IO732.js +0 -206
  248. package/public/sandbox/chunks/chunk-ZUBABAAO.js +0 -86
@@ -0,0 +1,372 @@
1
+ // @logix/core subpath bundles for @logix/sandbox
2
+
3
+ import {
4
+ build,
5
+ install
6
+ } from "./chunk-R75Q2CTT.js";
7
+ import {
8
+ registerModuleProgram
9
+ } from "./chunk-5EC4S7X6.js";
10
+ import {
11
+ Module
12
+ } from "./chunk-UQKQ6V3V.js";
13
+ import {
14
+ attachLogicUnitMeta
15
+ } from "./chunk-MYBDYNK4.js";
16
+ import {
17
+ mutateWithPatchPaths,
18
+ mutateWithoutPatches
19
+ } from "./chunk-OWTMSCF7.js";
20
+ import {
21
+ getBoundInternals,
22
+ setModuleTraitsProgram
23
+ } from "./chunk-F743SKYD.js";
24
+ import {
25
+ currentDiagnosticsLevel,
26
+ record
27
+ } from "./chunk-X74KU74D.js";
28
+ import {
29
+ fnv1a32,
30
+ stableStringify
31
+ } from "./chunk-6JRP52YT.js";
32
+
33
+ // ../logix-core/src/ModuleTag.ts
34
+ import { Effect, FiberRef } from "../effect.js";
35
+
36
+ // ../logix-core/src/internal/runtime/core/ModuleTraits.ts
37
+ var ModuleTraitsConflictError = class extends Error {
38
+ constructor(moduleId, conflicts) {
39
+ super(
40
+ [
41
+ `[ModuleTraitsConflictError] Conflicting traitIds found (moduleId=${moduleId}).`,
42
+ ...conflicts.map(
43
+ (c) => c.kind === "duplicate_traitId" ? `- duplicate ${c.traitId}: ${c.sources.map((s) => `${s.originType}:${s.originId}`).join(", ")}` : c.kind === "missing_requires" ? `- missing requires for ${c.traitId}: ${(c.missing ?? []).join(", ")}; sources=${c.sources.map((s) => `${s.originType}:${s.originId}`).join(", ")}` : `- excludes violation for ${c.traitId}: present=${(c.present ?? []).join(", ")}; sources=${c.sources.map((s) => `${s.originType}:${s.originId}`).join(", ")}`
44
+ )
45
+ ].join("\n")
46
+ );
47
+ this.moduleId = moduleId;
48
+ this.conflicts = conflicts;
49
+ this._tag = "ModuleTraitsConflictError";
50
+ }
51
+ };
52
+ var toProvenanceKey = (p) => `${p.originType}:${p.originId}:${p.originIdKind}:${p.originLabel}:${p.path ?? ""}`;
53
+ var compareProvenance = (a, b) => {
54
+ const type = a.originType.localeCompare(b.originType);
55
+ if (type !== 0) return type;
56
+ const id = a.originId.localeCompare(b.originId);
57
+ if (id !== 0) return id;
58
+ const kind = a.originIdKind.localeCompare(b.originIdKind);
59
+ if (kind !== 0) return kind;
60
+ const label = a.originLabel.localeCompare(b.originLabel);
61
+ if (label !== 0) return label;
62
+ return String(a.path ?? "").localeCompare(String(b.path ?? ""));
63
+ };
64
+ var originTypeOrder = (t) => t === "module" ? 0 : 1;
65
+ var compareTraitIdByProvenance = (a, b) => {
66
+ const ta = originTypeOrder(a.provenance.originType) - originTypeOrder(b.provenance.originType);
67
+ if (ta !== 0) return ta;
68
+ const oa = a.provenance.originId.localeCompare(b.provenance.originId);
69
+ if (oa !== 0) return oa;
70
+ return a.traitId.localeCompare(b.traitId);
71
+ };
72
+ var extractStringArray = (value) => {
73
+ if (!Array.isArray(value)) return [];
74
+ const out = [];
75
+ for (const v of value) {
76
+ if (typeof v !== "string") continue;
77
+ const s = v.trim();
78
+ if (!s) continue;
79
+ out.push(s);
80
+ }
81
+ return out;
82
+ };
83
+ var getTraitRequires = (value) => {
84
+ if (!value || typeof value !== "object") return [];
85
+ const direct = extractStringArray(value.requires);
86
+ return direct;
87
+ };
88
+ var getTraitExcludes = (value) => {
89
+ if (!value || typeof value !== "object") return [];
90
+ const direct = extractStringArray(value.excludes);
91
+ return direct;
92
+ };
93
+ var getTraitName = (traitId, value) => {
94
+ if (value && typeof value === "object") {
95
+ const n = value.name;
96
+ if (typeof n === "string" && n.trim().length > 0) return n.trim();
97
+ }
98
+ return traitId;
99
+ };
100
+ var getTraitDescription = (value) => {
101
+ if (value && typeof value === "object") {
102
+ const d = value.description;
103
+ if (typeof d === "string" && d.trim().length > 0) return d.trim();
104
+ }
105
+ return void 0;
106
+ };
107
+ var finalizeTraitContributions = (args) => {
108
+ const traitById = /* @__PURE__ */ new Map();
109
+ const duplicateSources = /* @__PURE__ */ new Map();
110
+ const contributions = [...args.contributions].sort((a, b) => compareProvenance(a.provenance, b.provenance));
111
+ for (const c of contributions) {
112
+ const traits2 = c.traits;
113
+ if (!traits2 || typeof traits2 !== "object") continue;
114
+ for (const traitId of Object.keys(traits2).sort((a, b) => a.localeCompare(b))) {
115
+ const value = traits2[traitId];
116
+ if (value === void 0) continue;
117
+ const prev = traitById.get(traitId);
118
+ if (!prev) {
119
+ traitById.set(traitId, { value, provenance: c.provenance });
120
+ continue;
121
+ }
122
+ const sources = duplicateSources.get(traitId) ?? [prev.provenance];
123
+ sources.push(c.provenance);
124
+ duplicateSources.set(traitId, sources);
125
+ }
126
+ }
127
+ const conflicts = [];
128
+ const registerConflict = (conflict) => {
129
+ const unique = /* @__PURE__ */ new Map();
130
+ for (const s of conflict.sources) {
131
+ unique.set(toProvenanceKey(s), s);
132
+ }
133
+ conflicts.push({
134
+ ...conflict,
135
+ sources: Array.from(unique.values()).sort(compareProvenance)
136
+ });
137
+ };
138
+ for (const traitId of Array.from(duplicateSources.keys()).sort((a, b) => a.localeCompare(b))) {
139
+ registerConflict({
140
+ kind: "duplicate_traitId",
141
+ traitId,
142
+ sources: duplicateSources.get(traitId) ?? []
143
+ });
144
+ }
145
+ const merged = {};
146
+ const provenanceIndex = {};
147
+ const traits = [];
148
+ const entries = [];
149
+ for (const traitId of traitById.keys()) {
150
+ const entry = traitById.get(traitId);
151
+ if (!entry) continue;
152
+ entries.push({ traitId, value: entry.value, provenance: entry.provenance });
153
+ }
154
+ const ids = entries.slice().sort(compareTraitIdByProvenance).map((e) => e.traitId);
155
+ for (const traitId of ids) {
156
+ const entry = traitById.get(traitId);
157
+ if (!entry) continue;
158
+ merged[traitId] = entry.value;
159
+ provenanceIndex[traitId] = entry.provenance;
160
+ traits.push({
161
+ traitId,
162
+ name: getTraitName(traitId, entry.value),
163
+ description: getTraitDescription(entry.value)
164
+ });
165
+ }
166
+ const present = new Set(ids);
167
+ for (const traitId of ids) {
168
+ const entry = traitById.get(traitId);
169
+ if (!entry) continue;
170
+ const requires = getTraitRequires(entry.value);
171
+ if (requires.length > 0) {
172
+ const missing = requires.filter((r) => !present.has(r));
173
+ if (missing.length > 0) {
174
+ registerConflict({
175
+ kind: "missing_requires",
176
+ traitId,
177
+ missing: Array.from(new Set(missing)).sort((a, b) => a.localeCompare(b)),
178
+ sources: [entry.provenance]
179
+ });
180
+ }
181
+ }
182
+ const excludes = getTraitExcludes(entry.value);
183
+ if (excludes.length > 0) {
184
+ const presentExcluded = excludes.filter((e) => present.has(e));
185
+ if (presentExcluded.length > 0) {
186
+ const otherSources = [];
187
+ for (const otherId of presentExcluded) {
188
+ const other = traitById.get(otherId);
189
+ if (other) otherSources.push(other.provenance);
190
+ }
191
+ registerConflict({
192
+ kind: "excludes_violation",
193
+ traitId,
194
+ present: Array.from(new Set(presentExcluded)).sort((a, b) => a.localeCompare(b)),
195
+ sources: [entry.provenance, ...otherSources]
196
+ });
197
+ }
198
+ }
199
+ }
200
+ if (conflicts.length > 0) {
201
+ const kindOrder = {
202
+ duplicate_traitId: 0,
203
+ missing_requires: 1,
204
+ excludes_violation: 2
205
+ };
206
+ conflicts.sort((a, b) => {
207
+ const k = kindOrder[a.kind] - kindOrder[b.kind];
208
+ if (k !== 0) return k;
209
+ return a.traitId.localeCompare(b.traitId);
210
+ });
211
+ throw new ModuleTraitsConflictError(args.moduleId, conflicts);
212
+ }
213
+ const digestBase = {
214
+ moduleId: args.moduleId,
215
+ traits,
216
+ provenanceIndex
217
+ };
218
+ const digest = `mtraits:023:${fnv1a32(stableStringify(digestBase))}`;
219
+ return {
220
+ merged,
221
+ snapshot: {
222
+ moduleId: args.moduleId,
223
+ digest,
224
+ traits,
225
+ provenanceIndex
226
+ }
227
+ };
228
+ };
229
+
230
+ // ../logix-core/src/ModuleTag.ts
231
+ var Reducer = {
232
+ mutate: (mutator) => (state, action, sink) => {
233
+ if (!sink) {
234
+ return mutateWithoutPatches(state, (draft) => {
235
+ mutator(draft, action);
236
+ });
237
+ }
238
+ const { nextState, patchPaths } = mutateWithPatchPaths(state, (draft) => {
239
+ mutator(draft, action);
240
+ });
241
+ for (const path of patchPaths) {
242
+ sink(path);
243
+ }
244
+ return nextState;
245
+ }
246
+ };
247
+ var makeImpl = (id, def) => Module(id, def);
248
+ var make = (id, def) => {
249
+ const moduleTag = makeImpl(id, def);
250
+ const stateSchema = def.state;
251
+ const moduleTraitsSpec = def.traits;
252
+ const baseProgram = moduleTraitsSpec ? build(stateSchema, moduleTraitsSpec) : void 0;
253
+ if (baseProgram) {
254
+ setModuleTraitsProgram(moduleTag, baseProgram);
255
+ registerModuleProgram(id, baseProgram);
256
+ }
257
+ const makeModuleTraitsContributionLogic = (traits) => {
258
+ const logic = moduleTag.logic(($) => ({
259
+ setup: Effect.sync(() => {
260
+ if (!traits || typeof traits !== "object") return;
261
+ const internals = getBoundInternals($);
262
+ internals.traits.registerModuleTraitsContribution({
263
+ traits,
264
+ provenance: {
265
+ originType: "module",
266
+ originId: id,
267
+ originIdKind: "explicit",
268
+ originLabel: `module:${id}`
269
+ }
270
+ });
271
+ }),
272
+ run: Effect.void
273
+ }));
274
+ attachLogicUnitMeta(logic, {
275
+ id: "__logix_internal:traits:module_contrib",
276
+ kind: "internal",
277
+ name: "traits:module_contrib",
278
+ moduleId: id
279
+ });
280
+ return logic;
281
+ };
282
+ const makeFinalizeTraitsLogic = () => {
283
+ const logic = moduleTag.logic(($) => ({
284
+ setup: Effect.gen(function* () {
285
+ const internals = getBoundInternals($);
286
+ const diagnosticsLevel = yield* FiberRef.get(currentDiagnosticsLevel);
287
+ const contributions = internals.traits.getModuleTraitsContributions();
288
+ let merged;
289
+ let snapshot;
290
+ try {
291
+ ;
292
+ ({ merged, snapshot } = finalizeTraitContributions({
293
+ moduleId: id,
294
+ contributions
295
+ }));
296
+ } catch (cause) {
297
+ if (diagnosticsLevel !== "off" && cause && typeof cause === "object" && cause._tag === "ModuleTraitsConflictError") {
298
+ const conflicts = Array.isArray(cause.conflicts) ? cause.conflicts : [];
299
+ const traitIds = conflicts.map((c) => c && typeof c === "object" ? c.traitId : void 0).filter((t) => typeof t === "string" && t.length > 0).slice(0, 20);
300
+ const data = diagnosticsLevel === "full" ? {
301
+ conflictCount: conflicts.length,
302
+ conflicts
303
+ } : {
304
+ conflictCount: conflicts.length,
305
+ traitIds
306
+ };
307
+ yield* record({
308
+ type: "trace:module:traits:conflict",
309
+ moduleId: id,
310
+ instanceId: internals.instanceId,
311
+ data
312
+ });
313
+ }
314
+ throw cause;
315
+ }
316
+ internals.traits.setModuleTraitsSnapshot(snapshot);
317
+ internals.traits.freezeModuleTraits();
318
+ if (diagnosticsLevel !== "off") {
319
+ const data = diagnosticsLevel === "full" ? {
320
+ digest: snapshot.digest,
321
+ count: snapshot.traits.length,
322
+ traits: snapshot.traits,
323
+ provenanceIndex: snapshot.provenanceIndex
324
+ } : {
325
+ digest: snapshot.digest,
326
+ count: snapshot.traits.length
327
+ };
328
+ yield* record({
329
+ type: "trace:module:traits",
330
+ moduleId: id,
331
+ instanceId: internals.instanceId,
332
+ data
333
+ });
334
+ }
335
+ if (Object.keys(merged).length === 0) {
336
+ return;
337
+ }
338
+ const onlyModuleLevel = contributions.length === 1 && contributions[0]?.provenance?.originType === "module";
339
+ const program = onlyModuleLevel && baseProgram ? baseProgram : build(stateSchema, merged);
340
+ setModuleTraitsProgram(moduleTag, program);
341
+ registerModuleProgram(id, program);
342
+ yield* install($, program);
343
+ }),
344
+ run: Effect.void
345
+ }));
346
+ attachLogicUnitMeta(logic, {
347
+ id: "__logix_internal:traits:finalize",
348
+ kind: "internal",
349
+ name: "traits:finalize",
350
+ moduleId: id
351
+ });
352
+ return logic;
353
+ };
354
+ const originalImplement = moduleTag.implement;
355
+ moduleTag.implement = ((config) => {
356
+ const userLogics = config.logics ?? [];
357
+ const moduleLevel = def.traits ? [makeModuleTraitsContributionLogic(def.traits)] : [];
358
+ const finalize = makeFinalizeTraitsLogic();
359
+ const mergedLogics = [...moduleLevel, ...userLogics, finalize];
360
+ return originalImplement({
361
+ ...config,
362
+ logics: mergedLogics
363
+ });
364
+ });
365
+ return moduleTag;
366
+ };
367
+
368
+ export {
369
+ Reducer,
370
+ make
371
+ };
372
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvTW9kdWxlVGFnLnRzIiwgIi4uLy4uLy4uLy4uL2xvZ2l4LWNvcmUvc3JjL2ludGVybmFsL3J1bnRpbWUvY29yZS9Nb2R1bGVUcmFpdHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEVmZmVjdCwgRmliZXJSZWYsIExheWVyLCBTY2hlbWEgfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgKiBhcyBMb2dpYyBmcm9tICcuL0xvZ2ljLmpzJ1xuaW1wb3J0ICogYXMgTW9kdWxlRmFjdG9yeSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvTW9kdWxlRmFjdG9yeS5qcydcbmltcG9ydCB0eXBlIHsgRmllbGRQYXRoIH0gZnJvbSAnLi9pbnRlcm5hbC9maWVsZC1wYXRoLmpzJ1xuaW1wb3J0IHsgbXV0YXRlV2l0aG91dFBhdGNoZXMsIG11dGF0ZVdpdGhQYXRjaFBhdGhzIH0gZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvbXV0YXRpdmVQYXRjaGVzLmpzJ1xuaW1wb3J0IHsgZ2V0Qm91bmRJbnRlcm5hbHMsIHNldE1vZHVsZVRyYWl0c1Byb2dyYW0gfSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9ydW50aW1lSW50ZXJuYWxzQWNjZXNzb3IuanMnXG5pbXBvcnQgKiBhcyBEZWJ1ZyBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9EZWJ1Z1NpbmsuanMnXG5pbXBvcnQgKiBhcyBMb2dpY1VuaXRNZXRhIGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9jb3JlL0xvZ2ljVW5pdE1ldGEuanMnXG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbnNGcm9tTWFwLFxuICBBbnlNb2R1bGVTaGFwZSxcbiAgQW55U2NoZW1hLFxuICBCb3VuZEFwaSxcbiAgQWN0aW9uT2YsXG4gIE1vZHVsZUltcGwsXG4gIE1vZHVsZUxvZ2ljLFxuICBNb2R1bGVTaGFwZSxcbiAgTW9kdWxlUnVudGltZSxcbiAgTW9kdWxlVGFnLFxuICBNb2R1bGVIYW5kbGUsXG4gIE1vZHVsZUhhbmRsZVVuaW9uLFxuICBTdGF0ZUNoYW5nZVdpdGhNZXRhLFxuICBTdGF0ZUNvbW1pdE1ldGEsXG4gIFN0YXRlQ29tbWl0TW9kZSxcbiAgU3RhdGVDb21taXRQcmlvcml0eSxcbiAgUmVkdWNlcnNGcm9tTWFwLFxuICBTdGF0ZU9mLFxufSBmcm9tICcuL2ludGVybmFsL21vZHVsZS5qcydcbmltcG9ydCAqIGFzIFN0YXRlVHJhaXQgZnJvbSAnLi9TdGF0ZVRyYWl0LmpzJ1xuaW1wb3J0IHR5cGUgeyBTdGF0ZVRyYWl0UHJvZ3JhbSB9IGZyb20gJy4vU3RhdGVUcmFpdC5qcydcbmltcG9ydCAqIGFzIE1vZHVsZVRyYWl0c1JlZ2lzdHJ5IGZyb20gJy4vaW50ZXJuYWwvZGVidWcvTW9kdWxlVHJhaXRzUmVnaXN0cnkuanMnXG5pbXBvcnQgKiBhcyBNb2R1bGVUcmFpdHMgZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvTW9kdWxlVHJhaXRzLmpzJ1xuXG4vKipcbiAqIE1vZHVsZVRhZyAvIE1vZHVsZVJ1bnRpbWUgLyBNb2R1bGVJbXBsIFx1N0I0OVx1NjgzOFx1NUZDM1x1N0M3Qlx1NTc4Qlx1NUI5QVx1NEU0OVx1NzY4NFx1NTE2Q1x1NUYwMFx1NTFGQVx1NTNFM1x1MzAwMlxuICpcbiAqIFx1NEUwRSAuY29kZXgvc2tpbGxzL3Byb2plY3QtZ3VpZGUvcmVmZXJlbmNlcy9ydW50aW1lLWxvZ2l4L2xvZ2l4LWNvcmUvYXBpLzAyLW1vZHVsZS1hbmQtbG9naWMtYXBpLm1kIFx1NEZERFx1NjMwMVx1NUJGOVx1OUY1MFx1MzAwMlxuICogXHU1MTc3XHU0RjUzXHU3QzdCXHU1NzhCXHU1QjlBXHU0RTQ5XHU5NkM2XHU0RTJEXHU1NzI4IGludGVybmFsL21vZHVsZS50cyBcdTRFMkRcdUZGMENcdTY3MkNcdTZBMjFcdTU3NTdcdThEMUZcdThEMjNcdTdFQzRcdTU0MDhcdTVERTVcdTUzODJcdTVCOUVcdTczQjBcdTMwMDJcbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBbnlTY2hlbWEsXG4gIEFueU1vZHVsZVNoYXBlLFxuICBNb2R1bGVTaGFwZSxcbiAgTW9kdWxlTG9naWMsXG4gIE1vZHVsZUltcGwsXG4gIE1vZHVsZVJ1bnRpbWUsXG4gIE1vZHVsZVRhZyxcbiAgTW9kdWxlSGFuZGxlLFxuICBNb2R1bGVIYW5kbGVVbmlvbixcbiAgU3RhdGVPZixcbiAgQWN0aW9uc0Zyb21NYXAsXG4gIFJlZHVjZXJzRnJvbU1hcCxcbiAgQm91bmRBcGksXG4gIEFjdGlvbk9mLFxuICBTdGF0ZUNvbW1pdE1vZGUsXG4gIFN0YXRlQ29tbWl0UHJpb3JpdHksXG4gIFN0YXRlQ29tbWl0TWV0YSxcbiAgU3RhdGVDaGFuZ2VXaXRoTWV0YSxcbn0gZnJvbSAnLi9pbnRlcm5hbC9tb2R1bGUuanMnXG5cbi8qKlxuICogUmVkdWNlciBcdTVFMkVcdTUyQTlcdTVERTVcdTUxNzdcdUZGMUFcbiAqIC0gYFJlZHVjZXIubXV0YXRlYCBcdTYzRDBcdTRGOUJcdTRFMEUgYCQuc3RhdGUubXV0YXRlYCBcdTRFMDBcdTgxRjRcdTc2ODQgbXV0YXRpdmUgXHU5OENFXHU2ODNDXHU1MTk5XHU2Q0Q1XHVGRjFCXG4gKiAtIFx1OTAxQVx1OEZDN1x1NTE4NVx1OTBFOFx1NTdGQVx1NEU4RSBtdXRhdGl2ZSBcdTc2ODRcdTRFMERcdTUzRUZcdTUzRDhcdTY2RjRcdTY1QjBcdUZGMENcdTVDMDZcdTMwMENcdTVDMzFcdTU3MzBcdTRGRUVcdTY1MzkgZHJhZnRcdTMwMERcdTY2MjBcdTVDMDRcdTRFM0FcdTdFQUYgYChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZWAgXHU1MUZEXHU2NTcwXHUzMDAyXG4gKlxuICogXHU3NTI4XHU2Q0Q1XHU3OTNBXHU0RjhCXHVGRjFBXG4gKlxuICogICBjb25zdCBDb3VudGVyID0gTG9naXguTW9kdWxlVGFnLm1ha2UoXCJDb3VudGVyXCIsIHtcbiAqICAgICBzdGF0ZTogQ291bnRlclN0YXRlLFxuICogICAgIGFjdGlvbnM6IENvdW50ZXJBY3Rpb25zLFxuICogICAgIHJlZHVjZXJzOiB7XG4gKiAgICAgICBpbmM6IExvZ2l4Lk1vZHVsZVRhZy5SZWR1Y2VyLm11dGF0ZSgoZHJhZnQsIF9hY3Rpb24pID0+IHtcbiAqICAgICAgICAgZHJhZnQuY291bnQgKz0gMVxuICogICAgICAgfSksXG4gKiAgICAgfSxcbiAqICAgfSlcbiAqXG4gKiAgIHlpZWxkKiAkLnJlZHVjZXIoXG4gKiAgICAgXCJzZXRWYWx1ZVwiLFxuICogICAgIExvZ2l4Lk1vZHVsZVRhZy5SZWR1Y2VyLm11dGF0ZSgoZHJhZnQsIGFjdGlvbikgPT4ge1xuICogICAgICAgZHJhZnQudmFsdWUgPSBhY3Rpb24ucGF5bG9hZFxuICogICAgIH0pLFxuICogICApXG4gKi9cbmV4cG9ydCBjb25zdCBSZWR1Y2VyID0ge1xuICBtdXRhdGU6XG4gICAgPFMsIEE+KFxuICAgICAgbXV0YXRvcjogKGRyYWZ0OiBMb2dpYy5EcmFmdDxTPiwgYWN0aW9uOiBBKSA9PiB2b2lkLFxuICAgICk6ICgoc3RhdGU6IFMsIGFjdGlvbjogQSwgc2luaz86IChwYXRoOiBzdHJpbmcgfCBGaWVsZFBhdGgpID0+IHZvaWQpID0+IFMpID0+XG4gICAgKHN0YXRlLCBhY3Rpb24sIHNpbmspID0+IHtcbiAgICAgIGlmICghc2luaykge1xuICAgICAgICByZXR1cm4gbXV0YXRlV2l0aG91dFBhdGNoZXMoc3RhdGUgYXMgUywgKGRyYWZ0KSA9PiB7XG4gICAgICAgICAgbXV0YXRvcihkcmFmdCBhcyBMb2dpYy5EcmFmdDxTPiwgYWN0aW9uKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG5leHRTdGF0ZSwgcGF0Y2hQYXRocyB9ID0gbXV0YXRlV2l0aFBhdGNoUGF0aHMoc3RhdGUgYXMgUywgKGRyYWZ0KSA9PiB7XG4gICAgICAgIG11dGF0b3IoZHJhZnQgYXMgTG9naWMuRHJhZnQ8Uz4sIGFjdGlvbilcbiAgICAgIH0pXG5cbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBwYXRjaFBhdGhzKSB7XG4gICAgICAgIHNpbmsocGF0aClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5leHRTdGF0ZVxuICAgIH0sXG59XG5cbi8qKlxuICogXHU3QjgwXHU1MzE2XHU3Njg0IFNoYXBlIFx1NUI5QVx1NEU0OVx1NTJBOVx1NjI0Qlx1RkYwQ1x1NEUxM1x1NEUzQSBBY3Rpb24gTWFwIFx1OEJCRVx1OEJBMVx1MzAwMlxuICogQGV4YW1wbGUgdHlwZSBNeVNoYXBlID0gU2hhcGU8dHlwZW9mIE15U3RhdGUsIHR5cGVvZiBNeUFjdGlvbk1hcD5cbiAqL1xuZXhwb3J0IHR5cGUgU2hhcGU8UyBleHRlbmRzIEFueVNjaGVtYSwgTSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIEFueVNjaGVtYT4+ID0gTW9kdWxlU2hhcGU8XG4gIFMsXG4gIFNjaGVtYS5TY2hlbWE8QWN0aW9uc0Zyb21NYXA8TT4+LFxuICBNXG4+XG5cbmNvbnN0IG1ha2VJbXBsID0gPElkIGV4dGVuZHMgc3RyaW5nLCBTU2NoZW1hIGV4dGVuZHMgQW55U2NoZW1hLCBBTWFwIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgQW55U2NoZW1hPj4oXG4gIGlkOiBJZCxcbiAgZGVmOiB7XG4gICAgcmVhZG9ubHkgc3RhdGU6IFNTY2hlbWFcbiAgICByZWFkb25seSBhY3Rpb25zOiBBTWFwXG4gICAgcmVhZG9ubHkgcmVkdWNlcnM/OiBSZWR1Y2Vyc0Zyb21NYXA8U1NjaGVtYSwgQU1hcD5cbiAgfSxcbik6IE1vZHVsZVRhZzxJZCwgTW9kdWxlU2hhcGU8U1NjaGVtYSwgU2NoZW1hLlNjaGVtYTxBY3Rpb25zRnJvbU1hcDxBTWFwPj4sIEFNYXA+PiA9PlxuICBNb2R1bGVGYWN0b3J5Lk1vZHVsZShpZCwgZGVmKSBhcyBNb2R1bGVUYWc8SWQsIE1vZHVsZVNoYXBlPFNTY2hlbWEsIFNjaGVtYS5TY2hlbWE8QWN0aW9uc0Zyb21NYXA8QU1hcD4+LCBBTWFwPj5cblxuLyoqXG4gKiBNb2R1bGVUYWcubWFrZVx1RkYxQVxuICogLSBcdTRFRTVcdTdFRDlcdTVCOUEgaWQgXHU0RTBFIHN0YXRlL2FjdGlvbnMvcmVkdWNlcnMgXHU1QjlBXHU0RTQ5XHU0RTAwXHU0RTJBXHU5ODg2XHU1N0RGXHU2QTIxXHU1NzU3IFRhZ1x1RkYxQlxuICogLSBcdThGRDRcdTU2REVcdTc2ODQgTW9kdWxlVGFnIFx1NjVFMlx1NjYyRiBDb250ZXh0LlRhZ1x1RkYwQ1x1NTNDOFx1NjQzQVx1NUUyNiBTaGFwZSBcdTRFMEVcdTVERTVcdTUzODJcdTgwRkRcdTUyOUJcdTMwMDJcbiAqXG4gKiBcdThCRjRcdTY2MEVcdUZGMUEwMjIgXHU4RDc3XHU2NUU3IGBNb2R1bGVgXHVGRjA4VGFnIGlkZW50aXR5XHVGRjA5XHU2NkY0XHU1NDBEXHU0RTNBIGBNb2R1bGVUYWdgXHVGRjFCXHU5ODg2XHU1N0RGXHU1QjlBXHU0RTQ5XHU1QkY5XHU4QzYxXHU4QkY3XHU0RjdGXHU3NTI4IGBMb2dpeC5Nb2R1bGVgXHUzMDAyXG4gKi9cbmV4cG9ydCBjb25zdCBtYWtlID0gPElkIGV4dGVuZHMgc3RyaW5nLCBTU2NoZW1hIGV4dGVuZHMgQW55U2NoZW1hLCBBTWFwIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgQW55U2NoZW1hPj4oXG4gIGlkOiBJZCxcbiAgZGVmOiB7XG4gICAgcmVhZG9ubHkgc3RhdGU6IFNTY2hlbWFcbiAgICByZWFkb25seSBhY3Rpb25zOiBBTWFwXG4gICAgcmVhZG9ubHkgcmVkdWNlcnM/OiBSZWR1Y2Vyc0Zyb21NYXA8U1NjaGVtYSwgQU1hcD5cbiAgICAvKipcbiAgICAgKiB0cmFpdHNcdUZGMUFcbiAgICAgKiAtIFx1NzUyOFx1NEU4RVx1NjMwMlx1OEY3RCBTdGF0ZVRyYWl0U3BlY1x1RkYwOFx1OEJFNlx1ODlDMSBzcGVjcy8wMDAtbW9kdWxlLXRyYWl0cy1ydW50aW1lXHVGRjA5XHUzMDAyXG4gICAgICogLSBcdTVGNTNcdTUyNERcdTVCOUVcdTczQjBcdTRGMUFcdTU3MjggTW9kdWxlVGFnLm1ha2UgXHU5NjM2XHU2QkI1IGJ1aWxkIFByb2dyYW1cdUZGMENcdTVFNzZcdTU3MjggYE1vZHVsZVRhZy5pbXBsZW1lbnRgIFx1NkNFOFx1NTE2NVx1NEUwMFx1NkJCNSBzZXR1cC1vbmx5IExvZ2ljIFx1Njc2NVx1OEMwM1x1NzUyOCBgU3RhdGVUcmFpdC5pbnN0YWxsYFx1MzAwMlxuICAgICAqICAgXHVGRjA4XHU2Q0U4XHVGRjFBXHU4MkU1XHU0RjdGXHU3NTI4IGBNb2R1bGVUYWcubGl2ZWAgXHU3NkY0XHU1MUZBIExheWVyIFx1NEUxNFx1NUUwQ1x1NjcxQlx1NTQyRlx1NzUyOCB0cmFpdHMgXHU4ODRDXHU0RTNBXHVGRjBDXHU4QkY3XHU2NjNFXHU1RjBGXHU1NzI4IGxvZ2ljcyBcdTRFMkRcdThDMDNcdTc1MjggYFN0YXRlVHJhaXQuaW5zdGFsbGBcdUZGMENcdTYyMTZcdTY1MzlcdTc1MjggYE1vZHVsZVRhZy5pbXBsZW1lbnRgXHUzMDAyXHVGRjA5XG4gICAgICovXG4gICAgcmVhZG9ubHkgdHJhaXRzPzogdW5rbm93blxuICB9LFxuKTogTW9kdWxlVGFnPElkLCBNb2R1bGVTaGFwZTxTU2NoZW1hLCBTY2hlbWEuU2NoZW1hPEFjdGlvbnNGcm9tTWFwPEFNYXA+PiwgQU1hcD4+ID0+IHtcbiAgY29uc3QgbW9kdWxlVGFnID0gbWFrZUltcGwoaWQsIGRlZilcblxuICB0eXBlIFNoID0gTW9kdWxlU2hhcGU8U1NjaGVtYSwgU2NoZW1hLlNjaGVtYTxBY3Rpb25zRnJvbU1hcDxBTWFwPj4sIEFNYXA+XG5cbiAgY29uc3Qgc3RhdGVTY2hlbWEgPSBkZWYuc3RhdGUgYXMgU2NoZW1hLlNjaGVtYTxhbnksIGFueT5cbiAgY29uc3QgbW9kdWxlVHJhaXRzU3BlYyA9IGRlZi50cmFpdHMgYXMgU3RhdGVUcmFpdC5TdGF0ZVRyYWl0U3BlYzxhbnk+IHwgdW5kZWZpbmVkXG4gIGNvbnN0IGJhc2VQcm9ncmFtOiBTdGF0ZVRyYWl0UHJvZ3JhbTxhbnk+IHwgdW5kZWZpbmVkID0gbW9kdWxlVHJhaXRzU3BlY1xuICAgID8gU3RhdGVUcmFpdC5idWlsZChzdGF0ZVNjaGVtYSBhcyBhbnksIG1vZHVsZVRyYWl0c1NwZWMgYXMgYW55KVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKGJhc2VQcm9ncmFtKSB7XG4gICAgLy8gXHU0RjlCIFRyYWl0TGlmZWN5Y2xlL0RlYnVnL0RldnRvb2xzIFx1OEJGQlx1NTNENlx1RkYwOFx1NUI5QVx1NEU0OVx1NEZBN1x1OTY5MFx1ODVDRlx1NjlGRFx1NEY0RFx1RkYwOVx1MzAwMlxuICAgIHNldE1vZHVsZVRyYWl0c1Byb2dyYW0obW9kdWxlVGFnIGFzIGFueSwgYmFzZVByb2dyYW0pXG4gICAgTW9kdWxlVHJhaXRzUmVnaXN0cnkucmVnaXN0ZXJNb2R1bGVQcm9ncmFtKGlkLCBiYXNlUHJvZ3JhbSBhcyBTdGF0ZVRyYWl0UHJvZ3JhbTxhbnk+KVxuICB9XG5cbiAgLy8gMDIzXHVGRjFBdHJhaXRzIFx1NzY4NFx1MjAxQ1x1NThGMFx1NjYwRVx1NTE2NVx1NTNFMy9cdTU0MDhcdTVFNzZcdTUxNjVcdTUzRTNcdTIwMURcdTdFREZcdTRFMDBcdTY1MzZcdTY1NUJcdTUyMzAgc2V0dXAgXHU5NjM2XHU2QkI1XHVGRjFBXG4gIC8vIC0gbW9kdWxlLWxldmVsIHRyYWl0cyBcdTUxNDhcdTRGNUNcdTRFM0EgY29udHJpYnV0aW9uIFx1NkNFOFx1NTE4Q1x1RkYxQlxuICAvLyAtIGxvZ2ljLWxldmVsIFx1OTAxQVx1OEZDNyAkLnRyYWl0cy5kZWNsYXJlIFx1NkNFOFx1NTE4Q1x1RkYxQlxuICAvLyAtIFx1NjcwMFx1NTQwRVx1NEUwMFx1NkIyMVx1NjAyNyBmaW5hbGl6ZSBcdTIxOTIgZnJlZXplIFx1MjE5MiBidWlsZC9pbnN0YWxsXHUzMDAyXG5cbiAgY29uc3QgbWFrZU1vZHVsZVRyYWl0c0NvbnRyaWJ1dGlvbkxvZ2ljID0gKHRyYWl0czogdW5rbm93bik6IE1vZHVsZUxvZ2ljPFNoLCBuZXZlciwgbmV2ZXI+ID0+IHtcbiAgICBjb25zdCBsb2dpYyA9IG1vZHVsZVRhZy5sb2dpYygoJCkgPT4gKHtcbiAgICAgIHNldHVwOiBFZmZlY3Quc3luYygoKSA9PiB7XG4gICAgICAgIGlmICghdHJhaXRzIHx8IHR5cGVvZiB0cmFpdHMgIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICAgICAgLy8gbW9kdWxlLWxldmVsIHByb3ZlbmFuY2VcdUZGMUFcdTRFRTUgbW9kdWxlSWQgXHU0RjVDXHU0RTNBXHU3QTMzXHU1QjlBXHU5NTFBXHU3MEI5XG4gICAgICAgIC8vXHVGRjA4XHU1QkY5XHU5RjUwIDAyMyBkYXRhLW1vZGVsXHVGRjFBb3JpZ2luVHlwZT1tb2R1bGUsIG9yaWdpbklkPW1vZHVsZUlkXHVGRjA5XHUzMDAyXG4gICAgICAgIC8vIFx1NkNFOFx1NjEwRlx1RkYxQXRyYWl0c1NwZWMgXHU0RUNEXHU1OTBEXHU3NTI4IFN0YXRlVHJhaXRTcGVjIFx1N0VEM1x1Njc4NFx1RkYwQ1x1NEUwRFx1NUYxNVx1NTE2NVx1N0IyQ1x1NEU4Q1x1NTk1NyBJUlx1MzAwMlxuICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBnZXRCb3VuZEludGVybmFscygkIGFzIGFueSlcbiAgICAgICAgaW50ZXJuYWxzLnRyYWl0cy5yZWdpc3Rlck1vZHVsZVRyYWl0c0NvbnRyaWJ1dGlvbih7XG4gICAgICAgICAgdHJhaXRzLFxuICAgICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICAgIG9yaWdpblR5cGU6ICdtb2R1bGUnLFxuICAgICAgICAgICAgb3JpZ2luSWQ6IGlkLFxuICAgICAgICAgICAgb3JpZ2luSWRLaW5kOiAnZXhwbGljaXQnLFxuICAgICAgICAgICAgb3JpZ2luTGFiZWw6IGBtb2R1bGU6JHtpZH1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIHJ1bjogRWZmZWN0LnZvaWQsXG4gICAgfSkpIGFzIE1vZHVsZUxvZ2ljPFNoLCBuZXZlciwgbmV2ZXI+XG5cbiAgICBMb2dpY1VuaXRNZXRhLmF0dGFjaExvZ2ljVW5pdE1ldGEobG9naWMgYXMgYW55LCB7XG4gICAgICBpZDogJ19fbG9naXhfaW50ZXJuYWw6dHJhaXRzOm1vZHVsZV9jb250cmliJyxcbiAgICAgIGtpbmQ6ICdpbnRlcm5hbCcsXG4gICAgICBuYW1lOiAndHJhaXRzOm1vZHVsZV9jb250cmliJyxcbiAgICAgIG1vZHVsZUlkOiBpZCxcbiAgICB9KVxuICAgIHJldHVybiBsb2dpY1xuICB9XG5cbiAgY29uc3QgbWFrZUZpbmFsaXplVHJhaXRzTG9naWMgPSAoKTogTW9kdWxlTG9naWM8U2gsIG5ldmVyLCBuZXZlcj4gPT4ge1xuICAgIGNvbnN0IGxvZ2ljID0gbW9kdWxlVGFnLmxvZ2ljKCgkKSA9PiAoe1xuICAgICAgc2V0dXA6IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gZ2V0Qm91bmRJbnRlcm5hbHMoJCBhcyBhbnkpXG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNzTGV2ZWwgPSB5aWVsZCogRmliZXJSZWYuZ2V0KERlYnVnLmN1cnJlbnREaWFnbm9zdGljc0xldmVsKVxuXG4gICAgICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnMgPSBpbnRlcm5hbHMudHJhaXRzLmdldE1vZHVsZVRyYWl0c0NvbnRyaWJ1dGlvbnMoKVxuICAgICAgICBsZXQgbWVyZ2VkOiBNb2R1bGVUcmFpdHMuVHJhaXRTcGVjXG4gICAgICAgIGxldCBzbmFwc2hvdDogTW9kdWxlVHJhaXRzLk1vZHVsZVRyYWl0c1NuYXBzaG90XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICA7KHsgbWVyZ2VkLCBzbmFwc2hvdCB9ID0gTW9kdWxlVHJhaXRzLmZpbmFsaXplVHJhaXRDb250cmlidXRpb25zKHtcbiAgICAgICAgICAgIG1vZHVsZUlkOiBpZCxcbiAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnMsXG4gICAgICAgICAgfSkpXG4gICAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGlhZ25vc3RpY3NMZXZlbCAhPT0gJ29mZicgJiZcbiAgICAgICAgICAgIGNhdXNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY2F1c2UgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoY2F1c2UgYXMgYW55KS5fdGFnID09PSAnTW9kdWxlVHJhaXRzQ29uZmxpY3RFcnJvcidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZsaWN0cyA9IEFycmF5LmlzQXJyYXkoKGNhdXNlIGFzIGFueSkuY29uZmxpY3RzKVxuICAgICAgICAgICAgICA/ICgoY2F1c2UgYXMgYW55KS5jb25mbGljdHMgYXMgUmVhZG9ubHlBcnJheTx1bmtub3duPilcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgY29uc3QgdHJhaXRJZHMgPSBjb25mbGljdHNcbiAgICAgICAgICAgICAgLm1hcCgoYzogYW55KSA9PiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgPyAoYyBhcyBhbnkpLnRyYWl0SWQgOiB1bmRlZmluZWQpKVxuICAgICAgICAgICAgICAuZmlsdGVyKCh0KTogdCBpcyBzdHJpbmcgPT4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIDIwKVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhID1cbiAgICAgICAgICAgICAgZGlhZ25vc3RpY3NMZXZlbCA9PT0gJ2Z1bGwnXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0Q291bnQ6IGNvbmZsaWN0cy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0cyxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RDb3VudDogY29uZmxpY3RzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgdHJhaXRJZHMsXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHlpZWxkKiBEZWJ1Zy5yZWNvcmQoe1xuICAgICAgICAgICAgICB0eXBlOiAndHJhY2U6bW9kdWxlOnRyYWl0czpjb25mbGljdCcsXG4gICAgICAgICAgICAgIG1vZHVsZUlkOiBpZCxcbiAgICAgICAgICAgICAgaW5zdGFuY2VJZDogaW50ZXJuYWxzLmluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBjYXVzZVxuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJuYWxzLnRyYWl0cy5zZXRNb2R1bGVUcmFpdHNTbmFwc2hvdChzbmFwc2hvdClcbiAgICAgICAgaW50ZXJuYWxzLnRyYWl0cy5mcmVlemVNb2R1bGVUcmFpdHMoKVxuXG4gICAgICAgIGlmIChkaWFnbm9zdGljc0xldmVsICE9PSAnb2ZmJykge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPVxuICAgICAgICAgICAgZGlhZ25vc3RpY3NMZXZlbCA9PT0gJ2Z1bGwnXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgZGlnZXN0OiBzbmFwc2hvdC5kaWdlc3QsXG4gICAgICAgICAgICAgICAgICBjb3VudDogc25hcHNob3QudHJhaXRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIHRyYWl0czogc25hcHNob3QudHJhaXRzLFxuICAgICAgICAgICAgICAgICAgcHJvdmVuYW5jZUluZGV4OiBzbmFwc2hvdC5wcm92ZW5hbmNlSW5kZXgsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGRpZ2VzdDogc25hcHNob3QuZGlnZXN0LFxuICAgICAgICAgICAgICAgICAgY291bnQ6IHNuYXBzaG90LnRyYWl0cy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgeWllbGQqIERlYnVnLnJlY29yZCh7XG4gICAgICAgICAgICB0eXBlOiAndHJhY2U6bW9kdWxlOnRyYWl0cycsXG4gICAgICAgICAgICBtb2R1bGVJZDogaWQsXG4gICAgICAgICAgICBpbnN0YW5jZUlkOiBpbnRlcm5hbHMuaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMobWVyZ2VkKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9ubHlNb2R1bGVMZXZlbCA9IGNvbnRyaWJ1dGlvbnMubGVuZ3RoID09PSAxICYmIGNvbnRyaWJ1dGlvbnNbMF0/LnByb3ZlbmFuY2U/Lm9yaWdpblR5cGUgPT09ICdtb2R1bGUnXG5cbiAgICAgICAgLy8gXHU1N0ZBXHU0RThFXHU2NzAwXHU3RUM4XHU1NDA4XHU1RTc2XHU1NDBFXHU3Njg0IFNwZWMgXHU2Nzg0XHU5MDIwXHU0RTAwXHU2QjIxXHU2MDI3IFByb2dyYW1cdUZGMENcdTVFNzZcdTU3MjhcdTUyMURcdTU5Q0JcdTUzMTZcdTk2MzZcdTZCQjVcdTVCODlcdTg4QzVcdTMwMDJcbiAgICAgICAgLy8gLSBcdTgyRTVcdTUzRUFcdTY3MDkgbW9kdWxlLWxldmVsIGNvbnRyaWJ1dGlvblx1RkYwQ1x1NTIxOVx1NTkwRFx1NzUyOCBNb2R1bGVUYWcubWFrZSBcdTk2MzZcdTZCQjVcdTk4ODRcdTY3ODRcdTVFRkFcdTc2ODQgcHJvZ3JhbVx1RkYwOFx1NEZCRlx1NEU4RSBEZWJ1Zy9UcmFpdExpZmVjeWNsZVx1RkYwOVx1MzAwMlxuICAgICAgICBjb25zdCBwcm9ncmFtID1cbiAgICAgICAgICBvbmx5TW9kdWxlTGV2ZWwgJiYgYmFzZVByb2dyYW0gPyBiYXNlUHJvZ3JhbSA6IFN0YXRlVHJhaXQuYnVpbGQoc3RhdGVTY2hlbWEgYXMgYW55LCBtZXJnZWQgYXMgYW55KVxuXG4gICAgICAgIC8vIFx1NEY5QiBUcmFpdExpZmVjeWNsZS9EZWJ1Zy9EZXZ0b29scyBcdThCRkJcdTUzRDZcdUZGMDhcdTVCOUFcdTRFNDlcdTRGQTdcdTk2OTBcdTg1Q0ZcdTY5RkRcdTRGNERcdUZGMDlcdTMwMDJcbiAgICAgICAgc2V0TW9kdWxlVHJhaXRzUHJvZ3JhbShtb2R1bGVUYWcgYXMgYW55LCBwcm9ncmFtKVxuICAgICAgICBNb2R1bGVUcmFpdHNSZWdpc3RyeS5yZWdpc3Rlck1vZHVsZVByb2dyYW0oaWQsIHByb2dyYW0gYXMgU3RhdGVUcmFpdFByb2dyYW08YW55PilcblxuICAgICAgICB5aWVsZCogU3RhdGVUcmFpdC5pbnN0YWxsKCQgYXMgdW5rbm93biBhcyBCb3VuZEFwaTxhbnksIGFueT4sIHByb2dyYW0pXG4gICAgICB9KSxcbiAgICAgIHJ1bjogRWZmZWN0LnZvaWQsXG4gICAgfSkpIGFzIE1vZHVsZUxvZ2ljPFNoLCBuZXZlciwgbmV2ZXI+XG5cbiAgICBMb2dpY1VuaXRNZXRhLmF0dGFjaExvZ2ljVW5pdE1ldGEobG9naWMgYXMgYW55LCB7XG4gICAgICBpZDogJ19fbG9naXhfaW50ZXJuYWw6dHJhaXRzOmZpbmFsaXplJyxcbiAgICAgIGtpbmQ6ICdpbnRlcm5hbCcsXG4gICAgICBuYW1lOiAndHJhaXRzOmZpbmFsaXplJyxcbiAgICAgIG1vZHVsZUlkOiBpZCxcbiAgICB9KVxuXG4gICAgcmV0dXJuIGxvZ2ljXG4gIH1cblxuICAvLyBcdTUzMDVcdTg4QzUgaW1wbGVtZW50XHVGRjFBXHU1NzI4XHU1QjlFXHU3M0IwXHU1QzQyXHU2Q0U4XHU1MTY1XHVGRjA4MVx1RkYwOW1vZHVsZS1sZXZlbCBjb250cmlidXRpb24gbG9naWNcdUZGMDhcdTUzRUZcdTkwMDlcdUZGMDlcdUZGMDgyXHVGRjA5ZmluYWxpemUraW5zdGFsbCBsb2dpY1x1RkYwOFx1NUZDNVx1OTAwOVx1RkYwOVx1MzAwMlxuICBjb25zdCBvcmlnaW5hbEltcGxlbWVudCA9IG1vZHVsZVRhZy5pbXBsZW1lbnRcbiAgOyhtb2R1bGVUYWcgYXMgYW55KS5pbXBsZW1lbnQgPSAoPFIgPSBuZXZlcj4oY29uZmlnOiB7XG4gICAgaW5pdGlhbDogU3RhdGVPZjx0eXBlb2YgbW9kdWxlVGFnLnNoYXBlPlxuICAgIGxvZ2ljcz86IEFycmF5PE1vZHVsZUxvZ2ljPHR5cGVvZiBtb2R1bGVUYWcuc2hhcGUsIFIsIGFueT4+XG4gICAgaW1wb3J0cz86IFJlYWRvbmx5QXJyYXk8TGF5ZXIuTGF5ZXI8YW55LCBhbnksIGFueT4gfCBNb2R1bGVJbXBsPGFueSwgQW55TW9kdWxlU2hhcGUsIGFueT4+XG4gICAgcHJvY2Vzc2VzPzogUmVhZG9ubHlBcnJheTxFZmZlY3QuRWZmZWN0PHZvaWQsIGFueSwgYW55Pj5cbiAgfSkgPT4ge1xuICAgIGNvbnN0IHVzZXJMb2dpY3MgPSAoY29uZmlnLmxvZ2ljcyA/PyBbXSkgYXMgQXJyYXk8TW9kdWxlTG9naWM8dHlwZW9mIG1vZHVsZVRhZy5zaGFwZSwgUiwgYW55Pj5cblxuICAgIGNvbnN0IG1vZHVsZUxldmVsID0gZGVmLnRyYWl0cyA/IFttYWtlTW9kdWxlVHJhaXRzQ29udHJpYnV0aW9uTG9naWMoZGVmLnRyYWl0cykgYXMgYW55XSA6IFtdXG5cbiAgICBjb25zdCBmaW5hbGl6ZSA9IG1ha2VGaW5hbGl6ZVRyYWl0c0xvZ2ljKCkgYXMgTW9kdWxlTG9naWM8dHlwZW9mIG1vZHVsZVRhZy5zaGFwZSwgUiwgYW55PlxuXG4gICAgY29uc3QgbWVyZ2VkTG9naWNzID0gWy4uLm1vZHVsZUxldmVsLCAuLi51c2VyTG9naWNzLCBmaW5hbGl6ZV1cblxuICAgIHJldHVybiBvcmlnaW5hbEltcGxlbWVudDxSPih7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBsb2dpY3M6IG1lcmdlZExvZ2ljcyxcbiAgICB9KVxuICB9KSBhcyB0eXBlb2YgbW9kdWxlVGFnLmltcGxlbWVudFxuXG4gIHJldHVybiBtb2R1bGVUYWdcbn1cbiIsICJpbXBvcnQgeyBmbnYxYTMyLCBzdGFibGVTdHJpbmdpZnkgfSBmcm9tICcuLi8uLi9kaWdlc3QuanMnXG5cbmV4cG9ydCB0eXBlIFRyYWl0SWQgPSBzdHJpbmdcblxuZXhwb3J0IHR5cGUgVHJhaXRPcmlnaW5UeXBlID0gJ21vZHVsZScgfCAnbG9naWNVbml0J1xuZXhwb3J0IHR5cGUgVHJhaXRPcmlnaW5JZEtpbmQgPSAnZXhwbGljaXQnIHwgJ2Rlcml2ZWQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaXRQcm92ZW5hbmNlIHtcbiAgcmVhZG9ubHkgb3JpZ2luVHlwZTogVHJhaXRPcmlnaW5UeXBlXG4gIHJlYWRvbmx5IG9yaWdpbklkOiBzdHJpbmdcbiAgcmVhZG9ubHkgb3JpZ2luSWRLaW5kOiBUcmFpdE9yaWdpbklkS2luZFxuICAvKipcbiAgICogXHU3RUQ5IERldnRvb2xzL1x1OTUxOVx1OEJFRlx1NEZFMVx1NjA2Rlx1NUM1NVx1NzkzQVx1NzY4NFx1NTNFRlx1OEJGQlx1NjgwN1x1N0I3RVx1RkYwOFx1NEY4Qlx1NTk4MiBcImxvZ2ljVW5pdDpQcm9maWxlIzFcIlx1RkYwOVx1MzAwMlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luTGFiZWw6IHN0cmluZ1xuICAvKipcbiAgICogXHU1M0VGXHU5MDA5XHVGRjFBXHU1OEYwXHU2NjBFXHU0RjREXHU3RjZFXHU2NDU4XHU4OTgxXHVGRjA4XHU0RjhCXHU1OTgyXHU2NTg3XHU0RUY2XHU4REVGXHU1Rjg0L1x1OEMwM1x1NzUyOFx1NzBCOVx1RkYwOVx1RkYwQ1x1NEVDNVx1NzUyOFx1NEU4RVx1NUI5QVx1NEY0RFx1RkYwQ1x1NEUwRFx1NTNDMlx1NEUwRVx1OEJFRFx1NEU0OVx1ODhDMVx1NTFCM1x1MzAwMlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZ1xufVxuXG4vKipcbiAqIFRyYWl0U3BlY1x1RkYxQVxuICogLSBcdTRGNUNcdTRFM0FcdTIwMUN0cmFpdHMgXHU1OEYwXHU2NjBFXHUyMDFEXHU3Njg0XHU2NzAwXHU1QzBGXHU1RjYyXHU2MDAxXHVGRjFBXHU0RTAwXHU3RUM0XHU0RUU1IHRyYWl0SWQgXHU0RTNBIGtleSBcdTc2ODRcdTU4RjBcdTY2MEVcdTVCRjlcdThDNjFcdUZGMUJcbiAqIC0gXHU1MTc3XHU0RjUzIHZhbHVlIFx1NUY2Mlx1NjAwMVx1NzUzMVx1NTE3N1x1NEY1MyB0cmFpdCBcdTdDRkJcdTdFREZcdUZGMDhcdTU5ODIgU3RhdGVUcmFpdFNwZWNcdUZGMDlcdTUxQjNcdTVCOUFcdUZGMUJcbiAqIC0gXHU4RkQ5XHU5MUNDXHU0RTBEXHU3RUE2XHU2NzVGIHZhbHVlIFx1NzY4NFx1NTNFRlx1NUU4Rlx1NTIxN1x1NTMxNlx1NjAyN1x1RkYwOFx1OEZEMFx1ODg0Q1x1NjcxRiBpbnN0YWxsIFx1NTNFRlx1ODBGRFx1NEY5RFx1OEQ1Nlx1NTFGRFx1NjU3MFx1RkYwOVx1RkYwQ1x1NEY0NiBTbmFwc2hvdC9cdThCQzFcdTYzNkVcdTVCRkNcdTUxRkFcdTVGQzVcdTk4N0JcdTUzRUFcdTUzRDZcdTUzRUZcdTVFOEZcdTUyMTdcdTUzMTZcdTVCNTBcdTk2QzZcdTMwMDJcbiAqL1xuZXhwb3J0IHR5cGUgVHJhaXRTcGVjID0gb2JqZWN0XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaXRDb250cmlidXRpb24ge1xuICByZWFkb25seSB0cmFpdHM6IFRyYWl0U3BlY1xuICByZWFkb25seSBwcm92ZW5hbmNlOiBUcmFpdFByb3ZlbmFuY2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVUcmFpdEl0ZW0ge1xuICByZWFkb25seSB0cmFpdElkOiBUcmFpdElkXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBUcmFpdENvbmZsaWN0S2luZCA9ICdkdXBsaWNhdGVfdHJhaXRJZCcgfCAnbWlzc2luZ19yZXF1aXJlcycgfCAnZXhjbHVkZXNfdmlvbGF0aW9uJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWl0Q29uZmxpY3Qge1xuICByZWFkb25seSBraW5kOiBUcmFpdENvbmZsaWN0S2luZFxuICByZWFkb25seSB0cmFpdElkOiBUcmFpdElkXG4gIHJlYWRvbmx5IHNvdXJjZXM6IFJlYWRvbmx5QXJyYXk8VHJhaXRQcm92ZW5hbmNlPlxuICByZWFkb25seSBtaXNzaW5nPzogUmVhZG9ubHlBcnJheTxUcmFpdElkPlxuICByZWFkb25seSBwcmVzZW50PzogUmVhZG9ubHlBcnJheTxUcmFpdElkPlxufVxuXG5leHBvcnQgY2xhc3MgTW9kdWxlVHJhaXRzQ29uZmxpY3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgX3RhZyA9ICdNb2R1bGVUcmFpdHNDb25mbGljdEVycm9yJ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1vZHVsZUlkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgY29uZmxpY3RzOiBSZWFkb25seUFycmF5PFRyYWl0Q29uZmxpY3Q+LFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIFtcbiAgICAgICAgYFtNb2R1bGVUcmFpdHNDb25mbGljdEVycm9yXSBDb25mbGljdGluZyB0cmFpdElkcyBmb3VuZCAobW9kdWxlSWQ9JHttb2R1bGVJZH0pLmAsXG4gICAgICAgIC4uLmNvbmZsaWN0cy5tYXAoKGMpID0+XG4gICAgICAgICAgYy5raW5kID09PSAnZHVwbGljYXRlX3RyYWl0SWQnXG4gICAgICAgICAgICA/IGAtIGR1cGxpY2F0ZSAke2MudHJhaXRJZH06ICR7Yy5zb3VyY2VzLm1hcCgocykgPT4gYCR7cy5vcmlnaW5UeXBlfToke3Mub3JpZ2luSWR9YCkuam9pbignLCAnKX1gXG4gICAgICAgICAgICA6IGMua2luZCA9PT0gJ21pc3NpbmdfcmVxdWlyZXMnXG4gICAgICAgICAgICAgID8gYC0gbWlzc2luZyByZXF1aXJlcyBmb3IgJHtjLnRyYWl0SWR9OiAkeyhjLm1pc3NpbmcgPz8gW10pLmpvaW4oJywgJyl9OyBzb3VyY2VzPSR7Yy5zb3VyY2VzXG4gICAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBgJHtzLm9yaWdpblR5cGV9OiR7cy5vcmlnaW5JZH1gKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICA6IGAtIGV4Y2x1ZGVzIHZpb2xhdGlvbiBmb3IgJHtjLnRyYWl0SWR9OiBwcmVzZW50PSR7KGMucHJlc2VudCA/PyBbXSkuam9pbignLCAnKX07IHNvdXJjZXM9JHtjLnNvdXJjZXNcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHMpID0+IGAke3Mub3JpZ2luVHlwZX06JHtzLm9yaWdpbklkfWApXG4gICAgICAgICAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgICAgICApLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVUcmFpdHNTbmFwc2hvdCB7XG4gIHJlYWRvbmx5IG1vZHVsZUlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgZGlnZXN0OiBzdHJpbmdcbiAgcmVhZG9ubHkgdHJhaXRzOiBSZWFkb25seUFycmF5PE1vZHVsZVRyYWl0SXRlbT5cbiAgcmVhZG9ubHkgcHJvdmVuYW5jZUluZGV4OiBSZWNvcmQ8VHJhaXRJZCwgVHJhaXRQcm92ZW5hbmNlPlxufVxuXG5jb25zdCB0b1Byb3ZlbmFuY2VLZXkgPSAocDogVHJhaXRQcm92ZW5hbmNlKTogc3RyaW5nID0+XG4gIGAke3Aub3JpZ2luVHlwZX06JHtwLm9yaWdpbklkfToke3Aub3JpZ2luSWRLaW5kfToke3Aub3JpZ2luTGFiZWx9OiR7cC5wYXRoID8/ICcnfWBcblxuY29uc3QgY29tcGFyZVByb3ZlbmFuY2UgPSAoYTogVHJhaXRQcm92ZW5hbmNlLCBiOiBUcmFpdFByb3ZlbmFuY2UpOiBudW1iZXIgPT4ge1xuICBjb25zdCB0eXBlID0gYS5vcmlnaW5UeXBlLmxvY2FsZUNvbXBhcmUoYi5vcmlnaW5UeXBlKVxuICBpZiAodHlwZSAhPT0gMCkgcmV0dXJuIHR5cGVcbiAgY29uc3QgaWQgPSBhLm9yaWdpbklkLmxvY2FsZUNvbXBhcmUoYi5vcmlnaW5JZClcbiAgaWYgKGlkICE9PSAwKSByZXR1cm4gaWRcbiAgY29uc3Qga2luZCA9IGEub3JpZ2luSWRLaW5kLmxvY2FsZUNvbXBhcmUoYi5vcmlnaW5JZEtpbmQpXG4gIGlmIChraW5kICE9PSAwKSByZXR1cm4ga2luZFxuICBjb25zdCBsYWJlbCA9IGEub3JpZ2luTGFiZWwubG9jYWxlQ29tcGFyZShiLm9yaWdpbkxhYmVsKVxuICBpZiAobGFiZWwgIT09IDApIHJldHVybiBsYWJlbFxuICByZXR1cm4gU3RyaW5nKGEucGF0aCA/PyAnJykubG9jYWxlQ29tcGFyZShTdHJpbmcoYi5wYXRoID8/ICcnKSlcbn1cblxuY29uc3Qgb3JpZ2luVHlwZU9yZGVyID0gKHQ6IFRyYWl0T3JpZ2luVHlwZSk6IG51bWJlciA9PiAodCA9PT0gJ21vZHVsZScgPyAwIDogMSlcblxuY29uc3QgY29tcGFyZVRyYWl0SWRCeVByb3ZlbmFuY2UgPSAoXG4gIGE6IHsgcmVhZG9ubHkgdHJhaXRJZDogVHJhaXRJZDsgcmVhZG9ubHkgcHJvdmVuYW5jZTogVHJhaXRQcm92ZW5hbmNlIH0sXG4gIGI6IHsgcmVhZG9ubHkgdHJhaXRJZDogVHJhaXRJZDsgcmVhZG9ubHkgcHJvdmVuYW5jZTogVHJhaXRQcm92ZW5hbmNlIH0sXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCB0YSA9IG9yaWdpblR5cGVPcmRlcihhLnByb3ZlbmFuY2Uub3JpZ2luVHlwZSkgLSBvcmlnaW5UeXBlT3JkZXIoYi5wcm92ZW5hbmNlLm9yaWdpblR5cGUpXG4gIGlmICh0YSAhPT0gMCkgcmV0dXJuIHRhXG4gIGNvbnN0IG9hID0gYS5wcm92ZW5hbmNlLm9yaWdpbklkLmxvY2FsZUNvbXBhcmUoYi5wcm92ZW5hbmNlLm9yaWdpbklkKVxuICBpZiAob2EgIT09IDApIHJldHVybiBvYVxuICByZXR1cm4gYS50cmFpdElkLmxvY2FsZUNvbXBhcmUoYi50cmFpdElkKVxufVxuXG5jb25zdCBleHRyYWN0U3RyaW5nQXJyYXkgPSAodmFsdWU6IHVua25vd24pOiBSZWFkb25seUFycmF5PHN0cmluZz4gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gW11cbiAgY29uc3Qgb3V0OiBBcnJheTxzdHJpbmc+ID0gW11cbiAgZm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgY29udGludWVcbiAgICBjb25zdCBzID0gdi50cmltKClcbiAgICBpZiAoIXMpIGNvbnRpbnVlXG4gICAgb3V0LnB1c2gocylcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmNvbnN0IGdldFRyYWl0UmVxdWlyZXMgPSAodmFsdWU6IHVua25vd24pOiBSZWFkb25seUFycmF5PFRyYWl0SWQ+ID0+IHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gW11cbiAgY29uc3QgZGlyZWN0ID0gZXh0cmFjdFN0cmluZ0FycmF5KCh2YWx1ZSBhcyBhbnkpLnJlcXVpcmVzKVxuICByZXR1cm4gZGlyZWN0XG59XG5cbmNvbnN0IGdldFRyYWl0RXhjbHVkZXMgPSAodmFsdWU6IHVua25vd24pOiBSZWFkb25seUFycmF5PFRyYWl0SWQ+ID0+IHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gW11cbiAgY29uc3QgZGlyZWN0ID0gZXh0cmFjdFN0cmluZ0FycmF5KCh2YWx1ZSBhcyBhbnkpLmV4Y2x1ZGVzKVxuICByZXR1cm4gZGlyZWN0XG59XG5cbmNvbnN0IGdldFRyYWl0TmFtZSA9ICh0cmFpdElkOiBUcmFpdElkLCB2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgbiA9ICh2YWx1ZSBhcyBhbnkpLm5hbWVcbiAgICBpZiAodHlwZW9mIG4gPT09ICdzdHJpbmcnICYmIG4udHJpbSgpLmxlbmd0aCA+IDApIHJldHVybiBuLnRyaW0oKVxuICB9XG4gIHJldHVybiB0cmFpdElkXG59XG5cbmNvbnN0IGdldFRyYWl0RGVzY3JpcHRpb24gPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGQgPSAodmFsdWUgYXMgYW55KS5kZXNjcmlwdGlvblxuICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycgJiYgZC50cmltKCkubGVuZ3RoID4gMCkgcmV0dXJuIGQudHJpbSgpXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgZmluYWxpemVUcmFpdENvbnRyaWJ1dGlvbnMgPSAoYXJnczoge1xuICByZWFkb25seSBtb2R1bGVJZDogc3RyaW5nXG4gIHJlYWRvbmx5IGNvbnRyaWJ1dGlvbnM6IFJlYWRvbmx5QXJyYXk8VHJhaXRDb250cmlidXRpb24+XG59KTogeyByZWFkb25seSBtZXJnZWQ6IFRyYWl0U3BlYzsgcmVhZG9ubHkgc25hcHNob3Q6IE1vZHVsZVRyYWl0c1NuYXBzaG90IH0gPT4ge1xuICBjb25zdCB0cmFpdEJ5SWQgPSBuZXcgTWFwPFRyYWl0SWQsIHsgcmVhZG9ubHkgdmFsdWU6IHVua25vd247IHJlYWRvbmx5IHByb3ZlbmFuY2U6IFRyYWl0UHJvdmVuYW5jZSB9PigpXG5cbiAgY29uc3QgZHVwbGljYXRlU291cmNlcyA9IG5ldyBNYXA8VHJhaXRJZCwgQXJyYXk8VHJhaXRQcm92ZW5hbmNlPj4oKVxuXG4gIGNvbnN0IGNvbnRyaWJ1dGlvbnMgPSBbLi4uYXJncy5jb250cmlidXRpb25zXS5zb3J0KChhLCBiKSA9PiBjb21wYXJlUHJvdmVuYW5jZShhLnByb3ZlbmFuY2UsIGIucHJvdmVuYW5jZSkpXG5cbiAgZm9yIChjb25zdCBjIG9mIGNvbnRyaWJ1dGlvbnMpIHtcbiAgICBjb25zdCB0cmFpdHMgPSBjLnRyYWl0c1xuICAgIGlmICghdHJhaXRzIHx8IHR5cGVvZiB0cmFpdHMgIT09ICdvYmplY3QnKSBjb250aW51ZVxuICAgIGZvciAoY29uc3QgdHJhaXRJZCBvZiBPYmplY3Qua2V5cyh0cmFpdHMpLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKHRyYWl0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbdHJhaXRJZF1cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBwcmV2ID0gdHJhaXRCeUlkLmdldCh0cmFpdElkKVxuICAgICAgaWYgKCFwcmV2KSB7XG4gICAgICAgIHRyYWl0QnlJZC5zZXQodHJhaXRJZCwgeyB2YWx1ZSwgcHJvdmVuYW5jZTogYy5wcm92ZW5hbmNlIH0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZXMgPSBkdXBsaWNhdGVTb3VyY2VzLmdldCh0cmFpdElkKSA/PyBbcHJldi5wcm92ZW5hbmNlXVxuICAgICAgc291cmNlcy5wdXNoKGMucHJvdmVuYW5jZSlcbiAgICAgIGR1cGxpY2F0ZVNvdXJjZXMuc2V0KHRyYWl0SWQsIHNvdXJjZXMpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29uZmxpY3RzOiBBcnJheTxUcmFpdENvbmZsaWN0PiA9IFtdXG4gIGNvbnN0IHJlZ2lzdGVyQ29uZmxpY3QgPSAoY29uZmxpY3Q6IFRyYWl0Q29uZmxpY3QpID0+IHtcbiAgICBjb25zdCB1bmlxdWUgPSBuZXcgTWFwPHN0cmluZywgVHJhaXRQcm92ZW5hbmNlPigpXG4gICAgZm9yIChjb25zdCBzIG9mIGNvbmZsaWN0LnNvdXJjZXMpIHtcbiAgICAgIHVuaXF1ZS5zZXQodG9Qcm92ZW5hbmNlS2V5KHMpLCBzKVxuICAgIH1cbiAgICBjb25mbGljdHMucHVzaCh7XG4gICAgICAuLi5jb25mbGljdCxcbiAgICAgIHNvdXJjZXM6IEFycmF5LmZyb20odW5pcXVlLnZhbHVlcygpKS5zb3J0KGNvbXBhcmVQcm92ZW5hbmNlKSxcbiAgICB9KVxuICB9XG5cbiAgLy8gMSkgZHVwbGljYXRlIHRyYWl0SWQgY29uZmxpY3RzXG4gIGZvciAoY29uc3QgdHJhaXRJZCBvZiBBcnJheS5mcm9tKGR1cGxpY2F0ZVNvdXJjZXMua2V5cygpKS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpKSB7XG4gICAgcmVnaXN0ZXJDb25mbGljdCh7XG4gICAgICBraW5kOiAnZHVwbGljYXRlX3RyYWl0SWQnLFxuICAgICAgdHJhaXRJZCxcbiAgICAgIHNvdXJjZXM6IGR1cGxpY2F0ZVNvdXJjZXMuZ2V0KHRyYWl0SWQpID8/IFtdLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtZXJnZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cbiAgY29uc3QgcHJvdmVuYW5jZUluZGV4OiBSZWNvcmQ8c3RyaW5nLCBUcmFpdFByb3ZlbmFuY2U+ID0ge31cbiAgY29uc3QgdHJhaXRzOiBBcnJheTxNb2R1bGVUcmFpdEl0ZW0+ID0gW11cblxuICBjb25zdCBlbnRyaWVzOiBBcnJheTx7IHJlYWRvbmx5IHRyYWl0SWQ6IFRyYWl0SWQ7IHJlYWRvbmx5IHZhbHVlOiB1bmtub3duOyByZWFkb25seSBwcm92ZW5hbmNlOiBUcmFpdFByb3ZlbmFuY2UgfT4gPVxuICAgIFtdXG4gIGZvciAoY29uc3QgdHJhaXRJZCBvZiB0cmFpdEJ5SWQua2V5cygpKSB7XG4gICAgY29uc3QgZW50cnkgPSB0cmFpdEJ5SWQuZ2V0KHRyYWl0SWQpXG4gICAgaWYgKCFlbnRyeSkgY29udGludWVcbiAgICBlbnRyaWVzLnB1c2goeyB0cmFpdElkLCB2YWx1ZTogZW50cnkudmFsdWUsIHByb3ZlbmFuY2U6IGVudHJ5LnByb3ZlbmFuY2UgfSlcbiAgfVxuXG4gIGNvbnN0IGlkcyA9IGVudHJpZXNcbiAgICAuc2xpY2UoKVxuICAgIC5zb3J0KGNvbXBhcmVUcmFpdElkQnlQcm92ZW5hbmNlKVxuICAgIC5tYXAoKGUpID0+IGUudHJhaXRJZClcblxuICBmb3IgKGNvbnN0IHRyYWl0SWQgb2YgaWRzKSB7XG4gICAgY29uc3QgZW50cnkgPSB0cmFpdEJ5SWQuZ2V0KHRyYWl0SWQpXG4gICAgaWYgKCFlbnRyeSkgY29udGludWVcbiAgICBtZXJnZWRbdHJhaXRJZF0gPSBlbnRyeS52YWx1ZVxuICAgIHByb3ZlbmFuY2VJbmRleFt0cmFpdElkXSA9IGVudHJ5LnByb3ZlbmFuY2VcbiAgICB0cmFpdHMucHVzaCh7XG4gICAgICB0cmFpdElkLFxuICAgICAgbmFtZTogZ2V0VHJhaXROYW1lKHRyYWl0SWQsIGVudHJ5LnZhbHVlKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBnZXRUcmFpdERlc2NyaXB0aW9uKGVudHJ5LnZhbHVlKSxcbiAgICB9KVxuICB9XG5cbiAgLy8gMikgY29uc2lzdGVuY3kgY2hlY2tzIChGUi0wMDcpOiByZXF1aXJlcyAvIGV4Y2x1ZGVzXG4gIGNvbnN0IHByZXNlbnQgPSBuZXcgU2V0KGlkcylcblxuICBmb3IgKGNvbnN0IHRyYWl0SWQgb2YgaWRzKSB7XG4gICAgY29uc3QgZW50cnkgPSB0cmFpdEJ5SWQuZ2V0KHRyYWl0SWQpXG4gICAgaWYgKCFlbnRyeSkgY29udGludWVcblxuICAgIGNvbnN0IHJlcXVpcmVzID0gZ2V0VHJhaXRSZXF1aXJlcyhlbnRyeS52YWx1ZSlcbiAgICBpZiAocmVxdWlyZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWlzc2luZyA9IHJlcXVpcmVzLmZpbHRlcigocikgPT4gIXByZXNlbnQuaGFzKHIpKVxuICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICByZWdpc3RlckNvbmZsaWN0KHtcbiAgICAgICAgICBraW5kOiAnbWlzc2luZ19yZXF1aXJlcycsXG4gICAgICAgICAgdHJhaXRJZCxcbiAgICAgICAgICBtaXNzaW5nOiBBcnJheS5mcm9tKG5ldyBTZXQobWlzc2luZykpLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgICAgICAgc291cmNlczogW2VudHJ5LnByb3ZlbmFuY2VdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4Y2x1ZGVzID0gZ2V0VHJhaXRFeGNsdWRlcyhlbnRyeS52YWx1ZSlcbiAgICBpZiAoZXhjbHVkZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcHJlc2VudEV4Y2x1ZGVkID0gZXhjbHVkZXMuZmlsdGVyKChlKSA9PiBwcmVzZW50LmhhcyhlKSlcbiAgICAgIGlmIChwcmVzZW50RXhjbHVkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBvdGhlclNvdXJjZXM6IEFycmF5PFRyYWl0UHJvdmVuYW5jZT4gPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IG90aGVySWQgb2YgcHJlc2VudEV4Y2x1ZGVkKSB7XG4gICAgICAgICAgY29uc3Qgb3RoZXIgPSB0cmFpdEJ5SWQuZ2V0KG90aGVySWQpXG4gICAgICAgICAgaWYgKG90aGVyKSBvdGhlclNvdXJjZXMucHVzaChvdGhlci5wcm92ZW5hbmNlKVxuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyQ29uZmxpY3Qoe1xuICAgICAgICAgIGtpbmQ6ICdleGNsdWRlc192aW9sYXRpb24nLFxuICAgICAgICAgIHRyYWl0SWQsXG4gICAgICAgICAgcHJlc2VudDogQXJyYXkuZnJvbShuZXcgU2V0KHByZXNlbnRFeGNsdWRlZCkpLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgICAgICAgc291cmNlczogW2VudHJ5LnByb3ZlbmFuY2UsIC4uLm90aGVyU291cmNlc10sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbmZsaWN0cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qga2luZE9yZGVyOiBSZWNvcmQ8VHJhaXRDb25mbGljdEtpbmQsIG51bWJlcj4gPSB7XG4gICAgICBkdXBsaWNhdGVfdHJhaXRJZDogMCxcbiAgICAgIG1pc3NpbmdfcmVxdWlyZXM6IDEsXG4gICAgICBleGNsdWRlc192aW9sYXRpb246IDIsXG4gICAgfVxuICAgIGNvbmZsaWN0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBrID0ga2luZE9yZGVyW2Eua2luZF0gLSBraW5kT3JkZXJbYi5raW5kXVxuICAgICAgaWYgKGsgIT09IDApIHJldHVybiBrXG4gICAgICByZXR1cm4gYS50cmFpdElkLmxvY2FsZUNvbXBhcmUoYi50cmFpdElkKVxuICAgIH0pXG4gICAgdGhyb3cgbmV3IE1vZHVsZVRyYWl0c0NvbmZsaWN0RXJyb3IoYXJncy5tb2R1bGVJZCwgY29uZmxpY3RzKVxuICB9XG5cbiAgY29uc3QgZGlnZXN0QmFzZSA9IHtcbiAgICBtb2R1bGVJZDogYXJncy5tb2R1bGVJZCxcbiAgICB0cmFpdHMsXG4gICAgcHJvdmVuYW5jZUluZGV4LFxuICB9IGFzIGNvbnN0XG5cbiAgY29uc3QgZGlnZXN0ID0gYG10cmFpdHM6MDIzOiR7Zm52MWEzMihzdGFibGVTdHJpbmdpZnkoZGlnZXN0QmFzZSkpfWBcblxuICByZXR1cm4ge1xuICAgIG1lcmdlZCxcbiAgICBzbmFwc2hvdDoge1xuICAgICAgbW9kdWxlSWQ6IGFyZ3MubW9kdWxlSWQsXG4gICAgICBkaWdlc3QsXG4gICAgICB0cmFpdHMsXG4gICAgICBwcm92ZW5hbmNlSW5kZXgsXG4gICAgfSxcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxRQUFRLGdCQUErQjs7O0FDa0R6QyxJQUFNLDRCQUFOLGNBQXdDLE1BQU07QUFBQSxFQUduRCxZQUNXLFVBQ0EsV0FDVDtBQUNBO0FBQUEsTUFDRTtBQUFBLFFBQ0Usb0VBQW9FLFFBQVE7QUFBQSxRQUM1RSxHQUFHLFVBQVU7QUFBQSxVQUFJLENBQUMsTUFDaEIsRUFBRSxTQUFTLHNCQUNQLGVBQWUsRUFBRSxPQUFPLEtBQUssRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUM3RixFQUFFLFNBQVMscUJBQ1QsMEJBQTBCLEVBQUUsT0FBTyxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQ2hGLElBQUksQ0FBQyxNQUFN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
@@ -2,13 +2,11 @@
2
2
 
3
3
  import {
4
4
  OBSERVABILITY_PROTOCOL_VERSION,
5
- exportEvidencePackage
6
- } from "./chunk-BWSNPKO5.js";
7
- import {
8
5
  composeMiddleware,
6
+ exportEvidencePackage,
9
7
  makeOperationRejected,
10
8
  runWithMiddleware
11
- } from "./chunk-TOQ6SJ6O.js";
9
+ } from "./chunk-SI5OKFFY.js";
12
10
 
13
11
  // ../logix-core/src/internal/observability/runSession.ts
14
12
  import { Context, Layer } from "../effect.js";
@@ -174,4 +172,4 @@ export {
174
172
  withMeta,
175
173
  run
176
174
  };
177
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJpbGl0eS9ydW5TZXNzaW9uLnRzIiwgIi4uLy4uLy4uLy4uL2xvZ2l4LWNvcmUvc3JjL2ludGVybmFsL2VmZmVjdC1vcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCwgTGF5ZXIgfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJy4vanNvblZhbHVlLmpzJ1xuaW1wb3J0IHR5cGUgeyBFdmlkZW5jZVBhY2thZ2UsIEV2aWRlbmNlUGFja2FnZVNvdXJjZSwgT2JzZXJ2YXRpb25FbnZlbG9wZSB9IGZyb20gJy4vZXZpZGVuY2UuanMnXG5pbXBvcnQgeyBleHBvcnRFdmlkZW5jZVBhY2thZ2UsIE9CU0VSVkFCSUxJVFlfUFJPVE9DT0xfVkVSU0lPTiB9IGZyb20gJy4vZXZpZGVuY2UuanMnXG5cbmV4cG9ydCB0eXBlIFJ1bklkID0gc3RyaW5nXG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU2Vzc2lvbkxvY2FsU3RhdGUge1xuICAvKipcbiAgICogb25jZTogYSBkZS1kdXAga2V5IHNldCBmb3IgXCJlbWl0IG9ubHkgb25jZVwiIGJlaGF2aW9yIChtdXN0IGJlIGlzb2xhdGVkIHBlciBzZXNzaW9uIHRvIGF2b2lkIGNyb3NzLXNlc3Npb24gcG9sbHV0aW9uKS5cbiAgICogUmV0dXJucyB0cnVlIGlmIGl0J3MgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGZhbHNlIGlmIHRoZSBrZXkgaGFzIGJlZW4gc2VlbiBiZWZvcmUuXG4gICAqL1xuICByZWFkb25seSBvbmNlOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW5cblxuICAvKipcbiAgICogc2VxOiBhbGxvY2F0ZSBtb25vdG9uaWMgc2VxdWVuY2VzIGJ5IGtleSAoZS5nLiBvcFNlcS9ldmVudFNlcSksIG11c3QgYmUgaXNvbGF0ZWQgcGVyIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBuZXh0U2VxOiAobmFtZXNwYWNlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiBudW1iZXJcblxuICAvKiogVGVzdHMvcmVzZXQgb25seTogY2xlYXIgdGhpcyBzZXNzaW9uJ3MgbG9jYWwgc3RhdGUuICovXG4gIHJlYWRvbmx5IGNsZWFyOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU2Vzc2lvbiB7XG4gIHJlYWRvbmx5IHJ1bklkOiBSdW5JZFxuICByZWFkb25seSBzb3VyY2U6IEV2aWRlbmNlUGFja2FnZVNvdXJjZVxuICByZWFkb25seSBzdGFydGVkQXQ6IG51bWJlclxuICByZWFkb25seSBsb2NhbDogUnVuU2Vzc2lvbkxvY2FsU3RhdGVcbn1cblxuY2xhc3MgUnVuU2Vzc2lvblRhZ0ltcGwgZXh0ZW5kcyBDb250ZXh0LlRhZygnQGxvZ2l4anMvY29yZS9SdW5TZXNzaW9uJyk8UnVuU2Vzc2lvblRhZ0ltcGwsIFJ1blNlc3Npb24+KCkge31cblxuZXhwb3J0IGNvbnN0IFJ1blNlc3Npb25UYWcgPSBSdW5TZXNzaW9uVGFnSW1wbFxuXG5leHBvcnQgaW50ZXJmYWNlIEV2aWRlbmNlU2luayB7XG4gIHJlYWRvbmx5IHJlY29yZDogKHR5cGU6IHN0cmluZywgcGF5bG9hZDogSnNvblZhbHVlLCBvcHRpb25zPzogeyByZWFkb25seSB0aW1lc3RhbXA/OiBudW1iZXIgfSkgPT4gdm9pZFxuICByZWFkb25seSBleHBvcnQ6IChvcHRpb25zPzoge1xuICAgIHJlYWRvbmx5IHByb3RvY29sVmVyc2lvbj86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRBdD86IG51bWJlclxuICAgIHJlYWRvbmx5IHN1bW1hcnk/OiBKc29uVmFsdWVcbiAgICByZWFkb25seSBtYXhFdmVudHM/OiBudW1iZXJcbiAgfSkgPT4gRXZpZGVuY2VQYWNrYWdlXG4gIHJlYWRvbmx5IGNsZWFyOiAoKSA9PiB2b2lkXG59XG5cbmNvbnN0IE5FWFRfUlVOX1NFUV9LRVkgPSBTeW1ib2wuZm9yKCdAbG9naXhqcy9jb3JlL3J1blNlc3Npb24vbmV4dFJ1blNlcScpXG5sZXQgZmFsbGJhY2tOZXh0UnVuU2VxID0gMFxuXG5jb25zdCBuZXh0UnVuU2VxID0gKCk6IG51bWJlciA9PiB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBnOiBhbnkgPSBnbG9iYWxUaGlzIGFzIGFueVxuICAgIGNvbnN0IHByZXYgPSB0eXBlb2YgZ1tORVhUX1JVTl9TRVFfS0VZXSA9PT0gJ251bWJlcicgPyAoZ1tORVhUX1JVTl9TRVFfS0VZXSBhcyBudW1iZXIpIDogMFxuICAgIGNvbnN0IG5leHQgPSBwcmV2ICsgMVxuICAgIGdbTkVYVF9SVU5fU0VRX0tFWV0gPSBuZXh0XG4gICAgcmV0dXJuIG5leHRcbiAgfSBjYXRjaCB7XG4gICAgZmFsbGJhY2tOZXh0UnVuU2VxICs9IDFcbiAgICByZXR1cm4gZmFsbGJhY2tOZXh0UnVuU2VxXG4gIH1cbn1cblxuY29uc3QgbWFrZVJ1bklkID0gKHN0YXJ0ZWRBdDogbnVtYmVyKTogUnVuSWQgPT4gYHJ1bi0ke3N0YXJ0ZWRBdH0uJHtuZXh0UnVuU2VxKCl9YFxuXG5leHBvcnQgY29uc3QgbWFrZVJ1blNlc3Npb25Mb2NhbFN0YXRlID0gKCk6IFJ1blNlc3Npb25Mb2NhbFN0YXRlID0+IHtcbiAgY29uc3Qgb25jZUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBjb25zdCBzZXFCeU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpXG5cbiAgcmV0dXJuIHtcbiAgICBvbmNlOiAoa2V5KSA9PiB7XG4gICAgICBpZiAob25jZUtleXMuaGFzKGtleSkpIHJldHVybiBmYWxzZVxuICAgICAgb25jZUtleXMuYWRkKGtleSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcbiAgICBuZXh0U2VxOiAobmFtZXNwYWNlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGJ5S2V5ID0gc2VxQnlOYW1lc3BhY2UuZ2V0KG5hbWVzcGFjZSkgPz8gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKVxuICAgICAgaWYgKCFzZXFCeU5hbWVzcGFjZS5oYXMobmFtZXNwYWNlKSkgc2VxQnlOYW1lc3BhY2Uuc2V0KG5hbWVzcGFjZSwgYnlLZXkpXG4gICAgICBjb25zdCBwcmV2ID0gYnlLZXkuZ2V0KGtleSkgPz8gMFxuICAgICAgY29uc3QgbmV4dCA9IHByZXYgKyAxXG4gICAgICBieUtleS5zZXQoa2V5LCBuZXh0KVxuICAgICAgcmV0dXJuIG5leHRcbiAgICB9LFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBvbmNlS2V5cy5jbGVhcigpXG4gICAgICBzZXFCeU5hbWVzcGFjZS5jbGVhcigpXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWFrZVJ1blNlc3Npb24gPSAob3B0aW9ucz86IHtcbiAgcmVhZG9ubHkgcnVuSWQ/OiBSdW5JZFxuICByZWFkb25seSBzb3VyY2U/OiBFdmlkZW5jZVBhY2thZ2VTb3VyY2VcbiAgcmVhZG9ubHkgc3RhcnRlZEF0PzogbnVtYmVyXG4gIHJlYWRvbmx5IGxvY2FsPzogUnVuU2Vzc2lvbkxvY2FsU3RhdGVcbn0pOiBSdW5TZXNzaW9uID0+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gb3B0aW9ucz8uc3RhcnRlZEF0ID8/IERhdGUubm93KClcbiAgcmV0dXJuIHtcbiAgICBydW5JZDogb3B0aW9ucz8ucnVuSWQgPz8gbWFrZVJ1bklkKHN0YXJ0ZWRBdCksXG4gICAgc291cmNlOiBvcHRpb25zPy5zb3VyY2UgPz8geyBob3N0OiAndW5rbm93bicgfSxcbiAgICBzdGFydGVkQXQsXG4gICAgbG9jYWw6IG9wdGlvbnM/LmxvY2FsID8/IG1ha2VSdW5TZXNzaW9uTG9jYWxTdGF0ZSgpLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYWtlRXZpZGVuY2VTaW5rID0gKHNlc3Npb246IFJ1blNlc3Npb24pOiBFdmlkZW5jZVNpbmsgPT4ge1xuICBjb25zdCBldmVudHM6IE9ic2VydmF0aW9uRW52ZWxvcGVbXSA9IFtdXG4gIGxldCBuZXh0U2VxID0gMVxuXG4gIHJldHVybiB7XG4gICAgcmVjb3JkOiAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykgPT4ge1xuICAgICAgZXZlbnRzLnB1c2goe1xuICAgICAgICBwcm90b2NvbFZlcnNpb246IE9CU0VSVkFCSUxJVFlfUFJPVE9DT0xfVkVSU0lPTixcbiAgICAgICAgcnVuSWQ6IHNlc3Npb24ucnVuSWQsXG4gICAgICAgIHNlcTogbmV4dFNlcSsrLFxuICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnM/LnRpbWVzdGFtcCA/PyBEYXRlLm5vdygpLFxuICAgICAgICB0eXBlLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIGV4cG9ydDogKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvY29sVmVyc2lvbiA9IG9wdGlvbnM/LnByb3RvY29sVmVyc2lvbiA/PyBPQlNFUlZBQklMSVRZX1BST1RPQ09MX1ZFUlNJT05cbiAgICAgIGNvbnN0IG1heEV2ZW50cyA9IG9wdGlvbnM/Lm1heEV2ZW50c1xuXG4gICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgIHR5cGVvZiBtYXhFdmVudHMgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShtYXhFdmVudHMpICYmIG1heEV2ZW50cyA+IDBcbiAgICAgICAgICA/IGV2ZW50cy5zbGljZShNYXRoLm1heCgwLCBldmVudHMubGVuZ3RoIC0gTWF0aC5mbG9vcihtYXhFdmVudHMpKSlcbiAgICAgICAgICA6IGV2ZW50cy5zbGljZSgpXG5cbiAgICAgIHJldHVybiBleHBvcnRFdmlkZW5jZVBhY2thZ2Uoe1xuICAgICAgICBwcm90b2NvbFZlcnNpb24sXG4gICAgICAgIHJ1bklkOiBzZXNzaW9uLnJ1bklkLFxuICAgICAgICBzb3VyY2U6IHNlc3Npb24uc291cmNlLFxuICAgICAgICBjcmVhdGVkQXQ6IG9wdGlvbnM/LmNyZWF0ZWRBdCxcbiAgICAgICAgZXZlbnRzOiBzZWxlY3RlZCxcbiAgICAgICAgc3VtbWFyeTogb3B0aW9ucz8uc3VtbWFyeSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgZXZlbnRzLmxlbmd0aCA9IDBcbiAgICAgIG5leHRTZXEgPSAxXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcnVuU2Vzc2lvbkxheWVyID0gKHNlc3Npb24/OiBSdW5TZXNzaW9uKTogTGF5ZXIuTGF5ZXI8UnVuU2Vzc2lvblRhZ0ltcGwsIG5ldmVyLCBuZXZlcj4gPT5cbiAgTGF5ZXIuc3VjY2VlZChSdW5TZXNzaW9uVGFnLCBzZXNzaW9uID8/IG1ha2VSdW5TZXNzaW9uKCkpIGFzIExheWVyLkxheWVyPFJ1blNlc3Npb25UYWdJbXBsLCBuZXZlciwgbmV2ZXI+XG4iLCAiLy8gSW50ZXJuYWwgRWZmZWN0T3AgQVBJIChmb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gY29kZSkuXG4vL1xuLy8gR29hbDpcbi8vIC0gSW50ZXJuYWwgbW9kdWxlcyBtdXN0IG5ldmVyIGltcG9ydCByb290IHB1YmxpYyBzdWJtb2R1bGVzIChlLmcuIGAuLi9FZmZlY3RPcGApLlxuLy8gLSBUaGlzIGZpbGUgaG9zdHMgdGhlIHNoYXJlZCBpbXBsZW1lbnRhdGlvbjsgcHVibGljIGBzcmMvRWZmZWN0T3AudHNgIGRlbGVnYXRlcyB0byBpdC5cblxuaW1wb3J0IHsgRWZmZWN0LCBPcHRpb24gfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4vcnVudGltZS9jb3JlL0VmZmVjdE9wQ29yZS5qcydcbmltcG9ydCB7IFJ1blNlc3Npb25UYWcgfSBmcm9tICcuL29ic2VydmFiaWxpdHkvcnVuU2Vzc2lvbi5qcydcblxuZXhwb3J0IHR5cGUgRWZmZWN0T3A8T3V0ID0gdW5rbm93biwgRXJyID0gdW5rbm93biwgRW52ID0gdW5rbm93bj4gPSBDb3JlLkVmZmVjdE9wPE91dCwgRXJyLCBFbnY+XG5cbmV4cG9ydCB0eXBlIE9wZXJhdGlvblBvbGljeSA9IENvcmUuT3BlcmF0aW9uUG9saWN5XG5cbmV4cG9ydCB0eXBlIE9wZXJhdGlvblJlamVjdGVkID0gQ29yZS5PcGVyYXRpb25SZWplY3RlZFxuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25FcnJvcjxFPiA9IENvcmUuT3BlcmF0aW9uRXJyb3I8RT5cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZSA9IENvcmUuTWlkZGxld2FyZVxuXG5leHBvcnQgdHlwZSBNaWRkbGV3YXJlU3RhY2sgPSBDb3JlLk1pZGRsZXdhcmVTdGFja1xuXG5leHBvcnQgY29uc3QgY29tcG9zZU1pZGRsZXdhcmUgPSBDb3JlLmNvbXBvc2VNaWRkbGV3YXJlXG5cbmV4cG9ydCBjb25zdCBtYWtlT3BlcmF0aW9uUmVqZWN0ZWQgPSBDb3JlLm1ha2VPcGVyYXRpb25SZWplY3RlZFxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc3RhYmxlIGlkIGZvciBpZGVudGlmeWluZyBhbiBFZmZlY3RPcC5cbiAqIC0gVXNlcyBhIG1vbm90b25pYyBzZXF1ZW5jZSBieSBkZWZhdWx0IHRvIGF2b2lkIG5vbi1yZXBsYXlhYmlsaXR5IGZyb20gcmFuZG9tbmVzcy90aW1lLlxuICogLSBJZiBtZXRhLmluc3RhbmNlSWQgaXMgYXZhaWxhYmxlLCBwcmVmZXIgZGVyaXZpbmcgYCR7aW5zdGFuY2VJZH06Om8ke29wU2VxfWAuXG4gKi9cbmxldCBuZXh0R2xvYmFsT3BTZXEgPSAwXG5cbmNvbnN0IG5leHRPcFNlcSA9ICgpOiBudW1iZXIgPT4ge1xuICBuZXh0R2xvYmFsT3BTZXEgKz0gMVxuICByZXR1cm4gbmV4dEdsb2JhbE9wU2VxXG59XG5cbmNvbnN0IG1ha2VJZCA9IChpbnN0YW5jZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wU2VxOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgaW5zdGFuY2VJZCA/IGAke2luc3RhbmNlSWR9OjpvJHtvcFNlcX1gIDogYG8ke29wU2VxfWBcblxuLyoqXG4gKiBFZmZlY3RPcC5tYWtlXHVGRjFBXG4gKiAtIENyZWF0ZSBhbiBFZmZlY3RPcCB3aXRoIGJhc2ljIG1ldGEuXG4gKiAtIEdlbmVyYXRlcyBhIHN0YWJsZSBpZCBieSBkZWZhdWx0IChiYXNlZCBvbiBgaW5zdGFuY2VJZGAgKyBtb25vdG9uaWMgYG9wU2VxYCk7IGNhbGxlcnMgbWF5IG92ZXJyaWRlIGV4dGVybmFsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBtYWtlID0gPEEsIEUsIFI+KHBhcmFtczoge1xuICByZWFkb25seSBraW5kOiBFZmZlY3RPcFsna2luZCddXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICByZWFkb25seSBlZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj5cbiAgcmVhZG9ubHkgcGF5bG9hZD86IHVua25vd25cbiAgcmVhZG9ubHkgbWV0YT86IEVmZmVjdE9wWydtZXRhJ11cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmdcbn0pOiBFZmZlY3RPcDxBLCBFLCBSPiA9PiAoe1xuICAuLi4ocGFyYW1zLmlkXG4gICAgPyB7IGlkOiBwYXJhbXMuaWQsIG1ldGE6IHBhcmFtcy5tZXRhIH1cbiAgICA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGE6IGFueSA9IHBhcmFtcy5tZXRhID8/IHt9XG4gICAgICAgIGNvbnN0IGluc3RhbmNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG1ldGEuaW5zdGFuY2VJZFxuICAgICAgICBjb25zdCBvcFNlcTogbnVtYmVyID1cbiAgICAgICAgICB0eXBlb2YgbWV0YS5vcFNlcSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKG1ldGEub3BTZXEpID8gTWF0aC5mbG9vcihtZXRhLm9wU2VxKSA6IG5leHRPcFNlcSgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IG1ha2VJZChpbnN0YW5jZUlkLCBvcFNlcSksXG4gICAgICAgICAgbWV0YTogbWV0YS5vcFNlcSA9PT0gb3BTZXEgPyBtZXRhIDogeyAuLi5tZXRhLCBvcFNlcSB9LFxuICAgICAgICB9XG4gICAgICB9KSgpKSxcbiAga2luZDogcGFyYW1zLmtpbmQsXG4gIG5hbWU6IHBhcmFtcy5uYW1lLFxuICBwYXlsb2FkOiBwYXJhbXMucGF5bG9hZCxcbiAgZWZmZWN0OiBwYXJhbXMuZWZmZWN0LFxufSlcblxuLyoqXG4gKiBFZmZlY3RPcC5tYWtlSW5SdW5TZXNzaW9uXHVGRjFBXG4gKiAtIEFsbG9jYXRlIGEgc3RhYmxlIGBvcFNlcWAgd2l0aGluIGEgUnVuU2Vzc2lvbiBzY29wZSAocGVyLXNlc3Npb24gKyBwZXItaW5zdGFuY2UpLlxuICogLSBJZiBSdW5TZXNzaW9uIGlzIG1pc3NpbmcgZnJvbSBFbnYsIGZhbGwgYmFjayB0byBhIHByb2Nlc3Mtd2lkZSBtb25vdG9uaWMgc2VxdWVuY2UgKG5vIHByb2Nlc3Mtd2lkZSBNYXApLlxuICovXG5leHBvcnQgY29uc3QgbWFrZUluUnVuU2Vzc2lvbiA9IDxBLCBFLCBSPihwYXJhbXM6IHtcbiAgcmVhZG9ubHkga2luZDogRWZmZWN0T3BbJ2tpbmQnXVxuICByZWFkb25seSBuYW1lOiBzdHJpbmdcbiAgcmVhZG9ubHkgZWZmZWN0OiBFZmZlY3QuRWZmZWN0PEEsIEUsIFI+XG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duXG4gIHJlYWRvbmx5IG1ldGE/OiBFZmZlY3RPcFsnbWV0YSddXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nXG59KTogRWZmZWN0LkVmZmVjdDxFZmZlY3RPcDxBLCBFLCBSPiwgbmV2ZXIsIGFueT4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwYXJhbXMuaWQsXG4gICAgICAgIGtpbmQ6IHBhcmFtcy5raW5kLFxuICAgICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgICAgcGF5bG9hZDogcGFyYW1zLnBheWxvYWQsXG4gICAgICAgIG1ldGE6IHBhcmFtcy5tZXRhLFxuICAgICAgICBlZmZlY3Q6IHBhcmFtcy5lZmZlY3QsXG4gICAgICB9IHNhdGlzZmllcyBFZmZlY3RPcDxBLCBFLCBSPlxuICAgIH1cblxuICAgIGNvbnN0IG1ldGE6IGFueSA9IHBhcmFtcy5tZXRhID8/IHt9XG4gICAgY29uc3QgaW5zdGFuY2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gbWV0YS5pbnN0YW5jZUlkXG5cbiAgICBsZXQgb3BTZXE6IG51bWJlclxuICAgIGlmICh0eXBlb2YgbWV0YS5vcFNlcSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKG1ldGEub3BTZXEpKSB7XG4gICAgICBvcFNlcSA9IE1hdGguZmxvb3IobWV0YS5vcFNlcSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2Vzc2lvbk9wdCA9IHlpZWxkKiBFZmZlY3Quc2VydmljZU9wdGlvbihSdW5TZXNzaW9uVGFnKVxuICAgICAgaWYgKE9wdGlvbi5pc1NvbWUoc2Vzc2lvbk9wdCkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gaW5zdGFuY2VJZCA/PyAnZ2xvYmFsJ1xuICAgICAgICBvcFNlcSA9IHNlc3Npb25PcHQudmFsdWUubG9jYWwubmV4dFNlcSgnb3BTZXEnLCBrZXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcFNlcSA9IG5leHRPcFNlcSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBtYWtlSWQoaW5zdGFuY2VJZCwgb3BTZXEpLFxuICAgICAga2luZDogcGFyYW1zLmtpbmQsXG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIHBheWxvYWQ6IHBhcmFtcy5wYXlsb2FkLFxuICAgICAgbWV0YTogbWV0YS5vcFNlcSA9PT0gb3BTZXEgPyBtZXRhIDogeyAuLi5tZXRhLCBvcFNlcSB9LFxuICAgICAgZWZmZWN0OiBwYXJhbXMuZWZmZWN0LFxuICAgIH0gc2F0aXNmaWVzIEVmZmVjdE9wPEEsIEUsIFI+XG4gIH0pXG5cbi8qKlxuICogRWZmZWN0T3Aud2l0aE1ldGFcdUZGMUFcbiAqIC0gQXBwZW5kIG9yIG92ZXJyaWRlIG1ldGEgZmllbGRzIG9uIGFuIGV4aXN0aW5nIEVmZmVjdE9wLlxuICogLSBEb2VzIG5vdCBjaGFuZ2UgdGhlIGVmZmVjdCBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoTWV0YSA9IDxBLCBFLCBSPihcbiAgb3A6IEVmZmVjdE9wPEEsIEUsIFI+LFxuICBtZXRhOiBQYXJ0aWFsPE5vbk51bGxhYmxlPEVmZmVjdE9wWydtZXRhJ10+Pixcbik6IEVmZmVjdE9wPEEsIEUsIFI+ID0+ICh7XG4gIC4uLm9wLFxuICBtZXRhOiB7IC4uLihvcC5tZXRhID8/IHt9KSwgLi4ubWV0YSB9LFxufSlcblxuLyoqXG4gKiBFZmZlY3RPcC5ydW5cdUZGMUFcbiAqIC0gRXhlY3V0ZSBhbiBFZmZlY3RPcCB1c2luZyB0aGUgZ2l2ZW4gTWlkZGxld2FyZVN0YWNrLlxuICogLSBJZiB0aGUgc3RhY2sgaXMgZW1wdHksIHJldHVybiBvcC5lZmZlY3QgZGlyZWN0bHkuXG4gKi9cbmV4cG9ydCBjb25zdCBydW4gPSA8QSwgRSwgUj4ob3A6IEVmZmVjdE9wPEEsIEUsIFI+LCBzdGFjazogTWlkZGxld2FyZVN0YWNrKTogRWZmZWN0LkVmZmVjdDxBLCBFLCBSPiA9PlxuICBDb3JlLnJ1bldpdGhNaWRkbGV3YXJlKG9wLCBzdGFjaylcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFNBQVMsYUFBYTtBQThCL0IsSUFBTSxvQkFBTixjQUFnQyxRQUFRLElBQUksMEJBQTBCLEVBQWlDLEVBQUU7QUFBQztBQUVuRyxJQUFNLGdCQUFnQjtBQWE3QixJQUFNLG1CQUFtQix1QkFBTyxJQUFJLHFDQUFxQztBQUN6RSxJQUFJLHFCQUFxQjtBQUV6QixJQUFNLGFBQWEsTUFBYztBQUMvQixNQUFJO0FBRUYsVUFBTSxJQUFTO0FBQ2YsVUFBTSxPQUFPLE9BQU8sRUFBRSxnQkFBZ0IsTUFBTSxXQUFZLEVBQUUsZ0JBQWdC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LGNBQWMsYUFBYTtBQUM1RCxRQUFJLE9BQU8sT0FBTyxVQUFVLEdBQUc7QUFDN0IsWUFBTSxNQUFNLGNBQWM7QUFDMUIsY0FBUSxXQUFXLE1BQU0sTUFBTSxRQUFRLFNBQVMsR0FBRztBQUFBLElBQ3JELE9BQU87QUFDTCxjQUFRLFVBQVU7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQUEsSUFDTCxJQUFJLE9BQU8sWUFBWSxLQUFLO0FBQUEsSUFDNUIsTUFBTSxPQUFPO0FBQUEsSUFDYixNQUFNLE9BQU87QUFBQSxJQUNiLFNBQVMsT0FBTztBQUFBLElBQ2hCLE1BQU0sS0FBSyxVQUFVLFFBQVEsT0FBTyxFQUFFLEdBQUcsTUFBTSxNQUFNO0FBQUEsSUFDckQsUUFBUSxPQUFPO0FBQUEsRUFDakI7QUFDRixDQUFDO0FBT0ksSUFBTSxXQUFXLENBQ3RCLElBQ0EsVUFDdUI7QUFBQSxFQUN2QixHQUFHO0FBQUEsRUFDSCxNQUFNLEVBQUUsR0FBSSxHQUFHLFFBQVEsQ0FBQyxHQUFJLEdBQUcsS0FBSztBQUN0QztBQU9PLElBQU0sTUFBTSxDQUFVLElBQXVCLFVBQzdDLGtCQUFrQixJQUFJLEtBQUs7IiwKICAibmFtZXMiOiBbImNvbXBvc2VNaWRkbGV3YXJlIiwgIm1ha2VPcGVyYXRpb25SZWplY3RlZCJdCn0K
175
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJpbGl0eS9ydW5TZXNzaW9uLnRzIiwgIi4uLy4uLy4uLy4uL2xvZ2l4LWNvcmUvc3JjL2ludGVybmFsL2VmZmVjdC1vcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCwgTGF5ZXIgfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJy4vanNvblZhbHVlLmpzJ1xuaW1wb3J0IHR5cGUgeyBFdmlkZW5jZVBhY2thZ2UsIEV2aWRlbmNlUGFja2FnZVNvdXJjZSwgT2JzZXJ2YXRpb25FbnZlbG9wZSB9IGZyb20gJy4vZXZpZGVuY2UuanMnXG5pbXBvcnQgeyBleHBvcnRFdmlkZW5jZVBhY2thZ2UsIE9CU0VSVkFCSUxJVFlfUFJPVE9DT0xfVkVSU0lPTiB9IGZyb20gJy4vZXZpZGVuY2UuanMnXG5cbmV4cG9ydCB0eXBlIFJ1bklkID0gc3RyaW5nXG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU2Vzc2lvbkxvY2FsU3RhdGUge1xuICAvKipcbiAgICogb25jZTogYSBkZS1kdXAga2V5IHNldCBmb3IgXCJlbWl0IG9ubHkgb25jZVwiIGJlaGF2aW9yIChtdXN0IGJlIGlzb2xhdGVkIHBlciBzZXNzaW9uIHRvIGF2b2lkIGNyb3NzLXNlc3Npb24gcG9sbHV0aW9uKS5cbiAgICogUmV0dXJucyB0cnVlIGlmIGl0J3MgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGZhbHNlIGlmIHRoZSBrZXkgaGFzIGJlZW4gc2VlbiBiZWZvcmUuXG4gICAqL1xuICByZWFkb25seSBvbmNlOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW5cblxuICAvKipcbiAgICogc2VxOiBhbGxvY2F0ZSBtb25vdG9uaWMgc2VxdWVuY2VzIGJ5IGtleSAoZS5nLiBvcFNlcS9ldmVudFNlcSksIG11c3QgYmUgaXNvbGF0ZWQgcGVyIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBuZXh0U2VxOiAobmFtZXNwYWNlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiBudW1iZXJcblxuICAvKiogVGVzdHMvcmVzZXQgb25seTogY2xlYXIgdGhpcyBzZXNzaW9uJ3MgbG9jYWwgc3RhdGUuICovXG4gIHJlYWRvbmx5IGNsZWFyOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU2Vzc2lvbiB7XG4gIHJlYWRvbmx5IHJ1bklkOiBSdW5JZFxuICByZWFkb25seSBzb3VyY2U6IEV2aWRlbmNlUGFja2FnZVNvdXJjZVxuICByZWFkb25seSBzdGFydGVkQXQ6IG51bWJlclxuICByZWFkb25seSBsb2NhbDogUnVuU2Vzc2lvbkxvY2FsU3RhdGVcbn1cblxuY2xhc3MgUnVuU2Vzc2lvblRhZ0ltcGwgZXh0ZW5kcyBDb250ZXh0LlRhZygnQGxvZ2l4anMvY29yZS9SdW5TZXNzaW9uJyk8UnVuU2Vzc2lvblRhZ0ltcGwsIFJ1blNlc3Npb24+KCkge31cblxuZXhwb3J0IGNvbnN0IFJ1blNlc3Npb25UYWcgPSBSdW5TZXNzaW9uVGFnSW1wbFxuXG5leHBvcnQgaW50ZXJmYWNlIEV2aWRlbmNlU2luayB7XG4gIHJlYWRvbmx5IHJlY29yZDogKHR5cGU6IHN0cmluZywgcGF5bG9hZDogSnNvblZhbHVlLCBvcHRpb25zPzogeyByZWFkb25seSB0aW1lc3RhbXA/OiBudW1iZXIgfSkgPT4gdm9pZFxuICByZWFkb25seSBleHBvcnQ6IChvcHRpb25zPzoge1xuICAgIHJlYWRvbmx5IHByb3RvY29sVmVyc2lvbj86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRBdD86IG51bWJlclxuICAgIHJlYWRvbmx5IHN1bW1hcnk/OiBKc29uVmFsdWVcbiAgICByZWFkb25seSBtYXhFdmVudHM/OiBudW1iZXJcbiAgfSkgPT4gRXZpZGVuY2VQYWNrYWdlXG4gIHJlYWRvbmx5IGNsZWFyOiAoKSA9PiB2b2lkXG59XG5cbmNvbnN0IE5FWFRfUlVOX1NFUV9LRVkgPSBTeW1ib2wuZm9yKCdAbG9naXhqcy9jb3JlL3J1blNlc3Npb24vbmV4dFJ1blNlcScpXG5sZXQgZmFsbGJhY2tOZXh0UnVuU2VxID0gMFxuXG5jb25zdCBuZXh0UnVuU2VxID0gKCk6IG51bWJlciA9PiB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBnOiBhbnkgPSBnbG9iYWxUaGlzIGFzIGFueVxuICAgIGNvbnN0IHByZXYgPSB0eXBlb2YgZ1tORVhUX1JVTl9TRVFfS0VZXSA9PT0gJ251bWJlcicgPyAoZ1tORVhUX1JVTl9TRVFfS0VZXSBhcyBudW1iZXIpIDogMFxuICAgIGNvbnN0IG5leHQgPSBwcmV2ICsgMVxuICAgIGdbTkVYVF9SVU5fU0VRX0tFWV0gPSBuZXh0XG4gICAgcmV0dXJuIG5leHRcbiAgfSBjYXRjaCB7XG4gICAgZmFsbGJhY2tOZXh0UnVuU2VxICs9IDFcbiAgICByZXR1cm4gZmFsbGJhY2tOZXh0UnVuU2VxXG4gIH1cbn1cblxuY29uc3QgbWFrZVJ1bklkID0gKHN0YXJ0ZWRBdDogbnVtYmVyKTogUnVuSWQgPT4gYHJ1bi0ke3N0YXJ0ZWRBdH0uJHtuZXh0UnVuU2VxKCl9YFxuXG5leHBvcnQgY29uc3QgbWFrZVJ1blNlc3Npb25Mb2NhbFN0YXRlID0gKCk6IFJ1blNlc3Npb25Mb2NhbFN0YXRlID0+IHtcbiAgY29uc3Qgb25jZUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBjb25zdCBzZXFCeU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpXG5cbiAgcmV0dXJuIHtcbiAgICBvbmNlOiAoa2V5KSA9PiB7XG4gICAgICBpZiAob25jZUtleXMuaGFzKGtleSkpIHJldHVybiBmYWxzZVxuICAgICAgb25jZUtleXMuYWRkKGtleSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcbiAgICBuZXh0U2VxOiAobmFtZXNwYWNlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGJ5S2V5ID0gc2VxQnlOYW1lc3BhY2UuZ2V0KG5hbWVzcGFjZSkgPz8gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKVxuICAgICAgaWYgKCFzZXFCeU5hbWVzcGFjZS5oYXMobmFtZXNwYWNlKSkgc2VxQnlOYW1lc3BhY2Uuc2V0KG5hbWVzcGFjZSwgYnlLZXkpXG4gICAgICBjb25zdCBwcmV2ID0gYnlLZXkuZ2V0KGtleSkgPz8gMFxuICAgICAgY29uc3QgbmV4dCA9IHByZXYgKyAxXG4gICAgICBieUtleS5zZXQoa2V5LCBuZXh0KVxuICAgICAgcmV0dXJuIG5leHRcbiAgICB9LFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBvbmNlS2V5cy5jbGVhcigpXG4gICAgICBzZXFCeU5hbWVzcGFjZS5jbGVhcigpXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWFrZVJ1blNlc3Npb24gPSAob3B0aW9ucz86IHtcbiAgcmVhZG9ubHkgcnVuSWQ/OiBSdW5JZFxuICByZWFkb25seSBzb3VyY2U/OiBFdmlkZW5jZVBhY2thZ2VTb3VyY2VcbiAgcmVhZG9ubHkgc3RhcnRlZEF0PzogbnVtYmVyXG4gIHJlYWRvbmx5IGxvY2FsPzogUnVuU2Vzc2lvbkxvY2FsU3RhdGVcbn0pOiBSdW5TZXNzaW9uID0+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gb3B0aW9ucz8uc3RhcnRlZEF0ID8/IERhdGUubm93KClcbiAgcmV0dXJuIHtcbiAgICBydW5JZDogb3B0aW9ucz8ucnVuSWQgPz8gbWFrZVJ1bklkKHN0YXJ0ZWRBdCksXG4gICAgc291cmNlOiBvcHRpb25zPy5zb3VyY2UgPz8geyBob3N0OiAndW5rbm93bicgfSxcbiAgICBzdGFydGVkQXQsXG4gICAgbG9jYWw6IG9wdGlvbnM/LmxvY2FsID8/IG1ha2VSdW5TZXNzaW9uTG9jYWxTdGF0ZSgpLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYWtlRXZpZGVuY2VTaW5rID0gKHNlc3Npb246IFJ1blNlc3Npb24pOiBFdmlkZW5jZVNpbmsgPT4ge1xuICBjb25zdCBldmVudHM6IE9ic2VydmF0aW9uRW52ZWxvcGVbXSA9IFtdXG4gIGxldCBuZXh0U2VxID0gMVxuXG4gIHJldHVybiB7XG4gICAgcmVjb3JkOiAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykgPT4ge1xuICAgICAgZXZlbnRzLnB1c2goe1xuICAgICAgICBwcm90b2NvbFZlcnNpb246IE9CU0VSVkFCSUxJVFlfUFJPVE9DT0xfVkVSU0lPTixcbiAgICAgICAgcnVuSWQ6IHNlc3Npb24ucnVuSWQsXG4gICAgICAgIHNlcTogbmV4dFNlcSsrLFxuICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnM/LnRpbWVzdGFtcCA/PyBEYXRlLm5vdygpLFxuICAgICAgICB0eXBlLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIGV4cG9ydDogKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvY29sVmVyc2lvbiA9IG9wdGlvbnM/LnByb3RvY29sVmVyc2lvbiA/PyBPQlNFUlZBQklMSVRZX1BST1RPQ09MX1ZFUlNJT05cbiAgICAgIGNvbnN0IG1heEV2ZW50cyA9IG9wdGlvbnM/Lm1heEV2ZW50c1xuXG4gICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgIHR5cGVvZiBtYXhFdmVudHMgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShtYXhFdmVudHMpICYmIG1heEV2ZW50cyA+IDBcbiAgICAgICAgICA/IGV2ZW50cy5zbGljZShNYXRoLm1heCgwLCBldmVudHMubGVuZ3RoIC0gTWF0aC5mbG9vcihtYXhFdmVudHMpKSlcbiAgICAgICAgICA6IGV2ZW50cy5zbGljZSgpXG5cbiAgICAgIHJldHVybiBleHBvcnRFdmlkZW5jZVBhY2thZ2Uoe1xuICAgICAgICBwcm90b2NvbFZlcnNpb24sXG4gICAgICAgIHJ1bklkOiBzZXNzaW9uLnJ1bklkLFxuICAgICAgICBzb3VyY2U6IHNlc3Npb24uc291cmNlLFxuICAgICAgICBjcmVhdGVkQXQ6IG9wdGlvbnM/LmNyZWF0ZWRBdCxcbiAgICAgICAgZXZlbnRzOiBzZWxlY3RlZCxcbiAgICAgICAgc3VtbWFyeTogb3B0aW9ucz8uc3VtbWFyeSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgZXZlbnRzLmxlbmd0aCA9IDBcbiAgICAgIG5leHRTZXEgPSAxXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcnVuU2Vzc2lvbkxheWVyID0gKHNlc3Npb24/OiBSdW5TZXNzaW9uKTogTGF5ZXIuTGF5ZXI8UnVuU2Vzc2lvblRhZ0ltcGwsIG5ldmVyLCBuZXZlcj4gPT5cbiAgTGF5ZXIuc3VjY2VlZChSdW5TZXNzaW9uVGFnLCBzZXNzaW9uID8/IG1ha2VSdW5TZXNzaW9uKCkpIGFzIExheWVyLkxheWVyPFJ1blNlc3Npb25UYWdJbXBsLCBuZXZlciwgbmV2ZXI+XG4iLCAiLy8gSW50ZXJuYWwgRWZmZWN0T3AgQVBJIChmb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gY29kZSkuXG4vL1xuLy8gR29hbDpcbi8vIC0gSW50ZXJuYWwgbW9kdWxlcyBtdXN0IG5ldmVyIGltcG9ydCByb290IHB1YmxpYyBzdWJtb2R1bGVzIChlLmcuIGAuLi9FZmZlY3RPcGApLlxuLy8gLSBUaGlzIGZpbGUgaG9zdHMgdGhlIHNoYXJlZCBpbXBsZW1lbnRhdGlvbjsgcHVibGljIGBzcmMvRWZmZWN0T3AudHNgIGRlbGVnYXRlcyB0byBpdC5cblxuaW1wb3J0IHsgRWZmZWN0LCBPcHRpb24gfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gJy4vcnVudGltZS9jb3JlL0VmZmVjdE9wQ29yZS5qcydcbmltcG9ydCB7IFJ1blNlc3Npb25UYWcgfSBmcm9tICcuL29ic2VydmFiaWxpdHkvcnVuU2Vzc2lvbi5qcydcblxuZXhwb3J0IHR5cGUgRWZmZWN0T3A8T3V0ID0gdW5rbm93biwgRXJyID0gdW5rbm93biwgRW52ID0gdW5rbm93bj4gPSBDb3JlLkVmZmVjdE9wPE91dCwgRXJyLCBFbnY+XG5cbmV4cG9ydCB0eXBlIE9wZXJhdGlvblBvbGljeSA9IENvcmUuT3BlcmF0aW9uUG9saWN5XG5cbmV4cG9ydCB0eXBlIE9wZXJhdGlvblJlamVjdGVkID0gQ29yZS5PcGVyYXRpb25SZWplY3RlZFxuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25FcnJvcjxFPiA9IENvcmUuT3BlcmF0aW9uRXJyb3I8RT5cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZSA9IENvcmUuTWlkZGxld2FyZVxuXG5leHBvcnQgdHlwZSBNaWRkbGV3YXJlU3RhY2sgPSBDb3JlLk1pZGRsZXdhcmVTdGFja1xuXG5leHBvcnQgY29uc3QgY29tcG9zZU1pZGRsZXdhcmUgPSBDb3JlLmNvbXBvc2VNaWRkbGV3YXJlXG5cbmV4cG9ydCBjb25zdCBtYWtlT3BlcmF0aW9uUmVqZWN0ZWQgPSBDb3JlLm1ha2VPcGVyYXRpb25SZWplY3RlZFxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc3RhYmxlIGlkIGZvciBpZGVudGlmeWluZyBhbiBFZmZlY3RPcC5cbiAqIC0gVXNlcyBhIG1vbm90b25pYyBzZXF1ZW5jZSBieSBkZWZhdWx0IHRvIGF2b2lkIG5vbi1yZXBsYXlhYmlsaXR5IGZyb20gcmFuZG9tbmVzcy90aW1lLlxuICogLSBJZiBtZXRhLmluc3RhbmNlSWQgaXMgYXZhaWxhYmxlLCBwcmVmZXIgZGVyaXZpbmcgYCR7aW5zdGFuY2VJZH06Om8ke29wU2VxfWAuXG4gKi9cbmxldCBuZXh0R2xvYmFsT3BTZXEgPSAwXG5cbmNvbnN0IG5leHRPcFNlcSA9ICgpOiBudW1iZXIgPT4ge1xuICBuZXh0R2xvYmFsT3BTZXEgKz0gMVxuICByZXR1cm4gbmV4dEdsb2JhbE9wU2VxXG59XG5cbmNvbnN0IG1ha2VJZCA9IChpbnN0YW5jZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wU2VxOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgaW5zdGFuY2VJZCA/IGAke2luc3RhbmNlSWR9OjpvJHtvcFNlcX1gIDogYG8ke29wU2VxfWBcblxuLyoqXG4gKiBFZmZlY3RPcC5tYWtlXHVGRjFBXG4gKiAtIENyZWF0ZSBhbiBFZmZlY3RPcCB3aXRoIGJhc2ljIG1ldGEuXG4gKiAtIEdlbmVyYXRlcyBhIHN0YWJsZSBpZCBieSBkZWZhdWx0IChiYXNlZCBvbiBgaW5zdGFuY2VJZGAgKyBtb25vdG9uaWMgYG9wU2VxYCk7IGNhbGxlcnMgbWF5IG92ZXJyaWRlIGV4dGVybmFsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBtYWtlID0gPEEsIEUsIFI+KHBhcmFtczoge1xuICByZWFkb25seSBraW5kOiBFZmZlY3RPcFsna2luZCddXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICByZWFkb25seSBlZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj5cbiAgcmVhZG9ubHkgcGF5bG9hZD86IHVua25vd25cbiAgcmVhZG9ubHkgbWV0YT86IEVmZmVjdE9wWydtZXRhJ11cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmdcbn0pOiBFZmZlY3RPcDxBLCBFLCBSPiA9PiAoe1xuICAuLi4ocGFyYW1zLmlkXG4gICAgPyB7IGlkOiBwYXJhbXMuaWQsIG1ldGE6IHBhcmFtcy5tZXRhIH1cbiAgICA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGE6IGFueSA9IHBhcmFtcy5tZXRhID8/IHt9XG4gICAgICAgIGNvbnN0IGluc3RhbmNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG1ldGEuaW5zdGFuY2VJZFxuICAgICAgICBjb25zdCBvcFNlcTogbnVtYmVyID1cbiAgICAgICAgICB0eXBlb2YgbWV0YS5vcFNlcSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKG1ldGEub3BTZXEpID8gTWF0aC5mbG9vcihtZXRhLm9wU2VxKSA6IG5leHRPcFNlcSgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IG1ha2VJZChpbnN0YW5jZUlkLCBvcFNlcSksXG4gICAgICAgICAgbWV0YTogbWV0YS5vcFNlcSA9PT0gb3BTZXEgPyBtZXRhIDogeyAuLi5tZXRhLCBvcFNlcSB9LFxuICAgICAgICB9XG4gICAgICB9KSgpKSxcbiAga2luZDogcGFyYW1zLmtpbmQsXG4gIG5hbWU6IHBhcmFtcy5uYW1lLFxuICBwYXlsb2FkOiBwYXJhbXMucGF5bG9hZCxcbiAgZWZmZWN0OiBwYXJhbXMuZWZmZWN0LFxufSlcblxuLyoqXG4gKiBFZmZlY3RPcC5tYWtlSW5SdW5TZXNzaW9uXHVGRjFBXG4gKiAtIEFsbG9jYXRlIGEgc3RhYmxlIGBvcFNlcWAgd2l0aGluIGEgUnVuU2Vzc2lvbiBzY29wZSAocGVyLXNlc3Npb24gKyBwZXItaW5zdGFuY2UpLlxuICogLSBJZiBSdW5TZXNzaW9uIGlzIG1pc3NpbmcgZnJvbSBFbnYsIGZhbGwgYmFjayB0byBhIHByb2Nlc3Mtd2lkZSBtb25vdG9uaWMgc2VxdWVuY2UgKG5vIHByb2Nlc3Mtd2lkZSBNYXApLlxuICovXG5leHBvcnQgY29uc3QgbWFrZUluUnVuU2Vzc2lvbiA9IDxBLCBFLCBSPihwYXJhbXM6IHtcbiAgcmVhZG9ubHkga2luZDogRWZmZWN0T3BbJ2tpbmQnXVxuICByZWFkb25seSBuYW1lOiBzdHJpbmdcbiAgcmVhZG9ubHkgZWZmZWN0OiBFZmZlY3QuRWZmZWN0PEEsIEUsIFI+XG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duXG4gIHJlYWRvbmx5IG1ldGE/OiBFZmZlY3RPcFsnbWV0YSddXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nXG59KTogRWZmZWN0LkVmZmVjdDxFZmZlY3RPcDxBLCBFLCBSPiwgbmV2ZXIsIGFueT4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwYXJhbXMuaWQsXG4gICAgICAgIGtpbmQ6IHBhcmFtcy5raW5kLFxuICAgICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgICAgcGF5bG9hZDogcGFyYW1zLnBheWxvYWQsXG4gICAgICAgIG1ldGE6IHBhcmFtcy5tZXRhLFxuICAgICAgICBlZmZlY3Q6IHBhcmFtcy5lZmZlY3QsXG4gICAgICB9IHNhdGlzZmllcyBFZmZlY3RPcDxBLCBFLCBSPlxuICAgIH1cblxuICAgIGNvbnN0IG1ldGE6IGFueSA9IHBhcmFtcy5tZXRhID8/IHt9XG4gICAgY29uc3QgaW5zdGFuY2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gbWV0YS5pbnN0YW5jZUlkXG5cbiAgICBsZXQgb3BTZXE6IG51bWJlclxuICAgIGlmICh0eXBlb2YgbWV0YS5vcFNlcSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKG1ldGEub3BTZXEpKSB7XG4gICAgICBvcFNlcSA9IE1hdGguZmxvb3IobWV0YS5vcFNlcSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2Vzc2lvbk9wdCA9IHlpZWxkKiBFZmZlY3Quc2VydmljZU9wdGlvbihSdW5TZXNzaW9uVGFnKVxuICAgICAgaWYgKE9wdGlvbi5pc1NvbWUoc2Vzc2lvbk9wdCkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gaW5zdGFuY2VJZCA/PyAnZ2xvYmFsJ1xuICAgICAgICBvcFNlcSA9IHNlc3Npb25PcHQudmFsdWUubG9jYWwubmV4dFNlcSgnb3BTZXEnLCBrZXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcFNlcSA9IG5leHRPcFNlcSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBtYWtlSWQoaW5zdGFuY2VJZCwgb3BTZXEpLFxuICAgICAga2luZDogcGFyYW1zLmtpbmQsXG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIHBheWxvYWQ6IHBhcmFtcy5wYXlsb2FkLFxuICAgICAgbWV0YTogbWV0YS5vcFNlcSA9PT0gb3BTZXEgPyBtZXRhIDogeyAuLi5tZXRhLCBvcFNlcSB9LFxuICAgICAgZWZmZWN0OiBwYXJhbXMuZWZmZWN0LFxuICAgIH0gc2F0aXNmaWVzIEVmZmVjdE9wPEEsIEUsIFI+XG4gIH0pXG5cbi8qKlxuICogRWZmZWN0T3Aud2l0aE1ldGFcdUZGMUFcbiAqIC0gQXBwZW5kIG9yIG92ZXJyaWRlIG1ldGEgZmllbGRzIG9uIGFuIGV4aXN0aW5nIEVmZmVjdE9wLlxuICogLSBEb2VzIG5vdCBjaGFuZ2UgdGhlIGVmZmVjdCBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoTWV0YSA9IDxBLCBFLCBSPihcbiAgb3A6IEVmZmVjdE9wPEEsIEUsIFI+LFxuICBtZXRhOiBQYXJ0aWFsPE5vbk51bGxhYmxlPEVmZmVjdE9wWydtZXRhJ10+Pixcbik6IEVmZmVjdE9wPEEsIEUsIFI+ID0+ICh7XG4gIC4uLm9wLFxuICBtZXRhOiB7IC4uLihvcC5tZXRhID8/IHt9KSwgLi4ubWV0YSB9LFxufSlcblxuLyoqXG4gKiBFZmZlY3RPcC5ydW5cdUZGMUFcbiAqIC0gRXhlY3V0ZSBhbiBFZmZlY3RPcCB1c2luZyB0aGUgZ2l2ZW4gTWlkZGxld2FyZVN0YWNrLlxuICogLSBJZiB0aGUgc3RhY2sgaXMgZW1wdHksIHJldHVybiBvcC5lZmZlY3QgZGlyZWN0bHkuXG4gKi9cbmV4cG9ydCBjb25zdCBydW4gPSA8QSwgRSwgUj4ob3A6IEVmZmVjdE9wPEEsIEUsIFI+LCBzdGFjazogTWlkZGxld2FyZVN0YWNrKTogRWZmZWN0LkVmZmVjdDxBLCBFLCBSPiA9PlxuICBDb3JlLnJ1bldpdGhNaWRkbGV3YXJlKG9wLCBzdGFjaylcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxTQUFTLGFBQWE7QUE4Qi9CLElBQU0sb0JBQU4sY0FBZ0MsUUFBUSxJQUFJLDBCQUEwQixFQUFpQyxFQUFFO0FBQUM7QUFFbkcsSUFBTSxnQkFBZ0I7QUFhN0IsSUFBTSxtQkFBbUIsdUJBQU8sSUFBSSxxQ0FBcUM7QUFDekUsSUFBSSxxQkFBcUI7QUFFekIsSUFBTSxhQUFhLE1BQWM7QUFDL0IsTUFBSTtBQUVGLFVBQU0sSUFBUztBQUNmLFVBQU0sT0FBTyxPQUFPLEVBQUUsZ0JBQWdCLE1BQU0sV0FBWSxFQUFFLGdCQUFnQixJQUFlO0FBQ3pGLFVBQU0sT0FBTyxPQUFPO0FBQ3BCLE1BQUUsZ0JBQWdCLElBQUk7QUFDdEIsV0FBTztBQUFBLEVBQ1QsUUFBUTtBQUNOLDBCQUFzQjtBQUN0QixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBRUEsSUFBTSxZQUFZLENBQUMsY0FBNkIsT0FBTyxTQUFTLElBQUksV0FBVyxDQUFDO0FBRXpFLElBQU0sMkJBQTJCLE1BQTRCO0FBQ2xFLFFBQU0sV0FBVyxvQkFBSSxJQUFZO0FBQ2pDLFFBQU0saUJBQWlCLG9CQUFJLElBQWlDO0FBRTVELFNBQU87QUFBQSxJQUNMLE1BQU0sQ0FBQyxRQUFRO0FBQ2IsVUFBSSxTQUFTLElBQUksR0FBRyxFQUFHLFFBQU87QUFDOUIsZUFBUyxJQUFJLEdBQUc7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFNBQVMsQ0FBQyxXQUFXLFFBQVE7QUFDM0IsWUFBTSxRQUFRLGVBQWUsSUFBSSxTQUFTLEtBQUssb0JBQUksSUFBb0I7QUFDdkUsVUFBSSxDQUFDLGVBQWUsSUFBSSxTQUFTLEVBQUcsZ0JBQWUsSUFBSSxXQUFXLEtBQUs7QUFDdkUsWUFBTSxPQUFPLE1BQU0sSUFBSSxHQUFHLEtBQUs7QUFDL0IsWUFBTSxPQUFPLE9BQU87QUFDcEIsWUFBTSxJQUFJLEtBQUssSUFBSTtBQUNuQixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsT0FBTyxNQUFNO0FBQ1gsZUFBUyxNQUFNO0FBQ2YscUJBQWUsTUFBTTtBQUFBLElBQ3ZCO0FBQUEsRUFDRjtBQUNGO0FBRU8sSUFBTSxpQkFBaUIsQ0FBQyxZQUtiO0FBQ2hCLFFBQU0sWUFBWSxTQUFTLGFBQWEsS0FBSyxJQUFJO0FBQ2pELFNBQU87QUFBQSxJQUNMLE9BQU8sU0FBUyxTQUFTLFVBQVUsU0FBUztBQUFBLElBQzVDLFFBQVEsU0FBUyxVQUFVLEVBQUUsTUFBTSxVQUFVO0FBQUEsSUFDN0M7QUFBQSxJQUNBLE9BQU8sU0FBUyxTQUFTLHlCQUF5QjtBQUFBLEVBQ3BEO0FBQ0Y7QUFFTyxJQUFNLG1CQUFtQixDQUFDLFlBQXNDO0FBQ3JFLFFBQU0sU0FBZ0MsQ0FBQztBQUN2QyxNQUFJLFVBQVU7QUFFZCxTQUFPO0FBQUEsSUFDTCxRQUFRLENBQUMsTUFBTSxTQUFTLFlBQVk7QUFDbEMsYUFBTyxLQUFLO0FBQUEsUUFDVixpQkFBaUI7QUFBQSxRQUNqQixPQUFPLFFBQVE7QUFBQSxRQUNmLEtBQUs7QUFBQSxRQUNMLFdBQVcsU0FBUyxhQUFhLEtBQUssSUFBSTtBQUFBLFFBQzFDO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUNBLFFBQVEsQ0FBQyxZQUFZO0FBQ25CLFlBQU0sa0JBQWtCLFNBQVMsbUJBQW1CO0FBQ3BELFlBQU0sWUFBWSxTQUFTO0FBRTNCLFlBQU0sV0FDSixPQUFPLGNBQWMsWUFBWSxPQUFPLFNBQVMsU0FBUyxLQUFLLFlBQVksSUFDdkUsT0FBTyxNQUFNLEtBQUssSUFBSSxHQUFHLE9BQU8sU0FBUyxLQUFLLE1BQU0sU0FBUyxDQUFDLENBQUMsSUFDL0QsT0FBTyxNQUFNO0FBRW5CLGFBQU8sc0JBQXNCO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE9BQU8sUUFBUTtBQUFBLFFBQ2YsUUFBUSxRQUFRO0FBQUEsUUFDaEIsV0FBVyxTQUFTO0FBQUEsUUFDcEIsUUFBUTtBQUFBLFFBQ1IsU0FBUyxTQUFTO0FBQUEsTUFDcEIsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUNBLE9BQU8sTUFBTTtBQUNYLGFBQU8sU0FBUztBQUNoQixnQkFBVTtBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0Y7QUFFTyxJQUFNLGtCQUFrQixDQUFDLFlBQzlCLE1BQU0sUUFBUSxlQUFlLFdBQVcsZUFBZSxDQUFDOzs7QUMzSTFELFNBQVMsUUFBUSxjQUFjO0FBZ0J4QixJQUFNQSxxQkFBeUI7QUFFL0IsSUFBTUMseUJBQTZCO0FBTzFDLElBQUksa0JBQWtCO0FBRXRCLElBQU0sWUFBWSxNQUFjO0FBQzlCLHFCQUFtQjtBQUNuQixTQUFPO0FBQ1Q7QUFFQSxJQUFNLFNBQVMsQ0FBQyxZQUFnQyxVQUM5QyxhQUFhLEdBQUcsVUFBVSxNQUFNLEtBQUssS0FBSyxJQUFJLEtBQUs7QUFPOUMsSUFBTSxPQUFPLENBQVUsWUFPSjtBQUFBLEVBQ3hCLEdBQUksT0FBTyxLQUNQLEVBQUUsSUFBSSxPQUFPLElBQUksTUFBTSxPQUFPLEtBQUssS0FDbEMsTUFBTTtBQUNMLFVBQU0sT0FBWSxPQUFPLFFBQVEsQ0FBQztBQUNsQyxVQUFNLGFBQWlDLEtBQUs7QUFDNUMsVUFBTSxRQUNKLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxTQUFTLEtBQUssS0FBSyxJQUFJLEtBQUssTUFBTSxLQUFLLEtBQUssSUFBSSxVQUFVO0FBQ3JHLFdBQU87QUFBQSxNQUNMLElBQUksT0FBTyxZQUFZLEtBQUs7QUFBQSxNQUM1QixNQUFNLEtBQUssVUFBVSxRQUFRLE9BQU8sRUFBRSxHQUFHLE1BQU0sTUFBTTtBQUFBLElBQ3ZEO0FBQUEsRUFDRixHQUFHO0FBQUEsRUFDUCxNQUFNLE9BQU87QUFBQSxFQUNiLE1BQU0sT0FBTztBQUFBLEVBQ2IsU0FBUyxPQUFPO0FBQUEsRUFDaEIsUUFBUSxPQUFPO0FBQ2pCO0FBT08sSUFBTSxtQkFBbUIsQ0FBVSxXQVF4QyxPQUFPLElBQUksYUFBYTtBQUN0QixNQUFJLE9BQU8sSUFBSTtBQUNiLFdBQU87QUFBQSxNQUNMLElBQUksT0FBTztBQUFBLE1BQ1gsTUFBTSxPQUFPO0FBQUEsTUFDYixNQUFNLE9BQU87QUFBQSxNQUNiLFNBQVMsT0FBTztBQUFBLE1BQ2hCLE1BQU0sT0FBTztBQUFBLE1BQ2IsUUFBUSxPQUFPO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBRUEsUUFBTSxPQUFZLE9BQU8sUUFBUSxDQUFDO0FBQ2xDLFFBQU0sYUFBaUMsS0FBSztBQUU1QyxNQUFJO0FBQ0osTUFBSSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sU0FBUyxLQUFLLEtBQUssR0FBRztBQUNqRSxZQUFRLEtBQUssTUFBTSxLQUFLLEtBQUs7QUFBQSxFQUMvQixPQUFPO0FBQ0wsVUFBTSxhQUFhLE9BQU8sT0FBTyxjQUFjLGFBQWE7QUFDNUQsUUFBSSxPQUFPLE9BQU8sVUFBVSxHQUFHO0FBQzdCLFlBQU0sTUFBTSxjQUFjO0FBQzFCLGNBQVEsV0FBVyxNQUFNLE1BQU0sUUFBUSxTQUFTLEdBQUc7QUFBQSxJQUNyRCxPQUFPO0FBQ0wsY0FBUSxVQUFVO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0wsSUFBSSxPQUFPLFlBQVksS0FBSztBQUFBLElBQzVCLE1BQU0sT0FBTztBQUFBLElBQ2IsTUFBTSxPQUFPO0FBQUEsSUFDYixTQUFTLE9BQU87QUFBQSxJQUNoQixNQUFNLEtBQUssVUFBVSxRQUFRLE9BQU8sRUFBRSxHQUFHLE1BQU0sTUFBTTtBQUFBLElBQ3JELFFBQVEsT0FBTztBQUFBLEVBQ2pCO0FBQ0YsQ0FBQztBQU9JLElBQU0sV0FBVyxDQUN0QixJQUNBLFVBQ3VCO0FBQUEsRUFDdkIsR0FBRztBQUFBLEVBQ0gsTUFBTSxFQUFFLEdBQUksR0FBRyxRQUFRLENBQUMsR0FBSSxHQUFHLEtBQUs7QUFDdEM7QUFPTyxJQUFNLE1BQU0sQ0FBVSxJQUF1QixVQUM3QyxrQkFBa0IsSUFBSSxLQUFLOyIsCiAgIm5hbWVzIjogWyJjb21wb3NlTWlkZGxld2FyZSIsICJtYWtlT3BlcmF0aW9uUmVqZWN0ZWQiXQp9Cg==