@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.
- package/LICENSE +201 -0
- package/package.json +3 -1
- package/public/sandbox/chunks/chunk-2AUQRESB.js +1114 -0
- package/public/sandbox/chunks/chunk-2F72LQKW.js +194 -0
- package/public/sandbox/chunks/chunk-2PYDGDD3.js +4071 -0
- package/public/sandbox/chunks/chunk-2UGKSXDZ.js +16 -0
- package/public/sandbox/chunks/chunk-2XVE7F26.js +153 -0
- package/public/sandbox/chunks/chunk-3A7TFNZN.js +219 -0
- package/public/sandbox/chunks/chunk-3BHC6JAV.js +1070 -0
- package/public/sandbox/chunks/chunk-3U4CAKCX.js +61 -0
- package/public/sandbox/chunks/chunk-3VU3JLZO.js +272 -0
- package/public/sandbox/chunks/chunk-4CPONKWY.js +1170 -0
- package/public/sandbox/chunks/chunk-4GMUQTWH.js +850 -0
- package/public/sandbox/chunks/chunk-4KIYG5E4.js +749 -0
- package/public/sandbox/chunks/chunk-4MY35XR3.js +175 -0
- package/public/sandbox/chunks/chunk-5DNHJMHA.js +69 -0
- package/public/sandbox/chunks/chunk-5EC4S7X6.js +42 -0
- package/public/sandbox/chunks/chunk-5FB7QFSH.js +227 -0
- package/public/sandbox/chunks/chunk-5GEYCJW2.js +206 -0
- package/public/sandbox/chunks/chunk-5PT7Q5SS.js +373 -0
- package/public/sandbox/chunks/chunk-5WN5IGKA.js +166 -0
- package/public/sandbox/chunks/chunk-5XOBKSOT.js +213 -0
- package/public/sandbox/chunks/chunk-67RVISUC.js +313 -0
- package/public/sandbox/chunks/chunk-6ELJEKZS.js +12 -0
- package/public/sandbox/chunks/chunk-6FKWRVP4.js +85 -0
- package/public/sandbox/chunks/chunk-6JRP52YT.js +34 -0
- package/public/sandbox/chunks/chunk-6JYAC3G6.js +42 -0
- package/public/sandbox/chunks/chunk-6TUOP63Q.js +86 -0
- package/public/sandbox/chunks/{chunk-A6JFUNQQ.js → chunk-74C5VW7Z.js} +2 -2
- package/public/sandbox/chunks/chunk-75DQFC5M.js +16 -0
- package/public/sandbox/chunks/{chunk-UCFEP3BH.js → chunk-7GPAF2UK.js} +1 -1
- package/public/sandbox/chunks/chunk-7KQFTS2Y.js +135 -0
- package/public/sandbox/chunks/chunk-7POKWYE3.js +112 -0
- package/public/sandbox/chunks/chunk-7VUEF5F3.js +395 -0
- package/public/sandbox/chunks/chunk-7W5APZS2.js +77 -0
- package/public/sandbox/chunks/chunk-A6OFCXDQ.js +397 -0
- package/public/sandbox/chunks/chunk-A7HLOSO6.js +216 -0
- package/public/sandbox/chunks/chunk-AGF4RRCB.js +408 -0
- package/public/sandbox/chunks/chunk-ASJSJAAL.js +122 -0
- package/public/sandbox/chunks/chunk-ASVMK364.js +283 -0
- package/public/sandbox/chunks/chunk-AUDTI2BQ.js +895 -0
- package/public/sandbox/chunks/chunk-B2SZTA3M.js +16 -0
- package/public/sandbox/chunks/chunk-B6YS2UMV.js +372 -0
- package/public/sandbox/chunks/chunk-BCEO3MGD.js +244 -0
- package/public/sandbox/chunks/chunk-BCOO65D4.js +373 -0
- package/public/sandbox/chunks/chunk-BJOWSSEL.js +38 -0
- package/public/sandbox/chunks/chunk-BS2WBFW4.js +373 -0
- package/public/sandbox/chunks/chunk-BUVHG3NJ.js +439 -0
- package/public/sandbox/chunks/chunk-BVE33AN6.js +42 -0
- package/public/sandbox/chunks/chunk-BWTGJZVP.js +19 -0
- package/public/sandbox/chunks/chunk-BXD7GZC3.js +1025 -0
- package/public/sandbox/chunks/chunk-BZH4EUUD.js +164 -0
- package/public/sandbox/chunks/{chunk-HFV5GJPK.js → chunk-C2MYMMO4.js} +3 -3
- package/public/sandbox/chunks/chunk-CRE4NJJ6.js +271 -0
- package/public/sandbox/chunks/chunk-CVZPRIDB.js +706 -0
- package/public/sandbox/chunks/chunk-CWOXD5NG.js +991 -0
- package/public/sandbox/chunks/chunk-D6DOC3BJ.js +373 -0
- package/public/sandbox/chunks/chunk-DEPSGFSY.js +1698 -0
- package/public/sandbox/chunks/chunk-DM7C5NP5.js +819 -0
- package/public/sandbox/chunks/chunk-DN33LMOF.js +1112 -0
- package/public/sandbox/chunks/{chunk-S46P7MC6.js → chunk-DT7YIIWE.js} +2 -2
- package/public/sandbox/chunks/chunk-DVB5WRCI.js +260 -0
- package/public/sandbox/chunks/{chunk-TOHCFMQS.js → chunk-E3EVW7NR.js} +11 -18
- package/public/sandbox/chunks/chunk-E5BV567Q.js +417 -0
- package/public/sandbox/chunks/chunk-E7BIWMQQ.js +203 -0
- package/public/sandbox/chunks/chunk-EAKGPSOQ.js +83 -0
- package/public/sandbox/chunks/chunk-EGUYL2ER.js +75 -0
- package/public/sandbox/chunks/chunk-EP5GQYZ5.js +85 -0
- package/public/sandbox/chunks/chunk-ET6CJEHC.js +221 -0
- package/public/sandbox/chunks/chunk-EU67YZHZ.js +1070 -0
- package/public/sandbox/chunks/{chunk-PTSJJANP.js → chunk-EYNDQLSB.js} +1 -1
- package/public/sandbox/chunks/{chunk-CEGSWZ5S.js → chunk-EZTMVCJF.js} +1 -1
- package/public/sandbox/chunks/chunk-F5CLVIS6.js +907 -0
- package/public/sandbox/chunks/chunk-F743SKYD.js +85 -0
- package/public/sandbox/chunks/chunk-FEGFZ5OX.js +86 -0
- package/public/sandbox/chunks/chunk-FG5B7ZX3.js +373 -0
- package/public/sandbox/chunks/chunk-FKZPYMDG.js +373 -0
- package/public/sandbox/chunks/chunk-FNLXHWIU.js +220 -0
- package/public/sandbox/chunks/chunk-FQRUTYAD.js +1991 -0
- package/public/sandbox/chunks/{chunk-VLYP4WUS.js → chunk-FY5A73NK.js} +5 -5
- package/public/sandbox/chunks/chunk-G7FAOG3O.js +221 -0
- package/public/sandbox/chunks/chunk-GFXHUC7Y.js +73 -0
- package/public/sandbox/chunks/chunk-GIPXUIZQ.js +534 -0
- package/public/sandbox/chunks/chunk-GP37MEGJ.js +52 -0
- package/public/sandbox/chunks/chunk-GXL5QCMF.js +4511 -0
- package/public/sandbox/chunks/chunk-GZ2NSE6A.js +177 -0
- package/public/sandbox/chunks/chunk-GZATW4YD.js +69 -0
- package/public/sandbox/chunks/chunk-H4EBXROQ.js +166 -0
- package/public/sandbox/chunks/chunk-HETCPK6Z.js +153 -0
- package/public/sandbox/chunks/chunk-HGUFQ2QC.js +4431 -0
- package/public/sandbox/chunks/chunk-HGV3VNH3.js +255 -0
- package/public/sandbox/chunks/chunk-HIJ67QWR.js +5397 -0
- package/public/sandbox/chunks/chunk-IDHERBKW.js +1114 -0
- package/public/sandbox/chunks/chunk-IDTK4FIY.js +102 -0
- package/public/sandbox/chunks/chunk-ILFVY7H5.js +164 -0
- package/public/sandbox/chunks/chunk-ISGSRYGO.js +57 -0
- package/public/sandbox/chunks/chunk-J45VPU24.js +408 -0
- package/public/sandbox/chunks/chunk-JAUIM3O5.js +42 -0
- package/public/sandbox/chunks/chunk-JB7OQEM6.js +373 -0
- package/public/sandbox/chunks/chunk-JCKW6NHD.js +15 -0
- package/public/sandbox/chunks/chunk-JMA7GY7Z.js +221 -0
- package/public/sandbox/chunks/chunk-JY46J6IL.js +836 -0
- package/public/sandbox/chunks/{chunk-X72PZOFA.js → chunk-K2MQ66O7.js} +1 -1
- package/public/sandbox/chunks/chunk-KA7PZA6F.js +464 -0
- package/public/sandbox/chunks/chunk-KDEQTUID.js +102 -0
- package/public/sandbox/chunks/chunk-KDJR27JV.js +1696 -0
- package/public/sandbox/chunks/chunk-KFE3JO6N.js +77 -0
- package/public/sandbox/chunks/chunk-KLDSYWT5.js +536 -0
- package/public/sandbox/chunks/chunk-KQWWFYBF.js +203 -0
- package/public/sandbox/chunks/chunk-KTFZSXOW.js +6473 -0
- package/public/sandbox/chunks/chunk-KXVIC55U.js +108 -0
- package/public/sandbox/chunks/{chunk-HNEDTEGQ.js → chunk-L4PNO2H6.js} +1 -1
- package/public/sandbox/chunks/{chunk-WE4STGO2.js → chunk-L4ZNW5DI.js} +2 -2
- package/public/sandbox/chunks/chunk-LBUINGZ4.js +836 -0
- package/public/sandbox/chunks/chunk-LIYPPU6I.js +112 -0
- package/public/sandbox/chunks/chunk-LJHTOJXW.js +221 -0
- package/public/sandbox/chunks/{chunk-BWSNPKO5.js → chunk-LQL23SWJ.js} +2 -2
- package/public/sandbox/chunks/chunk-LTFCYZQ6.js +46 -0
- package/public/sandbox/chunks/chunk-LTWLVCKQ.js +166 -0
- package/public/sandbox/chunks/chunk-LWI7BXFN.js +395 -0
- package/public/sandbox/chunks/chunk-LYBBX6WM.js +225 -0
- package/public/sandbox/chunks/chunk-MXE7HIBM.js +474 -0
- package/public/sandbox/chunks/chunk-MYBDYNK4.js +6004 -0
- package/public/sandbox/chunks/chunk-NC2MIWZX.js +732 -0
- package/public/sandbox/chunks/chunk-NE447XAF.js +597 -0
- package/public/sandbox/chunks/chunk-NEAYV5C2.js +255 -0
- package/public/sandbox/chunks/chunk-NMGFJZ4I.js +26 -0
- package/public/sandbox/chunks/chunk-NWCJJZNQ.js +71 -0
- package/public/sandbox/chunks/chunk-O57OZBDR.js +214 -0
- package/public/sandbox/chunks/chunk-OJJT664Q.js +731 -0
- package/public/sandbox/chunks/chunk-OKTBUTCH.js +1175 -0
- package/public/sandbox/chunks/chunk-OQ4SYV5D.js +534 -0
- package/public/sandbox/chunks/chunk-OTVVIHJD.js +219 -0
- package/public/sandbox/chunks/chunk-OWTMSCF7.js +1052 -0
- package/public/sandbox/chunks/chunk-P5ZQNFC3.js +122 -0
- package/public/sandbox/chunks/chunk-PBPT2U2N.js +1698 -0
- package/public/sandbox/chunks/chunk-PHBJLCP3.js +836 -0
- package/public/sandbox/chunks/chunk-PHV4HYHB.js +397 -0
- package/public/sandbox/chunks/chunk-PIXQ6SOX.js +4071 -0
- package/public/sandbox/chunks/chunk-PKJL6YLK.js +73 -0
- package/public/sandbox/chunks/chunk-PKPOITIU.js +221 -0
- package/public/sandbox/chunks/{chunk-NQW73ACJ.js → chunk-PMXBOYQI.js} +1 -1
- package/public/sandbox/chunks/chunk-PQLZD7NR.js +836 -0
- package/public/sandbox/chunks/chunk-QEESVOZU.js +16 -0
- package/public/sandbox/chunks/chunk-QGIM3FQK.js +159 -0
- package/public/sandbox/chunks/chunk-QL5JNEDO.js +69 -0
- package/public/sandbox/chunks/chunk-QQOZ3RMH.js +867 -0
- package/public/sandbox/chunks/chunk-QUMEVT2F.js +194 -0
- package/public/sandbox/chunks/chunk-QVZBXYVY.js +102 -0
- package/public/sandbox/chunks/chunk-R5HQS6RB.js +135 -0
- package/public/sandbox/chunks/chunk-R75Q2CTT.js +900 -0
- package/public/sandbox/chunks/chunk-RBB6SHW2.js +253 -0
- package/public/sandbox/chunks/chunk-RDHNRWQP.js +383 -0
- package/public/sandbox/chunks/chunk-RIWOEI3T.js +1101 -0
- package/public/sandbox/chunks/chunk-RS5FFPUV.js +103 -0
- package/public/sandbox/chunks/chunk-RYSSJBGX.js +203 -0
- package/public/sandbox/chunks/chunk-S3KBAE5Z.js +1114 -0
- package/public/sandbox/chunks/chunk-S6ZZHV6G.js +244 -0
- package/public/sandbox/chunks/chunk-SFXJ24HY.js +499 -0
- package/public/sandbox/chunks/chunk-SH7TP5CJ.js +1109 -0
- package/public/sandbox/chunks/chunk-SI5OKFFY.js +317 -0
- package/public/sandbox/chunks/chunk-SIXNQNIR.js +86 -0
- package/public/sandbox/chunks/chunk-ST353BOX.js +42 -0
- package/public/sandbox/chunks/chunk-SYEHKMLP.js +1140 -0
- package/public/sandbox/chunks/chunk-SZ4KQUJU.js +69 -0
- package/public/sandbox/chunks/{chunk-5SOP6EKV.js → chunk-SZI65PSP.js} +5 -10
- package/public/sandbox/chunks/chunk-T7RLTSMX.js +78 -0
- package/public/sandbox/chunks/chunk-TJ2RLUTW.js +57 -0
- package/public/sandbox/chunks/chunk-TJB73XPN.js +4071 -0
- package/public/sandbox/chunks/chunk-TXJCYO56.js +4046 -0
- package/public/sandbox/chunks/chunk-U5J3LCYI.js +731 -0
- package/public/sandbox/chunks/chunk-UABFN3NH.js +208 -0
- package/public/sandbox/chunks/chunk-UBMUY7WO.js +13 -0
- package/public/sandbox/chunks/chunk-UC27CE32.js +69 -0
- package/public/sandbox/chunks/chunk-UJGVDFZN.js +147 -0
- package/public/sandbox/chunks/chunk-UNVLTK4N.js +122 -0
- package/public/sandbox/chunks/chunk-UQKQ6V3V.js +208 -0
- package/public/sandbox/chunks/chunk-UZZBHWIO.js +703 -0
- package/public/sandbox/chunks/chunk-VKZIJERL.js +1114 -0
- package/public/sandbox/chunks/chunk-VQQEAGID.js +372 -0
- package/public/sandbox/chunks/{chunk-3LX3KIQQ.js → chunk-W365QUZ5.js} +3 -5
- package/public/sandbox/chunks/chunk-WJY2LSWG.js +1052 -0
- package/public/sandbox/chunks/chunk-WNOBN3DX.js +391 -0
- package/public/sandbox/chunks/chunk-X2Z5VYG3.js +245 -0
- package/public/sandbox/chunks/chunk-X74KU74D.js +959 -0
- package/public/sandbox/chunks/chunk-XE7ULSGQ.js +46 -0
- package/public/sandbox/chunks/chunk-XRXUJZ3X.js +431 -0
- package/public/sandbox/chunks/chunk-XWHIN7CC.js +85 -0
- package/public/sandbox/chunks/chunk-Y2TVGGVL.js +527 -0
- package/public/sandbox/chunks/chunk-YMVMZA3U.js +1395 -0
- package/public/sandbox/chunks/chunk-YOBLFWDV.js +431 -0
- package/public/sandbox/chunks/chunk-YR2RFEZA.js +11 -0
- package/public/sandbox/chunks/chunk-YTD6A35P.js +836 -0
- package/public/sandbox/chunks/chunk-Z5L7EZXS.js +81 -0
- package/public/sandbox/chunks/chunk-Z65I5ET2.js +108 -0
- package/public/sandbox/chunks/chunk-Z6LV34RO.js +390 -0
- package/public/sandbox/chunks/chunk-ZAKUP6QG.js +1634 -0
- package/public/sandbox/chunks/chunk-ZHNYE2YH.js +731 -0
- package/public/sandbox/chunks/chunk-ZHQX3B3Y.js +867 -0
- package/public/sandbox/chunks/chunk-ZIXDFRHJ.js +731 -0
- package/public/sandbox/chunks/chunk-ZPZ2MZ4D.js +528 -0
- package/public/sandbox/chunks/chunk-ZQD6NZXB.js +373 -0
- package/public/sandbox/chunks/chunk-ZVVBP7ON.js +16 -0
- package/public/sandbox/chunks/chunk-ZWE3P6X2.js +11 -0
- package/public/sandbox/logix-core/Bound.js +14 -14
- package/public/sandbox/logix-core/Debug.js +12 -10
- package/public/sandbox/logix-core/EffectOp.js +3 -4
- package/public/sandbox/logix-core/Env.js +5 -2
- package/public/sandbox/logix-core/ExternalStore.js +239 -0
- package/public/sandbox/logix-core/Flow.js +7 -8
- package/public/sandbox/logix-core/Kernel.js +7 -4
- package/public/sandbox/logix-core/Link.js +33 -25
- package/public/sandbox/logix-core/Middleware.js +13 -11
- package/public/sandbox/logix-core/Module.js +93 -30
- package/public/sandbox/logix-core/ModuleTag.js +28 -25
- package/public/sandbox/logix-core/Observability.js +21 -19
- package/public/sandbox/logix-core/Process.js +27 -22
- package/public/sandbox/logix-core/ReadQuery.js +7 -11
- package/public/sandbox/logix-core/Reflection.js +173 -53
- package/public/sandbox/logix-core/Resource.js +6 -3
- package/public/sandbox/logix-core/Root.js +7 -3
- package/public/sandbox/logix-core/Runtime.js +54 -40
- package/public/sandbox/logix-core/ScopeRegistry.js +6 -3
- package/public/sandbox/logix-core/StateTrait.js +17 -14
- package/public/sandbox/logix-core/TraitLifecycle.js +8 -8
- package/public/sandbox/logix-core/Workflow.js +332 -0
- package/public/sandbox/logix-core.js +11133 -6622
- package/public/sandbox/logix-core.manifest.json +4 -2
- package/public/sandbox/worker.js +3 -3
- package/public/sandbox/chunks/chunk-4LRLOTMA.js +0 -1698
- package/public/sandbox/chunks/chunk-CDLXJHXY.js +0 -120
- package/public/sandbox/chunks/chunk-CZRI7MHA.js +0 -46
- package/public/sandbox/chunks/chunk-EJDFUZ4B.js +0 -408
- package/public/sandbox/chunks/chunk-IP63FME6.js +0 -282
- package/public/sandbox/chunks/chunk-JIXTOQXJ.js +0 -1103
- package/public/sandbox/chunks/chunk-MPUSOFJ3.js +0 -1928
- package/public/sandbox/chunks/chunk-ON2LY6HJ.js +0 -135
- package/public/sandbox/chunks/chunk-POIBXAH5.js +0 -995
- package/public/sandbox/chunks/chunk-PQ652ULI.js +0 -6359
- package/public/sandbox/chunks/chunk-RJQ4PG2F.js +0 -77
- package/public/sandbox/chunks/chunk-S4EXG3OS.js +0 -533
- package/public/sandbox/chunks/chunk-SUXDGXVE.js +0 -390
- package/public/sandbox/chunks/chunk-TOQ6SJ6O.js +0 -244
- package/public/sandbox/chunks/chunk-UKYAF3NL.js +0 -1036
- package/public/sandbox/chunks/chunk-UMVN3AWO.js +0 -395
- package/public/sandbox/chunks/chunk-WFV5PPWJ.js +0 -194
- package/public/sandbox/chunks/chunk-YF6IO732.js +0 -206
- package/public/sandbox/chunks/chunk-ZUBABAAO.js +0 -86
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// @logix/core subpath bundles for @logix/sandbox
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
OBSERVABILITY_PROTOCOL_VERSION,
|
|
5
|
+
exportEvidencePackage
|
|
6
|
+
} from "./chunk-Z5L7EZXS.js";
|
|
7
|
+
|
|
8
|
+
// ../logix-core/src/internal/runtime/core/EffectOpCore.ts
|
|
9
|
+
import { Context, Effect, FiberRef } from "../effect.js";
|
|
10
|
+
var currentLinkId = FiberRef.unsafeMake(void 0);
|
|
11
|
+
var makeOperationRejected = (params) => ({
|
|
12
|
+
_tag: "OperationRejected",
|
|
13
|
+
message: params.message,
|
|
14
|
+
kind: params.kind,
|
|
15
|
+
name: params.name,
|
|
16
|
+
linkId: params.linkId,
|
|
17
|
+
details: params.details
|
|
18
|
+
});
|
|
19
|
+
var EffectOpMiddlewareTag = class extends Context.Tag(
|
|
20
|
+
"Logix/EffectOpMiddleware"
|
|
21
|
+
)() {
|
|
22
|
+
};
|
|
23
|
+
var composeMiddleware = (stack) => {
|
|
24
|
+
return (op) => stack.reduceRight(
|
|
25
|
+
(eff, mw) => mw({ ...op, effect: eff }),
|
|
26
|
+
op.effect
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
var runWithMiddleware = (op, stack) => {
|
|
30
|
+
return Effect.gen(function* () {
|
|
31
|
+
const existing = yield* FiberRef.get(currentLinkId);
|
|
32
|
+
const metaLinkId = op.meta?.linkId;
|
|
33
|
+
const linkId = typeof metaLinkId === "string" && metaLinkId.length > 0 ? metaLinkId : existing ?? op.id;
|
|
34
|
+
const nextOp = {
|
|
35
|
+
...op,
|
|
36
|
+
meta: {
|
|
37
|
+
...op.meta ?? {},
|
|
38
|
+
linkId
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const program = stack.length ? composeMiddleware(stack)(nextOp) : nextOp.effect;
|
|
42
|
+
return yield* Effect.locally(currentLinkId, linkId)(program);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// ../logix-core/src/internal/observability/runSession.ts
|
|
47
|
+
import { Context as Context2, Layer } from "../effect.js";
|
|
48
|
+
var RunSessionTagImpl = class extends Context2.Tag(
|
|
49
|
+
"@logix/core/RunSession"
|
|
50
|
+
)() {
|
|
51
|
+
};
|
|
52
|
+
var RunSessionTag = RunSessionTagImpl;
|
|
53
|
+
var NEXT_RUN_SEQ_KEY = /* @__PURE__ */ Symbol.for("@logix/core/runSession/nextRunSeq");
|
|
54
|
+
var fallbackNextRunSeq = 0;
|
|
55
|
+
var nextRunSeq = () => {
|
|
56
|
+
try {
|
|
57
|
+
const g = globalThis;
|
|
58
|
+
const prev = typeof g[NEXT_RUN_SEQ_KEY] === "number" ? g[NEXT_RUN_SEQ_KEY] : 0;
|
|
59
|
+
const next = prev + 1;
|
|
60
|
+
g[NEXT_RUN_SEQ_KEY] = next;
|
|
61
|
+
return next;
|
|
62
|
+
} catch {
|
|
63
|
+
fallbackNextRunSeq += 1;
|
|
64
|
+
return fallbackNextRunSeq;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
var makeRunId = (startedAt) => `run-${startedAt}.${nextRunSeq()}`;
|
|
68
|
+
var makeRunSessionLocalState = () => {
|
|
69
|
+
const onceKeys = /* @__PURE__ */ new Set();
|
|
70
|
+
const seqByNamespace = /* @__PURE__ */ new Map();
|
|
71
|
+
return {
|
|
72
|
+
once: (key) => {
|
|
73
|
+
if (onceKeys.has(key)) return false;
|
|
74
|
+
onceKeys.add(key);
|
|
75
|
+
return true;
|
|
76
|
+
},
|
|
77
|
+
nextSeq: (namespace, key) => {
|
|
78
|
+
const byKey = seqByNamespace.get(namespace) ?? /* @__PURE__ */ new Map();
|
|
79
|
+
if (!seqByNamespace.has(namespace)) seqByNamespace.set(namespace, byKey);
|
|
80
|
+
const prev = byKey.get(key) ?? 0;
|
|
81
|
+
const next = prev + 1;
|
|
82
|
+
byKey.set(key, next);
|
|
83
|
+
return next;
|
|
84
|
+
},
|
|
85
|
+
clear: () => {
|
|
86
|
+
onceKeys.clear();
|
|
87
|
+
seqByNamespace.clear();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
var makeRunSession = (options) => {
|
|
92
|
+
const startedAt = options?.startedAt ?? Date.now();
|
|
93
|
+
return {
|
|
94
|
+
runId: options?.runId ?? makeRunId(startedAt),
|
|
95
|
+
source: options?.source ?? { host: "unknown" },
|
|
96
|
+
startedAt,
|
|
97
|
+
local: options?.local ?? makeRunSessionLocalState()
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
var makeEvidenceSink = (session) => {
|
|
101
|
+
const events = [];
|
|
102
|
+
let nextSeq = 1;
|
|
103
|
+
return {
|
|
104
|
+
record: (type, payload, options) => {
|
|
105
|
+
events.push({
|
|
106
|
+
protocolVersion: OBSERVABILITY_PROTOCOL_VERSION,
|
|
107
|
+
runId: session.runId,
|
|
108
|
+
seq: nextSeq++,
|
|
109
|
+
timestamp: options?.timestamp ?? Date.now(),
|
|
110
|
+
type,
|
|
111
|
+
payload
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
export: (options) => {
|
|
115
|
+
const protocolVersion = options?.protocolVersion ?? OBSERVABILITY_PROTOCOL_VERSION;
|
|
116
|
+
const maxEvents = options?.maxEvents;
|
|
117
|
+
const selected = typeof maxEvents === "number" && Number.isFinite(maxEvents) && maxEvents > 0 ? events.slice(Math.max(0, events.length - Math.floor(maxEvents))) : events.slice();
|
|
118
|
+
return exportEvidencePackage({
|
|
119
|
+
protocolVersion,
|
|
120
|
+
runId: session.runId,
|
|
121
|
+
source: session.source,
|
|
122
|
+
createdAt: options?.createdAt,
|
|
123
|
+
events: selected,
|
|
124
|
+
summary: options?.summary
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
clear: () => {
|
|
128
|
+
events.length = 0;
|
|
129
|
+
nextSeq = 1;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
var runSessionLayer = (session) => Layer.succeed(RunSessionTag, session ?? makeRunSession());
|
|
134
|
+
|
|
135
|
+
// ../logix-core/src/internal/effect-op.ts
|
|
136
|
+
import { Effect as Effect2, Option } from "../effect.js";
|
|
137
|
+
var composeMiddleware2 = composeMiddleware;
|
|
138
|
+
var makeOperationRejected2 = makeOperationRejected;
|
|
139
|
+
var nextGlobalOpSeq = 0;
|
|
140
|
+
var nextOpSeq = () => {
|
|
141
|
+
nextGlobalOpSeq += 1;
|
|
142
|
+
return nextGlobalOpSeq;
|
|
143
|
+
};
|
|
144
|
+
var makeId = (instanceId, opSeq) => instanceId ? `${instanceId}::o${opSeq}` : `o${opSeq}`;
|
|
145
|
+
var make = (params) => ({
|
|
146
|
+
...params.id ? { id: params.id, meta: params.meta } : (() => {
|
|
147
|
+
const meta = params.meta ?? {};
|
|
148
|
+
const instanceId = meta.instanceId;
|
|
149
|
+
const opSeq = typeof meta.opSeq === "number" && Number.isFinite(meta.opSeq) ? Math.floor(meta.opSeq) : nextOpSeq();
|
|
150
|
+
return {
|
|
151
|
+
id: makeId(instanceId, opSeq),
|
|
152
|
+
meta: meta.opSeq === opSeq ? meta : { ...meta, opSeq }
|
|
153
|
+
};
|
|
154
|
+
})(),
|
|
155
|
+
kind: params.kind,
|
|
156
|
+
name: params.name,
|
|
157
|
+
payload: params.payload,
|
|
158
|
+
effect: params.effect
|
|
159
|
+
});
|
|
160
|
+
var makeInRunSession = (params) => Effect2.gen(function* () {
|
|
161
|
+
if (params.id) {
|
|
162
|
+
return {
|
|
163
|
+
id: params.id,
|
|
164
|
+
kind: params.kind,
|
|
165
|
+
name: params.name,
|
|
166
|
+
payload: params.payload,
|
|
167
|
+
meta: params.meta,
|
|
168
|
+
effect: params.effect
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const meta = params.meta ?? {};
|
|
172
|
+
const instanceId = meta.instanceId;
|
|
173
|
+
let opSeq;
|
|
174
|
+
if (typeof meta.opSeq === "number" && Number.isFinite(meta.opSeq)) {
|
|
175
|
+
opSeq = Math.floor(meta.opSeq);
|
|
176
|
+
} else {
|
|
177
|
+
const sessionOpt = yield* Effect2.serviceOption(RunSessionTag);
|
|
178
|
+
if (Option.isSome(sessionOpt)) {
|
|
179
|
+
const key = instanceId ?? "global";
|
|
180
|
+
opSeq = sessionOpt.value.local.nextSeq("opSeq", key);
|
|
181
|
+
} else {
|
|
182
|
+
opSeq = nextOpSeq();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
id: makeId(instanceId, opSeq),
|
|
187
|
+
kind: params.kind,
|
|
188
|
+
name: params.name,
|
|
189
|
+
payload: params.payload,
|
|
190
|
+
meta: meta.opSeq === opSeq ? meta : { ...meta, opSeq },
|
|
191
|
+
effect: params.effect
|
|
192
|
+
};
|
|
193
|
+
});
|
|
194
|
+
var withMeta = (op, meta) => ({
|
|
195
|
+
...op,
|
|
196
|
+
meta: { ...op.meta ?? {}, ...meta }
|
|
197
|
+
});
|
|
198
|
+
var run = (op, stack) => runWithMiddleware(op, stack);
|
|
199
|
+
|
|
200
|
+
export {
|
|
201
|
+
currentLinkId,
|
|
202
|
+
EffectOpMiddlewareTag,
|
|
203
|
+
RunSessionTag,
|
|
204
|
+
makeRunSession,
|
|
205
|
+
makeEvidenceSink,
|
|
206
|
+
runSessionLayer,
|
|
207
|
+
composeMiddleware2 as composeMiddleware,
|
|
208
|
+
makeOperationRejected2 as makeOperationRejected,
|
|
209
|
+
make,
|
|
210
|
+
makeInRunSession,
|
|
211
|
+
withMeta,
|
|
212
|
+
run
|
|
213
|
+
};
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9jb3JlL0VmZmVjdE9wQ29yZS50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmlsaXR5L3J1blNlc3Npb24udHMiLCAiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvZWZmZWN0LW9wLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBFZmZlY3RPcCBcdTY4MzhcdTVGQzNcdTZBMjFcdTU3OEJcdTRFMEUgTWlkZGxld2FyZSBcdTdFQzRcdTU0MDhcdTkwM0JcdThGOTFcdTMwMDJcbi8vIFx1NjZGNFx1OUFEOFx1NUM0Mlx1NzY4NCBSdW50aW1lIC8gRGV2dG9vbHMgXHU1QkY5XHU2M0E1XHU4OUMxXHVGRjFBXG4vLyBzcGVjcy8wMDAtbW9kdWxlLXRyYWl0cy1ydW50aW1lL3JlZmVyZW5jZXMvZWZmZWN0b3AtYW5kLW1pZGRsZXdhcmUubWRcblxuaW1wb3J0IHsgQ29udGV4dCwgRWZmZWN0LCBGaWJlclJlZiB9IGZyb20gXCJlZmZlY3RcIlxuXG4vKipcbiAqIGN1cnJlbnRMaW5rSWRcdUZGMUFcbiAqIC0gXHU0RUU1IEZpYmVyUmVmIFx1NUY2Mlx1NUYwRlx1NjI3Rlx1OEY3RFx1NUY1M1x1NTI0RFx1NjRDRFx1NEY1Q1x1OTRGRVx1OERFRiBpZFx1RkYwOGxpbmtJZFx1RkYwOVx1RkYxQlxuICogLSBcdTc1MjhcdTRFOEVcdTVDMDZcdTU0MENcdTRFMDBcdTk0RkVcdThERUZcdTRFMEJcdTc2ODRcdTU5MUFcdTZCNjVcdThGQjlcdTc1NENcdTY0Q0RcdTRGNUNcdTUxNzNcdTgwNTRcdThENzdcdTY3NjVcdUZGMDhcdThERThcdTZBMjFcdTU3NTdcdTRFNUZcdTUzRUZcdTU5MERcdTc1MjhcdTU0MENcdTRFMDAgRmliZXJSZWZcdUZGMDlcdTMwMDJcbiAqL1xuZXhwb3J0IGNvbnN0IGN1cnJlbnRMaW5rSWQgPSBGaWJlclJlZi51bnNhZmVNYWtlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4vKipcbiAqIE9wZXJhdGlvblBvbGljeVx1RkYxQVxuICogLSBcdTVDNDBcdTkwRThcdTdCNTZcdTc1NjVcdTY4MDdcdTZDRThcdUZGMDhcdTRFQzVcdTg4NjhcdThGQkVcdTYxMEZcdTU2RkVcdUZGMENcdTRFMERcdTY0M0FcdTVFMjZcdTg5QzRcdTUyMTlcdTkwM0JcdThGOTFcdUZGMDlcdTMwMDJcbiAqXG4gKiBcdTdFQTZcdTY3NUZcdUZGMDhcdTc1MzEgUnVudGltZS9taWRkbGV3YXJlIFx1NTE3MVx1NTQwQ1x1NEZERFx1OEJDMVx1RkYwOVx1RkYxQVxuICogLSBcdTUzRUFcdTgwRkRcdTUxNzNcdTk1RURcdTdFQUZcdTg5QzJcdTZENEJcdTdDN0JcdTgwRkRcdTUyOUJcdUZGMDhPYnNlcnZlclx1RkYwOVx1RkYxQlx1NEUwRFx1NUY5N1x1NTE3M1x1OTVFRFx1NTE2OFx1NUM0MFx1NUI4OFx1NTM2Qlx1MzAwMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvblBvbGljeSB7XG4gIHJlYWRvbmx5IGRpc2FibGVPYnNlcnZlcnM/OiBib29sZWFuXG59XG5cbi8qKlxuICogT3BlcmF0aW9uUmVqZWN0ZWRcdUZGMUFcbiAqIC0gXHU1Qjg4XHU1MzZCXHU2MkQyXHU3RUREXHU2MjY3XHU4ODRDXHU2NUY2XHU3Njg0XHU3RURGXHU0RTAwXHU1OTMxXHU4RDI1XHU3RUQzXHU2NzlDXHVGRjFCXG4gKiAtIFx1OEJFRFx1NEU0OVx1RkYxQVx1NjYzRVx1NUYwRlx1NTkzMVx1OEQyNSArIFx1NjVFMFx1NEUxQVx1NTJBMVx1NTI2Rlx1NEY1Q1x1NzUyOFx1RkYwOFx1NjJEMlx1N0VERFx1NUZDNVx1OTg3Qlx1NTNEMVx1NzUxRlx1NTcyOFx1NzUyOFx1NjIzN1x1N0EwQlx1NUU4Rlx1NjI2N1x1ODg0Q1x1NTI0RFx1RkYwOVx1MzAwMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvblJlamVjdGVkIHtcbiAgcmVhZG9ubHkgX3RhZzogXCJPcGVyYXRpb25SZWplY3RlZFwiXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZ1xuICByZWFkb25seSBraW5kPzogRWZmZWN0T3BbXCJraW5kXCJdXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgbGlua0lkPzogc3RyaW5nXG4gIHJlYWRvbmx5IGRldGFpbHM/OiB1bmtub3duXG59XG5cbi8qKlxuICogT3BlcmF0aW9uRXJyb3JcdUZGMUFcbiAqIC0gXHU0RUZCXHU0RjU1XHU5MDFBXHU4RkM3IEVmZmVjdE9wIFx1NjAzQlx1N0VCRlx1NjI2N1x1ODg0Q1x1NzY4NFx1OEZCOVx1NzU0Q1x1NjRDRFx1NEY1Q1x1RkYwQ1x1OTBGRFx1NTNFRlx1ODBGRFx1ODhBQiBHdWFyZCBtaWRkbGV3YXJlIFx1NjYzRVx1NUYwRlx1NjJEMlx1N0VERFx1RkYxQlxuICogLSBcdTU2RTBcdTZCNjQgbWlkZGxld2FyZSBcdTc2ODRcdTk1MTlcdThCRUZcdTkwMUFcdTkwNTNcdTVGQzVcdTk4N0JcdTUxNDFcdThCQjhcdTUzRTBcdTUyQTAgT3BlcmF0aW9uUmVqZWN0ZWRcdTMwMDJcbiAqL1xuZXhwb3J0IHR5cGUgT3BlcmF0aW9uRXJyb3I8RT4gPSBFIHwgT3BlcmF0aW9uUmVqZWN0ZWRcblxuZXhwb3J0IGNvbnN0IG1ha2VPcGVyYXRpb25SZWplY3RlZCA9IChwYXJhbXM6IHtcbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nXG4gIHJlYWRvbmx5IGtpbmQ/OiBFZmZlY3RPcFtcImtpbmRcIl1cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZ1xuICByZWFkb25seSBsaW5rSWQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgZGV0YWlscz86IHVua25vd25cbn0pOiBPcGVyYXRpb25SZWplY3RlZCA9PiAoe1xuICBfdGFnOiBcIk9wZXJhdGlvblJlamVjdGVkXCIsXG4gIG1lc3NhZ2U6IHBhcmFtcy5tZXNzYWdlLFxuICBraW5kOiBwYXJhbXMua2luZCxcbiAgbmFtZTogcGFyYW1zLm5hbWUsXG4gIGxpbmtJZDogcGFyYW1zLmxpbmtJZCxcbiAgZGV0YWlsczogcGFyYW1zLmRldGFpbHMsXG59KVxuXG4vKipcbiAqIEVmZmVjdE9wXHVGRjFBXHU3RURGXHU0RTAwXHU4ODY4XHU3OTNBXHU0RTAwXHU2QjIxXHUyMDFDXHU1M0VGXHU4OUMyXHU2RDRCXHU4RkI5XHU3NTRDXHUyMDFEXHU3Njg0IEVmZmVjdCBcdTYyNjdcdTg4NENcdTMwMDJcbiAqXG4gKiAtIE91dCAvIEVyciAvIEVudiBcdTRFM0FcdTUxODVcdTkwRTggRWZmZWN0IFx1NzY4NFx1NkNEQlx1NTc4Qlx1NTNDMlx1NjU3MFx1RkYxQlxuICogLSBtZXRhIFx1NzUyOFx1NEU4RVx1NjI3Rlx1OEY3RCBEZXZ0b29scyAvIE1pZGRsZXdhcmUgXHU2MjQwXHU5NzAwXHU3Njg0XHU3RUQzXHU2Nzg0XHU1MzE2XHU0RTBBXHU0RTBCXHU2NTg3XHU0RkUxXHU2MDZGXHUzMDAyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWZmZWN0T3A8T3V0ID0gdW5rbm93biwgRXJyID0gdW5rbm93biwgRW52ID0gdW5rbm93bj4ge1xuICByZWFkb25seSBpZDogc3RyaW5nXG4gIHJlYWRvbmx5IGtpbmQ6XG4gICAgfCBcImFjdGlvblwiXG4gICAgfCBcImZsb3dcIlxuICAgIHwgXCJzdGF0ZVwiXG4gICAgfCBcInNlcnZpY2VcIlxuICAgIHwgXCJsaWZlY3ljbGVcIlxuICAgIHwgXCJ0cmFpdC1jb21wdXRlZFwiXG4gICAgfCBcInRyYWl0LWxpbmtcIlxuICAgIHwgXCJ0cmFpdC1zb3VyY2VcIlxuICAgIHwgXCJkZXZ0b29sc1wiXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICByZWFkb25seSBwYXlsb2FkPzogdW5rbm93blxuICByZWFkb25seSBtZXRhPzoge1xuICAgIC8qKlxuICAgICAqIGxpbmtJZFx1RkYxQVxuICAgICAqIC0gXHU2NENEXHU0RjVDXHU5NEZFXHU4REVGIGlkXHVGRjFBXHU1NDBDXHU0RTAwXHU5NEZFXHU4REVGXHU0RTBCXHU3Njg0XHU1OTFBXHU2QjY1XHU4RkI5XHU3NTRDXHU2NENEXHU0RjVDXHU1RkM1XHU5ODdCXHU1MTcxXHU0RUFCXHVGRjFCXG4gICAgICogLSBSdW50aW1lIFx1NEZERFx1OEJDMVx1NTcyOFx1NjI0MFx1NjcwOVx1OEZCOVx1NzU0Q1x1NjRDRFx1NEY1Q1x1NEUwQVx1OTBGRFx1NEYxQVx1ODg2NVx1OUY1MFx1OEJFNVx1NUI1N1x1NkJCNVx1MzAwMlxuICAgICAqL1xuICAgIGxpbmtJZD86IHN0cmluZ1xuICAgIG1vZHVsZUlkPzogc3RyaW5nXG4gICAgaW5zdGFuY2VJZD86IHN0cmluZ1xuICAgIHJ1bnRpbWVMYWJlbD86IHN0cmluZ1xuICAgIHR4bklkPzogc3RyaW5nXG4gICAgdHhuU2VxPzogbnVtYmVyXG4gICAgb3BTZXE/OiBudW1iZXJcbiAgICBmaWVsZFBhdGg/OiBzdHJpbmdcbiAgICBkZXBzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+XG4gICAgZnJvbT86IHN0cmluZ1xuICAgIHRvPzogc3RyaW5nXG4gICAgdHJhaXROb2RlSWQ/OiBzdHJpbmdcbiAgICBzdGVwSWQ/OiBzdHJpbmdcbiAgICByZXNvdXJjZUlkPzogc3RyaW5nXG4gICAga2V5PzogdW5rbm93blxuICAgIHRyYWNlPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+XG4gICAgdGFncz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICAgIHBvbGljeT86IE9wZXJhdGlvblBvbGljeVxuICAgIC8vIFx1OTg4NFx1NzU1OVx1NjI2OVx1NUM1NVx1NEY0RFx1RkYwQ1x1NEY5Qlx1NEUyRFx1OTVGNFx1NEVGNlx1NEUwRSBEZXZ0b29scyBcdTYzMDJcdThGN0RcdTk4OURcdTU5MTZcdTRGRTFcdTYwNkZcdTMwMDJcbiAgICByZWFkb25seSBbazogc3RyaW5nXTogdW5rbm93blxuICB9XG4gIHJlYWRvbmx5IGVmZmVjdDogRWZmZWN0LkVmZmVjdDxPdXQsIEVyciwgRW52PlxufVxuXG4vKipcbiAqIE1pZGRsZXdhcmVcdUZGMUFcdTVCRjkgRWZmZWN0T3AgXHU4RkRCXHU4ODRDXHU4OUMyXHU1QkRGIC8gXHU1MzA1XHU4OEM1IC8gXHU1Qjg4XHU1MzZCXHU3Njg0XHU5MDFBXHU3NTI4XHU0RTJEXHU5NUY0XHU0RUY2XHU2QTIxXHU1NzhCXHUzMDAyXG4gKi9cbmV4cG9ydCB0eXBlIE1pZGRsZXdhcmUgPSA8QSwgRSwgUj4oXG4gIG9wOiBFZmZlY3RPcDxBLCBFLCBSPixcbikgPT4gRWZmZWN0LkVmZmVjdDxBLCBPcGVyYXRpb25FcnJvcjxFPiwgUj5cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZVN0YWNrID0gUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPlxuXG4vKipcbiAqIEVmZmVjdE9wTWlkZGxld2FyZUVudlx1RkYxQVxuICogLSBcdTRGNUNcdTRFM0EgRWZmZWN0IEVudiBcdTRFMkRcdTc2ODRcdTRFMDBcdTk4NzkgU2VydmljZVx1RkYwQ1x1NjI3Rlx1OEY3RFx1NUY1M1x1NTI0RCBSdW50aW1lIFx1NzY4NCBNaWRkbGV3YXJlU3RhY2tcdUZGMUJcbiAqIC0gXHU3NTMxIFJ1bnRpbWUudHMgXHU1NzI4XHU2Nzg0XHU5MDIwIE1hbmFnZWRSdW50aW1lIFx1NjVGNlx1NkNFOFx1NTE2NVx1RkYxQlxuICogLSBTdGF0ZVRyYWl0Lmluc3RhbGwgXHU3QjQ5XHU4RkQwXHU4ODRDXHU2NUY2XHU0RUUzXHU3ODAxXHU5MDFBXHU4RkM3XHU4QkU1IFNlcnZpY2UgXHU1MUIzXHU1QjlBXHU1QjlFXHU5NjQ1XHU0RjdGXHU3NTI4XHU3Njg0IE1pZGRsZXdhcmVTdGFja1x1MzAwMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVmZmVjdE9wTWlkZGxld2FyZUVudiB7XG4gIHJlYWRvbmx5IHN0YWNrOiBNaWRkbGV3YXJlU3RhY2tcbn1cblxuZXhwb3J0IGNsYXNzIEVmZmVjdE9wTWlkZGxld2FyZVRhZyBleHRlbmRzIENvbnRleHQuVGFnKFxuICBcIkxvZ2l4L0VmZmVjdE9wTWlkZGxld2FyZVwiLFxuKTxFZmZlY3RPcE1pZGRsZXdhcmVUYWcsIEVmZmVjdE9wTWlkZGxld2FyZUVudj4oKSB7fVxuXG4vKipcbiAqIGNvbXBvc2VNaWRkbGV3YXJlXHVGRjFBXG4gKiAtIFx1NjMwOVx1MzAwQ1x1NThGMFx1NjYwRVx1OTg3QVx1NUU4Rlx1NEVDRVx1NTkxNlx1NTIzMFx1NTE4NVx1MzAwRFx1N0VDNFx1NTQwOCBNaWRkbGV3YXJlXHVGRjFBXG4gKiAgIC0gc3RhY2sgPSBbbXcxLCBtdzJdID0+IFx1NUI5RVx1OTY0NVx1NjI2N1x1ODg0Q1x1OTg3QVx1NUU4Rlx1RkYxQW13MSAtPiBtdzIgLT4gZWZmZWN0IC0+IG13MiAtPiBtdzFcdUZGMUJcbiAqIC0gXHU0RTBFIHJlZmVyZW5jZSBcdTY1ODdcdTY4NjNcdTRFMkRcdTc2ODQgcmVkdWNlUmlnaHQgXHU3OTNBXHU0RjhCXHU0RkREXHU2MzAxXHU0RTAwXHU4MUY0XHUzMDAyXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wb3NlTWlkZGxld2FyZSA9IChzdGFjazogTWlkZGxld2FyZVN0YWNrKTogTWlkZGxld2FyZSA9PiB7XG4gIHJldHVybiA8QSwgRSwgUj4ob3A6IEVmZmVjdE9wPEEsIEUsIFI+KTogRWZmZWN0LkVmZmVjdDxBLCBPcGVyYXRpb25FcnJvcjxFPiwgUj4gPT5cbiAgICBzdGFjay5yZWR1Y2VSaWdodDxFZmZlY3QuRWZmZWN0PEEsIE9wZXJhdGlvbkVycm9yPEU+LCBSPj4oXG4gICAgICAoZWZmLCBtdykgPT4gbXcoeyAuLi5vcCwgZWZmZWN0OiBlZmYgfSBhcyBhbnkpIGFzIGFueSxcbiAgICAgIG9wLmVmZmVjdCBhcyBFZmZlY3QuRWZmZWN0PEEsIE9wZXJhdGlvbkVycm9yPEU+LCBSPixcbiAgICApXG59XG5cbi8qKlxuICogcnVuV2l0aE1pZGRsZXdhcmVcdUZGMUFcbiAqIC0gXHU3RUQ5XHU1QjlBXHU0RTAwXHU2NzYxIEVmZmVjdE9wIFx1NEUwRSBNaWRkbGV3YXJlU3RhY2tcdUZGMENcdTYzMDlcdTdFQzRcdTU0MDhcdTg5QzRcdTUyMTlcdTYyNjdcdTg4NENcdUZGMUJcbiAqIC0gXHU4MkU1IHN0YWNrIFx1NEUzQVx1N0E3QVx1RkYwQ1x1NTIxOVx1NzZGNFx1NjNBNVx1OEZENFx1NTZERSBvcC5lZmZlY3RcdTMwMDJcbiAqL1xuZXhwb3J0IGNvbnN0IHJ1bldpdGhNaWRkbGV3YXJlID0gPEEsIEUsIFI+KFxuICBvcDogRWZmZWN0T3A8QSwgRSwgUj4sXG4gIHN0YWNrOiBNaWRkbGV3YXJlU3RhY2ssXG4pOiBFZmZlY3QuRWZmZWN0PEEsIEUsIFI+ID0+IHtcbiAgcmV0dXJuIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHlpZWxkKiBGaWJlclJlZi5nZXQoY3VycmVudExpbmtJZClcbiAgICBjb25zdCBtZXRhTGlua0lkID0gKG9wLm1ldGEgYXMgYW55KT8ubGlua0lkXG4gICAgY29uc3QgbGlua0lkID1cbiAgICAgIHR5cGVvZiBtZXRhTGlua0lkID09PSBcInN0cmluZ1wiICYmIG1ldGFMaW5rSWQubGVuZ3RoID4gMFxuICAgICAgICA/IG1ldGFMaW5rSWRcbiAgICAgICAgOiBleGlzdGluZyA/PyBvcC5pZFxuXG4gICAgY29uc3QgbmV4dE9wOiBFZmZlY3RPcDxBLCBFLCBSPiA9IHtcbiAgICAgIC4uLm9wLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi4ob3AubWV0YSA/PyB7fSksXG4gICAgICAgIGxpbmtJZCxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3JhbSA9IHN0YWNrLmxlbmd0aCA/IGNvbXBvc2VNaWRkbGV3YXJlKHN0YWNrKShuZXh0T3ApIDogbmV4dE9wLmVmZmVjdFxuXG4gICAgLy8gbGlua0lkXHVGRjFBXHU4RkI5XHU3NTRDXHU4RDc3XHU3MEI5XHU1MjFCXHU1RUZBXHVGRjBDXHU1RDRDXHU1OTU3XHU1OTBEXHU3NTI4XHVGRjA4XHU1NDBDXHU0RTAwIEZpYmVyUmVmIFx1NEUzQVx1NTE2OFx1NUM0MFx1NTM1NVx1NEUwMFx1NEU4Qlx1NUI5RVx1NkU5MFx1RkYwOVx1MzAwMlxuICAgIC8vIE5PVEU6IG1pZGRsZXdhcmUgXHU1MTQxXHU4QkI4XHU0RUU1IE9wZXJhdGlvblJlamVjdGVkIFx1NjYzRVx1NUYwRlx1NjJEMlx1N0VERFx1MzAwMlxuICAgIHJldHVybiB5aWVsZCogRWZmZWN0LmxvY2FsbHkoY3VycmVudExpbmtJZCwgbGlua0lkKShwcm9ncmFtIGFzIGFueSlcbiAgfSkgYXMgRWZmZWN0LkVmZmVjdDxBLCBFLCBSPlxufVxuIiwgImltcG9ydCB7IENvbnRleHQsIExheWVyIH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gXCIuL2pzb25WYWx1ZS5qc1wiXG5pbXBvcnQgdHlwZSB7IEV2aWRlbmNlUGFja2FnZSwgRXZpZGVuY2VQYWNrYWdlU291cmNlLCBPYnNlcnZhdGlvbkVudmVsb3BlIH0gZnJvbSBcIi4vZXZpZGVuY2UuanNcIlxuaW1wb3J0IHsgZXhwb3J0RXZpZGVuY2VQYWNrYWdlLCBPQlNFUlZBQklMSVRZX1BST1RPQ09MX1ZFUlNJT04gfSBmcm9tIFwiLi9ldmlkZW5jZS5qc1wiXG5cbmV4cG9ydCB0eXBlIFJ1bklkID0gc3RyaW5nXG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU2Vzc2lvbkxvY2FsU3RhdGUge1xuICAvKipcbiAgICogb25jZVx1RkYxQVx1NzUyOFx1NEU4RVx1MjAxQ1x1NTNFQVx1NTNEMVx1NEUwMFx1NkIyMVx1MjAxRFx1NzY4NFx1NTNCQlx1OTFDRFx1OTUyRVx1OTZDNlx1NTQwOFx1RkYwOFx1NUZDNVx1OTg3Qlx1NjMwOVx1NEYxQVx1OEJERFx1OTY5NFx1NzlCQlx1RkYwQ1x1OTA3Rlx1NTE0RFx1OERFOFx1NEYxQVx1OEJERFx1NkM2MVx1NjdEM1x1RkYwOVx1MzAwMlxuICAgKiBcdThGRDRcdTU2REUgdHJ1ZSBcdTg4NjhcdTc5M0FcdTk5OTZcdTZCMjFcdTUxRkFcdTczQjBcdUZGMENmYWxzZSBcdTg4NjhcdTc5M0FcdTVERjJcdTUxRkFcdTczQjBcdThGQzdcdTMwMDJcbiAgICovXG4gIHJlYWRvbmx5IG9uY2U6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhblxuXG4gIC8qKlxuICAgKiBzZXFcdUZGMUFcdTc1MjhcdTRFOEVcdTYzMDkga2V5IFx1NTIwNlx1OTE0RFx1NTM1NVx1OEMwM1x1NUU4Rlx1NTNGN1x1RkYwOFx1NEY4Qlx1NTk4MiBvcFNlcS9ldmVudFNlcSBcdTdCNDlcdUZGMDlcdUZGMENcdTVGQzVcdTk4N0JcdTYzMDlcdTRGMUFcdThCRERcdTk2OTRcdTc5QkJcdTMwMDJcbiAgICovXG4gIHJlYWRvbmx5IG5leHRTZXE6IChuYW1lc3BhY2U6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IG51bWJlclxuXG4gIC8qKiBcdTRFQzVcdTc1MjhcdTRFOEVcdTZENEJcdThCRDUvXHU1OTBEXHU0RjREXHVGRjFBXHU2RTA1XHU3QTdBXHU2NzJDXHU0RjFBXHU4QkREXHU3Njg0XHU2NzJDXHU1NzMwXHU3MkI2XHU2MDAxXHUzMDAyICovXG4gIHJlYWRvbmx5IGNsZWFyOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU2Vzc2lvbiB7XG4gIHJlYWRvbmx5IHJ1bklkOiBSdW5JZFxuICByZWFkb25seSBzb3VyY2U6IEV2aWRlbmNlUGFja2FnZVNvdXJjZVxuICByZWFkb25seSBzdGFydGVkQXQ6IG51bWJlclxuICByZWFkb25seSBsb2NhbDogUnVuU2Vzc2lvbkxvY2FsU3RhdGVcbn1cblxuY2xhc3MgUnVuU2Vzc2lvblRhZ0ltcGwgZXh0ZW5kcyBDb250ZXh0LlRhZyhcbiAgXCJAbG9naXgvY29yZS9SdW5TZXNzaW9uXCIsXG4pPFJ1blNlc3Npb25UYWdJbXBsLCBSdW5TZXNzaW9uPigpIHt9XG5cbmV4cG9ydCBjb25zdCBSdW5TZXNzaW9uVGFnID0gUnVuU2Vzc2lvblRhZ0ltcGxcblxuZXhwb3J0IGludGVyZmFjZSBFdmlkZW5jZVNpbmsge1xuICByZWFkb25seSByZWNvcmQ6ICh0eXBlOiBzdHJpbmcsIHBheWxvYWQ6IEpzb25WYWx1ZSwgb3B0aW9ucz86IHsgcmVhZG9ubHkgdGltZXN0YW1wPzogbnVtYmVyIH0pID0+IHZvaWRcbiAgcmVhZG9ubHkgZXhwb3J0OiAob3B0aW9ucz86IHtcbiAgICByZWFkb25seSBwcm90b2NvbFZlcnNpb24/OiBzdHJpbmdcbiAgICByZWFkb25seSBjcmVhdGVkQXQ/OiBudW1iZXJcbiAgICByZWFkb25seSBzdW1tYXJ5PzogSnNvblZhbHVlXG4gICAgcmVhZG9ubHkgbWF4RXZlbnRzPzogbnVtYmVyXG4gIH0pID0+IEV2aWRlbmNlUGFja2FnZVxuICByZWFkb25seSBjbGVhcjogKCkgPT4gdm9pZFxufVxuXG5jb25zdCBORVhUX1JVTl9TRVFfS0VZID0gU3ltYm9sLmZvcihcIkBsb2dpeC9jb3JlL3J1blNlc3Npb24vbmV4dFJ1blNlcVwiKVxubGV0IGZhbGxiYWNrTmV4dFJ1blNlcSA9IDBcblxuY29uc3QgbmV4dFJ1blNlcSA9ICgpOiBudW1iZXIgPT4ge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgZzogYW55ID0gZ2xvYmFsVGhpcyBhcyBhbnlcbiAgICBjb25zdCBwcmV2ID0gdHlwZW9mIGdbTkVYVF9SVU5fU0VRX0tFWV0gPT09IFwibnVtYmVyXCIgPyAoZ1tORVhUX1JVTl9TRVFfS0VZXSBhcyBudW1iZXIpIDogMFxuICAgIGNvbnN0IG5leHQgPSBwcmV2ICsgMVxuICAgIGdbTkVYVF9SVU5fU0VRX0tFWV0gPSBuZXh0XG4gICAgcmV0dXJuIG5leHRcbiAgfSBjYXRjaCB7XG4gICAgZmFsbGJhY2tOZXh0UnVuU2VxICs9IDFcbiAgICByZXR1cm4gZmFsbGJhY2tOZXh0UnVuU2VxXG4gIH1cbn1cblxuY29uc3QgbWFrZVJ1bklkID0gKHN0YXJ0ZWRBdDogbnVtYmVyKTogUnVuSWQgPT4gYHJ1bi0ke3N0YXJ0ZWRBdH0uJHtuZXh0UnVuU2VxKCl9YFxuXG5leHBvcnQgY29uc3QgbWFrZVJ1blNlc3Npb25Mb2NhbFN0YXRlID0gKCk6IFJ1blNlc3Npb25Mb2NhbFN0YXRlID0+IHtcbiAgY29uc3Qgb25jZUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBjb25zdCBzZXFCeU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpXG5cbiAgcmV0dXJuIHtcbiAgICBvbmNlOiAoa2V5KSA9PiB7XG4gICAgICBpZiAob25jZUtleXMuaGFzKGtleSkpIHJldHVybiBmYWxzZVxuICAgICAgb25jZUtleXMuYWRkKGtleSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcbiAgICBuZXh0U2VxOiAobmFtZXNwYWNlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGJ5S2V5ID0gc2VxQnlOYW1lc3BhY2UuZ2V0KG5hbWVzcGFjZSkgPz8gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKVxuICAgICAgaWYgKCFzZXFCeU5hbWVzcGFjZS5oYXMobmFtZXNwYWNlKSkgc2VxQnlOYW1lc3BhY2Uuc2V0KG5hbWVzcGFjZSwgYnlLZXkpXG4gICAgICBjb25zdCBwcmV2ID0gYnlLZXkuZ2V0KGtleSkgPz8gMFxuICAgICAgY29uc3QgbmV4dCA9IHByZXYgKyAxXG4gICAgICBieUtleS5zZXQoa2V5LCBuZXh0KVxuICAgICAgcmV0dXJuIG5leHRcbiAgICB9LFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBvbmNlS2V5cy5jbGVhcigpXG4gICAgICBzZXFCeU5hbWVzcGFjZS5jbGVhcigpXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbWFrZVJ1blNlc3Npb24gPSAob3B0aW9ucz86IHtcbiAgcmVhZG9ubHkgcnVuSWQ/OiBSdW5JZFxuICByZWFkb25seSBzb3VyY2U/OiBFdmlkZW5jZVBhY2thZ2VTb3VyY2VcbiAgcmVhZG9ubHkgc3RhcnRlZEF0PzogbnVtYmVyXG4gIHJlYWRvbmx5IGxvY2FsPzogUnVuU2Vzc2lvbkxvY2FsU3RhdGVcbn0pOiBSdW5TZXNzaW9uID0+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gb3B0aW9ucz8uc3RhcnRlZEF0ID8/IERhdGUubm93KClcbiAgcmV0dXJuIHtcbiAgICBydW5JZDogb3B0aW9ucz8ucnVuSWQgPz8gbWFrZVJ1bklkKHN0YXJ0ZWRBdCksXG4gICAgc291cmNlOiBvcHRpb25zPy5zb3VyY2UgPz8geyBob3N0OiBcInVua25vd25cIiB9LFxuICAgIHN0YXJ0ZWRBdCxcbiAgICBsb2NhbDogb3B0aW9ucz8ubG9jYWwgPz8gbWFrZVJ1blNlc3Npb25Mb2NhbFN0YXRlKCksXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG1ha2VFdmlkZW5jZVNpbmsgPSAoc2Vzc2lvbjogUnVuU2Vzc2lvbik6IEV2aWRlbmNlU2luayA9PiB7XG4gIGNvbnN0IGV2ZW50czogT2JzZXJ2YXRpb25FbnZlbG9wZVtdID0gW11cbiAgbGV0IG5leHRTZXEgPSAxXG5cbiAgcmV0dXJuIHtcbiAgICByZWNvcmQ6ICh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSA9PiB7XG4gICAgICBldmVudHMucHVzaCh7XG4gICAgICAgIHByb3RvY29sVmVyc2lvbjogT0JTRVJWQUJJTElUWV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgICAgICBydW5JZDogc2Vzc2lvbi5ydW5JZCxcbiAgICAgICAgc2VxOiBuZXh0U2VxKyssXG4gICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucz8udGltZXN0YW1wID8/IERhdGUubm93KCksXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHBheWxvYWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgZXhwb3J0OiAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcHJvdG9jb2xWZXJzaW9uID0gb3B0aW9ucz8ucHJvdG9jb2xWZXJzaW9uID8/IE9CU0VSVkFCSUxJVFlfUFJPVE9DT0xfVkVSU0lPTlxuICAgICAgY29uc3QgbWF4RXZlbnRzID0gb3B0aW9ucz8ubWF4RXZlbnRzXG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkID1cbiAgICAgICAgdHlwZW9mIG1heEV2ZW50cyA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUobWF4RXZlbnRzKSAmJiBtYXhFdmVudHMgPiAwXG4gICAgICAgICAgPyBldmVudHMuc2xpY2UoTWF0aC5tYXgoMCwgZXZlbnRzLmxlbmd0aCAtIE1hdGguZmxvb3IobWF4RXZlbnRzKSkpXG4gICAgICAgICAgOiBldmVudHMuc2xpY2UoKVxuXG4gICAgICByZXR1cm4gZXhwb3J0RXZpZGVuY2VQYWNrYWdlKHtcbiAgICAgICAgcHJvdG9jb2xWZXJzaW9uLFxuICAgICAgICBydW5JZDogc2Vzc2lvbi5ydW5JZCxcbiAgICAgICAgc291cmNlOiBzZXNzaW9uLnNvdXJjZSxcbiAgICAgICAgY3JlYXRlZEF0OiBvcHRpb25zPy5jcmVhdGVkQXQsXG4gICAgICAgIGV2ZW50czogc2VsZWN0ZWQsXG4gICAgICAgIHN1bW1hcnk6IG9wdGlvbnM/LnN1bW1hcnksXG4gICAgICB9KVxuICAgIH0sXG4gICAgY2xlYXI6ICgpID0+IHtcbiAgICAgIGV2ZW50cy5sZW5ndGggPSAwXG4gICAgICBuZXh0U2VxID0gMVxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJ1blNlc3Npb25MYXllciA9IChcbiAgc2Vzc2lvbj86IFJ1blNlc3Npb24sXG4pOiBMYXllci5MYXllcjxSdW5TZXNzaW9uVGFnSW1wbCwgbmV2ZXIsIG5ldmVyPiA9PlxuICBMYXllci5zdWNjZWVkKFJ1blNlc3Npb25UYWcsIHNlc3Npb24gPz8gbWFrZVJ1blNlc3Npb24oKSkgYXMgTGF5ZXIuTGF5ZXI8XG4gICAgUnVuU2Vzc2lvblRhZ0ltcGwsXG4gICAgbmV2ZXIsXG4gICAgbmV2ZXJcbiAgPlxuIiwgIi8vIEludGVybmFsIEVmZmVjdE9wIEFQSSAoZm9yIGludGVybmFsIGltcGxlbWVudGF0aW9uIGNvZGUpLlxuLy9cbi8vIEdvYWw6XG4vLyAtIEludGVybmFsIG1vZHVsZXMgbXVzdCBuZXZlciBpbXBvcnQgcm9vdCBwdWJsaWMgc3VibW9kdWxlcyAoZS5nLiBgLi4vRWZmZWN0T3BgKS5cbi8vIC0gVGhpcyBmaWxlIGhvc3RzIHRoZSBzaGFyZWQgaW1wbGVtZW50YXRpb247IHB1YmxpYyBgc3JjL0VmZmVjdE9wLnRzYCBkZWxlZ2F0ZXMgdG8gaXQuXG5cbmltcG9ydCB7IEVmZmVjdCwgT3B0aW9uIH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgKiBhcyBDb3JlIGZyb20gXCIuL3J1bnRpbWUvY29yZS9FZmZlY3RPcENvcmUuanNcIlxuaW1wb3J0IHsgUnVuU2Vzc2lvblRhZyB9IGZyb20gXCIuL29ic2VydmFiaWxpdHkvcnVuU2Vzc2lvbi5qc1wiXG5cbmV4cG9ydCB0eXBlIEVmZmVjdE9wPE91dCA9IHVua25vd24sIEVyciA9IHVua25vd24sIEVudiA9IHVua25vd24+ID1cbiAgQ29yZS5FZmZlY3RPcDxPdXQsIEVyciwgRW52PlxuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25Qb2xpY3kgPSBDb3JlLk9wZXJhdGlvblBvbGljeVxuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25SZWplY3RlZCA9IENvcmUuT3BlcmF0aW9uUmVqZWN0ZWRcblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uRXJyb3I8RT4gPSBDb3JlLk9wZXJhdGlvbkVycm9yPEU+XG5cbmV4cG9ydCB0eXBlIE1pZGRsZXdhcmUgPSBDb3JlLk1pZGRsZXdhcmVcblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZVN0YWNrID0gQ29yZS5NaWRkbGV3YXJlU3RhY2tcblxuZXhwb3J0IGNvbnN0IGNvbXBvc2VNaWRkbGV3YXJlID0gQ29yZS5jb21wb3NlTWlkZGxld2FyZVxuXG5leHBvcnQgY29uc3QgbWFrZU9wZXJhdGlvblJlamVjdGVkID0gQ29yZS5tYWtlT3BlcmF0aW9uUmVqZWN0ZWRcblxuLyoqXG4gKiBcdTc1MUZcdTYyMTBcdTdBMzNcdTVCOUEgaWRcdUZGMENcdTc1MjhcdTRFOEVcdTY4MDdcdThCQzZcdTRFMDBcdTZCMjEgRWZmZWN0T3BcdTMwMDJcbiAqIC0gXHU5RUQ4XHU4QkE0XHU0RjdGXHU3NTI4XHU1MzU1XHU4QzAzXHU1RThGXHU1M0Y3XHVGRjBDXHU5MDdGXHU1MTREXHU5NjhGXHU2NzNBL1x1NjVGNlx1OTVGNFx1NUUyNlx1Njc2NVx1NzY4NFx1NEUwRFx1NTNFRlx1OTFDRFx1NjUzRVx1NjAyN1x1RkYxQlxuICogLSBcdTgyRTUgbWV0YS5pbnN0YW5jZUlkIFx1NTNFRlx1NzUyOFx1RkYwQ1x1NTIxOVx1NEYxOFx1NTE0OFx1NkQzRVx1NzUxRlx1NEUzQSBgJHtpbnN0YW5jZUlkfTo6byR7b3BTZXF9YFx1MzAwMlxuICovXG5sZXQgbmV4dEdsb2JhbE9wU2VxID0gMFxuXG5jb25zdCBuZXh0T3BTZXEgPSAoKTogbnVtYmVyID0+IHtcbiAgbmV4dEdsb2JhbE9wU2VxICs9IDFcbiAgcmV0dXJuIG5leHRHbG9iYWxPcFNlcVxufVxuXG5jb25zdCBtYWtlSWQgPSAoaW5zdGFuY2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBvcFNlcTogbnVtYmVyKTogc3RyaW5nID0+XG4gIGluc3RhbmNlSWQgPyBgJHtpbnN0YW5jZUlkfTo6byR7b3BTZXF9YCA6IGBvJHtvcFNlcX1gXG5cbi8qKlxuICogRWZmZWN0T3AubWFrZVx1RkYxQVxuICogLSBcdTUyMUJcdTVFRkFcdTRFMDBcdTY3NjFcdTVFMjZcdTU3RkFcdTY3MkMgbWV0YSBcdTc2ODQgRWZmZWN0T3BcdUZGMUJcbiAqIC0gXHU5RUQ4XHU4QkE0XHU3NTFGXHU2MjEwXHU3QTMzXHU1QjlBIGlkXHVGRjA4XHU1N0ZBXHU0RThFIGBpbnN0YW5jZUlkYCArIFx1NTM1NVx1OEMwMyBgb3BTZXFgXHVGRjA5XHVGRjBDXHU4QzAzXHU3NTI4XHU2NUI5XHU0RTVGXHU1M0VGXHU1NzI4XHU1OTE2XHU1QzQyXHU4OTg2XHU1MTk5XHUzMDAyXG4gKi9cbmV4cG9ydCBjb25zdCBtYWtlID0gPEEsIEUsIFI+KHBhcmFtczoge1xuICByZWFkb25seSBraW5kOiBFZmZlY3RPcFtcImtpbmRcIl1cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG4gIHJlYWRvbmx5IGVmZmVjdDogRWZmZWN0LkVmZmVjdDxBLCBFLCBSPlxuICByZWFkb25seSBwYXlsb2FkPzogdW5rbm93blxuICByZWFkb25seSBtZXRhPzogRWZmZWN0T3BbXCJtZXRhXCJdXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nXG59KTogRWZmZWN0T3A8QSwgRSwgUj4gPT4gKHtcbiAgLi4uKHBhcmFtcy5pZFxuICAgID8geyBpZDogcGFyYW1zLmlkLCBtZXRhOiBwYXJhbXMubWV0YSB9XG4gICAgOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhOiBhbnkgPSBwYXJhbXMubWV0YSA/PyB7fVxuICAgICAgICBjb25zdCBpbnN0YW5jZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBtZXRhLmluc3RhbmNlSWRcbiAgICAgICAgY29uc3Qgb3BTZXE6IG51bWJlciA9XG4gICAgICAgICAgdHlwZW9mIG1ldGEub3BTZXEgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKG1ldGEub3BTZXEpXG4gICAgICAgICAgICA/IE1hdGguZmxvb3IobWV0YS5vcFNlcSlcbiAgICAgICAgICAgIDogbmV4dE9wU2VxKClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogbWFrZUlkKGluc3RhbmNlSWQsIG9wU2VxKSxcbiAgICAgICAgICBtZXRhOiBtZXRhLm9wU2VxID09PSBvcFNlcSA/IG1ldGEgOiB7IC4uLm1ldGEsIG9wU2VxIH0sXG4gICAgICAgIH1cbiAgICAgIH0pKCkpLFxuICBraW5kOiBwYXJhbXMua2luZCxcbiAgbmFtZTogcGFyYW1zLm5hbWUsXG4gIHBheWxvYWQ6IHBhcmFtcy5wYXlsb2FkLFxuICBlZmZlY3Q6IHBhcmFtcy5lZmZlY3QsXG59KVxuXG4vKipcbiAqIEVmZmVjdE9wLm1ha2VJblJ1blNlc3Npb25cdUZGMUFcbiAqIC0gXHU1NzI4IFJ1blNlc3Npb24gXHU0RjVDXHU3NTI4XHU1N0RGXHU1MTg1XHU1MjA2XHU5MTREXHU3QTMzXHU1QjlBIGBvcFNlcWBcdUZGMDhwZXItc2Vzc2lvbiArIHBlci1pbnN0YW5jZVx1RkYwOVx1RkYxQlxuICogLSBcdTgyRTUgRW52IFx1NEUyRFx1NjVFMCBSdW5TZXNzaW9uXHVGRjBDXHU1MjE5XHU1NkRFXHU5MDAwXHU1MjMwXHU4RkRCXHU3QTBCXHU3RUE3XHU1MzU1XHU4QzAzXHU1RThGXHU1M0Y3XHVGRjA4XHU0RTBEXHU1MThEXHU0RjdGXHU3NTI4XHU4RkRCXHU3QTBCXHU3RUE3IE1hcFx1RkYwOVx1MzAwMlxuICovXG5leHBvcnQgY29uc3QgbWFrZUluUnVuU2Vzc2lvbiA9IDxBLCBFLCBSPihwYXJhbXM6IHtcbiAgcmVhZG9ubHkga2luZDogRWZmZWN0T3BbXCJraW5kXCJdXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICByZWFkb25seSBlZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj5cbiAgcmVhZG9ubHkgcGF5bG9hZD86IHVua25vd25cbiAgcmVhZG9ubHkgbWV0YT86IEVmZmVjdE9wW1wibWV0YVwiXVxuICByZWFkb25seSBpZD86IHN0cmluZ1xufSk6IEVmZmVjdC5FZmZlY3Q8RWZmZWN0T3A8QSwgRSwgUj4sIG5ldmVyLCBhbnk+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBpZiAocGFyYW1zLmlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGFyYW1zLmlkLFxuICAgICAgICBraW5kOiBwYXJhbXMua2luZCxcbiAgICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAgIHBheWxvYWQ6IHBhcmFtcy5wYXlsb2FkLFxuICAgICAgICBtZXRhOiBwYXJhbXMubWV0YSxcbiAgICAgICAgZWZmZWN0OiBwYXJhbXMuZWZmZWN0LFxuICAgICAgfSBzYXRpc2ZpZXMgRWZmZWN0T3A8QSwgRSwgUj5cbiAgICB9XG5cbiAgICBjb25zdCBtZXRhOiBhbnkgPSBwYXJhbXMubWV0YSA/PyB7fVxuICAgIGNvbnN0IGluc3RhbmNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG1ldGEuaW5zdGFuY2VJZFxuXG4gICAgbGV0IG9wU2VxOiBudW1iZXJcbiAgICBpZiAodHlwZW9mIG1ldGEub3BTZXEgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKG1ldGEub3BTZXEpKSB7XG4gICAgICBvcFNlcSA9IE1hdGguZmxvb3IobWV0YS5vcFNlcSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2Vzc2lvbk9wdCA9IHlpZWxkKiBFZmZlY3Quc2VydmljZU9wdGlvbihSdW5TZXNzaW9uVGFnKVxuICAgICAgaWYgKE9wdGlvbi5pc1NvbWUoc2Vzc2lvbk9wdCkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gaW5zdGFuY2VJZCA/PyBcImdsb2JhbFwiXG4gICAgICAgIG9wU2VxID0gc2Vzc2lvbk9wdC52YWx1ZS5sb2NhbC5uZXh0U2VxKFwib3BTZXFcIiwga2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BTZXEgPSBuZXh0T3BTZXEoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogbWFrZUlkKGluc3RhbmNlSWQsIG9wU2VxKSxcbiAgICAgIGtpbmQ6IHBhcmFtcy5raW5kLFxuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICBwYXlsb2FkOiBwYXJhbXMucGF5bG9hZCxcbiAgICAgIG1ldGE6IG1ldGEub3BTZXEgPT09IG9wU2VxID8gbWV0YSA6IHsgLi4ubWV0YSwgb3BTZXEgfSxcbiAgICAgIGVmZmVjdDogcGFyYW1zLmVmZmVjdCxcbiAgICB9IHNhdGlzZmllcyBFZmZlY3RPcDxBLCBFLCBSPlxuICB9KVxuXG4vKipcbiAqIEVmZmVjdE9wLndpdGhNZXRhXHVGRjFBXG4gKiAtIFx1NTcyOFx1NzNCMFx1NjcwOSBFZmZlY3RPcCBcdTRFMEFcdThGRkRcdTUyQTBcdTYyMTZcdTg5ODZcdTc2RDYgbWV0YSBcdTVCNTdcdTZCQjVcdUZGMUJcbiAqIC0gXHU0RTBEXHU2NTM5XHU1M0Q4IGVmZmVjdCBcdTY3MkNcdThFQUJcdTMwMDJcbiAqL1xuZXhwb3J0IGNvbnN0IHdpdGhNZXRhID0gPEEsIEUsIFI+KFxuICBvcDogRWZmZWN0T3A8QSwgRSwgUj4sXG4gIG1ldGE6IFBhcnRpYWw8Tm9uTnVsbGFibGU8RWZmZWN0T3BbXCJtZXRhXCJdPj4sXG4pOiBFZmZlY3RPcDxBLCBFLCBSPiA9PiAoe1xuICAuLi5vcCxcbiAgbWV0YTogeyAuLi4ob3AubWV0YSA/PyB7fSksIC4uLm1ldGEgfSxcbn0pXG5cbi8qKlxuICogRWZmZWN0T3AucnVuXHVGRjFBXG4gKiAtIFx1NEY3Rlx1NzUyOFx1N0VEOVx1NUI5QSBNaWRkbGV3YXJlU3RhY2sgXHU2MjY3XHU4ODRDXHU0RTAwXHU2NzYxIEVmZmVjdE9wXHVGRjFCXG4gKiAtIFx1ODJFNSBzdGFjayBcdTRFM0FcdTdBN0FcdUZGMENcdTUyMTlcdTc2RjRcdTYzQTVcdThGRDRcdTU2REUgb3AuZWZmZWN0XHUzMDAyXG4gKi9cbmV4cG9ydCBjb25zdCBydW4gPSA8QSwgRSwgUj4oXG4gIG9wOiBFZmZlY3RPcDxBLCBFLCBSPixcbiAgc3RhY2s6IE1pZGRsZXdhcmVTdGFjayxcbik6IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj4gPT4gQ29yZS5ydW5XaXRoTWlkZGxld2FyZShvcCwgc3RhY2spXG5cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7O0FBSUEsU0FBUyxTQUFTLFFBQVEsZ0JBQWdCO0FBT25DLElBQU0sZ0JBQWdCLFNBQVMsV0FBK0IsTUFBUztBQWtDdkUsSUFBTSx3QkFBd0IsQ0FBQyxZQU1aO0FBQUEsRUFDeEIsTUFBTTtBQUFBLEVBQ04sU0FBUyxPQUFPO0FBQUEsRUFDaEIsTUFBTSxPQUFPO0FBQUEsRUFDYixNQUFNLE9BQU87QUFBQSxFQUNiLFFBQVEsT0FBTztBQUFBLEVBQ2YsU0FBUyxPQUFPO0FBQ2xCO0FBdUVPLElBQU0sd0JBQU4sY0FBb0MsUUFBUTtBQUFBLEVBQ2pEO0FBQ0YsRUFBZ0QsRUFBRTtBQUFDO0FBUTVDLElBQU0sb0JBQW9CLENBQUMsVUFBdUM7QUFDdkUsU0FBTyxDQUFVLE9B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Q3JELE9BQU87QUFDTCxjQUFRLFVBQVU7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQUEsSUFDTCxJQUFJLE9BQU8sWUFBWSxLQUFLO0FBQUEsSUFDNUIsTUFBTSxPQUFPO0FBQUEsSUFDYixNQUFNLE9BQU87QUFBQSxJQUNiLFNBQVMsT0FBTztBQUFBLElBQ2hCLE1BQU0sS0FBSyxVQUFVLFFBQVEsT0FBTyxFQUFFLEdBQUcsTUFBTSxNQUFNO0FBQUEsSUFDckQsUUFBUSxPQUFPO0FBQUEsRUFDakI7QUFDRixDQUFDO0FBT0ksSUFBTSxXQUFXLENBQ3RCLElBQ0EsVUFDdUI7QUFBQSxFQUN2QixHQUFHO0FBQUEsRUFDSCxNQUFNLEVBQUUsR0FBSSxHQUFHLFFBQVEsQ0FBQyxHQUFJLEdBQUcsS0FBSztBQUN0QztBQU9PLElBQU0sTUFBTSxDQUNqQixJQUNBLFVBQ2dDLGtCQUFrQixJQUFJLEtBQUs7IiwKICAibmFtZXMiOiBbIkNvbnRleHQiLCAiQ29udGV4dCIsICJFZmZlY3QiLCAiY29tcG9zZU1pZGRsZXdhcmUiLCAibWFrZU9wZXJhdGlvblJlamVjdGVkIiwgIkVmZmVjdCJdCn0K
|