@logixjs/core 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/{Action-mqVvtEHt.d.ts → Action-DYl88bwj.d.ts} +1 -1
- package/dist/{Action-BkRHy2vg.d.cts → Action-DkxsI_DK.d.cts} +1 -1
- package/dist/Action.cjs.map +1 -1
- package/dist/Action.d.cts +1 -1
- package/dist/Action.d.ts +1 -1
- package/dist/Action.js +2 -2
- package/dist/{Actions-AsQ07yTP.d.cts → Actions-Dicm7jdc.d.cts} +2 -2
- package/dist/{Actions-AsQ07yTP.d.ts → Actions-Dicm7jdc.d.ts} +2 -2
- package/dist/Actions.cjs.map +1 -1
- package/dist/Actions.d.cts +1 -1
- package/dist/Actions.d.ts +1 -1
- package/dist/Actions.js +1 -1
- package/dist/{Bound-BN1DQ_lM.d.ts → Bound-1OJLzVIS.d.ts} +2 -2
- package/dist/{Bound-BPIfH9SS.d.cts → Bound-BMLrtQ1V.d.cts} +2 -2
- package/dist/Bound.cjs +1737 -399
- package/dist/Bound.cjs.map +1 -1
- package/dist/Bound.d.cts +5 -5
- package/dist/Bound.d.ts +5 -5
- package/dist/Bound.js +19 -17
- package/dist/{Debug-B5q5Bkzx.d.ts → Debug-DKrWP5H1.d.ts} +40 -22
- package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-hIT44XsY.d.cts} +40 -22
- package/dist/Debug.cjs +1348 -318
- package/dist/Debug.cjs.map +1 -1
- package/dist/Debug.d.cts +12 -11
- package/dist/Debug.d.ts +12 -11
- package/dist/Debug.js +20 -11
- package/dist/EffectOp.cjs +15 -6
- package/dist/EffectOp.cjs.map +1 -1
- package/dist/EffectOp.js +3 -3
- package/dist/Env.cjs +772 -6
- package/dist/Env.cjs.map +1 -1
- package/dist/Env.js +5 -2
- package/dist/ExternalStore-DqJKKRJ4.d.ts +61 -0
- package/dist/ExternalStore-JC-gAgEI.d.cts +61 -0
- package/dist/ExternalStore.cjs +774 -0
- package/dist/ExternalStore.cjs.map +1 -0
- package/dist/ExternalStore.d.cts +8 -0
- package/dist/ExternalStore.d.ts +8 -0
- package/dist/ExternalStore.js +19 -0
- package/dist/ExternalStore.js.map +1 -0
- package/dist/{Flow-BhpjE22E.d.ts → Flow-CZmXRDqp.d.cts} +13 -4
- package/dist/{Flow-1fZT8MpX.d.cts → Flow-DIVDxz7R.d.ts} +13 -4
- package/dist/Flow.cjs +765 -148
- package/dist/Flow.cjs.map +1 -1
- package/dist/Flow.d.cts +6 -6
- package/dist/Flow.d.ts +6 -6
- package/dist/Flow.js +9 -8
- package/dist/{Handle-D_cLW1Z3.d.ts → Handle-Bo6cAFut.d.ts} +1 -1
- package/dist/{Handle-D8D1zPb_.d.cts → Handle-CfDvSqN7.d.cts} +1 -1
- package/dist/Handle.d.cts +5 -5
- package/dist/Handle.d.ts +5 -5
- package/dist/{Kernel-8kC-jOda.d.cts → Kernel-CuXBF9S_.d.cts} +16 -7
- package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-D9guNwRL.d.ts} +16 -7
- package/dist/Kernel.cjs +814 -26
- package/dist/Kernel.cjs.map +1 -1
- package/dist/Kernel.d.cts +13 -12
- package/dist/Kernel.d.ts +13 -12
- package/dist/Kernel.js +7 -4
- package/dist/{Link-Db7975nU.d.ts → Link-CUM0yUCH.d.ts} +10 -3
- package/dist/{Link-fX8x1eCK.d.cts → Link-NAfR6uGD.d.cts} +10 -3
- package/dist/Link.cjs +1294 -121
- package/dist/Link.cjs.map +1 -1
- package/dist/Link.d.cts +5 -5
- package/dist/Link.d.ts +5 -5
- package/dist/Link.js +37 -29
- package/dist/{Logic-DRh4sDZj.d.cts → Logic-09VQpIj3.d.cts} +7 -4
- package/dist/{Logic-BRjEMr-W.d.ts → Logic-DKg7ghGy.d.ts} +7 -4
- package/dist/Logic.cjs +2 -1
- package/dist/Logic.cjs.map +1 -1
- package/dist/Logic.d.cts +5 -5
- package/dist/Logic.d.ts +5 -5
- package/dist/Logic.js +1 -1
- package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-CsW5jgrL.d.ts} +1 -1
- package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-Dksk07F4.d.cts} +1 -1
- package/dist/MatchBuilder.cjs +2 -2
- package/dist/MatchBuilder.cjs.map +1 -1
- package/dist/MatchBuilder.d.cts +6 -6
- package/dist/MatchBuilder.d.ts +6 -6
- package/dist/MatchBuilder.js +2 -2
- package/dist/Middleware-D8tUDLv_.d.cts +100 -0
- package/dist/Middleware-DS7CbTTN.d.ts +100 -0
- package/dist/Middleware.cjs +678 -58
- package/dist/Middleware.cjs.map +1 -1
- package/dist/Middleware.d.cts +2 -86
- package/dist/Middleware.d.ts +2 -86
- package/dist/Middleware.js +15 -12
- package/dist/{Module-DnzluX2J.d.ts → Module-B_Cntyms.d.ts} +54 -25
- package/dist/{Module-B_0xRDMR.d.cts → Module-CmNOVXzf.d.cts} +54 -25
- package/dist/Module.cjs +9331 -3317
- package/dist/Module.cjs.map +1 -1
- package/dist/Module.d.cts +7 -6
- package/dist/Module.d.ts +7 -6
- package/dist/Module.js +39 -31
- package/dist/ModuleTag-CGho_InD.d.ts +113 -0
- package/dist/ModuleTag-CITb8L_G.d.cts +113 -0
- package/dist/ModuleTag.cjs +7248 -2847
- package/dist/ModuleTag.cjs.map +1 -1
- package/dist/ModuleTag.d.cts +6 -6
- package/dist/ModuleTag.d.ts +6 -6
- package/dist/ModuleTag.js +35 -29
- package/dist/Observability-Bdhnx2Dv.d.ts +385 -0
- package/dist/Observability-DXGAFBIT.d.cts +385 -0
- package/dist/Observability.cjs +5093 -1556
- package/dist/Observability.cjs.map +1 -1
- package/dist/Observability.d.cts +6 -7
- package/dist/Observability.d.ts +6 -7
- package/dist/Observability.js +28 -23
- package/dist/{Platform-CHX8o-U4.d.ts → Platform-B4s8tg6C.d.cts} +4 -5
- package/dist/{Platform-C49Pv956.d.cts → Platform-BV_0MW7g.d.cts} +5 -2
- package/dist/{Platform-C49Pv956.d.ts → Platform-BV_0MW7g.d.ts} +5 -2
- package/dist/{Platform-CVlv0xLQ.d.cts → Platform-W0Mefy_e.d.ts} +4 -5
- package/dist/Platform.cjs +2 -1
- package/dist/Platform.cjs.map +1 -1
- package/dist/Platform.d.cts +2 -3
- package/dist/Platform.d.ts +2 -3
- package/dist/Platform.js +2 -2
- package/dist/{Process-CM9xbMdP.d.ts → Process-CO8G7HO9.d.cts} +30 -5
- package/dist/{Process-mL8fHDSB.d.cts → Process-Cyf6VNDR.d.ts} +30 -5
- package/dist/Process.cjs +1288 -120
- package/dist/Process.cjs.map +1 -1
- package/dist/Process.d.cts +6 -6
- package/dist/Process.d.ts +6 -6
- package/dist/Process.js +34 -26
- package/dist/ReadQuery-C_or5nLC.d.ts +128 -0
- package/dist/ReadQuery-DXLzCE0E.d.cts +614 -0
- package/dist/ReadQuery-DXLzCE0E.d.ts +614 -0
- package/dist/ReadQuery-Yve1lmUo.d.cts +128 -0
- package/dist/ReadQuery.cjs +290 -5
- package/dist/ReadQuery.cjs.map +1 -1
- package/dist/ReadQuery.d.cts +3 -2
- package/dist/ReadQuery.d.ts +3 -2
- package/dist/ReadQuery.js +23 -5
- package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-B2Xi1e4Q.d.ts} +89 -7
- package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DNB4V4_e.d.cts} +89 -7
- package/dist/Reflection.cjs +3227 -1617
- package/dist/Reflection.cjs.map +1 -1
- package/dist/Reflection.d.cts +17 -15
- package/dist/Reflection.d.ts +17 -15
- package/dist/Reflection.js +33 -25
- package/dist/{Resource-Dy1xD_DG.d.cts → Resource-pKvQQ4x5.d.cts} +3 -3
- package/dist/{Resource-Dy1xD_DG.d.ts → Resource-pKvQQ4x5.d.ts} +3 -3
- package/dist/Resource.cjs +781 -15
- package/dist/Resource.cjs.map +1 -1
- package/dist/Resource.d.cts +1 -1
- package/dist/Resource.d.ts +1 -1
- package/dist/Resource.js +6 -3
- package/dist/{Root-7ADUMk4t.d.cts → Root-CCVuFHB6.d.cts} +3 -3
- package/dist/{Root-7ADUMk4t.d.ts → Root-CCVuFHB6.d.ts} +3 -3
- package/dist/Root.cjs +786 -20
- package/dist/Root.cjs.map +1 -1
- package/dist/Root.d.cts +2 -2
- package/dist/Root.d.ts +2 -2
- package/dist/Root.js +7 -3
- package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-CRmvwK4I.d.ts} +70 -14
- package/dist/{Runtime-B-aL-f29.d.cts → Runtime-C_wJM9mN.d.cts} +70 -14
- package/dist/Runtime.cjs +4942 -1601
- package/dist/Runtime.cjs.map +1 -1
- package/dist/Runtime.d.cts +17 -15
- package/dist/Runtime.d.ts +17 -15
- package/dist/Runtime.js +44 -32
- package/dist/{ScopeRegistry-D1owDNSm.d.cts → ScopeRegistry-BhYzqWri.d.cts} +6 -6
- package/dist/{ScopeRegistry-D1owDNSm.d.ts → ScopeRegistry-BhYzqWri.d.ts} +6 -6
- package/dist/ScopeRegistry.cjs +776 -10
- package/dist/ScopeRegistry.cjs.map +1 -1
- package/dist/ScopeRegistry.d.cts +1 -1
- package/dist/ScopeRegistry.d.ts +1 -1
- package/dist/ScopeRegistry.js +6 -3
- package/dist/{State-CU50R26M.d.cts → State-rNFsFPTl.d.cts} +2 -2
- package/dist/{State-CU50R26M.d.ts → State-rNFsFPTl.d.ts} +2 -2
- package/dist/State.cjs.map +1 -1
- package/dist/State.d.cts +1 -1
- package/dist/State.d.ts +1 -1
- package/dist/State.js +1 -1
- package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-CijdwNb6.d.ts} +25 -8
- package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-Dltto6PU.d.cts} +25 -8
- package/dist/StateTrait.cjs +1890 -528
- package/dist/StateTrait.cjs.map +1 -1
- package/dist/StateTrait.d.cts +9 -7
- package/dist/StateTrait.d.ts +9 -7
- package/dist/StateTrait.js +18 -14
- package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-BKzDqzLu.d.cts} +2 -2
- package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-Cvo94uDB.d.ts} +2 -2
- package/dist/TraitLifecycle.cjs +630 -67
- package/dist/TraitLifecycle.cjs.map +1 -1
- package/dist/TraitLifecycle.d.cts +6 -6
- package/dist/TraitLifecycle.d.ts +6 -6
- package/dist/TraitLifecycle.js +8 -7
- package/dist/Workflow-C_OWr4dV.d.ts +415 -0
- package/dist/Workflow-DmydkHO8.d.cts +415 -0
- package/dist/Workflow.cjs +3150 -0
- package/dist/Workflow.cjs.map +1 -0
- package/dist/Workflow.d.cts +7 -0
- package/dist/Workflow.d.ts +7 -0
- package/dist/Workflow.js +58 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/{action-DiMDD_0v.d.cts → action-BQxjPFEw.d.cts} +5 -5
- package/dist/{action-DiMDD_0v.d.ts → action-BQxjPFEw.d.ts} +5 -5
- package/dist/chunk-2XRLXDWR.js +276 -0
- package/dist/chunk-2XRLXDWR.js.map +1 -0
- package/dist/chunk-3L6QGFMM.js +701 -0
- package/dist/chunk-3L6QGFMM.js.map +1 -0
- package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
- package/dist/chunk-4MZ7BT3R.js.map +1 -0
- package/dist/{chunk-3IYZ5IGG.js → chunk-5WKUGEBY.js} +2 -2
- package/dist/{chunk-3RMKLXHX.js → chunk-63ZQ5RIN.js} +2 -2
- package/dist/{chunk-M3WTHJHJ.js → chunk-67DIEA53.js} +385 -148
- package/dist/chunk-67DIEA53.js.map +1 -0
- package/dist/{chunk-YS3AZQ2G.js → chunk-6HFAW2MH.js} +1 -1
- package/dist/chunk-6HFAW2MH.js.map +1 -0
- package/dist/{chunk-EY4NZKDR.js → chunk-6Y2TKCNY.js} +2 -2
- package/dist/{chunk-76WT3HOR.js → chunk-6YZOXFPQ.js} +25 -24
- package/dist/chunk-6YZOXFPQ.js.map +1 -0
- package/dist/{chunk-G5ZBFPNU.js → chunk-A2RQOJC7.js} +2 -2
- package/dist/{chunk-AUIR5O6W.js → chunk-AFSB6NKM.js} +13 -19
- package/dist/chunk-AFSB6NKM.js.map +1 -0
- package/dist/{chunk-JCXGZRMU.js → chunk-AO4JEOKD.js} +22 -23
- package/dist/chunk-AO4JEOKD.js.map +1 -0
- package/dist/{chunk-TAAPQVZN.js → chunk-AYELIQXR.js} +2 -2
- package/dist/{chunk-QMM6O4CD.js → chunk-BLHZW7DG.js} +15 -3
- package/dist/{chunk-QMM6O4CD.js.map → chunk-BLHZW7DG.js.map} +1 -1
- package/dist/{chunk-TQOBJYDP.js → chunk-CD4N74YC.js} +1 -1
- package/dist/chunk-CD4N74YC.js.map +1 -0
- package/dist/{chunk-ANLBCBDC.js → chunk-CGE2HBTH.js} +11 -11
- package/dist/chunk-CGE2HBTH.js.map +1 -0
- package/dist/{chunk-OFADUJWJ.js → chunk-CYYSQMLO.js} +5 -5
- package/dist/chunk-CYYSQMLO.js.map +1 -0
- package/dist/{chunk-66ALHVEX.js → chunk-EB46EYI7.js} +3 -3
- package/dist/{chunk-NZJKFF45.js → chunk-EKCDHWRK.js} +4 -4
- package/dist/chunk-EKCDHWRK.js.map +1 -0
- package/dist/{chunk-BABLDP24.js → chunk-EPQFNJU3.js} +152 -7
- package/dist/chunk-EPQFNJU3.js.map +1 -0
- package/dist/{chunk-OGWBVHB3.js → chunk-ESR6HGOY.js} +73 -14
- package/dist/chunk-ESR6HGOY.js.map +1 -0
- package/dist/{chunk-NBD3KUOZ.js → chunk-F6RP62H3.js} +150 -98
- package/dist/chunk-F6RP62H3.js.map +1 -0
- package/dist/chunk-FBYW3QDI.js +252 -0
- package/dist/chunk-FBYW3QDI.js.map +1 -0
- package/dist/{chunk-IPF7E66P.js → chunk-FYAODKVP.js} +2 -2
- package/dist/chunk-GNEN7NKO.js +908 -0
- package/dist/chunk-GNEN7NKO.js.map +1 -0
- package/dist/chunk-GWSM4KLB.js +763 -0
- package/dist/chunk-GWSM4KLB.js.map +1 -0
- package/dist/{chunk-4SO6JMZL.js → chunk-HDMXCUZL.js} +1 -1
- package/dist/chunk-HDMXCUZL.js.map +1 -0
- package/dist/{chunk-ZFY7U2FR.js → chunk-HJM5Y5NU.js} +43 -3
- package/dist/chunk-HJM5Y5NU.js.map +1 -0
- package/dist/{chunk-ZGDVUPTM.js → chunk-IOZ3VKPK.js} +129 -68
- package/dist/chunk-IOZ3VKPK.js.map +1 -0
- package/dist/{chunk-PYOE4VSI.js → chunk-IVXSVHO4.js} +303 -247
- package/dist/chunk-IVXSVHO4.js.map +1 -0
- package/dist/chunk-J3CWXIPV.js +242 -0
- package/dist/chunk-J3CWXIPV.js.map +1 -0
- package/dist/chunk-K6JQW266.js +42 -0
- package/dist/chunk-K6JQW266.js.map +1 -0
- package/dist/chunk-KMZYQF6Q.js +202 -0
- package/dist/chunk-KMZYQF6Q.js.map +1 -0
- package/dist/{chunk-JWOYLO27.js → chunk-LPPZDFTD.js} +22 -12
- package/dist/chunk-LPPZDFTD.js.map +1 -0
- package/dist/{chunk-PAYXCY6A.js → chunk-MYB2B5WX.js} +997 -576
- package/dist/chunk-MYB2B5WX.js.map +1 -0
- package/dist/chunk-MYKNINNN.js +228 -0
- package/dist/chunk-MYKNINNN.js.map +1 -0
- package/dist/chunk-NSQIRMVF.js +27 -0
- package/dist/{chunk-QCHIQWAJ.js.map → chunk-NSQIRMVF.js.map} +1 -1
- package/dist/chunk-NUDBM4MM.js +30 -0
- package/dist/chunk-NUDBM4MM.js.map +1 -0
- package/dist/chunk-NZMWWDAY.js +23 -0
- package/dist/chunk-NZMWWDAY.js.map +1 -0
- package/dist/{chunk-RNFE3ML2.js → chunk-OCUV2Y25.js} +4 -3
- package/dist/chunk-OCUV2Y25.js.map +1 -0
- package/dist/chunk-P4ZJOQA7.js +271 -0
- package/dist/chunk-P4ZJOQA7.js.map +1 -0
- package/dist/chunk-P6C5EZ3D.js +342 -0
- package/dist/chunk-P6C5EZ3D.js.map +1 -0
- package/dist/{chunk-CW6T36TN.js → chunk-PBD7BJUN.js} +62 -4
- package/dist/chunk-PBD7BJUN.js.map +1 -0
- package/dist/chunk-PBIUCQY3.js +696 -0
- package/dist/chunk-PBIUCQY3.js.map +1 -0
- package/dist/chunk-PD6YECQH.js +845 -0
- package/dist/chunk-PD6YECQH.js.map +1 -0
- package/dist/{chunk-M7IYCTJV.js → chunk-R4LFQGP3.js} +2 -2
- package/dist/chunk-RHJIGDUE.js +21 -0
- package/dist/chunk-RHJIGDUE.js.map +1 -0
- package/dist/{chunk-KP7MUZNX.js → chunk-RLXO27MW.js} +30 -8
- package/dist/chunk-RLXO27MW.js.map +1 -0
- package/dist/{chunk-DFNM3WX2.js → chunk-S44BEV4B.js} +168 -45
- package/dist/chunk-S44BEV4B.js.map +1 -0
- package/dist/chunk-S4S5N4BJ.js +1461 -0
- package/dist/chunk-S4S5N4BJ.js.map +1 -0
- package/dist/{chunk-BZ2SHDN2.js → chunk-SGTRAXXX.js} +3 -3
- package/dist/chunk-SGTRAXXX.js.map +1 -0
- package/dist/{chunk-M2RGJPXX.js → chunk-SJAE5PB5.js} +3 -3
- package/dist/{chunk-JGIWG6SR.js → chunk-SNPNHU3H.js} +3937 -1776
- package/dist/chunk-SNPNHU3H.js.map +1 -0
- package/dist/{chunk-IHVBV5C2.js → chunk-SOOBFXRR.js} +94 -71
- package/dist/chunk-SOOBFXRR.js.map +1 -0
- package/dist/{chunk-ZDTRWK5F.js → chunk-TAHFWKS6.js} +2 -2
- package/dist/chunk-UEFFTVPY.js +9 -0
- package/dist/chunk-UEFFTVPY.js.map +1 -0
- package/dist/{chunk-24VULZ7A.js → chunk-UR5BXLBP.js} +3 -3
- package/dist/chunk-UR5BXLBP.js.map +1 -0
- package/dist/{chunk-DMBALCE2.js → chunk-V2SBGVDO.js} +471 -186
- package/dist/chunk-V2SBGVDO.js.map +1 -0
- package/dist/chunk-VJLWD47W.js +23 -0
- package/dist/chunk-VJLWD47W.js.map +1 -0
- package/dist/{chunk-4CQAV7YB.js → chunk-W647DX5Z.js} +2 -2
- package/dist/{chunk-THATMZXD.js → chunk-WFIIU3YZ.js} +2 -2
- package/dist/{chunk-THATMZXD.js.map → chunk-WFIIU3YZ.js.map} +1 -1
- package/dist/chunk-YZDJMAKL.js +82 -0
- package/dist/chunk-YZDJMAKL.js.map +1 -0
- package/dist/{chunk-3TMODYZV.js → chunk-Z5XH6VHY.js} +5 -5
- package/dist/chunk-Z5XH6VHY.js.map +1 -0
- package/dist/{chunk-BE3HW4FY.js → chunk-ZBBMZMA6.js} +377 -170
- package/dist/chunk-ZBBMZMA6.js.map +1 -0
- package/dist/index.cjs +21224 -11714
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +195 -49
- package/dist/index.d.ts +195 -49
- package/dist/index.js +150 -74
- package/dist/index.js.map +1 -1
- package/dist/{ir-BMP7yxJJ.d.cts → ir-BSosEwc8.d.cts} +1 -1
- package/dist/{ir-DUOz6H-5.d.ts → ir-D-uqwL_4.d.ts} +1 -1
- package/dist/{module-B8CBqIZ_.d.cts → module-Ds4tarcI.d.cts} +230 -140
- package/dist/{module-k7m3txak.d.ts → module-Zd1Gn-Nj.d.ts} +230 -140
- package/package.json +20 -4
- package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
- package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
- package/dist/Observability-COqEvp2C.d.cts +0 -713
- package/dist/Observability-cY4kLn0S.d.ts +0 -713
- package/dist/ReadQuery-BlMwhe-F.d.ts +0 -30
- package/dist/ReadQuery-CL5XlXts.d.cts +0 -30
- package/dist/ReadQuery-SinbStGF.d.cts +0 -38
- package/dist/ReadQuery-SinbStGF.d.ts +0 -38
- package/dist/chunk-24VULZ7A.js.map +0 -1
- package/dist/chunk-3QMIVH35.js +0 -43
- package/dist/chunk-3QMIVH35.js.map +0 -1
- package/dist/chunk-3TMODYZV.js.map +0 -1
- package/dist/chunk-4SO6JMZL.js.map +0 -1
- package/dist/chunk-76WT3HOR.js.map +0 -1
- package/dist/chunk-ANLBCBDC.js.map +0 -1
- package/dist/chunk-AUIR5O6W.js.map +0 -1
- package/dist/chunk-BABLDP24.js.map +0 -1
- package/dist/chunk-BE3HW4FY.js.map +0 -1
- package/dist/chunk-BZ2SHDN2.js.map +0 -1
- package/dist/chunk-CW6T36TN.js.map +0 -1
- package/dist/chunk-DFNM3WX2.js.map +0 -1
- package/dist/chunk-DMBALCE2.js.map +0 -1
- package/dist/chunk-EGK3KN7B.js +0 -406
- package/dist/chunk-EGK3KN7B.js.map +0 -1
- package/dist/chunk-GMPEOUP2.js.map +0 -1
- package/dist/chunk-IHVBV5C2.js.map +0 -1
- package/dist/chunk-JCXGZRMU.js.map +0 -1
- package/dist/chunk-JGIWG6SR.js.map +0 -1
- package/dist/chunk-JWOYLO27.js.map +0 -1
- package/dist/chunk-KIXAU3GM.js +0 -137
- package/dist/chunk-KIXAU3GM.js.map +0 -1
- package/dist/chunk-KL5ACTCT.js +0 -8
- package/dist/chunk-KL5ACTCT.js.map +0 -1
- package/dist/chunk-KP7MUZNX.js.map +0 -1
- package/dist/chunk-M3BFQ7HK.js +0 -13
- package/dist/chunk-M3BFQ7HK.js.map +0 -1
- package/dist/chunk-M3WTHJHJ.js.map +0 -1
- package/dist/chunk-NBD3KUOZ.js.map +0 -1
- package/dist/chunk-NQZ2OSGR.js +0 -151
- package/dist/chunk-NQZ2OSGR.js.map +0 -1
- package/dist/chunk-NZJKFF45.js.map +0 -1
- package/dist/chunk-OFADUJWJ.js.map +0 -1
- package/dist/chunk-OGWBVHB3.js.map +0 -1
- package/dist/chunk-PAYXCY6A.js.map +0 -1
- package/dist/chunk-PYOE4VSI.js.map +0 -1
- package/dist/chunk-QCHIQWAJ.js +0 -21
- package/dist/chunk-RNFE3ML2.js.map +0 -1
- package/dist/chunk-TKZ7MEIA.js +0 -27
- package/dist/chunk-TKZ7MEIA.js.map +0 -1
- package/dist/chunk-TQOBJYDP.js.map +0 -1
- package/dist/chunk-VZB726PE.js +0 -93
- package/dist/chunk-VZB726PE.js.map +0 -1
- package/dist/chunk-W3TEWHLO.js +0 -568
- package/dist/chunk-W3TEWHLO.js.map +0 -1
- package/dist/chunk-YS3AZQ2G.js.map +0 -1
- package/dist/chunk-ZFLHVFUC.js +0 -192
- package/dist/chunk-ZFLHVFUC.js.map +0 -1
- package/dist/chunk-ZFY7U2FR.js.map +0 -1
- package/dist/chunk-ZGDVUPTM.js.map +0 -1
- package/dist/protocol-g_1897M2.d.cts +0 -127
- package/dist/protocol-g_1897M2.d.ts +0 -127
- /package/dist/{chunk-3IYZ5IGG.js.map → chunk-5WKUGEBY.js.map} +0 -0
- /package/dist/{chunk-3RMKLXHX.js.map → chunk-63ZQ5RIN.js.map} +0 -0
- /package/dist/{chunk-EY4NZKDR.js.map → chunk-6Y2TKCNY.js.map} +0 -0
- /package/dist/{chunk-G5ZBFPNU.js.map → chunk-A2RQOJC7.js.map} +0 -0
- /package/dist/{chunk-TAAPQVZN.js.map → chunk-AYELIQXR.js.map} +0 -0
- /package/dist/{chunk-66ALHVEX.js.map → chunk-EB46EYI7.js.map} +0 -0
- /package/dist/{chunk-IPF7E66P.js.map → chunk-FYAODKVP.js.map} +0 -0
- /package/dist/{chunk-M7IYCTJV.js.map → chunk-R4LFQGP3.js.map} +0 -0
- /package/dist/{chunk-M2RGJPXX.js.map → chunk-SJAE5PB5.js.map} +0 -0
- /package/dist/{chunk-ZDTRWK5F.js.map → chunk-TAHFWKS6.js.map} +0 -0
- /package/dist/{chunk-4CQAV7YB.js.map → chunk-W647DX5Z.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/runtime/core/ModuleRuntime.registry.ts","../src/internal/runtime/core/ModuleRuntime.impl.ts","../src/internal/runtime/core/StateTransaction.ts","../src/internal/runtime/core/normalize.ts","../src/internal/runtime/core/ModuleRuntime.operation.ts","../src/internal/runtime/core/ModuleRuntime.dispatch.ts","../src/internal/runtime/core/ReducerDiagnostics.ts","../src/internal/runtime/core/ModuleRuntime.effects.ts","../src/internal/runtime/core/ModuleRuntime.transaction.ts","../src/internal/state-trait/plan-cache.ts","../src/internal/state-trait/converge.types.ts","../src/internal/state-trait/converge-in-transaction.impl.ts","../src/internal/state-trait/converge-draft.ts","../src/internal/state-trait/exec-vm-mode.ts","../src/internal/state-trait/bitset.ts","../src/internal/state-trait/converge-exec-ir.ts","../src/internal/state-trait/converge-step.ts","../src/internal/state-trait/validate.impl.ts","../src/internal/state-trait/graph.ts","../src/internal/state-trait/reverse-closure.ts","../src/internal/runtime/core/ModuleRuntime.txnQueue.ts","../src/internal/runtime/core/runner/SyncEffectRunner.ts","../src/internal/runtime/core/ModuleRuntime.concurrencyPolicy.ts","../src/internal/runtime/core/ModuleRuntime.txnLanePolicy.ts","../src/internal/runtime/core/ModuleRuntime.traitConvergeConfig.ts","../src/internal/runtime/core/ModuleRuntime.internalHooks.ts","../src/internal/runtime/core/SelectorGraph.ts","../src/internal/runtime/core/ModuleRuntime.logics.ts","../src/internal/runtime/core/LifecycleDiagnostics.ts","../src/internal/runtime/core/LogicPlanMarker.ts","../src/internal/runtime/core/ConcurrencyDiagnostics.ts"],"sourcesContent":["import { ServiceMap } from 'effect'\nimport type { ModuleRuntime as PublicModuleRuntime } from './module.js'\n\n/**\n * Process-level runtime registry (debug-only / non-authoritative):\n * - key: Module Tag (the ModuleTag itself).\n * - value: the corresponding ModuleRuntime instance.\n *\n * Constraints:\n * - This is a \"single-slot table\": one Tag can only map to one runtime; it cannot represent correct multi-instance/multi-root semantics.\n * - Must not be used as a resolution fallback (in strict mode, missing providers must fail).\n * - Devtools/internal debugging only; migrate to explicit handles/Link when feasible.\n */\nconst runtimeRegistry = new WeakMap<ServiceMap.Key<any, PublicModuleRuntime<any, any>>, PublicModuleRuntime<any, any>>()\n\n/**\n * Runtime registry indexed by moduleId + instanceId:\n * - Primarily used by Devtools / internal debugging to locate ModuleRuntime by instance.\n * - key format: `${moduleId}::${instanceId}`.\n * - The primary anchor is instanceId (do not use dual anchors).\n */\nconst runtimeByInstanceKey = new Map<string, PublicModuleRuntime<any, any>>()\n\nexport const registerRuntime = <S, A>(\n tag: ServiceMap.Key<any, PublicModuleRuntime<S, A>>,\n runtime: PublicModuleRuntime<S, A>,\n): void => {\n runtimeRegistry.set(tag as ServiceMap.Key<any, PublicModuleRuntime<any, any>>, runtime as PublicModuleRuntime<any, any>)\n}\n\nexport const unregisterRuntime = (tag: ServiceMap.Key<any, PublicModuleRuntime<any, any>>): void => {\n runtimeRegistry.delete(tag)\n}\n\nexport const getRegisteredRuntime = <S, A>(\n tag: ServiceMap.Key<any, PublicModuleRuntime<S, A>>,\n): PublicModuleRuntime<S, A> | undefined =>\n runtimeRegistry.get(tag as ServiceMap.Key<any, PublicModuleRuntime<any, any>>) as PublicModuleRuntime<S, A> | undefined\n\nexport const getRuntimeByModuleAndInstance = <S, A>(\n moduleId: string,\n instanceId: string,\n): PublicModuleRuntime<S, A> | undefined =>\n runtimeByInstanceKey.get(`${moduleId}::${instanceId}`) as PublicModuleRuntime<S, A> | undefined\n\nexport const registerRuntimeByInstanceKey = (instanceKey: string, runtime: PublicModuleRuntime<any, any>): void => {\n runtimeByInstanceKey.set(instanceKey, runtime)\n}\n\nexport const unregisterRuntimeByInstanceKey = (instanceKey: string): void => {\n runtimeByInstanceKey.delete(instanceKey)\n}\n","import {\n Exit,\n Effect,\n Fiber,\n ManagedRuntime,\n Layer,\n Stream,\n SubscriptionRef,\n PubSub,\n Scope,\n Option,\n Queue,\n Duration,\n ServiceMap,\n} from 'effect'\nimport type {\n LogicPlan,\n ModuleRuntime as PublicModuleRuntime,\n ReadonlySubscriptionRef,\n StateChangeWithMeta,\n} from './module.js'\nimport * as Lifecycle from './Lifecycle.js'\nimport * as Debug from './DebugSink.js'\nimport { currentConvergeStaticIrCollectors } from './ConvergeStaticIrCollector.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\nimport type * as ModuleTraits from './ModuleTraits.js'\nimport * as StateTransaction from './StateTransaction.js'\nimport * as RuntimeKernel from './RuntimeKernel.js'\nimport * as FullCutoverGate from './FullCutoverGate.js'\nimport * as KernelRef from './KernelRef.js'\nimport * as RuntimeServiceBuiltins from './RuntimeServiceBuiltins.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport {\n getDefaultStateTxnInstrumentation,\n isDevEnv,\n ReadQueryStrictGateConfigTag,\n RuntimeStoreTag,\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n TickSchedulerTag,\n} from './env.js'\nimport type {\n StateTransactionInstrumentation,\n StateTransactionOverrides,\n TraitConvergeTimeSlicingPatch,\n TickSchedulerService,\n TxnLanesPatch,\n} from './env.js'\nimport { normalizeNonEmptyString } from './normalize.js'\nimport { EvidenceCollectorTag } from '../../observability/evidenceCollector.js'\nimport * as EffectOp from '../../effect-op.js'\nimport { makeRunOperation } from './ModuleRuntime.operation.js'\nimport { makeDispatchOps } from './ModuleRuntime.dispatch.js'\nimport { makeEffectsRegistry } from './ModuleRuntime.effects.js'\nimport { makeTransactionOps } from './ModuleRuntime.transaction.js'\nimport { makeResolveConcurrencyPolicy } from './ModuleRuntime.concurrencyPolicy.js'\nimport { makeResolveTxnLanePolicy } from './ModuleRuntime.txnLanePolicy.js'\nimport {\n makeResolveTraitConvergeConfig,\n type ResolvedTraitConvergeConfig,\n} from './ModuleRuntime.traitConvergeConfig.js'\nimport { compareFieldPath, isPrefixOf, normalizeFieldPath, toKey, type DirtyAllReason, type FieldPath } from '../../field-path.js'\nimport * as RowId from '../../state-trait/rowid.js'\nimport * as StateTraitBuild from '../../state-trait/build.js'\nimport { exportConvergeStaticIr, getConvergeStaticIrDigest } from '../../state-trait/converge-ir.js'\nimport { makeConvergeExecIr } from '../../state-trait/converge-exec-ir.js'\nimport * as StateTraitConverge from '../../state-trait/converge.js'\nimport * as StateTraitValidate from '../../state-trait/validate.js'\nimport { installInternalHooks, type TraitState } from './ModuleRuntime.internalHooks.js'\nimport { RootContextTag, type RootContext } from './RootContext.js'\nimport * as ProcessRuntime from './process/ProcessRuntime.js'\nimport * as ReadQuery from './ReadQuery.js'\nimport * as SelectorGraph from './SelectorGraph.js'\nimport { makeModuleInstanceKey, type RuntimeStoreModuleCommit } from './RuntimeStore.js'\nimport {\n getRegisteredRuntime,\n getRuntimeByModuleAndInstance,\n registerRuntime,\n registerRuntimeByInstanceKey,\n unregisterRuntime,\n unregisterRuntimeByInstanceKey,\n} from './ModuleRuntime.registry.js'\nimport {\n makeEnqueueTransaction,\n type CapturedTxnRuntimeScope,\n type EnqueueTransaction,\n} from './ModuleRuntime.txnQueue.js'\nimport { runModuleLogics } from './ModuleRuntime.logics.js'\nimport * as ConcurrencyDiagnostics from './ConcurrencyDiagnostics.js'\n\nexport { registerRuntime, unregisterRuntime, getRegisteredRuntime, getRuntimeByModuleAndInstance }\n\nexport interface ModuleRuntimeOptions<S, A, R = never> {\n readonly tag?: ServiceMap.Key<any, PublicModuleRuntime<S, A>>\n /**\n * List of \"child modules\" resolvable within the current instance scope (imports-scope):\n * - Used only to build a minimal imports injector (ModuleToken -> ModuleRuntime).\n * - Do not capture the whole Context into ModuleRuntime (avoid accidentally retaining root/base services).\n */\n readonly imports?: ReadonlyArray<ServiceMap.Key<any, PublicModuleRuntime<any, any>>>\n readonly logics?: ReadonlyArray<Effect.Effect<any, any, R> | LogicPlan<any, R, any>>\n readonly processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n readonly moduleId?: string\n /** Stable instance anchor (single source of truth); defaults to a monotonic sequence. Never default to randomness/time. */\n readonly instanceId?: string\n readonly createState?: Effect.Effect<SubscriptionRef.SubscriptionRef<S>, never, Scope.Scope>\n readonly createActionHub?: Effect.Effect<PubSub.PubSub<A>, never, Scope.Scope>\n /**\n * Primary reducer map: `_tag -> (state, action) => nextState`.\n *\n * - If provided, dispatch will synchronously apply the reducer before publishing the Action.\n * - If a `_tag` has no reducer, behavior matches the current watcher-only mode.\n */\n readonly reducers?: Readonly<\n Record<string, (state: S, action: A, sink?: (path: StateTransaction.StatePatchPath) => void) => S>\n >\n /**\n * Module-level StateTransaction config:\n * - If instrumentation is provided, it takes precedence over the Runtime-level config and NODE_ENV defaults.\n * - Otherwise, fall back to the Runtime-level config (if any) or getDefaultStateTxnInstrumentation().\n */\n readonly stateTransaction?: {\n readonly instrumentation?: StateTransactionInstrumentation\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeMode?: 'auto' | 'full' | 'dirty'\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n readonly txnLanes?: TxnLanesPatch\n }\n}\n\nlet nextInstanceSeq = 0\n\nconst makeDefaultInstanceId = (): string => {\n nextInstanceSeq += 1\n return `i${nextInstanceSeq}`\n}\n\nexport const make = <S, A, R = never>(\n initialState: S,\n options: ModuleRuntimeOptions<S, A, R> = {},\n): Effect.Effect<PublicModuleRuntime<S, A>, never, Scope.Scope | R> => {\n const program = Effect.gen(function* () {\n const stateRef = options.createState ? yield* options.createState : yield* SubscriptionRef.make(initialState)\n\n const commitHub = yield* PubSub.unbounded<StateChangeWithMeta<S>>()\n const actionCommitHub = yield* PubSub.unbounded<StateChangeWithMeta<A>>()\n let commitHubSubscriberCount = 0\n\n const fromCommitHub = Stream.unwrap(\n Effect.gen(function* () {\n commitHubSubscriberCount += 1\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n commitHubSubscriberCount = Math.max(0, commitHubSubscriberCount - 1)\n }),\n )\n return Stream.fromPubSub(commitHub)\n }),\n )\n\n const moduleId = options.moduleId ?? 'unknown'\n const instanceId = normalizeNonEmptyString(options.instanceId) ?? makeDefaultInstanceId()\n const moduleInstanceKey = makeModuleInstanceKey(moduleId, instanceId)\n const runtimeLabel = yield* Effect.service(Debug.currentRuntimeLabel).pipe(Effect.orDie)\n const lifecycle = yield* Lifecycle.makeLifecycleManager({\n moduleId,\n instanceId,\n runtimeLabel,\n })\n const concurrencyDiagnostics = yield* ConcurrencyDiagnostics.make({\n moduleId: options.moduleId,\n instanceId,\n })\n\n // Resolve StateTransaction instrumentation:\n // - Prefer ModuleRuntimeOptions.stateTransaction.instrumentation.\n // - Otherwise read the default from the Runtime-level StateTransactionConfig service.\n // - Finally fall back to NODE_ENV-based defaults.\n const runtimeConfigOpt = yield* Effect.serviceOption(\n StateTransactionConfigTag as unknown as ServiceMap.Key<any, { instrumentation?: StateTransactionInstrumentation }>,\n )\n const runtimeInstrumentation: StateTransactionInstrumentation | undefined = Option.isSome(runtimeConfigOpt)\n ? runtimeConfigOpt.value.instrumentation\n : undefined\n\n const instrumentation: StateTransactionInstrumentation =\n options.stateTransaction?.instrumentation ?? runtimeInstrumentation ?? getDefaultStateTxnInstrumentation()\n\n const resolveTraitConvergeConfig = makeResolveTraitConvergeConfig({\n moduleId: options.moduleId,\n stateTransaction: options.stateTransaction,\n })\n\n const resolveConcurrencyPolicy = makeResolveConcurrencyPolicy({\n moduleId: options.moduleId,\n diagnostics: concurrencyDiagnostics,\n })\n\n const resolveConcurrencyPolicyFast = makeResolveConcurrencyPolicy({\n moduleId: options.moduleId,\n })\n\n const resolveTxnLanePolicy = makeResolveTxnLanePolicy({\n moduleId: options.moduleId,\n stateTransaction: options.stateTransaction,\n })\n\n const actionHub = options.createActionHub\n ? yield* options.createActionHub\n : yield* Effect.gen(function* () {\n const policy = yield* resolveConcurrencyPolicy()\n return yield* PubSub.bounded<A>(policy.losslessBackpressureCapacity)\n })\n\n\t\t const convergePlanCacheCapacity = 128\n\t\t const traitState: TraitState = {\n\t\t program: undefined,\n\t\t convergeStaticIrDigest: undefined,\n\t\t convergePlanCache: undefined,\n\t convergeGeneration: {\n\t generation: 0,\n\t generationBumpCount: 0,\n\t },\n\t pendingCacheMissReason: undefined,\n\t pendingCacheMissReasonCount: 0,\n\t\t lastConvergeIrKeys: undefined,\n\t\t listConfigs: [],\n\t\t }\n\n\t // Cached list-path set (derived from listConfigs) for txn index evidence recording.\n\t // - undefined => no list traits; keep recordPatch overhead at ~0 for non-list modules.\n\t let listPathSet: ReadonlySet<string> | undefined = undefined\n\n\t let externalOwnedFieldPaths: ReadonlyArray<FieldPath> = []\n\t let externalOwnedFieldPathKeys: ReadonlySet<string> = new Set()\n\n const rowIdStore = new RowId.RowIdStore(instanceId)\n const selectorGraph = SelectorGraph.make<S>({\n moduleId,\n instanceId,\n getFieldPathIdRegistry: () => {\n const convergeIr: any = (traitState.program as any)?.convergeIr\n if (!convergeIr || convergeIr.configError) return undefined\n return convergeIr.fieldPathIdRegistry\n },\n })\n\n // StateTransaction context:\n // - Maintain a single active transaction per ModuleRuntime;\n // - Aggregate state writes from all entrypoints on this instance (dispatch / Traits / source-refresh, etc.);\n // - New entrypoints (e.g. service writebacks / devtools operations) must also go through the same context + queue.\n\t const txnContext = StateTransaction.makeContext<S>({\n\t moduleId,\n\t instanceId,\n\t instrumentation,\n\t getFieldPathIdRegistry: () => {\n\t const convergeIr: any = (traitState.program as any)?.convergeIr\n\t if (!convergeIr || convergeIr.configError) return undefined\n\t return convergeIr.fieldPathIdRegistry\n\t },\n\t getListPathSet: () => listPathSet,\n\t })\n\n const recordStatePatch: RuntimeInternals['txn']['recordStatePatch'] = (\n path,\n reason,\n from,\n to,\n traitNodeId,\n stepId,\n ): void => {\n if (externalOwnedFieldPaths.length > 0) {\n const registry = txnContext.current?.fieldPathIdRegistry\n\n const toFieldPathOrStar = (input: StateTransaction.StatePatchPath | undefined): FieldPath | '*' | undefined => {\n if (input === undefined) return undefined\n if (input === '*') return '*'\n\n if (typeof input === 'number') {\n if (!registry) return '*'\n if (!Number.isFinite(input)) return '*'\n const idx = Math.floor(input)\n if (idx < 0) return '*'\n const resolved = registry.fieldPaths[idx]\n return resolved && Array.isArray(resolved) ? resolved : '*'\n }\n\n if (typeof input === 'string') {\n if (!registry) return '*'\n const id = registry.pathStringToId?.get(input)\n if (id == null) return '*'\n const resolved = registry.fieldPaths[id]\n return resolved && Array.isArray(resolved) ? resolved : '*'\n }\n\n const normalized = normalizeFieldPath(input)\n return normalized ?? '*'\n }\n\n const resolved = toFieldPathOrStar(path)\n\n const throwViolation = (details: { readonly resolvedPath?: FieldPath | '*'; readonly owned?: FieldPath }): never => {\n const owned = details.owned ?? externalOwnedFieldPaths[0]\n const ownedPath = owned ? owned.join('.') : '<unknown>'\n const resolvedPath =\n details.resolvedPath === undefined\n ? '<unknown>'\n : details.resolvedPath === '*'\n ? '*'\n : details.resolvedPath.join('.')\n\n const err: any = new Error(\n '[ExternalOwnedWriteError] State write overlaps an external-owned field.\\n' +\n `moduleId=${options.moduleId ?? 'unknown'}\\n` +\n `instanceId=${instanceId}\\n` +\n `owned=${ownedPath}\\n` +\n `path=${resolvedPath}\\n` +\n `reason=${String(reason)}\\n` +\n 'Fix: do not write external-owned fields via reducers/$.state.*; use StateTrait.externalStore to own the field, and avoid setState/state.update (root writes) on modules with external-owned fields.',\n )\n err.name = 'ExternalOwnedWriteError'\n err._tag = 'ExternalOwnedWriteError'\n err.moduleId = options.moduleId\n err.instanceId = instanceId\n err.reason = reason\n err.path = path\n throw err\n }\n\n const ensureFieldPath = (input: FieldPath | '*' | undefined): FieldPath => {\n if (input === undefined || input === '*') {\n return throwViolation({ resolvedPath: input })\n }\n return input\n }\n\n if (reason === 'trait-external-store') {\n const resolvedFieldPath = ensureFieldPath(resolved)\n const key = toKey(resolvedFieldPath)\n if (!externalOwnedFieldPathKeys.has(key)) {\n throwViolation({ resolvedPath: resolvedFieldPath })\n }\n } else {\n const resolvedFieldPath = ensureFieldPath(resolved)\n for (const owned of externalOwnedFieldPaths) {\n if (isPrefixOf(owned, resolvedFieldPath) || isPrefixOf(resolvedFieldPath, owned)) {\n throwViolation({ resolvedPath: resolvedFieldPath, owned })\n }\n }\n }\n }\n\n StateTransaction.recordPatch(txnContext, path, reason, from, to, traitNodeId, stepId)\n }\n\n const updateDraft: RuntimeInternals['txn']['updateDraft'] = (nextState): void => {\n if (!txnContext.current) return\n StateTransaction.updateDraft(txnContext, nextState as S)\n }\n\n const traitConvergeTimeSlicingSignal = yield* Queue.unbounded<void>()\n const traitConvergeTimeSlicingState: {\n readonly signal: Queue.Queue<void>\n readonly backlogDirtyPaths: Set<StateTransaction.StatePatchPath>\n readonly ensureWorkerStarted: () => Effect.Effect<void, never, never>\n workerFiber: Fiber.Fiber<void, never> | undefined\n backlogDirtyAllReason?: DirtyAllReason\n firstPendingAtMs: number | undefined\n lastTouchedAtMs: number | undefined\n latestConvergeConfig: ResolvedTraitConvergeConfig | undefined\n capturedContext: CapturedTxnRuntimeScope | undefined\n } = {\n signal: traitConvergeTimeSlicingSignal,\n backlogDirtyPaths: new Set(),\n ensureWorkerStarted: () => ensureTraitConvergeTimeSlicingWorkerStarted(),\n workerFiber: undefined,\n backlogDirtyAllReason: undefined,\n firstPendingAtMs: undefined,\n lastTouchedAtMs: undefined,\n latestConvergeConfig: undefined,\n capturedContext: undefined,\n }\n\n const moduleTraitsState: {\n frozen: boolean\n contributions: Array<ModuleTraits.TraitContribution>\n snapshot: ModuleTraits.ModuleTraitsSnapshot | undefined\n } = {\n frozen: false,\n contributions: [],\n snapshot: undefined,\n }\n\n /**\n * Transaction history:\n * - Keeps the latest N StateTransaction records per ModuleRuntime.\n * - Used only for dev/test devtools features (e.g. time-travel, txn summary views).\n * - Capacity is bounded to avoid unbounded memory growth in long-running apps.\n */\n const maxTxnHistory = 500\n const txnHistory = {\n buffer: new Array<StateTransaction.StateTransaction<S> | undefined>(maxTxnHistory),\n start: 0,\n size: 0,\n capacity: maxTxnHistory,\n }\n const txnById = new Map<string, StateTransaction.StateTransaction<S>>()\n\n /**\n * Transaction queue:\n * - Executes each logic entrypoint (dispatch / source-refresh / future extensions) serially in FIFO order.\n * - Guarantees at most one transaction at a time per instance; different instances can still run in parallel.\n */\n const kernelImplementationRef = yield* KernelRef.resolveKernelImplementationRef()\n const cutoverGateModeOpt = yield* Effect.serviceOption(\n RuntimeKernel.FullCutoverGateModeTag as unknown as ServiceMap.Key<any, RuntimeKernel.FullCutoverGateMode>,\n )\n const cutoverGateMode = Option.isSome(cutoverGateModeOpt) ? cutoverGateModeOpt.value : 'fullCutover'\n const runtimeServicesOverrides = yield* RuntimeKernel.resolveRuntimeServicesOverrides({\n moduleId: options.moduleId,\n })\n\n const runtimeServicesRegistryOpt = yield* Effect.serviceOption(\n RuntimeKernel.RuntimeServicesRegistryTag as unknown as ServiceMap.Key<any, RuntimeKernel.RuntimeServicesRegistry>,\n )\n const runtimeServicesRegistry = Option.isSome(runtimeServicesRegistryOpt)\n ? runtimeServicesRegistryOpt.value\n : undefined\n\n const resolveRuntimeServiceImpls = <Service>(\n serviceId: string,\n builtin: ReadonlyArray<RuntimeKernel.RuntimeServiceImpl<Service>>,\n ): ReadonlyArray<RuntimeKernel.RuntimeServiceImpl<Service>> => {\n const extraRaw = runtimeServicesRegistry?.implsByServiceId[serviceId]\n if (!extraRaw || extraRaw.length === 0) return builtin\n\n const extra = extraRaw as ReadonlyArray<RuntimeKernel.RuntimeServiceImpl<Service>>\n const seen = new Set<string>()\n const out: Array<RuntimeKernel.RuntimeServiceImpl<Service>> = []\n\n for (const impl of builtin) {\n seen.add(impl.implId)\n out.push(impl)\n }\n\n for (const impl of extra) {\n if (!impl || typeof impl.implId !== 'string' || impl.implId.length === 0) continue\n if (seen.has(impl.implId)) continue\n seen.add(impl.implId)\n out.push(impl)\n }\n\n return out\n }\n\n const withRuntimeServiceBuiltins = <A, E, R>(\n serviceId: string,\n builtinMake: Effect.Effect<unknown, never, any>,\n effect: Effect.Effect<A, E, R>,\n ) =>\n effect.pipe(\n Effect.provideService(RuntimeServiceBuiltins.RuntimeServiceBuiltinsTag, {\n getBuiltinMake: (candidateServiceId) =>\n candidateServiceId === serviceId\n ? (builtinMake as Effect.Effect<unknown, never, any>)\n : Effect.die(new Error(`[Logix] builtin make not available: ${candidateServiceId}`)),\n } satisfies RuntimeServiceBuiltins.RuntimeServiceBuiltins),\n )\n\n const readCurrentOpSeq = (): Effect.Effect<number | undefined> =>\n Effect.service(Debug.currentOpSeq).pipe(Effect.orDie).pipe(\n Effect.map((opSeqRaw) =>\n typeof opSeqRaw === 'number' && Number.isFinite(opSeqRaw) && opSeqRaw >= 0 ? Math.floor(opSeqRaw) : undefined,\n ),\n )\n\n const makeTxnQueueBuiltin = makeEnqueueTransaction({\n moduleId: options.moduleId,\n instanceId,\n resolveConcurrencyPolicy,\n diagnostics: concurrencyDiagnostics,\n })\n\n const enqueueTxnSel = RuntimeKernel.selectRuntimeService(\n 'txnQueue',\n resolveRuntimeServiceImpls('txnQueue', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeTxnQueueBuiltin,\n },\n {\n implId: 'trace',\n implVersion: 'v1',\n make: makeTxnQueueBuiltin,\n notes: 'no-op wrapper (used for override isolation tests)',\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const enqueueTransactionBase = yield* withRuntimeServiceBuiltins('txnQueue', makeTxnQueueBuiltin, enqueueTxnSel.impl.make)\n\n const makeOperationRunnerBuiltin = Effect.succeed(\n makeRunOperation({\n optionsModuleId: options.moduleId,\n instanceId,\n runtimeLabel,\n txnContext,\n }),\n )\n\n const runOperationSel = RuntimeKernel.selectRuntimeService(\n 'operationRunner',\n resolveRuntimeServiceImpls('operationRunner', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeOperationRunnerBuiltin,\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const runOperation = yield* withRuntimeServiceBuiltins(\n 'operationRunner',\n makeOperationRunnerBuiltin,\n runOperationSel.impl.make,\n )\n\n yield* runOperation(\n 'lifecycle',\n 'module:init',\n { meta: { moduleId, instanceId } },\n Debug.record({\n type: 'module:init',\n moduleId,\n instanceId,\n }),\n )\n\n // Initial state snapshot:\n // - Emit a state:update event to write the initial state into the Debug stream.\n // - Helps Devtools show \"Current State\" even before any business interaction.\n // - Provides frame 0 for the timeline so later events can build time-travel views on top of it.\n const initialSnapshot = yield* SubscriptionRef.get(stateRef)\n yield* runOperation(\n 'state',\n 'state:init',\n { meta: { moduleId, instanceId } },\n Debug.record({\n type: 'state:update',\n moduleId,\n state: initialSnapshot,\n instanceId,\n txnSeq: 0,\n }),\n )\n\n const runtimeStoreOpt = yield* Effect.serviceOption(\n RuntimeStoreTag as unknown as ServiceMap.Key<any, { registerModuleInstance: (args: unknown) => void; unregisterModuleInstance: (key: string) => void }>,\n )\n if (Option.isSome(runtimeStoreOpt)) {\n runtimeStoreOpt.value.registerModuleInstance({\n moduleId,\n instanceId,\n moduleInstanceKey,\n initialState: initialSnapshot,\n })\n }\n\n const rootContextSvcOpt = yield* Effect.serviceOption(RootContextTag as unknown as ServiceMap.Key<any, RootContext>)\n const rootContext = Option.isSome(rootContextSvcOpt) ? (rootContextSvcOpt.value as RootContext) : undefined\n\n const tickSchedulerOpt = (yield* Effect.serviceOption(\n TickSchedulerTag as unknown as ServiceMap.Key<any, TickSchedulerService>,\n )) as Option.Option<TickSchedulerService>\n let tickSchedulerCached: TickSchedulerService | undefined = Option.isSome(tickSchedulerOpt) ? tickSchedulerOpt.value : undefined\n\n const readTickSchedulerFromRootContext = (root: RootContext | undefined): TickSchedulerService | undefined => {\n if (!root?.context) {\n return undefined\n }\n\n const fromRoot = ServiceMap.getOption(root.context, TickSchedulerTag as any) as Option.Option<TickSchedulerService>\n return Option.isSome(fromRoot) ? fromRoot.value : undefined\n }\n\n const refreshTickSchedulerFromEnv = (): Effect.Effect<TickSchedulerService | undefined> =>\n Effect.gen(function* () {\n const refreshed = (yield* Effect.serviceOption(\n TickSchedulerTag as unknown as ServiceMap.Key<any, TickSchedulerService>,\n )) as Option.Option<TickSchedulerService>\n if (Option.isSome(refreshed)) {\n tickSchedulerCached = refreshed.value\n return refreshed.value\n }\n return undefined\n })\n\n const enqueueTransaction: EnqueueTransaction = ((a0: any, a1?: any) =>\n Effect.gen(function* () {\n // Cache TickScheduler from the current fiber Env whenever possible:\n // - ManagedRuntime scenarios (e.g. React RuntimeProvider injecting tick services) may not have TickSchedulerTag\n // visible during ModuleRuntime initialization.\n // - But it is often available at enqueue-time (callsite), and caching it ensures onCommit can publish into RuntimeStore.\n if (!tickSchedulerCached) {\n const refreshed = yield* refreshTickSchedulerFromEnv()\n if (!refreshed) {\n const fromRoot = readTickSchedulerFromRootContext(rootContext)\n if (fromRoot) {\n tickSchedulerCached = fromRoot\n }\n }\n }\n\n // Preserve the original call signature: (eff) or (lane, eff).\n return yield* (a1 !== undefined ? (enqueueTransactionBase as any)(a0, a1) : (enqueueTransactionBase as any)(a0))\n })) as any\n\n const makeTransactionBuiltin = Effect.sync(() =>\n makeTransactionOps<S>({\n moduleId,\n optionsModuleId: options.moduleId,\n instanceId,\n stateRef,\n commitHub,\n shouldPublishCommitHub: () => commitHubSubscriberCount > 0,\n recordStatePatch,\n onCommit: ({ state, meta, transaction, diagnosticsLevel }) =>\n Effect.gen(function* () {\n let scheduler = tickSchedulerCached\n if (!scheduler) {\n scheduler = yield* refreshTickSchedulerFromEnv()\n }\n\n let root = rootContext\n if (!root) {\n const rootOpt = yield* Effect.serviceOption(RootContextTag as unknown as ServiceMap.Key<any, RootContext>)\n if (Option.isSome(rootOpt)) {\n root = rootOpt.value as RootContext\n }\n }\n\n if (!scheduler) {\n const fromRoot = readTickSchedulerFromRootContext(root)\n if (fromRoot) {\n scheduler = fromRoot\n tickSchedulerCached = fromRoot\n }\n }\n\n if (!scheduler && diagnosticsLevel !== 'off' && isDevEnv()) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n txnSeq: meta.txnSeq,\n txnId: meta.txnId,\n trigger: {\n kind: meta.originKind ?? 'unknown',\n name: meta.originName ?? meta.originKind ?? 'unknown',\n },\n code: 'tick_scheduler::missing_service',\n severity: 'error',\n message:\n 'TickScheduler service is not visible in ModuleRuntime.onCommit; tickSeq will not advance and RuntimeStore subscribers will not flush.',\n hint:\n 'Ensure TickSchedulerTag is available in the fiber Env for logic/task/txnQueue execution (AppRuntime baseLayer + RootContext wiring).',\n kind: 'missing_tick_scheduler',\n })\n }\n\n // Avoid selector graph work when there are no selectors at all.\n // (SelectorGraph will no-op; transaction.dirty is already snapshotted at commit time.)\n if (selectorGraph.hasAnyEntries()) {\n yield* selectorGraph.onCommit(\n state,\n meta,\n transaction.dirty,\n diagnosticsLevel,\n scheduler\n ? (selectorId) => {\n scheduler.onSelectorChanged({\n moduleInstanceKey,\n selectorId,\n priority: meta.priority,\n })\n }\n : undefined,\n )\n }\n\n if (scheduler) {\n const opSeq = yield* readCurrentOpSeq()\n let resolvedSchedulingPolicy: RuntimeStoreModuleCommit['schedulingPolicy'] | undefined\n if (diagnosticsLevel !== 'off') {\n const resolved = yield* resolveConcurrencyPolicyFast()\n resolvedSchedulingPolicy = {\n configScope: resolved.configScope,\n concurrencyLimit: resolved.concurrencyLimit,\n allowUnbounded: resolved.allowUnbounded,\n losslessBackpressureCapacity: resolved.losslessBackpressureCapacity,\n pressureWarningThreshold: resolved.pressureWarningThreshold,\n warningCooldownMs: resolved.warningCooldownMs,\n resolvedAtTxnSeq: meta.txnSeq,\n }\n }\n\n yield* scheduler.onModuleCommit({\n moduleId,\n instanceId,\n moduleInstanceKey,\n state,\n meta,\n opSeq,\n schedulingPolicy: resolvedSchedulingPolicy,\n })\n }\n }),\n enqueueTransaction,\n runOperation,\n txnContext,\n traitConvergeTimeSlicing: traitConvergeTimeSlicingState,\n\t traitRuntime: {\n\t getProgram: () => traitState.program,\n\t getConvergeStaticIrDigest: () => traitState.convergeStaticIrDigest,\n\t getConvergePlanCache: () => traitState.convergePlanCache,\n\t getConvergeGeneration: () => traitState.convergeGeneration,\n\t getPendingCacheMissReason: () => traitState.pendingCacheMissReason,\n\t getPendingCacheMissReasonCount: () => traitState.pendingCacheMissReasonCount,\n\t setPendingCacheMissReason: (next) => {\n\t traitState.pendingCacheMissReason = next\n\t if (next == null) {\n\t traitState.pendingCacheMissReasonCount = 0\n\t }\n\t },\n\t rowIdStore,\n\t getListConfigs: () => traitState.listConfigs,\n\t },\n resolveTraitConvergeConfig,\n isDevEnv,\n txnHistory,\n txnById,\n }),\n )\n\n const transactionSel = RuntimeKernel.selectRuntimeService(\n 'transaction',\n resolveRuntimeServiceImpls('transaction', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeTransactionBuiltin,\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const { readState, setStateInternal, runWithStateTransaction } = yield* withRuntimeServiceBuiltins(\n 'transaction',\n makeTransactionBuiltin,\n transactionSel.impl.make,\n )\n\n let deferredFlushCoalescedCount = 0\n let deferredFlushCanceledCount = 0\n\n const runDeferredConvergeFlush = (args: {\n readonly dirtyPathsSnapshot: ReadonlyArray<StateTransaction.StatePatchPath>\n readonly dirtyAllReason?: DirtyAllReason\n readonly lane: 'urgent' | 'nonUrgent'\n readonly slice?: { readonly start: number; readonly end: number; readonly total: number }\n readonly captureOpSeq?: boolean\n readonly emitLaneEvidence?: (anchor: {\n readonly txnSeq: number\n readonly txnId?: string\n readonly opSeq?: number\n }) => Effect.Effect<void, never, never>\n }): Effect.Effect<{ readonly txnSeq: number; readonly txnId?: string; readonly opSeq?: number }> => {\n let capturedTxnSeq = 0\n let capturedTxnId: string | undefined = undefined\n let capturedOpSeq: number | undefined = undefined\n\n const details: any = { dirtyPathCount: args.dirtyPathsSnapshot.length }\n if (args.dirtyAllReason) {\n details.dirtyAllReason = args.dirtyAllReason\n }\n if (args.slice) {\n details.sliceStart = args.slice.start\n details.sliceEnd = args.slice.end\n details.sliceTotal = args.slice.total\n }\n\n return enqueueTransaction(\n args.lane,\n runOperation(\n 'lifecycle',\n 'trait:deferredConvergeFlush',\n {\n payload: { dirtyPathCount: args.dirtyPathsSnapshot.length },\n meta: { moduleId, instanceId },\n },\n runWithStateTransaction(\n {\n kind: 'trait:deferred_flush',\n name: 'trait:deferredConvergeFlush',\n details,\n },\n () =>\n Effect.gen(function* () {\n const current: any = txnContext.current\n if (current) {\n capturedTxnSeq = current.txnSeq\n capturedTxnId = current.txnId\n }\n\n if (args.captureOpSeq) {\n capturedOpSeq = yield* readCurrentOpSeq()\n }\n\n if (args.emitLaneEvidence) {\n yield* args.emitLaneEvidence({\n txnSeq: capturedTxnSeq,\n txnId: capturedTxnId,\n opSeq: capturedOpSeq,\n })\n }\n\n if (!current) return\n if (args.dirtyAllReason) {\n current.dirtyAllReason = args.dirtyAllReason\n }\n for (const p of args.dirtyPathsSnapshot) {\n StateTransaction.markDirtyPath(txnContext, p, 'unknown')\n }\n }),\n ),\n ),\n ).pipe(\n Effect.as({\n txnSeq: capturedTxnSeq,\n txnId: capturedTxnId,\n opSeq: capturedOpSeq,\n } as const),\n )\n }\n\n // 043: time-slicing scheduler for deferred converge (debounce + maxLag); triggered by in-txn signals and enqueued outside the txn.\n const runTraitConvergeTimeSlicingWorker = Effect.gen(function* () {\n try {\n while (true) {\n while (true) {\n const config = traitConvergeTimeSlicingState.latestConvergeConfig?.traitConvergeTimeSlicing\n if (!config?.enabled) {\n traitConvergeTimeSlicingState.backlogDirtyPaths.clear()\n traitConvergeTimeSlicingState.backlogDirtyAllReason = undefined\n traitConvergeTimeSlicingState.firstPendingAtMs = undefined\n traitConvergeTimeSlicingState.lastTouchedAtMs = undefined\n return\n }\n\n const hasBacklog =\n traitConvergeTimeSlicingState.backlogDirtyPaths.size > 0 ||\n traitConvergeTimeSlicingState.backlogDirtyAllReason != null\n if (!hasBacklog) {\n return\n }\n\n const now = Date.now()\n const firstPendingAtMs = traitConvergeTimeSlicingState.firstPendingAtMs ?? now\n traitConvergeTimeSlicingState.firstPendingAtMs = firstPendingAtMs\n\n const captured = traitConvergeTimeSlicingState.capturedContext\n const txnLanePolicy = yield* (captured?.overrides\n ? Effect.provideService(\n resolveTxnLanePolicy(),\n StateTransactionOverridesTag as unknown as ServiceMap.Key<any, StateTransactionOverrides>,\n captured.overrides,\n )\n : resolveTxnLanePolicy())\n\n const debounceMs = txnLanePolicy.enabled ? txnLanePolicy.debounceMs : config.debounceMs\n const maxLagMs = txnLanePolicy.enabled ? txnLanePolicy.maxLagMs : config.maxLagMs\n const lastTouchedAtMs = traitConvergeTimeSlicingState.lastTouchedAtMs ?? firstPendingAtMs\n const quietMs = Math.max(0, now - lastTouchedAtMs)\n const lagMs = Math.max(0, now - firstPendingAtMs)\n\n if (quietMs >= debounceMs || lagMs >= maxLagMs) {\n break\n }\n\n const untilQuietMs = Math.max(0, debounceMs - quietMs)\n const untilLagMs = Math.max(0, maxLagMs - lagMs)\n const sleepMs = Math.max(0, Math.min(untilQuietMs, untilLagMs))\n if (sleepMs > 0) {\n yield* Effect.sleep(Duration.millis(sleepMs))\n } else {\n yield* Effect.yieldNow\n }\n }\n\n const dirtyPathsSnapshot = Array.from(traitConvergeTimeSlicingState.backlogDirtyPaths)\n traitConvergeTimeSlicingState.backlogDirtyPaths.clear()\n const dirtyAllReasonSnapshot = traitConvergeTimeSlicingState.backlogDirtyAllReason\n traitConvergeTimeSlicingState.backlogDirtyAllReason = undefined\n const firstPendingAtMsForRun = traitConvergeTimeSlicingState.firstPendingAtMs\n traitConvergeTimeSlicingState.firstPendingAtMs = undefined\n traitConvergeTimeSlicingState.lastTouchedAtMs = undefined\n\n if (dirtyPathsSnapshot.length === 0 && !dirtyAllReasonSnapshot) {\n return\n }\n\n const program = traitState.program\n if (!program?.convergeExecIr || program.convergeExecIr.topoOrderDeferredInt32.length === 0) {\n return\n }\n\n const captured = traitConvergeTimeSlicingState.capturedContext\n const txnLanePolicy = yield* captured?.overrides\n ? Effect.provideService(resolveTxnLanePolicy(), StateTransactionOverridesTag, captured.overrides)\n : resolveTxnLanePolicy()\n\n const shouldEmitLaneEvidence = captured != null && captured.diagnosticsLevel !== 'off'\n const shouldEmitLaneEvidenceForPolicy =\n shouldEmitLaneEvidence && (txnLanePolicy.enabled || txnLanePolicy.overrideMode != null)\n\n const withCapturedContext = <A2, E2, R2>(eff: Effect.Effect<A2, E2, R2>): Effect.Effect<A2, E2, R2> => {\n let next = eff\n if (captured?.overrides) {\n next = Effect.provideService(next, StateTransactionOverridesTag, captured.overrides)\n }\n if (captured) {\n next = Effect.provideService(next, Debug.currentRuntimeLabel, captured.runtimeLabel)\n next = Effect.provideService(next, Debug.currentDiagnosticsLevel, captured.diagnosticsLevel)\n next = Effect.provideService(next, Debug.currentDebugSinks, captured.debugSinks)\n }\n return next\n }\n\n const firstPendingAtMs = firstPendingAtMsForRun ?? Date.now()\n\n if (!txnLanePolicy.enabled) {\n if (txnLanePolicy.overrideMode === 'forced_off') {\n deferredFlushCoalescedCount += 1\n deferredFlushCanceledCount += 1\n }\n\n const reasons: ReadonlyArray<Debug.TxnLaneEvidenceReason> =\n txnLanePolicy.overrideMode === 'forced_off'\n ? ['forced_off', 'canceled']\n : txnLanePolicy.overrideMode === 'forced_sync'\n ? ['forced_sync']\n : ['disabled']\n\n yield* withCapturedContext(\n runDeferredConvergeFlush({\n dirtyPathsSnapshot,\n dirtyAllReason: dirtyAllReasonSnapshot,\n lane: 'urgent',\n captureOpSeq: shouldEmitLaneEvidenceForPolicy,\n emitLaneEvidence: shouldEmitLaneEvidenceForPolicy\n ? (anchor) =>\n Debug.record({\n type: 'trace:txn-lane',\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n txnId: anchor.txnId,\n data: {\n evidence: {\n anchor: {\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n ...(typeof anchor.opSeq === 'number' ? { opSeq: anchor.opSeq } : {}),\n },\n lane: 'urgent',\n kind: 'trait:deferred_flush',\n policy: txnLanePolicy,\n backlog: {\n pendingCount: 0,\n ageMs: Math.max(0, Date.now() - firstPendingAtMs),\n coalescedCount: deferredFlushCoalescedCount,\n canceledCount: deferredFlushCanceledCount,\n },\n starvation: { triggered: false },\n reasons,\n } satisfies Debug.TxnLaneEvidence,\n },\n })\n : undefined,\n }),\n )\n\n const hasPending =\n traitConvergeTimeSlicingState.backlogDirtyPaths.size > 0 ||\n traitConvergeTimeSlicingState.backlogDirtyAllReason != null\n if (!hasPending) {\n return\n }\n continue\n }\n\n const totalSteps = program.convergeExecIr.topoOrderDeferredInt32.length\n\n let cursor = 0\n const initialChunkSize = txnLanePolicy.budgetMs <= 1 ? 1 : 32\n let chunkSize = Math.min(initialChunkSize, totalSteps)\n let yieldCount = 0\n let lastYieldAtMs = Date.now()\n\n const readIsInputPending = (): boolean => {\n const nav = (globalThis as any).navigator\n const scheduling = nav?.scheduling\n const isInputPending = scheduling?.isInputPending\n if (typeof isInputPending !== 'function') return false\n try {\n return Boolean(isInputPending.call(scheduling))\n } catch {\n return false\n }\n }\n\n while (cursor < totalSteps) {\n const lagMs = Math.max(0, Date.now() - firstPendingAtMs)\n const lagExceeded = lagMs >= txnLanePolicy.maxLagMs\n const budgetMs = lagExceeded\n ? Math.max(txnLanePolicy.budgetMs, txnLanePolicy.budgetMs * 4)\n : txnLanePolicy.budgetMs\n\n const sliceStart = cursor\n const sliceEnd = Math.min(totalSteps, cursor + chunkSize)\n\n const { sliceDurationMs, anchor } = yield* withCapturedContext(\n Effect.gen(function* () {\n const sliceStartedAtMs = Date.now()\n const anchor = yield* runDeferredConvergeFlush({\n dirtyPathsSnapshot,\n dirtyAllReason: dirtyAllReasonSnapshot,\n lane: 'nonUrgent',\n slice: { start: sliceStart, end: sliceEnd, total: totalSteps },\n captureOpSeq: shouldEmitLaneEvidence,\n })\n const sliceDurationMs = Math.max(0, Date.now() - sliceStartedAtMs)\n return { sliceDurationMs, anchor } as const\n }),\n )\n\n cursor = sliceEnd\n\n const hasPending =\n traitConvergeTimeSlicingState.backlogDirtyPaths.size > 0 ||\n traitConvergeTimeSlicingState.backlogDirtyAllReason != null\n const willCoalesce = txnLanePolicy.allowCoalesce && !lagExceeded && hasPending\n\n const elapsedSinceLastYieldMs = Math.max(0, Date.now() - lastYieldAtMs)\n const budgetExceeded = budgetMs > 0 && Number.isFinite(budgetMs) && elapsedSinceLastYieldMs >= budgetMs\n const forcedFrameYield = elapsedSinceLastYieldMs >= 16\n const inputPending =\n !willCoalesce && txnLanePolicy.yieldStrategy === 'inputPending' ? readIsInputPending() : false\n\n const shouldYield =\n cursor < totalSteps && !willCoalesce && (inputPending || budgetExceeded || forcedFrameYield)\n\n const yieldReason: Debug.TxnLaneNonUrgentYieldReason = !shouldYield\n ? 'none'\n : inputPending\n ? 'input_pending'\n : budgetExceeded\n ? 'budget_exceeded'\n : 'forced_frame_yield'\n\n if (shouldEmitLaneEvidence) {\n yield* withCapturedContext(\n Effect.gen(function* () {\n const reasons: Array<Debug.TxnLaneEvidenceReason> = ['queued_non_urgent']\n if (lagExceeded) reasons.push('max_lag_forced', 'starvation_protection')\n if (yieldReason === 'budget_exceeded') reasons.push('budget_yield')\n\n const evidence: Debug.TxnLaneEvidence = {\n anchor: {\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n ...(typeof anchor.opSeq === 'number' ? { opSeq: anchor.opSeq } : {}),\n },\n lane: 'nonUrgent',\n kind: 'trait:deferred_flush',\n policy: txnLanePolicy,\n backlog: {\n pendingCount: Math.max(0, totalSteps - sliceEnd),\n ageMs: lagMs,\n coalescedCount: deferredFlushCoalescedCount,\n canceledCount: deferredFlushCanceledCount,\n },\n budget: {\n budgetMs,\n sliceDurationMs,\n yieldCount,\n yielded: shouldYield,\n yieldReason,\n },\n starvation: lagExceeded ? { triggered: true, reason: 'max_lag_exceeded' } : { triggered: false },\n reasons,\n }\n\n yield* Debug.record({\n type: 'trace:txn-lane',\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n txnId: anchor.txnId,\n data: { evidence },\n })\n }),\n )\n }\n\n if (willCoalesce) {\n deferredFlushCoalescedCount += 1\n deferredFlushCanceledCount += 1\n if (shouldEmitLaneEvidence) {\n yield* withCapturedContext(\n Debug.record({\n type: 'trace:txn-lane',\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n txnId: anchor.txnId,\n data: {\n evidence: {\n anchor: {\n moduleId,\n instanceId,\n txnSeq: anchor.txnSeq,\n ...(typeof anchor.opSeq === 'number' ? { opSeq: anchor.opSeq } : {}),\n },\n lane: 'nonUrgent',\n kind: 'trait:deferred_flush',\n policy: txnLanePolicy,\n backlog: {\n pendingCount: Math.max(0, totalSteps - cursor),\n ageMs: lagMs,\n coalescedCount: deferredFlushCoalescedCount,\n canceledCount: deferredFlushCanceledCount,\n },\n budget: {\n budgetMs,\n sliceDurationMs,\n yieldCount,\n yielded: false,\n yieldReason: 'none',\n },\n starvation: { triggered: false },\n reasons: ['coalesced', 'canceled'],\n } satisfies Debug.TxnLaneEvidence,\n },\n }),\n )\n }\n break\n }\n\n if (budgetMs > 0 && Number.isFinite(budgetMs)) {\n if (sliceDurationMs > budgetMs && chunkSize > 1) {\n chunkSize = Math.max(1, Math.floor(chunkSize / 2))\n } else if (sliceDurationMs < budgetMs / 2) {\n chunkSize = Math.min(totalSteps, chunkSize * 2)\n }\n }\n\n if (shouldYield) {\n yieldCount += 1\n lastYieldAtMs = Date.now()\n yield* Effect.yieldNow\n }\n }\n\n const hasPending =\n traitConvergeTimeSlicingState.backlogDirtyPaths.size > 0 ||\n traitConvergeTimeSlicingState.backlogDirtyAllReason != null\n if (!hasPending) {\n return\n }\n }\n } finally {\n traitConvergeTimeSlicingState.workerFiber = undefined\n }\n })\n\n const ensureTraitConvergeTimeSlicingWorkerStarted = () =>\n Effect.gen(function* () {\n if (traitConvergeTimeSlicingState.workerFiber) {\n return\n }\n const fiber = yield* runTraitConvergeTimeSlicingWorker.pipe(\n Effect.provideService(TaskRunner.inSyncTransactionFiber, false),\n Effect.forkDetach({ startImmediately: true }),\n )\n traitConvergeTimeSlicingState.workerFiber = fiber\n })\n\n lifecycle.registerDestroy(\n Effect.suspend(() => {\n const fiber = traitConvergeTimeSlicingState.workerFiber\n return fiber ? Fiber.interrupt(fiber).pipe(Effect.asVoid) : Effect.void\n }),\n { name: 'traitConvergeTimeSlicing' },\n )\n\n const declaredActionTags = (() => {\n const actionMap = (options.tag as any)?.shape?.actionMap\n if (!actionMap || typeof actionMap !== 'object') {\n return undefined\n }\n return new Set(Object.keys(actionMap))\n })()\n\n const actionTopicHubCapacity = yield* resolveConcurrencyPolicy().pipe(\n Effect.map((policy) => policy.losslessBackpressureCapacity),\n )\n const actionTagHubsByTag = new Map<string, PubSub.PubSub<A>>()\n if (declaredActionTags && declaredActionTags.size > 0) {\n const topicHubEntries = yield* Effect.forEach(\n declaredActionTags,\n (tag) =>\n PubSub.bounded<A>(actionTopicHubCapacity).pipe(\n Effect.map((hub) => [tag, hub] as const),\n ),\n )\n for (const [tag, hub] of topicHubEntries) {\n actionTagHubsByTag.set(tag, hub)\n }\n }\n\n const actionTagOfUnknown = (action: unknown): string | undefined => {\n const tag = (action as any)?._tag\n if (typeof tag === 'string' && tag.length > 0) return tag\n const type = (action as any)?.type\n if (typeof type === 'string' && type.length > 0) return type\n if (tag != null) return String(tag)\n if (type != null) return String(type)\n return undefined\n }\n\n const actionMatchesTopicTag = (action: unknown, topicTag: string): boolean => {\n const tag = (action as any)?._tag\n if (typeof tag === 'string' && tag.length > 0) {\n if (tag === topicTag) return true\n const type = (action as any)?.type\n return typeof type === 'string' && type.length > 0 && type === topicTag\n }\n\n const type = (action as any)?.type\n if (typeof type === 'string' && type.length > 0) {\n return type === topicTag\n }\n\n const normalized = actionTagOfUnknown(action)\n return normalized != null && normalized.length > 0 && normalized === topicTag\n }\n\n const actionsStream: Stream.Stream<A> = Stream.fromPubSub(actionHub)\n const actionsByTagStream = (tag: string): Stream.Stream<A> => {\n const topicHub = actionTagHubsByTag.get(tag)\n if (topicHub) {\n return Stream.fromPubSub(topicHub)\n }\n return actionsStream.pipe(Stream.filter((action: A) => actionMatchesTopicTag(action, tag)))\n }\n\n const makeDispatchBuiltin = Effect.sync(() =>\n makeDispatchOps<S, A>({\n optionsModuleId: options.moduleId,\n instanceId,\n declaredActionTags,\n initialReducers: options.reducers as any,\n txnContext,\n readState,\n setStateInternal,\n recordStatePatch,\n actionHub,\n actionTagHubsByTag,\n actionCommitHub,\n diagnostics: concurrencyDiagnostics,\n enqueueTransaction,\n resolveConcurrencyPolicy,\n runOperation,\n runWithStateTransaction,\n isDevEnv,\n }),\n )\n\n const dispatchSel = RuntimeKernel.selectRuntimeService(\n 'dispatch',\n resolveRuntimeServiceImpls('dispatch', [\n {\n implId: 'builtin',\n implVersion: 'v1',\n make: makeDispatchBuiltin,\n },\n ]),\n runtimeServicesOverrides,\n )\n\n const dispatchOps = yield* withRuntimeServiceBuiltins('dispatch', makeDispatchBuiltin, dispatchSel.impl.make)\n\n const runtimeServicesEvidence = RuntimeKernel.makeRuntimeServicesEvidence({\n moduleId: options.moduleId,\n instanceId,\n bindings: [enqueueTxnSel.binding, runOperationSel.binding, transactionSel.binding, dispatchSel.binding],\n overridesApplied: [\n ...enqueueTxnSel.overridesApplied,\n ...runOperationSel.overridesApplied,\n ...transactionSel.overridesApplied,\n ...dispatchSel.overridesApplied,\n ],\n })\n\n const gate = FullCutoverGate.evaluateFullCutoverGate({\n mode: cutoverGateMode,\n requestedKernelId: kernelImplementationRef.kernelId,\n runtimeServicesEvidence,\n diagnosticsLevel: isDevEnv() ? 'light' : 'off',\n })\n\n if (gate.verdict === 'FAIL') {\n const msg = isDevEnv()\n ? [\n '[FullCutoverGateFailed] Runtime assembly detected implicit fallback / missing bindings under fullCutover mode.',\n `requestedKernelId: ${kernelImplementationRef.kernelId}`,\n `reason: ${gate.reason}`,\n `missingServiceIds: ${gate.missingServiceIds.join(',')}`,\n `fallbackServiceIds: ${gate.fallbackServiceIds.join(',')}`,\n `requiredServiceCount: ${gate.evidence.requiredServiceCount}`,\n `anchor: moduleId=${gate.anchor.moduleId}, instanceId=${gate.anchor.instanceId}, txnSeq=${gate.anchor.txnSeq}`,\n ].join('\\n')\n : 'Full cutover gate failed'\n\n const err: any = new Error(msg)\n err.name = 'FullCutoverGateFailed'\n err.gate = gate\n err.reason = gate.reason\n err.evidence = gate.evidence\n err.instanceId = instanceId\n err.moduleId = options.moduleId\n throw err\n }\n\n const writeDenied = () =>\n Effect.die(new Error('[ModuleRuntime.ref] state ref is read-only. Use runtime.setState / $.state.update / $.state.mutate instead.'))\n\n const denyPublish = (_value: unknown): Effect.Effect<boolean> => writeDenied() as Effect.Effect<boolean>\n\n const denyWithPermits =\n (_permits: number) =>\n <A0, E0, R0>(_self: Effect.Effect<A0, E0, R0>): Effect.Effect<A0, E0, R0> =>\n writeDenied() as Effect.Effect<A0, E0, R0>\n\n const rootDenyWriteRef = {\n get: SubscriptionRef.get(stateRef),\n modify: writeDenied,\n }\n\n // Keep root ref identity stable for a runtime instance (important for storeId anchoring in ExternalStore.fromSubscriptionRef).\n const rootReadonlyRef = {\n get: SubscriptionRef.get(stateRef),\n changes: SubscriptionRef.changes(stateRef),\n // Runtime guard for unsafe casts (`as any as SubscriptionRef`) to keep failure deterministic.\n modify: writeDenied,\n ref: rootDenyWriteRef,\n pubsub: {\n publish: denyPublish,\n },\n semaphore: {\n withPermits: denyWithPermits,\n },\n } as const\n\n const runtime: PublicModuleRuntime<S, A> = {\n // Expose moduleId on the runtime so React / Devtools can correlate module information at the view layer.\n moduleId,\n instanceId,\n lifecycleStatus: lifecycle.getStatus,\n getState: readState,\n setState: (next) => setStateInternal(next, '*', 'unknown', undefined, next),\n dispatch: (action) =>\n // Enqueue the txn request to guarantee FIFO serialization within a single instance.\n dispatchOps.dispatch(action) as Effect.Effect<void, never, never>,\n dispatchBatch: (actions) => dispatchOps.dispatchBatch(actions) as Effect.Effect<void, never, never>,\n dispatchLowPriority: (action) => dispatchOps.dispatchLowPriority(action) as Effect.Effect<void, never, never>,\n actions$: actionsStream,\n actionsByTag$: actionsByTagStream,\n actionsWithMeta$: Stream.fromPubSub(actionCommitHub),\n changes: <V>(selector: (s: S) => V) => Stream.map(SubscriptionRef.changes(stateRef), selector).pipe(Stream.changes),\n changesWithMeta: <V>(selector: (s: S) => V) =>\n Stream.map(fromCommitHub, ({ value, meta }) => ({\n value: selector(value),\n meta,\n })),\n changesReadQueryWithMeta: <V>(input: ReadQuery.ReadQueryInput<S, V>) => {\n const compiled: ReadQuery.ReadQueryCompiled<S, V> = ReadQuery.isReadQueryCompiled<S, V>(input)\n ? input\n : ReadQuery.compile(input)\n\n if (compiled.lane !== 'static') {\n const buildGradeDecision = ReadQuery.resolveBuildGradeStrictGateDecision({\n moduleId,\n instanceId,\n txnSeq: 0,\n compiled,\n })\n\n const runtimeCompiled = ReadQuery.markRuntimeMissingBuildGrade(compiled)\n let strictGateChecked = false\n\n return Stream.mapEffect(fromCommitHub, ({ value, meta }) =>\n Effect.gen(function* () {\n if (!strictGateChecked) {\n strictGateChecked = true\n\n if (buildGradeDecision?.verdict === 'WARN') {\n yield* Debug.record(buildGradeDecision.diagnostic)\n } else if (buildGradeDecision?.verdict === 'FAIL') {\n yield* Debug.record(buildGradeDecision.diagnostic)\n yield* Effect.die(buildGradeDecision.error)\n }\n\n if (ReadQuery.shouldEvaluateStrictGateAtRuntime(runtimeCompiled)) {\n const strictGateOpt = yield* Effect.serviceOption(\n ReadQueryStrictGateConfigTag as unknown as ServiceMap.Key<any, ReadQuery.ReadQueryStrictGateConfig>,\n )\n\n if (Option.isSome(strictGateOpt)) {\n const decision = ReadQuery.evaluateStrictGate({\n config: strictGateOpt.value,\n moduleId,\n instanceId,\n txnSeq: 0,\n compiled: runtimeCompiled,\n })\n\n if (decision.verdict === 'WARN') {\n yield* Debug.record(decision.diagnostic)\n } else if (decision.verdict === 'FAIL') {\n yield* Debug.record(decision.diagnostic)\n yield* Effect.die(decision.error)\n }\n }\n }\n }\n\n return {\n value: runtimeCompiled.select(value),\n meta,\n }\n }),\n )\n }\n\n return Stream.unwrap(\n Effect.gen(function* () {\n const entry = yield* selectorGraph.ensureEntry(compiled)\n entry.subscriberCount += 1\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n selectorGraph.releaseEntry(compiled.selectorId)\n }),\n )\n\n if (!entry.hasValue) {\n const current = yield* readState\n try {\n entry.cachedValue = compiled.select(current) as any\n entry.hasValue = true\n entry.cachedAtTxnSeq = 0\n } catch {\n // keep entry empty; commit-time eval will emit diagnostic in diagnostics mode (if enabled)\n }\n }\n\n return Stream.fromPubSub(entry.hub) as Stream.Stream<StateChangeWithMeta<V>>\n }),\n )\n },\n ref: <V = S>(selector?: (s: S) => V): ReadonlySubscriptionRef<V> => {\n if (!selector) {\n return rootReadonlyRef as unknown as ReadonlySubscriptionRef<V>\n }\n\n const denyWriteRef = {\n get: Effect.map(SubscriptionRef.get(stateRef), selector),\n modify: writeDenied,\n }\n\n const derivedRef = {\n get: Effect.map(SubscriptionRef.get(stateRef), selector),\n // Derived stream: selector-map stateRef.changes and de-duplicate.\n changes: Stream.map(SubscriptionRef.changes(stateRef), selector).pipe(Stream.changes) as Stream.Stream<V>,\n // Runtime guard for unsafe casts (`as any as SubscriptionRef`) to keep failure deterministic.\n modify: writeDenied,\n ref: denyWriteRef,\n pubsub: {\n publish: denyPublish,\n },\n semaphore: {\n withPermits: denyWithPermits,\n },\n }\n\n return derivedRef\n },\n }\n\n // Best-effort sync action callables (perf / JS entrypoints):\n // - Exposes `runtime.actions.<tag>(payload?)` for callers that want \"just do it\" semantics.\n // - Tries to run the dispatch synchronously when possible (common case: no queue contention) so perf workloads\n // can time the tick flush separately from transaction overhead.\n // - Falls back to forking the dispatch Effect if it cannot complete synchronously.\n if (declaredActionTags && declaredActionTags.size > 0) {\n const services = yield* Effect.services<any>()\n const driver = ManagedRuntime.make(Layer.effectServices(Effect.succeed(services)))\n const actions: any = {}\n\n const dispatchSyncBestEffort = (action: A): void => {\n try {\n const exit = driver.runSyncExit(dispatchOps.dispatch(action) as any)\n if (Exit.isFailure(exit)) {\n driver.runFork(dispatchOps.dispatch(action) as any)\n }\n } catch {\n try {\n driver.runFork(dispatchOps.dispatch(action) as any)\n } catch {\n // ignore best-effort failures (e.g. runtime disposed)\n }\n }\n }\n\n for (const tag of declaredActionTags) {\n actions[tag] = (payload?: unknown) => {\n const action = payload === undefined ? ({ _tag: tag } as any) : ({ _tag: tag, payload } as any)\n dispatchSyncBestEffort(action as A)\n }\n }\n\n ;(runtime as any).actions = actions\n }\n\n KernelRef.setKernelImplementationRef(runtime, kernelImplementationRef)\n RuntimeKernel.setRuntimeServicesEvidence(runtime, runtimeServicesEvidence)\n\n // Optional: when RunSession/EvidenceCollector is in scope, write runtime services evidence into the collector.\n // By default (non-trial-run), Env does not contain EvidenceCollectorTag, so this adds no overhead.\n const collectorOpt = yield* Effect.serviceOption(\n EvidenceCollectorTag as unknown as ServiceMap.Key<any, { setKernelImplementationRef: (x: unknown) => void; setRuntimeServicesEvidence: (x: unknown) => void }>,\n )\n if (Option.isSome(collectorOpt)) {\n collectorOpt.value.setKernelImplementationRef(kernelImplementationRef)\n const level = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n if (level !== 'off') {\n collectorOpt.value.setRuntimeServicesEvidence(runtimeServicesEvidence)\n }\n }\n\n const convergeStaticIrCollectors = yield* Effect.service(currentConvergeStaticIrCollectors).pipe(Effect.orDie)\n const registerConvergeStaticIr = (staticIr: unknown): void => {\n if (convergeStaticIrCollectors.length === 0) return\n for (const collector of convergeStaticIrCollectors) {\n collector.register(staticIr as any)\n }\n }\n\n const sourceRefreshRegistry = new Map<string, (state: unknown) => Effect.Effect<void, never, any>>()\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n sourceRefreshRegistry.clear()\n }),\n )\n\n // Build a minimal imports-scope injector:\n // - Only store ModuleToken -> ModuleRuntime mappings.\n // - Never capture the whole Context into ModuleRuntime (avoid leaking root/base services by accident).\n const importsMap = new Map<ServiceMap.Key<any, PublicModuleRuntime<any, any>>, PublicModuleRuntime<any, any>>()\n\n for (const imported of options.imports ?? []) {\n const maybe = yield* Effect.serviceOption(imported)\n if (Option.isSome(maybe)) {\n importsMap.set(imported, maybe.value)\n }\n }\n\n const importsScope: RuntimeInternals['imports'] = {\n kind: 'imports-scope',\n get: (module) => importsMap.get(module),\n }\n\n const instanceKey = options.moduleId != null ? `${options.moduleId}::${instanceId}` : undefined\n\n if (instanceKey) {\n registerRuntimeByInstanceKey(instanceKey, runtime as PublicModuleRuntime<any, any>)\n }\n\n const registerStateTraitProgram = (\n program: any,\n registerOptions?: { readonly bumpReason?: any; readonly exportStaticIr?: boolean },\n ): void => {\n const nextIr = (program as any).convergeIr\n const nextKeys = nextIr\n ? {\n writersKey: nextIr.writersKey,\n depsKey: nextIr.depsKey,\n }\n : undefined\n\n const requestedBumpReason = registerOptions?.bumpReason\n let bumpReason: any\n\n if (traitState.lastConvergeIrKeys && nextKeys) {\n if (requestedBumpReason) {\n bumpReason = requestedBumpReason\n } else if (traitState.lastConvergeIrKeys.writersKey !== nextKeys.writersKey) {\n bumpReason = 'writers_changed'\n } else if (traitState.lastConvergeIrKeys.depsKey !== nextKeys.depsKey) {\n bumpReason = 'deps_changed'\n }\n } else if (traitState.lastConvergeIrKeys && !nextKeys) {\n bumpReason = requestedBumpReason ?? 'unknown'\n }\n\n if (bumpReason) {\n const nextGeneration = traitState.convergeGeneration.generation + 1\n const nextBumpCount = (traitState.convergeGeneration.generationBumpCount ?? 0) + 1\n traitState.convergeGeneration = {\n generation: nextGeneration,\n generationBumpCount: nextBumpCount,\n lastBumpReason: bumpReason,\n\t }\n\t\n\t traitState.pendingCacheMissReason = 'generation_bumped'\n\t traitState.pendingCacheMissReasonCount = (traitState.pendingCacheMissReasonCount ?? 0) + 1\n\t traitState.convergePlanCache = new StateTraitConverge.ConvergePlanCache(convergePlanCacheCapacity)\n\t }\n\n traitState.lastConvergeIrKeys = nextKeys\n\n const convergeIr = nextIr\n ? {\n ...nextIr,\n generation: traitState.convergeGeneration.generation,\n }\n : undefined\n\n const prevConvergeIr = (traitState.program as any)?.convergeIr as any | undefined\n const canPreserveInlinePlanCache =\n !!prevConvergeIr &&\n !!nextIr &&\n prevConvergeIr.writersKey === (nextIr as any).writersKey &&\n prevConvergeIr.depsKey === (nextIr as any).depsKey\n\n const prevConvergeExecIr = (traitState.program as any)?.convergeExecIr as ReturnType<typeof makeConvergeExecIr>\n | undefined\n\n const convergeExecIr =\n convergeIr && !(convergeIr as any).configError ? makeConvergeExecIr(convergeIr as any) : undefined\n\n if (convergeExecIr && prevConvergeExecIr) {\n // Preserve hot-path perf hints across generation bumps (forward-only; no compatibility layer).\n // This keeps auto mode stable under frequent register/bump cycles (e.g. graphChangeInvalidation perf boundary).\n convergeExecIr.perf.fullCommitEwmaOffMs = prevConvergeExecIr.perf.fullCommitEwmaOffMs\n convergeExecIr.perf.fullCommitLastTxnSeqOff = prevConvergeExecIr.perf.fullCommitLastTxnSeqOff\n convergeExecIr.perf.fullCommitMinOffMs = prevConvergeExecIr.perf.fullCommitMinOffMs\n convergeExecIr.perf.fullCommitSampleCountOff = prevConvergeExecIr.perf.fullCommitSampleCountOff\n convergeExecIr.perf.recentPlanMissHash1 = prevConvergeExecIr.perf.recentPlanMissHash1\n convergeExecIr.perf.recentPlanMissHash2 = prevConvergeExecIr.perf.recentPlanMissHash2\n\n // Reuse per-instance scratch draft across rebuilds (avoids per-txn allocations on shallow graphs).\n const nextScratch: any = convergeExecIr.scratch as any\n const prevScratch: any = prevConvergeExecIr.scratch as any\n nextScratch.shallowInPlaceDraft = prevScratch.shallowInPlaceDraft\n\n // Inline plan micro-cache is safe to preserve only when the converge graph keys are unchanged.\n if (canPreserveInlinePlanCache) {\n nextScratch.inlinePlanCacheHash1 = prevScratch.inlinePlanCacheHash1\n nextScratch.inlinePlanCacheSize1 = prevScratch.inlinePlanCacheSize1\n nextScratch.inlinePlanCachePlan1 = prevScratch.inlinePlanCachePlan1\n nextScratch.inlinePlanCacheHash2 = prevScratch.inlinePlanCacheHash2\n nextScratch.inlinePlanCacheSize2 = prevScratch.inlinePlanCacheSize2\n nextScratch.inlinePlanCachePlan2 = prevScratch.inlinePlanCachePlan2\n nextScratch.inlinePlanCacheRecentMissHash1 = prevScratch.inlinePlanCacheRecentMissHash1\n nextScratch.inlinePlanCacheRecentMissHash2 = prevScratch.inlinePlanCacheRecentMissHash2\n }\n }\n\n traitState.convergeStaticIrDigest =\n convergeIr && !(convergeIr as any).configError ? getConvergeStaticIrDigest(convergeIr as any) : undefined\n\n\t traitState.program = {\n\t ...(program as any),\n\t convergeIr,\n\t convergeExecIr,\n\t }\n\t traitState.listConfigs = RowId.collectListConfigs((program as any).spec)\n\t listPathSet = (() => {\n\t const configs = traitState.listConfigs\n\t if (!Array.isArray(configs) || configs.length === 0) return undefined\n\t const set = new Set<string>()\n\t for (const cfg of configs as ReadonlyArray<any>) {\n\t const p = cfg?.path\n\t if (typeof p === 'string' && p.length > 0) set.add(p)\n\t }\n\t return set.size > 0 ? set : undefined\n\t })()\n\t const owned: FieldPath[] = ((program as any)?.entries ?? [])\n\t .filter((e: any) => e && e.kind === 'externalStore' && typeof e.fieldPath === 'string')\n\t .map((e: any) => normalizeFieldPath(e.fieldPath))\n\t .filter((p: any): p is FieldPath => p != null)\n .sort(compareFieldPath)\n externalOwnedFieldPaths = owned\n externalOwnedFieldPathKeys = new Set(owned.map((p) => toKey(p)))\n\n if (!traitState.convergePlanCache) {\n traitState.convergePlanCache = new StateTraitConverge.ConvergePlanCache(convergePlanCacheCapacity)\n }\n\n const exportStaticIrEnabled = registerOptions?.exportStaticIr !== false\n\n if (exportStaticIrEnabled && convergeIr && !(convergeIr as any).configError) {\n if (convergeStaticIrCollectors.length > 0) {\n registerConvergeStaticIr(\n exportConvergeStaticIr({\n ir: convergeIr,\n moduleId: options.moduleId ?? 'unknown',\n instanceId,\n }),\n )\n }\n }\n }\n\n // 065: even if the module declares no traits, it must still have a schema-backed Static IR table (FieldPathIdRegistry),\n // otherwise reducer patchPaths / ReadQuery(static lane) cannot be mapped and will degrade to dirtyAll.\n if (!traitState.program) {\n const stateSchema = (options.tag as any)?.stateSchema as unknown\n if (stateSchema) {\n try {\n registerStateTraitProgram(StateTraitBuild.build(stateSchema as any, {} as any), { exportStaticIr: false })\n } catch {\n // best-effort: keep trait program undefined and fall back to dirtyAll scheduling when registry is missing.\n }\n }\n }\n\n const enqueueStateTraitValidateRequest = (request: StateTraitValidate.ScopedValidateRequest): void => {\n if (!txnContext.current) return\n const current: any = txnContext.current\n const list: Array<StateTraitValidate.ScopedValidateRequest> = current.stateTraitValidateRequests ?? []\n list.push(request)\n current.stateTraitValidateRequests = list\n }\n\n const recordReplayEvent = (event: unknown): void => {\n if (!txnContext.current) return\n const current: any = txnContext.current\n current.lastReplayEvent = {\n ...(event as any),\n txnId: current.txnId,\n trigger: current.origin,\n }\n }\n\n const runWithStateTransactionInternal = (\n origin: StateTransaction.StateTxnOrigin,\n body: () => Effect.Effect<void>,\n ): Effect.Effect<void> =>\n enqueueTransaction(\n runOperation(\n origin.kind as any as EffectOp.EffectOp['kind'],\n origin.name ? `txn:${origin.name}` : 'txn',\n { meta: { moduleId: options.moduleId, instanceId } },\n runWithStateTransaction(origin, body),\n ),\n )\n\n const applyTransactionSnapshot = (txnId: string, mode: 'before' | 'after'): Effect.Effect<void> =>\n enqueueTransaction(\n Effect.gen(function* () {\n // Time travel is disabled by default in production to avoid misuse.\n // Devtools should use this only in dev/test with instrumentation = \"full\".\n if (!isDevEnv()) {\n return\n }\n\n const txn = txnById.get(txnId)\n if (!txn) {\n return\n }\n\n const targetState = mode === 'before' ? txn.initialStateSnapshot : txn.finalStateSnapshot\n\n if (targetState === undefined) {\n // Time travel is not possible when snapshots are not collected.\n return\n }\n\n // Record a replay operation as a StateTransaction with origin.kind = \"devtools\"\n // so Devtools txn views can show a complete time-travel trace.\n yield* runWithStateTransaction(\n {\n kind: 'devtools',\n name: 'time-travel',\n details: {\n baseTxnId: txnId,\n mode,\n },\n },\n () =>\n Effect.sync(() => {\n StateTransaction.updateDraft(txnContext, targetState as S)\n StateTransaction.recordPatch(txnContext, '*', 'devtools')\n }),\n )\n }),\n )\n\n const stateSchema = (options.tag as any)?.stateSchema\n\n const effectsRegistry = makeEffectsRegistry({\n moduleId: options.moduleId,\n instanceId,\n actions$: runtime.actions$ as Stream.Stream<unknown>,\n })\n\n const runtimeInternals: RuntimeInternals = {\n moduleId: options.moduleId,\n instanceId,\n stateSchema,\n lifecycle: {\n registerInitRequired: (eff, options) => {\n lifecycle.registerInitRequired(eff, options)\n },\n registerStart: (eff, options) => {\n lifecycle.registerStart(eff, options)\n },\n registerDestroy: (eff, options) => {\n lifecycle.registerDestroy(eff, options)\n },\n registerOnError: (handler) => {\n lifecycle.registerOnError(handler)\n },\n registerPlatformSuspend: (eff, options) => {\n lifecycle.registerPlatformSuspend(eff, options)\n },\n registerPlatformResume: (eff, options) => {\n lifecycle.registerPlatformResume(eff, options)\n },\n registerPlatformReset: (eff, options) => {\n lifecycle.registerPlatformReset(eff, options)\n },\n },\n imports: importsScope,\n txn: {\n instrumentation,\n registerReducer: dispatchOps.registerReducer as any,\n registerActionStateWriteback: dispatchOps.registerActionStateWriteback as any,\n dispatchWithOriginOverride: dispatchOps.dispatchWithOriginOverride as any,\n dispatchLowPriorityWithOriginOverride: dispatchOps.dispatchLowPriorityWithOriginOverride as any,\n dispatchBatchWithOriginOverride: dispatchOps.dispatchBatchWithOriginOverride as any,\n runWithStateTransaction: runWithStateTransactionInternal as any,\n updateDraft,\n recordStatePatch,\n recordReplayEvent,\n applyTransactionSnapshot: applyTransactionSnapshot as any,\n },\n concurrency: {\n resolveConcurrencyPolicy,\n },\n txnLanes: {\n resolveTxnLanePolicy,\n },\n traits: {\n rowIdStore,\n getListConfigs: () => traitState.listConfigs as ReadonlyArray<unknown>,\n registerSourceRefresh: (fieldPath, handler) => {\n sourceRefreshRegistry.set(fieldPath, handler)\n },\n getSourceRefreshHandler: (fieldPath) => sourceRefreshRegistry.get(fieldPath),\n registerStateTraitProgram: registerStateTraitProgram as any,\n enqueueStateTraitValidateRequest: enqueueStateTraitValidateRequest as any,\n registerModuleTraitsContribution: (contribution) => {\n if (moduleTraitsState.frozen) {\n throw new Error('[ModuleTraitsFrozen] Cannot register traits contribution after finalize/freeze.')\n }\n moduleTraitsState.contributions.push(contribution)\n },\n freezeModuleTraits: () => {\n moduleTraitsState.frozen = true\n },\n getModuleTraitsContributions: () => moduleTraitsState.contributions,\n getModuleTraitsSnapshot: () => moduleTraitsState.snapshot,\n setModuleTraitsSnapshot: (snapshot) => {\n moduleTraitsState.snapshot = snapshot\n },\n },\n effects: {\n registerEffect: (args) => effectsRegistry.registerEffect(args as any),\n },\n devtools: {\n registerConvergeStaticIr: registerConvergeStaticIr as any,\n },\n }\n\n yield* installInternalHooks({ runtime, runtimeInternals })\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n importsMap.clear()\n }),\n )\n\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n if (Option.isSome(runtimeStoreOpt)) {\n runtimeStoreOpt.value.unregisterModuleInstance(moduleInstanceKey)\n }\n }),\n )\n\n if (options.tag) {\n registerRuntime(options.tag as ServiceMap.Key<any, PublicModuleRuntime<S, A>>, runtime)\n }\n\n yield* Effect.addFinalizer(() =>\n lifecycle.runDestroy.pipe(\n Effect.flatMap(() =>\n runOperation(\n 'lifecycle',\n 'module:destroy',\n { meta: { moduleId: options.moduleId, instanceId } },\n Debug.record({\n type: 'module:destroy',\n moduleId: options.moduleId,\n instanceId,\n }),\n ),\n ),\n Effect.tap(() =>\n Effect.sync(() => {\n if (options.tag) {\n unregisterRuntime(options.tag as ServiceMap.Key<any, PublicModuleRuntime<any, any>>)\n }\n if (instanceKey) {\n unregisterRuntimeByInstanceKey(instanceKey)\n }\n }),\n ),\n ),\n )\n\n if (options.tag && options.logics?.length) {\n yield* runModuleLogics({\n tag: options.tag as ServiceMap.Key<any, PublicModuleRuntime<S, A>>,\n logics: options.logics,\n runtime,\n lifecycle,\n moduleId,\n instanceId,\n })\n }\n\n if (options.processes && options.processes.length > 0) {\n const env = (yield* Effect.services<Scope.Scope | R>()) as ServiceMap.ServiceMap<any>\n const rootContextOpt = ServiceMap.getOption(env, RootContextTag as any)\n const isAppModule =\n Option.isSome(rootContextOpt) &&\n Array.isArray((rootContextOpt.value as RootContext).appModuleIds) &&\n (rootContextOpt.value as RootContext).appModuleIds!.includes(moduleId)\n\n if (!isAppModule) {\n const processRuntimeOpt = ServiceMap.getOption(env, ProcessRuntime.ProcessRuntimeTag as any)\n const processRuntime = Option.isSome(processRuntimeOpt)\n ? (processRuntimeOpt.value as ProcessRuntime.ProcessRuntime)\n : undefined\n const scope = {\n type: 'moduleInstance',\n moduleId,\n instanceId,\n } as const\n\n yield* Effect.forEach(\n options.processes,\n (process) =>\n Effect.gen(function* () {\n if (processRuntime) {\n const installEffect = processRuntime.install(process as any, {\n scope,\n enabled: true,\n installedAt: 'moduleRuntime',\n })\n\n // During the acquire phase of Layer.scoped(...), the current module runtime is not yet in Context,\n // but instance-scope processes (especially Link) may strictly require dependencies to be resolvable in scope.\n // We explicitly provide the current module runtime to avoid falsely treating itself as a missing dependency.\n const installation = options.tag\n ? yield* installEffect.pipe(\n Effect.provideService(options.tag as ServiceMap.Key<any, any>, runtime as any),\n )\n : yield* installEffect\n\n if (installation !== undefined) {\n return\n }\n }\n\n // Legacy fallback: a raw Effect is still allowed as a process host, but it has no Process static surface/diagnostics.\n yield* Effect.forkScoped(process as any)\n }),\n { discard: true },\n )\n }\n }\n\n return runtime\n })\n\n return program as Effect.Effect<PublicModuleRuntime<S, A>, never, Scope.Scope | R>\n}\n","import { Effect, SubscriptionRef } from 'effect'\nimport {\n getFieldPathId,\n normalizeFieldPath,\n normalizePatchReason,\n type FieldPathIdRegistry,\n type DirtyAllReason,\n type FieldPath,\n type FieldPathId,\n type PatchReason,\n} from '../../field-path.js'\n\nexport type { PatchReason } from '../../field-path.js'\n\nexport type StatePatchPath = string | FieldPath | FieldPathId\n\nexport interface TxnPatchRecord {\n readonly opSeq: number\n readonly pathId?: FieldPathId\n readonly reason: PatchReason\n readonly stepId?: number\n readonly traitNodeId?: string\n readonly from?: unknown\n readonly to?: unknown\n}\n\ninterface MutableTxnPatchRecord {\n opSeq: number\n pathId?: FieldPathId\n reason: PatchReason\n stepId?: number\n traitNodeId?: string\n from?: unknown\n to?: unknown\n}\n\nexport interface StateTxnOrigin {\n readonly kind: string\n readonly name?: string\n readonly details?: unknown\n}\n\nexport type StateTxnInstrumentationLevel = 'full' | 'light'\n\n/**\n * TxnDirtyEvidenceSnapshot:\n * - Immutable snapshot attached to the committed StateTransaction.\n * - Designed for hot-path consumers (SelectorGraph / RowId gate / Debug evidence) without forcing DirtySet(rootIds) construction.\n *\n * Notes:\n * - dirtyPathIds is captured as an Array at commit time (stable across transactions).\n * - When registry is missing, the snapshot conservatively degrades to dirtyAll.\n */\nexport type TxnDirtyEvidenceSnapshot = {\n readonly dirtyAll: boolean\n readonly dirtyAllReason?: DirtyAllReason\n readonly dirtyPathIds: ReadonlyArray<FieldPathId>\n readonly dirtyPathsKeyHash: number\n readonly dirtyPathsKeySize: number\n}\n\n/**\n * TxnDirtyEvidence:\n * - Unified \"dirty evidence\" protocol within a single transaction window.\n * - Carries both root-level dirty path ids (Static IR anchors) and best-effort list index hints.\n *\n * IMPORTANT:\n * - This evidence is only valid within the current transaction window.\n * - Consumers must not persist references (maps/sets are reused across transactions).\n *\n * Key format must match validate.impl.ts `toListInstanceKey`:\n * - root list: `${listPath}@@`\n * - nested list: `${listPath}@@${parentIndexPath.join(',')}`\n */\nexport type TxnDirtyEvidence = {\n readonly dirtyAll: boolean\n readonly dirtyAllReason?: DirtyAllReason\n readonly dirtyPathIds: ReadonlySet<FieldPathId>\n readonly dirtyPathsKeyHash: number\n readonly dirtyPathsKeySize: number\n readonly list?: {\n readonly indexBindings: ReadonlyMap<string, ReadonlySet<number>>\n readonly rootTouched: ReadonlySet<string>\n /**\n * itemTouched:\n * - Indices for which the patch path directly targeted a list index (e.g. \"items.3\" / \"items[3]\"),\n * which is a stronger structural hint than nested field writes (e.g. \"items.3.name\").\n */\n readonly itemTouched: ReadonlyMap<string, ReadonlySet<number>>\n }\n}\n\nexport interface StateTxnConfig {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly instrumentation?: StateTxnInstrumentationLevel\n readonly getFieldPathIdRegistry?: () => FieldPathIdRegistry | undefined\n /**\n * Optional: list path set for this module instance (derived from StateTrait.list configs).\n * - When absent/empty, list-index evidence is not recorded (zero overhead for modules without list traits).\n */\n readonly getListPathSet?: () => ReadonlySet<string> | undefined\n /**\n * Whether to capture initial/final state snapshots:\n * - enabled by default in full mode\n * - disabled by default in light mode\n */\n readonly captureSnapshots?: boolean\n /**\n * Time source function (useful for injecting a fake clock in tests).\n */\n readonly now?: () => number\n}\n\nexport interface StateTransaction<S> {\n readonly txnId: string\n readonly txnSeq: number\n readonly origin: StateTxnOrigin\n readonly startedAt: number\n readonly endedAt: number\n readonly durationMs: number\n readonly dirty: TxnDirtyEvidenceSnapshot\n readonly patchCount: number\n readonly patchesTruncated: boolean\n readonly patchesTruncatedReason?: 'max_patches'\n readonly initialStateSnapshot?: S\n readonly finalStateSnapshot?: S\n readonly patches: ReadonlyArray<TxnPatchRecord>\n readonly moduleId?: string\n readonly instanceId?: string\n}\n\nexport interface StateTransactionCommitResult<S> {\n readonly transaction: StateTransaction<S>\n readonly finalState: S\n}\n\n/**\n * StateTxnContext:\n * - Holds transaction state within a single ModuleRuntime.\n * - current is the active transaction (undefined when none).\n *\n * Notes:\n * - The current implementation supports a single active transaction; queueing strategies are added later (US1).\n * - To avoid premature coupling, Context provides only minimal begin/update/record/commit primitives; entry points\n * (dispatch/source-refresh/devtools) are controlled by higher layers.\n */\nexport interface StateTxnRuntimeConfig {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly instrumentation: StateTxnInstrumentationLevel\n readonly captureSnapshots: boolean\n readonly now: () => number\n readonly getFieldPathIdRegistry?: () => FieldPathIdRegistry | undefined\n readonly getListPathSet?: () => ReadonlySet<string> | undefined\n}\n\nexport interface StateTxnContext<S> {\n readonly config: StateTxnRuntimeConfig\n current?: StateTxnState<S>\n nextTxnSeq: number\n readonly scratch: StateTxnState<S>\n /**\n * recordPatch:\n * - makeContext selects the implementation based on instrumentation (full/light).\n * - Avoids branching per patch record inside hot loops (051: branch relocation).\n */\n recordPatch: (\n path: StatePatchPath | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n}\n\ninterface StateTxnState<S> {\n txnId: string\n txnSeq: number\n origin: StateTxnOrigin\n startedAt: number\n baseState: S\n draft: S\n initialStateSnapshot?: S\n /**\n * inferReplaceEvidence:\n * - Set when a whole-state replacement write occurred without explicit patch paths.\n * - On commit, the transaction infers best-effort field-level dirty evidence by diffing baseState -> finalState.\n *\n * Motivation:\n * - Avoid dirtyAll fallback on `runtime.setState` / `$.state.update` / reducers without sink patchPaths.\n * - Preserve correctness in `dispatchBatch` where different reducers may mix \"has patchPaths\" and \"no patchPaths\".\n *\n * Note:\n * - Kept internal to the txn window; never exported as part of the committed transaction.\n */\n inferReplaceEvidence: boolean\n /**\n * inferReplaceEvidenceIfEmpty:\n * - When true, inference runs only if there is no explicit field-level dirty evidence at commit time.\n * - Primary use case: `setState/state.update` in perf harnesses that record precise patch paths separately.\n * - When a reducer falls back to `path=\"*\"`, this flag is forced to false (supplement mode) to preserve correctness.\n */\n inferReplaceEvidenceIfEmpty: boolean\n /**\n * listPathSet:\n * - Captured once at transaction start from runtime config.\n * - Used to enable list-index evidence recording only when the module actually declares list traits.\n */\n listPathSet?: ReadonlySet<string>\n patches: Array<TxnPatchRecord>\n patchCount: number\n patchesTruncated: boolean\n fieldPathIdRegistry?: FieldPathIdRegistry\n /**\n * dirtyPathIds:\n * - The set of FieldPathIds for all trackable writes within the transaction window (hot path records only integer anchors).\n * - Any non-mappable/non-trackable write must explicitly degrade to dirtyAll (dirtyAllReason); no silent fallback.\n * - Independent of instrumentation: light mode does not keep patches, but still maintains dirtyPathIds/dirtyAllReason for low-cost semantics (e.g. scheduling/diagnostics).\n */\n readonly dirtyPathIds: Set<FieldPathId>\n dirtyPathIdSnapshot: Array<FieldPathId>\n /**\n * dirtyPathIdsKeyHash / dirtyPathIdsKeySize:\n * - Incrementally maintained key for the current dirtyPathIds Set (in insertion order),\n * optimized for ultra-hot converge paths (inline_dirty micro-cache).\n * - Hash: FNV-1a (32-bit) over unique FieldPathIds in Set insertion order.\n * - Size: number of unique ids (mirrors dirtyPathIds.size when no dirtyAllReason).\n */\n dirtyPathIdsKeyHash: number\n dirtyPathIdsKeySize: number\n dirtyAllReason?: DirtyAllReason\n /**\n * listIndexEvidence:\n * - key: listInstanceKey (\"<listPath>@@<parentIndexPath>\")\n * - value: changed indices for that list instance within the current transaction window.\n */\n readonly listIndexEvidence: Map<string, Set<number>>\n /**\n * listItemTouched:\n * - key: listInstanceKey\n * - value: indices for which the patch directly targeted the item itself (terminal numeric segment).\n */\n readonly listItemTouched: Map<string, Set<number>>\n /**\n * listRootTouched:\n * - listInstanceKey set for which a patch directly touched the list root (structure may have changed),\n * so changedIndices hints must be ignored.\n */\n readonly listRootTouched: Set<string>\n}\n\nconst MAX_PATCHES_FULL = 256\nconst MAX_INFERRED_LIST_INDICES = 64\nconst EMPTY_DIRTY_PATH_IDS: ReadonlyArray<FieldPathId> = []\nconst EMPTY_TXN_PATCHES: ReadonlyArray<TxnPatchRecord> = []\n\nconst defaultNow = () => {\n const perf = globalThis.performance\n if (perf && typeof perf.now === 'function') {\n return perf.now()\n }\n return Date.now()\n}\n\nconst normalizePatchStepId = (stepId?: number): number | undefined => {\n if (typeof stepId !== 'number' || !Number.isFinite(stepId) || stepId < 0) {\n return undefined\n }\n return Math.floor(stepId)\n}\n\nconst toListInstanceKey = (listPath: string, parentIndexPathKey: string): string =>\n parentIndexPathKey.length === 0 ? `${listPath}@@` : `${listPath}@@${parentIndexPathKey}`\n\nconst parseNonNegativeIntMaybe = (text: string): number | undefined => {\n if (!text) return undefined\n let n = 0\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i)\n if (c < 48 /* '0' */ || c > 57 /* '9' */) return undefined\n n = n * 10 + (c - 48)\n // Best-effort guard: keep values in a reasonable integer range.\n if (n > 2_147_483_647) return undefined\n }\n return n\n}\n\nconst recordListIndexEvidenceFromPathString = <S>(state: StateTxnState<S>, path: string): void => {\n if (state.dirtyAllReason) return\n const listPathSet = state.listPathSet\n if (!listPathSet || listPathSet.size === 0) return\n if (!path || path === '*') return\n\n // Hot path: plain dot/bracket-free path can only contribute list-root touched evidence.\n const dotIdx = path.indexOf('.')\n const bracketIdx = path.indexOf('[')\n if (dotIdx < 0 && bracketIdx < 0 && path.indexOf(']') < 0) {\n if (listPathSet.has(path)) {\n state.listRootTouched.add(toListInstanceKey(path, ''))\n }\n return\n }\n\n let listPath = ''\n let parentIndexPathKey = ''\n let endedWithNumeric = false\n\n\t const parts = path.split('.')\n\t for (let i = 0; i < parts.length; i++) {\n\t const raw = parts[i]\n\t if (!raw) continue\n\t const seg = raw\n\t endedWithNumeric = false\n\n // \"foo[]\" => list root marker (no index)\n if (seg.endsWith('[]')) {\n const base = seg.slice(0, -2)\n if (base) {\n listPath = listPath.length === 0 ? base : `${listPath}.${base}`\n }\n continue\n }\n\n // \"foo[123]\" => list index marker\n const left = seg.indexOf('[')\n if (left > 0 && seg.endsWith(']')) {\n const base = seg.slice(0, left)\n const inside = seg.slice(left + 1, -1)\n const idx = parseNonNegativeIntMaybe(inside)\n\n if (base) {\n listPath = listPath.length === 0 ? base : `${listPath}.${base}`\n }\n\n if (idx !== undefined) {\n if (listPath && listPathSet.has(listPath)) {\n const key = toListInstanceKey(listPath, parentIndexPathKey)\n const set = state.listIndexEvidence.get(key) ?? new Set<number>()\n set.add(idx)\n state.listIndexEvidence.set(key, set)\n\n // Stronger structural hint: item-level write (\"items[3]\" as terminal segment).\n if (i === parts.length - 1) {\n const touched = state.listItemTouched.get(key) ?? new Set<number>()\n touched.add(idx)\n state.listItemTouched.set(key, touched)\n }\n }\n\n // Descend into this list item: subsequent nested list bindings should carry this index as parent indexPath.\n parentIndexPathKey = parentIndexPathKey.length === 0 ? String(idx) : `${parentIndexPathKey},${idx}`\n endedWithNumeric = true\n }\n\n continue\n }\n\n // \".<digits>\" => list index segment\n const idx = parseNonNegativeIntMaybe(seg)\n if (idx !== undefined) {\n if (listPath && listPathSet.has(listPath)) {\n const key = toListInstanceKey(listPath, parentIndexPathKey)\n const set = state.listIndexEvidence.get(key) ?? new Set<number>()\n set.add(idx)\n state.listIndexEvidence.set(key, set)\n\n // Stronger structural hint: item-level write (\"items.3\" as terminal segment).\n if (i === parts.length - 1) {\n const touched = state.listItemTouched.get(key) ?? new Set<number>()\n touched.add(idx)\n state.listItemTouched.set(key, touched)\n }\n }\n\n parentIndexPathKey = parentIndexPathKey.length === 0 ? String(idx) : `${parentIndexPathKey},${idx}`\n endedWithNumeric = true\n continue\n }\n\n // Unknown bracket syntax: bail out for this segment (best-effort).\n if (seg.includes('[') || seg.includes(']')) {\n continue\n }\n\n listPath = listPath.length === 0 ? seg : `${listPath}.${seg}`\n }\n\n // If the terminal normalized path is a configured list path, treat it as \"list root touched\" (structure may have changed).\n if (!endedWithNumeric && listPath && listPathSet.has(listPath)) {\n state.listRootTouched.add(toListInstanceKey(listPath, parentIndexPathKey))\n }\n}\n\nconst recordListIndexEvidenceFromPathArray = <S>(state: StateTxnState<S>, path: ReadonlyArray<string>): void => {\n if (state.dirtyAllReason) return\n const listPathSet = state.listPathSet\n if (!listPathSet || listPathSet.size === 0) return\n if (!path || path.length === 0) return\n\n // Array-path evidence (from mutative patches) can include list indices as digit strings (\"3\").\n // Unlike string-path parsing, we do not support bracket syntax here (segments are already split).\n let listPath = ''\n let parentIndexPathKey = ''\n let endedWithNumeric = false\n\n for (let i = 0; i < path.length; i++) {\n const raw = path[i]\n if (!raw) continue\n\n // List root marker (rare but supported): \"items[]\"\n if (raw.endsWith('[]')) {\n const base = raw.slice(0, -2)\n if (base) {\n listPath = listPath.length === 0 ? base : `${listPath}.${base}`\n }\n endedWithNumeric = false\n continue\n }\n\n const idx = parseNonNegativeIntMaybe(raw)\n if (idx !== undefined) {\n endedWithNumeric = true\n\n if (listPath && listPathSet.has(listPath)) {\n const key = toListInstanceKey(listPath, parentIndexPathKey)\n const set = state.listIndexEvidence.get(key) ?? new Set<number>()\n set.add(idx)\n state.listIndexEvidence.set(key, set)\n\n // Stronger structural hint: item-level write (terminal numeric segment).\n if (i === path.length - 1) {\n const touched = state.listItemTouched.get(key) ?? new Set<number>()\n touched.add(idx)\n state.listItemTouched.set(key, touched)\n }\n }\n\n parentIndexPathKey = parentIndexPathKey.length === 0 ? String(idx) : `${parentIndexPathKey},${idx}`\n continue\n }\n\n // Unknown segment encoding: bail out for best-effort evidence recording.\n if (raw.includes('[') || raw.includes(']') || raw.includes('.')) {\n endedWithNumeric = false\n continue\n }\n\n endedWithNumeric = false\n listPath = listPath.length === 0 ? raw : `${listPath}.${raw}`\n }\n\n // If the terminal normalized path is a configured list path, treat it as \"list root touched\" (structure may have changed).\n if (!endedWithNumeric && listPath && listPathSet.has(listPath)) {\n state.listRootTouched.add(toListInstanceKey(listPath, parentIndexPathKey))\n }\n}\n\nconst buildPatchRecord = (\n opSeq: number,\n pathId: FieldPathId | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n): TxnPatchRecord => {\n const record: MutableTxnPatchRecord = {\n opSeq,\n reason: normalizePatchReason(reason),\n }\n\n if (pathId != null) {\n record.pathId = pathId\n }\n if (from !== undefined) {\n record.from = from\n }\n if (to !== undefined) {\n record.to = to\n }\n if (traitNodeId) {\n record.traitNodeId = traitNodeId\n }\n\n const normalizedStepId = normalizePatchStepId(stepId)\n if (normalizedStepId !== undefined) {\n record.stepId = normalizedStepId\n }\n\n return record\n}\n\nconst buildDirtyEvidenceSnapshot = <S>(state: StateTxnState<S>): TxnDirtyEvidenceSnapshot => {\n const registry = state.fieldPathIdRegistry\n const dirtyAllReason = state.dirtyAllReason\n\n // If registry is missing, we cannot safely map pathIds -> FieldPaths for consumers;\n // conservatively degrade to dirtyAll (same as DirtySet fallback policy).\n if (registry == null) {\n return {\n dirtyAll: true,\n dirtyAllReason: dirtyAllReason ?? 'fallbackPolicy',\n dirtyPathIds: EMPTY_DIRTY_PATH_IDS,\n dirtyPathsKeyHash: 0,\n dirtyPathsKeySize: 0,\n }\n }\n\n if (dirtyAllReason != null) {\n return {\n dirtyAll: true,\n dirtyAllReason,\n dirtyPathIds: EMPTY_DIRTY_PATH_IDS,\n dirtyPathsKeyHash: 0,\n dirtyPathsKeySize: 0,\n }\n }\n\n // IMPORTANT:\n // - If there is no dirty evidence at all (empty set), we must degrade to dirtyAll=unknownWrite.\n // - This preserves legacy behavior where DirtySet construction would fallback to dirtyAll on empty roots.\n if (state.dirtyPathIds.size === 0) {\n return {\n dirtyAll: true,\n dirtyAllReason: 'unknownWrite',\n dirtyPathIds: EMPTY_DIRTY_PATH_IDS,\n dirtyPathsKeyHash: 0,\n dirtyPathsKeySize: 0,\n }\n }\n\n return {\n dirtyAll: false,\n dirtyPathIds: state.dirtyPathIdSnapshot,\n dirtyPathsKeyHash: state.dirtyPathIdsKeyHash,\n dirtyPathsKeySize: state.dirtyPathIdsKeySize,\n }\n}\n\nconst inferReplaceEvidence = <S>(ctx: StateTxnContext<S>, state: StateTxnState<S>, finalState: S): void => {\n if (!state.inferReplaceEvidence) return\n if (state.dirtyAllReason) return\n\n // If explicit dirty evidence exists and this replace marker is \"if_empty\" mode, skip inference (perf-first contract).\n if (state.inferReplaceEvidenceIfEmpty && state.dirtyPathIds.size > 0) return\n\n const registry = state.fieldPathIdRegistry\n if (!registry) {\n state.dirtyAllReason = 'fallbackPolicy'\n return\n }\n\n const base = state.baseState as any\n const next = finalState as any\n\n // Best-effort inference supports plain object states only.\n if (!base || !next) {\n state.dirtyAllReason = 'unknownWrite'\n return\n }\n if (typeof base !== 'object' || typeof next !== 'object') {\n state.dirtyAllReason = 'unknownWrite'\n return\n }\n if (Array.isArray(base) || Array.isArray(next)) {\n state.dirtyAllReason = 'unknownWrite'\n return\n }\n\n const pathStringToId = registry.pathStringToId\n const listPathSet = state.listPathSet\n\n const recordKey = (key: string, prevValue: unknown, nextValue: unknown): void => {\n if (state.dirtyAllReason) return\n if (!key) return\n\n // Only infer for keys that exist in the Static IR registry (avoid degrading due to extra/untracked keys).\n if (!pathStringToId || !pathStringToId.has(key)) {\n return\n }\n\n if (listPathSet && listPathSet.has(key)) {\n const instanceKey = toListInstanceKey(key, '')\n\n // If the list instance is already marked as structurally dirty, skip.\n if (state.listRootTouched.has(instanceKey)) {\n return\n }\n\n const prevArr = Array.isArray(prevValue) ? (prevValue as ReadonlyArray<unknown>) : undefined\n const nextArr = Array.isArray(nextValue) ? (nextValue as ReadonlyArray<unknown>) : undefined\n\n if (!prevArr || !nextArr) {\n // Treat unknown encoding as a structural list change (disable incremental hints).\n ctx.recordPatch(`${key}[]`, 'unknown')\n return\n }\n\n if (prevArr.length !== nextArr.length) {\n ctx.recordPatch(`${key}[]`, 'unknown')\n return\n }\n\n let changed = 0\n for (let i = 0; i < prevArr.length; i++) {\n if (Object.is(prevArr[i], nextArr[i])) continue\n changed += 1\n ctx.recordPatch([key, String(i)], 'unknown')\n\n // Guard: if too many indices differ, treat it as a structural churn and stop tracking individual indices.\n if (changed > MAX_INFERRED_LIST_INDICES) {\n ctx.recordPatch(`${key}[]`, 'unknown')\n break\n }\n }\n\n // If the array identity changed but no element differs, treat it as a structural list touch.\n if (changed === 0) {\n ctx.recordPatch(`${key}[]`, 'unknown')\n }\n\n return\n }\n\n ctx.recordPatch(key, 'unknown')\n }\n\n // Removed/changed keys (covers \"key removed\" as next[key] becomes undefined).\n const baseKeys = Object.keys(base)\n for (let i = 0; i < baseKeys.length; i++) {\n const key = baseKeys[i]!\n const prevValue = base[key]\n const nextValue = next[key]\n if (!Object.is(prevValue, nextValue) || !Object.prototype.hasOwnProperty.call(next, key)) {\n recordKey(key, prevValue, nextValue)\n }\n }\n\n // Added keys (rare for schema-backed states, but supported).\n const nextKeys = Object.keys(next)\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i]!\n if (Object.prototype.hasOwnProperty.call(base, key)) continue\n recordKey(key, base[key], next[key])\n }\n\n // If inference produced nothing (e.g., non-trackable schema), deterministically degrade to dirtyAll.\n if (!state.dirtyAllReason && state.dirtyPathIds.size === 0) {\n state.dirtyAllReason = 'unknownWrite'\n }\n}\n\nconst buildCommittedTransaction = <S>(\n ctx: StateTxnContext<S>,\n state: StateTxnState<S>,\n finalState: S,\n endedAt: number,\n): StateTransaction<S> => {\n const { config } = ctx\n inferReplaceEvidence(ctx, state, finalState)\n const dirty = buildDirtyEvidenceSnapshot(state)\n const patches =\n config.instrumentation === 'full'\n ? state.patches.length === 0\n ? EMPTY_TXN_PATCHES\n : (state.patches as ReadonlyArray<TxnPatchRecord>)\n : EMPTY_TXN_PATCHES\n\n return {\n txnId: state.txnId,\n txnSeq: state.txnSeq,\n origin: state.origin,\n startedAt: state.startedAt,\n endedAt,\n durationMs: Math.max(0, endedAt - state.startedAt),\n dirty,\n patchCount: state.patchCount,\n patchesTruncated: state.patchesTruncated,\n ...(state.patchesTruncated ? { patchesTruncatedReason: 'max_patches' } : null),\n initialStateSnapshot: state.initialStateSnapshot,\n finalStateSnapshot: config.captureSnapshots ? finalState : undefined,\n patches,\n moduleId: config.moduleId,\n instanceId: config.instanceId,\n }\n}\n\nexport const makeContext = <S>(config: StateTxnConfig): StateTxnContext<S> => {\n const instrumentation: StateTxnInstrumentationLevel = config.instrumentation ?? 'full'\n\n const captureSnapshots = config.captureSnapshots ?? instrumentation === 'full'\n\n const scratch: StateTxnState<S> = {\n txnId: '',\n txnSeq: 0,\n origin: { kind: 'unknown' },\n startedAt: 0,\n baseState: undefined as any,\n draft: undefined as any,\n initialStateSnapshot: undefined,\n inferReplaceEvidence: false,\n inferReplaceEvidenceIfEmpty: true,\n listPathSet: undefined,\n patches: [],\n patchCount: 0,\n patchesTruncated: false,\n dirtyPathIds: new Set(),\n dirtyPathIdSnapshot: [],\n dirtyPathIdsKeyHash: 2166136261 >>> 0,\n dirtyPathIdsKeySize: 0,\n dirtyAllReason: undefined,\n listIndexEvidence: new Map(),\n listItemTouched: new Map(),\n listRootTouched: new Set(),\n }\n\n const ctx: StateTxnContext<S> = {\n config: {\n instrumentation,\n captureSnapshots,\n now: config.now ?? defaultNow,\n moduleId: config.moduleId,\n instanceId: config.instanceId,\n getFieldPathIdRegistry: config.getFieldPathIdRegistry,\n getListPathSet: config.getListPathSet,\n },\n current: undefined,\n nextTxnSeq: 0,\n scratch,\n recordPatch: () => {},\n }\n\n const recordPatchLight = (\n path: StatePatchPath | undefined,\n _reason: PatchReason,\n _from?: unknown,\n _to?: unknown,\n _traitNodeId?: string,\n _stepId?: number,\n ): void => {\n const state = ctx.current\n if (!state) return\n state.patchCount += 1\n if (typeof path === 'string') {\n recordListIndexEvidenceFromPathString(state, path)\n } else if (Array.isArray(path)) {\n recordListIndexEvidenceFromPathArray(state, path)\n }\n resolveAndRecordDirtyPathId(state, path, _reason)\n }\n\n const recordPatchFull = (\n path: StatePatchPath | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ): void => {\n const state = ctx.current\n if (!state) return\n state.patchCount += 1\n if (typeof path === 'string') {\n recordListIndexEvidenceFromPathString(state, path)\n } else if (Array.isArray(path)) {\n recordListIndexEvidenceFromPathArray(state, path)\n }\n const opSeq = state.patchCount - 1\n const pathId = resolveAndRecordDirtyPathId(state, path, reason)\n if (state.patchesTruncated || state.patches.length >= MAX_PATCHES_FULL) {\n state.patchesTruncated = true\n return\n }\n state.patches.push(buildPatchRecord(opSeq, pathId, reason, from, to, traitNodeId, stepId))\n }\n\n ctx.recordPatch = instrumentation === 'full' ? recordPatchFull : recordPatchLight\n\n return ctx\n}\n\n/**\n * Begins a new transaction:\n * - Default behavior: overrides the current transaction (queueing/nesting are refined in US1).\n * - initialState is provided by the caller (typically the current SubscriptionRef snapshot).\n */\nexport const beginTransaction = <S>(ctx: StateTxnContext<S>, origin: StateTxnOrigin, initialState: S): void => {\n const { config } = ctx\n const now = config.now\n const startedAt = now()\n\n ctx.nextTxnSeq += 1\n const txnSeq = ctx.nextTxnSeq\n const anchor = config.instanceId ?? 'unknown'\n const txnId = `${anchor}::t${txnSeq}`\n\n const initialSnapshot = config.captureSnapshots ? initialState : undefined\n\n const state = ctx.scratch\n state.txnId = txnId\n state.txnSeq = txnSeq\n state.origin = origin\n state.startedAt = startedAt\n state.baseState = initialState\n state.draft = initialState\n state.initialStateSnapshot = initialSnapshot\n state.inferReplaceEvidence = false\n state.inferReplaceEvidenceIfEmpty = true\n state.patches = []\n state.patchCount = 0\n state.patchesTruncated = false\n state.fieldPathIdRegistry = ctx.config.getFieldPathIdRegistry?.()\n state.dirtyPathIds.clear()\n state.dirtyPathIdSnapshot = []\n state.dirtyPathIdsKeyHash = 2166136261 >>> 0\n state.dirtyPathIdsKeySize = 0\n state.dirtyAllReason = undefined\n state.listPathSet = ctx.config.getListPathSet?.()\n state.listIndexEvidence.clear()\n state.listItemTouched.clear()\n state.listRootTouched.clear()\n ctx.current = state\n}\n\nconst resolveAndRecordDirtyPathId = <S>(\n state: StateTxnState<S>,\n path: StatePatchPath | undefined,\n reason: PatchReason,\n): FieldPathId | undefined => {\n if (state.dirtyAllReason) return undefined\n\n if (path === undefined) {\n state.dirtyAllReason = 'customMutation'\n return undefined\n }\n\n if (path === '*') {\n // Perf boundary harness: keep a stable way to force dirtyAll (explicit contract).\n if (reason === 'perf') {\n state.dirtyAllReason = 'unknownWrite'\n return undefined\n }\n\n // Whole-state replacement without explicit patch paths:\n // defer to commit-time inference rather than eagerly degrading to dirtyAll.\n state.inferReplaceEvidence = true\n // Reducer fallback must preserve correctness even when other reducers already produced evidence.\n // For non-reducer callers (setState/update), default to if_empty mode to avoid extra diff cost when precise evidence exists.\n if (reason === 'reducer') {\n state.inferReplaceEvidenceIfEmpty = false\n }\n return undefined\n }\n\n const registry = state.fieldPathIdRegistry\n if (!registry) {\n state.dirtyAllReason = reason === 'reducer' ? 'customMutation' : 'fallbackPolicy'\n return undefined\n }\n\n let id: FieldPathId | undefined\n\n if (typeof path === 'number') {\n if (!Number.isFinite(path)) {\n state.dirtyAllReason = 'nonTrackablePatch'\n return undefined\n }\n const n = Math.floor(path)\n if (n < 0) {\n state.dirtyAllReason = 'nonTrackablePatch'\n return undefined\n }\n if (!registry.fieldPaths[n]) {\n state.dirtyAllReason = 'fallbackPolicy'\n return undefined\n }\n id = n\n } else if (typeof path === 'string') {\n // Fast path: direct dot-separated lookup.\n const direct = registry.pathStringToId?.get(path)\n if (direct != null) {\n id = direct\n } else {\n // Structural string fallback: support list/index syntax such as:\n // - \"b123[456]\" / \"b123[]\" -> \"b123\"\n // - \"a.0.b\" / \"a.0.b[3].c\" -> \"a.b.c\"\n //\n // IMPORTANT: only attempt normalization when the input clearly contains structural syntax\n // (brackets or a numeric segment). This avoids accidentally interpreting literal \".\" keys\n // (which are intentionally excluded from pathStringToId due to ambiguity).\n\n const dotIdx = path.indexOf('.')\n const bracketIdx = path.indexOf('[')\n\n // Extremely hot case in perf boundaries: single-segment \"foo[123]\" should not allocate.\n if (dotIdx < 0 && bracketIdx > 0) {\n const base = path.slice(0, bracketIdx)\n const baseDirect = registry.pathStringToId?.get(base)\n if (baseDirect != null) {\n id = baseDirect\n }\n }\n\n if (id == null) {\n let hasStructuralSyntax = bracketIdx >= 0 || path.indexOf(']') >= 0\n\n // Detect \".<digits>(.|$)\" segments without regex allocations.\n if (!hasStructuralSyntax) {\n for (let i = 0; i < path.length; i++) {\n if (path.charCodeAt(i) !== 46 /* '.' */) continue\n let j = i + 1\n if (j >= path.length) break\n const c = path.charCodeAt(j)\n if (c < 48 /* '0' */ || c > 57 /* '9' */) continue\n\n while (j < path.length) {\n const d = path.charCodeAt(j)\n if (d < 48 /* '0' */ || d > 57 /* '9' */) break\n j += 1\n }\n\n if (j === path.length || path.charCodeAt(j) === 46 /* '.' */) {\n hasStructuralSyntax = true\n break\n }\n\n i = j\n }\n }\n\n if (hasStructuralSyntax) {\n const normalized = normalizeFieldPath(path)\n if (normalized) {\n const next = getFieldPathId(registry, normalized)\n if (next != null) {\n id = next\n }\n }\n }\n }\n\n if (id == null) {\n state.dirtyAllReason = 'fallbackPolicy'\n return undefined\n }\n }\n } else {\n const normalized = normalizeFieldPath(path)\n if (!normalized) {\n state.dirtyAllReason = 'nonTrackablePatch'\n return undefined\n }\n\n const next = getFieldPathId(registry, normalized)\n if (next == null) {\n state.dirtyAllReason = 'fallbackPolicy'\n return undefined\n }\n id = next\n }\n\n state.dirtyPathIds.add(id)\n // Maintain an incremental key for inline_dirty micro-cache without scanning the Set.\n // Only update when the id is newly inserted (Set ignores duplicates but keeps insertion order).\n const afterSize = state.dirtyPathIds.size\n if (afterSize !== state.dirtyPathIdsKeySize) {\n state.dirtyPathIdSnapshot.push(id)\n let h = state.dirtyPathIdsKeyHash >>> 0\n h ^= id >>> 0\n h = Math.imul(h, 16777619)\n state.dirtyPathIdsKeyHash = h >>> 0\n state.dirtyPathIdsKeySize = afterSize\n }\n return id\n}\n\n/**\n * Updates the draft state:\n * - next is the latest draft.\n * - When instrumentation is full, patch info is recorded into the transaction via recordPatch.\n */\nexport const updateDraft = <S>(ctx: StateTxnContext<S>, next: S): void => {\n const state = ctx.current\n if (!state) {\n // No active transaction: ignore patch info; higher layers decide whether to start an implicit transaction.\n return\n }\n\n state.draft = next\n}\n\n/**\n * recordPatch:\n * - In full mode, appends a Patch.\n * - In light mode, silently ignores to avoid extra overhead.\n */\nexport const recordPatch = <S>(\n ctx: StateTxnContext<S>,\n path: StatePatchPath | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n): void => {\n ctx.recordPatch(path, reason, from, to, traitNodeId, stepId)\n}\n\nexport const markDirtyPath = <S>(\n ctx: StateTxnContext<S>,\n path: StatePatchPath | undefined,\n reason: PatchReason,\n): FieldPathId | undefined => {\n const state = ctx.current\n if (!state) return undefined\n return resolveAndRecordDirtyPathId(state, path, reason)\n}\n\nexport const readDirtyEvidence = <S>(ctx: StateTxnContext<S>): TxnDirtyEvidence | undefined => {\n const state = ctx.current as StateTxnState<S> | undefined\n if (!state) return undefined\n const listPathSet = state.listPathSet\n const list =\n listPathSet && listPathSet.size > 0\n ? {\n indexBindings: state.listIndexEvidence,\n rootTouched: state.listRootTouched,\n itemTouched: state.listItemTouched,\n }\n : undefined\n return {\n dirtyAll: state.dirtyAllReason != null,\n dirtyAllReason: state.dirtyAllReason,\n dirtyPathIds: state.dirtyPathIds,\n dirtyPathsKeyHash: state.dirtyPathIdsKeyHash,\n dirtyPathsKeySize: state.dirtyPathIdsKeySize,\n ...(list ? { list } : null),\n }\n}\n\n/**\n * commitWithState:\n * - Commits current transaction and returns both aggregated transaction metadata and committed final state.\n * - Used by runtime hot path to avoid an extra stateRef round-trip after commit.\n */\nexport const commitWithState = <S>(\n ctx: StateTxnContext<S>,\n stateRef: SubscriptionRef.SubscriptionRef<S>,\n): Effect.Effect<StateTransactionCommitResult<S> | undefined> =>\n Effect.gen(function* () {\n const state = ctx.current\n if (!state) {\n return undefined\n }\n\n const { config } = ctx\n const now = config.now\n\n const finalState = state.draft\n\n // 0 commit: when there is no change, do not write SubscriptionRef and do not emit state:update.\n if (Object.is(finalState, state.baseState)) {\n ctx.current = undefined\n return undefined\n }\n\n // Single write to SubscriptionRef: ensures only one external state commit + subscription notification.\n yield* SubscriptionRef.set(stateRef, finalState)\n\n const endedAt = now()\n const transaction = buildCommittedTransaction(ctx, state, finalState, endedAt)\n\n // Hand off the current patch array to the committed transaction, then switch the scratch\n // state to a fresh array so later transactions do not mutate the committed snapshot.\n state.patches = []\n\n // Clear the current transaction.\n ctx.current = undefined\n\n return {\n transaction,\n finalState,\n }\n })\n\n/**\n * Commits the transaction:\n * - Writes the final draft to SubscriptionRef exactly once.\n * - Returns the aggregated StateTransaction; returns undefined if there is no active transaction.\n *\n * Notes:\n * - Emitting Debug/Devtools events is decided by the caller based on the returned transaction.\n * - This module does not depend on DebugSink to avoid circular dependencies in core.\n */\nexport const commit = <S>(\n ctx: StateTxnContext<S>,\n stateRef: SubscriptionRef.SubscriptionRef<S>,\n): Effect.Effect<StateTransaction<S> | undefined> =>\n commitWithState(ctx, stateRef).pipe(Effect.map((result) => result?.transaction))\n\n/**\n * abort:\n * - Terminates the current transaction and clears context.\n * - Does not write to stateRef.\n * - Higher layers decide whether to record diagnostics/observability events.\n */\nexport const abort = <S>(ctx: StateTxnContext<S>): void => {\n ctx.current = undefined\n}\n","export const normalizeNonEmptyString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.length > 0 ? value : undefined\n\nexport const normalizePositiveInt = (value: unknown): number | undefined =>\n typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined\n\nexport const normalizePositiveNumber = (value: unknown): number | undefined =>\n typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : undefined\n\nexport const normalizeNonNegativeNumber = (value: unknown): number | undefined =>\n typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : undefined\n\nexport const normalizeBoolean = (value: unknown): boolean | undefined =>\n typeof value === 'boolean' ? value : undefined\n","import { Effect, Option } from 'effect'\nimport type { StateTxnContext } from './StateTransaction.js'\nimport * as Debug from './DebugSink.js'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport * as EffectOp from '../../effect-op.js'\nimport type { RunSession } from '../../observability/runSession.js'\nimport { RunSessionTag } from '../../observability/runSession.js'\nimport { EffectOpMiddlewareTag } from './EffectOpCore.js'\n\nexport interface OperationRuntimeServices {\n readonly middlewareStack: EffectOp.MiddlewareStack\n readonly runSession: RunSession | undefined\n}\n\nconst readMiddlewareEnv = (): Effect.Effect<Option.Option<EffectOpCore.EffectOpMiddlewareEnv>, never, any> =>\n Effect.serviceOption(EffectOpMiddlewareTag as any).pipe(\n Effect.map((option) => option as Option.Option<EffectOpCore.EffectOpMiddlewareEnv>),\n )\n\nconst readRunSession = (): Effect.Effect<Option.Option<RunSession>, never, any> =>\n Effect.serviceOption(RunSessionTag as any).pipe(Effect.map((option) => option as Option.Option<RunSession>))\n\nexport const resolveOperationRuntimeServices = (): Effect.Effect<OperationRuntimeServices, never, any> =>\n Effect.gen(function* () {\n const middlewareOpt = yield* readMiddlewareEnv()\n const runSessionOpt = yield* readRunSession()\n return {\n middlewareStack: Option.isSome(middlewareOpt) ? middlewareOpt.value.stack : [],\n runSession: Option.isSome(runSessionOpt) ? runSessionOpt.value : undefined,\n }\n })\n\nexport const getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack, never, any> =>\n resolveOperationRuntimeServices().pipe(Effect.map((runtimeServices) => runtimeServices.middlewareStack))\n\nexport const assignOperationOpSeq = (\n meta: EffectOp.EffectOp['meta'] | undefined,\n runSession: RunSession | undefined,\n): number | undefined => {\n const metaAny = meta as any\n if (typeof metaAny?.opSeq === 'number' && Number.isFinite(metaAny.opSeq)) {\n return Math.floor(metaAny.opSeq)\n }\n\n if (!runSession || !metaAny) {\n return undefined\n }\n\n const key = metaAny.instanceId ?? 'global'\n const opSeq = runSession.local.nextSeq('opSeq', key)\n metaAny.opSeq = opSeq\n return opSeq\n}\n\nexport type RunOperation = <A, E, R>(\n kind: EffectOp.EffectOp['kind'],\n name: string,\n params: {\n readonly payload?: unknown\n readonly meta?: EffectOp.EffectOp['meta']\n },\n eff: Effect.Effect<A, E, R>,\n) => Effect.Effect<A, E, R>\n\nexport const makeRunOperation = (args: {\n readonly optionsModuleId: string | undefined\n readonly instanceId: string\n readonly runtimeLabel: string | undefined\n readonly txnContext: StateTxnContext<any>\n}): RunOperation => {\n const { optionsModuleId, instanceId, runtimeLabel, txnContext } = args\n\n const runOperation: RunOperation = <A2, E2, R2>(\n kind: EffectOp.EffectOp['kind'],\n name: string,\n params: {\n readonly payload?: unknown\n readonly meta?: EffectOp.EffectOp['meta']\n },\n eff: Effect.Effect<A2, E2, R2>,\n ): Effect.Effect<A2, E2, R2> =>\n Effect.gen(function* () {\n const { middlewareStack, runSession } = yield* resolveOperationRuntimeServices()\n const existingLinkId = yield* Effect.service(EffectOpCore.currentLinkId).pipe(Effect.orDie)\n\n const currentTxnId = txnContext.current?.txnId\n\n // NOTE: linkId is generated/propagated by the Runtime:\n // - Boundary entrypoints create a new linkId.\n // - Nested operations reuse the current FiberRef.linkId.\n // - Never default to randomness/time to avoid non-replayable implicit identifiers.\n const { linkId: _ignoredLinkId, ...restMeta } = (params.meta ?? {}) as any\n\n const baseMeta: EffectOp.EffectOp['meta'] = {\n ...restMeta,\n // Filled by the runtime.\n moduleId: (params.meta as any)?.moduleId ?? optionsModuleId,\n instanceId: (params.meta as any)?.instanceId ?? instanceId,\n runtimeLabel: (params.meta as any)?.runtimeLabel ?? runtimeLabel,\n txnSeq: (params.meta as any)?.txnSeq ?? txnContext.current?.txnSeq,\n txnId: (params.meta as any)?.txnId ?? currentTxnId,\n }\n\n const opSeq = assignOperationOpSeq(baseMeta, runSession)\n\n const op = EffectOp.make<A2, E2, R2>({\n kind,\n name,\n payload: params.payload,\n effect: eff,\n meta: baseMeta,\n })\n\n const linkId = existingLinkId ?? op.id\n const program = middlewareStack.length ? EffectOp.run(op, middlewareStack) : op.effect\n\n // linkId: created at the boundary, reused for nested ops (shared across modules via a FiberRef).\n return yield* Effect.provideService(Effect.provideService(program, Debug.currentOpSeq, opSeq), EffectOpCore.currentLinkId, linkId)\n })\n\n return runOperation\n}\n","import { Effect, PubSub } from 'effect'\nimport type { StateChangeWithMeta, StateCommitMeta, StateCommitMode, StateCommitPriority } from './module.js'\nimport * as Debug from './DebugSink.js'\nimport type { ConcurrencyDiagnostics } from './ConcurrencyDiagnostics.js'\nimport * as ReducerDiagnostics from './ReducerDiagnostics.js'\nimport * as StateTransaction from './StateTransaction.js'\nimport { mutateWithPatchPaths } from './mutativePatches.js'\nimport type { TxnOriginOverride } from './TxnOriginOverride.js'\nimport type { RunOperation } from './ModuleRuntime.operation.js'\nimport type { RunWithStateTransaction, SetStateInternal } from './ModuleRuntime.transaction.js'\nimport type { EnqueueTransaction } from './ModuleRuntime.txnQueue.js'\nimport type { ResolvedConcurrencyPolicy } from './ModuleRuntime.concurrencyPolicy.js'\n\ntype DispatchEntryPoint = 'dispatch' | 'dispatchBatch' | 'dispatchLowPriority'\n\nconst readClockMs = (): number => {\n const perf = globalThis.performance\n if (perf && typeof perf.now === 'function') {\n return perf.now()\n }\n return Date.now()\n}\n\ntype ActionAnalysis = {\n readonly actionTag: string | undefined\n readonly actionTagNormalized: string\n readonly topicTagPrimary: string | undefined\n readonly topicTagSecondary: string | undefined\n readonly originOp: 'remove' | 'insert' | 'unset' | 'set'\n}\n\ntype ActionPropagationTopicTarget<A> = {\n readonly topicTag: string\n readonly hub: PubSub.PubSub<A>\n}\n\ntype ActionPropagationEntry<A> = {\n readonly action: A\n readonly analysis: ActionAnalysis\n readonly topicTargets: ReadonlyArray<ActionPropagationTopicTarget<A>>\n readonly fanoutCount: number\n}\n\ntype ActionStateWritebackHandler<S, A> =\n | { readonly kind: 'update'; readonly run: (state: S, action: A) => S }\n | { readonly kind: 'mutate'; readonly run: (draft: S, action: A) => void }\n | { readonly kind: 'effect'; readonly run: (action: A) => Effect.Effect<void, never, any> }\n\ntype ActionTopicBatch<A> = {\n readonly topicTag: string\n readonly hub: PubSub.PubSub<A>\n readonly actions: ReadonlyArray<A>\n readonly actionTag: string | undefined\n readonly fanoutCount: number\n}\n\ntype ActionPressureSource = {\n readonly dispatchEntry: DispatchEntryPoint\n readonly channel: 'main' | 'topic'\n readonly topicTag?: string\n readonly actionTag?: string\n readonly batchSize?: number\n readonly fanoutCount?: number\n}\n\nexport const makeDispatchOps = <S, A>(args: {\n readonly optionsModuleId: string | undefined\n readonly instanceId: string\n readonly declaredActionTags?: ReadonlySet<string>\n readonly initialReducers?: Readonly<\n Record<string, (state: S, action: A, sink?: (path: StateTransaction.StatePatchPath) => void) => S>\n >\n readonly txnContext: StateTransaction.StateTxnContext<S>\n readonly readState: Effect.Effect<S>\n readonly setStateInternal: SetStateInternal<S>\n readonly recordStatePatch: (\n path: StateTransaction.StatePatchPath | undefined,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n readonly actionHub: PubSub.PubSub<A>\n readonly actionTagHubsByTag?: ReadonlyMap<string, PubSub.PubSub<A>>\n readonly actionCommitHub: PubSub.PubSub<StateChangeWithMeta<A>>\n readonly diagnostics: ConcurrencyDiagnostics\n readonly enqueueTransaction: EnqueueTransaction\n readonly resolveConcurrencyPolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>\n readonly runOperation: RunOperation\n readonly runWithStateTransaction: RunWithStateTransaction\n readonly isDevEnv: () => boolean\n}): {\n readonly registerReducer: (tag: string, fn: (state: S, action: A) => S) => void\n readonly registerActionStateWriteback: (tag: string, handler: ActionStateWritebackHandler<S, A>) => void\n readonly dispatchWithOriginOverride: (action: A, override?: TxnOriginOverride) => Effect.Effect<void, never, any>\n readonly dispatchBatchWithOriginOverride: (\n actions: ReadonlyArray<A>,\n override?: TxnOriginOverride,\n ) => Effect.Effect<void, never, any>\n readonly dispatchLowPriorityWithOriginOverride: (\n action: A,\n override?: TxnOriginOverride,\n ) => Effect.Effect<void, never, any>\n readonly dispatch: (action: A) => Effect.Effect<void, never, any>\n readonly dispatchBatch: (actions: ReadonlyArray<A>) => Effect.Effect<void, never, any>\n readonly dispatchLowPriority: (action: A) => Effect.Effect<void, never, any>\n} => {\n const {\n optionsModuleId,\n instanceId,\n declaredActionTags,\n initialReducers,\n txnContext,\n readState,\n setStateInternal,\n recordStatePatch,\n actionHub,\n actionTagHubsByTag,\n actionCommitHub,\n diagnostics,\n enqueueTransaction,\n resolveConcurrencyPolicy,\n runOperation,\n runWithStateTransaction,\n isDevEnv,\n } = args\n\n const resolveActionOriginOp = (tag: string): ActionAnalysis['originOp'] => {\n if (tag.includes('Remove') || tag.includes('remove')) return 'remove'\n if (\n tag.includes('Append') ||\n tag.includes('Prepend') ||\n tag.includes('Insert') ||\n tag.includes('Swap') ||\n tag.includes('Move') ||\n tag.includes('append') ||\n tag.includes('prepend') ||\n tag.includes('insert') ||\n tag.includes('swap') ||\n tag.includes('move')\n ) {\n return 'insert'\n }\n if (tag.includes('Unset') || tag.includes('unset')) return 'unset'\n return 'set'\n }\n\n const analyzeAction = (action: A): ActionAnalysis => {\n const tag = (action as any)?._tag\n const type = (action as any)?.type\n\n const actionTag =\n typeof tag === 'string' && tag.length > 0\n ? tag\n : typeof type === 'string' && type.length > 0\n ? type\n : tag != null\n ? String(tag)\n : type != null\n ? String(type)\n : undefined\n\n let topicTagPrimary: string | undefined\n if (typeof tag === 'string' && tag.length > 0) {\n topicTagPrimary = tag\n }\n\n let topicTagSecondary: string | undefined\n if (typeof type === 'string' && type.length > 0) {\n if (topicTagPrimary == null) {\n topicTagPrimary = type\n } else if (type !== topicTagPrimary) {\n topicTagSecondary = type\n }\n }\n\n if (topicTagPrimary == null && actionTag) {\n topicTagPrimary = actionTag\n }\n\n return {\n actionTag,\n actionTagNormalized: typeof actionTag === 'string' && actionTag.length > 0 ? actionTag : 'unknown',\n topicTagPrimary,\n topicTagSecondary,\n originOp: resolveActionOriginOp(actionTag ?? ''),\n }\n }\n\n // Primary reducer map: initial values come from options.reducers and can be extended at runtime via internal hooks (for $.reducer sugar).\n const reducerMap = new Map<string, (state: S, action: A) => S>()\n if (initialReducers) {\n for (const [key, fn] of Object.entries(initialReducers)) {\n reducerMap.set(key, fn as (state: S, action: A) => S)\n }\n }\n\n // Track whether an Action tag has been dispatched, for diagnosing config issues like late reducer registration.\n const dispatchedTags = new Set<string>()\n const actionStateWritebacks = new Map<string, Array<ActionStateWritebackHandler<S, A>>>()\n\n const registerReducer = (tag: string, fn: (state: S, action: A) => S): void => {\n if (reducerMap.has(tag)) {\n // Duplicate registration: throw a config error with extra context; catchAllCause emits diagnostics.\n throw ReducerDiagnostics.makeReducerError('ReducerDuplicateError', tag, optionsModuleId)\n }\n if (dispatchedTags.has(tag)) {\n // Registering after the tag has already been dispatched is a risky config; surfaced via a custom error type for diagnostics.\n throw ReducerDiagnostics.makeReducerError('ReducerLateRegistrationError', tag, optionsModuleId)\n }\n reducerMap.set(tag, fn)\n }\n\n const registerActionStateWriteback = (tag: string, handler: ActionStateWritebackHandler<S, A>): void => {\n if (dispatchedTags.has(tag)) {\n throw ReducerDiagnostics.makeReducerError('ReducerLateRegistrationError', tag, optionsModuleId)\n }\n const existing = actionStateWritebacks.get(tag)\n if (existing) {\n existing.push(handler)\n return\n }\n actionStateWritebacks.set(tag, [handler])\n }\n\n const applyPrimaryReducer = (action: A, analysis: ActionAnalysis) => {\n const tag = analysis.actionTag\n if (tag == null || reducerMap.size === 0) {\n return Effect.void\n }\n const tagKey = tag.length > 0 ? tag : 'unknown'\n dispatchedTags.add(tagKey)\n const reducer = reducerMap.get(tagKey)\n if (!reducer) {\n return Effect.void\n }\n\n return readState.pipe(\n Effect.flatMap((prev) =>\n Effect.gen(function* () {\n const patchPaths: Array<StateTransaction.StatePatchPath> = []\n const sink = (path: StateTransaction.StatePatchPath): void => {\n if (typeof path === 'string') {\n if (path.length > 0) patchPaths.push(path)\n return\n }\n if (typeof path === 'number') {\n if (Number.isFinite(path)) patchPaths.push(Math.floor(path))\n return\n }\n if (path.length > 0) patchPaths.push(path)\n }\n\n const next = (reducer as any)(prev, action, sink) as S\n\n // No-op reducer: avoid dirty evidence to prevent redundant converge/validate full paths.\n if (Object.is(next, prev)) {\n return\n }\n\n // Prefer the traceable in-transaction path:\n // - If the reducer provides patchPaths (e.g. generated by Logix.Module.Reducer.mutate), record field-level patches.\n // - Otherwise record a whole-state replace marker (path=\"*\") and infer best-effort dirty evidence at commit time.\n if (txnContext.current) {\n if (patchPaths.length > 0) {\n StateTransaction.updateDraft(txnContext, next)\n for (const path of patchPaths) {\n recordStatePatch(path, 'reducer')\n }\n return\n }\n\n StateTransaction.updateDraft(txnContext, next)\n recordStatePatch('*', 'reducer', undefined, next)\n\n if (isDevEnv()) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq: txnContext.current?.txnSeq,\n txnId: txnContext.current?.txnId,\n trigger: txnContext.current?.origin,\n code: 'state_transaction::dirty_evidence_inferred',\n severity: 'warning',\n message:\n 'Reducer writeback did not provide field-level patchPaths; using commit-time best-effort inference for dirty evidence.',\n hint: 'Prefer Logix.Module.Reducer.mutate(...) or $.state.mutate(...) to produce exact patchPaths; inference may degrade incremental scheduling under complex mutations.',\n kind: 'dirty_evidence_inferred:reducer',\n })\n }\n\n return\n }\n\n yield* setStateInternal(next, '*', 'reducer', undefined, next)\n }),\n ),\n )\n }\n\n\t\n const applyActionStateWritebacks = (action: A, analysis: ActionAnalysis): Effect.Effect<void, never, any> => {\n const tag = analysis.actionTag\n if (tag == null || actionStateWritebacks.size === 0) {\n return Effect.void\n }\n const handlers = actionStateWritebacks.get(tag.length > 0 ? tag : 'unknown')\n if (!handlers || handlers.length === 0) {\n return Effect.void\n }\n\n return Effect.gen(function* () {\n let currentState: S | undefined\n let pendingState: S | undefined\n let pendingWholeStateWrite = false\n let pendingChanged = false\n const pendingPatchPaths: Array<StateTransaction.StatePatchPath> = []\n\n const clearPending = (): void => {\n pendingState = undefined\n pendingWholeStateWrite = false\n pendingChanged = false\n pendingPatchPaths.length = 0\n }\n\n const flushPending = (): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (!pendingChanged || pendingState === undefined) {\n clearPending()\n return\n }\n\n if (pendingWholeStateWrite) {\n yield* setStateInternal(pendingState, '*', 'unknown', undefined, pendingState)\n } else {\n for (const path of pendingPatchPaths) {\n recordStatePatch(path, 'unknown')\n }\n StateTransaction.updateDraft(txnContext, pendingState)\n }\n\n currentState = pendingState\n clearPending()\n })\n\n const getCurrentState = (): Effect.Effect<S, never, any> =>\n currentState === undefined\n ? readState.pipe(\n Effect.tap((state) =>\n Effect.sync(() => {\n currentState = state\n }),\n ),\n )\n : Effect.succeed(currentState)\n\n for (const handler of handlers) {\n if (handler.kind === 'effect') {\n yield* flushPending()\n yield* handler.run(action)\n currentState = undefined\n continue\n }\n\n const prev = pendingState ?? (yield* getCurrentState())\n\n if (handler.kind === 'update') {\n const next = handler.run(prev, action)\n if (Object.is(next, prev)) {\n continue\n }\n pendingState = next\n pendingChanged = true\n pendingWholeStateWrite = true\n continue\n }\n\n const { nextState, patchPaths } = mutateWithPatchPaths(prev as S, (draft) => handler.run(draft as S, action))\n if (Object.is(nextState, prev)) {\n continue\n }\n\n pendingState = nextState\n pendingChanged = true\n\n if (!pendingWholeStateWrite) {\n for (const path of patchPaths) {\n pendingPatchPaths.push(path)\n }\n }\n }\n\n yield* flushPending()\n })\n }\n\n const makeActionOrigin = (\n originName: string,\n action: A,\n analysis: ActionAnalysis,\n override?: TxnOriginOverride,\n ): StateTransaction.StateTxnOrigin => ({\n kind: override?.kind ?? 'action',\n name: override?.name ?? originName,\n details: {\n _tag: analysis.actionTagNormalized,\n path: typeof (action as any)?.payload?.path === 'string' ? ((action as any).payload.path as string) : undefined,\n op: analysis.originOp,\n },\n })\n\n const dispatchInTransaction = (action: A, analysis: ActionAnalysis): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n // Apply the primary reducer first (may be a no-op).\n yield* applyPrimaryReducer(action, analysis)\n yield* applyActionStateWritebacks(action, analysis)\n\n const unknownAction = declaredActionTags ? !declaredActionTags.has(analysis.actionTagNormalized) : false\n const current: any = txnContext.current\n const phaseTimingEnabled = current?.dispatchPhaseTimingEnabled === true\n\n // Record action dispatch (for Devtools/diagnostics).\n const actionRecordStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n yield* Debug.record({\n type: 'action:dispatch',\n moduleId: optionsModuleId,\n action,\n actionTag: analysis.actionTagNormalized,\n ...(unknownAction ? { unknownAction: true } : {}),\n instanceId,\n txnSeq: txnContext.current?.txnSeq,\n txnId: txnContext.current?.txnId,\n })\n if (phaseTimingEnabled) {\n current.dispatchActionRecordMs =\n (typeof current.dispatchActionRecordMs === 'number' ? current.dispatchActionRecordMs : 0) +\n Math.max(0, readClockMs() - actionRecordStartedAtMs)\n }\n\n // actionsWithMeta$: provides stable txnSeq/txnId anchors for higher-level subscriptions (e.g. Process).\n if (current) {\n const meta: StateCommitMeta = {\n txnSeq: current.txnSeq,\n txnId: current.txnId,\n commitMode: ((current as any).commitMode ?? 'normal') as StateCommitMode,\n priority: ((current as any).priority ?? 'normal') as StateCommitPriority,\n originKind: current.origin.kind,\n originName: current.origin.name,\n }\n const actionCommitStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n yield* PubSub.publish(actionCommitHub, { value: action, meta })\n if (phaseTimingEnabled) {\n current.dispatchActionCommitHubMs =\n (typeof current.dispatchActionCommitHubMs === 'number' ? current.dispatchActionCommitHubMs : 0) +\n Math.max(0, readClockMs() - actionCommitStartedAtMs)\n current.dispatchActionCount =\n (typeof current.dispatchActionCount === 'number' ? current.dispatchActionCount : 0) + 1\n }\n }\n })\n\n const runDispatch = (action: A, analysis: ActionAnalysis, override?: TxnOriginOverride): Effect.Effect<void> =>\n runOperation(\n 'action',\n 'action:dispatch',\n {\n payload: action,\n meta: { moduleId: optionsModuleId, instanceId },\n },\n runWithStateTransaction(makeActionOrigin('dispatch', action, analysis, override), () =>\n dispatchInTransaction(action, analysis) as Effect.Effect<void, never, never>,\n ),\n ).pipe(Effect.asVoid)\n\n const runDispatchLowPriority = (action: A, analysis: ActionAnalysis, override?: TxnOriginOverride): Effect.Effect<void> =>\n runOperation(\n 'action',\n 'action:dispatchLowPriority',\n {\n payload: action,\n meta: { moduleId: optionsModuleId, instanceId },\n },\n runWithStateTransaction(makeActionOrigin('dispatchLowPriority', action, analysis, override), () =>\n Effect.gen(function* () {\n if (txnContext.current) {\n ;(txnContext.current as any).commitMode = 'lowPriority' as StateCommitMode\n ;(txnContext.current as any).priority = 'low' as StateCommitPriority\n }\n yield* (dispatchInTransaction(action, analysis) as Effect.Effect<void, never, never>)\n }),\n ),\n ).pipe(Effect.asVoid)\n\n const runDispatchBatch = (\n actions: ReadonlyArray<A>,\n analyses: ReadonlyArray<ActionAnalysis>,\n override?: TxnOriginOverride,\n ): Effect.Effect<void> => {\n if (actions.length === 0) return Effect.void\n\n return runOperation(\n 'action',\n 'action:dispatchBatch',\n {\n payload: actions,\n meta: { moduleId: optionsModuleId, instanceId },\n },\n runWithStateTransaction(\n { kind: override?.kind ?? 'action', name: override?.name ?? 'dispatchBatch', details: { count: actions.length } } as any,\n () =>\n Effect.gen(function* () {\n if (txnContext.current) {\n ;(txnContext.current as any).commitMode = 'batch' as StateCommitMode\n ;(txnContext.current as any).priority = 'normal' as StateCommitPriority\n }\n for (let index = 0; index < actions.length; index += 1) {\n const action = actions[index] as A\n const analysis = analyses[index] as ActionAnalysis\n yield* (dispatchInTransaction(action, analysis) as Effect.Effect<void, never, never>)\n }\n }),\n ),\n ).pipe(Effect.asVoid)\n }\n\n const publishWithPressureDiagnostics = (\n publish: Effect.Effect<unknown>,\n trigger: () => Debug.TriggerRef,\n resolvePolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>,\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n const startedAt = Date.now()\n yield* publish\n const elapsedMs = Date.now() - startedAt\n\n // fast-path: treat 0ms as \"no backpressure wait observed\" to avoid parsing policy per dispatch.\n if (elapsedMs <= 0) {\n return\n }\n\n const policy = yield* resolvePolicy()\n yield* diagnostics.emitPressureIfNeeded({\n policy,\n trigger: trigger(),\n saturatedDurationMs: elapsedMs,\n })\n })\n\n const publishActionWithPressureDiagnostics = (\n hub: PubSub.PubSub<A>,\n action: A,\n trigger: () => Debug.TriggerRef,\n resolvePolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>,\n ): Effect.Effect<void> => publishWithPressureDiagnostics(PubSub.publish(hub, action), trigger, resolvePolicy)\n\n const publishActionBatchWithPressureDiagnostics = (\n hub: PubSub.PubSub<A>,\n actions: ReadonlyArray<A>,\n trigger: () => Debug.TriggerRef,\n resolvePolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>,\n ): Effect.Effect<void> => {\n if (actions.length === 0) {\n return Effect.void\n }\n if (actions.length === 1) {\n return publishActionWithPressureDiagnostics(hub, actions[0] as A, trigger, resolvePolicy)\n }\n return publishWithPressureDiagnostics(PubSub.publishAll(hub, actions), trigger, resolvePolicy)\n }\n\n const makeLazyPolicyResolver = (): (() => Effect.Effect<ResolvedConcurrencyPolicy>) => {\n let cached: ResolvedConcurrencyPolicy | undefined\n return () =>\n cached\n ? Effect.succeed(cached)\n : resolveConcurrencyPolicy().pipe(\n Effect.tap((policy) =>\n Effect.sync(() => {\n cached = policy\n }),\n ),\n )\n }\n\n const makeActionPressureSource = (args: ActionPressureSource): Record<string, unknown> => ({\n dispatchEntry: args.dispatchEntry,\n channel: args.channel,\n ...(typeof args.topicTag === 'string' ? { topicTag: args.topicTag } : {}),\n ...(typeof args.actionTag === 'string' ? { actionTag: args.actionTag } : {}),\n ...(typeof args.batchSize === 'number' ? { batchSize: args.batchSize } : {}),\n ...(typeof args.fanoutCount === 'number' ? { fanoutCount: args.fanoutCount } : {}),\n })\n\n const makeActionPropagationEntry = (action: A, analysis: ActionAnalysis): ActionPropagationEntry<A> => {\n const topicTargets: Array<ActionPropagationTopicTarget<A>> = []\n const primaryTopicTag = analysis.topicTagPrimary\n const primaryTopicHub = primaryTopicTag ? actionTagHubsByTag?.get(primaryTopicTag) : undefined\n if (primaryTopicHub && primaryTopicTag) {\n topicTargets.push({ topicTag: primaryTopicTag, hub: primaryTopicHub })\n }\n\n const secondaryTopicTag = analysis.topicTagSecondary\n const secondaryTopicHub = secondaryTopicTag ? actionTagHubsByTag?.get(secondaryTopicTag) : undefined\n if (secondaryTopicHub && secondaryTopicTag) {\n topicTargets.push({ topicTag: secondaryTopicTag, hub: secondaryTopicHub })\n }\n\n return {\n action,\n analysis,\n topicTargets,\n fanoutCount: topicTargets.length,\n }\n }\n\n const resolveSharedActionTag = (entries: ReadonlyArray<ActionPropagationEntry<A>>): string | undefined => {\n if (entries.length === 0) {\n return undefined\n }\n const first = entries[0]!.analysis.actionTagNormalized\n for (let index = 1; index < entries.length; index += 1) {\n if (entries[index]!.analysis.actionTagNormalized !== first) {\n return undefined\n }\n }\n return first\n }\n\n const groupTopicBatches = (entries: ReadonlyArray<ActionPropagationEntry<A>>): ReadonlyArray<ActionTopicBatch<A>> => {\n const grouped = new Map<\n string,\n {\n topicTag: string\n hub: PubSub.PubSub<A>\n actions: Array<A>\n actionTag: string | undefined\n fanoutCount: number\n }\n >()\n\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index]!\n for (let topicIndex = 0; topicIndex < entry.topicTargets.length; topicIndex += 1) {\n const topicTarget = entry.topicTargets[topicIndex]!\n let topicBatch = grouped.get(topicTarget.topicTag)\n if (!topicBatch) {\n topicBatch = {\n topicTag: topicTarget.topicTag,\n hub: topicTarget.hub,\n actions: [],\n actionTag: entry.analysis.actionTagNormalized,\n fanoutCount: 0,\n }\n grouped.set(topicTarget.topicTag, topicBatch)\n }\n\n topicBatch.actions.push(entry.action)\n topicBatch.fanoutCount += entry.fanoutCount\n if (topicBatch.actionTag && topicBatch.actionTag !== entry.analysis.actionTagNormalized) {\n topicBatch.actionTag = undefined\n }\n }\n }\n\n return Array.from(grouped.values())\n }\n\n const publishActionPropagationBus = (\n entries: ReadonlyArray<ActionPropagationEntry<A>>,\n dispatchEntry: DispatchEntryPoint,\n resolvePolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>,\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (entries.length === 0) {\n return\n }\n\n const batchSize = entries.length\n let batchFanoutCount = 0\n for (let index = 0; index < entries.length; index += 1) {\n batchFanoutCount += entries[index]!.fanoutCount\n }\n const batchActionTag = batchSize === 1 ? entries[0]!.analysis.actionTagNormalized : resolveSharedActionTag(entries)\n if (batchSize === 1) {\n yield* publishActionWithPressureDiagnostics(\n actionHub,\n entries[0]!.action,\n () => ({\n kind: 'actionHub',\n name: 'publish',\n details: makeActionPressureSource({\n dispatchEntry,\n channel: 'main',\n actionTag: batchActionTag,\n batchSize,\n fanoutCount: batchFanoutCount,\n }),\n }),\n resolvePolicy,\n )\n } else {\n const batchActions = new Array<A>(batchSize)\n for (let index = 0; index < batchSize; index += 1) {\n batchActions[index] = entries[index]!.action\n }\n yield* publishActionBatchWithPressureDiagnostics(\n actionHub,\n batchActions,\n () => ({\n kind: 'actionHub',\n name: 'publish',\n details: makeActionPressureSource({\n dispatchEntry,\n channel: 'main',\n actionTag: batchActionTag,\n batchSize,\n fanoutCount: batchFanoutCount,\n }),\n }),\n resolvePolicy,\n )\n }\n\n // Keep original order per topic stream while using publishAll for batch fan-out.\n const topicBatches = groupTopicBatches(entries)\n for (let topicIndex = 0; topicIndex < topicBatches.length; topicIndex += 1) {\n const topicBatch = topicBatches[topicIndex]!\n yield* publishActionBatchWithPressureDiagnostics(\n topicBatch.hub,\n topicBatch.actions,\n () => ({\n kind: 'actionTopicHub',\n name: 'publish',\n details: makeActionPressureSource({\n dispatchEntry,\n channel: 'topic',\n topicTag: topicBatch.topicTag,\n actionTag: topicBatch.actionTag,\n batchSize: topicBatch.actions.length,\n fanoutCount: topicBatch.fanoutCount,\n }),\n }),\n resolvePolicy,\n )\n }\n })\n\n return {\n registerReducer,\n registerActionStateWriteback,\n dispatchWithOriginOverride: (action, override) => {\n const analysis = analyzeAction(action)\n const propagationEntry = makeActionPropagationEntry(action, analysis)\n const resolvePolicy = makeLazyPolicyResolver()\n return enqueueTransaction(runDispatch(action, analysis, override)).pipe(\n Effect.flatMap(() => publishActionPropagationBus([propagationEntry], 'dispatch', resolvePolicy)),\n )\n },\n dispatchBatchWithOriginOverride: (actions, override) => {\n const analyses = new Array<ActionAnalysis>(actions.length)\n for (let index = 0; index < actions.length; index += 1) {\n analyses[index] = analyzeAction(actions[index] as A)\n }\n const propagationEntries = new Array<ActionPropagationEntry<A>>(actions.length)\n for (let index = 0; index < actions.length; index += 1) {\n propagationEntries[index] = makeActionPropagationEntry(actions[index] as A, analyses[index] as ActionAnalysis)\n }\n const resolvePolicy = makeLazyPolicyResolver()\n return enqueueTransaction(runDispatchBatch(actions, analyses, override)).pipe(\n Effect.flatMap(() => publishActionPropagationBus(propagationEntries, 'dispatchBatch', resolvePolicy)),\n )\n },\n dispatchLowPriorityWithOriginOverride: (action, override) => {\n const analysis = analyzeAction(action)\n const propagationEntry = makeActionPropagationEntry(action, analysis)\n const resolvePolicy = makeLazyPolicyResolver()\n return enqueueTransaction(runDispatchLowPriority(action, analysis, override)).pipe(\n Effect.flatMap(() => publishActionPropagationBus([propagationEntry], 'dispatchLowPriority', resolvePolicy)),\n )\n },\n // Note: publish is a lossless/backpressure channel and may wait.\n // Must run outside the transaction window (FR-012) and must not block the txnQueue consumer fiber (avoid deadlock).\n dispatch: (action) => {\n const analysis = analyzeAction(action)\n const propagationEntry = makeActionPropagationEntry(action, analysis)\n const resolvePolicy = makeLazyPolicyResolver()\n return enqueueTransaction(runDispatch(action, analysis)).pipe(\n Effect.flatMap(() => publishActionPropagationBus([propagationEntry], 'dispatch', resolvePolicy)),\n )\n },\n dispatchBatch: (actions) => {\n const analyses = new Array<ActionAnalysis>(actions.length)\n for (let index = 0; index < actions.length; index += 1) {\n analyses[index] = analyzeAction(actions[index] as A)\n }\n const propagationEntries = new Array<ActionPropagationEntry<A>>(actions.length)\n for (let index = 0; index < actions.length; index += 1) {\n propagationEntries[index] = makeActionPropagationEntry(actions[index] as A, analyses[index] as ActionAnalysis)\n }\n const resolvePolicy = makeLazyPolicyResolver()\n return enqueueTransaction(runDispatchBatch(actions, analyses)).pipe(\n Effect.flatMap(() => publishActionPropagationBus(propagationEntries, 'dispatchBatch', resolvePolicy)),\n )\n },\n dispatchLowPriority: (action) => {\n const analysis = analyzeAction(action)\n const propagationEntry = makeActionPropagationEntry(action, analysis)\n const resolvePolicy = makeLazyPolicyResolver()\n return enqueueTransaction(runDispatchLowPriority(action, analysis)).pipe(\n Effect.flatMap(() => publishActionPropagationBus([propagationEntry], 'dispatchLowPriority', resolvePolicy)),\n )\n },\n }\n}\n","import { Cause, Effect } from 'effect'\nimport * as Debug from './DebugSink.js'\n\n/**\n * Reducer diagnostic error types:\n * - ReducerDuplicateError: multiple primary reducers registered for the same tag.\n * - ReducerLateRegistrationError: reducer registered after actions with this tag have already been dispatched.\n *\n * These errors are internal to Runtime and are converted into Debug diagnostic events in the catch phase.\n */\nexport interface ReducerDiagnosticError extends Error {\n readonly _tag: 'ReducerDuplicateError' | 'ReducerLateRegistrationError'\n readonly tag: string\n readonly moduleId?: string\n}\n\nexport const makeReducerError = (\n _tag: ReducerDiagnosticError['_tag'],\n tag: string,\n moduleId?: string,\n): ReducerDiagnosticError =>\n Object.assign(\n new Error(\n _tag === 'ReducerDuplicateError'\n ? `[ModuleRuntime] Duplicate primary reducer for tag \"${tag}\". Each action tag must have at most one primary reducer.`\n : `[ModuleRuntime] Late primary reducer registration for tag \"${tag}\". Reducers must be registered before the first dispatch of this tag.`,\n ),\n {\n _tag,\n tag,\n moduleId,\n },\n ) as ReducerDiagnosticError\n\n/**\n * Extracts Reducer diagnostic errors from a Logic-forked Cause and emits them as Debug events.\n *\n * Notes:\n * - Emits diagnostic events only when ReducerDiagnosticError is present.\n * - moduleId prefers the error object's moduleId, falling back to the caller-provided moduleId.\n */\nexport const emitDiagnosticsFromCause = (\n cause: Cause.Cause<unknown>,\n moduleIdFromContext?: string,\n): Effect.Effect<void, never, any> =>\n Effect.sync(() => {\n const defects = cause.reasons.filter(Cause.isDieReason).map((reason) => reason.defect)\n\n let duplicate: ReducerDiagnosticError | undefined\n let late: ReducerDiagnosticError | undefined\n\n for (const defect of defects) {\n if (!defect || typeof defect !== 'object') continue\n const error = defect as any\n if (error._tag === 'ReducerDuplicateError') {\n duplicate = error as ReducerDiagnosticError\n } else if (error._tag === 'ReducerLateRegistrationError') {\n late = error as ReducerDiagnosticError\n }\n }\n\n const effects: Array<Effect.Effect<void>> = []\n\n if (duplicate) {\n effects.push(\n Debug.record({\n type: 'diagnostic',\n moduleId: duplicate.moduleId ?? moduleIdFromContext,\n code: 'reducer::duplicate',\n severity: 'error',\n message: `Primary reducer for tag \"${duplicate.tag}\" is already registered and cannot be redefined.`,\n hint: 'Ensure each Action tag defines a single primary reducer. If it is defined in both Module.reducers and $.reducer, keep the Module.reducers version or merge into one definition.',\n actionTag: duplicate.tag,\n }),\n )\n }\n\n if (late) {\n effects.push(\n Debug.record({\n type: 'diagnostic',\n moduleId: late.moduleId ?? moduleIdFromContext,\n code: 'reducer::late_registration',\n severity: 'error',\n message: `Primary reducer for tag \"${late.tag}\" was registered after actions with this tag had already been dispatched.`,\n hint: 'Move this reducer to Module.make({ reducers }), or ensure $.reducer(\"tag\", ...) runs before the first dispatch.',\n actionTag: late.tag,\n }),\n )\n }\n\n if (effects.length === 0) {\n return Effect.void\n }\n\n let combined: Effect.Effect<void> = Effect.void\n for (const eff of effects) {\n combined = combined.pipe(Effect.flatMap(() => eff))\n }\n return combined\n }).pipe(Effect.flatten)\n","import { Effect, Stream } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport { toSerializableErrorSummary } from './errorSummary.js'\n\ntype Phase = 'setup' | 'run'\n\ntype AnyEffectHandler = (payload: unknown) => Effect.Effect<void, any, any>\n\ntype HandlerEntry = {\n readonly actionTag: string\n readonly sourceKey: string\n readonly handler: AnyEffectHandler\n readonly phase: Phase\n readonly logicUnitId: string\n readonly logicUnitLabel: string\n readonly logicUnitPath?: string\n}\n\ntype LogicUnitState = {\n nextHandlerSeq: number\n handlerIds: WeakMap<AnyEffectHandler, string>\n}\n\ntype ActionTagState = {\n readonly handlers: Map<string, HandlerEntry>\n handlerSnapshot: ReadonlyArray<HandlerEntry>\n}\n\nconst resolveActionTag = (action: unknown): string | undefined => {\n const tag = (action as any)?._tag\n if (typeof tag === 'string' && tag.length > 0) return tag\n const type = (action as any)?.type\n if (typeof type === 'string' && type.length > 0) return type\n if (tag != null) return String(tag)\n if (type != null) return String(type)\n return undefined\n}\n\nconst getOrCreateLogicUnitState = (states: Map<string, LogicUnitState>, logicUnitId: string): LogicUnitState => {\n const existing = states.get(logicUnitId)\n if (existing) return existing\n const next: LogicUnitState = { nextHandlerSeq: 0, handlerIds: new WeakMap() }\n states.set(logicUnitId, next)\n return next\n}\n\nconst getOrAssignHandlerId = (state: LogicUnitState, handler: AnyEffectHandler): string => {\n const existing = state.handlerIds.get(handler)\n if (existing) return existing\n state.nextHandlerSeq += 1\n const id = `h${state.nextHandlerSeq}`\n state.handlerIds.set(handler, id)\n return id\n}\n\nexport type RegisterEffectArgs = {\n readonly actionTag: string\n readonly handler: AnyEffectHandler\n readonly phase: Phase\n readonly logicUnit?: {\n readonly logicUnitId: string\n readonly logicUnitLabel: string\n readonly path?: string\n }\n}\n\nexport const makeEffectsRegistry = (args: {\n readonly moduleId: string | undefined\n readonly instanceId: string\n readonly actions$: Stream.Stream<unknown>\n}): {\n readonly registerEffect: (\n params: RegisterEffectArgs,\n ) => Effect.Effect<{ readonly sourceKey: string; readonly duplicate: boolean }, never, any>\n} => {\n const { moduleId, instanceId, actions$ } = args\n\n const logicUnitStates = new Map<string, LogicUnitState>()\n const tagStates = new Map<string, ActionTagState>()\n let watcherStarted = false\n\n const getOrCreateTagState = (actionTag: string): ActionTagState => {\n const existing = tagStates.get(actionTag)\n if (existing) return existing\n const next: ActionTagState = { handlers: new Map(), handlerSnapshot: [] }\n tagStates.set(actionTag, next)\n return next\n }\n\n const refreshHandlerSnapshot = (state: ActionTagState): void => {\n state.handlerSnapshot = Array.from(state.handlers.values())\n }\n\n const startWatcherIfNeeded = (): Effect.Effect<void, never, any> => {\n if (watcherStarted) return Effect.void\n watcherStarted = true\n\n const program = Stream.runForEach(actions$, (action) =>\n Effect.gen(function* () {\n const actionTag = resolveActionTag(action)\n if (!actionTag) return\n\n const state = tagStates.get(actionTag)\n if (!state) return\n\n const entries = state.handlerSnapshot\n if (entries.length === 0) return\n\n const payload = (action as any)?.payload\n\n const dispatchEntry = (entry: HandlerEntry) =>\n Effect.forkScoped(\n Effect.gen(function* () {\n const exit = yield* Effect.exit(entry.handler(payload))\n if (exit._tag === 'Success') return\n\n const { errorSummary, downgrade } = toSerializableErrorSummary(exit.cause)\n const downgradeHint = downgrade ? ` (downgrade=${downgrade})` : ''\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::handler_failure',\n severity: 'error',\n message: `Effect handler failed for actionTag=\"${entry.actionTag}\" sourceKey=\"${entry.sourceKey}\".${downgradeHint}`,\n hint: `${errorSummary.name ? `${errorSummary.name}: ` : ''}${errorSummary.message}`,\n actionTag: entry.actionTag,\n kind: 'effect_handler_failure',\n trigger: {\n kind: 'effect',\n name: 'handler',\n details: {\n actionTag: entry.actionTag,\n sourceKey: entry.sourceKey,\n logicUnitId: entry.logicUnitId,\n },\n },\n })\n }),\n )\n\n if (entries.length === 1) {\n yield* dispatchEntry(entries[0]!)\n return\n }\n\n yield* Effect.forEach(entries, dispatchEntry, { discard: true })\n }),\n ).pipe(\n Effect.catchCause((cause) =>\n Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::watcher_crashed',\n severity: 'error',\n message: 'Effect watcher crashed while routing action handlers.',\n hint: toSerializableErrorSummary(cause).errorSummary.message,\n actionTag: '*',\n kind: 'effect_watcher_crashed',\n })),\n )\n\n return Effect.forkScoped(program).pipe(Effect.asVoid)\n }\n\n const registerEffect = (params: RegisterEffectArgs) =>\n Effect.gen(function* () {\n const actionTag = params.actionTag\n const handler = params.handler\n\n const logicUnitId = params.logicUnit?.logicUnitId ?? 'unknown'\n const logicUnitLabel = params.logicUnit?.logicUnitLabel ?? `logicUnit:${logicUnitId}`\n const logicUnitPath = params.logicUnit?.path\n\n const unitState = getOrCreateLogicUnitState(logicUnitStates, logicUnitId)\n const handlerId = getOrAssignHandlerId(unitState, handler)\n const sourceKey = `${logicUnitId}::${handlerId}`\n\n const tagState = getOrCreateTagState(actionTag)\n\n const duplicate = tagState.handlers.has(sourceKey)\n if (duplicate) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::duplicate_registration',\n severity: 'warning',\n message: `Duplicate effect registration ignored for actionTag=\"${actionTag}\" sourceKey=\"${sourceKey}\".`,\n hint:\n 'The runtime de-duplicates effect handlers by (actionTag, sourceKey). ' +\n 'If you see this unexpectedly, check repeated setup registration or accidental double-mounting.',\n actionTag,\n kind: 'effect_duplicate_registration',\n trigger: {\n kind: 'effect',\n name: 'register',\n details: {\n actionTag,\n sourceKey,\n phase: params.phase,\n logicUnitId,\n logicUnitLabel,\n logicUnitPath,\n },\n },\n })\n return { sourceKey, duplicate: true } as const\n }\n\n tagState.handlers.set(sourceKey, {\n actionTag,\n sourceKey,\n handler,\n phase: params.phase,\n logicUnitId,\n logicUnitLabel,\n logicUnitPath,\n })\n refreshHandlerSnapshot(tagState)\n\n if (params.phase === 'run') {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId,\n instanceId,\n code: 'effects::dynamic_registration',\n severity: 'warning',\n message: `Effect registered in run phase for actionTag=\"${actionTag}\" sourceKey=\"${sourceKey}\".`,\n hint: 'Run-phase registration only affects future actions; prefer registering effects during setup for deterministic behavior.',\n actionTag,\n kind: 'effect_dynamic_registration',\n trigger: {\n kind: 'effect',\n name: 'register:run',\n details: { actionTag, sourceKey, logicUnitId, logicUnitLabel, logicUnitPath },\n },\n })\n }\n\n yield* startWatcherIfNeeded()\n return { sourceKey, duplicate: false } as const\n })\n\n return { registerEffect }\n}\n","import { Cause, Effect, Exit, Fiber, Option, PubSub, Queue, SubscriptionRef } from 'effect'\nimport type { StateChangeWithMeta, StateCommitMeta, StateCommitMode, StateCommitPriority } from './module.js'\nimport type {\n StateTraitProgram,\n TraitConvergeGenerationEvidence,\n TraitConvergePlanCacheEvidence,\n} from '../../state-trait/model.js'\nimport type { DirtyAllReason, DirtySet, FieldPathIdRegistry } from '../../field-path.js'\nimport * as Debug from './DebugSink.js'\nimport * as StateTransaction from './StateTransaction.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport * as StateTraitConverge from '../../state-trait/converge.js'\nimport * as StateTraitValidate from '../../state-trait/validate.js'\nimport * as StateTraitSource from '../../state-trait/source.js'\nimport * as RowId from '../../state-trait/rowid.js'\nimport type { RunOperation } from './ModuleRuntime.operation.js'\nimport type { ResolvedTraitConvergeConfig } from './ModuleRuntime.traitConvergeConfig.js'\nimport {\n currentTxnQueuePhaseTiming,\n type CapturedTxnRuntimeScope,\n type EnqueueTransaction,\n type TxnQueuePhaseTiming,\n} from './ModuleRuntime.txnQueue.js'\nimport { StateTransactionOverridesTag, type StateTransactionOverrides } from './env.js'\nimport { runSyncExitWithServices } from './runner/SyncEffectRunner.js'\n\nconst DIRTY_ALL_SET_STATE_HINT = Symbol.for('@logixjs/core/dirtyAllSetStateHint')\nconst ASYNC_ESCAPE_DIAGNOSTIC_CODE = 'state_transaction::async_escape'\nconst ASYNC_ESCAPE_MESSAGE = 'Synchronous StateTransaction body escaped the transaction window (async/await detected).'\nconst ASYNC_ESCAPE_HINT =\n 'No IO/await/sleep/promises inside the transaction window; use run*Task (pending → IO → writeback) or move async logic outside the transaction.'\nconst ASYNC_ESCAPE_KIND = 'async_in_transaction'\n\nconst makeAsyncEscapeError = (): Error =>\n Object.assign(new Error(ASYNC_ESCAPE_MESSAGE), {\n code: ASYNC_ESCAPE_DIAGNOSTIC_CODE,\n hint: ASYNC_ESCAPE_HINT,\n kind: ASYNC_ESCAPE_KIND,\n })\n\nconst findAsyncEscapeFiber = (cause: unknown): Fiber.Fiber<unknown, unknown> | undefined => {\n const defect = Cause.findDefect(cause as any) as\n | { readonly _tag: 'Success'; readonly success: Fiber.Fiber<unknown, unknown> }\n | { readonly _tag: 'Failure' }\n\n if (defect?._tag !== 'Success') return undefined\n const value: any = defect.success\n if (typeof value !== 'object' || value == null) return undefined\n return typeof value.id === 'number' && typeof value._yielded === 'function' ? (value as Fiber.Fiber<unknown, unknown>) : undefined\n}\n\nconst readDeferredFlushSlice = (details: unknown): { readonly start: number; readonly end: number } | undefined => {\n if (!details || typeof details !== 'object') return undefined\n const raw = details as any\n const start = raw.sliceStart\n const end = raw.sliceEnd\n if (typeof start !== 'number' || typeof end !== 'number') return undefined\n if (!Number.isFinite(start) || !Number.isFinite(end)) return undefined\n const s = Math.floor(start)\n const e = Math.floor(end)\n if (s < 0 || e <= s) return undefined\n return { start: s, end: e }\n}\n\ntype TxnPostCommitPhaseTiming = {\n readonly totalMs: number\n readonly rowIdSyncMs: number\n readonly publishCommitMs: number\n readonly stateUpdateDebugRecordMs: number\n readonly onCommitBeforeStateUpdateMs: number\n readonly onCommitAfterStateUpdateMs: number\n}\n\ntype TxnPhaseTraceData = {\n readonly kind: 'txn-phase'\n readonly originKind: string\n readonly originName?: string\n readonly commitMode: StateCommitMode\n readonly priority: StateCommitPriority\n readonly txnPreludeMs: number\n readonly queue?: TxnQueuePhaseTiming\n readonly dispatchActionRecordMs: number\n readonly dispatchActionCommitHubMs: number\n readonly dispatchActionCount: number\n readonly bodyShellMs: number\n readonly asyncEscapeGuardMs: number\n readonly traitConvergeMs: number\n readonly scopedValidateMs: number\n readonly sourceSyncMs: number\n readonly commit: TxnPostCommitPhaseTiming\n}\n\nconst readClockMs = (): number => {\n const perf = globalThis.performance\n if (perf && typeof perf.now === \"function\") {\n return perf.now()\n }\n return Date.now()\n}\n\nexport type RunWithStateTransaction = <E>(\n origin: StateTransaction.StateTxnOrigin,\n body: () => Effect.Effect<void, E, never>,\n) => Effect.Effect<void, E, never>\n\nexport type SetStateInternal<S> = (\n next: S,\n path: StateTransaction.StatePatchPath,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n) => Effect.Effect<void>\n\nexport type TraitRuntimeAccess = {\n readonly getProgram: () => StateTraitProgram<any> | undefined\n readonly getConvergeStaticIrDigest: () => string | undefined\n readonly getConvergePlanCache: () => StateTraitConverge.ConvergePlanCache | undefined\n readonly getConvergeGeneration: () => TraitConvergeGenerationEvidence\n readonly getPendingCacheMissReason: () => TraitConvergePlanCacheEvidence['missReason'] | undefined\n readonly getPendingCacheMissReasonCount: () => number\n readonly setPendingCacheMissReason: (next: TraitConvergePlanCacheEvidence['missReason'] | undefined) => void\n readonly rowIdStore: RowId.RowIdStore\n readonly getListConfigs: () => ReadonlyArray<RowId.ListConfig>\n}\n\nexport type TraitConvergeTimeSlicingState = {\n readonly signal: Queue.Queue<void>\n readonly backlogDirtyPaths: Set<StateTransaction.StatePatchPath>\n readonly ensureWorkerStarted: () => Effect.Effect<void, never, never>\n backlogDirtyAllReason?: DirtyAllReason\n firstPendingAtMs: number | undefined\n lastTouchedAtMs: number | undefined\n latestConvergeConfig: ResolvedTraitConvergeConfig | undefined\n capturedContext: CapturedTxnRuntimeScope | undefined\n}\n\nexport const makeTransactionOps = <S>(args: {\n readonly moduleId: string\n readonly optionsModuleId: string | undefined\n readonly instanceId: string\n readonly stateRef: SubscriptionRef.SubscriptionRef<S>\n readonly commitHub: PubSub.PubSub<StateChangeWithMeta<S>>\n readonly shouldPublishCommitHub?: () => boolean\n readonly recordStatePatch: (\n path: StateTransaction.StatePatchPath | undefined,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n readonly onCommit?: (args: {\n readonly state: S\n readonly meta: StateCommitMeta\n readonly transaction: StateTransaction.StateTransaction<S>\n readonly diagnosticsLevel: Debug.DiagnosticsLevel\n }) => Effect.Effect<void>\n readonly enqueueTransaction: EnqueueTransaction\n readonly runOperation: RunOperation\n readonly txnContext: StateTransaction.StateTxnContext<S>\n readonly traitConvergeTimeSlicing: TraitConvergeTimeSlicingState\n readonly traitRuntime: TraitRuntimeAccess\n readonly resolveTraitConvergeConfig: () => Effect.Effect<ResolvedTraitConvergeConfig, never, never>\n readonly isDevEnv: () => boolean\n readonly txnHistory: {\n readonly buffer: Array<StateTransaction.StateTransaction<S> | undefined>\n start: number\n size: number\n readonly capacity: number\n }\n readonly txnById: Map<string, StateTransaction.StateTransaction<S>>\n}): {\n readonly readState: Effect.Effect<S>\n readonly setStateInternal: SetStateInternal<S>\n readonly runWithStateTransaction: RunWithStateTransaction\n readonly __logixGetExecVmAssemblyEvidence?: () => unknown\n} => {\n const {\n moduleId,\n optionsModuleId,\n instanceId,\n stateRef,\n commitHub,\n shouldPublishCommitHub,\n recordStatePatch,\n onCommit,\n enqueueTransaction,\n runOperation,\n txnContext,\n traitConvergeTimeSlicing,\n traitRuntime,\n resolveTraitConvergeConfig,\n isDevEnv,\n txnHistory,\n txnById,\n } = args\n\n /**\n * Read current state:\n * - If a transaction is active, return the transaction draft.\n * - Otherwise, fall back to the underlying SubscriptionRef snapshot.\n */\n const readState: Effect.Effect<S> = Effect.gen(function* () {\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\n const current = txnContext.current\n if (inTxn && current) return current.draft\n return yield* SubscriptionRef.get(stateRef)\n })\n\n const runPostCommitPhases = (args: {\n readonly txn: StateTransaction.StateTransaction<S>\n readonly nextState: S\n readonly replayEvent: unknown\n readonly commitMode: StateCommitMode\n readonly priority: StateCommitPriority\n readonly fieldPathIdRegistry: FieldPathIdRegistry | undefined\n readonly dirtyAllSetStateHint: boolean\n readonly traitSummary: unknown\n readonly phaseTimingEnabled: boolean\n }): Effect.Effect<TxnPostCommitPhaseTiming | undefined> =>\n Effect.gen(function* () {\n const {\n txn,\n nextState,\n replayEvent,\n commitMode,\n priority,\n fieldPathIdRegistry,\n dirtyAllSetStateHint,\n traitSummary,\n phaseTimingEnabled,\n } = args\n const phaseStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n let rowIdSyncMs = 0\n let publishCommitMs = 0\n let stateUpdateDebugRecordMs = 0\n let onCommitBeforeStateUpdateMs = 0\n let onCommitAfterStateUpdateMs = 0\n const shouldWarnDirtyAllSetState =\n dirtyAllSetStateHint || (txn.origin.kind === 'state' && txn.origin.name === 'setState')\n\n if (shouldWarnDirtyAllSetState && isDevEnv() && txn.dirty.dirtyAll === true) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq: txn.txnSeq,\n txnId: txn.txnId,\n trigger: txn.origin,\n code: 'state_transaction::dirty_all_fallback',\n severity: 'warning',\n message:\n 'setState/state.update did not provide field-level dirty-set evidence; falling back to dirtyAll scheduling.',\n hint: 'Prefer $.state.mutate(...) or Logix.Module.Reducer.mutate(...) to produce field-level patchPaths; otherwise converge/validate degrades to full-path scheduling.',\n kind: 'dirty_all_fallback:set_state',\n })\n }\n\n // Record txn history: only for dev/test or explicit full instrumentation (devtools/debugging).\n // In production (default light), keep zero retention to avoid turning \"txn history\" into an implicit memory tax.\n if (isDevEnv() || txnContext.config.instrumentation === 'full') {\n txnById.set(txn.txnId, txn)\n const cap = txnHistory.capacity\n if (cap > 0) {\n const buf = txnHistory.buffer\n if (txnHistory.size < cap) {\n buf[(txnHistory.start + txnHistory.size) % cap] = txn\n txnHistory.size += 1\n } else {\n const evicted = buf[txnHistory.start]\n buf[txnHistory.start] = txn\n txnHistory.start = (txnHistory.start + 1) % cap\n if (evicted) {\n txnById.delete(evicted.txnId)\n }\n }\n }\n }\n\n // RowID virtual identity layer: align mappings after each observable commit\n // so in-flight gates and cache reuse remain stable under insert/remove/reorder.\n const listConfigs = traitRuntime.getListConfigs()\n if (listConfigs.length > 0) {\n const rowIdSyncStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const shouldSyncRowIds = RowId.shouldReconcileListConfigsByDirtyEvidence({\n dirty: txn.dirty,\n listConfigs,\n fieldPathIdRegistry,\n })\n if (shouldSyncRowIds) {\n traitRuntime.rowIdStore.updateAll(nextState as any, listConfigs)\n }\n if (phaseTimingEnabled) {\n rowIdSyncMs = Math.max(0, readClockMs() - rowIdSyncStartedAtMs)\n }\n }\n\n const meta: StateCommitMeta = {\n txnSeq: txn.txnSeq,\n txnId: txn.txnId,\n commitMode,\n priority,\n originKind: txn.origin.kind,\n originName: txn.origin.name,\n }\n\n // Always publish:\n // - PubSub already optimizes for 0 subscribers.\n // - Skipping here can drop the first commit due to subscription start races (strictGate/process triggers/tests).\n const publishCommitStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n yield* PubSub.publish(commitHub, {\n value: nextState,\n meta,\n })\n if (phaseTimingEnabled) {\n publishCommitMs = Math.max(0, readClockMs() - publishCommitStartedAtMs)\n }\n\n // Perf-sensitive ordering:\n // - In diagnostics=off mode (default for production/perf runs), allow selectorGraph notifications to be published\n // before state:update debug recording so React external store subscribers can start flushing earlier.\n // - When traceMode=off (production default), treat it as a perf mode even under diagnostics=light/full:\n // publish onCommit before state:update so TickScheduler can schedule the tick flush earlier (yieldMicrotask),\n // reducing end-to-end latency and full/off variance on externalStore ingest workloads.\n // - When traceMode=on, keep the original ordering so any selector eval trace stays after state:update\n // (preserves a more intuitive txn → selector → render causal chain in devtools).\n const diagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n let shouldCommitBeforeStateUpdate = false\n if (onCommit) {\n if (diagnosticsLevel === 'off') {\n shouldCommitBeforeStateUpdate = true\n } else {\n const traceMode = yield* Effect.service(Debug.currentTraceMode).pipe(Effect.orDie)\n shouldCommitBeforeStateUpdate = traceMode === 'off'\n }\n }\n\n if (onCommit && shouldCommitBeforeStateUpdate) {\n const onCommitStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n yield* onCommit({\n state: nextState,\n meta,\n transaction: txn,\n diagnosticsLevel,\n })\n if (phaseTimingEnabled) {\n onCommitBeforeStateUpdateMs = Math.max(0, readClockMs() - onCommitStartedAtMs)\n }\n }\n\n const debugSinks = yield* Effect.service(Debug.currentDebugSinks).pipe(Effect.orDie)\n const shouldRecordStateUpdate = debugSinks.length > 0 && !Debug.isErrorOnlyOnlySinks(debugSinks)\n\n if (shouldRecordStateUpdate) {\n const stateUpdateDebugRecordStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const shouldComputeEvidence = diagnosticsLevel !== 'off'\n\n const staticIrDigest = shouldComputeEvidence ? traitRuntime.getConvergeStaticIrDigest() : undefined\n\n const dirtySetEvidence = shouldComputeEvidence\n ? (() => {\n const pathIdsTopK = diagnosticsLevel === 'full' ? 32 : 3\n\n if (txn.dirty.dirtyAll) {\n return {\n dirtyAll: true,\n reason: txn.dirty.dirtyAllReason ?? 'unknownWrite',\n pathIds: [],\n pathCount: 0,\n keySize: 0,\n keyHash: 0,\n pathIdsTruncated: false,\n }\n }\n\n const fullPathIds = txn.dirty.dirtyPathIds\n const topK = fullPathIds.slice(0, pathIdsTopK)\n return {\n dirtyAll: false,\n // Keep diff anchors (count/hash/size) for the full set; only truncate the pathIds payload.\n pathIds: topK,\n pathCount: fullPathIds.length,\n keySize: txn.dirty.dirtyPathsKeySize,\n keyHash: txn.dirty.dirtyPathsKeyHash,\n pathIdsTruncated: fullPathIds.length > pathIdsTopK,\n }\n })()\n : undefined\n\n yield* Debug.record({\n type: 'state:update',\n moduleId: optionsModuleId,\n state: nextState,\n instanceId,\n txnSeq: txn.txnSeq,\n txnId: txn.txnId,\n staticIrDigest,\n dirtySet: dirtySetEvidence,\n patchCount: txn.patchCount,\n patchesTruncated: txn.patchesTruncated,\n ...(txn.patchesTruncated ? { patchesTruncatedReason: txn.patchesTruncatedReason } : null),\n commitMode,\n priority,\n originKind: txn.origin.kind,\n originName: txn.origin.name,\n traitSummary,\n replayEvent: replayEvent as any,\n })\n if (phaseTimingEnabled) {\n stateUpdateDebugRecordMs = Math.max(0, readClockMs() - stateUpdateDebugRecordStartedAtMs)\n }\n }\n\n if (onCommit && !shouldCommitBeforeStateUpdate) {\n const onCommitStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n yield* onCommit({\n state: nextState,\n meta,\n transaction: txn,\n diagnosticsLevel,\n })\n if (phaseTimingEnabled) {\n onCommitAfterStateUpdateMs = Math.max(0, readClockMs() - onCommitStartedAtMs)\n }\n }\n\n return phaseTimingEnabled\n ? {\n totalMs: Math.max(0, readClockMs() - phaseStartedAtMs),\n rowIdSyncMs,\n publishCommitMs,\n stateUpdateDebugRecordMs,\n onCommitBeforeStateUpdateMs,\n onCommitAfterStateUpdateMs,\n }\n : undefined\n })\n\n /**\n * runWithStateTransaction:\n * - Open a transaction for a single logic entrypoint (dispatch / source-refresh / future extensions).\n * - Aggregate all state writes within body; at the end commit once and emit a state:update debug event.\n * - The caller must ensure body does not cross long IO boundaries (see the spec constraints on the transaction window).\n */\n const runWithStateTransaction: RunWithStateTransaction = <E2>(\n origin: StateTransaction.StateTxnOrigin,\n body: () => Effect.Effect<void, E2, never>,\n ): Effect.Effect<void, E2, never> =>\n (Effect.provideService(Effect.gen(function* () {\n const txnPreludeStartedAtMs = readClockMs()\n const phaseDiagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n const phaseTimingEnabled = phaseDiagnosticsLevel !== 'off'\n const queuePhaseTiming = yield* Effect.service(currentTxnQueuePhaseTiming).pipe(Effect.orDie)\n const baseState = yield* SubscriptionRef.get(stateRef)\n\n StateTransaction.beginTransaction(txnContext, origin, baseState)\n const txnCurrent: any = txnContext.current\n txnCurrent.stateTraitValidateRequests = []\n txnCurrent.commitMode = 'normal' as StateCommitMode\n txnCurrent.priority = 'normal' as StateCommitPriority\n txnCurrent.dispatchPhaseTimingEnabled = phaseTimingEnabled\n txnCurrent.dispatchActionRecordMs = 0\n txnCurrent.dispatchActionCommitHubMs = 0\n txnCurrent.dispatchActionCount = 0\n const txnPreludeMs = phaseTimingEnabled ? Math.max(0, readClockMs() - txnPreludeStartedAtMs) : 0\n\n const stateCommitPriority = (origin as any)?.details?.stateCommit?.priority\n if (stateCommitPriority === 'low' || stateCommitPriority === 'normal') {\n txnCurrent.priority = stateCommitPriority as StateCommitPriority\n }\n \n const txnId = txnContext.current?.txnId\n const txnSeq = txnContext.current?.txnSeq\n \n TaskRunner.enterSyncTransactionShadow()\n let exit: Exit.Exit<void, E2> | undefined\n\n try {\n exit = yield* Effect.exit(\n Effect.provideService(\n Effect.gen(function* () {\n // Trait summary inside the transaction window (for devtools/diagnostics).\n let traitSummary: unknown | undefined\n \n // Execute logic inside the transaction window (reducer / watcher writeback / traits, etc.).\n // Contract: no IO/await/sleep/promises inside the transaction window.\n //\n // Fail-fast when async escapes the window (even in production), without blocking on cleanup.\n // - Sync bodies typically finish before/within the first few polls.\n // - Async bodies (sleep/await/IO) suspend and will not complete within the budget.\n // Use daemon fiber to avoid supervision-induced blocking:\n // - An uninterruptible async escape must not block abort/next transaction.\n const bodyShellStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const asyncEscapeGuardStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const currentServices = yield* Effect.services<any>()\n const bodyExit = yield* Effect.sync(\n () => runSyncExitWithServices(body() as Effect.Effect<void, E2, any>, currentServices) as Exit.Exit<void, E2>,\n )\n const asyncEscapeGuardMs = phaseTimingEnabled\n ? Math.max(0, readClockMs() - asyncEscapeGuardStartedAtMs)\n : 0\n\n if (Exit.isFailure(bodyExit)) {\n const asyncEscapeFiber = findAsyncEscapeFiber(bodyExit.cause)\n\n if (asyncEscapeFiber) {\n if (phaseDiagnosticsLevel !== 'off') {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n txnId,\n trigger: origin,\n code: ASYNC_ESCAPE_DIAGNOSTIC_CODE,\n severity: 'error',\n message: ASYNC_ESCAPE_MESSAGE,\n hint: ASYNC_ESCAPE_HINT,\n kind: ASYNC_ESCAPE_KIND,\n })\n }\n\n yield* Fiber.interrupt(asyncEscapeFiber).pipe(Effect.asVoid, Effect.forkDetach({ startImmediately: true }))\n return yield* Effect.die(makeAsyncEscapeError())\n }\n\n return yield* Effect.failCause(bodyExit.cause)\n }\n const bodyShellMs = phaseTimingEnabled ? Math.max(0, readClockMs() - bodyShellStartedAtMs) : 0\n\n const stateTraitProgram = traitRuntime.getProgram()\n let traitConvergeMs = 0\n let scopedValidateMs = 0\n let sourceSyncMs = 0\n \n // StateTrait: converge derived fields (computed/link, etc.) before commit to ensure 0/1 commit per window.\n if (stateTraitProgram && txnContext.current) {\n const convergeConfig = yield* resolveTraitConvergeConfig()\n traitConvergeTimeSlicing.latestConvergeConfig = convergeConfig\n const timeSlicingConfig = convergeConfig.traitConvergeTimeSlicing\n const isDeferredFlushTxn = origin.kind === 'trait:deferred_flush'\n const hasDeferredSteps =\n stateTraitProgram.convergeExecIr != null &&\n stateTraitProgram.convergeExecIr.topoOrderDeferredInt32.length > 0\n const canTimeSlice = timeSlicingConfig.enabled === true && hasDeferredSteps\n const schedulingScope: StateTraitConverge.ConvergeContext<any>['schedulingScope'] = isDeferredFlushTxn\n ? 'deferred'\n : canTimeSlice\n ? 'immediate'\n : 'all'\n \n const deferredSlice = isDeferredFlushTxn ? readDeferredFlushSlice(origin.details) : undefined\n const deferredScopeStepIds =\n deferredSlice && stateTraitProgram.convergeExecIr\n ? stateTraitProgram.convergeExecIr.topoOrderDeferredInt32.subarray(\n deferredSlice.start,\n deferredSlice.end,\n )\n : undefined\n \n const traitConvergeStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const convergeExit = yield* Effect.exit(\n StateTraitConverge.convergeInTransaction(\n stateTraitProgram as any,\n {\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n txnId,\n configScope: convergeConfig.configScope,\n now: txnContext.config.now,\n budgetMs: convergeConfig.traitConvergeBudgetMs,\n decisionBudgetMs: convergeConfig.traitConvergeDecisionBudgetMs,\n requestedMode: isDeferredFlushTxn ? 'full' : convergeConfig.traitConvergeMode,\n schedulingScope,\n ...(deferredScopeStepIds ? { schedulingScopeStepIds: deferredScopeStepIds } : {}),\n dirtyAllReason: (txnContext.current as any)?.dirtyAllReason,\n dirtyPaths: txnContext.current?.dirtyPathIds,\n dirtyPathsKeyHash: (txnContext.current as any)?.dirtyPathIdsKeyHash,\n dirtyPathsKeySize: (txnContext.current as any)?.dirtyPathIdsKeySize,\n allowInPlaceDraft:\n txnContext.current != null &&\n !Object.is(txnContext.current.draft, txnContext.current.baseState),\n \t planCache: traitRuntime.getConvergePlanCache(),\n \t generation: traitRuntime.getConvergeGeneration(),\n \t cacheMissReasonHint: traitRuntime.getPendingCacheMissReason(),\n \t cacheMissReasonHintCount: traitRuntime.getPendingCacheMissReasonCount(),\n \t getDraft: () => txnContext.current!.draft as any,\n \t setDraft: (next) => {\n \t StateTransaction.updateDraft(txnContext, next as any)\n \t },\n recordPatch: (path, reason, from, to, traitNodeId, stepId) =>\n recordStatePatch(path, reason, from, to, traitNodeId, stepId),\n } as StateTraitConverge.ConvergeContext<any>,\n ),\n )\n if (phaseTimingEnabled) {\n traitConvergeMs = Math.max(0, readClockMs() - traitConvergeStartedAtMs)\n }\n \n if (traitRuntime.getPendingCacheMissReason() === 'generation_bumped') {\n traitRuntime.setPendingCacheMissReason(undefined)\n }\n \n if (convergeExit._tag === 'Failure') {\n const errors = convergeExit.cause.reasons\n .filter((reason) => Cause.isFailReason(reason) || Cause.isDieReason(reason))\n .map((reason) => (Cause.isFailReason(reason) ? reason.error : reason.defect))\n const configError = errors.find(\n (err): err is StateTraitConverge.StateTraitConfigError =>\n err instanceof StateTraitConverge.StateTraitConfigError,\n )\n \n if (configError) {\n const fields = configError.fields ?? []\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n txnId,\n trigger: origin,\n code: 'state_trait::config_error',\n severity: 'error',\n message: configError.message,\n hint:\n configError.code === 'CYCLE_DETECTED'\n ? `computed/link graph has a cycle: ${fields.join(', ')}`\n : `multiple writers detected for the same field: ${fields.join(', ')}`,\n kind: `state_trait_config_error:${configError.code}`,\n })\n }\n \n return yield* Effect.failCause(convergeExit.cause)\n }\n \n const outcome = convergeExit.value\n \n const dirtyAllReasonForDeferred: DirtyAllReason | undefined = (txnContext.current as any)?.dirtyAllReason\n const dirtyPathIdsForDeferred: ReadonlySet<StateTransaction.StatePatchPath> | undefined =\n canTimeSlice && !isDeferredFlushTxn && !dirtyAllReasonForDeferred\n ? txnContext.current.dirtyPathIds\n : undefined\n \n if (\n canTimeSlice &&\n !isDeferredFlushTxn &&\n outcome._tag !== 'Degraded' &&\n (dirtyAllReasonForDeferred != null ||\n (dirtyPathIdsForDeferred != null && dirtyPathIdsForDeferred.size > 0))\n ) {\n const nowMs = Date.now()\n traitConvergeTimeSlicing.firstPendingAtMs = traitConvergeTimeSlicing.firstPendingAtMs ?? nowMs\n traitConvergeTimeSlicing.lastTouchedAtMs = nowMs\n \n if (dirtyAllReasonForDeferred != null) {\n traitConvergeTimeSlicing.backlogDirtyAllReason = dirtyAllReasonForDeferred\n traitConvergeTimeSlicing.backlogDirtyPaths.clear()\n } else if (!traitConvergeTimeSlicing.backlogDirtyAllReason && dirtyPathIdsForDeferred) {\n for (const p of dirtyPathIdsForDeferred) {\n traitConvergeTimeSlicing.backlogDirtyPaths.add(p)\n }\n }\n \n const runtimeLabel = yield* Effect.service(Debug.currentRuntimeLabel).pipe(Effect.orDie)\n const diagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n const debugSinks = yield* Effect.service(Debug.currentDebugSinks).pipe(Effect.orDie)\n const overridesOpt = yield* Effect.serviceOption(StateTransactionOverridesTag)\n const overrides = Option.isSome(overridesOpt) ? overridesOpt.value : undefined\n \n traitConvergeTimeSlicing.capturedContext = {\n runtimeLabel,\n diagnosticsLevel,\n debugSinks,\n overrides,\n }\n \n yield* traitConvergeTimeSlicing.ensureWorkerStarted()\n }\n \n traitSummary = outcome.decision ? { converge: outcome.decision } : undefined\n \n if (outcome._tag === 'Degraded') {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq,\n code: outcome.reason === 'budget_exceeded' ? 'trait::budget_exceeded' : 'trait::runtime_error',\n severity: 'warning',\n message:\n outcome.reason === 'budget_exceeded'\n ? 'Trait converge exceeded budget; derived fields are frozen for this operation window.'\n : 'Trait converge failed at runtime; derived fields are frozen for this operation window.',\n hint:\n outcome.reason === 'budget_exceeded'\n ? 'Check whether computed/check contains heavy computation; move it to source/task or split into cacheable derived pieces.'\n : 'Check computed/link/check for invalid inputs or impure logic; add equals or guards if needed.',\n kind: 'trait_degraded',\n })\n }\n }\n \n // TraitLifecycle scoped validate: flush after converge so validation reads the latest derived state.\n if (stateTraitProgram && txnContext.current) {\n const dedupeScopedValidateRequests = (\n requests: ReadonlyArray<StateTraitValidate.ScopedValidateRequest>,\n ): ReadonlyArray<StateTraitValidate.ScopedValidateRequest> => {\n if (requests.length <= 1) return requests\n \n const priorities: Record<StateTraitValidate.ValidateMode, number> = {\n submit: 4,\n blur: 3,\n valueChange: 2,\n manual: 1,\n }\n \n let bestMode: StateTraitValidate.ValidateMode = 'manual'\n let bestP = priorities[bestMode]\n let hasRoot = false\n \n for (const r of requests) {\n const p = priorities[r.mode]\n if (p > bestP) {\n bestP = p\n bestMode = r.mode\n }\n if (r.target.kind === 'root') {\n hasRoot = true\n }\n }\n \n if (hasRoot) {\n return [{ mode: bestMode, target: { kind: 'root' } }]\n }\n \n const makeKey = (target: StateTraitValidate.ValidateTarget): string => {\n switch (target.kind) {\n case 'field':\n return `field:${target.path}`\n case 'list':\n return `list:${target.path}`\n case 'item':\n return `item:${target.path}:${target.index}:${target.field ?? ''}`\n case 'root':\n return 'root'\n }\n }\n \n const order: Array<string> = []\n const byKey = new Map<string, StateTraitValidate.ScopedValidateRequest>()\n \n for (const req of requests) {\n const key = makeKey(req.target)\n const existing = byKey.get(key)\n if (!existing) {\n byKey.set(key, req)\n order.push(key)\n continue\n }\n if (priorities[req.mode] > priorities[existing.mode]) {\n byKey.set(key, { ...existing, mode: req.mode })\n }\n }\n \n return order.map((k) => byKey.get(k)!).filter(Boolean)\n }\n \n const pending = (txnContext.current as any).stateTraitValidateRequests as\n | ReadonlyArray<StateTraitValidate.ScopedValidateRequest>\n | undefined\n \n if (pending && pending.length > 0) {\n const scopedValidateStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const deduped = dedupeScopedValidateRequests(pending)\n yield* StateTraitValidate.validateInTransaction(\n \t stateTraitProgram as any,\n \t {\n \t moduleId: optionsModuleId,\n \t instanceId,\n \t txnSeq: txnContext.current!.txnSeq,\n \t txnId: txnContext.current!.txnId,\n \t origin: txnContext.current!.origin,\n \t rowIdStore: traitRuntime.rowIdStore,\n \t listConfigs: traitRuntime.getListConfigs(),\n \t txnDirtyEvidence: StateTransaction.readDirtyEvidence(txnContext),\n \t getDraft: () => txnContext.current!.draft as any,\n \t setDraft: (next) => {\n \t StateTransaction.updateDraft(txnContext, next as any)\n \t },\n recordPatch: (path, reason, from, to, traitNodeId, stepId) =>\n recordStatePatch(path, reason, from, to, traitNodeId, stepId),\n } as StateTraitValidate.ValidateContext<any>,\n deduped,\n )\n if (phaseTimingEnabled) {\n scopedValidateMs = Math.max(0, readClockMs() - scopedValidateStartedAtMs)\n }\n }\n }\n\n // If a source key becomes empty, synchronously recycle it back to idle (avoid tearing / ghost data).\n if (stateTraitProgram && txnContext.current) {\n const sourceSyncStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n yield* StateTraitSource.syncIdleInTransaction(\n stateTraitProgram as any,\n {\n moduleId: optionsModuleId,\n instanceId,\n getDraft: () => txnContext.current!.draft as any,\n setDraft: (next) => {\n StateTransaction.updateDraft(txnContext, next as any)\n },\n recordPatch: (path, reason, from, to, traitNodeId, stepId) =>\n recordStatePatch(path, reason, from, to, traitNodeId, stepId),\n } as StateTraitSource.SourceSyncContext<any>,\n )\n if (phaseTimingEnabled) {\n sourceSyncMs = Math.max(0, readClockMs() - sourceSyncStartedAtMs)\n }\n }\n \n // Commit the transaction: write to the underlying state once, and emit a single aggregated state:update event.\n yield* runOperation(\n 'state',\n 'state:update',\n { meta: { moduleId: optionsModuleId, instanceId } },\n Effect.gen(function* () {\n const replayEvent = (txnContext.current as any)?.lastReplayEvent as unknown\n const commitMode = ((txnContext.current as any)?.commitMode ?? 'normal') as StateCommitMode\n const priority = ((txnContext.current as any)?.priority ?? 'normal') as StateCommitPriority\n const fieldPathIdRegistry = txnContext.current?.fieldPathIdRegistry\n const dispatchPhaseTiming =\n phaseTimingEnabled && txnContext.current\n ? {\n dispatchActionRecordMs:\n typeof (txnContext.current as any).dispatchActionRecordMs === 'number'\n ? (txnContext.current as any).dispatchActionRecordMs\n : 0,\n dispatchActionCommitHubMs:\n typeof (txnContext.current as any).dispatchActionCommitHubMs === 'number'\n ? (txnContext.current as any).dispatchActionCommitHubMs\n : 0,\n dispatchActionCount:\n typeof (txnContext.current as any).dispatchActionCount === 'number'\n ? (txnContext.current as any).dispatchActionCount\n : 0,\n }\n : undefined\n const dirtyAllSetStateHint =\n txnContext.current != null && (txnContext.current as any)[DIRTY_ALL_SET_STATE_HINT] === true\n const commitResult = yield* StateTransaction.commitWithState(txnContext, stateRef)\n\n if (commitResult) {\n const commitPhaseTiming = yield* runPostCommitPhases({\n txn: commitResult.transaction,\n nextState: commitResult.finalState,\n replayEvent,\n commitMode,\n priority,\n fieldPathIdRegistry,\n dirtyAllSetStateHint,\n traitSummary,\n phaseTimingEnabled,\n })\n\n if (phaseTimingEnabled && commitPhaseTiming) {\n const trace: TxnPhaseTraceData = {\n kind: 'txn-phase',\n originKind: commitResult.transaction.origin.kind,\n originName: commitResult.transaction.origin.name,\n commitMode,\n priority,\n txnPreludeMs,\n ...(queuePhaseTiming ? { queue: queuePhaseTiming } : null),\n dispatchActionRecordMs: dispatchPhaseTiming?.dispatchActionRecordMs ?? 0,\n dispatchActionCommitHubMs: dispatchPhaseTiming?.dispatchActionCommitHubMs ?? 0,\n dispatchActionCount: dispatchPhaseTiming?.dispatchActionCount ?? 0,\n bodyShellMs,\n asyncEscapeGuardMs,\n traitConvergeMs,\n scopedValidateMs,\n sourceSyncMs,\n commit: commitPhaseTiming,\n }\n yield* Debug.record({\n type: 'trace:txn-phase',\n moduleId: optionsModuleId,\n instanceId,\n txnSeq: commitResult.transaction.txnSeq,\n txnId: commitResult.transaction.txnId,\n data: trace,\n })\n }\n }\n }),\n )\n }),\n Debug.currentTxnId,\n txnId,\n ),\n )\n } finally {\n TaskRunner.exitSyncTransactionShadow()\n }\n \n if (exit!._tag === 'Failure') {\n // Always clear the transaction context on failure to avoid leaking into subsequent entrypoints.\n StateTransaction.abort(txnContext)\n return yield* Effect.failCause(exit!.cause)\n }\n }), TaskRunner.inSyncTransactionFiber, true) as Effect.Effect<void, E2, never>)\n\n /**\n * setStateInternal:\n * - Inside an active transaction: only update the draft and record patches (whole-State granularity), without writing to the underlying Ref.\n * - Outside a transaction: keep legacy behavior, write to SubscriptionRef directly and emit a state:update Debug event.\n *\n * Notes:\n * - When path=\"*\" and field-level evidence is missing, the transaction attempts a best-effort commit-time inference\n * (diff baseState -> finalState) to produce field-level dirty evidence. If inference is not possible, it degrades to dirtyAll.\n * - Prefer `$.state.mutate(...)` / `Logix.Module.Reducer.mutate(...)` to produce exact field-level patchPaths.\n * - Perf harness can still force dirtyAll via `recordStatePatch('*', 'perf')` (explicit contract).\n */\n const setStateInternal: SetStateInternal<S> = (\n next: S,\n path: StateTransaction.StatePatchPath,\n reason: StateTransaction.PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\n if (inTxn && txnContext.current) {\n const current: any = txnContext.current\n\n StateTransaction.updateDraft(txnContext, next)\n // Soft dirtyAll hint for `runtime.setState(...)` inside an active transaction:\n // - `setState` is a whole-state write and does not carry field-level dirty evidence by itself.\n // - Advanced callers (perf harness / internal integrators) may provide precise dirty evidence via\n // `InternalContracts.recordStatePatch(...)` after `setState`.\n // - We must not permanently degrade the txn to dirtyAll before that evidence arrives.\n if (path === '*' && reason === 'unknown') {\n current[DIRTY_ALL_SET_STATE_HINT] = true\n current.inferReplaceEvidence = true\n return\n }\n\n recordStatePatch(path, reason, from, to, traitNodeId, stepId)\n\n if (path === '*') {\n current[DIRTY_ALL_SET_STATE_HINT] = true\n }\n return\n }\n\n // Writes from non-transaction fibers must be queued to avoid bypassing txnQueue with concurrent updates.\n yield* enqueueTransaction(\n runOperation(\n 'state',\n 'state:update',\n {\n payload: next,\n meta: { moduleId, instanceId },\n },\n runWithStateTransaction(\n {\n kind: 'state',\n name: 'setState',\n },\n () =>\n Effect.sync(() => {\n // baseState is injected by runWithStateTransaction at txn start; we only need to update the draft here.\n StateTransaction.updateDraft(txnContext, next)\n recordStatePatch(path, reason, from, to, traitNodeId, stepId)\n }),\n ),\n ),\n )\n })\n\n const getExecVmAssemblyEvidence = (): unknown => {\n const digest = traitRuntime.getConvergeStaticIrDigest()\n if (!digest) return undefined\n return {\n convergeStaticIrDigest: digest,\n convergeGeneration: traitRuntime.getConvergeGeneration().generation,\n }\n }\n\n return {\n readState,\n setStateInternal,\n runWithStateTransaction,\n __logixGetExecVmAssemblyEvidence: getExecVmAssemblyEvidence,\n }\n}\n","import type { TraitConvergePlanCacheEvidence } from './model.js'\n\ninterface ConvergePlanCacheEntry {\n readonly hash: number\n readonly rootIds: Int32Array\n planStepIds: Int32Array\n prev?: ConvergePlanCacheEntry\n next?: ConvergePlanCacheEntry\n}\n\nconst rootIdsEquals = (a: Int32Array, b: Int32Array): boolean => {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n}\n\n/**\n * ConvergePlanCache:\n * - Per-module-instance ExecutionPlan cache (LRU + bounded capacity + stats).\n * - Triggers self-protection under low hit-rate: disable reuse and clear the cache to avoid long-term negative optimization.\n */\nexport class ConvergePlanCache {\n readonly capacity: number\n private readonly buckets = new Map<number, Array<ConvergePlanCacheEntry>>()\n private head?: ConvergePlanCacheEntry\n private tail?: ConvergePlanCacheEntry\n private size_ = 0\n private hits_ = 0\n private misses_ = 0\n private evicts_ = 0\n\n private disabled_ = false\n private disableReason_: TraitConvergePlanCacheEvidence['disableReason'] | undefined\n\n constructor(capacity: number) {\n const next = Math.floor(capacity)\n this.capacity = next > 0 ? next : 0\n }\n\n isDisabled(): boolean {\n return this.disabled_\n }\n\n disable(reason: TraitConvergePlanCacheEvidence['disableReason']): void {\n if (this.disabled_) return\n this.disableInternal(reason)\n }\n\n get(hash: number, rootIds: Int32Array): Int32Array | undefined {\n if (this.capacity <= 0) return undefined\n if (this.disabled_) return undefined\n\n const bucket = this.buckets.get(hash)\n if (!bucket) {\n this.misses_ += 1\n return undefined\n }\n for (const entry of bucket) {\n if (!rootIdsEquals(entry.rootIds, rootIds)) continue\n this.hits_ += 1\n this.touch(entry)\n return entry.planStepIds\n }\n this.misses_ += 1\n return undefined\n }\n\n set(hash: number, rootIds: Int32Array, planStepIds: Int32Array): void {\n if (this.capacity <= 0) {\n return\n }\n if (this.disabled_) {\n return\n }\n\n const bucket = this.buckets.get(hash) ?? []\n for (const entry of bucket) {\n if (!rootIdsEquals(entry.rootIds, rootIds)) continue\n entry.planStepIds = planStepIds\n this.touch(entry)\n if (!this.buckets.has(hash)) this.buckets.set(hash, bucket)\n return\n }\n\n const entry: ConvergePlanCacheEntry = {\n hash,\n rootIds,\n planStepIds,\n }\n bucket.push(entry)\n this.buckets.set(hash, bucket)\n this.attachFront(entry)\n this.size_ += 1\n\n while (this.size_ > this.capacity) {\n this.evictOne()\n }\n\n this.maybeTriggerLowHitRateProtection()\n }\n\n evidence(options: {\n readonly hit: boolean\n readonly keySize?: number\n readonly missReason?: TraitConvergePlanCacheEvidence['missReason']\n }): TraitConvergePlanCacheEvidence {\n return {\n capacity: this.capacity,\n size: this.size_,\n hits: this.hits_,\n misses: this.misses_,\n evicts: this.evicts_,\n hit: options.hit,\n ...(typeof options.keySize === 'number' ? { keySize: options.keySize } : null),\n ...(options.hit ? null : options.missReason ? { missReason: options.missReason } : null),\n ...(this.disabled_\n ? {\n disabled: true,\n disableReason: this.disableReason_ ?? 'unknown',\n }\n : null),\n }\n }\n\n private maybeTriggerLowHitRateProtection(): void {\n if (this.disabled_) return\n if (this.capacity <= 0) return\n\n const total = this.hits_ + this.misses_\n // Only make a call after at least one eviction could have happened.\n if (total < Math.max(64, this.capacity + 1)) return\n\n const hitRate = total > 0 ? this.hits_ / total : 1\n if (hitRate > 0.01) return\n\n this.disable('low_hit_rate')\n }\n\n private disableInternal(reason: TraitConvergePlanCacheEvidence['disableReason']): void {\n this.disabled_ = true\n this.disableReason_ = reason\n this.clearEntries()\n }\n\n private clearEntries(): void {\n this.buckets.clear()\n this.head = undefined\n this.tail = undefined\n this.size_ = 0\n }\n\n private attachFront(entry: ConvergePlanCacheEntry): void {\n entry.prev = undefined\n entry.next = this.head\n if (this.head) {\n this.head.prev = entry\n } else {\n this.tail = entry\n }\n this.head = entry\n }\n\n private detach(entry: ConvergePlanCacheEntry): void {\n const prev = entry.prev\n const next = entry.next\n if (prev) {\n prev.next = next\n } else {\n this.head = next\n }\n if (next) {\n next.prev = prev\n } else {\n this.tail = prev\n }\n entry.prev = undefined\n entry.next = undefined\n }\n\n private touch(entry: ConvergePlanCacheEntry): void {\n if (this.head === entry) return\n this.detach(entry)\n this.attachFront(entry)\n }\n\n private evictOne(): void {\n const entry = this.tail\n if (!entry) return\n\n this.detach(entry)\n const bucket = this.buckets.get(entry.hash)\n if (bucket) {\n const idx = bucket.indexOf(entry)\n if (idx >= 0) bucket.splice(idx, 1)\n if (bucket.length === 0) this.buckets.delete(entry.hash)\n }\n this.size_ = Math.max(0, this.size_ - 1)\n this.evicts_ += 1\n }\n}\n","import type { PatchReason } from '../runtime/core/StateTransaction.js'\nimport type {\n DowngradeReason as ErrorDowngradeReason,\n SerializableErrorSummary,\n} from '../runtime/core/errorSummary.js'\nimport type { DirtyAllReason, FieldPath, FieldPathId } from '../field-path.js'\nimport type {\n TraitConvergeConfigScope,\n TraitConvergeDecisionSummary,\n TraitConvergeGenerationEvidence,\n TraitConvergePlanCacheEvidence,\n TraitConvergeReason,\n TraitConvergeRequestedMode,\n} from './model.js'\nimport type { ConvergePlanCache } from './plan-cache.js'\n\nexport class StateTraitConfigError extends Error {\n readonly _tag = 'StateTraitConfigError'\n\n constructor(\n readonly code: 'CYCLE_DETECTED' | 'MULTIPLE_WRITERS',\n message: string,\n readonly fields: ReadonlyArray<string> = [],\n ) {\n super(message)\n this.name = 'StateTraitConfigError'\n }\n}\n\nexport type ConvergeDegradeReason = 'budget_exceeded' | 'runtime_error'\n\nexport type ConvergeMode = 'full' | 'dirty'\n\nexport interface ConvergeStepSummary {\n readonly stepId: string\n readonly kind: 'computed' | 'link'\n readonly fieldPath: string\n readonly durationMs: number\n readonly changed: boolean\n}\n\nexport interface ConvergeSummary {\n readonly mode: ConvergeMode\n readonly budgetMs: number\n readonly totalDurationMs: number\n readonly totalSteps: number\n readonly executedSteps: number\n readonly skippedSteps: number\n readonly changedSteps: number\n readonly top3: ReadonlyArray<ConvergeStepSummary>\n}\n\nexport type ConvergeOutcome =\n | {\n readonly _tag: 'Converged'\n readonly patchCount: number\n readonly summary?: ConvergeSummary\n readonly decision?: TraitConvergeDecisionSummary\n }\n | {\n readonly _tag: 'Noop'\n readonly summary?: ConvergeSummary\n readonly decision?: TraitConvergeDecisionSummary\n }\n | {\n readonly _tag: 'Degraded'\n readonly reason: ConvergeDegradeReason\n readonly errorSummary?: SerializableErrorSummary\n readonly errorDowngrade?: ErrorDowngradeReason\n readonly summary?: ConvergeSummary\n readonly decision?: TraitConvergeDecisionSummary\n }\n\nexport interface ConvergeContext<S> {\n readonly moduleId?: string\n readonly instanceId: string\n readonly txnSeq?: number\n readonly txnId?: string\n readonly configScope?: TraitConvergeConfigScope\n readonly generation?: TraitConvergeGenerationEvidence\n readonly cacheMissReasonHint?: TraitConvergePlanCacheEvidence['missReason']\n /**\n * How many times cacheMissReasonHint has been updated since the last txn window.\n * Used to detect \"generation thrash\" (multiple bumps before any txn executes).\n */\n readonly cacheMissReasonHintCount?: number\n readonly now: () => number\n readonly budgetMs: number\n readonly decisionBudgetMs?: number\n readonly requestedMode?: TraitConvergeRequestedMode\n /**\n * 043: select the execution scope for this converge (default: all).\n * - all: keep legacy behavior\n * - immediate: run only computed/link with scheduling=immediate\n * - deferred: run only computed/link with scheduling=deferred\n */\n readonly schedulingScope?: 'all' | 'immediate' | 'deferred'\n /**\n * 060: explicitly specify stepIds for this converge (used to slice the deferred scope).\n *\n * - If not provided, select the corresponding topoOrder by schedulingScope.\n * - If provided, it must be monotonic increasing in topo order (caller guarantees).\n */\n readonly schedulingScopeStepIds?: Int32Array\n /**\n * dirtyAllReason: when a non-trackable/non-mappable write happens within the transaction window,\n * it must explicitly degrade to dirtyAll and provide a stable reason code (for diagnostics & gating).\n */\n readonly dirtyAllReason?: DirtyAllReason\n /**\n * dirtyPathsKeyHash / dirtyPathsKeySize:\n * - Optional incremental key for dirtyPaths when it is a Set of FieldPathIds.\n * - Used by ultra-hot converge paths (inline_dirty micro-cache) to avoid scanning the Set on cache hits.\n * - Hash must match FNV-1a (32-bit) over unique ids in Set insertion order.\n */\n readonly dirtyPathsKeyHash?: number\n readonly dirtyPathsKeySize?: number\n readonly dirtyPaths?: ReadonlySet<string | FieldPath | FieldPathId> | ReadonlyArray<string | FieldPath | FieldPathId>\n readonly allowInPlaceDraft?: boolean\n readonly planCache?: ConvergePlanCache\n readonly getDraft: () => S\n readonly setDraft: (next: S) => void\n readonly recordPatch: (\n path: string | FieldPath | FieldPathId | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n}\n","import { Effect } from 'effect'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport {\n toSerializableErrorSummary,\n} from '../runtime/core/errorSummary.js'\nimport { dirtyPathsToRootIds, type DirtyAllReason, type FieldPath } from '../field-path.js'\nimport { getConvergeStaticIrDigest } from './converge-ir.js'\nimport { CowDraft, ShallowInPlaceDraft } from './converge-draft.js'\nimport { emitSchemaMismatch } from './converge-diagnostics.js'\nimport { currentExecVmMode } from './exec-vm-mode.js'\nimport { makeConvergeExecIr, type ConvergeExecIr } from './converge-exec-ir.js'\nimport { getMiddlewareStack, runWriterStep, runWriterStepOffFast } from './converge-step.js'\nimport {\n StateTraitConfigError,\n type ConvergeContext,\n type ConvergeOutcome,\n type ConvergeStepSummary,\n type ConvergeSummary,\n type ConvergeMode,\n} from './converge.types.js'\nimport type {\n StateTraitEntry,\n StateTraitProgram,\n TraitConvergeConfigScope,\n TraitConvergeDecisionSummary,\n TraitConvergeDiagnosticsSamplingSummary,\n TraitConvergeDirtySummary,\n TraitConvergeGenerationEvidence,\n TraitConvergeHotspot,\n TraitConvergeOutcome as TraitConvergeOutcomeTag,\n TraitConvergePlanCacheEvidence,\n TraitConvergeReason,\n TraitConvergeRequestedMode,\n TraitConvergeStaticIrEvidence,\n TraitConvergeStepStats,\n} from './model.js'\n\nconst EMPTY_INT32 = new Int32Array(0)\n\n// Inline dirty plan computation for off-fast-path:\n// - Must remain allocation-free in steady-state (no objects/closures per invocation).\n// - Writes plan ids into execIr.scratch.planStepIds[0..planLen).\n// - Returns:\n// -1 = invalid/unknown dirty path ids (fallback)\n// -2 = near-full (run full instead)\n// >=0 = plan length\nconst computeInlineDirtyPlanLenFromDirtyPathIdsSet = (\n execIr: ConvergeExecIr,\n dirtyPathIds: ReadonlySet<unknown>,\n scopeStepIds: Int32Array,\n scopeStepCount: number,\n schedulingScope: 'all' | 'immediate' | 'deferred',\n nearFullPlanRatioThreshold: number,\n): number => {\n const prefixFieldPathIdsByPathId = execIr.prefixFieldPathIdsByPathId\n const prefixOffsetsByPathId = execIr.prefixOffsetsByPathId\n const triggerStepIdsByFieldPathId = execIr.triggerStepIdsByFieldPathId\n const triggerStepOffsetsByFieldPathId = execIr.triggerStepOffsetsByFieldPathId\n const stepOutFieldPathIdByStepId = execIr.stepOutFieldPathIdByStepId\n const stepSchedulingByStepId = execIr.stepSchedulingByStepId\n\n const dirtyPrefixBitSet = execIr.scratch.dirtyPrefixBitSet\n const reachableStepBitSet = execIr.scratch.reachableStepBitSet\n const dirtyPrefixQueue = execIr.scratch.dirtyPrefixQueue\n const planScratch = execIr.scratch.planStepIds\n\n dirtyPrefixBitSet.clear()\n reachableStepBitSet.clear()\n\n const fieldPathCount = execIr.fieldPathsById.length\n\n let queueLen = 0\n for (const raw of dirtyPathIds) {\n if (typeof raw !== 'number' || !Number.isFinite(raw)) {\n return -1\n }\n const id = Math.floor(raw)\n if (id < 0 || id >= fieldPathCount) {\n return -1\n }\n\n const start = prefixOffsetsByPathId[id]\n const end = prefixOffsetsByPathId[id + 1]\n if (start == null || end == null) continue\n\n for (let i = start; i < end; i++) {\n const prefixId = prefixFieldPathIdsByPathId[i]!\n if (dirtyPrefixBitSet.has(prefixId)) continue\n dirtyPrefixBitSet.add(prefixId)\n dirtyPrefixQueue[queueLen] = prefixId\n queueLen += 1\n }\n }\n\n const nearFullThreshold = Math.ceil(scopeStepCount * nearFullPlanRatioThreshold)\n\n let cursor = 0\n let reachableCount = 0\n while (cursor < queueLen) {\n const prefixId = dirtyPrefixQueue[cursor]!\n cursor += 1\n\n const start = triggerStepOffsetsByFieldPathId[prefixId]\n const end = triggerStepOffsetsByFieldPathId[prefixId + 1]\n if (start == null || end == null) continue\n\n for (let i = start; i < end; i++) {\n const stepId = triggerStepIdsByFieldPathId[i]!\n if (schedulingScope !== 'all') {\n const flag = stepSchedulingByStepId[stepId]\n if (schedulingScope === 'immediate') {\n if (flag !== 0) continue\n } else {\n if (flag !== 1) continue\n }\n }\n if (reachableStepBitSet.has(stepId)) continue\n reachableStepBitSet.add(stepId)\n reachableCount += 1\n\n // If we're going to run almost everything anyway, bail out early and just run full.\n if (reachableCount >= nearFullThreshold) {\n return -2\n }\n\n const outId = stepOutFieldPathIdByStepId[stepId]!\n const start2 = prefixOffsetsByPathId[outId]\n const end2 = prefixOffsetsByPathId[outId + 1]\n if (start2 == null || end2 == null) continue\n\n for (let j = start2; j < end2; j++) {\n const prefixId2 = prefixFieldPathIdsByPathId[j]!\n if (dirtyPrefixBitSet.has(prefixId2)) continue\n dirtyPrefixBitSet.add(prefixId2)\n dirtyPrefixQueue[queueLen] = prefixId2\n queueLen += 1\n }\n }\n }\n\n let planLen = 0\n for (let i = 0; i < scopeStepIds.length; i++) {\n const stepId = scopeStepIds[i]!\n if (!reachableStepBitSet.has(stepId)) continue\n planScratch[planLen] = stepId\n planLen += 1\n }\n\n // NOTE: plan ids are written into execIr.scratch.planStepIds[0..planLen).\n // Safe because inline-dirty uses the plan only for the current converge pass.\n return planLen\n}\n\nconst pickTop3Steps = (steps: ReadonlyArray<ConvergeStepSummary>): ReadonlyArray<ConvergeStepSummary> => {\n let first: ConvergeStepSummary | undefined\n let second: ConvergeStepSummary | undefined\n let third: ConvergeStepSummary | undefined\n\n for (const step of steps) {\n const d = step.durationMs\n if (!first || d > first.durationMs) {\n third = second\n second = first\n first = step\n continue\n }\n if (!second || d > second.durationMs) {\n third = second\n second = step\n continue\n }\n if (!third || d > third.durationMs) {\n third = step\n }\n }\n\n if (!first) return []\n if (!second) return [first]\n if (!third) return [first, second]\n return [first, second, third]\n}\n\nconst normalizePositiveInt = (value: unknown): number | undefined => {\n if (typeof value !== 'number' || !Number.isFinite(value)) return undefined\n const n = Math.floor(value)\n return n > 0 ? n : undefined\n}\n\nconst insertTopKHotspot = (args: {\n readonly hotspots: Array<TraitConvergeHotspot>\n readonly next: TraitConvergeHotspot\n readonly topK: number\n}): void => {\n const { hotspots, next, topK } = args\n if (topK <= 0) return\n\n const idx = (() => {\n for (let i = 0; i < hotspots.length; i++) {\n if (next.durationMs > hotspots[i]!.durationMs) return i\n }\n return hotspots.length\n })()\n\n if (idx >= topK) return\n hotspots.splice(idx, 0, next)\n if (hotspots.length > topK) {\n hotspots.length = topK\n }\n}\n\n/**\n * convergeInTransaction:\n * - Execute one derived converge pass within an already-started StateTransaction context.\n * - Currently covers computed/link only (check/source will be added in later phases).\n */\nexport const convergeInTransaction = <S extends object>(\n program: StateTraitProgram<S>,\n ctx: ConvergeContext<S>,\n): Effect.Effect<ConvergeOutcome> =>\n Effect.gen(function* () {\n yield* emitSchemaMismatch(program, ctx)\n\n const decisionStartedAt = ctx.now()\n let decisionDurationMs: number | undefined\n let executionStartedAt = decisionStartedAt\n const base = ctx.getDraft()\n const requestedMode: TraitConvergeRequestedMode = ctx.requestedMode ?? 'auto'\n const reasons: Array<TraitConvergeReason> = []\n let mode: ConvergeMode = requestedMode === 'dirty' ? 'dirty' : requestedMode === 'full' ? 'full' : 'full'\n\n const ir = program.convergeIr\n if (!ir) {\n return { _tag: 'Noop' } as const\n }\n\n // 049: Exec IR must be tied to the generation lifecycle and should not be rebuilt on every txn window.\n let execIr = program.convergeExecIr\n if (!execIr || execIr.generation !== ir.generation) {\n // Carry over off-fast-path perf hints across generation bumps when step count is unchanged.\n // Motivation: avoid repeated warmup / misclassification after graph-change invalidation,\n // while still allowing the EWMA to adapt when the actual cost shifts.\n const prev = execIr\n const next = makeConvergeExecIr(ir)\n\n if (prev && prev.topoOrderInt32.length === next.topoOrderInt32.length) {\n next.perf.fullCommitEwmaOffMs = prev.perf.fullCommitEwmaOffMs\n next.perf.fullCommitSampleCountOff = prev.perf.fullCommitSampleCountOff\n next.perf.fullCommitLastTxnSeqOff = prev.perf.fullCommitLastTxnSeqOff\n // NOTE: do not carry over fullCommitMinOffMs; it never increases and can become stale across rebuilds.\n }\n\n execIr = next\n ;(program as any).convergeExecIr = execIr\n }\n\n if (ir.configError) {\n throw new StateTraitConfigError(ir.configError.code, ir.configError.message, ir.configError.fields)\n }\n\n const stepsInTopoOrder = (ir.stepsById ?? []) as ReadonlyArray<StateTraitEntry<any, string>>\n const totalSteps = stepsInTopoOrder.length\n\n if (totalSteps === 0) {\n return { _tag: 'Noop' } as const\n }\n\n const stack = yield* getMiddlewareStack()\n const diagnosticsLevel: Debug.DiagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n const debugSinks = yield* Effect.service(Debug.currentDebugSinks).pipe(Effect.orDie)\n // Decision / TraitSummary gate is based on \"will it be consumed\" (sinks), not diagnosticsLevel.\n // diagnosticsLevel only controls exportable/heavy details (trace payload, hotspots, static IR export, etc.).\n const shouldCollectDecision = debugSinks.length > 0 && !Debug.isErrorOnlyOnlySinks(debugSinks)\n const shouldCollectDecisionDetails = shouldCollectDecision && diagnosticsLevel !== 'off'\n const shouldCollectDecisionHeavyDetails = shouldCollectDecision && diagnosticsLevel !== 'off'\n const execVmMode = yield* currentExecVmMode\n\n // 044: deterministic sampling for sampled mode (uses txnSeq as a stable anchor by default).\n let diagnosticsSampling: TraitConvergeDiagnosticsSamplingSummary | undefined\n if (diagnosticsLevel === 'sampled') {\n const cfg = yield* Effect.service(Debug.currentTraitConvergeDiagnosticsSampling).pipe(Effect.orDie)\n const sampleEveryN = normalizePositiveInt(cfg.sampleEveryN) ?? 32\n const topK = normalizePositiveInt(cfg.topK) ?? 3\n const txnSeq = ctx.txnSeq\n const sampled =\n typeof txnSeq === 'number' && Number.isFinite(txnSeq) && txnSeq > 0\n ? (Math.floor(txnSeq) - 1) % sampleEveryN === 0\n : false\n diagnosticsSampling = {\n strategy: 'txnSeq_interval',\n sampleEveryN,\n topK,\n sampled,\n }\n }\n\n const shouldTimeStepsForHotspots =\n shouldCollectDecision && (diagnosticsLevel === 'full' || diagnosticsSampling?.sampled === true)\n const hotspotsTopK = diagnosticsLevel === 'full' ? 3 : (diagnosticsSampling?.topK ?? 3)\n const hotspots: Array<TraitConvergeHotspot> | undefined = shouldTimeStepsForHotspots ? [] : undefined\n const schedulingScope = ctx.schedulingScope ?? 'all'\n const scopeStepIds =\n ctx.schedulingScopeStepIds ??\n (schedulingScope === 'immediate'\n ? execIr.topoOrderImmediateInt32\n : schedulingScope === 'deferred'\n ? execIr.topoOrderDeferredInt32\n : execIr.topoOrderInt32)\n const scopeStepCount = scopeStepIds.length\n const immediateStepCount = execIr.topoOrderImmediateInt32.length\n const deferredStepCount = execIr.topoOrderDeferredInt32.length\n const timeSlicingSummary =\n deferredStepCount > 0\n ? {\n scope: schedulingScope,\n immediateStepCount,\n deferredStepCount,\n }\n : undefined\n\n if (deferredStepCount > 0) {\n if (schedulingScope === 'immediate' && !reasons.includes('time_slicing_immediate')) {\n reasons.push('time_slicing_immediate')\n } else if (schedulingScope === 'deferred' && !reasons.includes('time_slicing_deferred')) {\n reasons.push('time_slicing_deferred')\n }\n }\n\n const emitTraitConvergeTraceEvent = (decision: TraitConvergeDecisionSummary): Effect.Effect<void> =>\n !shouldCollectDecision\n ? Effect.void\n : Debug.record({\n type: 'trace:trait:converge',\n moduleId: ctx.moduleId,\n instanceId: ctx.instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n data: decision as any,\n })\n\n const registry = ir.fieldPathIdRegistry\n const dirtyPaths = ctx.dirtyPaths == null ? [] : Array.isArray(ctx.dirtyPaths) ? ctx.dirtyPaths : ctx.dirtyPaths\n const dirtyPathCountHint = Array.isArray(dirtyPaths)\n ? dirtyPaths.length\n : typeof (dirtyPaths as any)?.size === 'number'\n ? ((dirtyPaths as any).size as number)\n : undefined\n\n type DirtyRootIds = {\n readonly dirtyAll: boolean\n readonly reason?: DirtyAllReason\n readonly rootIds: Int32Array\n readonly rootCount: number\n readonly keySize: number\n readonly keyHash: number\n }\n\n const makeDirtyAll = (reason: DirtyAllReason): DirtyRootIds => ({\n dirtyAll: true,\n reason,\n rootIds: EMPTY_INT32,\n rootCount: 0,\n keySize: 0,\n keyHash: 0,\n })\n\n const hashFieldPathIdsInt32 = (ids: Int32Array): number => {\n // FNV-1a (32-bit)\n let hash = 2166136261 >>> 0\n for (let i = 0; i < ids.length; i++) {\n hash ^= ids[i]! >>> 0\n hash = Math.imul(hash, 16777619)\n }\n return hash >>> 0\n }\n\n let dirtyRootIds: DirtyRootIds | undefined\n\n const DIRTY_ROOT_IDS_TOP_K = 3\n const AUTO_FLOOR_RATIO = 1.05\n const AUTO_FAST_FULL_EWMA_THRESHOLD_MS = 0.6\n const AUTO_FAST_FULL_WARMUP_FULL_SAMPLES_OFF = 2\n const AUTO_TINY_GRAPH_FULL_STEP_THRESHOLD = 2\n const MAX_CACHEABLE_ROOT_IDS = 128\n const MAX_CACHEABLE_ROOT_RATIO = 0.5\n const NO_CACHE_NEAR_FULL_STEP_THRESHOLD = 512\n\n const configScope: TraitConvergeConfigScope = ctx.configScope ?? 'builtin'\n const generationEvidence: TraitConvergeGenerationEvidence = ctx.generation ?? {\n generation: ir.generation,\n }\n const generation = generationEvidence.generation\n const staticIrDigest = !shouldCollectDecisionHeavyDetails ? '' : getConvergeStaticIrDigest(ir)\n const decisionBudgetMs = requestedMode === 'auto' ? ctx.decisionBudgetMs : undefined\n const cacheMissReasonHint = ctx.cacheMissReasonHint\n\n if (cacheMissReasonHint === 'generation_bumped' && !reasons.includes('generation_bumped')) {\n reasons.push('generation_bumped')\n }\n\n const isDecisionBudgetExceeded = (): boolean =>\n typeof decisionBudgetMs === 'number' &&\n Number.isFinite(decisionBudgetMs) &&\n decisionBudgetMs > 0 &&\n ctx.now() - decisionStartedAt > decisionBudgetMs\n\n const markDecisionBudgetCutoff = (): void => {\n if (!reasons.includes('budget_cutoff')) reasons.push('budget_cutoff')\n }\n\n const prefixFieldPathIdsByPathId = execIr.prefixFieldPathIdsByPathId\n const prefixOffsetsByPathId = execIr.prefixOffsetsByPathId\n const topoOrderInt32 = execIr.topoOrderInt32\n const topoIndexByStepId = execIr.topoIndexByStepId\n\n const dirtyPrefixBitSet = execIr.scratch.dirtyPrefixBitSet\n const reachableStepBitSet = execIr.scratch.reachableStepBitSet\n const dirtyPrefixQueue = execIr.scratch.dirtyPrefixQueue\n const dirtyRootIdsScratch = execIr.scratch.dirtyRootIds\n const planScratch = execIr.scratch.planStepIds\n const triggerStepIdsByFieldPathId = execIr.triggerStepIdsByFieldPathId\n const triggerStepOffsetsByFieldPathId = execIr.triggerStepOffsetsByFieldPathId\n\n const addPathPrefixes = (pathId: number): void => {\n const start = prefixOffsetsByPathId[pathId]\n const end = prefixOffsetsByPathId[pathId + 1]\n if (start == null || end == null) return\n for (let i = start; i < end; i++) {\n dirtyPrefixBitSet.add(prefixFieldPathIdsByPathId[i]!)\n }\n }\n\n const hasAnyDirtyPrefix = (pathId: number): boolean => {\n const start = prefixOffsetsByPathId[pathId]\n const end = prefixOffsetsByPathId[pathId + 1]\n if (start == null || end == null) return false\n for (let i = start; i < end; i++) {\n if (dirtyPrefixBitSet.has(prefixFieldPathIdsByPathId[i]!)) return true\n }\n return false\n }\n\n const shouldRunStepById = (stepId: number): boolean => {\n const outId = execIr.stepOutFieldPathIdByStepId[stepId]\n if (typeof outId === 'number' && hasAnyDirtyPrefix(outId)) {\n return true\n }\n const depsStart = execIr.stepDepsOffsetsByStepId[stepId]\n const depsEnd = execIr.stepDepsOffsetsByStepId[stepId + 1]\n if (depsStart == null || depsEnd == null) return false\n for (let i = depsStart; i < depsEnd; i++) {\n if (hasAnyDirtyPrefix(execIr.stepDepsFieldPathIds[i]!)) return true\n }\n return false\n }\n\n const computePlanStepIds = (\n rootIds: Int32Array,\n options?: { readonly stopOnDecisionBudget?: boolean },\n ): { readonly plan?: Int32Array; readonly budgetCutoff?: true } => {\n // Small graphs and custom step slices are cheap to scan; keep the simpler logic.\n if (totalSteps < 32 || ctx.schedulingScopeStepIds != null) {\n dirtyPrefixBitSet.clear()\n for (let i = 0; i < rootIds.length; i++) {\n addPathPrefixes(rootIds[i]!)\n }\n\n let planLen = 0\n let checks = 0\n for (let i = 0; i < scopeStepIds.length; i++) {\n const stepId = scopeStepIds[i]!\n if (options?.stopOnDecisionBudget) {\n checks += 1\n if (checks >= 32) {\n checks = 0\n if (isDecisionBudgetExceeded()) {\n dirtyPrefixBitSet.clear()\n return { budgetCutoff: true } as const\n }\n }\n }\n\n if (!shouldRunStepById(stepId)) {\n continue\n }\n\n planScratch[planLen] = stepId\n planLen += 1\n addPathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n\n const plan = execVmMode ? planScratch.subarray(0, planLen) : new Int32Array(planLen)\n if (!execVmMode && planLen > 0) {\n plan.set(planScratch.subarray(0, planLen))\n }\n dirtyPrefixBitSet.clear()\n return { plan } as const\n }\n\n // 059: Typed reachability (prefixId -> stepIds) + queue + bitset.\n dirtyPrefixBitSet.clear()\n reachableStepBitSet.clear()\n\n let queueLen = 0\n const enqueuePathPrefixes = (pathId: number): void => {\n const start = prefixOffsetsByPathId[pathId]\n const end = prefixOffsetsByPathId[pathId + 1]\n if (start == null || end == null) return\n for (let i = start; i < end; i++) {\n const prefixId = prefixFieldPathIdsByPathId[i]!\n if (dirtyPrefixBitSet.has(prefixId)) continue\n dirtyPrefixBitSet.add(prefixId)\n dirtyPrefixQueue[queueLen] = prefixId\n queueLen += 1\n }\n }\n\n for (let i = 0; i < rootIds.length; i++) {\n enqueuePathPrefixes(rootIds[i]!)\n }\n\n const isStepInScope = (stepId: number): boolean => {\n if (schedulingScope === 'all') return true\n const flag = execIr.stepSchedulingByStepId[stepId]\n return schedulingScope === 'immediate' ? flag === 0 : flag === 1\n }\n\n let cursor = 0\n let checks = 0\n while (cursor < queueLen) {\n if (options?.stopOnDecisionBudget) {\n checks += 1\n if (checks >= 32) {\n checks = 0\n if (isDecisionBudgetExceeded()) {\n dirtyPrefixBitSet.clear()\n return { budgetCutoff: true } as const\n }\n }\n }\n\n const prefixId = dirtyPrefixQueue[cursor]!\n cursor += 1\n\n const start = triggerStepOffsetsByFieldPathId[prefixId]\n const end = triggerStepOffsetsByFieldPathId[prefixId + 1]\n if (start == null || end == null) continue\n for (let i = start; i < end; i++) {\n const stepId = triggerStepIdsByFieldPathId[i]!\n if (!isStepInScope(stepId)) continue\n if (reachableStepBitSet.has(stepId)) continue\n reachableStepBitSet.add(stepId)\n enqueuePathPrefixes(execIr.stepOutFieldPathIdByStepId[stepId]!)\n }\n }\n\n // Materialize plan in topo order by scanning the scope slice.\n // This avoids TypedArray.sort() tail latency on some platforms.\n let planLen = 0\n for (let i = 0; i < scopeStepIds.length; i++) {\n const stepId = scopeStepIds[i]!\n if (!reachableStepBitSet.has(stepId)) continue\n planScratch[planLen] = stepId\n planLen += 1\n }\n\n const plan = execVmMode ? planScratch.subarray(0, planLen) : new Int32Array(planLen)\n if (!execVmMode && planLen > 0) {\n for (let i = 0; i < planLen; i++) {\n plan[i] = planScratch[i]!\n }\n }\n dirtyPrefixBitSet.clear()\n return { plan } as const\n }\n\n const cache = ctx.planCache\n const cacheMissReasonHintCount = ctx.cacheMissReasonHintCount ?? 0\n if (cacheMissReasonHint === 'generation_bumped' && cacheMissReasonHintCount >= 3 && cache && !cache.isDisabled()) {\n cache.disable('generation_thrash')\n }\n let canUseCache = false\n let planKeyHash = 0\n let rootIdsKey: Int32Array | undefined = undefined\n\n const ensureDirtyRootIds = (): DirtyRootIds => {\n if (dirtyRootIds) return dirtyRootIds\n\n if (ctx.dirtyAllReason) {\n dirtyRootIds = makeDirtyAll(ctx.dirtyAllReason)\n } else if (dirtyPaths instanceof Set) {\n dirtyPrefixBitSet.clear()\n\n let candidateLen = 0\n for (const raw of dirtyPaths as ReadonlySet<unknown>) {\n if (typeof raw !== 'number' || !Number.isFinite(raw)) {\n dirtyPrefixBitSet.clear()\n dirtyRootIds = makeDirtyAll('nonTrackablePatch')\n break\n }\n\n const id = Math.floor(raw)\n if (id < 0 || id >= execIr.fieldPathsById.length) {\n dirtyPrefixBitSet.clear()\n dirtyRootIds = makeDirtyAll('fallbackPolicy')\n break\n }\n\n dirtyPrefixBitSet.add(id)\n dirtyRootIdsScratch[candidateLen] = id\n candidateLen += 1\n }\n\n if (!dirtyRootIds) {\n if (candidateLen === 0) {\n dirtyPrefixBitSet.clear()\n dirtyRootIds = makeDirtyAll('unknownWrite')\n } else {\n let rootLen = 0\n for (let i = 0; i < candidateLen; i++) {\n const id = dirtyRootIdsScratch[i]!\n const start = prefixOffsetsByPathId[id]\n const end = prefixOffsetsByPathId[id + 1]\n if (start == null || end == null) continue\n\n // If any proper prefix is also directly dirty, skip this id.\n let coveredByDirtyPrefix = false\n for (let j = start; j < end - 1; j++) {\n const prefixId = prefixFieldPathIdsByPathId[j]!\n if (dirtyPrefixBitSet.has(prefixId)) {\n coveredByDirtyPrefix = true\n break\n }\n }\n if (coveredByDirtyPrefix) continue\n\n dirtyRootIdsScratch[rootLen] = id\n rootLen += 1\n }\n\n if (rootLen === 0) {\n dirtyPrefixBitSet.clear()\n dirtyRootIds = makeDirtyAll('unknownWrite')\n } else {\n const rootIds = dirtyRootIdsScratch.subarray(0, rootLen)\n rootIds.sort()\n const keyHash = hashFieldPathIdsInt32(rootIds)\n\n dirtyPrefixBitSet.clear()\n\n dirtyRootIds = {\n dirtyAll: false,\n rootIds,\n rootCount: rootIds.length,\n keySize: rootIds.length,\n keyHash,\n }\n }\n }\n }\n } else {\n const dirty = dirtyPathsToRootIds({\n dirtyPaths,\n registry,\n dirtyAllReason: ctx.dirtyAllReason,\n })\n\n dirtyRootIds = dirty.dirtyAll\n ? makeDirtyAll(dirty.reason ?? 'unknownWrite')\n : {\n dirtyAll: false,\n rootIds: Int32Array.from(dirty.rootIds),\n rootCount: dirty.rootCount,\n keySize: dirty.keySize,\n keyHash: dirty.keyHash,\n }\n }\n\n const rootRatioForCache =\n !dirtyRootIds.dirtyAll && scopeStepCount > 0 ? dirtyRootIds.rootCount / scopeStepCount : undefined\n const cacheableBySize =\n !dirtyRootIds.dirtyAll &&\n dirtyRootIds.rootIds.length > 0 &&\n dirtyRootIds.rootIds.length <= MAX_CACHEABLE_ROOT_IDS &&\n (rootRatioForCache == null || rootRatioForCache <= MAX_CACHEABLE_ROOT_RATIO)\n canUseCache =\n !!cache &&\n !cache.isDisabled() &&\n ctx.schedulingScopeStepIds == null &&\n cacheableBySize\n planKeyHash =\n dirtyRootIds.keyHash ^ (schedulingScope === 'all' ? 0 : schedulingScope === 'immediate' ? 1 : 2)\n rootIdsKey = canUseCache ? dirtyRootIds.rootIds : undefined\n return dirtyRootIds\n }\n\n let cacheEvidence: TraitConvergePlanCacheEvidence | undefined = shouldCollectDecisionHeavyDetails\n ? {\n capacity: 0,\n size: 0,\n hits: 0,\n misses: 0,\n evicts: 0,\n hit: false,\n }\n : undefined\n\n let affectedSteps: number | undefined\n let planStepIds: Int32Array | undefined\n let planStepCount: number | undefined\n\n const getOrComputePlan = (options?: {\n readonly missReason?: TraitConvergePlanCacheEvidence['missReason']\n readonly stopOnDecisionBudget?: boolean\n }): { readonly plan: Int32Array; readonly hit: boolean; readonly budgetCutoff?: true } => {\n const dirty = ensureDirtyRootIds()\n\t if (dirty.dirtyAll) {\n\t if (cacheEvidence && cache) {\n\t cacheEvidence = cache.evidence({\n\t hit: false,\n\t keySize: dirty.keySize,\n\t missReason: options?.missReason ?? 'unknown',\n\t })\n\t }\n\t const fullPlan = scopeStepIds\n\t affectedSteps = fullPlan.length\n\t return { plan: fullPlan, hit: false }\n\t }\n\n\t // When we cannot reuse a plan (cache disabled / non-cacheable), doing expensive plan computation in auto mode\n\t // tends to be a negative optimization in off-fast-path workloads.\n\t if (requestedMode === 'auto' && diagnosticsLevel === 'off' && stack.length === 0 && (!canUseCache || !cache)) {\n\t if (cacheEvidence && cache) {\n\t cacheEvidence = cache.evidence({\n\t hit: false,\n\t keySize: dirty.keySize,\n\t missReason: options?.missReason ?? 'unknown',\n\t })\n\t }\n\t const fullPlan = scopeStepIds\n\t affectedSteps = fullPlan.length\n\t return { plan: fullPlan, hit: false }\n\t }\n\n\t if (canUseCache && cache && rootIdsKey) {\n\t const cached = cache.get(planKeyHash, rootIdsKey)\n\t if (cached) {\n\t if (cacheEvidence) {\n\t cacheEvidence = cache.evidence({\n\t hit: true,\n\t keySize: dirty.keySize,\n\t })\n\t }\n\t affectedSteps = cached.length\n\t return { plan: cached, hit: true }\n\t }\n\n\t // 2-hit admission for plan computation:\n\t // - On cache miss, do NOT compute a plan until we observe the same key again.\n\t // - Prevents high-cardinality dirty patterns from turning auto into a negative optimization.\n\t if (requestedMode === 'auto' && diagnosticsLevel === 'off' && stack.length === 0) {\n\t const h = planKeyHash\n\t const seen1 = execIr.perf.recentPlanMissHash1\n\t const seen2 = execIr.perf.recentPlanMissHash2\n\t if (h !== seen1 && h !== seen2) {\n\t execIr.perf.recentPlanMissHash2 = seen1\n\t execIr.perf.recentPlanMissHash1 = h\n\n\t if (cacheEvidence) {\n\t cacheEvidence = cache.evidence({\n\t hit: false,\n\t keySize: dirty.keySize,\n\t missReason: options?.missReason ?? 'unknown',\n\t })\n\t }\n\n\t const fullPlan = scopeStepIds\n\t affectedSteps = fullPlan.length\n\t return { plan: fullPlan, hit: false }\n\t }\n\t }\n\t }\n\n // Decision budget is designed to cap worst-case plan computation cost.\n // For small graphs (<32 steps), the plan scan is bounded and the early cutoff\n // can introduce flakiness due to sub-ms clock jitter on some platforms.\n if (options?.stopOnDecisionBudget && totalSteps >= 32 && isDecisionBudgetExceeded()) {\n if (cacheEvidence && cache) {\n cacheEvidence = cache.evidence({\n hit: false,\n keySize: dirty.keySize,\n missReason: options?.missReason ?? 'unknown',\n })\n }\n const fullPlan = scopeStepIds\n affectedSteps = fullPlan.length\n if (canUseCache && cache && rootIdsKey) {\n cache.set(planKeyHash, rootIdsKey.slice(), fullPlan)\n }\n return { plan: fullPlan, hit: false, budgetCutoff: true } as const\n }\n\n const computed = computePlanStepIds(dirty.rootIds, {\n stopOnDecisionBudget: options?.stopOnDecisionBudget,\n })\n if (computed.budgetCutoff) {\n if (cacheEvidence && cache) {\n cacheEvidence = cache.evidence({\n hit: false,\n keySize: dirty.keySize,\n missReason: options?.missReason ?? 'unknown',\n })\n }\n const fullPlan = scopeStepIds\n affectedSteps = fullPlan.length\n if (canUseCache && cache && rootIdsKey) {\n cache.set(planKeyHash, rootIdsKey.slice(), fullPlan)\n }\n return { plan: fullPlan, hit: false, budgetCutoff: true } as const\n }\n\n const plan = computed.plan ?? new Int32Array(0)\n if (canUseCache && cache && rootIdsKey) {\n cache.set(planKeyHash, rootIdsKey.slice(), execVmMode ? plan.slice() : plan)\n }\n if (cacheEvidence && cache) {\n cacheEvidence = cache.evidence({\n hit: false,\n keySize: dirty.keySize,\n missReason: options?.missReason ?? 'not_cached',\n })\n }\n affectedSteps = plan.length\n return { plan, hit: false }\n }\n\n const getNearFullRootRatioThreshold = (stepCount: number): number => {\n // Heuristic:\n // - For large graphs, computing/reusing a precise dirty plan can be dominated by decision/cache overhead,\n // and can make auto slower than full under mixed dirty patterns (perf: converge-steps).\n // - Cut over to full earlier to keep auto<=full stable and avoid large retained plan-cache entries.\n if (stepCount >= 1536) return 0.65\n if (stepCount >= 1024) return 0.7\n if (stepCount >= 512) return 0.75\n return 0.9\n }\n const NEAR_FULL_PLAN_RATIO_THRESHOLD = 0.9\n const isOffFastPath = diagnosticsLevel === 'off' && stack.length === 0\n const fullCommitEwmaOffMs = execIr.perf.fullCommitEwmaOffMs\n const fullCommitMinOffMs = execIr.perf.fullCommitMinOffMs\n const fullCommitSampleCountOff = execIr.perf.fullCommitSampleCountOff ?? 0\n const nearFullRootRatioThreshold = getNearFullRootRatioThreshold(scopeStepCount)\n const rootRatioHint =\n typeof dirtyPathCountHint === 'number' && dirtyPathCountHint > 0\n ? scopeStepCount > 0\n ? dirtyPathCountHint / scopeStepCount\n : 1\n : undefined\n\n if (requestedMode === 'auto') {\n if (ctx.txnSeq === 1) {\n mode = 'full'\n reasons.push('cold_start')\n } else if (scopeStepCount <= AUTO_TINY_GRAPH_FULL_STEP_THRESHOLD) {\n mode = 'full'\n reasons.push('near_full')\n } else if (ctx.dirtyAllReason) {\n mode = 'full'\n reasons.push('dirty_all')\n reasons.push('unknown_write')\n } else if (dirtyPathCountHint === 0) {\n mode = 'full'\n reasons.push('unknown_write')\n } else if (rootRatioHint != null && rootRatioHint >= nearFullRootRatioThreshold) {\n mode = 'full'\n reasons.push('near_full')\n } else if (isOffFastPath) {\n // Off-fast-path is extremely sensitive to planning/caching overhead (sub-ms full converge).\n // Use a tiny (O(1)) inline admission strategy:\n // - If a dirty-pattern doesn't repeat, don't build a reachability plan; just run full.\n // - If it repeats, compute and (optionally) cache a small plan and run dirty.\n //\n // This keeps auto<=full stable under adversarial high-cardinality patterns.\n const scopeKey = schedulingScope === 'all' ? 0 : schedulingScope === 'immediate' ? 1 : 2\n const dirtyKeyHash = ctx.dirtyPathsKeyHash\n const dirtyKeySize = ctx.dirtyPathsKeySize\n const canUseInlineKey =\n dirtyPaths instanceof Set &&\n typeof dirtyKeyHash === 'number' &&\n Number.isFinite(dirtyKeyHash) &&\n typeof dirtyKeySize === 'number' &&\n Number.isFinite(dirtyKeySize) &&\n dirtyKeySize > 0 &&\n dirtyKeySize <= 64\n\n if (canUseInlineKey) {\n const inlineKeyHash = ((dirtyKeyHash ^ scopeKey) >>> 0) as number\n const scratch: any = execIr.scratch as any\n\n // Inline plan cache hit: reuse plan without any decision/plan build work.\n const h1 = scratch.inlinePlanCacheHash1 as number | undefined\n const s1 = scratch.inlinePlanCacheSize1 as number | undefined\n const b1 = scratch.inlinePlanCacheBuf1 as Int32Array | undefined\n const l1 = scratch.inlinePlanCachePlanLen1 as number | undefined\n if (inlineKeyHash === h1 && dirtyKeySize === s1 && b1 && typeof l1 === 'number' && l1 > 0) {\n mode = 'dirty'\n reasons.push('inline_dirty')\n reasons.push('cache_hit')\n planStepIds = b1\n planStepCount = l1\n affectedSteps = l1\n } else {\n const h2 = scratch.inlinePlanCacheHash2 as number | undefined\n const s2 = scratch.inlinePlanCacheSize2 as number | undefined\n const b2 = scratch.inlinePlanCacheBuf2 as Int32Array | undefined\n const l2 = scratch.inlinePlanCachePlanLen2 as number | undefined\n if (inlineKeyHash === h2 && dirtyKeySize === s2 && b2 && typeof l2 === 'number' && l2 > 0) {\n // Promote to MRU.\n scratch.inlinePlanCacheHash2 = h1\n scratch.inlinePlanCacheSize2 = s1\n scratch.inlinePlanCacheBuf2 = b1\n scratch.inlinePlanCachePlanLen2 = l1\n scratch.inlinePlanCacheHash1 = h2\n scratch.inlinePlanCacheSize1 = s2\n scratch.inlinePlanCacheBuf1 = b2\n scratch.inlinePlanCachePlanLen1 = l2\n\n mode = 'dirty'\n reasons.push('inline_dirty')\n reasons.push('cache_hit')\n planStepIds = b2\n planStepCount = l2\n affectedSteps = l2\n } else {\n // 2-hit admission for inline plan computation: build plan only after we see the same key again.\n const seen1 = scratch.inlinePlanCacheRecentMissHash1 as number | undefined\n const seen2 = scratch.inlinePlanCacheRecentMissHash2 as number | undefined\n\n if (inlineKeyHash !== seen1 && inlineKeyHash !== seen2) {\n scratch.inlinePlanCacheRecentMissHash2 = seen1\n scratch.inlinePlanCacheRecentMissHash1 = inlineKeyHash\n mode = 'full'\n reasons.push('low_hit_rate_protection')\n\n // If we keep seeing new keys with very few repeats, disable inline plan computation to avoid GC spikes.\n // (Cache hits still work; we only stop computing new plans.)\n if (scratch.inlinePlanCacheDisabled !== true) {\n const prevSkips = scratch.inlinePlanCacheSkipCount as number | undefined\n const nextSkips = (typeof prevSkips === 'number' && Number.isFinite(prevSkips) ? prevSkips : 0) + 1\n scratch.inlinePlanCacheSkipCount = nextSkips\n\n const prevComputes = scratch.inlinePlanCacheComputeCount as number | undefined\n const computes = typeof prevComputes === 'number' && Number.isFinite(prevComputes) ? prevComputes : 0\n if (nextSkips >= 32 && computes <= 2) {\n scratch.inlinePlanCacheDisabled = true\n }\n }\n } else {\n if (scratch.inlinePlanCacheDisabled === true) {\n mode = 'full'\n reasons.push('low_hit_rate_protection')\n } else {\n mode = 'dirty'\n reasons.push('inline_dirty')\n reasons.push('cache_miss')\n\n const prevComputes = scratch.inlinePlanCacheComputeCount as number | undefined\n const nextComputes =\n (typeof prevComputes === 'number' && Number.isFinite(prevComputes) ? prevComputes : 0) + 1\n scratch.inlinePlanCacheComputeCount = nextComputes\n }\n }\n }\n }\n } else {\n // Fallback: if full is already cheap, pick full; otherwise run dirty inline.\n //\n // NOTE: we deliberately warm up a couple of full samples under off-fast-path so the EWMA/min can\n // converge after cold-start/JIT effects. Those warmup samples are typically discarded by perf harness.\n const fastFullMsCandidate =\n typeof fullCommitMinOffMs === 'number' && Number.isFinite(fullCommitMinOffMs)\n ? fullCommitMinOffMs\n : typeof fullCommitEwmaOffMs === 'number' && Number.isFinite(fullCommitEwmaOffMs)\n ? fullCommitEwmaOffMs\n : undefined\n const shouldWarmupFull =\n fullCommitSampleCountOff < AUTO_FAST_FULL_WARMUP_FULL_SAMPLES_OFF && scopeStepCount <= 1024\n\n if (\n shouldWarmupFull ||\n (typeof fastFullMsCandidate === 'number' &&\n Number.isFinite(fastFullMsCandidate) &&\n fastFullMsCandidate <= AUTO_FAST_FULL_EWMA_THRESHOLD_MS)\n ) {\n mode = 'full'\n reasons.push('fast_full')\n } else {\n mode = 'dirty'\n reasons.push('inline_dirty')\n }\n }\n } else {\n const dirty = ensureDirtyRootIds()\n if (dirty.dirtyAll) {\n mode = 'full'\n reasons.push('dirty_all')\n reasons.push('unknown_write')\n } else if (dirty.rootIds.length === 0) {\n mode = 'full'\n reasons.push('unknown_write')\n } else {\n const dirtyRootRatio = scopeStepCount > 0 ? dirty.rootCount / scopeStepCount : 1\n if (dirtyRootRatio >= nearFullRootRatioThreshold) {\n mode = 'full'\n reasons.push('near_full')\n } else if (\n !canUseCache &&\n scopeStepCount >= NO_CACHE_NEAR_FULL_STEP_THRESHOLD &&\n dirtyRootRatio >= nearFullRootRatioThreshold / AUTO_FLOOR_RATIO\n ) {\n // No reusable cache path + near-full roots on large graphs tends to pay decision cost without step pruning wins.\n mode = 'full'\n reasons.push('near_full')\n } else {\n const { plan, hit, budgetCutoff } = getOrComputePlan({\n missReason: cacheMissReasonHint ?? 'not_cached',\n stopOnDecisionBudget: decisionBudgetMs != null,\n })\n if (budgetCutoff) {\n markDecisionBudgetCutoff()\n }\n planStepIds = plan\n reasons.push(hit ? 'cache_hit' : 'cache_miss')\n const ratio = scopeStepCount > 0 ? plan.length / scopeStepCount : 1\n if (ratio >= NEAR_FULL_PLAN_RATIO_THRESHOLD) {\n mode = 'full'\n reasons.push('near_full')\n } else {\n mode = 'dirty'\n }\n }\n }\n }\n } else {\n reasons.push('module_override')\n if (mode === 'dirty') {\n const dirty = ensureDirtyRootIds()\n const { plan, hit } = getOrComputePlan({ missReason: cacheMissReasonHint ?? 'not_cached' })\n planStepIds = plan\n if (dirty.dirtyAll) {\n reasons.push('dirty_all')\n } else if (cache && dirty.rootIds.length > 0) {\n reasons.push(hit ? 'cache_hit' : 'cache_miss')\n }\n }\n }\n\n if (\n cacheEvidence?.disabled &&\n cacheEvidence.disableReason === 'low_hit_rate' &&\n !reasons.includes('low_hit_rate_protection')\n ) {\n reasons.push('low_hit_rate_protection')\n }\n\n const getDirtySummary = (): TraitConvergeDirtySummary | undefined => {\n if (!shouldCollectDecisionDetails) return undefined\n\n // Diagnostics contract:\n // - light/full: exported evidence expects dirty.rootIds as canonical anchor; rootPaths is materialized only on consumer side.\n // - sampled: keep slim by default (DebugSink strips heavy fields, but we also avoid unnecessary root mapping here).\n const requiresRootIds = diagnosticsLevel === 'light' || diagnosticsLevel === 'full'\n\n if (ctx.dirtyAllReason != null) {\n return {\n dirtyAll: true,\n reason: ctx.dirtyAllReason,\n rootCount: 0,\n ...(requiresRootIds ? { rootIds: [], rootIdsTruncated: false } : null),\n }\n }\n\n if (typeof dirtyPathCountHint === 'number' && dirtyPathCountHint === 0) {\n return {\n dirtyAll: true,\n reason: 'unknownWrite',\n rootCount: 0,\n ...(requiresRootIds ? { rootIds: [], rootIdsTruncated: false } : null),\n }\n }\n\n const dirty =\n requiresRootIds && dirtyRootIds == null && (diagnosticsLevel === 'light' || diagnosticsLevel === 'full')\n ? ensureDirtyRootIds()\n : dirtyRootIds\n\n if (dirty?.dirtyAll) {\n return {\n dirtyAll: true,\n reason: dirty.reason ?? 'unknownWrite',\n rootCount: 0,\n ...(requiresRootIds ? { rootIds: [], rootIdsTruncated: false } : null),\n }\n }\n\n if (dirty) {\n return {\n dirtyAll: false,\n rootCount: dirty.rootCount,\n ...(requiresRootIds\n ? {\n rootIds: Array.from(dirty.rootIds.subarray(0, DIRTY_ROOT_IDS_TOP_K)),\n rootIdsTruncated: dirty.rootIds.length > DIRTY_ROOT_IDS_TOP_K,\n }\n : null),\n }\n }\n\n if (typeof dirtyPathCountHint === 'number') {\n return {\n dirtyAll: false,\n rootCount: dirtyPathCountHint,\n }\n }\n\n return {\n dirtyAll: true,\n reason: 'unknownWrite',\n rootCount: 0,\n ...(requiresRootIds ? { rootIds: [], rootIdsTruncated: false } : null),\n }\n }\n\n executionStartedAt = ctx.now()\n if (requestedMode === 'auto') {\n decisionDurationMs = Math.max(0, executionStartedAt - decisionStartedAt)\n }\n\n let changedCount = 0\n const shouldCollectNearFullSlimDecision =\n diagnosticsLevel === 'off' && requestedMode === 'auto' && mode === 'full' && reasons.length === 1 && reasons[0] === 'near_full'\n const shouldCollectDecisionSummary = shouldCollectDecision && !shouldCollectNearFullSlimDecision\n\n const buildStepStats = (executedSteps: number): TraitConvergeStepStats => ({\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n ...(typeof affectedSteps === 'number' ? { affectedSteps } : null),\n })\n\n const makeDecisionSummary = (params: {\n readonly outcome: TraitConvergeOutcomeTag\n readonly executedSteps: number\n readonly executionDurationMs: number\n }): TraitConvergeDecisionSummary => {\n const stepStats = buildStepStats(params.executedSteps)\n\n return {\n requestedMode,\n executedMode: mode,\n outcome: params.outcome,\n configScope,\n staticIrDigest,\n executionBudgetMs: ctx.budgetMs,\n executionDurationMs: params.executionDurationMs,\n decisionBudgetMs: requestedMode === 'auto' ? ctx.decisionBudgetMs : undefined,\n decisionDurationMs: requestedMode === 'auto' ? decisionDurationMs : undefined,\n reasons,\n stepStats,\n dirty: shouldCollectDecisionDetails ? getDirtySummary() : undefined,\n thresholds: shouldCollectDecisionHeavyDetails ? { floorRatio: AUTO_FLOOR_RATIO } : undefined,\n cache: shouldCollectDecisionHeavyDetails ? cacheEvidence : undefined,\n generation: shouldCollectDecisionHeavyDetails ? generationEvidence : undefined,\n staticIr: shouldCollectDecisionHeavyDetails\n ? {\n fieldPathCount: ir.fieldPaths.length,\n stepCount: totalSteps,\n buildDurationMs: ir.buildDurationMs,\n }\n : undefined,\n timeSlicing: shouldCollectDecisionHeavyDetails ? timeSlicingSummary : undefined,\n diagnosticsSampling: shouldCollectDecisionHeavyDetails ? diagnosticsSampling : undefined,\n top3:\n shouldCollectDecisionHeavyDetails && hotspots && hotspots.length > 0\n ? hotspots.slice()\n : undefined,\n } satisfies TraitConvergeDecisionSummary\n }\n\n const makeNearFullSlimDecisionSummary = (params: {\n readonly outcome: TraitConvergeOutcomeTag\n readonly executedSteps: number\n readonly executionDurationMs: number\n }): TraitConvergeDecisionSummary => ({\n requestedMode,\n executedMode: mode,\n outcome: params.outcome,\n configScope,\n staticIrDigest: '',\n executionBudgetMs: ctx.budgetMs,\n executionDurationMs: params.executionDurationMs,\n decisionBudgetMs: requestedMode === 'auto' ? ctx.decisionBudgetMs : undefined,\n decisionDurationMs: requestedMode === 'auto' ? decisionDurationMs : undefined,\n reasons,\n stepStats: buildStepStats(params.executedSteps),\n })\n\n const steps: Array<ConvergeStepSummary> | undefined = diagnosticsLevel === 'full' ? [] : undefined\n let executedSteps = 0\n const canUseInPlaceDraft = ctx.allowInPlaceDraft === true && execIr.allOutPathsShallow\n const draft = (() => {\n if (!canUseInPlaceDraft) {\n return new CowDraft(base)\n }\n const scratch: any = execIr.scratch as any\n const cached = scratch.shallowInPlaceDraft as ShallowInPlaceDraft<S> | undefined\n if (cached) {\n cached.reset(base)\n return cached\n }\n const next = new ShallowInPlaceDraft(base)\n scratch.shallowInPlaceDraft = next\n return next\n })()\n let budgetChecks = 0\n const rollbackDraft = (): void => {\n if (draft instanceof ShallowInPlaceDraft) {\n draft.rollback()\n }\n ctx.setDraft(base)\n }\n\n try {\n if (mode === 'dirty' && !planStepIds) {\n // Inline dirty: build an actual plan (reachability) without hashing/caching.\n // This keeps decisionDurationMs ~0 but avoids scanning every step with shouldRunStepById,\n // and it supports transitive dirty propagation (out -> deps closure).\n let ok = false\n if (dirtyPaths instanceof Set) {\n const dirtyPathIds = dirtyPaths as ReadonlySet<unknown>\n const dirtyCount =\n typeof ctx.dirtyPathsKeySize === 'number'\n ? ctx.dirtyPathsKeySize\n : ((dirtyPathIds as any).size as number | undefined)\n\n // Micro-cache for inline_dirty:\n // - Avoids repeated reachability plan builds for stable dirty patterns (e.g. alternatingTwoStable),\n // which can trigger p95 tail spikes due to JIT/GC timing in ultra-fast off-fast-path workloads.\n //\n // NOTE: This is deliberately tiny (2-entry) and has 2-hit admission to avoid thrashing on high-cardinality patterns.\n let inlineKeyHash: number | undefined\n if (typeof dirtyCount === 'number' && dirtyCount > 0 && dirtyCount <= 64) {\n const scopeKey = schedulingScope === 'all' ? 0 : schedulingScope === 'immediate' ? 1 : 2\n const preHash = ctx.dirtyPathsKeyHash\n\n if (typeof preHash === 'number') {\n inlineKeyHash = (preHash ^ scopeKey) >>> 0\n } else {\n let h = 2166136261 >>> 0\n let okKey = true\n for (const raw of dirtyPathIds) {\n if (typeof raw !== 'number' || !Number.isFinite(raw)) {\n okKey = false\n break\n }\n const id = Math.floor(raw)\n h ^= id >>> 0\n h = Math.imul(h, 16777619)\n }\n if (okKey) {\n inlineKeyHash = (h ^ scopeKey) >>> 0\n }\n }\n\n if (inlineKeyHash !== undefined) {\n const scratch: any = execIr.scratch as any\n const h1 = scratch.inlinePlanCacheHash1 as number | undefined\n const s1 = scratch.inlinePlanCacheSize1 as number | undefined\n const b1 = scratch.inlinePlanCacheBuf1 as Int32Array | undefined\n const l1 = scratch.inlinePlanCachePlanLen1 as number | undefined\n if (inlineKeyHash === h1 && dirtyCount === s1 && b1 && typeof l1 === 'number' && l1 > 0) {\n planStepIds = b1\n planStepCount = l1\n affectedSteps = l1\n ok = true\n } else {\n const h2 = scratch.inlinePlanCacheHash2 as number | undefined\n const s2 = scratch.inlinePlanCacheSize2 as number | undefined\n const b2 = scratch.inlinePlanCacheBuf2 as Int32Array | undefined\n const l2 = scratch.inlinePlanCachePlanLen2 as number | undefined\n if (inlineKeyHash === h2 && dirtyCount === s2 && b2 && typeof l2 === 'number' && l2 > 0) {\n // Promote to MRU.\n scratch.inlinePlanCacheHash2 = h1\n scratch.inlinePlanCacheSize2 = s1\n scratch.inlinePlanCacheBuf2 = b1\n scratch.inlinePlanCachePlanLen2 = l1\n scratch.inlinePlanCacheHash1 = h2\n scratch.inlinePlanCacheSize1 = s2\n scratch.inlinePlanCacheBuf1 = b2\n scratch.inlinePlanCachePlanLen1 = l2\n\n planStepIds = b2\n planStepCount = l2\n affectedSteps = l2\n ok = true\n }\n }\n }\n }\n\n if (!ok) {\n const planLen = computeInlineDirtyPlanLenFromDirtyPathIdsSet(\n execIr,\n dirtyPathIds,\n scopeStepIds,\n scopeStepCount,\n schedulingScope,\n NEAR_FULL_PLAN_RATIO_THRESHOLD,\n )\n if (planLen === -2) {\n mode = 'full'\n affectedSteps = scopeStepCount\n if (!reasons.includes('near_full')) reasons.push('near_full')\n ok = true\n } else if (planLen >= 0) {\n planStepCount = planLen\n affectedSteps = planLen\n ok = true\n\n // 2-hit admission: cache only if the same pattern repeats.\n if (\n inlineKeyHash !== undefined &&\n typeof dirtyCount === 'number' &&\n dirtyCount > 0 &&\n dirtyCount <= 64 &&\n planLen > 0 &&\n planLen <= 256\n ) {\n const scratch: any = execIr.scratch as any\n const seen1 = scratch.inlinePlanCacheRecentMissHash1 as number | undefined\n const seen2 = scratch.inlinePlanCacheRecentMissHash2 as number | undefined\n const admit = inlineKeyHash === seen1 || inlineKeyHash === seen2\n\n if (admit) {\n // Insert as MRU (shift existing entry1 to entry2) without allocating:\n // - Reuse a fixed 2-slot typed buffer to avoid GC spikes under adversarial patterns.\n const oldHash1 = scratch.inlinePlanCacheHash1 as number | undefined\n const oldSize1 = scratch.inlinePlanCacheSize1 as number | undefined\n const oldBuf1 = scratch.inlinePlanCacheBuf1 as Int32Array | undefined\n const oldLen1 = scratch.inlinePlanCachePlanLen1 as number | undefined\n\n const oldBuf2 = scratch.inlinePlanCacheBuf2 as Int32Array | undefined\n const buf = oldBuf2 ?? new Int32Array(256)\n\n for (let i = 0; i < planLen; i++) {\n buf[i] = planScratch[i]!\n }\n\n scratch.inlinePlanCacheHash2 = oldHash1\n scratch.inlinePlanCacheSize2 = oldSize1\n scratch.inlinePlanCacheBuf2 = oldBuf1\n scratch.inlinePlanCachePlanLen2 = oldLen1\n scratch.inlinePlanCacheHash1 = inlineKeyHash\n scratch.inlinePlanCacheSize1 = dirtyCount\n scratch.inlinePlanCacheBuf1 = buf\n scratch.inlinePlanCachePlanLen1 = planLen\n } else {\n scratch.inlinePlanCacheRecentMissHash2 = seen1\n scratch.inlinePlanCacheRecentMissHash1 = inlineKeyHash\n }\n }\n } else {\n // Fallback: cannot derive a reliable dirty plan from the Set.\n // Use the canonical dirty-root path (which may degrade to full) to preserve correctness.\n ok = false\n }\n }\n }\n\n if (!ok) {\n const dirty = ensureDirtyRootIds()\n if (dirty.dirtyAll) {\n mode = 'full'\n if (!reasons.includes('dirty_all')) reasons.push('dirty_all')\n if (!reasons.includes('unknown_write')) reasons.push('unknown_write')\n } else {\n const computed = computePlanStepIds(dirty.rootIds)\n const plan = computed.plan ?? new Int32Array(0)\n affectedSteps = plan.length\n const ratio = scopeStepCount > 0 ? plan.length / scopeStepCount : 1\n if (ratio >= NEAR_FULL_PLAN_RATIO_THRESHOLD) {\n mode = 'full'\n if (!reasons.includes('near_full')) reasons.push('near_full')\n } else {\n planStepIds = plan\n }\n }\n }\n }\n\n const stepIds =\n mode === 'dirty'\n ? planStepIds ?? (planStepCount != null ? planScratch : scopeStepIds)\n : scopeStepIds\n const stepCount =\n mode === 'dirty'\n ? planStepCount ?? (planStepIds ? planStepIds.length : scopeStepCount)\n : scopeStepCount\n\n for (let i = 0; i < stepCount; i++) {\n const stepId = stepIds[i]!\n const entry = stepsInTopoOrder[stepId]\n if (!entry) continue\n\n const fieldPath = entry.fieldPath\n\n if (steps) {\n if (ctx.now() - executionStartedAt > ctx.budgetMs) {\n // Budget exceeded: soft degrade, roll back to base (avoid partially-applied state).\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const top3 = pickTop3Steps(steps)\n const summary: ConvergeSummary = {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3,\n }\n if (!reasons.includes('budget_cutoff')) reasons.push('budget_cutoff')\n const decision = makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n if (decision && diagnosticsLevel !== 'off') {\n yield* emitTraitConvergeTraceEvent(decision)\n }\n return {\n _tag: 'Degraded',\n reason: 'budget_exceeded',\n summary,\n ...(decision ? { decision } : null),\n } as const\n }\n } else {\n budgetChecks += 1\n if (budgetChecks >= 32) {\n budgetChecks = 0\n if (ctx.now() - executionStartedAt > ctx.budgetMs) {\n // Budget exceeded: soft degrade, roll back to base (avoid partially-applied state).\n rollbackDraft()\n if (!reasons.includes('budget_cutoff')) reasons.push('budget_cutoff')\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'budget_exceeded',\n ...(decision ? { decision } : null),\n } as const\n }\n }\n }\n\n executedSteps += 1\n\n if (steps) {\n const stepStartedAt = ctx.now()\n const exit = yield* Effect.exit(\n runWriterStep(ctx, execIr, draft, stepId, entry, shouldCollectDecision, diagnosticsLevel, stack),\n )\n const stepEndedAt = ctx.now()\n const durationMs = Math.max(0, stepEndedAt - stepStartedAt)\n const stepKind = entry.kind === 'computed' ? 'computed' : 'link'\n const stepLabel = execIr.stepLabelByStepId[stepId] ?? String(stepId)\n const changed = exit._tag === 'Success' ? exit.value : false\n if (hotspots) {\n insertTopKHotspot({\n hotspots,\n topK: hotspotsTopK,\n next: {\n kind: stepKind,\n stepId,\n outFieldPathId: execIr.stepOutFieldPathIdByStepId[stepId],\n durationMs,\n changed,\n },\n })\n }\n steps.push({\n stepId: stepLabel,\n kind: stepKind,\n fieldPath,\n durationMs,\n changed,\n })\n if (exit._tag === 'Failure') {\n const error = toSerializableErrorSummary(exit.cause)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const top3 = pickTop3Steps(steps)\n const summary: ConvergeSummary = {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3,\n }\n const decision = makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n if (decision && diagnosticsLevel !== 'off') {\n yield* emitTraitConvergeTraceEvent(decision)\n }\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n summary,\n ...(decision ? { decision } : null),\n } as const\n }\n if (exit.value) {\n changedCount += 1\n }\n continue\n }\n\n if (hotspots) {\n const stepStartedAt = ctx.now()\n const exit = yield* Effect.exit(\n runWriterStep(ctx, execIr, draft, stepId, entry, shouldCollectDecision, diagnosticsLevel, stack),\n )\n const stepEndedAt = ctx.now()\n const durationMs = Math.max(0, stepEndedAt - stepStartedAt)\n const stepKind = entry.kind === 'computed' ? 'computed' : 'link'\n const changed = exit._tag === 'Success' ? exit.value : false\n insertTopKHotspot({\n hotspots,\n topK: hotspotsTopK,\n next: {\n kind: stepKind,\n stepId,\n outFieldPathId: execIr.stepOutFieldPathIdByStepId[stepId],\n durationMs,\n changed,\n },\n })\n\n if (exit._tag === 'Failure') {\n const error = toSerializableErrorSummary(exit.cause)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n if (decision && diagnosticsLevel !== 'off') {\n yield* emitTraitConvergeTraceEvent(decision)\n }\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(decision ? { decision } : null),\n } as const\n }\n\n if (changed) {\n changedCount += 1\n }\n\n continue\n }\n\n // Off-fast-path: enabled only when middleware is empty and diagnostics=off, to keep near-zero overhead in off mode.\n // If you need deps tracing / mismatch diagnostics, switch to light/full/sampled explicitly.\n if (diagnosticsLevel === 'off' && stack.length === 0) {\n try {\n if (runWriterStepOffFast(ctx, execIr, draft, stepId, entry)) {\n changedCount += 1\n }\n } catch (e) {\n const error = toSerializableErrorSummary(e)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(decision ? { decision } : null),\n } as const\n }\n continue\n }\n\n const exit = yield* Effect.exit(\n runWriterStep(ctx, execIr, draft, stepId, entry, shouldCollectDecision, diagnosticsLevel, stack),\n )\n if (exit._tag === 'Failure') {\n const error = toSerializableErrorSummary(exit.cause)\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(decision ? { decision } : null),\n } as const\n }\n if (exit.value) {\n changedCount += 1\n }\n }\n } catch (e) {\n // Config error: hard fail (let the outer transaction entrypoint block commit).\n if (e instanceof StateTraitConfigError) {\n throw e\n }\n const error = toSerializableErrorSummary(e)\n // Runtime error: soft degrade, roll back to base (avoid partially-applied state).\n rollbackDraft()\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const summary: ConvergeSummary | undefined = steps\n ? {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3: pickTop3Steps(steps),\n }\n : undefined\n const decision = shouldCollectDecision\n ? makeDecisionSummary({\n outcome: 'Degraded',\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n return {\n _tag: 'Degraded',\n reason: 'runtime_error',\n errorSummary: error.errorSummary,\n errorDowngrade: error.downgrade,\n ...(summary ? { summary } : null),\n ...(decision ? { decision } : null),\n } as const\n }\n\n if (draft instanceof ShallowInPlaceDraft) {\n // On success, keep the in-place writes but clear rollback bookkeeping (reuse scratch draft).\n draft.commit()\n }\n\n const totalDurationMs = Math.max(0, ctx.now() - executionStartedAt)\n const outcome: TraitConvergeOutcomeTag = changedCount > 0 ? 'Converged' : 'Noop'\n\n if (mode === 'dirty' && affectedSteps === undefined) {\n affectedSteps = executedSteps\n }\n\n if (mode === 'full' && diagnosticsLevel === 'off' && stack.length === 0) {\n // Skip cold-start samples: dominated by JIT/module init and poison the EWMA.\n if (ctx.txnSeq !== 1) {\n const perf = execIr.perf\n const prev = perf.fullCommitEwmaOffMs\n // Keep it O(1): a tiny EWMA is enough to decide if planning is worth trying at all.\n perf.fullCommitEwmaOffMs =\n typeof prev === 'number' && Number.isFinite(prev) ? prev * 0.8 + totalDurationMs * 0.2 : totalDurationMs\n const prevMin = perf.fullCommitMinOffMs\n perf.fullCommitMinOffMs =\n typeof prevMin === 'number' && Number.isFinite(prevMin) ? Math.min(prevMin, totalDurationMs) : totalDurationMs\n const prevCount = perf.fullCommitSampleCountOff ?? 0\n perf.fullCommitSampleCountOff = prevCount + 1\n if (typeof ctx.txnSeq === 'number' && Number.isFinite(ctx.txnSeq)) {\n perf.fullCommitLastTxnSeqOff = ctx.txnSeq\n }\n }\n }\n\n const decision = shouldCollectDecisionSummary\n ? makeDecisionSummary({\n outcome,\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : shouldCollectNearFullSlimDecision\n ? makeNearFullSlimDecisionSummary({\n outcome,\n executedSteps,\n executionDurationMs: totalDurationMs,\n })\n : undefined\n if (decision && diagnosticsLevel !== 'off') yield* emitTraitConvergeTraceEvent(decision)\n\n return changedCount > 0\n ? ({\n _tag: 'Converged',\n patchCount: changedCount,\n ...(steps\n ? {\n summary: {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3: pickTop3Steps(steps),\n } satisfies ConvergeSummary,\n }\n : null),\n ...(decision ? { decision } : null),\n } as const)\n : ({\n _tag: 'Noop',\n ...(steps\n ? {\n summary: {\n mode,\n budgetMs: ctx.budgetMs,\n totalDurationMs,\n totalSteps,\n executedSteps,\n skippedSteps: Math.max(0, totalSteps - executedSteps),\n changedSteps: changedCount,\n top3: pickTop3Steps(steps),\n } satisfies ConvergeSummary,\n }\n : null),\n ...(decision ? { decision } : null),\n } as const)\n })\n","import type { FieldPath } from '../field-path.js'\n\nconst getAtFieldPath = (state: any, path: FieldPath): any => {\n let current: any = state\n for (let i = 0; i < path.length; i++) {\n if (current == null) return undefined\n current = current[path[i]!]\n }\n return current\n}\n\nconst isObjectLike = (value: unknown): value is object => typeof value === 'object' && value !== null\n\nconst shallowCopy = (value: object): any => {\n if (Array.isArray(value)) {\n return value.slice()\n }\n const proto = Object.getPrototypeOf(value)\n const out = proto === null ? Object.create(null) : Object.create(proto)\n return Object.assign(out, value)\n}\n\nexport class CowDraft<S extends object> {\n private root: S\n private readonly owned = new WeakSet<object>()\n private readonly copies = new WeakMap<object, object>()\n\n constructor(base: S) {\n this.root = base\n }\n\n getRoot(): S {\n return this.root\n }\n\n getAt(path: FieldPath): unknown {\n return getAtFieldPath(this.root as any, path)\n }\n\n setAt(path: FieldPath, value: unknown, _prev?: unknown): void {\n if (path.length === 0) return\n this.root = this.ensureOwnedRoot()\n\n let current: any = this.root\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i]!\n const existing = current[key]\n\n if (!isObjectLike(existing)) {\n const created = {}\n this.owned.add(created)\n current[key] = created\n current = created\n continue\n }\n\n if (this.owned.has(existing)) {\n current = existing\n continue\n }\n\n const cached = this.copies.get(existing)\n const next = cached ?? shallowCopy(existing)\n if (!cached) {\n this.copies.set(existing, next)\n }\n this.owned.add(next)\n current[key] = next\n current = next\n }\n\n current[path[path.length - 1]!] = value\n }\n\n private ensureOwnedRoot(): S {\n const root = this.root as any as unknown\n if (!isObjectLike(root)) {\n return this.root\n }\n if (this.owned.has(root)) {\n return this.root\n }\n const cached = this.copies.get(root)\n const next = (cached ?? shallowCopy(root)) as S\n if (!cached) {\n this.copies.set(root, next as any)\n }\n this.owned.add(next as any)\n return next\n }\n}\n\nexport class ShallowInPlaceDraft<S extends object> {\n private root: S\n private readonly keys: Array<string> = []\n private readonly prev: Array<unknown> = []\n private readonly had: Array<boolean> = []\n\n constructor(base: S) {\n this.root = base\n }\n\n reset(base: S): void {\n this.root = base\n this.keys.length = 0\n this.prev.length = 0\n this.had.length = 0\n }\n\n getRoot(): S {\n return this.root\n }\n\n getAt(path: FieldPath): unknown {\n if (path.length === 1) {\n return (this.root as any)[path[0]!]\n }\n return getAtFieldPath(this.root as any, path)\n }\n\n setAt(path: FieldPath, value: unknown, _prev?: unknown): void {\n if (path.length !== 1) {\n throw new Error('[StateTrait.converge] ShallowInPlaceDraft only supports root-level writes')\n }\n const key = path[0]!\n const root: any = this.root\n const had = Object.prototype.hasOwnProperty.call(root, key)\n this.keys.push(key)\n this.had.push(had)\n this.prev.push(had ? root[key] : undefined)\n root[key] = value\n }\n\n commit(): void {\n this.keys.length = 0\n this.prev.length = 0\n this.had.length = 0\n }\n\n rollback(): void {\n const root: any = this.root\n for (let i = this.keys.length - 1; i >= 0; i--) {\n const key = this.keys[i]!\n if (this.had[i]!) {\n root[key] = this.prev[i]\n } else {\n delete root[key]\n }\n }\n this.keys.length = 0\n this.prev.length = 0\n this.had.length = 0\n }\n}\n","import { Effect, Layer, ServiceMap } from 'effect'\n\n/**\n * ExecVmMode:\n * - Allows kernel implementations (core-ng) to switch converge hot-path execution form without changing public semantics.\n * - Currently mainly affects typed-array reuse strategy in converge plan computation.\n * - Disabled by default in core (enable explicitly via Layer for perf/comparison runs).\n */\nexport const currentExecVmMode = ServiceMap.Reference<boolean>('@logixjs/core/ExecVmMode', {\n defaultValue: () => false,\n})\n\nexport const withExecVmMode = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.provideService(effect, currentExecVmMode, true)\n\nexport const execVmModeLayer = (enabled: boolean): Layer.Layer<any, never, never> =>\n Layer.succeed(currentExecVmMode, enabled) as Layer.Layer<any, never, never>\n","export class DenseIdBitSet {\n readonly size: number\n\n private readonly words: Uint32Array\n private readonly touchedWords: Uint32Array | undefined\n private readonly touchedFlags: Uint8Array | undefined\n private touchedCount = 0\n\n constructor(\n size: number,\n options?: {\n readonly clearStrategy?: 'fill' | 'touched-words'\n },\n ) {\n const nextSize = Math.max(0, Math.floor(size))\n this.size = nextSize\n\n const wordCount = Math.ceil(nextSize / 32)\n this.words = new Uint32Array(wordCount)\n\n if (options?.clearStrategy === 'touched-words') {\n this.touchedWords = new Uint32Array(wordCount)\n this.touchedFlags = new Uint8Array(wordCount)\n } else {\n this.touchedWords = undefined\n this.touchedFlags = undefined\n }\n }\n\n clear(): void {\n if (!this.touchedWords) {\n this.words.fill(0)\n return\n }\n\n for (let i = 0; i < this.touchedCount; i++) {\n const wordIndex = this.touchedWords[i]!\n this.words[wordIndex] = 0\n this.touchedFlags![wordIndex] = 0\n }\n this.touchedCount = 0\n }\n\n has(id: number): boolean {\n if (!(id >= 0 && id < this.size)) return false\n const wordIndex = (id / 32) | 0\n const bit = id & 31\n return (this.words[wordIndex]! & (1 << bit)) !== 0\n }\n\n add(id: number): void {\n if (!(id >= 0 && id < this.size)) return\n const wordIndex = (id / 32) | 0\n const bit = id & 31\n const mask = 1 << bit\n\n const prev = this.words[wordIndex]!\n if ((prev & mask) !== 0) return\n\n this.words[wordIndex] = prev | mask\n\n if (!this.touchedWords) return\n if (this.touchedFlags![wordIndex] === 1) return\n this.touchedFlags![wordIndex] = 1\n this.touchedWords[this.touchedCount] = wordIndex\n this.touchedCount += 1\n }\n}\n","import type { ConvergeStaticIrRegistry } from './converge-ir.js'\nimport type { FieldPath } from '../field-path.js'\nimport { DenseIdBitSet } from './bitset.js'\n\nexport interface ConvergeExecIr {\n readonly generation: number\n\n readonly fieldPathsById: ReadonlyArray<FieldPath>\n readonly prefixFieldPathIdsByPathId: Int32Array\n readonly prefixOffsetsByPathId: Int32Array\n\n /**\n * Reachability triggers (059):\n * - prefixPathId -> stepIds that should run when this prefix becomes dirty\n * - includes prefixes of step outPath and depsPaths\n */\n readonly triggerStepIdsByFieldPathId: Int32Array\n readonly triggerStepOffsetsByFieldPathId: Int32Array\n\n readonly topoOrderInt32: Int32Array\n /**\n * stepId -> topo index in {@link topoOrderInt32}.\n *\n * Used by auto-plan computation to sort small reachable sets without scanning\n * the entire topo slice every time (avoids O(totalSteps) tail cost).\n */\n readonly topoIndexByStepId: Int32Array\n readonly topoOrderImmediateInt32: Int32Array\n readonly topoOrderDeferredInt32: Int32Array\n /**\n * 0=immediate, 1=deferred(043)\n */\n readonly stepSchedulingByStepId: Uint8Array\n readonly stepLabelByStepId: ReadonlyArray<string>\n readonly stepOutFieldPathIdByStepId: Int32Array\n readonly stepFromFieldPathIdByStepId: Int32Array\n readonly allOutPathsShallow: boolean\n readonly stepDepsFieldPathIds: Int32Array\n readonly stepDepsOffsetsByStepId: Int32Array\n\n /**\n * Perf hints collected at runtime (per module instance, per generation).\n * Mutated only in hot paths and must remain O(1).\n */\n readonly perf: {\n /**\n * EWMA of full converge execution duration (ms) under the \"off-fast-path\"\n * (diagnostics=off, middleware stack empty).\n *\n * Used by auto mode to short-circuit planning when full is already cheap.\n */\n fullCommitEwmaOffMs?: number\n /**\n * Last txnSeq (stable anchor) where we executed a full converge under off-fast-path.\n * Used to periodically re-calibrate fullCommitEwmaOffMs after warmup/JIT effects.\n */\n fullCommitLastTxnSeqOff?: number\n /**\n * Minimum observed full converge duration (ms) under off-fast-path.\n * Helps auto mode quickly detect \"full is already cheap\" after warmup/JIT without getting stuck on cold-start outliers.\n */\n fullCommitMinOffMs?: number\n /**\n * Number of full converge samples recorded under off-fast-path (best-effort; for tuning/debug only).\n */\n fullCommitSampleCountOff?: number\n\n /**\n * \"2-hit\" admission control for plan computation under auto mode:\n * - On cache miss, we only pay the cost to compute a plan after the same key repeats.\n * - Prevents high-cardinality dirty patterns from turning auto into a negative optimization.\n */\n recentPlanMissHash1?: number\n recentPlanMissHash2?: number\n }\n\n readonly scratch: {\n readonly dirtyPrefixBitSet: DenseIdBitSet\n readonly reachableStepBitSet: DenseIdBitSet\n readonly dirtyPrefixQueue: Int32Array\n /**\n * Scratch buffer for building canonical (sorted+deduped) dirty root ids in hot paths\n * without allocating JS arrays on every txn window.\n *\n * Note: callers must treat it as ephemeral and must copy before storing into caches.\n */\n readonly dirtyRootIds: Int32Array\n readonly planStepIds: Int32Array\n }\n}\n\nexport const makeConvergeExecIr = (ir: ConvergeStaticIrRegistry): ConvergeExecIr => {\n const generation = ir.generation\n\n const registry = ir.fieldPathIdRegistry\n const fieldPathsById = registry.fieldPaths\n\n const fieldPathCount = fieldPathsById.length\n const prefixOffsetsByPathId = new Int32Array(fieldPathCount + 1)\n let prefixCount = 0\n for (let pathId = 0; pathId < fieldPathCount; pathId++) {\n prefixOffsetsByPathId[pathId] = prefixCount\n prefixCount += fieldPathsById[pathId]?.length ?? 0\n }\n prefixOffsetsByPathId[fieldPathCount] = prefixCount\n\n const prefixFieldPathIdsByPathId = new Int32Array(prefixCount)\n for (let pathId = 0; pathId < fieldPathCount; pathId++) {\n const path = fieldPathsById[pathId]\n if (!path) continue\n let node = registry.root\n let cursor = prefixOffsetsByPathId[pathId]!\n for (const seg of path) {\n const next = node.children.get(seg)\n if (!next) {\n throw new Error(\n `[StateTrait.converge] Failed to resolve prefix trie node for pathId=${String(pathId)} seg=${seg}`,\n )\n }\n node = next\n const id = node.id\n if (typeof id !== 'number') {\n throw new Error(`[StateTrait.converge] Missing FieldPathId for prefix of pathId=${String(pathId)} seg=${seg}`)\n }\n prefixFieldPathIdsByPathId[cursor] = id\n cursor += 1\n }\n }\n\n const topoOrderInt32 = Int32Array.from(ir.topoOrder)\n\n const stepCount = ir.stepsById.length\n const topoIndexByStepId = new Int32Array(stepCount)\n topoIndexByStepId.fill(-1)\n for (let i = 0; i < topoOrderInt32.length; i++) {\n topoIndexByStepId[topoOrderInt32[i]!] = i\n }\n\n const stepSchedulingByStepId = new Uint8Array(stepCount)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n stepSchedulingByStepId[stepId] = ir.stepSchedulingByStepId[stepId] === 'deferred' ? 1 : 0\n }\n\n const immediateTopo: Array<number> = []\n const deferredTopo: Array<number> = []\n for (const stepId of topoOrderInt32) {\n if (stepSchedulingByStepId[stepId] === 1) deferredTopo.push(stepId)\n else immediateTopo.push(stepId)\n }\n const topoOrderImmediateInt32 = Int32Array.from(immediateTopo)\n const topoOrderDeferredInt32 = Int32Array.from(deferredTopo)\n\n const stepLabelByStepId: Array<string> = new Array(stepCount)\n const stepOutFieldPathIdByStepId = new Int32Array(stepCount)\n const stepFromFieldPathIdByStepId = new Int32Array(stepCount)\n stepFromFieldPathIdByStepId.fill(-1)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n if (topoIndexByStepId[stepId]! < 0) {\n throw new Error(`[StateTrait.converge] Missing topo index for stepId=${String(stepId)} generation=${String(generation)}`)\n }\n const step = ir.stepsById[stepId]\n if (step) {\n stepLabelByStepId[stepId] =\n step.kind === 'computed'\n ? `computed:${step.fieldPath}`\n : step.kind === 'link'\n ? `link:${step.fieldPath}`\n : step.fieldPath\n } else {\n stepLabelByStepId[stepId] = String(stepId)\n }\n stepOutFieldPathIdByStepId[stepId] = ir.stepOutFieldPathIdByStepId[stepId] as number\n if (step?.kind === 'link') {\n const deps = ir.stepDepsFieldPathIdsByStepId[stepId]\n if (deps && deps.length > 0) {\n stepFromFieldPathIdByStepId[stepId] = deps[0] as number\n }\n }\n }\n\n const stepDepsOffsetsByStepId = new Int32Array(stepCount + 1)\n let depCount = 0\n for (let stepId = 0; stepId < stepCount; stepId++) {\n stepDepsOffsetsByStepId[stepId] = depCount\n const deps = ir.stepDepsFieldPathIdsByStepId[stepId] as ReadonlyArray<number> | undefined\n depCount += deps?.length ?? 0\n }\n stepDepsOffsetsByStepId[stepCount] = depCount\n\n const stepDepsFieldPathIds = new Int32Array(depCount)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const deps = ir.stepDepsFieldPathIdsByStepId[stepId] as ReadonlyArray<number> | undefined\n if (!deps || deps.length === 0) continue\n let cursor = stepDepsOffsetsByStepId[stepId]!\n for (let i = 0; i < deps.length; i++) {\n stepDepsFieldPathIds[cursor] = deps[i]!\n cursor += 1\n }\n }\n\n let allOutPathsShallow = true\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const outPathId = stepOutFieldPathIdByStepId[stepId]!\n const path = fieldPathsById[outPathId]\n if (!path || path.length !== 1) {\n allOutPathsShallow = false\n break\n }\n }\n\n // 059: Build reachability trigger index (prefixId -> stepIds) for plan computation.\n const triggerStepCountsByFieldPathId = new Int32Array(fieldPathCount)\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const outId = stepOutFieldPathIdByStepId[stepId]!\n {\n const start = prefixOffsetsByPathId[outId]!\n const end = prefixOffsetsByPathId[outId + 1]!\n for (let i = start; i < end; i++) {\n const prefixId = prefixFieldPathIdsByPathId[i]!\n triggerStepCountsByFieldPathId[prefixId] = (triggerStepCountsByFieldPathId[prefixId]! + 1) | 0\n }\n }\n\n const depsStart = stepDepsOffsetsByStepId[stepId]!\n const depsEnd = stepDepsOffsetsByStepId[stepId + 1]!\n for (let i = depsStart; i < depsEnd; i++) {\n const depId = stepDepsFieldPathIds[i]!\n const start = prefixOffsetsByPathId[depId]!\n const end = prefixOffsetsByPathId[depId + 1]!\n for (let j = start; j < end; j++) {\n const prefixId = prefixFieldPathIdsByPathId[j]!\n triggerStepCountsByFieldPathId[prefixId] = (triggerStepCountsByFieldPathId[prefixId]! + 1) | 0\n }\n }\n }\n\n const triggerStepOffsetsByFieldPathId = new Int32Array(fieldPathCount + 1)\n let triggerTotal = 0\n for (let fieldPathId = 0; fieldPathId < fieldPathCount; fieldPathId++) {\n triggerStepOffsetsByFieldPathId[fieldPathId] = triggerTotal\n triggerTotal += triggerStepCountsByFieldPathId[fieldPathId]!\n }\n triggerStepOffsetsByFieldPathId[fieldPathCount] = triggerTotal\n\n const triggerStepIdsByFieldPathId = new Int32Array(triggerTotal)\n for (let fieldPathId = 0; fieldPathId < fieldPathCount; fieldPathId++) {\n triggerStepCountsByFieldPathId[fieldPathId] = triggerStepOffsetsByFieldPathId[fieldPathId]!\n }\n\n for (let stepId = 0; stepId < stepCount; stepId++) {\n const outId = stepOutFieldPathIdByStepId[stepId]!\n {\n const start = prefixOffsetsByPathId[outId]!\n const end = prefixOffsetsByPathId[outId + 1]!\n for (let i = start; i < end; i++) {\n const prefixId = prefixFieldPathIdsByPathId[i]!\n const cursor = triggerStepCountsByFieldPathId[prefixId]!\n triggerStepIdsByFieldPathId[cursor] = stepId\n triggerStepCountsByFieldPathId[prefixId] = cursor + 1\n }\n }\n\n const depsStart = stepDepsOffsetsByStepId[stepId]!\n const depsEnd = stepDepsOffsetsByStepId[stepId + 1]!\n for (let i = depsStart; i < depsEnd; i++) {\n const depId = stepDepsFieldPathIds[i]!\n const start = prefixOffsetsByPathId[depId]!\n const end = prefixOffsetsByPathId[depId + 1]!\n for (let j = start; j < end; j++) {\n const prefixId = prefixFieldPathIdsByPathId[j]!\n const cursor = triggerStepCountsByFieldPathId[prefixId]!\n triggerStepIdsByFieldPathId[cursor] = stepId\n triggerStepCountsByFieldPathId[prefixId] = cursor + 1\n }\n }\n }\n\n return {\n generation,\n fieldPathsById,\n prefixFieldPathIdsByPathId,\n prefixOffsetsByPathId,\n triggerStepIdsByFieldPathId,\n triggerStepOffsetsByFieldPathId,\n topoOrderInt32,\n topoIndexByStepId,\n topoOrderImmediateInt32,\n topoOrderDeferredInt32,\n stepSchedulingByStepId,\n stepLabelByStepId,\n stepOutFieldPathIdByStepId,\n stepFromFieldPathIdByStepId,\n allOutPathsShallow,\n stepDepsFieldPathIds,\n stepDepsOffsetsByStepId,\n perf: {},\n scratch: {\n dirtyPrefixBitSet: new DenseIdBitSet(fieldPathCount),\n reachableStepBitSet: new DenseIdBitSet(stepCount),\n dirtyPrefixQueue: new Int32Array(fieldPathCount),\n dirtyRootIds: new Int32Array(fieldPathCount),\n planStepIds: new Int32Array(stepCount),\n },\n }\n}\n","import { Effect, Option } from 'effect'\nimport * as EffectOp from '../effect-op.js'\nimport * as EffectOpCore from '../runtime/core/EffectOpCore.js'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport { isDevEnv } from '../runtime/core/env.js'\nimport { RunSessionTag } from '../observability/runSession.js'\nimport type { PatchReason } from '../runtime/core/StateTransaction.js'\nimport type { FieldPath } from '../field-path.js'\nimport { emitDepsMismatch, onceInRunSession } from './converge-diagnostics.js'\nimport type { ConvergeContext } from './converge.types.js'\nimport type { ConvergeExecIr } from './converge-exec-ir.js'\nimport * as DepsTrace from './deps-trace.js'\nimport type { StateTraitEntry } from './model.js'\n\nexport const getMiddlewareStack = (): Effect.Effect<EffectOp.MiddlewareStack> =>\n Effect.serviceOption(EffectOpCore.EffectOpMiddlewareTag).pipe(\n Effect.map((maybe) => (Option.isSome(maybe) ? maybe.value.stack : [])),\n )\n\ntype WriterKind = 'computed' | 'link'\n\nconst getWriterKind = (entry: StateTraitEntry<any, string>): WriterKind | undefined =>\n entry.kind === 'computed' ? 'computed' : entry.kind === 'link' ? 'link' : undefined\n\nconst getWriterDeps = (entry: StateTraitEntry<any, string>): ReadonlyArray<string> => {\n if (entry.kind === 'computed') {\n return ((entry.meta as any)?.deps ?? []) as ReadonlyArray<string>\n }\n if (entry.kind === 'link') {\n return [entry.meta.from as string]\n }\n return []\n}\n\nconst shouldSkip = (entry: StateTraitEntry<any, string>, prev: unknown, next: unknown): boolean => {\n if (entry.kind === 'computed') {\n const equals = (entry.meta as any)?.equals as ((a: unknown, b: unknown) => boolean) | undefined\n return equals ? equals(prev, next) : Object.is(prev, next)\n }\n return Object.is(prev, next)\n}\n\nexport const runWriterStepOffFast = <S extends object>(\n ctx: ConvergeContext<S>,\n execIr: ConvergeExecIr,\n draft: {\n readonly getRoot: () => S\n readonly getAt: (path: FieldPath) => unknown\n readonly setAt: (path: FieldPath, value: unknown, prev?: unknown) => void\n },\n stepId: number,\n entry: StateTraitEntry<any, string>,\n): boolean => {\n const kind = getWriterKind(entry)\n if (!kind) return false\n\n const reason: PatchReason = kind === 'computed' ? 'trait-computed' : 'trait-link'\n const from = kind === 'link' ? (entry.meta as any).from : undefined\n const outPathId = execIr.stepOutFieldPathIdByStepId[stepId]\n const outPath = execIr.fieldPathsById[outPathId]!\n const fromPathId = execIr.stepFromFieldPathIdByStepId[stepId]\n const fromPath = fromPathId >= 0 ? execIr.fieldPathsById[fromPathId] : undefined\n\n const current = draft.getRoot() as any\n const prev = draft.getAt(outPath)\n\n let next: unknown\n if (kind === 'computed') {\n const derive = (entry.meta as any).derive as (s: any) => unknown\n next = derive(current)\n } else {\n if (!fromPath) {\n throw new Error(`[StateTrait.converge] Missing link.from FieldPathId: from=\"${String(from)}\"`)\n }\n next = draft.getAt(fromPath)\n }\n\n const changed = !shouldSkip(entry, prev, next)\n if (!changed) return false\n\n draft.setAt(outPath, next, prev)\n ctx.setDraft(draft.getRoot())\n ctx.recordPatch(outPathId, reason, prev, next)\n return true\n}\n\nexport const runWriterStep = <S extends object>(\n ctx: ConvergeContext<S>,\n execIr: ConvergeExecIr,\n draft: {\n readonly getRoot: () => S\n readonly getAt: (path: FieldPath) => unknown\n readonly setAt: (path: FieldPath, value: unknown, prev?: unknown) => void\n },\n stepId: number,\n entry: StateTraitEntry<any, string>,\n shouldCollectDecision: boolean,\n diagnosticsLevel: Debug.DiagnosticsLevel,\n stack: EffectOp.MiddlewareStack,\n): Effect.Effect<boolean> => {\n const moduleId = ctx.moduleId\n const instanceId = ctx.instanceId\n const fieldPath = entry.fieldPath\n\n const kind = getWriterKind(entry)\n if (!kind) return Effect.succeed(false)\n\n const reason: PatchReason = kind === 'computed' ? 'trait-computed' : 'trait-link'\n const opKind: EffectOp.EffectOp<any, any, any>['kind'] = kind === 'computed' ? 'trait-computed' : 'trait-link'\n const opName = kind === 'computed' ? 'computed:update' : 'link:propagate'\n\n const deps = getWriterDeps(entry)\n const from = kind === 'link' ? (entry.meta as any).from : undefined\n const outPathId = execIr.stepOutFieldPathIdByStepId[stepId]\n const outPath = execIr.fieldPathsById[outPathId]!\n const fromPathId = execIr.stepFromFieldPathIdByStepId[stepId]\n const fromPath = fromPathId >= 0 ? execIr.fieldPathsById[fromPathId] : undefined\n\n const runBody = (shouldTraceDeps: boolean): Effect.Effect<boolean> =>\n Effect.sync(() => {\n const current = draft.getRoot() as any\n\n const prev = draft.getAt(outPath)\n\n let next: unknown\n let depsDiff: DepsTrace.DepsDiff | undefined\n\n if (kind === 'computed') {\n const derive = (entry.meta as any).derive as (s: any) => unknown\n if (shouldTraceDeps) {\n const traced = DepsTrace.trace((s) => derive(s), current)\n next = traced.value\n depsDiff = DepsTrace.diffDeps(((entry.meta as any).deps ?? []) as ReadonlyArray<string>, traced.reads)\n } else {\n next = derive(current)\n }\n } else {\n if (!fromPath) {\n throw new Error(`[StateTrait.converge] Missing link.from FieldPathId: from=\"${String(from)}\"`)\n }\n next = draft.getAt(fromPath)\n }\n\n const changed = !shouldSkip(entry, prev, next)\n if (!changed) {\n return { changed: false, depsDiff }\n }\n\n draft.setAt(outPath, next, prev)\n ctx.setDraft(draft.getRoot())\n ctx.recordPatch(outPathId, reason, prev, next, undefined, stepId)\n return { changed: true, depsDiff }\n }).pipe(\n Effect.flatMap(({ changed, depsDiff }) =>\n depsDiff && kind === 'computed'\n ? emitDepsMismatch({\n moduleId,\n instanceId,\n kind: 'computed',\n fieldPath,\n diff: depsDiff,\n }).pipe(Effect.as(changed))\n : Effect.succeed(changed),\n ),\n )\n\n if (stack.length === 0) {\n if (!(kind === 'computed' && shouldCollectDecision && isDevEnv())) {\n return runBody(false)\n }\n return Effect.gen(function* () {\n const traceKey = `${moduleId ?? 'unknown'}::${instanceId ?? 'unknown'}::computed::${fieldPath}`\n const shouldTraceDeps = yield* onceInRunSession(`deps_trace:settled:${traceKey}`)\n return yield* runBody(shouldTraceDeps)\n })\n }\n\n return Effect.gen(function* () {\n const stepLabel = diagnosticsLevel === 'off' ? undefined : (execIr.stepLabelByStepId[stepId] ?? String(stepId))\n\n let shouldTraceDeps = false\n if (kind === 'computed' && shouldCollectDecision && isDevEnv()) {\n const traceKey = `${moduleId ?? 'unknown'}::${instanceId ?? 'unknown'}::computed::${fieldPath}`\n shouldTraceDeps = yield* onceInRunSession(`deps_trace:settled:${traceKey}`)\n }\n\n const body = runBody(shouldTraceDeps)\n\n const meta: any = {\n moduleId,\n instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n fieldPath,\n deps,\n ...(kind === 'link'\n ? {\n from,\n to: fieldPath,\n }\n : null),\n ...(stepLabel ? { stepId: stepLabel } : null),\n }\n\n if (!(typeof meta.opSeq === 'number' && Number.isFinite(meta.opSeq))) {\n const sessionOpt = yield* Effect.serviceOption(RunSessionTag)\n if (Option.isSome(sessionOpt)) {\n const key = instanceId ?? 'global'\n meta.opSeq = sessionOpt.value.local.nextSeq('opSeq', key)\n }\n }\n\n const op = EffectOp.make<boolean, never, never>({\n kind: opKind,\n name: opName,\n effect: body,\n meta,\n })\n\n return yield* EffectOp.run(op, stack)\n })\n}\n","import { Effect } from 'effect'\nimport { create } from 'mutative'\nimport type { PatchReason, StateTxnOrigin, TxnDirtyEvidence } from '../runtime/core/StateTransaction.js'\nimport { normalizeFieldPath, type FieldPath, type FieldPathId } from '../field-path.js'\nimport * as Debug from '../runtime/core/DebugSink.js'\nimport { buildDependencyGraph } from './graph.js'\nimport type { StateTraitEntry, StateTraitProgram } from './model.js'\nimport { reverseClosure } from './reverse-closure.js'\nimport type * as RowId from './rowid.js'\n\nexport type ValidateMode = 'submit' | 'blur' | 'valueChange' | 'manual'\n\n/**\n * RULE_SKIP:\n * - Used by rules to indicate \"skip execution for this run\" (e.g. validateOn gating).\n * - Distinct from `undefined` (\"no error after execution\"): skip must not clear existing errors.\n */\nconst RULE_SKIP = Symbol.for('logix.state-trait.validate.skip')\n\nexport type ValidateTarget =\n | { readonly kind: 'root' }\n | { readonly kind: 'field'; readonly path: string }\n | {\n readonly kind: 'list'\n readonly path: string\n readonly listIndexPath?: ReadonlyArray<number>\n }\n | {\n readonly kind: 'item'\n readonly path: string\n readonly listIndexPath?: ReadonlyArray<number>\n readonly index: number\n readonly field?: string\n }\n\nexport interface ScopedValidateRequest {\n readonly mode: ValidateMode\n readonly target: ValidateTarget\n}\n\nexport interface ValidateContext<S> {\n readonly moduleId?: string\n readonly instanceId?: string\n readonly txnSeq?: number\n readonly txnId?: string\n /**\n * External trigger at transaction start: stabilizes validate attribution to the txn origin,\n * preventing in-transaction derived writes from polluting attribution.\n */\n readonly origin?: StateTxnOrigin\n /**\n * RowIdStore: stable row identity for list scopes (later `$rowId` and rowIdMode depend on this).\n */\n readonly rowIdStore?: RowId.RowIdStore\n /**\n * List config hint from StateTraitSpec.list.identityHint (trackBy), used for rowIdMode explanation and degrade diagnostics.\n */\n readonly listConfigs?: ReadonlyArray<RowId.ListConfig>\n /**\n * Transaction dirty evidence (best-effort):\n * - Unified root/list evidence derived from StateTransaction.recordPatch(...) within the same txn window.\n * - Enables list-scope incremental rules even when callers validate by Ref.list(...).\n */\n readonly txnDirtyEvidence?: TxnDirtyEvidence\n readonly getDraft: () => S\n readonly setDraft: (next: S) => void\n readonly recordPatch: (\n path: string | FieldPath | FieldPathId | undefined,\n reason: PatchReason,\n from?: unknown,\n to?: unknown,\n traitNodeId?: string,\n stepId?: number,\n ) => void\n}\n\ntype RuleContext = {\n readonly mode: ValidateMode\n readonly state: unknown\n readonly scope: {\n readonly fieldPath: string\n readonly listPath?: string\n readonly listIndexPath?: ReadonlyArray<number>\n readonly index?: number\n /**\n * list-scope check hint: stable RowId accessor for the current list instance.\n * Used by optimized list rules to cache/skip full rescans without requiring an O(n) rowId array.\n */\n readonly rowIdAt?: (index: number) => string\n /**\n * list-scope check hint: indices that are known to be relevant for this validation batch.\n * Derived from item/field validate targets (best-effort).\n */\n readonly changedIndices?: ReadonlyArray<number>\n }\n}\n\nconst parseSegments = (path: string): ReadonlyArray<string | number> => {\n if (!path) return []\n return path.split('.').map((seg) => (/^[0-9]+$/.test(seg) ? Number(seg) : seg))\n}\n\nconst getAtPath = (state: any, path: string): any => {\n if (!path || state == null) return state\n const segments = parseSegments(path)\n let current: any = state\n for (const seg of segments) {\n if (current == null) return undefined\n current = current[seg as any]\n }\n return current\n}\n\nconst setAtPathMutating = (draft: unknown, path: string, value: unknown): void => {\n if (!path) return\n const segments = parseSegments(path)\n if (segments.length === 0) return\n\n let current: any = draft\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]!\n const nextKey = segments[i + 1]!\n\n const next = current[key as any]\n if (next == null || typeof next !== 'object') {\n current[key as any] = typeof nextKey === 'number' ? [] : {}\n }\n current = current[key as any]\n }\n\n const last = segments[segments.length - 1]!\n current[last as any] = value\n}\n\nconst unsetAtPathMutating = (draft: unknown, path: string): void => {\n if (!path) return\n const segments = parseSegments(path)\n if (segments.length === 0) return\n\n let current: any = draft\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]!\n const next = current[key as any]\n if (next == null || typeof next !== 'object') {\n return\n }\n current = next\n }\n\n const last = segments[segments.length - 1]!\n if (Array.isArray(current) && typeof last === 'number') {\n // Keep `errors.*.rows` arrays sparse to avoid dense-undefined scans (perf + variance).\n // Note: `delete` keeps `.length` unchanged but removes the element key (hole).\n delete current[last]\n return\n }\n if (current && typeof current === 'object') {\n delete current[last as any]\n }\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst normalizeErrorValue = (value: unknown): unknown => (value === undefined || value === null ? undefined : value)\n\nconst mergeRuleErrors = (errors: ReadonlyArray<unknown>): unknown => {\n if (errors.length === 0) return undefined\n if (errors.length === 1) return errors[0]\n\n // ErrorValue constraint: arrays must not represent \"multiple errors\"; for duplicates on the same field, keep the first deterministically.\n if (errors.every(isPlainObject)) {\n const merged: Record<string, unknown> = {}\n for (const patch of errors as ReadonlyArray<Record<string, unknown>>) {\n for (const key of Object.keys(patch)) {\n const incoming = normalizeErrorValue(patch[key])\n if (incoming === undefined) continue\n if (!(key in merged)) merged[key] = incoming\n }\n }\n return Object.keys(merged).length > 0 ? merged : undefined\n }\n\n return errors[0]\n}\n\ntype ErrorValueLeafObject = {\n readonly message: string\n readonly code?: string\n readonly details?: unknown\n}\n\nconst isErrorValueLeafObject = (value: unknown): value is ErrorValueLeafObject => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const anyValue = value as Record<string, unknown>\n const msg = anyValue.message\n if (typeof msg !== 'string' || msg.length === 0) return false\n for (const key of Object.keys(anyValue)) {\n if (key !== 'message' && key !== 'code' && key !== 'details') return false\n }\n const code = anyValue.code\n if (code !== undefined && (typeof code !== 'string' || code.length === 0)) return false\n return true\n}\n\nconst countErrorLeaves = (value: unknown): number => {\n if (value === null || value === undefined) return 0\n if (typeof value === 'string') return value.length > 0 ? 1 : 0\n if (Array.isArray(value)) return value.reduce((acc, v) => acc + countErrorLeaves(v), 0)\n if (typeof value === 'object') {\n if (isErrorValueLeafObject(value)) return 1\n let acc = 0\n for (const [k, v] of Object.entries(value as any)) {\n if (k === '$rowId') continue\n acc += countErrorLeaves(v)\n }\n return acc\n }\n return 1\n}\n\ntype ListScopeResult = {\n readonly listError?: unknown\n readonly rows?: ReadonlyArray<unknown>\n readonly traces?: ReadonlyArray<ListScopeRuleTrace>\n readonly touchedKeys: ReadonlySet<string>\n readonly touchedListError: boolean\n}\n\ntype TraitCheckOp = 'set' | 'unset' | 'insert' | 'remove'\n\ntype ListScopeRuleTrace = {\n readonly ruleId: string\n readonly summary: {\n readonly scannedRows: number\n readonly affectedRows: number\n readonly changedRows: number\n readonly setCount?: number\n readonly clearedCount?: number\n readonly durationMs?: number\n }\n}\n\ntype TraitCheckRowIdMode = 'trackBy' | 'store' | 'index'\n\ntype TraitCheckDegraded = {\n readonly kind: string\n readonly message?: string\n}\n\nconst nowMs = (() => {\n const perf = globalThis.performance\n if (perf && typeof perf.now === 'function') {\n return () => perf.now()\n }\n return () => Date.now()\n})()\n\nconst isTraitCheckOp = (value: unknown): value is TraitCheckOp =>\n value === 'set' || value === 'unset' || value === 'insert' || value === 'remove'\n\nconst normalizeTraitCheckPath = (path: string): ReadonlyArray<string> => normalizeFieldPath(path) ?? ['$root']\n\nconst sameFieldPath = (a: ReadonlyArray<string>, b: ReadonlyArray<string>): boolean => {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n}\n\nconst toTraitCheckTrigger = (\n origin: StateTxnOrigin | undefined,\n fallbackPath: string,\n): { readonly kind: string; readonly path: ReadonlyArray<string>; readonly op: TraitCheckOp } => {\n const details = origin?.details\n const detailsObj = isPlainObject(details) ? (details as Record<string, unknown>) : undefined\n const tag = detailsObj && typeof detailsObj._tag === 'string' ? detailsObj._tag : undefined\n\n const kindBase = origin?.kind && origin.kind.length > 0 ? origin.kind : 'unknown'\n const kind =\n tag && tag.length > 0\n ? `${kindBase}:${tag}`\n : origin?.name && origin.name.length > 0\n ? `${kindBase}:${origin.name}`\n : kindBase\n\n const opRaw = detailsObj?.op\n const op: TraitCheckOp = isTraitCheckOp(opRaw) ? opRaw : 'set'\n\n const pathRaw = detailsObj && typeof detailsObj.path === 'string' ? detailsObj.path : undefined\n const path = normalizeTraitCheckPath(pathRaw ?? fallbackPath)\n\n return { kind, path, op }\n}\n\nconst toTraitCheckRowIdMode = (params: {\n readonly trackBy?: string\n readonly rowIdStore?: RowId.RowIdStore\n}): TraitCheckRowIdMode => {\n if (params.trackBy) return 'trackBy'\n if (params.rowIdStore) return 'store'\n return 'index'\n}\n\nconst toTraitCheckDegraded = (\n trigger: { readonly op: TraitCheckOp; readonly path: ReadonlyArray<string> },\n scopeFieldPath: ReadonlyArray<string>,\n rowIdMode: TraitCheckRowIdMode,\n): TraitCheckDegraded | undefined => {\n if (rowIdMode === 'trackBy') return undefined\n if (trigger.op !== 'set') return undefined\n if (!sameFieldPath(trigger.path, scopeFieldPath)) return undefined\n return {\n kind: 'rowId:degraded:no_trackBy_root_replace',\n message: 'list root was replaced without trackBy; rowId stability is degraded',\n }\n}\n\nconst mergeRowPatchPreferFirst = (\n base: Record<string, unknown> | undefined,\n incoming: unknown,\n): Record<string, unknown> | undefined => {\n if (!isPlainObject(incoming)) return base\n const next: Record<string, unknown> = base ? { ...base } : {}\n for (const key of Object.keys(incoming)) {\n const v = normalizeErrorValue(incoming[key])\n if (v === undefined) continue\n if (!(key in next)) next[key] = v\n }\n return Object.keys(next).length > 0 ? next : undefined\n}\n\nconst shallowEqualPlainObject = (a: Record<string, unknown>, b: Record<string, unknown>): boolean => {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) return false\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (!Object.is(a[key], b[key])) return false\n }\n return true\n}\n\nconst collectRuleKeysFromDeps = (rule: unknown, listPath: string): ReadonlyArray<string> => {\n if (!rule || typeof rule !== 'object') return []\n const deps = (rule as any).deps\n if (!Array.isArray(deps)) return []\n\n const prefix = `${listPath}[].`\n const keys: Array<string> = []\n for (const dep of deps) {\n if (typeof dep !== 'string') continue\n if (dep.startsWith(prefix)) {\n const key = dep.slice(prefix.length)\n if (key) keys.push(key)\n continue\n }\n if (dep.length > 0 && !dep.includes('.') && !dep.includes('[') && !dep.includes(']')) {\n keys.push(dep)\n }\n }\n\n return Array.from(new Set(keys)).sort()\n}\n\nconst evalListScopeCheck = (\n entry: Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }>,\n input: unknown,\n ctx: RuleContext,\n options?: {\n readonly trace?: {\n readonly listPath: string\n readonly errorsBasePath: string\n readonly errorsRoot: unknown\n }\n readonly traceLite?: boolean\n },\n): ListScopeResult | typeof RULE_SKIP => {\n const rules = entry.meta.rules as Record<string, any>\n const names = Object.keys(rules).sort()\n\n let listError: unknown | undefined = undefined\n let rows: Array<Record<string, unknown> | undefined> | undefined = undefined\n let traces: Array<ListScopeRuleTrace> | undefined = undefined\n let ran = false\n let touchedListError = false\n const touchedKeys = new Set<string>()\n const listPath = ctx.scope.listPath ?? ctx.scope.fieldPath\n const scannedRows = Array.isArray(input) ? input.length : 0\n\n const mergeRows = (incomingRows: ReadonlyArray<unknown>): void => {\n if (!rows) rows = []\n if (rows.length < incomingRows.length) rows.length = incomingRows.length\n\n // Sparse merge: most list-scope rules only touch a small number of rows.\n for (const key of Object.keys(incomingRows as any)) {\n const index = Number(key)\n if (!Number.isInteger(index) || index < 0) continue\n const incoming = (incomingRows as any)[index]\n if (incoming === undefined) continue\n const merged = mergeRowPatchPreferFirst(rows[index], incoming)\n rows[index] = merged\n }\n }\n\n const summarizeRuleRows = (\n errorsBasePath: string,\n keys: ReadonlyArray<string>,\n scannedRows: number,\n rowsPatch: ReadonlyArray<unknown> | undefined,\n ): {\n readonly affectedRows: number\n readonly changedRows: number\n readonly setCount: number\n readonly clearedCount: number\n } => {\n if (keys.length === 0 || scannedRows <= 0) {\n return { affectedRows: 0, changedRows: 0, setCount: 0, clearedCount: 0 }\n }\n\n let affectedRows = 0\n let changedRows = 0\n let setCount = 0\n let clearedCount = 0\n\n const prevRowsAny = getAtPath(options?.trace?.errorsRoot as any, `${errorsBasePath}.rows`)\n const prevRowsLike =\n prevRowsAny && typeof prevRowsAny === 'object' && !Array.isArray(prevRowsAny) ? (prevRowsAny as any) : undefined\n const prevRows = Array.isArray(prevRowsAny) ? prevRowsAny : undefined\n\n const indices = new Set<number>()\n const addIndex = (k: string): void => {\n const i = Number(k)\n if (!Number.isInteger(i) || i < 0 || i >= scannedRows) return\n indices.add(i)\n }\n\n if (rowsPatch && typeof rowsPatch === 'object') {\n for (const k of Object.keys(rowsPatch as any)) {\n const v = (rowsPatch as any)[k]\n if (v === undefined) continue\n addIndex(k)\n }\n }\n\n if (prevRows && typeof prevRows === 'object') {\n for (const k of Object.keys(prevRows as any)) {\n const v = (prevRows as any)[k]\n if (v === undefined) continue\n addIndex(k)\n }\n } else if (prevRowsLike && typeof prevRowsLike === 'object') {\n for (const k of Object.keys(prevRowsLike as any)) {\n const v = (prevRowsLike as any)[k]\n if (v === undefined) continue\n addIndex(k)\n }\n }\n\n for (const index of Array.from(indices).sort((a, b) => a - b)) {\n const prevRow = prevRows ? prevRows[index] : prevRowsLike ? prevRowsLike[index] : undefined\n const prevObj = isPlainObject(prevRow) ? (prevRow as Record<string, unknown>) : undefined\n const patch = rowsPatch?.[index]\n const patchObj = isPlainObject(patch) ? (patch as Record<string, unknown>) : undefined\n\n let hasPrev = false\n let hasNext = false\n let rowChanged = false\n\n for (const key of keys) {\n const prev = normalizeErrorValue(prevObj?.[key])\n const next = normalizeErrorValue(patchObj?.[key])\n if (prev !== undefined) hasPrev = true\n if (next !== undefined) hasNext = true\n if (Object.is(prev, next)) continue\n rowChanged = true\n if (next === undefined) {\n if (prev !== undefined) clearedCount += 1\n } else {\n setCount += 1\n }\n }\n\n if (hasPrev || hasNext) affectedRows += 1\n if (rowChanged) changedRows += 1\n }\n\n return { affectedRows, changedRows, setCount, clearedCount }\n }\n\n for (const name of names) {\n const rule = rules[name]\n const collectTrace = options?.trace?.listPath && options?.trace?.errorsRoot\n const collectTraceLite = options?.traceLite === true\n const startedAt = collectTrace ? nowMs() : 0\n try {\n const out =\n typeof rule === 'function'\n ? rule(input, ctx)\n : rule && typeof rule === 'object'\n ? rule.validate(input, ctx)\n : undefined\n\n if (out === RULE_SKIP) continue\n ran = true\n\n const keysFromDeps = collectRuleKeysFromDeps(rule, listPath)\n\n for (const key of keysFromDeps) {\n touchedKeys.add(key)\n }\n\n if (collectTrace) {\n const traceErrorsBasePath = options!.trace!.errorsBasePath\n\n const rowsPatch: ReadonlyArray<unknown> | undefined = Array.isArray(out)\n ? out\n : isPlainObject(out) && Array.isArray((out as any).rows)\n ? ((out as any).rows as ReadonlyArray<unknown>)\n : undefined\n\n const summary = summarizeRuleRows(traceErrorsBasePath, keysFromDeps, scannedRows, rowsPatch)\n const durationMs = Math.max(0, nowMs() - startedAt)\n\n if (!traces) traces = []\n traces.push({\n ruleId: `${entry.fieldPath}#${name}`,\n summary: {\n scannedRows,\n affectedRows: summary.affectedRows,\n changedRows: summary.changedRows,\n setCount: summary.setCount,\n clearedCount: summary.clearedCount,\n durationMs,\n },\n })\n } else if (collectTraceLite) {\n if (!traces) traces = []\n traces.push({\n ruleId: `${entry.fieldPath}#${name}`,\n summary: {\n scannedRows,\n affectedRows: 0,\n changedRows: 0,\n },\n })\n }\n\n if (out === undefined) continue\n\n if (Array.isArray(out)) {\n mergeRows(out)\n continue\n }\n\n if (isPlainObject(out)) {\n const maybeRows = (out as any).rows\n const hasListKey = Object.prototype.hasOwnProperty.call(out, '$list')\n if (hasListKey) touchedListError = true\n const maybeListError = normalizeErrorValue((out as any).$list)\n if (maybeListError !== undefined && listError === undefined) {\n listError = maybeListError\n }\n if (Array.isArray(maybeRows)) {\n mergeRows(maybeRows)\n } else if (!hasListKey && maybeListError === undefined) {\n // Allow list-scope rules to return a `$list` error value (string/object) directly without implying a rows structure.\n const v = normalizeErrorValue(out)\n if (v !== undefined && listError === undefined) listError = v\n touchedListError = true\n }\n continue\n }\n\n // Non object/array: treat as a `$list` error value.\n const v = normalizeErrorValue(out)\n if (v !== undefined && listError === undefined) listError = v\n touchedListError = true\n } catch {\n // Rule runtime error: keep it a no-op to avoid producing a partial error tree.\n // Diagnostics and degrade handling are handled by DebugSink/DevtoolsHub in later phases.\n }\n }\n\n if (!ran) return RULE_SKIP\n return {\n listError,\n rows,\n traces,\n touchedKeys,\n touchedListError,\n }\n}\n\nconst toPatternPath = (path: string): string => {\n if (!path) return path\n const segments = path.split('.').filter(Boolean)\n const out: Array<string> = []\n\n for (const seg of segments) {\n if (/^[0-9]+$/.test(seg)) {\n if (out.length === 0) continue\n const last = out[out.length - 1]!\n if (!last.endsWith('[]')) out[out.length - 1] = `${last}[]`\n continue\n }\n out.push(seg)\n }\n\n return out.join('.')\n}\n\nconst toGraphTargets = (target: ValidateTarget): ReadonlyArray<string> => {\n if (target.kind === 'root') {\n return []\n }\n if (target.kind === 'field') {\n return [toPatternPath(target.path)]\n }\n if (target.kind === 'list') {\n // A list target should hit both list-scope check (fieldPath=listPath) and item-scope check (fieldPath=listPath[]).\n return [target.path, `${target.path}[]`]\n }\n // item\n const base = `${target.path}[]`\n const field = target.field ? toPatternPath(target.field) : undefined\n return [field ? `${base}.${field}` : base]\n}\n\nconst normalizeListIndexPath = (listIndexPath: ReadonlyArray<number> | undefined): ReadonlyArray<number> => {\n if (!Array.isArray(listIndexPath) || listIndexPath.length === 0) return []\n const out: Array<number> = []\n for (const n of listIndexPath) {\n if (!Number.isInteger(n) || n < 0) continue\n out.push(n)\n }\n return out\n}\n\nconst toListInstanceKey = (listPath: string, listIndexPath: ReadonlyArray<number> | undefined): string => {\n const p = normalizeListIndexPath(listIndexPath)\n return p.length === 0 ? `${listPath}@@` : `${listPath}@@${p.join(',')}`\n}\n\nconst extractIndexBindingsAndInstanceIndexPaths = (\n requests: ReadonlyArray<ScopedValidateRequest>,\n): {\n readonly indexBindings: Map<string, ReadonlySet<number>>\n readonly instanceIndexPathByKey: Map<string, ReadonlyArray<number>>\n} => {\n const indexBindings = new Map<string, Set<number>>()\n const instanceIndexPathByKey = new Map<string, ReadonlyArray<number>>()\n\n const ensureInstanceIndexPath = (listPath: string, listIndexPath: ReadonlyArray<number> | undefined): string => {\n const normalized = normalizeListIndexPath(listIndexPath)\n const key = toListInstanceKey(listPath, normalized)\n if (!instanceIndexPathByKey.has(key)) {\n instanceIndexPathByKey.set(key, normalized)\n }\n return key\n }\n\n const addIndexBinding = (listPath: string, listIndexPath: ReadonlyArray<number> | undefined, index: number): void => {\n if (!Number.isInteger(index) || index < 0) return\n const key = ensureInstanceIndexPath(listPath, listIndexPath)\n const set = indexBindings.get(key) ?? new Set<number>()\n set.add(index)\n indexBindings.set(key, set)\n }\n\n for (const req of requests) {\n const target = req.target\n if (target.kind === 'item') {\n addIndexBinding(target.path, target.listIndexPath, target.index)\n continue\n }\n if (target.kind === 'list') {\n // Needed for nested list instance enumeration (listIndexPath comes from the ref).\n ensureInstanceIndexPath(target.path, target.listIndexPath)\n continue\n }\n if (target.kind === 'field') {\n // Best-effort: treat numeric segments as list indices, and derive index bindings for list/item scopes.\n // This enables incremental list-scope rules even when callers validate by concrete valuePath (\"items.10.x\").\n const segments = target.path.split('.').filter(Boolean)\n const listPathSegments: Array<string> = []\n const listIndexPath: Array<number> = []\n for (const seg of segments) {\n if (/^[0-9]+$/.test(seg)) {\n if (listPathSegments.length === 0) continue\n const idx = Number(seg)\n if (!Number.isFinite(idx) || idx < 0) continue\n const n = Math.floor(idx)\n addIndexBinding(listPathSegments.join('.'), listIndexPath, n)\n // Descend into this list item: subsequent nested list bindings should carry this index as parent listIndexPath.\n listIndexPath.push(n)\n continue\n }\n listPathSegments.push(seg)\n }\n continue\n }\n }\n\n const readonlyIndexBindings = new Map<string, ReadonlySet<number>>()\n for (const [k, set] of indexBindings) readonlyIndexBindings.set(k, set)\n\n return {\n indexBindings: readonlyIndexBindings,\n instanceIndexPathByKey,\n }\n}\n\nconst extractListBindings = (\n requests: ReadonlyArray<ScopedValidateRequest>,\n): {\n readonly all: ReadonlySet<string>\n readonly instances: ReadonlySet<string>\n} => {\n const all = new Set<string>()\n const instances = new Set<string>()\n for (const req of requests) {\n if (req.target.kind !== 'list') continue\n if (!req.target.path) continue\n if (req.target.listIndexPath && req.target.listIndexPath.length > 0) {\n instances.add(toListInstanceKey(req.target.path, req.target.listIndexPath))\n continue\n }\n all.add(req.target.path)\n }\n return { all, instances }\n}\n\nconst resolveMode = (requests: ReadonlyArray<ScopedValidateRequest>): ValidateMode => {\n const priorities: Record<ValidateMode, number> = {\n submit: 4,\n blur: 3,\n valueChange: 2,\n manual: 1,\n }\n let best: ValidateMode = 'manual'\n let bestP = priorities[best]\n for (const r of requests) {\n const p = priorities[r.mode]\n if (p > bestP) {\n bestP = p\n best = r.mode\n }\n }\n return best\n}\n\nconst evalCheck = (\n entry: Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }>,\n input: unknown,\n ctx: RuleContext,\n): unknown => {\n const rules = entry.meta.rules as Record<string, any>\n const names = Object.keys(rules).sort()\n const results: Array<unknown> = []\n let ran = false\n\n for (const name of names) {\n const rule = rules[name]\n try {\n const out =\n typeof rule === 'function'\n ? rule(input, ctx)\n : rule && typeof rule === 'object'\n ? rule.validate(input, ctx)\n : undefined\n if (out === RULE_SKIP) continue\n ran = true\n const normalized = normalizeErrorValue(out)\n if (normalized !== undefined) results.push(normalized)\n } catch {\n // Rule runtime error: keep it a no-op to avoid producing a partial error tree.\n // Diagnostics and degrade handling are handled by DebugSink/DevtoolsHub in later phases.\n }\n }\n\n if (!ran) return RULE_SKIP\n return mergeRuleErrors(results)\n}\n\ntype ErrorUpdate = {\n readonly errorPath: string\n readonly prev: unknown\n readonly next: unknown\n readonly stepId: string\n}\n\n/**\n * validateInTransaction:\n * - Execute a batch of scoped validate requests within an already-started StateTransaction.\n * - Compute the minimal check set via ReverseClosure, and write results back to `state.errors.*`.\n * - If no actual error changes occur, do not update the draft (preserve 0-commit semantics).\n */\nexport const validateInTransaction = <S extends object>(\n program: StateTraitProgram<S>,\n ctx: ValidateContext<S>,\n requests: ReadonlyArray<ScopedValidateRequest>,\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n const diagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n const enableTrace = diagnosticsLevel !== 'off'\n const enableTraceDetail = diagnosticsLevel === 'full' || diagnosticsLevel === 'sampled'\n const enableTraceLite = diagnosticsLevel === 'light'\n const traceEvents: Array<Debug.Event> | undefined = enableTrace ? [] : undefined\n\n yield* Effect.sync(() => {\n if (requests.length === 0) return\n\n const checks = program.entries.filter(\n (e): e is Extract<StateTraitEntry<any, string>, { readonly kind: 'check' }> => (e as any).kind === 'check',\n )\n if (checks.length === 0) return\n\n const hasRoot = requests.some((r) => r.target.kind === 'root')\n const draft = ctx.getDraft() as any\n\n // Compute check scopes to execute (set of field paths).\n const scopesToValidate = (() => {\n if (hasRoot) {\n return new Set<string>(checks.map((c) => c.fieldPath))\n }\n const graph = buildDependencyGraph(program)\n const set = new Set<string>()\n for (const req of requests) {\n for (const t of toGraphTargets(req.target)) {\n for (const node of reverseClosure(graph, t)) {\n set.add(node)\n }\n }\n }\n return set\n })()\n\n const selectedChecks = checks.filter((c) => scopesToValidate.has(c.fieldPath))\n if (selectedChecks.length === 0) return\n\n const mode = resolveMode(requests)\n\n if (enableTrace && traceEvents) {\n traceEvents.push({\n type: 'trace:trait:validate',\n moduleId: ctx.moduleId,\n instanceId: ctx.instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n data: {\n mode,\n requestCount: requests.length,\n selectedCheckCount: selectedChecks.length,\n hasRoot,\n },\n })\n }\n\n // Item-scope bindings: used only for non-root validate (root validate runs full length by current arrays).\n // Includes best-effort extraction from field valuePaths with numeric segments (e.g. \"items.10.x\").\n const extracted = extractIndexBindingsAndInstanceIndexPaths(requests)\n const indexBindings = extracted.indexBindings\n const instanceIndexPathByKey = extracted.instanceIndexPathByKey\n\n const listBindings = extractListBindings(requests)\n const listBindingsAll = listBindings.all\n const listBindingsInstances = listBindings.instances\n\n const updates: Array<ErrorUpdate> = []\n\n const listConfigByPath = (() => {\n const map = new Map<string, RowId.ListConfig>()\n const configs = ctx.listConfigs ?? []\n for (const cfg of configs) {\n if (!cfg || typeof (cfg as any).path !== 'string') continue\n map.set((cfg as any).path, cfg as any)\n }\n return map\n })()\n\n const readTrackBy = (item: unknown, trackBy: string): unknown => {\n if (!item || typeof item !== 'object') return undefined\n const segments = trackBy.split('.')\n let current: any = item\n for (const seg of segments) {\n if (current == null) return undefined\n current = current[seg as any]\n }\n return current\n }\n\n const makeStepId = (fieldPath: string, index?: number): string =>\n index === undefined ? `check:${fieldPath}` : `check:${fieldPath}@${index}`\n\n type ListRuntime = {\n readonly listPath: string\n readonly listIndexPath: ReadonlyArray<number>\n readonly valuePath: string\n readonly errorBasePath: string\n readonly parentRowId?: RowId.RowId\n readonly items: ReadonlyArray<unknown>\n readonly trackBy?: string\n readonly rowIdAt?: (index: number) => string\n }\n\n const listPaths = Array.from(listConfigByPath.keys())\n const listPathSet = new Set(listPaths)\n\n const parentOf = (path: string): string | undefined => {\n const segments = path.split('.').filter(Boolean)\n let best: string | undefined\n for (let i = 1; i < segments.length; i++) {\n const prefix = segments.slice(0, i).join('.')\n if (listPathSet.has(prefix)) best = prefix\n }\n return best\n }\n\n const parentByPath = new Map<string, string | undefined>()\n const suffixByPath = new Map<string, string>()\n for (const path of listPaths) {\n const parent = parentOf(path)\n parentByPath.set(path, parent)\n const suffix = parent ? path.slice(parent.length + 1) : path\n suffixByPath.set(path, suffix)\n }\n\n const normalizeInstanceIndexPath = (\n listPath: string,\n listIndexPath: ReadonlyArray<number> | undefined,\n ): ReadonlyArray<number> | undefined => {\n const normalized = normalizeListIndexPath(listIndexPath)\n let expected = 0\n let p = parentByPath.get(listPath)\n while (p) {\n expected += 1\n p = parentByPath.get(p)\n }\n if (expected === 0) return []\n if (normalized.length !== expected) return undefined\n return normalized\n }\n\n const listRuntimeByKey = new Map<string, ListRuntime>()\n\n const getListRuntime = (listPath: string, listIndexPath: ReadonlyArray<number>): ListRuntime | undefined => {\n const parent = parentByPath.get(listPath)\n const cacheKey = parent ? `${listPath}@@#${listIndexPath.join(',')}` : `${listPath}@@root`\n\n const cached = listRuntimeByKey.get(cacheKey)\n if (cached) return cached\n\n const listCfg = listConfigByPath.get(listPath)\n const trackBy =\n listCfg && typeof (listCfg as any).trackBy === 'string' ? ((listCfg as any).trackBy as string) : undefined\n\n if (!parent) {\n const listValue = getAtPath(draft, listPath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n // Correctness: lists without trackBy must reconcile rowIds on every validate window,\n // otherwise nested list rowId bindings can break under parent reorder.\n const ensuredRowIds: ReadonlyArray<string> | undefined =\n ctx.rowIdStore && !trackBy ? ctx.rowIdStore.ensureList(listPath, items, trackBy) : undefined\n const rowIdAt = (index: number): string => {\n if (index < 0 || index >= items.length) return String(index)\n const item = items[index]\n if (trackBy) {\n const k = readTrackBy(item, trackBy)\n if (k !== undefined) return String(k)\n }\n const fromEnsured = ensuredRowIds?.[index]\n if (typeof fromEnsured === 'string' && fromEnsured.length > 0) return fromEnsured\n const fromStore = ctx.rowIdStore?.getRowId(listPath, index)\n if (typeof fromStore === 'string' && fromStore.length > 0) return fromStore\n return String(index)\n }\n\n const out: ListRuntime = {\n listPath,\n listIndexPath: [],\n valuePath: listPath,\n errorBasePath: `errors.${listPath}`,\n items,\n trackBy,\n rowIdAt,\n }\n listRuntimeByKey.set(cacheKey, out)\n return out\n }\n\n if (listIndexPath.length === 0) return undefined\n const parentIndexPath = listIndexPath.slice(0, -1)\n const parentIndex = listIndexPath[listIndexPath.length - 1]!\n const parentRuntime = getListRuntime(parent, parentIndexPath)\n if (!parentRuntime) return undefined\n if (parentIndex < 0 || parentIndex >= parentRuntime.items.length) return undefined\n\n const suffix = suffixByPath.get(listPath) ?? ''\n if (!suffix) return undefined\n\n const valuePath = `${parentRuntime.valuePath}.${parentIndex}.${suffix}`\n const errorBasePath = `${parentRuntime.errorBasePath}.rows.${parentIndex}.${suffix}`\n\n const listValue = getAtPath(draft, valuePath)\n const items: ReadonlyArray<unknown> = Array.isArray(listValue) ? listValue : []\n\n const parentRowId =\n (parentRuntime.rowIdAt ? (parentRuntime.rowIdAt(parentIndex) as any) : undefined) ??\n (ctx.rowIdStore ? ctx.rowIdStore.getRowId(parent, parentIndex, parentRuntime.parentRowId) : undefined)\n\n // See root list comment above: ensure mapping for no-trackBy lists to preserve stability under reorder.\n const ensuredRowIds: ReadonlyArray<string> | undefined =\n ctx.rowIdStore && !trackBy ? ctx.rowIdStore.ensureList(listPath, items, trackBy, parentRowId) : undefined\n const rowIdAt = (index: number): string => {\n if (index < 0 || index >= items.length) return String(index)\n const item = items[index]\n if (trackBy) {\n const k = readTrackBy(item, trackBy)\n if (k !== undefined) return String(k)\n }\n const fromEnsured = ensuredRowIds?.[index]\n if (typeof fromEnsured === 'string' && fromEnsured.length > 0) return fromEnsured\n const fromStore = ctx.rowIdStore?.getRowId(listPath, index, parentRowId)\n if (typeof fromStore === 'string' && fromStore.length > 0) return fromStore\n return String(index)\n }\n\n const out: ListRuntime = {\n listPath,\n listIndexPath,\n valuePath,\n errorBasePath,\n parentRowId,\n items,\n trackBy,\n rowIdAt,\n }\n listRuntimeByKey.set(cacheKey, out)\n return out\n }\n\n const enumerateAllListInstances = (listPath: string): ReadonlyArray<ListRuntime> => {\n const parent = parentByPath.get(listPath)\n if (!parent) {\n const rt = getListRuntime(listPath, [])\n return rt ? [rt] : []\n }\n\n const parentInstances = enumerateAllListInstances(parent)\n const out: Array<ListRuntime> = []\n for (const p of parentInstances) {\n for (let i = 0; i < p.items.length; i++) {\n const childIndexPath = [...p.listIndexPath, i]\n const rt = getListRuntime(listPath, childIndexPath)\n if (rt) out.push(rt)\n }\n }\n return out\n }\n\n type RowDraft = {\n readonly listPath: string\n readonly listIndexPath: ReadonlyArray<number>\n readonly parentRowId?: RowId.RowId\n readonly index: number\n readonly errorBasePath: string\n readonly errorPath: string\n readonly prev: unknown\n readonly next: Record<string, unknown>\n readonly stepId: string\n removed?: boolean\n }\n\n const rowDrafts = new Map<string, RowDraft>()\n\n const ROW_DRAFT_PREV_NOT_PROVIDED = Symbol.for('logix.state-trait.validate.rowDraftPrev.notProvided')\n const getOrCreateRowDraft = (\n list: ListRuntime,\n index: number,\n stepId: string,\n prevRow: unknown | typeof ROW_DRAFT_PREV_NOT_PROVIDED = ROW_DRAFT_PREV_NOT_PROVIDED,\n ): RowDraft => {\n const errorPath = `${list.errorBasePath}.rows.${index}`\n const existing = rowDrafts.get(errorPath)\n if (existing) return existing\n\n const prev = prevRow === ROW_DRAFT_PREV_NOT_PROVIDED ? getAtPath(draft, errorPath) : prevRow\n const next: Record<string, unknown> = isPlainObject(prev) ? { ...(prev as any) } : {}\n\n const out: RowDraft = {\n listPath: list.listPath,\n listIndexPath: list.listIndexPath,\n parentRowId: list.parentRowId,\n index,\n errorBasePath: list.errorBasePath,\n errorPath,\n prev,\n next,\n stepId,\n removed: false,\n }\n rowDrafts.set(errorPath, out)\n return out\n }\n\n const applyScopedRowPatch = (\n row: RowDraft,\n keysFromDeps: ReadonlySet<string>,\n patchObj: Record<string, unknown> | undefined,\n ): void => {\n if (keysFromDeps.size === 0) return\n\n const patchKeys = patchObj ? Object.keys(patchObj) : []\n const existingKeys = Object.keys(row.next).filter((k) => k !== '$rowId')\n\n const keysToApply = new Set<string>()\n for (const key of existingKeys) {\n if (keysFromDeps.has(key)) keysToApply.add(key)\n }\n for (const key of patchKeys) {\n if (keysFromDeps.has(key)) keysToApply.add(key)\n }\n\n if (keysToApply.size === 0) return\n\n for (const key of keysToApply) {\n const v = normalizeErrorValue(patchObj?.[key])\n if (v === undefined) {\n delete row.next[key]\n } else {\n row.next[key] = v\n }\n }\n }\n\n for (const check of selectedChecks) {\n const scopeFieldPath = check.fieldPath\n\n // list-scope check: write back into `$list/rows[]` (errors.<listPath>.$list / errors.<listPath>.rows[i].*).\n const listCfg = listConfigByPath.get(scopeFieldPath)\n if (listCfg) {\n const listPath = scopeFieldPath\n const listInstances = (() => {\n if (hasRoot) return enumerateAllListInstances(listPath)\n if (listBindingsAll.has(listPath)) return enumerateAllListInstances(listPath)\n\n const keys = new Set<string>()\n for (const k of listBindingsInstances) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n for (const k of indexBindings.keys()) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n\n if (keys.size === 0) return enumerateAllListInstances(listPath)\n\n const out: Array<ListRuntime> = []\n for (const k of keys) {\n const indexPath = instanceIndexPathByKey.get(k)\n const normalized = normalizeInstanceIndexPath(listPath, indexPath)\n if (!normalized) continue\n const rt = getListRuntime(listPath, normalized)\n if (rt) out.push(rt)\n }\n return out\n })()\n\n for (const listRuntime of listInstances) {\n const items = listRuntime.items\n\n const instanceKey = toListInstanceKey(listPath, listRuntime.listIndexPath)\n\n\t // Best-effort changed indices hint for incremental list-scope rules.\n\t // Priority order:\n\t // 1) request-scoped evidence (item/field validate targets)\n\t // 2) txn evidence (Ref.list(...) -> changedIndices derived from recordPatch(valuePath))\n\t const changedIndices: ReadonlyArray<number> | undefined = (() => {\n\t if (hasRoot) return undefined\n\n\t // When the batch is scoped by item/field targets, prefer request-derived bindings (cheapest + explicit).\n\t if (!listBindingsAll.has(listPath) && !listBindingsInstances.has(instanceKey)) {\n\t const set = indexBindings.get(instanceKey)\n\t if (!set || set.size === 0) return undefined\n\t return Array.from(set).sort((a, b) => a - b)\n\t }\n\n\t // Ref.list(...) / list-scope validate: derive from txn dirty evidence.\n\t const ev = ctx.txnDirtyEvidence\n\t const listEv = ev?.list\n\t if (!ev || ev.dirtyAll || !listEv) return undefined\n\t if (listEv.rootTouched.has(instanceKey)) return undefined\n\t const set = listEv.indexBindings.get(instanceKey)\n\t if (!set || set.size === 0) return undefined\n\t return Array.from(set).sort((a, b) => a - b)\n\t })()\n\n const trigger = enableTrace ? toTraitCheckTrigger(ctx.origin, listPath) : undefined\n\n const scopeFieldPathSegments = enableTrace ? normalizeTraitCheckPath(listPath) : undefined\n\n const rowIdMode = enableTrace\n ? toTraitCheckRowIdMode({\n trackBy: listRuntime.trackBy,\n rowIdStore: ctx.rowIdStore,\n })\n : undefined\n\n const degraded =\n enableTrace && trigger && scopeFieldPathSegments && rowIdMode\n ? toTraitCheckDegraded(trigger, scopeFieldPathSegments, rowIdMode)\n : undefined\n\n const next = evalListScopeCheck(\n check,\n items,\n {\n mode,\n state: draft,\n scope: {\n fieldPath: scopeFieldPath,\n listPath,\n listIndexPath: listRuntime.listIndexPath,\n rowIdAt: listRuntime.rowIdAt,\n changedIndices,\n },\n },\n enableTraceDetail\n ? {\n trace: { listPath, errorsBasePath: listRuntime.errorBasePath, errorsRoot: draft },\n }\n : enableTraceLite\n ? { traceLite: true }\n : undefined,\n )\n if (next === RULE_SKIP) continue\n const keysFromDeps = next.touchedKeys\n\n if (\n enableTrace &&\n traceEvents &&\n trigger &&\n scopeFieldPathSegments &&\n rowIdMode &&\n next.traces &&\n next.traces.length > 0\n ) {\n for (const t of next.traces) {\n const data: any = {\n ruleId: t.ruleId,\n scopeFieldPath: scopeFieldPathSegments,\n mode,\n trigger,\n summary: t.summary,\n rowIdMode,\n }\n if (degraded) {\n data.degraded = degraded\n }\n traceEvents.push({\n type: 'trace:trait:check',\n moduleId: ctx.moduleId,\n instanceId: ctx.instanceId,\n txnSeq: ctx.txnSeq,\n txnId: ctx.txnId,\n data,\n })\n }\n }\n\n const listErrorPath = `${listRuntime.errorBasePath}.$list`\n const prevListError = getAtPath(draft, listErrorPath)\n const nextListError = normalizeErrorValue(next.listError)\n\n if (next.touchedListError && !Object.is(prevListError, nextListError)) {\n updates.push({\n errorPath: listErrorPath,\n prev: prevListError,\n next: nextListError,\n stepId: makeStepId(scopeFieldPath),\n })\n }\n\n const rows = next.rows ?? []\n const prevRowsAny = getAtPath(draft, `${listRuntime.errorBasePath}.rows`)\n const prevRows =\n prevRowsAny && typeof prevRowsAny === 'object' && !Array.isArray(prevRowsAny)\n ? (prevRowsAny as any)\n : Array.isArray(prevRowsAny)\n ? prevRowsAny\n : undefined\n\n const hasRelevantKeys = (obj: Record<string, unknown>, deps: ReadonlySet<string>): boolean => {\n for (const k in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, k)) continue\n if (k === '$rowId') continue\n if (deps.has(k)) return true\n }\n return false\n }\n\n const isOnlyRowId = (obj: Record<string, unknown>): boolean => {\n let hasRowId = false\n for (const k in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, k)) continue\n if (k === '$rowId') {\n hasRowId = true\n continue\n }\n return false\n }\n return hasRowId\n }\n\n const rowErrorPrefix = `${listRuntime.errorBasePath}.rows.`\n\n const indicesToVisit = (() => {\n const set = new Set<number>()\n const addIndex = (k: string): void => {\n const i = Number(k)\n if (!Number.isInteger(i) || i < 0) return\n set.add(i)\n }\n\n // Patch indices (sparse by convention).\n if (rows && typeof rows === 'object') {\n for (const k of Object.keys(rows as any)) {\n const v = (rows as any)[k]\n if (v === undefined) continue\n addIndex(k)\n }\n }\n\n // Existing error indices (sparse if we keep delete-holes on clear).\n if (prevRows && typeof prevRows === 'object') {\n for (const k of Object.keys(prevRows as any)) {\n const v = (prevRows as any)[k]\n if (v === undefined) continue\n addIndex(k)\n }\n }\n\n return Array.from(set).sort((a, b) => a - b)\n })()\n\n for (const index of indicesToVisit) {\n const rowErrorPath = `${rowErrorPrefix}${index}`\n const existing = rowDrafts.get(rowErrorPath)\n\n if (index >= items.length) {\n const prevRow =\n existing?.prev ?? (prevRows ? (prevRows as any)[index] : getAtPath(draft, rowErrorPath))\n if (prevRow === undefined && !existing) continue\n const row =\n existing ??\n getOrCreateRowDraft(listRuntime, index, makeStepId(scopeFieldPath, index), prevRow)\n row.removed = true\n for (const key of Object.keys(row.next)) {\n delete row.next[key]\n }\n continue\n }\n\n const patch = (rows as any)[index]\n const patchObj = isPlainObject(patch) ? patch : undefined\n\n if (existing) {\n applyScopedRowPatch(existing, keysFromDeps, patchObj)\n continue\n }\n\n const patchHasRelevant = patchObj && hasRelevantKeys(patchObj as any, keysFromDeps)\n const prevRow = prevRows ? (prevRows as any)[index] : getAtPath(draft, rowErrorPath)\n const prevObj = isPlainObject(prevRow) ? (prevRow as Record<string, unknown>) : undefined\n const prevHasRelevant = prevObj ? hasRelevantKeys(prevObj, keysFromDeps) : false\n const prevOnlyRowId = prevObj ? isOnlyRowId(prevObj) : false\n\n if (patchHasRelevant || prevHasRelevant || prevOnlyRowId) {\n const row = getOrCreateRowDraft(listRuntime, index, makeStepId(scopeFieldPath, index), prevRow)\n applyScopedRowPatch(row, keysFromDeps, patchHasRelevant ? (patchObj as any) : undefined)\n }\n }\n\n continue\n }\n\n continue\n }\n\n // Phase 2: supports list.item scope (\"items[]\" / \"orders.items[]\"), and uses listIndexPath for nested writebacks.\n if (scopeFieldPath.endsWith('[]')) {\n const listPath = scopeFieldPath.slice(0, -2)\n\n const listInstances = (() => {\n if (hasRoot) return enumerateAllListInstances(listPath)\n if (listBindingsAll.has(listPath)) return enumerateAllListInstances(listPath)\n\n const keys = new Set<string>()\n for (const k of listBindingsInstances) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n for (const k of indexBindings.keys()) {\n if (k.startsWith(`${listPath}@@`)) keys.add(k)\n }\n\n if (keys.size === 0) return enumerateAllListInstances(listPath)\n\n const out: Array<ListRuntime> = []\n for (const k of keys) {\n const indexPath = instanceIndexPathByKey.get(k)\n const normalized = normalizeInstanceIndexPath(listPath, indexPath)\n if (!normalized) continue\n const rt = getListRuntime(listPath, normalized)\n if (rt) out.push(rt)\n }\n return out\n })()\n\n const rules = check.meta.rules as Record<string, any>\n const names = Object.keys(rules).sort()\n\n\t for (const listRuntime of listInstances) {\n\t const instanceKey = toListInstanceKey(listPath, listRuntime.listIndexPath)\n\t const indices: ReadonlyArray<number> = (() => {\n\t if (hasRoot) return listRuntime.items.map((_, i) => i)\n\n\t // When the batch is scoped by item/field targets, prefer request-derived bindings.\n\t if (!listBindingsAll.has(listPath) && !listBindingsInstances.has(instanceKey)) {\n\t return Array.from(indexBindings.get(instanceKey) ?? [])\n\t }\n\n\t // Ref.list(...) / list-scope validate: derive from txn dirty evidence.\n\t const ev = ctx.txnDirtyEvidence\n\t const listEv = ev?.list\n\t if (!ev || ev.dirtyAll || !listEv) return listRuntime.items.map((_, i) => i)\n\t if (listEv.rootTouched.has(instanceKey)) return listRuntime.items.map((_, i) => i)\n\t const set = listEv.indexBindings.get(instanceKey)\n\t if (!set || set.size === 0) return []\n\t return Array.from(set).sort((a, b) => a - b)\n\t })()\n\n\t if (indices.length === 0) continue\n\n for (const index of indices) {\n if (index < 0 || index >= listRuntime.items.length) continue\n\n const boundValuePath = `${listRuntime.valuePath}.${index}`\n const input = getAtPath(draft, boundValuePath)\n\n const rowErrorPath = `${listRuntime.errorBasePath}.rows.${index}`\n const prevRow = getAtPath(draft, rowErrorPath)\n const prevObj = isPlainObject(prevRow) ? (prevRow as Record<string, unknown>) : undefined\n const prevOnlyRowId =\n isPlainObject(prevRow) && Object.keys(prevRow).length === 1 && Object.keys(prevRow)[0] === '$rowId'\n\n let rowDraft: RowDraft | undefined = undefined\n let lockedKeys: Set<string> | undefined = undefined\n\n const ctxForRule: RuleContext = {\n mode,\n state: draft,\n scope: { fieldPath: scopeFieldPath, listPath, listIndexPath: listRuntime.listIndexPath, index },\n }\n\n const ensureRowDraft = (): RowDraft => {\n if (rowDraft) return rowDraft\n rowDraft = getOrCreateRowDraft(listRuntime, index, makeStepId(scopeFieldPath, index))\n return rowDraft\n }\n\n for (const name of names) {\n const rule = rules[name]\n try {\n const out =\n typeof rule === 'function'\n ? rule(input, ctxForRule)\n : rule && typeof rule === 'object'\n ? rule.validate(input, ctxForRule)\n : undefined\n\n if (out === RULE_SKIP) continue\n\n const keys = collectRuleKeysFromDeps(rule, listPath)\n if (keys.length === 0) continue\n\n const patchObj = isPlainObject(out) ? (out as Record<string, unknown>) : undefined\n const patchHasRelevant =\n patchObj && Object.keys(patchObj).some((k) => k !== '$rowId' && keys.includes(k))\n const prevHasRelevant =\n prevObj && Object.keys(prevObj).some((k) => k !== '$rowId' && keys.includes(k))\n\n if (!rowDraft && !patchHasRelevant && !prevHasRelevant && !prevOnlyRowId) {\n continue\n }\n\n const row = ensureRowDraft()\n for (const key of keys) {\n if (key === '$rowId') continue\n if (lockedKeys?.has(key)) continue\n const v = normalizeErrorValue(patchObj?.[key])\n if (v === undefined) {\n delete row.next[key]\n } else {\n row.next[key] = v\n if (!lockedKeys) lockedKeys = new Set<string>()\n lockedKeys.add(key)\n }\n }\n } catch {\n // Rule runtime error: keep it a no-op to avoid producing a partial error tree.\n // Diagnostics and degrade handling are handled by DebugSink/DevtoolsHub in later phases.\n }\n }\n }\n }\n\n continue\n }\n\n const input = scopeFieldPath === '$root' ? draft : getAtPath(draft, scopeFieldPath)\n\n const nextError = evalCheck(check, input, {\n mode,\n state: draft,\n scope: { fieldPath: scopeFieldPath },\n })\n if (nextError === RULE_SKIP) continue\n\n const writebackPath = (() => {\n const wb = (check as any)?.meta?.writeback\n const p = wb && typeof wb === 'object' ? (wb as any).path : undefined\n return typeof p === 'string' && p.startsWith('errors.') ? p : undefined\n })()\n\n const errorPath = writebackPath ?? `errors.${scopeFieldPath}`\n const prev = getAtPath(draft, errorPath)\n\n if (!Object.is(prev, nextError)) {\n updates.push({\n errorPath,\n prev,\n next: nextError,\n stepId: makeStepId(scopeFieldPath),\n })\n }\n }\n\n for (const row of rowDrafts.values()) {\n const prevRow = row.prev\n\n const nextRow = (() => {\n if (row.removed) return undefined\n\n delete row.next.$rowId\n const errorKeys = Object.keys(row.next).filter((k) => k !== '$rowId')\n if (errorKeys.length === 0) return undefined\n\n const listRuntime = getListRuntime(row.listPath, row.listIndexPath)\n const item = listRuntime?.items[row.index]\n const rowId = (() => {\n const fromRuntime = listRuntime?.rowIdAt ? listRuntime.rowIdAt(row.index) : undefined\n if (typeof fromRuntime === 'string' && fromRuntime.length > 0) return fromRuntime\n const fromStore = ctx.rowIdStore?.getRowId(row.listPath, row.index, row.parentRowId)\n if (typeof fromStore === 'string' && fromStore.length > 0) return fromStore\n return String(row.index)\n })()\n\n const nextRowRaw: Record<string, unknown> = { $rowId: rowId, ...row.next }\n return isPlainObject(prevRow) && shallowEqualPlainObject(prevRow, nextRowRaw) ? prevRow : nextRowRaw\n })()\n\n if (!Object.is(prevRow, nextRow)) {\n updates.push({\n errorPath: row.errorPath,\n prev: prevRow,\n next: nextRow,\n stepId: row.stepId,\n })\n }\n }\n\n if (updates.length === 0) {\n return\n }\n\n const reason: PatchReason = 'unknown'\n\n const prevFormErrorCount =\n draft &&\n typeof draft === 'object' &&\n (draft as any).$form &&\n typeof (draft as any).$form === 'object' &&\n !Array.isArray((draft as any).$form) &&\n typeof (draft as any).$form.errorCount === 'number'\n ? ((draft as any).$form.errorCount as number)\n : undefined\n\n const errorCountDelta =\n prevFormErrorCount === undefined\n ? 0\n : updates.reduce((acc, u) => acc + (countErrorLeaves(u.next) - countErrorLeaves(u.prev)), 0)\n\n const nextState = create(draft, (nextDraft) => {\n for (const u of updates) {\n if (u.next === undefined) {\n unsetAtPathMutating(nextDraft, u.errorPath)\n } else {\n setAtPathMutating(nextDraft, u.errorPath, u.next)\n }\n }\n\n if (prevFormErrorCount !== undefined && errorCountDelta !== 0) {\n const meta = nextDraft.$form\n if (meta && typeof meta === 'object' && !Array.isArray(meta)) {\n meta.errorCount = Math.max(0, prevFormErrorCount + errorCountDelta)\n }\n }\n }) as unknown as S\n\n ctx.setDraft(nextState)\n\n // Patch evidence for dirty-set scheduling:\n // - Nested `errors.*` paths are dynamic (Schema.Any) and are typically not present in FieldPathIdRegistry.\n // - Recording them verbatim would degrade the whole txn to dirtyAll (fallbackPolicy), which is both noisy and expensive.\n // - For derived error writebacks, recording the canonical root `errors` anchor is sufficient.\n const prevErrorsRoot = (draft as any)?.errors\n const nextErrorsRoot = (nextState as any)?.errors\n ctx.recordPatch(['errors'], reason, prevErrorsRoot, nextErrorsRoot, 'trait:validate')\n })\n\n if (traceEvents && traceEvents.length > 0) {\n yield* Effect.forEach(traceEvents, (event) => Debug.record(event), {\n discard: true,\n })\n }\n })\n","import type { StateTraitProgram } from './model.js'\n\n/**\n * DependencyGraph (Phase 2 skeleton).\n *\n * Notes:\n * - build.ts already records deps/link edges in Graph.edges.\n * - This module only normalizes edges into an adjacency list usable for reverse-closure traversal.\n * - Later phases will add stricter node/edge models, cycle detection, and richer diagnostics.\n */\nexport interface DependencyGraph {\n readonly _tag: 'StateTraitDependencyGraph'\n /**\n * reverseAdj: adjacency list for quickly finding downstream fields that depend on a given field.\n */\n readonly reverseAdj: ReadonlyMap<string, ReadonlyArray<string>>\n}\n\ntype DependencyGraphCacheEntry = {\n readonly edgesRef: StateTraitProgram<any>['graph']['edges']\n readonly graph: DependencyGraph\n}\n\nconst dependencyGraphCache = new WeakMap<StateTraitProgram<any>, DependencyGraphCacheEntry>()\n\nexport const buildDependencyGraph = (program: StateTraitProgram<any>): DependencyGraph => {\n const edges = program.graph.edges\n const cached = dependencyGraphCache.get(program)\n if (cached && cached.edgesRef === edges) {\n return cached.graph\n }\n\n const reverseAdj = new Map<string, Array<string>>()\n\n for (const edge of edges) {\n const list = reverseAdj.get(edge.from) ?? []\n list.push(edge.to)\n reverseAdj.set(edge.from, list)\n }\n\n const graph: DependencyGraph = {\n _tag: 'StateTraitDependencyGraph',\n reverseAdj,\n }\n\n // Program graph is immutable after build; reuse normalized reverse adjacency across validate windows.\n dependencyGraphCache.set(program, {\n edgesRef: edges,\n graph,\n })\n\n return graph\n}\n","import type { DependencyGraph } from './graph.js'\n\n/**\n * ReverseClosure (Phase 2 skeleton).\n *\n * - Returns target and all fields that directly or indirectly depend on target.\n * - Used by scoped validate / converge triggering.\n */\nexport const reverseClosure = (graph: DependencyGraph, target: string): ReadonlySet<string> => {\n const visited = new Set<string>()\n const queue: Array<string> = [target]\n let cursor = 0\n\n while (cursor < queue.length) {\n const current = queue[cursor]\n cursor += 1\n if (!current) continue\n if (visited.has(current)) continue\n visited.add(current)\n\n const nexts = graph.reverseAdj.get(current)\n if (nexts) {\n for (const n of nexts) queue.push(n)\n }\n }\n\n return visited\n}\n","import { Deferred, Effect, Ref, Scope, ServiceMap } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport * as EffectOpCore from './EffectOpCore.js'\nimport * as TaskRunner from './TaskRunner.js'\nimport type { ConcurrencyDiagnostics } from './ConcurrencyDiagnostics.js'\nimport type { StateTransactionOverrides } from './env.js'\nimport type { ResolvedConcurrencyPolicy } from './ModuleRuntime.concurrencyPolicy.js'\n\nexport type TxnLane = 'urgent' | 'nonUrgent'\n\nexport type TxnQueueStartMode = 'direct_idle' | 'direct_handoff' | 'post_visibility_window'\n\nexport type TxnQueueStartTrace = {\n readonly lane: TxnLane\n readonly waiterSeq: number\n readonly enqueueAtMs: number\n readonly startAtMs: number\n readonly queueWaitMs: number\n readonly startMode: TxnQueueStartMode\n readonly visibilityWindowMs?: number\n readonly previousCompletedLane?: TxnLane\n readonly activeLaneAtEnqueue?: TxnLane\n readonly queueDepthAtStart: {\n readonly urgent: number\n readonly nonUrgent: number\n }\n}\n\nexport type TxnQueuePhaseTiming = {\n readonly lane: TxnLane\n readonly waiterSeq: number\n readonly contextLookupMs: number\n readonly resolvePolicyMs: number\n readonly backpressureMs: number\n readonly enqueueBookkeepingMs: number\n readonly queueWaitMs: number\n readonly startHandoffMs: number\n readonly startMode?: TxnQueueStartMode\n readonly activeLaneAtEnqueue?: TxnLane\n readonly previousCompletedLane?: TxnLane\n readonly queueDepthAtStart?: {\n readonly urgent: number\n readonly nonUrgent: number\n }\n}\n\nexport const currentTxnQueuePhaseTiming = ServiceMap.Reference<TxnQueuePhaseTiming | undefined>(\n '@logixjs/core/TxnQueue.currentTxnQueuePhaseTiming',\n {\n defaultValue: () => undefined,\n },\n)\n\nexport interface EnqueueTransaction {\n <A, E>(eff: Effect.Effect<A, E, never>): Effect.Effect<A, E, never>\n <A, E>(lane: TxnLane, eff: Effect.Effect<A, E, never>): Effect.Effect<A, E, never>\n}\n\ntype BackpressureState = {\n readonly backlogCount: number\n readonly waiters: number\n readonly signal: Deferred.Deferred<void>\n}\n\ntype BacklogAcquireAttempt =\n | { readonly _tag: 'acquired' }\n | {\n readonly _tag: 'wait'\n readonly backlogCount: number\n readonly signal: Deferred.Deferred<void>\n }\n\ntype QueueWaiter = {\n readonly lane: TxnLane\n readonly start: Deferred.Deferred<void>\n readonly waiterSeq: number\n readonly enqueueAtMs: number\n readonly activeLaneAtEnqueue?: TxnLane\n}\n\nexport type CapturedTxnRuntimeScope = {\n readonly runtimeLabel: string | undefined\n readonly diagnosticsLevel: Debug.DiagnosticsLevel\n readonly debugSinks: ReadonlyArray<Debug.Sink>\n readonly overrides: StateTransactionOverrides | undefined\n}\n\n/**\n * Builds a \"single-instance transaction queue\":\n * - All entry points (dispatch/source-refresh/...) execute serially through the same FIFO queue.\n * - Callers still experience the entry as a single Effect (preserving the existing API shape).\n * - Tasks must \"never fail\", otherwise the queue consumer fiber would deadlock (so we return results via Deferred/Exit).\n *\n * NOTE: transaction execution happens inside a background queue fiber. To support Provider-local overrides (Tag/Layer)\n * and diagnostics tiers (FiberRef) at the call site, we capture minimal context at enqueue-time and re-provide it to the task.\n */\nexport const makeEnqueueTransaction = (args: {\n readonly moduleId: string | undefined\n readonly instanceId: string\n readonly resolveConcurrencyPolicy: () => Effect.Effect<ResolvedConcurrencyPolicy>\n readonly diagnostics: ConcurrencyDiagnostics\n}): Effect.Effect<EnqueueTransaction, never, Scope.Scope> =>\n Effect.gen(function* () {\n const diagnostics = args.diagnostics\n\n const initialUrgentSignal = yield* Deferred.make<void>()\n const urgentStateRef = yield* Ref.make<BackpressureState>({\n backlogCount: 0,\n waiters: 0,\n signal: initialUrgentSignal,\n })\n\n const initialNonUrgentSignal = yield* Deferred.make<void>()\n const nonUrgentStateRef = yield* Ref.make<BackpressureState>({\n backlogCount: 0,\n waiters: 0,\n signal: initialNonUrgentSignal,\n })\n\n const release = (stateRef: Ref.Ref<BackpressureState>) =>\n Effect.gen(function* () {\n let prevSignal: Deferred.Deferred<void> | undefined\n const nextSignal = yield* Deferred.make<void>()\n yield* Ref.update(stateRef, (s) => {\n const nextBacklogCount = s.backlogCount > 0 ? s.backlogCount - 1 : 0\n if (s.waiters <= 0) {\n return {\n backlogCount: nextBacklogCount,\n waiters: 0,\n signal: s.signal,\n }\n }\n prevSignal = s.signal\n return {\n backlogCount: nextBacklogCount,\n waiters: s.waiters,\n signal: nextSignal,\n }\n })\n if (prevSignal) {\n yield* Deferred.succeed(prevSignal, undefined)\n }\n })\n\n const acquireBacklogSlot = (lane: TxnLane, capacity: number, policy: ResolvedConcurrencyPolicy): Effect.Effect<void> =>\n Effect.gen(function* () {\n const inTxn = yield* Effect.service(TaskRunner.inSyncTransactionFiber).pipe(Effect.orDie)\n if (inTxn) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'state_transaction::enqueue_in_transaction',\n severity: 'error',\n message:\n 'enqueueTransaction is not allowed inside a synchronous StateTransaction body (it may deadlock or violate backpressure constraints).',\n hint: 'Move dispatch/setState calls outside the transaction window, or use a multi-entry pattern (pending → IO → writeback).',\n kind: 'enqueue_in_transaction',\n })\n yield* Effect.die(new Error('enqueueTransaction is not allowed inside a synchronous StateTransaction body'))\n }\n\n const stateRef = lane === 'urgent' ? urgentStateRef : nonUrgentStateRef\n\n let waitedFromMs: number | undefined\n while (true) {\n const attempt = yield* Ref.modify(stateRef, (s): readonly [BacklogAcquireAttempt, BackpressureState] => {\n if (s.backlogCount < capacity) {\n return [\n { _tag: 'acquired' },\n {\n backlogCount: s.backlogCount + 1,\n waiters: s.waiters,\n signal: s.signal,\n },\n ] as const\n }\n\n return [\n { _tag: 'wait', backlogCount: s.backlogCount, signal: s.signal },\n {\n backlogCount: s.backlogCount,\n waiters: s.waiters + 1,\n signal: s.signal,\n },\n ] as const\n })\n\n if (attempt._tag === 'acquired') {\n return\n }\n\n yield* Effect.uninterruptibleMask((restore) =>\n Effect.ensuring(\n restore(\n Effect.gen(function* () {\n const now = Date.now()\n if (waitedFromMs === undefined) {\n waitedFromMs = now\n }\n const saturatedDurationMs = now - waitedFromMs\n\n yield* diagnostics.emitPressureIfNeeded({\n policy,\n trigger: { kind: 'txnQueue', name: `enqueueTransaction.${lane}` },\n backlogCount: attempt.backlogCount,\n saturatedDurationMs,\n })\n\n yield* Deferred.await(attempt.signal)\n }),\n ),\n Ref.update(stateRef, (s) => ({\n backlogCount: s.backlogCount,\n waiters: s.waiters > 0 ? s.waiters - 1 : 0,\n signal: s.signal,\n })),\n ),\n )\n }\n })\n\n // Priority FIFO queue:\n // - Runs each transaction Effect on the *caller fiber* (preserves Provider-local overrides + FiberRef diagnostics).\n // - Serializes per-instance transactions (at most one active at a time).\n // - Urgent lane always wins over non-urgent lane when choosing the next task.\n //\n // Observation-first note:\n // - We keep the scheduler semantics unchanged here.\n // - The only added surface is a slim `trace:txn-queue` start event so perf suites can distinguish\n // \"urgent enqueued late\" vs \"urgent already queued but waited for baton\".\n let currentWaiter: QueueWaiter | undefined = undefined\n let currentLane: TxnLane | undefined = undefined\n let lastCompletedLane: TxnLane | undefined = undefined\n let nextWaiterSeq = 0\n const startTraceByStart = new Map<Deferred.Deferred<void>, TxnQueueStartTrace>()\n const urgentWaitQueue: Array<QueueWaiter> = []\n const nonUrgentWaitQueue: Array<QueueWaiter> = []\n\n const readClockMs = (): number => {\n const perf = globalThis.performance\n if (perf && typeof perf.now === 'function') {\n return perf.now()\n }\n return Date.now()\n }\n\n const nextQueueWaiterSeq = (): number => {\n nextWaiterSeq += 1\n return nextWaiterSeq\n }\n\n const pickNextWaiter = (): QueueWaiter | undefined => {\n if (urgentWaitQueue.length > 0) {\n return urgentWaitQueue.shift()\n }\n if (nonUrgentWaitQueue.length > 0) {\n return nonUrgentWaitQueue.shift()\n }\n return undefined\n }\n\n const recordStartTrace = (waiter: QueueWaiter, startMode: TxnQueueStartMode): void => {\n const startAtMs = readClockMs()\n startTraceByStart.set(waiter.start, {\n lane: waiter.lane,\n waiterSeq: waiter.waiterSeq,\n enqueueAtMs: waiter.enqueueAtMs,\n startAtMs,\n queueWaitMs: Math.max(0, startAtMs - waiter.enqueueAtMs),\n startMode,\n ...(lastCompletedLane ? { previousCompletedLane: lastCompletedLane } : {}),\n ...(waiter.activeLaneAtEnqueue ? { activeLaneAtEnqueue: waiter.activeLaneAtEnqueue } : {}),\n queueDepthAtStart: {\n urgent: urgentWaitQueue.length,\n nonUrgent: nonUrgentWaitQueue.length,\n },\n })\n }\n\n const removeWaiter = (lane: TxnLane, start: Deferred.Deferred<void>): void => {\n const q = lane === 'urgent' ? urgentWaitQueue : nonUrgentWaitQueue\n for (let i = 0; i < q.length; i += 1) {\n if (q[i]?.start === start) {\n q.splice(i, 1)\n return\n }\n }\n }\n\n const emitStartTrace = (\n diagnosticsLevel: Debug.DiagnosticsLevel,\n trace: TxnQueueStartTrace | undefined,\n ): Effect.Effect<void> =>\n !trace\n ? Effect.void\n : diagnosticsLevel === 'off'\n ? Effect.void\n : Debug.record({\n type: 'trace:txn-queue',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n data: trace,\n })\n\n const enqueueAndMaybeStart = (waiter: QueueWaiter): Effect.Effect<void> =>\n Effect.gen(function* () {\n let toStart: QueueWaiter | undefined\n yield* Effect.uninterruptible(\n Effect.sync(() => {\n if (waiter.lane === 'urgent') {\n urgentWaitQueue.push(waiter)\n } else {\n nonUrgentWaitQueue.push(waiter)\n }\n\n if (!currentWaiter) {\n const next = pickNextWaiter()\n if (next) {\n currentWaiter = next\n currentLane = next.lane\n recordStartTrace(next, lastCompletedLane ? 'direct_handoff' : 'direct_idle')\n toStart = next\n }\n }\n }),\n )\n if (toStart) {\n yield* Deferred.succeed(toStart.start, undefined)\n }\n })\n\n const advanceQueue = (lane: TxnLane, start: Deferred.Deferred<void>): Effect.Effect<void> =>\n Effect.gen(function* () {\n let toStart: QueueWaiter | undefined\n let needsVisibilityWindow = false\n yield* Effect.uninterruptible(\n Effect.sync(() => {\n if (currentWaiter?.start === start) {\n currentWaiter = undefined\n currentLane = undefined\n lastCompletedLane = lane\n if (urgentWaitQueue.length > 0) {\n const next = pickNextWaiter()\n if (next) {\n currentWaiter = next\n currentLane = next.lane\n recordStartTrace(next, 'direct_handoff')\n toStart = next\n }\n } else if (nonUrgentWaitQueue.length > 0) {\n needsVisibilityWindow = true\n }\n return\n }\n\n // If the fiber is interrupted before it becomes active, remove it from the wait queue.\n removeWaiter(lane, start)\n\n // Safety: if the system became idle (should not happen unless interrupted races), restart the baton.\n if (!currentWaiter) {\n const next = pickNextWaiter()\n if (next) {\n currentWaiter = next\n currentLane = next.lane\n recordStartTrace(next, lastCompletedLane ? 'direct_handoff' : 'direct_idle')\n toStart = next\n }\n }\n }),\n )\n if (toStart) {\n yield* Deferred.succeed(toStart.start, undefined)\n return\n }\n\n if (needsVisibilityWindow) {\n yield* Effect.yieldNow\n let deferredStart: QueueWaiter | undefined\n yield* Effect.uninterruptible(\n Effect.sync(() => {\n if (currentWaiter) return\n const next = pickNextWaiter()\n if (!next) return\n currentWaiter = next\n currentLane = next.lane\n recordStartTrace(next, 'post_visibility_window')\n deferredStart = next\n }),\n )\n if (deferredStart) {\n yield* Deferred.succeed(deferredStart.start, undefined)\n }\n }\n })\n\n let nextLinkSeq = 0\n const assignLinkId = (existing: string | undefined): string => {\n if (typeof existing === 'string' && existing.length > 0) {\n return existing\n }\n nextLinkSeq += 1\n // Stable and deterministic: never use randomness/time.\n return `${args.instanceId}::l${nextLinkSeq}`\n }\n\n const enqueueTransaction: EnqueueTransaction = <A2, E2>(\n a0: TxnLane | Effect.Effect<A2, E2, never>,\n a1?: Effect.Effect<A2, E2, never>,\n ): Effect.Effect<A2, E2, never> =>\n Effect.gen(function* () {\n const lane: TxnLane = a1 ? (a0 as TxnLane) : 'urgent'\n const eff: Effect.Effect<A2, E2, never> = a1 ? a1 : (a0 as Effect.Effect<A2, E2, never>)\n const stateRef = lane === 'urgent' ? urgentStateRef : nonUrgentStateRef\n\n const contextLookupStartedAtMs = readClockMs()\n const existingLinkId = yield* Effect.service(EffectOpCore.currentLinkId).pipe(Effect.orDie)\n const linkId = assignLinkId(existingLinkId)\n const diagnosticsLevel = yield* Effect.service(Debug.currentDiagnosticsLevel).pipe(Effect.orDie)\n const phaseTimingEnabled = diagnosticsLevel !== 'off'\n const contextLookupMs = phaseTimingEnabled ? Math.max(0, readClockMs() - contextLookupStartedAtMs) : 0\n\n const resolvePolicyStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const policy = yield* args.resolveConcurrencyPolicy()\n const resolvePolicyMs = phaseTimingEnabled ? Math.max(0, readClockMs() - resolvePolicyStartedAtMs) : 0\n const capacity = policy.losslessBackpressureCapacity\n const backpressureStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n yield* (Effect.provideService(acquireBacklogSlot(lane, capacity, policy), EffectOpCore.currentLinkId, linkId) as Effect.Effect<void, never, never>)\n const backpressureMs = phaseTimingEnabled ? Math.max(0, readClockMs() - backpressureStartedAtMs) : 0\n\n const enqueueBookkeepingStartedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const start = yield* Deferred.make<void>()\n const waiter: QueueWaiter = {\n lane,\n start,\n waiterSeq: nextQueueWaiterSeq(),\n enqueueAtMs: readClockMs(),\n ...(currentLane ? { activeLaneAtEnqueue: currentLane } : {}),\n }\n yield* (Effect.provideService(enqueueAndMaybeStart(waiter), EffectOpCore.currentLinkId, linkId) as Effect.Effect<void, never, never>)\n const enqueueBookkeepingMs = phaseTimingEnabled ? Math.max(0, readClockMs() - enqueueBookkeepingStartedAtMs) : 0\n\n return yield* (Effect.provideService(\n Effect.uninterruptibleMask((restore) =>\n Effect.ensuring(\n Effect.flatMap(restore(Deferred.await(start)), () => {\n const startTrace = startTraceByStart.get(start)\n startTraceByStart.delete(start)\n const resumedAtMs = phaseTimingEnabled ? readClockMs() : 0\n const queuePhaseTiming: TxnQueuePhaseTiming | undefined = phaseTimingEnabled\n ? {\n lane,\n waiterSeq: waiter.waiterSeq,\n contextLookupMs,\n resolvePolicyMs,\n backpressureMs,\n enqueueBookkeepingMs,\n queueWaitMs: startTrace?.queueWaitMs ?? 0,\n startHandoffMs: startTrace ? Math.max(0, resumedAtMs - startTrace.startAtMs) : 0,\n ...(startTrace?.startMode ? { startMode: startTrace.startMode } : null),\n ...(startTrace?.activeLaneAtEnqueue ? { activeLaneAtEnqueue: startTrace.activeLaneAtEnqueue } : null),\n ...(startTrace?.previousCompletedLane ? { previousCompletedLane: startTrace.previousCompletedLane } : null),\n ...(startTrace?.queueDepthAtStart ? { queueDepthAtStart: startTrace.queueDepthAtStart } : null),\n }\n : undefined\n return emitStartTrace(diagnosticsLevel, startTrace).pipe(\n Effect.flatMap(() =>\n restore(\n queuePhaseTiming\n ? Effect.provideService(eff, currentTxnQueuePhaseTiming, queuePhaseTiming)\n : eff,\n ),\n ),\n )\n }),\n Effect.uninterruptible(advanceQueue(lane, start).pipe(Effect.flatMap(() => release(stateRef)))),\n ),\n ),\n EffectOpCore.currentLinkId,\n linkId,\n ) as Effect.Effect<A2, E2, never>)\n })\n\n return enqueueTransaction\n })\n","import { Effect, Exit, type ServiceMap } from 'effect'\n\nexport const runSyncExitWithServices = <A, E>(\n effect: Effect.Effect<A, E, any>,\n services: ServiceMap.ServiceMap<any>,\n): Exit.Exit<A, E> => Effect.runSyncExit(Effect.provideServices(effect, services) as Effect.Effect<A, E, never>)\n","import { Effect, Option } from 'effect'\nimport type { ConcurrencyDiagnostics } from './ConcurrencyDiagnostics.js'\nimport {\n SchedulingPolicySurfaceOverridesTag,\n SchedulingPolicySurfaceTag,\n type SchedulingPolicyLimit,\n type SchedulingPolicySurface,\n type SchedulingPolicySurfaceOverrides,\n type SchedulingPolicySurfacePatch,\n} from './env.js'\nimport { normalizeBoolean, normalizePositiveInt, normalizePositiveNumber } from './normalize.js'\n\nexport type SchedulingPolicySurfaceConfigScope = 'builtin' | 'runtime_default' | 'runtime_module' | 'provider'\nexport type ConcurrencyPolicyConfigScope = SchedulingPolicySurfaceConfigScope\n\nexport type ResolvedSchedulingPolicySurface = {\n readonly concurrencyLimit: SchedulingPolicyLimit\n readonly losslessBackpressureCapacity: number\n readonly allowUnbounded: boolean\n readonly pressureWarningThreshold: {\n readonly backlogCount: number\n readonly backlogDurationMs: number\n }\n readonly warningCooldownMs: number\n readonly configScope: SchedulingPolicySurfaceConfigScope\n /** Field-level scope for the effective concurrency limit. */\n readonly concurrencyLimitScope: SchedulingPolicySurfaceConfigScope\n /** The originally requested concurrency limit (for explaining the unbounded gate). */\n readonly requestedConcurrencyLimit: SchedulingPolicyLimit\n /** Field-level scope for the originally requested concurrency limit. */\n readonly requestedConcurrencyLimitScope: SchedulingPolicySurfaceConfigScope\n /** Field-level scope for allowUnbounded. */\n readonly allowUnboundedScope: SchedulingPolicySurfaceConfigScope\n}\nexport type ResolvedConcurrencyPolicy = ResolvedSchedulingPolicySurface\n\nconst normalizeConcurrencyLimit = (v: unknown): SchedulingPolicyLimit | undefined =>\n v === 'unbounded' ? 'unbounded' : normalizePositiveInt(v)\n\ntype ResolvedPolicyCache = {\n readonly runtimeDefaultFingerprint: string\n readonly runtimeModuleFingerprint: string\n readonly providerDefaultFingerprint: string\n readonly providerModuleFingerprint: string\n readonly resolved: ResolvedSchedulingPolicySurface\n}\n\nconst patchFingerprint = (\n patch: SchedulingPolicySurface | SchedulingPolicySurfacePatch | SchedulingPolicySurfaceOverrides | undefined,\n): string => {\n if (!patch) return ''\n const threshold = (patch as any).pressureWarningThreshold\n const thresholdCount =\n threshold && typeof threshold === 'object' ? String((threshold as any).backlogCount ?? '') : ''\n const thresholdDuration =\n threshold && typeof threshold === 'object' ? String((threshold as any).backlogDurationMs ?? '') : ''\n return [\n String((patch as any).concurrencyLimit ?? ''),\n String((patch as any).losslessBackpressureCapacity ?? ''),\n String((patch as any).allowUnbounded ?? ''),\n thresholdCount,\n thresholdDuration,\n String((patch as any).warningCooldownMs ?? ''),\n ].join('|')\n}\n\nexport const makeResolveSchedulingPolicySurface = (args: {\n /** Original options.moduleId (may be undefined); used for module overrides map lookup. */\n readonly moduleId: string | undefined\n /** Optional: one-shot audit diagnostics for unbounded opt-in/blocked. */\n readonly diagnostics?: ConcurrencyDiagnostics\n}): (() => Effect.Effect<ResolvedSchedulingPolicySurface>) => {\n const builtinConcurrencyLimit: SchedulingPolicyLimit = 16\n const builtinLosslessBackpressureCapacity = 4096\n const builtinAllowUnbounded = false\n const builtinThresholdBacklogCount = 1000\n const builtinThresholdBacklogDurationMs = 5000\n const builtinWarningCooldownMs = 30_000\n let cache: ResolvedPolicyCache | undefined\n\n return () =>\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(SchedulingPolicySurfaceTag)\n const overridesOpt = yield* Effect.serviceOption(SchedulingPolicySurfaceOverridesTag)\n\n const runtimeConfig: SchedulingPolicySurface | undefined = Option.isSome(runtimeConfigOpt)\n ? runtimeConfigOpt.value\n : undefined\n const providerOverrides: SchedulingPolicySurfaceOverrides | undefined = Option.isSome(overridesOpt)\n ? overridesOpt.value\n : undefined\n\n let concurrencyLimit: SchedulingPolicyLimit = builtinConcurrencyLimit\n let concurrencyLimitScope: SchedulingPolicySurfaceConfigScope = 'builtin'\n let lastBoundedConcurrencyLimit = builtinConcurrencyLimit as number\n let lastBoundedConcurrencyLimitScope: SchedulingPolicySurfaceConfigScope = 'builtin'\n\n let losslessBackpressureCapacity = builtinLosslessBackpressureCapacity\n let allowUnbounded = builtinAllowUnbounded\n let allowUnboundedScope: SchedulingPolicySurfaceConfigScope = 'builtin'\n let thresholdBacklogCount = builtinThresholdBacklogCount\n let thresholdBacklogDurationMs = builtinThresholdBacklogDurationMs\n let warningCooldownMs = builtinWarningCooldownMs\n\n let configScope: SchedulingPolicySurfaceConfigScope = 'builtin'\n\n const applyPatch = (\n patch: SchedulingPolicySurface | SchedulingPolicySurfacePatch | SchedulingPolicySurfaceOverrides | undefined,\n scope: SchedulingPolicySurfaceConfigScope,\n ): void => {\n if (!patch) return\n let changed = false\n\n const limit = normalizeConcurrencyLimit((patch as any).concurrencyLimit)\n if (limit) {\n concurrencyLimit = limit\n concurrencyLimitScope = scope\n if (limit !== 'unbounded') {\n lastBoundedConcurrencyLimit = limit\n lastBoundedConcurrencyLimitScope = scope\n }\n changed = true\n }\n\n const capacity = normalizePositiveInt((patch as any).losslessBackpressureCapacity)\n if (capacity != null) {\n losslessBackpressureCapacity = capacity\n changed = true\n }\n\n const allow = normalizeBoolean((patch as any).allowUnbounded)\n if (allow != null) {\n allowUnbounded = allow\n allowUnboundedScope = scope\n changed = true\n }\n\n const threshold = (patch as any).pressureWarningThreshold\n if (threshold && typeof threshold === 'object') {\n const count = normalizePositiveInt((threshold as any).backlogCount)\n if (count != null) {\n thresholdBacklogCount = count\n changed = true\n }\n\n const duration = normalizePositiveNumber((threshold as any).backlogDurationMs)\n if (duration != null) {\n thresholdBacklogDurationMs = duration\n changed = true\n }\n }\n\n const cooldownMs = normalizePositiveNumber((patch as any).warningCooldownMs)\n if (cooldownMs != null) {\n warningCooldownMs = cooldownMs\n changed = true\n }\n\n if (changed) {\n configScope = scope\n }\n }\n\n const moduleId = args.moduleId\n const runtimeModulePatch: SchedulingPolicySurfacePatch | undefined =\n moduleId && runtimeConfig?.overridesByModuleId ? runtimeConfig.overridesByModuleId[moduleId] : undefined\n const providerModulePatch: SchedulingPolicySurfacePatch | undefined =\n moduleId && providerOverrides?.overridesByModuleId ? providerOverrides.overridesByModuleId[moduleId] : undefined\n const runtimeDefaultFingerprint = patchFingerprint(runtimeConfig)\n const runtimeModuleFingerprint = patchFingerprint(runtimeModulePatch)\n const providerDefaultFingerprint = patchFingerprint(providerOverrides)\n const providerModuleFingerprint = patchFingerprint(providerModulePatch)\n\n if (\n cache &&\n cache.runtimeDefaultFingerprint === runtimeDefaultFingerprint &&\n cache.runtimeModuleFingerprint === runtimeModuleFingerprint &&\n cache.providerDefaultFingerprint === providerDefaultFingerprint &&\n cache.providerModuleFingerprint === providerModuleFingerprint\n ) {\n if (args.diagnostics) {\n yield* args.diagnostics.emitUnboundedPolicyIfNeeded({\n policy: cache.resolved,\n trigger: { kind: 'concurrencyPolicy', name: 'resolve' },\n })\n }\n return cache.resolved\n }\n\n // priority: provider > runtime_module > runtime_default > builtin\n applyPatch(runtimeConfig, 'runtime_default')\n applyPatch(runtimeModulePatch, 'runtime_module')\n applyPatch(providerOverrides, 'provider')\n applyPatch(providerModulePatch, 'provider')\n\n const requestedConcurrencyLimit = concurrencyLimit\n const requestedConcurrencyLimitScope = concurrencyLimitScope\n\n // Unbounded gate: effective unbounded requires an explicit allowUnbounded=true (FR-004).\n if (typeof concurrencyLimit === 'string' && !allowUnbounded) {\n concurrencyLimit = lastBoundedConcurrencyLimit\n concurrencyLimitScope = lastBoundedConcurrencyLimitScope\n }\n\n // NOTE: diagnostics may add implementation-level metrics (e.g. \"saturated duration\"); the resolver only decides configuration.\n const resolved: ResolvedSchedulingPolicySurface = {\n concurrencyLimit,\n losslessBackpressureCapacity,\n allowUnbounded,\n pressureWarningThreshold: {\n backlogCount: thresholdBacklogCount,\n backlogDurationMs: thresholdBacklogDurationMs,\n },\n warningCooldownMs,\n configScope,\n concurrencyLimitScope,\n requestedConcurrencyLimit,\n requestedConcurrencyLimitScope,\n allowUnboundedScope,\n }\n\n if (args.diagnostics) {\n yield* args.diagnostics.emitUnboundedPolicyIfNeeded({\n policy: resolved,\n trigger: { kind: 'concurrencyPolicy', name: 'resolve' },\n })\n }\n\n cache = {\n runtimeDefaultFingerprint,\n runtimeModuleFingerprint,\n providerDefaultFingerprint,\n providerModuleFingerprint,\n resolved,\n }\n\n return resolved\n })\n}\n\nexport const makeResolveConcurrencyPolicy = makeResolveSchedulingPolicySurface\n","import { Effect, Option } from 'effect'\nimport {\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n type StateTransactionOverrides,\n type TxnLanesPatch,\n} from './env.js'\nimport { normalizeBoolean, normalizeNonNegativeNumber } from './normalize.js'\n\nexport type TxnLanePolicyScope = 'provider' | 'runtime_module' | 'runtime_default' | 'builtin'\n\nexport type TxnLaneQueueMode = 'fifo' | 'lanes'\n\nexport type TxnLaneYieldStrategy = 'baseline' | 'inputPending'\n\nexport type ResolvedTxnLanePolicy = {\n readonly enabled: boolean\n readonly overrideMode?: 'forced_off' | 'forced_sync'\n readonly configScope: TxnLanePolicyScope\n readonly budgetMs: number\n readonly debounceMs: number\n readonly maxLagMs: number\n readonly allowCoalesce: boolean\n readonly yieldStrategy: TxnLaneYieldStrategy\n readonly queueMode: TxnLaneQueueMode\n}\n\ntype ModuleStateTransactionOptions =\n | {\n readonly txnLanes?: TxnLanesPatch\n }\n | undefined\n\nconst normalizeMs = normalizeNonNegativeNumber\nconst normalizeBool = normalizeBoolean\n\nexport const makeResolveTxnLanePolicy = (args: {\n /** Raw options.moduleId (may be undefined), used to query overrides maps. */\n readonly moduleId: string | undefined\n readonly stateTransaction: ModuleStateTransactionOptions\n}): (() => Effect.Effect<ResolvedTxnLanePolicy>) => {\n const moduleRuntimeDefaultPatch = args.stateTransaction?.txnLanes\n\n const builtinEnabled = true\n const builtinBudgetMs = 1\n const builtinDebounceMs = 0\n const builtinMaxLagMs = 50\n const builtinAllowCoalesce = true\n const builtinYieldStrategy: TxnLaneYieldStrategy = 'baseline'\n\n return () =>\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(StateTransactionConfigTag)\n const overridesOpt = yield* Effect.serviceOption(StateTransactionOverridesTag)\n\n const runtimeConfig = Option.isSome(runtimeConfigOpt) ? runtimeConfigOpt.value : undefined\n const providerOverrides = Option.isSome(overridesOpt) ? overridesOpt.value : undefined\n\n let enabled = builtinEnabled\n let budgetMs = builtinBudgetMs\n let debounceMs = builtinDebounceMs\n let maxLagMs = builtinMaxLagMs\n let allowCoalesce = builtinAllowCoalesce\n let yieldStrategy: TxnLaneYieldStrategy = builtinYieldStrategy\n\n let overrideMode: ResolvedTxnLanePolicy['overrideMode'] = undefined\n\n let configScope: TxnLanePolicyScope = 'builtin'\n\n const applyPatch = (\n patch: TxnLanesPatch | StateTransactionOverrides | undefined,\n scope: TxnLanePolicyScope,\n ): void => {\n if (!patch) return\n\n const raw = (patch as any).txnLanes != null ? (patch as any).txnLanes : patch\n if (!raw || typeof raw !== 'object') return\n\n let changed = false\n\n const nextEnabled = normalizeBool((raw as any).enabled)\n if (nextEnabled != null) {\n enabled = nextEnabled\n changed = true\n }\n\n const nextOverrideMode = (raw as any).overrideMode\n if (nextOverrideMode === 'forced_off' || nextOverrideMode === 'forced_sync') {\n overrideMode = nextOverrideMode\n changed = true\n }\n\n const nextBudgetMs = normalizeMs((raw as any).budgetMs)\n if (nextBudgetMs != null) {\n budgetMs = nextBudgetMs\n changed = true\n }\n\n const nextDebounceMs = normalizeMs((raw as any).debounceMs)\n if (nextDebounceMs != null) {\n debounceMs = nextDebounceMs\n changed = true\n }\n\n const nextMaxLagMs = normalizeMs((raw as any).maxLagMs)\n if (nextMaxLagMs != null) {\n maxLagMs = nextMaxLagMs\n changed = true\n }\n\n const nextAllowCoalesce = normalizeBool((raw as any).allowCoalesce)\n if (nextAllowCoalesce != null) {\n allowCoalesce = nextAllowCoalesce\n changed = true\n }\n\n const nextYieldStrategy = (raw as any).yieldStrategy\n if (nextYieldStrategy === 'baseline' || nextYieldStrategy === 'inputPending') {\n yieldStrategy = nextYieldStrategy\n changed = true\n }\n\n if (changed) {\n configScope = scope\n }\n }\n\n const moduleId = args.moduleId\n const runtimeModulePatch =\n moduleId && runtimeConfig?.txnLanesOverridesByModuleId\n ? runtimeConfig.txnLanesOverridesByModuleId[moduleId]\n : undefined\n const providerModulePatch =\n moduleId && providerOverrides?.txnLanesOverridesByModuleId\n ? providerOverrides.txnLanesOverridesByModuleId[moduleId]\n : undefined\n\n // priority: provider > runtime_module > runtime_default > builtin\n applyPatch(moduleRuntimeDefaultPatch, 'runtime_default')\n applyPatch(runtimeConfig, 'runtime_default')\n applyPatch(runtimeModulePatch, 'runtime_module')\n applyPatch(providerOverrides, 'provider')\n applyPatch(providerModulePatch, 'provider')\n\n const effectiveEnabled = overrideMode ? false : enabled\n const queueMode: TxnLaneQueueMode = effectiveEnabled ? 'lanes' : 'fifo'\n\n return {\n enabled: effectiveEnabled,\n ...(overrideMode ? { overrideMode } : {}),\n configScope,\n budgetMs,\n debounceMs,\n maxLagMs,\n allowCoalesce,\n yieldStrategy,\n queueMode,\n }\n })\n}\n","import { Effect, Option } from 'effect'\nimport {\n StateTransactionConfigTag,\n StateTransactionOverridesTag,\n type StateTransactionOverrides,\n type StateTransactionTraitConvergeOverrides,\n type TraitConvergeTimeSlicingPatch,\n} from './env.js'\nimport { normalizePositiveNumber } from './normalize.js'\nimport type { TraitConvergeConfigScope, TraitConvergeRequestedMode } from '../../state-trait/model.js'\n\nexport type ResolvedTraitConvergeTimeSlicingConfig = {\n readonly enabled: boolean\n readonly debounceMs: number\n readonly maxLagMs: number\n}\n\nexport type ResolvedTraitConvergeConfig = {\n readonly traitConvergeMode: TraitConvergeRequestedMode\n readonly traitConvergeBudgetMs: number\n readonly traitConvergeDecisionBudgetMs: number\n readonly traitConvergeTimeSlicing: ResolvedTraitConvergeTimeSlicingConfig\n readonly configScope: TraitConvergeConfigScope\n}\n\ntype ModuleStateTransactionOptions =\n | {\n readonly traitConvergeBudgetMs?: number\n readonly traitConvergeDecisionBudgetMs?: number\n readonly traitConvergeMode?: 'auto' | 'full' | 'dirty'\n readonly traitConvergeTimeSlicing?: TraitConvergeTimeSlicingPatch\n }\n | undefined\n\nconst normalizePositiveMs = normalizePositiveNumber\n\nconst normalizeRequestedMode = (mode: unknown): TraitConvergeRequestedMode | undefined =>\n mode === 'auto' || mode === 'full' || mode === 'dirty' ? mode : undefined\n\nconst normalizeBool = (value: unknown): boolean | undefined => (typeof value === 'boolean' ? value : undefined)\n\nexport const makeResolveTraitConvergeConfig = (args: {\n /** Original options.moduleId (may be undefined); used for module overrides map lookup. */\n readonly moduleId: string | undefined\n readonly stateTransaction: ModuleStateTransactionOptions\n}): (() => Effect.Effect<ResolvedTraitConvergeConfig>) => {\n const builtinTraitConvergeBudgetMs: number = normalizePositiveMs(args.stateTransaction?.traitConvergeBudgetMs) ?? 200\n const builtinTraitConvergeDecisionBudgetMs: number =\n normalizePositiveMs(args.stateTransaction?.traitConvergeDecisionBudgetMs) ?? 0.5\n const builtinTraitConvergeMode: TraitConvergeRequestedMode =\n normalizeRequestedMode(args.stateTransaction?.traitConvergeMode) ?? 'auto'\n\n const builtinTimeSlicingEnabled: boolean =\n normalizeBool(args.stateTransaction?.traitConvergeTimeSlicing?.enabled) ?? false\n const builtinTimeSlicingDebounceMs: number =\n normalizePositiveMs(args.stateTransaction?.traitConvergeTimeSlicing?.debounceMs) ?? 16\n const builtinTimeSlicingMaxLagMs: number =\n normalizePositiveMs(args.stateTransaction?.traitConvergeTimeSlicing?.maxLagMs) ?? 200\n\n return () =>\n Effect.gen(function* () {\n const runtimeConfigOpt = yield* Effect.serviceOption(StateTransactionConfigTag)\n const overridesOpt = yield* Effect.serviceOption(StateTransactionOverridesTag)\n\n const runtimeConfig = Option.isSome(runtimeConfigOpt) ? runtimeConfigOpt.value : undefined\n const providerOverrides = Option.isSome(overridesOpt) ? overridesOpt.value : undefined\n\n let traitConvergeMode = builtinTraitConvergeMode\n let traitConvergeBudgetMs = builtinTraitConvergeBudgetMs\n let traitConvergeDecisionBudgetMs = builtinTraitConvergeDecisionBudgetMs\n let traitConvergeTimeSlicingEnabled = builtinTimeSlicingEnabled\n let traitConvergeTimeSlicingDebounceMs = builtinTimeSlicingDebounceMs\n let traitConvergeTimeSlicingMaxLagMs = builtinTimeSlicingMaxLagMs\n\n let configScope: TraitConvergeConfigScope = 'builtin'\n\n const applyPatch = (\n patch: StateTransactionTraitConvergeOverrides | StateTransactionOverrides | undefined,\n scope: TraitConvergeConfigScope,\n ): void => {\n if (!patch) return\n let changed = false\n\n const mode = normalizeRequestedMode((patch as any).traitConvergeMode)\n if (mode) {\n traitConvergeMode = mode\n changed = true\n }\n\n const budgetMs = normalizePositiveMs((patch as any).traitConvergeBudgetMs)\n if (budgetMs != null) {\n traitConvergeBudgetMs = budgetMs\n changed = true\n }\n\n const decisionBudgetMs = normalizePositiveMs((patch as any).traitConvergeDecisionBudgetMs)\n if (decisionBudgetMs != null) {\n traitConvergeDecisionBudgetMs = decisionBudgetMs\n changed = true\n }\n\n const timeSlicing = (patch as any).traitConvergeTimeSlicing\n if (timeSlicing && typeof timeSlicing === 'object') {\n const enabled = normalizeBool((timeSlicing as any).enabled)\n if (enabled != null) {\n traitConvergeTimeSlicingEnabled = enabled\n changed = true\n }\n\n const debounceMs = normalizePositiveMs((timeSlicing as any).debounceMs)\n if (debounceMs != null) {\n traitConvergeTimeSlicingDebounceMs = debounceMs\n changed = true\n }\n\n const maxLagMs = normalizePositiveMs((timeSlicing as any).maxLagMs)\n if (maxLagMs != null) {\n traitConvergeTimeSlicingMaxLagMs = maxLagMs\n changed = true\n }\n }\n\n if (changed) {\n configScope = scope\n }\n }\n\n const moduleId = args.moduleId\n const runtimeModulePatch =\n moduleId && runtimeConfig?.traitConvergeOverridesByModuleId\n ? runtimeConfig.traitConvergeOverridesByModuleId[moduleId]\n : undefined\n const providerModulePatch =\n moduleId && providerOverrides?.traitConvergeOverridesByModuleId\n ? providerOverrides.traitConvergeOverridesByModuleId[moduleId]\n : undefined\n\n // priority: provider > runtime_module > runtime_default > builtin\n applyPatch(runtimeConfig, 'runtime_default')\n applyPatch(runtimeModulePatch, 'runtime_module')\n applyPatch(providerOverrides, 'provider')\n applyPatch(providerModulePatch, 'provider')\n\n return {\n traitConvergeMode,\n traitConvergeBudgetMs,\n traitConvergeDecisionBudgetMs,\n traitConvergeTimeSlicing: {\n enabled: traitConvergeTimeSlicingEnabled,\n debounceMs: traitConvergeTimeSlicingDebounceMs,\n maxLagMs: traitConvergeTimeSlicingMaxLagMs,\n },\n configScope,\n }\n })\n}\n","import { Effect } from 'effect'\nimport type { ModuleRuntime as PublicModuleRuntime } from './module.js'\nimport type {\n StateTraitProgram,\n TraitConvergeGenerationEvidence,\n TraitConvergePlanCacheEvidence,\n} from '../../state-trait/model.js'\nimport type * as StateTraitConverge from '../../state-trait/converge.js'\nimport type { RuntimeInternals } from './RuntimeInternals.js'\nimport { setRuntimeInternals } from './runtimeInternalsAccessor.js'\nimport type * as RowId from '../../state-trait/rowid.js'\n\nexport type TraitState = {\n program: StateTraitProgram<any> | undefined\n convergeStaticIrDigest: string | undefined\n convergePlanCache: StateTraitConverge.ConvergePlanCache | undefined\n convergeGeneration: TraitConvergeGenerationEvidence\n pendingCacheMissReason: TraitConvergePlanCacheEvidence['missReason'] | undefined\n /**\n * Number of times the pending miss reason has been updated since the last txn window.\n * Used for generation-thrash self-protection (multiple bumps before any txn runs).\n */\n pendingCacheMissReasonCount: number\n lastConvergeIrKeys: { readonly writersKey: string; readonly depsKey: string } | undefined\n listConfigs: ReadonlyArray<RowId.ListConfig>\n}\n\nexport const installInternalHooks = <S, A>(args: {\n readonly runtime: PublicModuleRuntime<S, A>\n readonly runtimeInternals: RuntimeInternals\n}): Effect.Effect<void, never, never> =>\n Effect.sync(() => {\n const { runtime, runtimeInternals } = args\n\n setRuntimeInternals(runtime as any, runtimeInternals)\n })\n","import { Effect, PubSub, Scope } from 'effect'\nimport { isPrefixOf, normalizeFieldPath, type FieldPath, type FieldPathIdRegistry } from '../../field-path.js'\nimport type { ReadQueryCompiled } from './ReadQuery.js'\nimport type { TxnDirtyEvidenceSnapshot } from './StateTransaction.js'\nimport type { StateChangeWithMeta, StateCommitMeta } from './module.js'\nimport * as Debug from './DebugSink.js'\n\ntype ReadRootKey = string\n\ntype IndexedRootCandidate<S> = {\n readonly selectorId: string\n readonly entry: SelectorEntry<S, any>\n readonly readsForRoot: ReadonlyArray<FieldPath>\n}\n\ntype SelectorEvalEventPolicy = 'always' | 'sampled'\n\ntype SelectorEntry<S, V> = {\n readonly selectorId: string\n readonly readQuery: ReadQueryCompiled<S, V>\n readonly reads: ReadonlyArray<FieldPath>\n readonly readsByRootKey: ReadonlyMap<ReadRootKey, ReadonlyArray<FieldPath>>\n readonly readRootKeys: ReadonlyArray<ReadRootKey>\n readonly hub: PubSub.PubSub<StateChangeWithMeta<V>>\n subscriberCount: number\n lastScheduledTxnSeq: number\n cachedAtTxnSeq: number\n hasValue: boolean\n cachedValue: V | undefined\n}\n\nexport interface SelectorGraph<S> {\n readonly ensureEntry: <V>(\n readQuery: ReadQueryCompiled<S, V>,\n ) => Effect.Effect<SelectorEntry<S, V>, never, Scope.Scope>\n readonly releaseEntry: (selectorId: string) => void\n /**\n * O(1) check: whether any selector entries exist.\n *\n * Important perf contract:\n * - Avoid triggering DirtySet construction on commit when there are no selectors at all.\n */\n readonly hasAnyEntries: () => boolean\n readonly onCommit: (\n state: S,\n meta: StateCommitMeta,\n dirty: TxnDirtyEvidenceSnapshot,\n diagnosticsLevel: Debug.DiagnosticsLevel,\n onSelectorChanged?: (selectorId: string) => void,\n ) => Effect.Effect<void, never, never>\n}\n\nconst getReadRootKeyFromPath = (path: FieldPath): ReadRootKey => path[0] ?? ''\n\nconst overlaps = (a: FieldPath, b: FieldPath): boolean => isPrefixOf(a, b) || isPrefixOf(b, a)\n\nconst isRedundantDirtyRoot = (existingDirtyRoots: ReadonlyArray<FieldPath>, dirtyRoot: FieldPath): boolean => {\n for (const existing of existingDirtyRoots) {\n if (isPrefixOf(existing, dirtyRoot)) {\n return true\n }\n }\n return false\n}\n\nconst upsertDirtyRoot = (existingDirtyRoots: Array<FieldPath>, dirtyRoot: FieldPath): boolean => {\n if (isRedundantDirtyRoot(existingDirtyRoots, dirtyRoot)) {\n return false\n }\n\n let nextLength = 0\n for (let i = 0; i < existingDirtyRoots.length; i++) {\n const existing = existingDirtyRoots[i]!\n if (isPrefixOf(dirtyRoot, existing)) {\n continue\n }\n existingDirtyRoots[nextLength] = existing\n nextLength += 1\n }\n existingDirtyRoots.length = nextLength\n existingDirtyRoots.push(dirtyRoot)\n return true\n}\n\nconst equalsShallowStruct = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true\n if (!a || !b) return false\n if (typeof a !== 'object' || typeof b !== 'object') return false\n if (Array.isArray(a) || Array.isArray(b)) return false\n\n const aObj = a as Record<string, unknown>\n const bObj = b as Record<string, unknown>\n const aKeys = Object.keys(aObj)\n const bKeys = Object.keys(bObj)\n if (aKeys.length !== bKeys.length) return false\n for (const k of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(bObj, k)) return false\n if (!Object.is(aObj[k], bObj[k])) return false\n }\n return true\n}\n\nconst equalsValue = <V>(query: ReadQueryCompiled<any, V>, a: V, b: V): boolean => {\n if (query.equalsKind === 'custom' && typeof query.equals === 'function') {\n return query.equals(a, b)\n }\n if (query.equalsKind === 'shallowStruct') {\n return equalsShallowStruct(a, b)\n }\n return Object.is(a, b)\n}\n\nconst nowMs = (): number => {\n const perf = (globalThis as any).performance as { now?: () => number } | undefined\n if (perf && typeof perf.now === 'function') {\n return perf.now()\n }\n return Date.now()\n}\n\nconst SAMPLED_SELECTOR_EVAL_SLOW_THRESHOLD_MS = 4\n\nconst shouldEvaluateEntryForDirtyRoots = <S>(args: {\n readonly entry: SelectorEntry<S, any>\n readonly dirty: TxnDirtyEvidenceSnapshot\n readonly getDirtyPath: (id: number) => FieldPath | undefined\n readonly hasRegistry: boolean\n}): boolean => {\n if (args.dirty.dirtyAll) return true\n if (args.entry.reads.length === 0) return true\n if (!args.hasRegistry) return true\n\n for (const dirtyPathId of args.dirty.dirtyPathIds) {\n const dirtyPath = args.getDirtyPath(dirtyPathId)\n if (!dirtyPath) return true\n\n const dirtyRootKey = getReadRootKeyFromPath(dirtyPath)\n const readsForRoot = args.entry.readsByRootKey.get(dirtyRootKey)\n if (!readsForRoot || readsForRoot.length === 0) {\n continue\n }\n\n for (const read of readsForRoot) {\n if (overlaps(dirtyPath, read)) {\n return true\n }\n }\n }\n\n return false\n}\n\nconst evaluateEntry = <S>(args: {\n readonly entry: SelectorEntry<S, any>\n readonly selectorId: string\n readonly state: S\n readonly meta: StateCommitMeta\n readonly emitEvalEvent: boolean\n readonly evalEventPolicy: SelectorEvalEventPolicy\n readonly moduleId: string\n readonly instanceId: string\n readonly onSelectorChanged?: (selectorId: string) => void\n}): Effect.Effect<void, never, never> =>\n Effect.gen(function* () {\n let next: any\n const evalStartedAt = args.emitEvalEvent ? nowMs() : undefined\n\n try {\n next = args.entry.readQuery.select(args.state)\n } catch {\n if (args.emitEvalEvent) {\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n txnSeq: args.meta.txnSeq,\n txnId: args.meta.txnId,\n code: 'read_query::eval_error',\n severity: 'error',\n message: 'ReadQuery selector threw during evaluation.',\n hint: 'Selectors must be pure and not throw; check the selector implementation and inputs.',\n kind: 'read_query_eval_error',\n trigger: { kind: 'read_query', name: 'selector:eval', details: { selectorId: args.selectorId } },\n })\n }\n return\n }\n\n const evalMs = args.emitEvalEvent && evalStartedAt != null ? Math.max(0, nowMs() - evalStartedAt) : undefined\n const hadValue = args.entry.hasValue\n const prev = args.entry.cachedValue as any\n const equal = hadValue ? equalsValue(args.entry.readQuery as any, prev, next) : false\n const changed = !hadValue || !equal\n\n if (changed) {\n args.entry.cachedValue = next\n args.entry.hasValue = true\n args.entry.cachedAtTxnSeq = args.meta.txnSeq\n args.onSelectorChanged?.(args.selectorId)\n\n yield* PubSub.publish(args.entry.hub as any, {\n value: args.entry.cachedValue,\n meta: args.meta,\n } satisfies StateChangeWithMeta<any>)\n }\n\n const shouldEmitEvalTrace =\n args.emitEvalEvent &&\n (args.evalEventPolicy === 'always' || changed || (evalMs != null && evalMs >= SAMPLED_SELECTOR_EVAL_SLOW_THRESHOLD_MS))\n\n if (!shouldEmitEvalTrace) {\n return\n }\n\n yield* Debug.record({\n type: 'trace:selector:eval',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n txnSeq: args.meta.txnSeq,\n txnId: args.meta.txnId,\n data: {\n selectorId: args.selectorId,\n lane: args.entry.readQuery.lane,\n producer: args.entry.readQuery.producer,\n fallbackReason: args.entry.readQuery.fallbackReason,\n readsDigest: args.entry.readQuery.readsDigest,\n equalsKind: args.entry.readQuery.equalsKind,\n changed,\n evalMs,\n },\n })\n })\n\nexport const make = <S>(args: {\n readonly moduleId: string\n readonly instanceId: string\n readonly getFieldPathIdRegistry?: () => FieldPathIdRegistry | undefined\n}): SelectorGraph<S> => {\n const { moduleId, instanceId, getFieldPathIdRegistry } = args\n\n const selectorsById = new Map<string, SelectorEntry<S, any>>()\n const indexByReadRoot = new Map<ReadRootKey, Set<string>>()\n const selectorsWithoutReads = new Set<string>()\n\n const hasAnyEntries: SelectorGraph<S>['hasAnyEntries'] = () => selectorsById.size > 0\n\n const ensureEntry: SelectorGraph<S>['ensureEntry'] = (readQuery) => {\n const existing = selectorsById.get(readQuery.selectorId)\n if (existing) {\n return Effect.succeed(existing as any)\n }\n\n return Effect.gen(function* () {\n const hub = yield* PubSub.unbounded<StateChangeWithMeta<any>>()\n\n const reads: Array<FieldPath> = []\n const readsByRootKey = new Map<ReadRootKey, FieldPath[]>()\n const readRootKeys: Array<ReadRootKey> = []\n for (const rawRead of readQuery.reads) {\n if (typeof rawRead !== 'string') continue\n const read = normalizeFieldPath(rawRead)\n if (read == null) continue\n\n reads.push(read)\n const rootKey = getReadRootKeyFromPath(read)\n const bucket = readsByRootKey.get(rootKey)\n if (bucket) {\n bucket.push(read)\n } else {\n readsByRootKey.set(rootKey, [read])\n readRootKeys.push(rootKey)\n }\n }\n if (readRootKeys.length === 0) {\n selectorsWithoutReads.add(readQuery.selectorId)\n } else {\n for (const rootKey of readRootKeys) {\n const set = indexByReadRoot.get(rootKey)\n if (set) {\n set.add(readQuery.selectorId)\n } else {\n indexByReadRoot.set(rootKey, new Set([readQuery.selectorId]))\n }\n }\n }\n\n const entry: SelectorEntry<S, any> = {\n selectorId: readQuery.selectorId,\n readQuery: readQuery as any,\n reads,\n readsByRootKey,\n readRootKeys,\n hub,\n subscriberCount: 0,\n lastScheduledTxnSeq: -1,\n cachedAtTxnSeq: 0,\n hasValue: false,\n cachedValue: undefined,\n }\n selectorsById.set(readQuery.selectorId, entry)\n return entry as any\n })\n }\n\n const releaseEntry: SelectorGraph<S>['releaseEntry'] = (selectorId) => {\n const entry = selectorsById.get(selectorId)\n if (!entry) return\n entry.subscriberCount = Math.max(0, entry.subscriberCount - 1)\n if (entry.subscriberCount > 0) return\n\n selectorsById.delete(selectorId)\n selectorsWithoutReads.delete(selectorId)\n for (const rootKey of entry.readRootKeys) {\n const set = indexByReadRoot.get(rootKey)\n if (!set) continue\n set.delete(selectorId)\n if (set.size === 0) {\n indexByReadRoot.delete(rootKey)\n }\n }\n }\n\n const onCommit: SelectorGraph<S>['onCommit'] = (state, meta, dirty, diagnosticsLevel, onSelectorChanged) =>\n Effect.gen(function* () {\n if (selectorsById.size === 0) return\n\n const emitEvalEvent =\n diagnosticsLevel === 'light' || diagnosticsLevel === 'full' || diagnosticsLevel === 'sampled'\n const evalEventPolicy: SelectorEvalEventPolicy = diagnosticsLevel === 'sampled' ? 'sampled' : 'always'\n\n const registry: FieldPathIdRegistry | undefined =\n dirty.dirtyAll || dirty.dirtyPathIds.length === 0 ? undefined : getFieldPathIdRegistry?.()\n\n const getDirtyPath = (id: number): FieldPath | undefined => {\n if (!registry) return undefined\n if (!Number.isFinite(id)) return undefined\n const idx = Math.floor(id)\n if (idx < 0) return undefined\n const path = registry.fieldPaths[idx]\n return path && Array.isArray(path) ? path : undefined\n }\n\n const evaluateSubscribedEntry = (entry: SelectorEntry<S, any>, selectorId: string): Effect.Effect<void> => {\n if (entry.subscriberCount === 0) return Effect.void\n if (entry.lastScheduledTxnSeq === meta.txnSeq) return Effect.void\n\n // evaluateEntry is total (E=never): mark before execution to dedupe multi-root scans in the same txn.\n entry.lastScheduledTxnSeq = meta.txnSeq\n return evaluateEntry({\n entry,\n selectorId,\n state,\n meta,\n emitEvalEvent,\n evalEventPolicy,\n moduleId,\n instanceId,\n onSelectorChanged,\n })\n }\n\n const evaluateAllSubscribedSelectors = (): Effect.Effect<void, never, never> =>\n Effect.gen(function* () {\n for (const [selectorId, entry] of selectorsById.entries()) {\n yield* evaluateSubscribedEntry(entry, selectorId)\n }\n })\n\n const indexedCandidatesByRoot = new Map<ReadRootKey, ReadonlyArray<IndexedRootCandidate<S>>>()\n const getIndexedCandidatesForRoot = (rootKey: ReadRootKey): ReadonlyArray<IndexedRootCandidate<S>> => {\n const cached = indexedCandidatesByRoot.get(rootKey)\n if (cached) {\n return cached\n }\n\n const selectorIds = indexByReadRoot.get(rootKey)\n if (!selectorIds || selectorIds.size === 0) {\n indexedCandidatesByRoot.set(rootKey, [])\n return []\n }\n\n const indexed: Array<IndexedRootCandidate<S>> = []\n for (const selectorId of selectorIds) {\n const entry = selectorsById.get(selectorId)\n if (!entry) continue\n const readsForRoot = entry.readsByRootKey.get(rootKey)\n if (!readsForRoot || readsForRoot.length === 0) continue\n indexed.push({\n selectorId,\n entry,\n readsForRoot,\n })\n }\n\n indexedCandidatesByRoot.set(rootKey, indexed)\n return indexed\n }\n\n if (selectorsById.size === 1) {\n const entry = selectorsById.values().next().value\n if (!entry) return\n\n if (\n !shouldEvaluateEntryForDirtyRoots({\n entry,\n dirty,\n getDirtyPath,\n hasRegistry: registry != null,\n })\n ) {\n return\n }\n\n yield* evaluateSubscribedEntry(entry, entry.selectorId)\n return\n }\n\n if (dirty.dirtyAll) {\n yield* evaluateAllSubscribedSelectors()\n return\n }\n\n if (!registry) {\n yield* evaluateAllSubscribedSelectors()\n return\n }\n\n for (const selectorId of selectorsWithoutReads) {\n const entry = selectorsById.get(selectorId)\n if (!entry) continue\n yield* evaluateSubscribedEntry(entry, selectorId)\n }\n\n const dirtyRootsToProcessByRoot = new Map<ReadRootKey, Array<FieldPath>>()\n for (const dirtyPathId of dirty.dirtyPathIds) {\n const dirtyPath = getDirtyPath(dirtyPathId)\n if (!dirtyPath) {\n yield* evaluateAllSubscribedSelectors()\n return\n }\n\n const rootKey = getReadRootKeyFromPath(dirtyPath)\n\n const existingDirtyRoots = dirtyRootsToProcessByRoot.get(rootKey)\n if (existingDirtyRoots) {\n upsertDirtyRoot(existingDirtyRoots, dirtyPath)\n continue\n }\n dirtyRootsToProcessByRoot.set(rootKey, [dirtyPath])\n }\n\n for (const [rootKey, dirtyRootsForRoot] of dirtyRootsToProcessByRoot) {\n const candidates = getIndexedCandidatesForRoot(rootKey)\n if (candidates.length === 0) {\n continue\n }\n\n const hasRootLevelDirty = dirtyRootsForRoot.some((path) => path.length <= 1)\n\n for (const candidate of candidates) {\n const { entry, selectorId, readsForRoot } = candidate\n if (entry.subscriberCount === 0 || entry.lastScheduledTxnSeq === meta.txnSeq) continue\n\n if (hasRootLevelDirty) {\n yield* evaluateSubscribedEntry(entry, selectorId)\n continue\n }\n\n let overlapsAnyDirtyRoot = false\n for (const dirtyRootPath of dirtyRootsForRoot) {\n for (const read of readsForRoot) {\n if (overlaps(dirtyRootPath, read)) {\n overlapsAnyDirtyRoot = true\n break\n }\n }\n if (overlapsAnyDirtyRoot) {\n break\n }\n }\n if (!overlapsAnyDirtyRoot) continue\n\n yield* evaluateSubscribedEntry(entry, selectorId)\n }\n }\n })\n\n return { ensureEntry, releaseEntry, hasAnyEntries, onCommit }\n}\n","import { Cause, Deferred, Effect, Option, ServiceMap } from 'effect'\nimport type { LogicPlan, ModuleRuntime as PublicModuleRuntime } from './module.js'\nimport * as Lifecycle from './Lifecycle.js'\nimport * as ReducerDiagnostics from './ReducerDiagnostics.js'\nimport * as LifecycleDiagnostics from './LifecycleDiagnostics.js'\nimport * as LogicDiagnostics from './LogicDiagnostics.js'\nimport * as LogicUnitMeta from './LogicUnitMeta.js'\nimport * as Platform from './Platform.js'\nimport * as LogicPlanMarker from './LogicPlanMarker.js'\nimport { RootContextTag, type RootContext } from './RootContext.js'\n\ntype PhaseRef = LogicPlanMarker.PhaseRef\n\nconst createPhaseRef = (): PhaseRef => ({ current: 'run' })\n\nexport const runModuleLogics = <S, A, R>(args: {\n readonly tag: ServiceMap.Key<any, PublicModuleRuntime<S, A>>\n readonly logics: ReadonlyArray<Effect.Effect<any, any, R> | LogicPlan<any, R, any>>\n readonly runtime: PublicModuleRuntime<S, A>\n readonly lifecycle: Lifecycle.LifecycleManager\n readonly moduleId: string\n readonly instanceId: string\n}): Effect.Effect<void, unknown, any> => {\n const { tag, logics, runtime, lifecycle, moduleId, instanceId } = args\n const moduleIdForLogs = moduleId\n\n return Effect.gen(function* () {\n const withRuntimeAndLifecycle = <R2, E2, A2>(\n eff: Effect.Effect<A2, E2, R2>,\n phaseRef?: PhaseRef,\n logicUnit?: LogicDiagnostics.LogicUnitService,\n ) => {\n const withServices = Effect.provideService(\n Effect.provideService(eff, Lifecycle.LifecycleContext, lifecycle),\n tag,\n runtime,\n )\n\n // Annotate logs produced inside Logic effects (moduleId, etc.) so the Logger layer can correlate them to a Module.\n const annotated = Effect.annotateLogs({\n 'logix.moduleId': moduleIdForLogs,\n })(withServices as Effect.Effect<A2, E2, any>) as Effect.Effect<A2, E2, R2>\n\n const withLogicUnit = logicUnit\n ? Effect.provideService(annotated, LogicDiagnostics.LogicUnitServiceTag, logicUnit)\n : annotated\n\n if (!phaseRef) {\n return withLogicUnit\n }\n\n const phaseService: LogicDiagnostics.LogicPhaseService = {\n get current() {\n return phaseRef.current\n },\n }\n\n return Effect.provideService(withLogicUnit, LogicDiagnostics.LogicPhaseServiceTag, phaseService)\n }\n\n const withRootEnvIfAvailable = <A2, E2, R2>(eff: Effect.Effect<A2, E2, R2>): Effect.Effect<A2, E2, R2> =>\n Effect.gen(function* () {\n const rootOpt = yield* Effect.serviceOption(RootContextTag)\n if (Option.isNone(rootOpt)) {\n return yield* eff\n }\n const root = rootOpt.value as RootContext\n const rootEnv = root.context ?? (yield* Deferred.await(root.ready))\n\n // IMPORTANT:\n // - rootEnv contains the fully-assembled app Env (all modules/services), preventing \"missing service due to early Env capture\".\n // - currentEnv contains Provider overlays (e.g. React RuntimeProvider.layer / useRuntime layers) and module-local overrides.\n // Merge order: currentEnv overrides rootEnv for overlapping tags.\n const currentEnv = (yield* Effect.services<R2>()) as ServiceMap.ServiceMap<any>\n const mergedEnv = ServiceMap.merge(rootEnv as ServiceMap.ServiceMap<any>, currentEnv)\n\n return yield* Effect.provideServices(eff as any, mergedEnv as any)\n }) as any\n\n const formatSource = (source?: {\n readonly file: string\n readonly line: number\n readonly column: number\n }): string | undefined => (source ? `${source.file}:${source.line}:${source.column}` : undefined)\n\n const resolveLogicUnitService = (rawLogic: unknown, index: number): LogicDiagnostics.LogicUnitService => {\n const meta = LogicUnitMeta.getLogicUnitMeta(rawLogic)\n\n const logicUnitId = meta?.resolvedId ?? meta?.id ?? `logic#${index + 1}`\n\n const logicUnitIdKind = meta?.resolvedIdKind ?? (meta?.id ? 'explicit' : 'derived')\n\n const labelBase = meta?.resolvedName ?? meta?.name ?? logicUnitId\n\n const kind = meta?.resolvedKind ?? meta?.kind\n const kindPrefix = kind && kind.length > 0 ? `${kind}:` : ''\n\n const source = meta?.resolvedSource ?? meta?.source\n\n return {\n logicUnitId,\n logicUnitIdKind,\n logicUnitLabel: `logicUnit:${kindPrefix}${labelBase}`,\n path: formatSource(source),\n }\n }\n\n const handleLogicFailure = (cause: any) => {\n if (Cause.hasInterruptsOnly(cause)) {\n return Effect.failCause(cause)\n }\n\n const phaseErrorMarker = cause.reasons\n .filter((reason: any) => Cause.isFailReason(reason) || Cause.isDieReason(reason))\n .map((reason: any) => (Cause.isFailReason(reason) ? reason.error : reason.defect))\n .some((err: any) => err?._tag === 'LogicPhaseError')\n\n const base = lifecycle\n .notifyError(cause, {\n phase: 'run',\n hook: 'unknown',\n moduleId,\n instanceId,\n origin: 'logic.fork',\n })\n .pipe(\n Effect.tap(() => LifecycleDiagnostics.emitMissingOnErrorDiagnosticIfNeeded(lifecycle, moduleId)),\n Effect.tap(() => LifecycleDiagnostics.emitAssemblyFailureDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => ReducerDiagnostics.emitDiagnosticsFromCause(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitEnvServiceNotFoundDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitInvalidPhaseDiagnosticIfNeeded(cause, moduleId)),\n )\n\n // For LogicPhaseError: emit diagnostics only and avoid failing ModuleRuntime construction,\n // so runSync paths are not interrupted by AsyncFiberException.\n if (phaseErrorMarker) {\n return base\n }\n\n return base.pipe(Effect.flatMap(() => Effect.failCause(cause)))\n }\n\n const handleInitFailure = (cause: Cause.Cause<unknown>) =>\n Cause.hasInterruptsOnly(cause)\n ? Effect.failCause(cause)\n : Effect.void.pipe(\n Effect.tap(() => LifecycleDiagnostics.emitMissingOnErrorDiagnosticIfNeeded(lifecycle, moduleId)),\n Effect.tap(() => LifecycleDiagnostics.emitAssemblyFailureDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => ReducerDiagnostics.emitDiagnosticsFromCause(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitEnvServiceNotFoundDiagnosticIfNeeded(cause, moduleId)),\n Effect.tap(() => LogicDiagnostics.emitInvalidPhaseDiagnosticIfNeeded(cause, moduleId)),\n Effect.flatMap(() => Effect.failCause(cause)),\n )\n\n const isLogicPlan = (value: unknown): value is LogicPlan<any, any, any> =>\n Boolean(value && typeof value === 'object' && 'run' in (value as any) && 'setup' in (value as any))\n\n const hasLogicPhaseError = (cause: Cause.Cause<unknown>): boolean =>\n cause.reasons\n .filter((reason: any) => Cause.isFailReason(reason) || Cause.isDieReason(reason))\n .map((reason: any) => (Cause.isFailReason(reason) ? reason.error : reason.defect))\n .some((err: any) => err?._tag === 'LogicPhaseError')\n\n const normalizeToPlan = (value: unknown, defaultPhaseRef?: PhaseRef): LogicPlan<any, any, any> => {\n const phaseRef = LogicPlanMarker.getPhaseRef(value) ?? defaultPhaseRef ?? createPhaseRef()\n\n if (isLogicPlan(value)) {\n const plan = value as LogicPlan<any, any, any>\n if (!LogicPlanMarker.getPhaseRef(plan)) {\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n }\n return plan\n }\n\n const plan: LogicPlan<any, any, any> = {\n setup: Effect.void,\n run: value as Effect.Effect<any, any, any>,\n }\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n return plan\n }\n\n const makeNoopPlan = (phaseRef: PhaseRef): LogicPlan<any, any, any> => {\n const plan: LogicPlan<any, any, any> = {\n setup: Effect.void,\n run: Effect.void,\n }\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n LogicPlanMarker.markSkipRun(plan as any)\n return plan\n }\n\n const executeResolvedPlanImmediately = (\n plan: LogicPlan<any, any, any>,\n logicUnit: LogicDiagnostics.LogicUnitService,\n defaultPhaseRef?: PhaseRef,\n ): Effect.Effect<void, unknown, any> => {\n const hadPhaseRef = Boolean(LogicPlanMarker.getPhaseRef(plan))\n const phaseRef = LogicPlanMarker.getPhaseRef(plan) ?? defaultPhaseRef ?? createPhaseRef()\n if (!hadPhaseRef) {\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n }\n\n const setupPhase = withRuntimeAndLifecycle(plan.setup, phaseRef, logicUnit)\n const runPhase = withRootEnvIfAvailable(withRuntimeAndLifecycle(plan.run, phaseRef, logicUnit))\n\n phaseRef.current = 'setup'\n return setupPhase.pipe(\n Effect.catchCause(handleLogicFailure),\n Effect.flatMap(() =>\n LogicPlanMarker.isSkipRun(plan)\n ? Effect.void\n : Effect.sync(() => {\n phaseRef.current = 'run'\n }).pipe(\n Effect.flatMap(() => Effect.forkScoped(runPhase.pipe(Effect.catchCause(handleLogicFailure)))),\n Effect.asVoid,\n ),\n ),\n )\n }\n\n const resolveLogicPlanEffectToPlan = (\n value: unknown,\n logicUnit: LogicDiagnostics.LogicUnitService,\n phaseRef: PhaseRef,\n depth: number,\n ): Effect.Effect<LogicPlan<any, any, any>, unknown, any> => {\n if (!LogicPlanMarker.isLogicPlanEffect(value)) {\n return Effect.succeed(normalizeToPlan(value, phaseRef))\n }\n\n if (depth > 8) {\n return Effect.fail(new Error('Too many nested LogicPlanEffect resolutions (possible cyclic logic return).'))\n }\n\n // Keep phase guard active while resolving nested LogicPlanEffect so setup/run boundaries remain enforced.\n return withRuntimeAndLifecycle(value as Effect.Effect<any, any, any>, phaseRef, logicUnit).pipe(\n Effect.matchCauseEffect({\n onSuccess: (next) => resolveLogicPlanEffectToPlan(next, logicUnit, phaseRef, depth + 1),\n onFailure: (cause) => {\n if (hasLogicPhaseError(cause)) {\n return handleLogicFailure(cause).pipe(Effect.as(makeNoopPlan(phaseRef)))\n }\n return Effect.gen(function* () {\n yield* handleLogicFailure(cause)\n return yield* Effect.failCause(cause)\n })\n },\n }),\n )\n }\n\n const resolveCanonicalPlan = (\n rawLogic: Effect.Effect<any, any, R> | LogicPlan<any, R, any>,\n logicUnit: LogicDiagnostics.LogicUnitService,\n ): Effect.Effect<LogicPlan<any, any, any>, unknown, any> => {\n if (!LogicPlanMarker.isLogicPlanEffect(rawLogic)) {\n if (isLogicPlan(rawLogic)) {\n return Effect.succeed(normalizeToPlan(rawLogic))\n }\n\n const phaseRef = LogicPlanMarker.getPhaseRef(rawLogic) ?? createPhaseRef()\n const runEffect = rawLogic as Effect.Effect<any, any, any>\n\n // Canonical semantics keeps single-phase logic as run-only.\n // Compatibility: if run returns a marked LogicPlanEffect (async-built ModuleImpl pattern),\n // resolve and execute that nested plan immediately to preserve existing user behavior.\n const plan: LogicPlan<any, any, any> = {\n setup: Effect.void,\n run: runEffect.pipe(\n Effect.flatMap((value) =>\n !LogicPlanMarker.isLogicPlanEffect(value)\n ? Effect.void\n : resolveLogicPlanEffectToPlan(value, logicUnit, phaseRef, 0).pipe(\n Effect.flatMap((resolvedPlan) => executeResolvedPlanImmediately(resolvedPlan, logicUnit, phaseRef)),\n ),\n ),\n ),\n }\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n return Effect.succeed(plan)\n }\n\n // LogicPlanEffect: run once in setup phase to resolve the canonical plan.\n const phaseRef = LogicPlanMarker.getPhaseRef(rawLogic) ?? createPhaseRef()\n phaseRef.current = 'setup'\n\n return withRuntimeAndLifecycle(rawLogic as Effect.Effect<any, any, any>, phaseRef, logicUnit).pipe(\n Effect.matchCauseEffect({\n onSuccess: (value) => resolveLogicPlanEffectToPlan(value, logicUnit, phaseRef, 0),\n onFailure: (cause) => {\n if (hasLogicPhaseError(cause)) {\n return handleLogicFailure(cause).pipe(Effect.as(makeNoopPlan(phaseRef)))\n }\n return Effect.gen(function* () {\n yield* handleLogicFailure(cause)\n return yield* Effect.failCause(cause)\n })\n },\n }),\n )\n }\n\n const runCanonicalPlan = (\n plan: LogicPlan<any, any, any>,\n logicUnit: LogicDiagnostics.LogicUnitService,\n ): Effect.Effect<void, unknown, any> =>\n Effect.gen(function* () {\n const hadPhaseRef = Boolean(LogicPlanMarker.getPhaseRef(plan))\n const phaseRef = LogicPlanMarker.getPhaseRef(plan) ?? createPhaseRef()\n if (!hadPhaseRef) {\n LogicPlanMarker.attachPhaseRef(plan as any, phaseRef)\n }\n\n const setupPhase = withRuntimeAndLifecycle(plan.setup, phaseRef, logicUnit)\n const runPhase = withRootEnvIfAvailable(withRuntimeAndLifecycle(plan.run, phaseRef, logicUnit))\n\n phaseRef.current = 'setup'\n yield* setupPhase.pipe(Effect.catchCause(handleLogicFailure))\n\n if (LogicPlanMarker.isSkipRun(plan)) {\n return\n }\n\n pendingRunForks.push(\n Effect.sync(() => {\n phaseRef.current = 'run'\n }).pipe(\n Effect.flatMap(() => Effect.forkScoped(runPhase.pipe(Effect.catchCause(handleLogicFailure)))),\n Effect.asVoid,\n ),\n )\n })\n\n const pendingRunForks: Array<Effect.Effect<void, never, any>> = []\n\n let logicIndex = 0\n for (const rawLogic of logics) {\n const logicUnit = resolveLogicUnitService(rawLogic, logicIndex)\n logicIndex += 1\n\n const canonicalPlan = yield* resolveCanonicalPlan(rawLogic, logicUnit)\n yield* runCanonicalPlan(canonicalPlan, logicUnit)\n }\n\n // lifecycle initRequired: blocking gate (must complete before forking run fibers).\n yield* lifecycle.runInitRequired.pipe(Effect.catchCause(handleInitFailure))\n\n // platform signals: read Platform only after initRequired succeeds (avoid reading Env during setup).\n const platformOpt = yield* Effect.serviceOption(Platform.Tag)\n if (Option.isSome(platformOpt)) {\n const platform = platformOpt.value\n const snapshot = yield* lifecycle.getTaskSnapshot\n\n const platformPhaseRef: PhaseRef = { current: 'run' }\n const phaseService: LogicDiagnostics.LogicPhaseService = {\n get current() {\n return platformPhaseRef.current\n },\n }\n\n const providePlatformEnv = <A2, E2, R2>(eff: Effect.Effect<A2, E2, R2>): Effect.Effect<A2, E2, any> =>\n Effect.provideService(\n Effect.provideService(\n Effect.provideService(\n Effect.provideService(eff as Effect.Effect<A2, E2, any>, Platform.Tag, platform),\n Lifecycle.LifecycleContext,\n lifecycle,\n ),\n tag,\n runtime,\n ),\n LogicDiagnostics.LogicPhaseServiceTag,\n phaseService,\n )\n\n const register = (\n label: Lifecycle.Hook,\n subscribe: (eff: Effect.Effect<void, never, any>) => Effect.Effect<void, never, any>,\n ) =>\n Effect.forkScoped(\n subscribe(\n providePlatformEnv(\n label === 'suspend'\n ? lifecycle.runPlatformSuspend\n : label === 'resume'\n ? lifecycle.runPlatformResume\n : lifecycle.runPlatformReset,\n ).pipe(Effect.asVoid),\n ).pipe(\n Effect.catchCause((cause) =>\n lifecycle.notifyError(cause, {\n phase: 'platform',\n hook: label,\n moduleId,\n instanceId,\n origin: 'platform.subscribe',\n })),\n ),\n ).pipe(Effect.asVoid)\n\n if (snapshot.platformSuspend.length > 0) {\n yield* register('suspend', platform.lifecycle.onSuspend)\n }\n if (snapshot.platformResume.length > 0) {\n yield* register('resume', platform.lifecycle.onResume)\n }\n if (snapshot.platformReset.length > 0 && typeof platform.lifecycle.onReset === 'function') {\n yield* register('reset', platform.lifecycle.onReset)\n }\n }\n\n // Fork run fibers (start after init completes).\n yield* Effect.forEach(pendingRunForks, (eff) => eff, { discard: true })\n\n // lifecycle start: non-blocking (start after ready).\n yield* lifecycle.runStart\n\n // Give forked logics a scheduling chance so upper layers (e.g. Root processes) don't dispatch actions before logics are ready.\n yield* Effect.yieldNow\n })\n}\n","import { Cause, Chunk, Effect } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport type { LifecycleManager } from './Lifecycle.js'\n\nexport type UnhandledErrorKind = 'interrupt' | 'diagnostic' | 'assembly' | 'defect'\n\nexport const classifyUnhandledCause = (cause: Cause.Cause<unknown>): UnhandledErrorKind => {\n if (Cause.hasInterruptsOnly(cause)) {\n return 'interrupt'\n }\n\n const all = cause.reasons\n .filter((reason) => Cause.isFailReason(reason) || Cause.isDieReason(reason))\n .map((reason) => (Cause.isFailReason(reason) ? reason.error : reason.defect)) as ReadonlyArray<any>\n\n if (all.some((err) => err && typeof err === 'object' && err._tag === 'LogicPhaseError')) {\n return 'diagnostic'\n }\n\n if (all.some((err) => err && typeof err === 'object' && err.name === 'MissingModuleRuntimeError')) {\n return 'assembly'\n }\n\n return 'defect'\n}\n\n/**\n * When a Module hits a lifecycle error during Logic execution and no onError handler is registered,\n * emit a warning diagnostic suggesting adding $.lifecycle.onError at the beginning of the module logic.\n */\nexport const emitMissingOnErrorDiagnosticIfNeeded = (\n lifecycle: LifecycleManager,\n moduleId?: string,\n): Effect.Effect<void, never, any> =>\n lifecycle.hasOnErrorHandlers.pipe(\n Effect.flatMap((has) =>\n has || !moduleId\n ? Effect.void\n : Debug.record({\n type: 'diagnostic',\n moduleId,\n code: 'lifecycle::missing_on_error',\n severity: 'warning',\n message: `Module \"${moduleId}\" received a lifecycle error but has no $.lifecycle.onError handler registered.`,\n hint: \"Add $.lifecycle.onError((cause, context) => ...) at the beginning of this Module's logic to handle logic errors consistently.\",\n }),\n ),\n )\n\n/**\n * When a lifecycle error originates from \"assembly failure\" (e.g. missing Module runtime provider),\n * emit an error diagnostic with actionable fix suggestions.\n *\n * Notes:\n * - This diagnostic explains the error classification and does not change the original error semantics.\n * - If higher layers (e.g. React RuntimeProvider.onError) listen to both lifecycle:error and diagnostic(error),\n * they should de-duplicate or report based on context/phase to avoid duplicate alerts.\n */\nexport const emitAssemblyFailureDiagnosticIfNeeded = (\n cause: Cause.Cause<unknown>,\n moduleId?: string,\n): Effect.Effect<void, never, any> =>\n Effect.sync(() => {\n const defects = cause.reasons.filter(Cause.isDieReason).map((reason) => reason.defect)\n const missing = defects.find(\n (e) => e && typeof e === 'object' && (e as any).name === 'MissingModuleRuntimeError',\n ) as any\n\n if (!missing) {\n return Effect.void\n }\n\n const tokenId = typeof missing.tokenId === 'string' ? missing.tokenId : '<unknown module id>'\n const fix =\n Array.isArray(missing.fix) && missing.fix.every((l: unknown) => typeof l === 'string')\n ? (missing.fix as ReadonlyArray<string>).join('\\n')\n : undefined\n\n return Debug.record({\n type: 'diagnostic',\n moduleId,\n code: 'assembly::missing_module_runtime',\n severity: 'error',\n message: `Missing Module runtime provider for \"${tokenId}\".`,\n hint:\n fix ?? 'Provide the child implementation in the same scope (imports), or provide a root singleton at app root.',\n kind: 'assembly_failure',\n })\n }).pipe(Effect.flatten)\n","export type PhaseRef = { current: 'setup' | 'run' }\n\nconst LOGIC_PLAN_EFFECT = Symbol.for('@logixjs/core/logicPlanEffect')\nconst LOGIC_PHASE_REF = Symbol.for('@logixjs/core/logicPhaseRef')\nconst LOGIC_SKIP_RUN = Symbol.for('@logixjs/core/logicSkipRun')\n\nconst defineHidden = (target: object, key: symbol, value: unknown): void => {\n Object.defineProperty(target, key, {\n value,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n}\n\nexport const markAsLogicPlanEffect = (value: unknown): void => {\n if (!value || typeof value !== 'object') return\n defineHidden(value as object, LOGIC_PLAN_EFFECT, true)\n}\n\nexport const isLogicPlanEffect = (value: unknown): boolean =>\n Boolean(value && typeof value === 'object' && (value as any)[LOGIC_PLAN_EFFECT] === true)\n\nexport const attachPhaseRef = (value: unknown, phaseRef: PhaseRef): void => {\n if (!value || typeof value !== 'object') return\n defineHidden(value as object, LOGIC_PHASE_REF, phaseRef)\n}\n\nexport const getPhaseRef = (value: unknown): PhaseRef | undefined => {\n if (!value || typeof value !== 'object') return undefined\n return (value as any)[LOGIC_PHASE_REF] as PhaseRef | undefined\n}\n\nexport const markSkipRun = (plan: unknown): void => {\n if (!plan || typeof plan !== 'object') return\n defineHidden(plan as object, LOGIC_SKIP_RUN, true)\n}\n\nexport const isSkipRun = (plan: unknown): boolean =>\n Boolean(plan && typeof plan === 'object' && (plan as any)[LOGIC_SKIP_RUN] === true)\n","import { Effect, Ref } from 'effect'\nimport * as Debug from './DebugSink.js'\nimport type { RuntimeInternalsResolvedConcurrencyPolicy } from './RuntimeInternals.js'\n\ntype PressureKey = string\n\ntype PressureCooldownState = {\n readonly lastEmittedAtMs: number\n readonly suppressedCount: number\n}\n\nconst keyOf = (trigger: Debug.TriggerRef): PressureKey => {\n const name = typeof trigger.name === 'string' ? trigger.name : ''\n const details = trigger.details\n if (!details || typeof details !== 'object') {\n return `${trigger.kind}::${name}`\n }\n\n const source = details as Record<string, unknown>\n const dispatchEntry = typeof source.dispatchEntry === 'string' ? source.dispatchEntry : ''\n const channel = typeof source.channel === 'string' ? source.channel : ''\n const topicTag = typeof source.topicTag === 'string' ? source.topicTag : ''\n const actionTag = typeof source.actionTag === 'string' ? source.actionTag : ''\n\n return `${trigger.kind}::${name}::${dispatchEntry}::${channel}::${topicTag}::${actionTag}`\n}\n\nconst nowMs = Effect.clockWith((clock) => clock.currentTimeMillis)\n\nexport interface ConcurrencyDiagnostics {\n readonly emitPressureIfNeeded: (args: {\n readonly policy: RuntimeInternalsResolvedConcurrencyPolicy\n readonly trigger: Debug.TriggerRef\n readonly backlogCount?: number\n readonly inFlight?: number\n readonly saturatedDurationMs?: number\n }) => Effect.Effect<void>\n readonly emitUnboundedPolicyIfNeeded: (args: {\n readonly policy: RuntimeInternalsResolvedConcurrencyPolicy\n readonly trigger: Debug.TriggerRef\n }) => Effect.Effect<void>\n}\n\nexport const make = (args: {\n readonly moduleId: string | undefined\n readonly instanceId: string\n}): Effect.Effect<ConcurrencyDiagnostics> =>\n Effect.gen(function* () {\n const pressureCooldownByKeyRef = yield* Ref.make<Readonly<Record<PressureKey, PressureCooldownState>>>({})\n\n const unboundedEnabledEmittedRef = yield* Ref.make(false)\n const unboundedBlockedEmittedRef = yield* Ref.make(false)\n\n const emitPressureIfNeeded: ConcurrencyDiagnostics['emitPressureIfNeeded'] = (inArgs) =>\n Effect.gen(function* () {\n const policy = inArgs.policy\n\n const backlogCount = inArgs.backlogCount ?? 0\n const saturatedDurationMs = inArgs.saturatedDurationMs ?? 0\n\n const threshold = policy.pressureWarningThreshold\n const meetsThreshold =\n backlogCount >= threshold.backlogCount || saturatedDurationMs >= threshold.backlogDurationMs\n\n if (!meetsThreshold) {\n return\n }\n\n const cooldownMs = policy.warningCooldownMs\n const now = yield* nowMs\n const key = keyOf(inArgs.trigger)\n\n const decision = yield* Ref.modify(\n pressureCooldownByKeyRef,\n (\n byKey,\n ): readonly [\n { readonly _tag: 'emit'; readonly suppressedCount: number } | { readonly _tag: 'suppress' },\n Readonly<Record<PressureKey, PressureCooldownState>>,\n ] => {\n const prev = byKey[key]\n if (prev && now - prev.lastEmittedAtMs < cooldownMs) {\n return [\n { _tag: 'suppress' },\n {\n ...byKey,\n [key]: {\n lastEmittedAtMs: prev.lastEmittedAtMs,\n suppressedCount: prev.suppressedCount + 1,\n },\n },\n ] as const\n }\n\n const suppressedCount = prev?.suppressedCount ?? 0\n return [\n { _tag: 'emit', suppressedCount },\n {\n ...byKey,\n [key]: {\n lastEmittedAtMs: now,\n suppressedCount: 0,\n },\n },\n ] as const\n },\n )\n\n if (decision._tag === 'suppress') {\n return\n }\n\n const details: Record<string, unknown> = {\n configScope: policy.configScope,\n limit: policy.concurrencyLimit,\n backlogCount,\n saturatedDurationMs,\n threshold: {\n backlogCount: threshold.backlogCount,\n backlogDurationMs: threshold.backlogDurationMs,\n },\n cooldownMs,\n degradeStrategy: decision.suppressedCount > 0 ? ('cooldown' as const) : ('none' as const),\n suppressedCount: decision.suppressedCount,\n sampleRate: 1,\n droppedCount: 0,\n }\n if (typeof inArgs.inFlight === 'number' && Number.isFinite(inArgs.inFlight)) {\n details.inFlight = inArgs.inFlight\n }\n if (inArgs.trigger.details !== undefined) {\n const projected = (() => {\n try {\n return JSON.parse(JSON.stringify(inArgs.trigger.details))\n } catch {\n return undefined\n }\n })()\n if (projected && typeof projected === 'object') {\n details.source = projected\n }\n }\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'concurrency::pressure',\n severity: 'warning',\n message: 'Concurrency pressure detected (backpressure / saturation).',\n hint: 'Reduce trigger frequency, split work, switch to runLatest or batch processing; or tune concurrency/backpressure limits via concurrencyPolicy.',\n kind: 'concurrency:pressure',\n trigger: {\n kind: inArgs.trigger.kind,\n name: inArgs.trigger.name,\n details,\n },\n })\n })\n\n const emitUnboundedPolicyIfNeeded: ConcurrencyDiagnostics['emitUnboundedPolicyIfNeeded'] = (inArgs) =>\n Effect.gen(function* () {\n const policy = inArgs.policy\n\n // 1) effective unbounded: emit only once (SC-004 / FR-004)\n if (policy.concurrencyLimit === 'unbounded' && policy.allowUnbounded === true) {\n const shouldEmit = yield* Ref.modify(unboundedEnabledEmittedRef, (emitted) =>\n emitted ? ([false, true] as const) : ([true, true] as const),\n )\n if (!shouldEmit) {\n return\n }\n\n const details: Record<string, unknown> = {\n configScope: policy.configScope,\n limit: policy.concurrencyLimit,\n }\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'concurrency::unbounded_enabled',\n severity: 'error',\n message: 'Unbounded concurrency is enabled (risk: resource exhaustion).',\n hint:\n 'Enable only for short-lived, controlled, cancelable fan-out; prefer bounded concurrency and increase gradually; ' +\n 'avoid piling up long-running or never-ending tasks under unbounded.',\n kind: 'concurrency:unbounded_enabled',\n trigger: {\n kind: inArgs.trigger.kind,\n name: inArgs.trigger.name,\n details,\n },\n })\n return\n }\n\n // 2) requested unbounded without explicit allow: fall back to bounded + diagnostic (T023)\n const requestedUnbounded =\n policy.requestedConcurrencyLimit === 'unbounded' && policy.concurrencyLimit !== 'unbounded'\n\n if (!requestedUnbounded) {\n return\n }\n\n const shouldEmit = yield* Ref.modify(unboundedBlockedEmittedRef, (emitted) =>\n emitted ? ([false, true] as const) : ([true, true] as const),\n )\n if (!shouldEmit) {\n return\n }\n\n const details: Record<string, unknown> = {\n configScope: policy.configScope,\n limit: policy.requestedConcurrencyLimit,\n }\n\n yield* Debug.record({\n type: 'diagnostic',\n moduleId: args.moduleId,\n instanceId: args.instanceId,\n code: 'concurrency::unbounded_requires_opt_in',\n severity: 'error',\n message: 'Unbounded concurrency was requested but is not allowed; falling back to bounded concurrency.',\n hint:\n 'If you really need unbounded, explicitly set concurrencyPolicy.allowUnbounded = true; ' +\n 'otherwise set concurrencyPolicy.concurrencyLimit to a positive integer limit.',\n kind: 'concurrency:unbounded_blocked',\n trigger: {\n kind: inArgs.trigger.kind,\n name: inArgs.trigger.name,\n details,\n },\n })\n })\n\n return { emitPressureIfNeeded, emitUnboundedPolicyIfNeeded }\n })\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,IAAM,kBAAkB,oBAAI,QAA2F;AAQvH,IAAM,uBAAuB,oBAAI,IAA2C;AAErE,IAAM,kBAAkB,CAC7B,KACA,YACS;AACT,kBAAgB,IAAI,KAA2D,OAAwC;AACzH;AAEO,IAAM,oBAAoB,CAAC,QAAkE;AAClG,kBAAgB,OAAO,GAAG;AAC5B;AAOO,IAAM,gCAAgC,CAC3C,UACA,eAEA,qBAAqB,IAAI,GAAG,QAAQ,KAAK,UAAU,EAAE;AAEhD,IAAM,+BAA+B,CAAC,aAAqB,YAAiD;AACjH,uBAAqB,IAAI,aAAa,OAAO;AAC/C;AAEO,IAAM,iCAAiC,CAAC,gBAA8B;AAC3E,uBAAqB,OAAO,WAAW;AACzC;;;ACnDA;AAAA,EACE,QAAAA;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AAAA,EAEA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,OACK;;;ACdP,SAAS,QAAQ,uBAAuB;AA6PxC,IAAM,mBAAmB;AACzB,IAAM,4BAA4B;AAClC,IAAM,uBAAmD,CAAC;AAC1D,IAAM,oBAAmD,CAAC;AAE1D,IAAM,aAAa,MAAM;AACvB,QAAM,OAAO,WAAW;AACxB,MAAI,QAAQ,OAAO,KAAK,QAAQ,YAAY;AAC1C,WAAO,KAAK,IAAI;AAAA,EAClB;AACA,SAAO,KAAK,IAAI;AAClB;AAEA,IAAM,uBAAuB,CAAC,WAAwC;AACpE,MAAI,OAAO,WAAW,YAAY,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,GAAG;AACxE,WAAO;AAAA,EACT;AACA,SAAO,KAAK,MAAM,MAAM;AAC1B;AAEA,IAAM,oBAAoB,CAAC,UAAkB,uBAC3C,mBAAmB,WAAW,IAAI,GAAG,QAAQ,OAAO,GAAG,QAAQ,KAAK,kBAAkB;AAExF,IAAM,2BAA2B,CAAC,SAAqC;AACrE,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAI,KAAK,WAAW,CAAC;AAC3B,QAAI,IAAI,MAAgB,IAAI,GAAc,QAAO;AACjD,QAAI,IAAI,MAAM,IAAI;AAElB,QAAI,IAAI,WAAe,QAAO;AAAA,EAChC;AACA,SAAO;AACT;AAEA,IAAM,wCAAwC,CAAI,OAAyB,SAAuB;AAChG,MAAI,MAAM,eAAgB;AAC1B,QAAM,cAAc,MAAM;AAC1B,MAAI,CAAC,eAAe,YAAY,SAAS,EAAG;AAC5C,MAAI,CAAC,QAAQ,SAAS,IAAK;AAG3B,QAAM,SAAS,KAAK,QAAQ,GAAG;AAC/B,QAAM,aAAa,KAAK,QAAQ,GAAG;AACnC,MAAI,SAAS,KAAK,aAAa,KAAK,KAAK,QAAQ,GAAG,IAAI,GAAG;AACzD,QAAI,YAAY,IAAI,IAAI,GAAG;AACzB,YAAM,gBAAgB,IAAI,kBAAkB,MAAM,EAAE,CAAC;AAAA,IACvD;AACA;AAAA,EACF;AAEA,MAAI,WAAW;AACf,MAAI,qBAAqB;AACzB,MAAI,mBAAmB;AAEtB,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,MAAM,MAAM,CAAC;AACnB,QAAI,CAAC,IAAK;AACV,UAAM,MAAM;AACZ,uBAAmB;AAGpB,QAAI,IAAI,SAAS,IAAI,GAAG;AACtB,YAAM,OAAO,IAAI,MAAM,GAAG,EAAE;AAC5B,UAAI,MAAM;AACR,mBAAW,SAAS,WAAW,IAAI,OAAO,GAAG,QAAQ,IAAI,IAAI;AAAA,MAC/D;AACA;AAAA,IACF;AAGA,UAAM,OAAO,IAAI,QAAQ,GAAG;AAC5B,QAAI,OAAO,KAAK,IAAI,SAAS,GAAG,GAAG;AACjC,YAAM,OAAO,IAAI,MAAM,GAAG,IAAI;AAC9B,YAAM,SAAS,IAAI,MAAM,OAAO,GAAG,EAAE;AACrC,YAAMC,OAAM,yBAAyB,MAAM;AAE3C,UAAI,MAAM;AACR,mBAAW,SAAS,WAAW,IAAI,OAAO,GAAG,QAAQ,IAAI,IAAI;AAAA,MAC/D;AAEA,UAAIA,SAAQ,QAAW;AACrB,YAAI,YAAY,YAAY,IAAI,QAAQ,GAAG;AACzC,gBAAM,MAAM,kBAAkB,UAAU,kBAAkB;AAC1D,gBAAM,MAAM,MAAM,kBAAkB,IAAI,GAAG,KAAK,oBAAI,IAAY;AAChE,cAAI,IAAIA,IAAG;AACX,gBAAM,kBAAkB,IAAI,KAAK,GAAG;AAGpC,cAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,kBAAM,UAAU,MAAM,gBAAgB,IAAI,GAAG,KAAK,oBAAI,IAAY;AAClE,oBAAQ,IAAIA,IAAG;AACf,kBAAM,gBAAgB,IAAI,KAAK,OAAO;AAAA,UACxC;AAAA,QACF;AAGA,6BAAqB,mBAAmB,WAAW,IAAI,OAAOA,IAAG,IAAI,GAAG,kBAAkB,IAAIA,IAAG;AACjG,2BAAmB;AAAA,MACrB;AAEA;AAAA,IACF;AAGA,UAAM,MAAM,yBAAyB,GAAG;AACxC,QAAI,QAAQ,QAAW;AACrB,UAAI,YAAY,YAAY,IAAI,QAAQ,GAAG;AACzC,cAAM,MAAM,kBAAkB,UAAU,kBAAkB;AAC1D,cAAM,MAAM,MAAM,kBAAkB,IAAI,GAAG,KAAK,oBAAI,IAAY;AAChE,YAAI,IAAI,GAAG;AACX,cAAM,kBAAkB,IAAI,KAAK,GAAG;AAGpC,YAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,gBAAM,UAAU,MAAM,gBAAgB,IAAI,GAAG,KAAK,oBAAI,IAAY;AAClE,kBAAQ,IAAI,GAAG;AACf,gBAAM,gBAAgB,IAAI,KAAK,OAAO;AAAA,QACxC;AAAA,MACF;AAEA,2BAAqB,mBAAmB,WAAW,IAAI,OAAO,GAAG,IAAI,GAAG,kBAAkB,IAAI,GAAG;AACjG,yBAAmB;AACnB;AAAA,IACF;AAGA,QAAI,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,GAAG;AAC1C;AAAA,IACF;AAEA,eAAW,SAAS,WAAW,IAAI,MAAM,GAAG,QAAQ,IAAI,GAAG;AAAA,EAC7D;AAGA,MAAI,CAAC,oBAAoB,YAAY,YAAY,IAAI,QAAQ,GAAG;AAC9D,UAAM,gBAAgB,IAAI,kBAAkB,UAAU,kBAAkB,CAAC;AAAA,EAC3E;AACF;AAEA,IAAM,uCAAuC,CAAI,OAAyB,SAAsC;AAC9G,MAAI,MAAM,eAAgB;AAC1B,QAAM,cAAc,MAAM;AAC1B,MAAI,CAAC,eAAe,YAAY,SAAS,EAAG;AAC5C,MAAI,CAAC,QAAQ,KAAK,WAAW,EAAG;AAIhC,MAAI,WAAW;AACf,MAAI,qBAAqB;AACzB,MAAI,mBAAmB;AAEvB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,CAAC,IAAK;AAGV,QAAI,IAAI,SAAS,IAAI,GAAG;AACtB,YAAM,OAAO,IAAI,MAAM,GAAG,EAAE;AAC5B,UAAI,MAAM;AACR,mBAAW,SAAS,WAAW,IAAI,OAAO,GAAG,QAAQ,IAAI,IAAI;AAAA,MAC/D;AACA,yBAAmB;AACnB;AAAA,IACF;AAEA,UAAM,MAAM,yBAAyB,GAAG;AACxC,QAAI,QAAQ,QAAW;AACrB,yBAAmB;AAEnB,UAAI,YAAY,YAAY,IAAI,QAAQ,GAAG;AACzC,cAAM,MAAM,kBAAkB,UAAU,kBAAkB;AAC1D,cAAM,MAAM,MAAM,kBAAkB,IAAI,GAAG,KAAK,oBAAI,IAAY;AAChE,YAAI,IAAI,GAAG;AACX,cAAM,kBAAkB,IAAI,KAAK,GAAG;AAGpC,YAAI,MAAM,KAAK,SAAS,GAAG;AACzB,gBAAM,UAAU,MAAM,gBAAgB,IAAI,GAAG,KAAK,oBAAI,IAAY;AAClE,kBAAQ,IAAI,GAAG;AACf,gBAAM,gBAAgB,IAAI,KAAK,OAAO;AAAA,QACxC;AAAA,MACF;AAEA,2BAAqB,mBAAmB,WAAW,IAAI,OAAO,GAAG,IAAI,GAAG,kBAAkB,IAAI,GAAG;AACjG;AAAA,IACF;AAGA,QAAI,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,GAAG;AAC/D,yBAAmB;AACnB;AAAA,IACF;AAEA,uBAAmB;AACnB,eAAW,SAAS,WAAW,IAAI,MAAM,GAAG,QAAQ,IAAI,GAAG;AAAA,EAC7D;AAGA,MAAI,CAAC,oBAAoB,YAAY,YAAY,IAAI,QAAQ,GAAG;AAC9D,UAAM,gBAAgB,IAAI,kBAAkB,UAAU,kBAAkB,CAAC;AAAA,EAC3E;AACF;AAEA,IAAM,mBAAmB,CACvB,OACA,QACA,QACA,MACA,IACA,aACA,WACmB;AACnB,QAAMC,UAAgC;AAAA,IACpC;AAAA,IACA,QAAQ,qBAAqB,MAAM;AAAA,EACrC;AAEA,MAAI,UAAU,MAAM;AAClB,IAAAA,QAAO,SAAS;AAAA,EAClB;AACA,MAAI,SAAS,QAAW;AACtB,IAAAA,QAAO,OAAO;AAAA,EAChB;AACA,MAAI,OAAO,QAAW;AACpB,IAAAA,QAAO,KAAK;AAAA,EACd;AACA,MAAI,aAAa;AACf,IAAAA,QAAO,cAAc;AAAA,EACvB;AAEA,QAAM,mBAAmB,qBAAqB,MAAM;AACpD,MAAI,qBAAqB,QAAW;AAClC,IAAAA,QAAO,SAAS;AAAA,EAClB;AAEA,SAAOA;AACT;AAEA,IAAM,6BAA6B,CAAI,UAAsD;AAC3F,QAAM,WAAW,MAAM;AACvB,QAAM,iBAAiB,MAAM;AAI7B,MAAI,YAAY,MAAM;AACpB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,gBAAgB,kBAAkB;AAAA,MAClC,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,kBAAkB,MAAM;AAC1B,WAAO;AAAA,MACL,UAAU;AAAA,MACV;AAAA,MACA,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAKA,MAAI,MAAM,aAAa,SAAS,GAAG;AACjC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,IACV,cAAc,MAAM;AAAA,IACpB,mBAAmB,MAAM;AAAA,IACzB,mBAAmB,MAAM;AAAA,EAC3B;AACF;AAEA,IAAM,uBAAuB,CAAI,KAAyB,OAAyB,eAAwB;AACzG,MAAI,CAAC,MAAM,qBAAsB;AACjC,MAAI,MAAM,eAAgB;AAG1B,MAAI,MAAM,+BAA+B,MAAM,aAAa,OAAO,EAAG;AAEtE,QAAM,WAAW,MAAM;AACvB,MAAI,CAAC,UAAU;AACb,UAAM,iBAAiB;AACvB;AAAA,EACF;AAEA,QAAM,OAAO,MAAM;AACnB,QAAM,OAAO;AAGb,MAAI,CAAC,QAAQ,CAAC,MAAM;AAClB,UAAM,iBAAiB;AACvB;AAAA,EACF;AACA,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AACxD,UAAM,iBAAiB;AACvB;AAAA,EACF;AACA,MAAI,MAAM,QAAQ,IAAI,KAAK,MAAM,QAAQ,IAAI,GAAG;AAC9C,UAAM,iBAAiB;AACvB;AAAA,EACF;AAEA,QAAM,iBAAiB,SAAS;AAChC,QAAM,cAAc,MAAM;AAE1B,QAAM,YAAY,CAAC,KAAa,WAAoB,cAA6B;AAC/E,QAAI,MAAM,eAAgB;AAC1B,QAAI,CAAC,IAAK;AAGV,QAAI,CAAC,kBAAkB,CAAC,eAAe,IAAI,GAAG,GAAG;AAC/C;AAAA,IACF;AAEA,QAAI,eAAe,YAAY,IAAI,GAAG,GAAG;AACvC,YAAM,cAAc,kBAAkB,KAAK,EAAE;AAG7C,UAAI,MAAM,gBAAgB,IAAI,WAAW,GAAG;AAC1C;AAAA,MACF;AAEA,YAAM,UAAU,MAAM,QAAQ,SAAS,IAAK,YAAuC;AACnF,YAAM,UAAU,MAAM,QAAQ,SAAS,IAAK,YAAuC;AAEnF,UAAI,CAAC,WAAW,CAAC,SAAS;AAExB,YAAI,YAAY,GAAG,GAAG,MAAM,SAAS;AACrC;AAAA,MACF;AAEA,UAAI,QAAQ,WAAW,QAAQ,QAAQ;AACrC,YAAI,YAAY,GAAG,GAAG,MAAM,SAAS;AACrC;AAAA,MACF;AAEA,UAAI,UAAU;AACd,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAG;AACvC,mBAAW;AACX,YAAI,YAAY,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS;AAG3C,YAAI,UAAU,2BAA2B;AACvC,cAAI,YAAY,GAAG,GAAG,MAAM,SAAS;AACrC;AAAA,QACF;AAAA,MACF;AAGA,UAAI,YAAY,GAAG;AACjB,YAAI,YAAY,GAAG,GAAG,MAAM,SAAS;AAAA,MACvC;AAEA;AAAA,IACF;AAEA,QAAI,YAAY,KAAK,SAAS;AAAA,EAChC;AAGA,QAAM,WAAW,OAAO,KAAK,IAAI;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,MAAM,SAAS,CAAC;AACtB,UAAM,YAAY,KAAK,GAAG;AAC1B,UAAM,YAAY,KAAK,GAAG;AAC1B,QAAI,CAAC,OAAO,GAAG,WAAW,SAAS,KAAK,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,GAAG,GAAG;AACxF,gBAAU,KAAK,WAAW,SAAS;AAAA,IACrC;AAAA,EACF;AAGA,QAAM,WAAW,OAAO,KAAK,IAAI;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,OAAO,UAAU,eAAe,KAAK,MAAM,GAAG,EAAG;AACrD,cAAU,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC;AAAA,EACrC;AAGA,MAAI,CAAC,MAAM,kBAAkB,MAAM,aAAa,SAAS,GAAG;AAC1D,UAAM,iBAAiB;AAAA,EACzB;AACF;AAEA,IAAM,4BAA4B,CAChC,KACA,OACA,YACA,YACwB;AACxB,QAAM,EAAE,OAAO,IAAI;AACnB,uBAAqB,KAAK,OAAO,UAAU;AAC3C,QAAM,QAAQ,2BAA2B,KAAK;AAC9C,QAAM,UACJ,OAAO,oBAAoB,SACvB,MAAM,QAAQ,WAAW,IACvB,oBACC,MAAM,UACT;AAEN,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,YAAY,KAAK,IAAI,GAAG,UAAU,MAAM,SAAS;AAAA,IACjD;AAAA,IACA,YAAY,MAAM;AAAA,IAClB,kBAAkB,MAAM;AAAA,IACxB,GAAI,MAAM,mBAAmB,EAAE,wBAAwB,cAAc,IAAI;AAAA,IACzE,sBAAsB,MAAM;AAAA,IAC5B,oBAAoB,OAAO,mBAAmB,aAAa;AAAA,IAC3D;AAAA,IACA,UAAU,OAAO;AAAA,IACjB,YAAY,OAAO;AAAA,EACrB;AACF;AAEO,IAAM,cAAc,CAAI,WAA+C;AAC5E,QAAM,kBAAgD,OAAO,mBAAmB;AAEhF,QAAM,mBAAmB,OAAO,oBAAoB,oBAAoB;AAExE,QAAM,UAA4B;AAAA,IAChC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,EAAE,MAAM,UAAU;AAAA,IAC1B,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,IACP,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,6BAA6B;AAAA,IAC7B,aAAa;AAAA,IACb,SAAS,CAAC;AAAA,IACV,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,cAAc,oBAAI,IAAI;AAAA,IACtB,qBAAqB,CAAC;AAAA,IACtB,qBAAqB,eAAe;AAAA,IACpC,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,mBAAmB,oBAAI,IAAI;AAAA,IAC3B,iBAAiB,oBAAI,IAAI;AAAA,IACzB,iBAAiB,oBAAI,IAAI;AAAA,EAC3B;AAEA,QAAM,MAA0B;AAAA,IAC9B,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA,KAAK,OAAO,OAAO;AAAA,MACnB,UAAU,OAAO;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,wBAAwB,OAAO;AAAA,MAC/B,gBAAgB,OAAO;AAAA,IACzB;AAAA,IACA,SAAS;AAAA,IACT,YAAY;AAAA,IACZ;AAAA,IACA,aAAa,MAAM;AAAA,IAAC;AAAA,EACtB;AAEA,QAAM,mBAAmB,CACvB,MACA,SACA,OACA,KACA,cACA,YACS;AACT,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAO;AACZ,UAAM,cAAc;AACpB,QAAI,OAAO,SAAS,UAAU;AAC5B,4CAAsC,OAAO,IAAI;AAAA,IACnD,WAAW,MAAM,QAAQ,IAAI,GAAG;AAC9B,2CAAqC,OAAO,IAAI;AAAA,IAClD;AACA,gCAA4B,OAAO,MAAM,OAAO;AAAA,EAClD;AAEA,QAAM,kBAAkB,CACtB,MACA,QACA,MACA,IACA,aACA,WACS;AACT,UAAM,QAAQ,IAAI;AAClB,QAAI,CAAC,MAAO;AACZ,UAAM,cAAc;AACpB,QAAI,OAAO,SAAS,UAAU;AAC5B,4CAAsC,OAAO,IAAI;AAAA,IACnD,WAAW,MAAM,QAAQ,IAAI,GAAG;AAC9B,2CAAqC,OAAO,IAAI;AAAA,IAClD;AACA,UAAM,QAAQ,MAAM,aAAa;AACjC,UAAM,SAAS,4BAA4B,OAAO,MAAM,MAAM;AAC9D,QAAI,MAAM,oBAAoB,MAAM,QAAQ,UAAU,kBAAkB;AACtE,YAAM,mBAAmB;AACzB;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,iBAAiB,OAAO,QAAQ,QAAQ,MAAM,IAAI,aAAa,MAAM,CAAC;AAAA,EAC3F;AAEA,MAAI,cAAc,oBAAoB,SAAS,kBAAkB;AAEjE,SAAO;AACT;AAOO,IAAM,mBAAmB,CAAI,KAAyB,QAAwB,iBAA0B;AAC7G,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,MAAM,OAAO;AACnB,QAAM,YAAY,IAAI;AAEtB,MAAI,cAAc;AAClB,QAAM,SAAS,IAAI;AACnB,QAAM,SAAS,OAAO,cAAc;AACpC,QAAM,QAAQ,GAAG,MAAM,MAAM,MAAM;AAEnC,QAAM,kBAAkB,OAAO,mBAAmB,eAAe;AAEjE,QAAM,QAAQ,IAAI;AAClB,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,SAAS;AACf,QAAM,YAAY;AAClB,QAAM,YAAY;AAClB,QAAM,QAAQ;AACd,QAAM,uBAAuB;AAC7B,QAAM,uBAAuB;AAC7B,QAAM,8BAA8B;AACpC,QAAM,UAAU,CAAC;AACjB,QAAM,aAAa;AACnB,QAAM,mBAAmB;AACzB,QAAM,sBAAsB,IAAI,OAAO,yBAAyB;AAChE,QAAM,aAAa,MAAM;AACzB,QAAM,sBAAsB,CAAC;AAC7B,QAAM,sBAAsB,eAAe;AAC3C,QAAM,sBAAsB;AAC5B,QAAM,iBAAiB;AACvB,QAAM,cAAc,IAAI,OAAO,iBAAiB;AAChD,QAAM,kBAAkB,MAAM;AAC9B,QAAM,gBAAgB,MAAM;AAC5B,QAAM,gBAAgB,MAAM;AAC5B,MAAI,UAAU;AAChB;AAEA,IAAM,8BAA8B,CAClC,OACA,MACA,WAC4B;AAC5B,MAAI,MAAM,eAAgB,QAAO;AAEjC,MAAI,SAAS,QAAW;AACtB,UAAM,iBAAiB;AACvB,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,KAAK;AAEhB,QAAI,WAAW,QAAQ;AACrB,YAAM,iBAAiB;AACvB,aAAO;AAAA,IACT;AAIA,UAAM,uBAAuB;AAG7B,QAAI,WAAW,WAAW;AACxB,YAAM,8BAA8B;AAAA,IACtC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,MAAM;AACvB,MAAI,CAAC,UAAU;AACb,UAAM,iBAAiB,WAAW,YAAY,mBAAmB;AACjE,WAAO;AAAA,EACT;AAEA,MAAI;AAEJ,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI,CAAC,OAAO,SAAS,IAAI,GAAG;AAC1B,YAAM,iBAAiB;AACvB,aAAO;AAAA,IACT;AACA,UAAM,IAAI,KAAK,MAAM,IAAI;AACzB,QAAI,IAAI,GAAG;AACT,YAAM,iBAAiB;AACvB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,SAAS,WAAW,CAAC,GAAG;AAC3B,YAAM,iBAAiB;AACvB,aAAO;AAAA,IACT;AACA,SAAK;AAAA,EACP,WAAW,OAAO,SAAS,UAAU;AAEnC,UAAM,SAAS,SAAS,gBAAgB,IAAI,IAAI;AAChD,QAAI,UAAU,MAAM;AAClB,WAAK;AAAA,IACP,OAAO;AASL,YAAM,SAAS,KAAK,QAAQ,GAAG;AAC/B,YAAM,aAAa,KAAK,QAAQ,GAAG;AAGnC,UAAI,SAAS,KAAK,aAAa,GAAG;AAChC,cAAM,OAAO,KAAK,MAAM,GAAG,UAAU;AACrC,cAAM,aAAa,SAAS,gBAAgB,IAAI,IAAI;AACpD,YAAI,cAAc,MAAM;AACtB,eAAK;AAAA,QACP;AAAA,MACF;AAEA,UAAI,MAAM,MAAM;AACd,YAAI,sBAAsB,cAAc,KAAK,KAAK,QAAQ,GAAG,KAAK;AAGlE,YAAI,CAAC,qBAAqB;AACxB,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,gBAAI,KAAK,WAAW,CAAC,MAAM,GAAc;AACzC,gBAAI,IAAI,IAAI;AACZ,gBAAI,KAAK,KAAK,OAAQ;AACtB,kBAAM,IAAI,KAAK,WAAW,CAAC;AAC3B,gBAAI,IAAI,MAAgB,IAAI,GAAc;AAE1C,mBAAO,IAAI,KAAK,QAAQ;AACtB,oBAAM,IAAI,KAAK,WAAW,CAAC;AAC3B,kBAAI,IAAI,MAAgB,IAAI,GAAc;AAC1C,mBAAK;AAAA,YACP;AAEA,gBAAI,MAAM,KAAK,UAAU,KAAK,WAAW,CAAC,MAAM,IAAc;AAC5D,oCAAsB;AACtB;AAAA,YACF;AAEA,gBAAI;AAAA,UACN;AAAA,QACF;AAEA,YAAI,qBAAqB;AACvB,gBAAM,aAAa,mBAAmB,IAAI;AAC1C,cAAI,YAAY;AACd,kBAAM,OAAO,eAAe,UAAU,UAAU;AAChD,gBAAI,QAAQ,MAAM;AAChB,mBAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,MAAM,MAAM;AACd,cAAM,iBAAiB;AACvB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,aAAa,mBAAmB,IAAI;AAC1C,QAAI,CAAC,YAAY;AACf,YAAM,iBAAiB;AACvB,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,eAAe,UAAU,UAAU;AAChD,QAAI,QAAQ,MAAM;AAChB,YAAM,iBAAiB;AACvB,aAAO;AAAA,IACT;AACA,SAAK;AAAA,EACP;AAEA,QAAM,aAAa,IAAI,EAAE;AAGzB,QAAM,YAAY,MAAM,aAAa;AACrC,MAAI,cAAc,MAAM,qBAAqB;AAC3C,UAAM,oBAAoB,KAAK,EAAE;AACjC,QAAI,IAAI,MAAM,wBAAwB;AACtC,SAAK,OAAO;AACZ,QAAI,KAAK,KAAK,GAAG,QAAQ;AACzB,UAAM,sBAAsB,MAAM;AAClC,UAAM,sBAAsB;AAAA,EAC9B;AACA,SAAO;AACT;AAOO,IAAM,cAAc,CAAI,KAAyB,SAAkB;AACxE,QAAM,QAAQ,IAAI;AAClB,MAAI,CAAC,OAAO;AAEV;AAAA,EACF;AAEA,QAAM,QAAQ;AAChB;AAOO,IAAM,cAAc,CACzB,KACA,MACA,QACA,MACA,IACA,aACA,WACS;AACT,MAAI,YAAY,MAAM,QAAQ,MAAM,IAAI,aAAa,MAAM;AAC7D;AAEO,IAAM,gBAAgB,CAC3B,KACA,MACA,WAC4B;AAC5B,QAAM,QAAQ,IAAI;AAClB,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,4BAA4B,OAAO,MAAM,MAAM;AACxD;AAEO,IAAM,oBAAoB,CAAI,QAA0D;AAC7F,QAAM,QAAQ,IAAI;AAClB,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,cAAc,MAAM;AAC1B,QAAM,OACJ,eAAe,YAAY,OAAO,IAC9B;AAAA,IACE,eAAe,MAAM;AAAA,IACrB,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,EACrB,IACA;AACN,SAAO;AAAA,IACL,UAAU,MAAM,kBAAkB;AAAA,IAClC,gBAAgB,MAAM;AAAA,IACtB,cAAc,MAAM;AAAA,IACpB,mBAAmB,MAAM;AAAA,IACzB,mBAAmB,MAAM;AAAA,IACzB,GAAI,OAAO,EAAE,KAAK,IAAI;AAAA,EACxB;AACF;AAOO,IAAM,kBAAkB,CAC7B,KACA,aAEA,OAAO,IAAI,aAAa;AACtB,QAAM,QAAQ,IAAI;AAClB,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,MAAM,OAAO;AAEnB,QAAM,aAAa,MAAM;AAGzB,MAAI,OAAO,GAAG,YAAY,MAAM,SAAS,GAAG;AAC1C,QAAI,UAAU;AACd,WAAO;AAAA,EACT;AAGA,SAAO,gBAAgB,IAAI,UAAU,UAAU;AAE/C,QAAM,UAAU,IAAI;AACpB,QAAM,cAAc,0BAA0B,KAAK,OAAO,YAAY,OAAO;AAI7E,QAAM,UAAU,CAAC;AAGjB,MAAI,UAAU;AAEd,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF,CAAC;AAuBI,IAAM,QAAQ,CAAI,QAAkC;AACzD,MAAI,UAAU;AAChB;;;ACtlCO,IAAM,0BAA0B,CAAC,UACtC,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAEnD,IAAM,uBAAuB,CAAC,UACnC,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI,QAAQ;AAEvE,IAAM,0BAA0B,CAAC,UACtC,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AAEtE,IAAM,6BAA6B,CAAC,UACzC,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,SAAS,IAAI,QAAQ;AAEvE,IAAM,mBAAmB,CAAC,UAC/B,OAAO,UAAU,YAAY,QAAQ;;;ACbvC,SAAS,UAAAC,SAAQ,cAAc;AAc/B,IAAM,oBAAoB,MACxBC,QAAO,cAAc,qBAA4B,EAAE;AAAA,EACjDA,QAAO,IAAI,CAAC,WAAW,MAA2D;AACpF;AAEF,IAAM,iBAAiB,MACrBA,QAAO,cAAc,aAAoB,EAAE,KAAKA,QAAO,IAAI,CAAC,WAAW,MAAmC,CAAC;AAEtG,IAAM,kCAAkC,MAC7CA,QAAO,IAAI,aAAa;AACtB,QAAM,gBAAgB,OAAO,kBAAkB;AAC/C,QAAM,gBAAgB,OAAO,eAAe;AAC5C,SAAO;AAAA,IACL,iBAAiB,OAAO,OAAO,aAAa,IAAI,cAAc,MAAM,QAAQ,CAAC;AAAA,IAC7E,YAAY,OAAO,OAAO,aAAa,IAAI,cAAc,QAAQ;AAAA,EACnE;AACF,CAAC;AAKI,IAAM,uBAAuB,CAClC,MACA,eACuB;AACvB,QAAM,UAAU;AAChB,MAAI,OAAO,SAAS,UAAU,YAAY,OAAO,SAAS,QAAQ,KAAK,GAAG;AACxE,WAAO,KAAK,MAAM,QAAQ,KAAK;AAAA,EACjC;AAEA,MAAI,CAAC,cAAc,CAAC,SAAS;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,QAAQ,cAAc;AAClC,QAAM,QAAQ,WAAW,MAAM,QAAQ,SAAS,GAAG;AACnD,UAAQ,QAAQ;AAChB,SAAO;AACT;AAYO,IAAM,mBAAmB,CAAC,SAKb;AAClB,QAAM,EAAE,iBAAiB,YAAY,cAAc,WAAW,IAAI;AAElE,QAAM,eAA6B,CACjC,MACA,MACA,QAIA,QAEAC,QAAO,IAAI,aAAa;AACtB,UAAM,EAAE,iBAAiB,WAAW,IAAI,OAAO,gCAAgC;AAC/E,UAAM,iBAAiB,OAAOA,QAAO,QAAqB,aAAa,EAAE,KAAKA,QAAO,KAAK;AAE1F,UAAMC,gBAAe,WAAW,SAAS;AAMzC,UAAM,EAAE,QAAQ,gBAAgB,GAAG,SAAS,IAAK,OAAO,QAAQ,CAAC;AAEjE,UAAM,WAAsC;AAAA,MAC1C,GAAG;AAAA;AAAA,MAEH,UAAW,OAAO,MAAc,YAAY;AAAA,MAC5C,YAAa,OAAO,MAAc,cAAc;AAAA,MAChD,cAAe,OAAO,MAAc,gBAAgB;AAAA,MACpD,QAAS,OAAO,MAAc,UAAU,WAAW,SAAS;AAAA,MAC5D,OAAQ,OAAO,MAAc,SAASA;AAAA,IACxC;AAEA,UAAM,QAAQ,qBAAqB,UAAU,UAAU;AAEvD,UAAM,KAAc,KAAiB;AAAA,MACnC;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,QAAQ;AAAA,MACR,MAAM;AAAA,IACR,CAAC;AAED,UAAM,SAAS,kBAAkB,GAAG;AACpC,UAAM,UAAU,gBAAgB,SAAkB,IAAI,IAAI,eAAe,IAAI,GAAG;AAGhF,WAAO,OAAOD,QAAO,eAAeA,QAAO,eAAe,SAAe,cAAc,KAAK,GAAgB,eAAe,MAAM;AAAA,EACnI,CAAC;AAEH,SAAO;AACT;;;ACzHA,SAAS,UAAAE,SAAQ,cAAc;;;ACA/B,SAAS,OAAO,UAAAC,eAAc;AAgBvB,IAAM,mBAAmB,CAC9B,MACA,KACA,aAEA,OAAO;AAAA,EACL,IAAI;AAAA,IACF,SAAS,0BACL,sDAAsD,GAAG,8DACzD,8DAA8D,GAAG;AAAA,EACvE;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AASK,IAAM,2BAA2B,CACtC,OACA,wBAEAC,QAAO,KAAK,MAAM;AAChB,QAAM,UAAU,MAAM,QAAQ,OAAO,MAAM,WAAW,EAAE,IAAI,CAAC,WAAW,OAAO,MAAM;AAErF,MAAI;AACJ,MAAI;AAEJ,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAC3C,UAAM,QAAQ;AACd,QAAI,MAAM,SAAS,yBAAyB;AAC1C,kBAAY;AAAA,IACd,WAAW,MAAM,SAAS,gCAAgC;AACxD,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,UAAsC,CAAC;AAE7C,MAAI,WAAW;AACb,YAAQ;AAAA,MACA,OAAO;AAAA,QACX,MAAM;AAAA,QACN,UAAU,UAAU,YAAY;AAAA,QAChC,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,4BAA4B,UAAU,GAAG;AAAA,QAClD,MAAM;AAAA,QACN,WAAW,UAAU;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,MAAM;AACR,YAAQ;AAAA,MACA,OAAO;AAAA,QACX,MAAM;AAAA,QACN,UAAU,KAAK,YAAY;AAAA,QAC3B,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,4BAA4B,KAAK,GAAG;AAAA,QAC7C,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAOA,QAAO;AAAA,EAChB;AAEA,MAAI,WAAgCA,QAAO;AAC3C,aAAW,OAAO,SAAS;AACzB,eAAW,SAAS,KAAKA,QAAO,QAAQ,MAAM,GAAG,CAAC;AAAA,EACpD;AACA,SAAO;AACT,CAAC,EAAE,KAAKA,QAAO,OAAO;;;ADrFxB,IAAM,cAAc,MAAc;AAChC,QAAM,OAAO,WAAW;AACxB,MAAI,QAAQ,OAAO,KAAK,QAAQ,YAAY;AAC1C,WAAO,KAAK,IAAI;AAAA,EAClB;AACA,SAAO,KAAK,IAAI;AAClB;AA4CO,IAAM,kBAAkB,CAAO,SA0CjC;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAAC;AAAA,EACF,IAAI;AAEJ,QAAM,wBAAwB,CAAC,QAA4C;AACzE,QAAI,IAAI,SAAS,QAAQ,KAAK,IAAI,SAAS,QAAQ,EAAG,QAAO;AAC7D,QACE,IAAI,SAAS,QAAQ,KACrB,IAAI,SAAS,SAAS,KACtB,IAAI,SAAS,QAAQ,KACrB,IAAI,SAAS,MAAM,KACnB,IAAI,SAAS,MAAM,KACnB,IAAI,SAAS,QAAQ,KACrB,IAAI,SAAS,SAAS,KACtB,IAAI,SAAS,QAAQ,KACrB,IAAI,SAAS,MAAM,KACnB,IAAI,SAAS,MAAM,GACnB;AACA,aAAO;AAAA,IACT;AACA,QAAI,IAAI,SAAS,OAAO,KAAK,IAAI,SAAS,OAAO,EAAG,QAAO;AAC3D,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,CAAC,WAA8B;AACnD,UAAM,MAAO,QAAgB;AAC7B,UAAM,OAAQ,QAAgB;AAE9B,UAAM,YACJ,OAAO,QAAQ,YAAY,IAAI,SAAS,IACpC,MACA,OAAO,SAAS,YAAY,KAAK,SAAS,IACxC,OACA,OAAO,OACL,OAAO,GAAG,IACV,QAAQ,OACN,OAAO,IAAI,IACX;AAEZ,QAAI;AACJ,QAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,wBAAkB;AAAA,IACpB;AAEA,QAAI;AACJ,QAAI,OAAO,SAAS,YAAY,KAAK,SAAS,GAAG;AAC/C,UAAI,mBAAmB,MAAM;AAC3B,0BAAkB;AAAA,MACpB,WAAW,SAAS,iBAAiB;AACnC,4BAAoB;AAAA,MACtB;AAAA,IACF;AAEA,QAAI,mBAAmB,QAAQ,WAAW;AACxC,wBAAkB;AAAA,IACpB;AAEA,WAAO;AAAA,MACL;AAAA,MACA,qBAAqB,OAAO,cAAc,YAAY,UAAU,SAAS,IAAI,YAAY;AAAA,MACzF;AAAA,MACA;AAAA,MACA,UAAU,sBAAsB,aAAa,EAAE;AAAA,IACjD;AAAA,EACF;AAGA,QAAM,aAAa,oBAAI,IAAwC;AAC/D,MAAI,iBAAiB;AACnB,eAAW,CAAC,KAAK,EAAE,KAAK,OAAO,QAAQ,eAAe,GAAG;AACvD,iBAAW,IAAI,KAAK,EAAgC;AAAA,IACtD;AAAA,EACF;AAGA,QAAM,iBAAiB,oBAAI,IAAY;AACvC,QAAM,wBAAwB,oBAAI,IAAsD;AAExF,QAAM,kBAAkB,CAAC,KAAa,OAAyC;AAC7E,QAAI,WAAW,IAAI,GAAG,GAAG;AAEvB,YAAyB,iBAAiB,yBAAyB,KAAK,eAAe;AAAA,IACzF;AACA,QAAI,eAAe,IAAI,GAAG,GAAG;AAE3B,YAAyB,iBAAiB,gCAAgC,KAAK,eAAe;AAAA,IAChG;AACA,eAAW,IAAI,KAAK,EAAE;AAAA,EACxB;AAEA,QAAM,+BAA+B,CAAC,KAAa,YAAqD;AACtG,QAAI,eAAe,IAAI,GAAG,GAAG;AAC3B,YAAyB,iBAAiB,gCAAgC,KAAK,eAAe;AAAA,IAChG;AACA,UAAM,WAAW,sBAAsB,IAAI,GAAG;AAC9C,QAAI,UAAU;AACZ,eAAS,KAAK,OAAO;AACrB;AAAA,IACF;AACA,0BAAsB,IAAI,KAAK,CAAC,OAAO,CAAC;AAAA,EAC1C;AAEA,QAAM,sBAAsB,CAAC,QAAW,aAA6B;AACnE,UAAM,MAAM,SAAS;AACrB,QAAI,OAAO,QAAQ,WAAW,SAAS,GAAG;AACxC,aAAOC,QAAO;AAAA,IAChB;AACA,UAAM,SAAS,IAAI,SAAS,IAAI,MAAM;AACtC,mBAAe,IAAI,MAAM;AACzB,UAAM,UAAU,WAAW,IAAI,MAAM;AACrC,QAAI,CAAC,SAAS;AACZ,aAAOA,QAAO;AAAA,IAChB;AAEA,WAAO,UAAU;AAAA,MACfA,QAAO;AAAA,QAAQ,CAAC,SACdA,QAAO,IAAI,aAAa;AACtB,gBAAM,aAAqD,CAAC;AAC5D,gBAAM,OAAO,CAAC,SAAgD;AAC5D,gBAAI,OAAO,SAAS,UAAU;AAC5B,kBAAI,KAAK,SAAS,EAAG,YAAW,KAAK,IAAI;AACzC;AAAA,YACF;AACA,gBAAI,OAAO,SAAS,UAAU;AAC5B,kBAAI,OAAO,SAAS,IAAI,EAAG,YAAW,KAAK,KAAK,MAAM,IAAI,CAAC;AAC3D;AAAA,YACF;AACA,gBAAI,KAAK,SAAS,EAAG,YAAW,KAAK,IAAI;AAAA,UAC3C;AAEA,gBAAM,OAAQ,QAAgB,MAAM,QAAQ,IAAI;AAGhD,cAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AACzB;AAAA,UACF;AAKA,cAAI,WAAW,SAAS;AACtB,gBAAI,WAAW,SAAS,GAAG;AACzB,cAAiB,YAAY,YAAY,IAAI;AAC7C,yBAAW,QAAQ,YAAY;AAC7B,iCAAiB,MAAM,SAAS;AAAA,cAClC;AACA;AAAA,YACF;AAEA,YAAiB,YAAY,YAAY,IAAI;AAC7C,6BAAiB,KAAK,WAAW,QAAW,IAAI;AAEhD,gBAAID,UAAS,GAAG;AACd,qBAAa,OAAO;AAAA,gBAClB,MAAM;AAAA,gBACN,UAAU;AAAA,gBACV;AAAA,gBACA,QAAQ,WAAW,SAAS;AAAA,gBAC5B,OAAO,WAAW,SAAS;AAAA,gBAC3B,SAAS,WAAW,SAAS;AAAA,gBAC7B,MAAM;AAAA,gBACN,UAAU;AAAA,gBACV,SACE;AAAA,gBACF,MAAM;AAAA,gBACN,MAAM;AAAA,cACR,CAAC;AAAA,YACH;AAEA;AAAA,UACF;AAEA,iBAAO,iBAAiB,MAAM,KAAK,WAAW,QAAW,IAAI;AAAA,QAC/D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAGA,QAAM,6BAA6B,CAAC,QAAW,aAA8D;AAC3G,UAAM,MAAM,SAAS;AACrB,QAAI,OAAO,QAAQ,sBAAsB,SAAS,GAAG;AACnD,aAAOC,QAAO;AAAA,IAChB;AACA,UAAM,WAAW,sBAAsB,IAAI,IAAI,SAAS,IAAI,MAAM,SAAS;AAC3E,QAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,aAAOA,QAAO;AAAA,IAChB;AAEA,WAAOA,QAAO,IAAI,aAAa;AAC7B,UAAI;AACJ,UAAI;AACJ,UAAI,yBAAyB;AAC7B,UAAI,iBAAiB;AACrB,YAAM,oBAA4D,CAAC;AAEnE,YAAM,eAAe,MAAY;AAC/B,uBAAe;AACf,iCAAyB;AACzB,yBAAiB;AACjB,0BAAkB,SAAS;AAAA,MAC7B;AAEA,YAAM,eAAe,MACnBA,QAAO,IAAI,aAAa;AACtB,YAAI,CAAC,kBAAkB,iBAAiB,QAAW;AACjD,uBAAa;AACb;AAAA,QACF;AAEA,YAAI,wBAAwB;AAC1B,iBAAO,iBAAiB,cAAc,KAAK,WAAW,QAAW,YAAY;AAAA,QAC/E,OAAO;AACL,qBAAW,QAAQ,mBAAmB;AACpC,6BAAiB,MAAM,SAAS;AAAA,UAClC;AACA,UAAiB,YAAY,YAAY,YAAY;AAAA,QACvD;AAEA,uBAAe;AACf,qBAAa;AAAA,MACf,CAAC;AAEH,YAAM,kBAAkB,MACtB,iBAAiB,SACb,UAAU;AAAA,QACRA,QAAO;AAAA,UAAI,CAAC,UACVA,QAAO,KAAK,MAAM;AAChB,2BAAe;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACF,IACAA,QAAO,QAAQ,YAAY;AAEjC,iBAAW,WAAW,UAAU;AAC9B,YAAI,QAAQ,SAAS,UAAU;AAC7B,iBAAO,aAAa;AACpB,iBAAO,QAAQ,IAAI,MAAM;AACzB,yBAAe;AACf;AAAA,QACF;AAEA,cAAM,OAAO,iBAAiB,OAAO,gBAAgB;AAErD,YAAI,QAAQ,SAAS,UAAU;AAC7B,gBAAM,OAAO,QAAQ,IAAI,MAAM,MAAM;AACrC,cAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AACzB;AAAA,UACF;AACA,yBAAe;AACf,2BAAiB;AACjB,mCAAyB;AACzB;AAAA,QACF;AAEA,cAAM,EAAE,WAAW,WAAW,IAAI,qBAAqB,MAAW,CAAC,UAAU,QAAQ,IAAI,OAAY,MAAM,CAAC;AAC5G,YAAI,OAAO,GAAG,WAAW,IAAI,GAAG;AAC9B;AAAA,QACF;AAEA,uBAAe;AACf,yBAAiB;AAEjB,YAAI,CAAC,wBAAwB;AAC3B,qBAAW,QAAQ,YAAY;AAC7B,8BAAkB,KAAK,IAAI;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAEA,aAAO,aAAa;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,QAAM,mBAAmB,CACvB,YACA,QACA,UACA,cACqC;AAAA,IACrC,MAAM,UAAU,QAAQ;AAAA,IACxB,MAAM,UAAU,QAAQ;AAAA,IACxB,SAAS;AAAA,MACP,MAAM,SAAS;AAAA,MACf,MAAM,OAAQ,QAAgB,SAAS,SAAS,WAAa,OAAe,QAAQ,OAAkB;AAAA,MACtG,IAAI,SAAS;AAAA,IACf;AAAA,EACF;AAEA,QAAM,wBAAwB,CAAC,QAAW,aACxCA,QAAO,IAAI,aAAa;AAEtB,WAAO,oBAAoB,QAAQ,QAAQ;AAC3C,WAAO,2BAA2B,QAAQ,QAAQ;AAElD,UAAM,gBAAgB,qBAAqB,CAAC,mBAAmB,IAAI,SAAS,mBAAmB,IAAI;AACnG,UAAM,UAAe,WAAW;AAChC,UAAM,qBAAqB,SAAS,+BAA+B;AAGnE,UAAM,0BAA0B,qBAAqB,YAAY,IAAI;AACrE,WAAa,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,UAAU;AAAA,MACV;AAAA,MACA,WAAW,SAAS;AAAA,MACpB,GAAI,gBAAgB,EAAE,eAAe,KAAK,IAAI,CAAC;AAAA,MAC/C;AAAA,MACA,QAAQ,WAAW,SAAS;AAAA,MAC5B,OAAO,WAAW,SAAS;AAAA,IAC7B,CAAC;AACD,QAAI,oBAAoB;AACtB,cAAQ,0BACL,OAAO,QAAQ,2BAA2B,WAAW,QAAQ,yBAAyB,KACvF,KAAK,IAAI,GAAG,YAAY,IAAI,uBAAuB;AAAA,IACvD;AAGA,QAAI,SAAS;AACX,YAAM,OAAwB;AAAA,QAC5B,QAAQ,QAAQ;AAAA,QAChB,OAAO,QAAQ;AAAA,QACf,YAAc,QAAgB,cAAc;AAAA,QAC5C,UAAY,QAAgB,YAAY;AAAA,QACxC,YAAY,QAAQ,OAAO;AAAA,QAC3B,YAAY,QAAQ,OAAO;AAAA,MAC7B;AACA,YAAM,0BAA0B,qBAAqB,YAAY,IAAI;AACrE,aAAO,OAAO,QAAQ,iBAAiB,EAAE,OAAO,QAAQ,KAAK,CAAC;AAC9D,UAAI,oBAAoB;AACtB,gBAAQ,6BACL,OAAO,QAAQ,8BAA8B,WAAW,QAAQ,4BAA4B,KAC7F,KAAK,IAAI,GAAG,YAAY,IAAI,uBAAuB;AACrD,gBAAQ,uBACL,OAAO,QAAQ,wBAAwB,WAAW,QAAQ,sBAAsB,KAAK;AAAA,MAC1F;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,cAAc,CAAC,QAAW,UAA0B,aACxD;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,MAAM,EAAE,UAAU,iBAAiB,WAAW;AAAA,IAChD;AAAA,IACA;AAAA,MAAwB,iBAAiB,YAAY,QAAQ,UAAU,QAAQ;AAAA,MAAG,MAChF,sBAAsB,QAAQ,QAAQ;AAAA,IACxC;AAAA,EACF,EAAE,KAAKA,QAAO,MAAM;AAEtB,QAAM,yBAAyB,CAAC,QAAW,UAA0B,aACnE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,MAAM,EAAE,UAAU,iBAAiB,WAAW;AAAA,IAChD;AAAA,IACA;AAAA,MAAwB,iBAAiB,uBAAuB,QAAQ,UAAU,QAAQ;AAAA,MAAG,MAC3FA,QAAO,IAAI,aAAa;AACtB,YAAI,WAAW,SAAS;AACtB;AAAC,UAAC,WAAW,QAAgB,aAAa;AACzC,UAAC,WAAW,QAAgB,WAAW;AAAA,QAC1C;AACA,eAAQ,sBAAsB,QAAQ,QAAQ;AAAA,MAChD,CAAC;AAAA,IACH;AAAA,EACF,EAAE,KAAKA,QAAO,MAAM;AAEtB,QAAM,mBAAmB,CACvB,SACA,UACA,aACwB;AACxB,QAAI,QAAQ,WAAW,EAAG,QAAOA,QAAO;AAExC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM,EAAE,UAAU,iBAAiB,WAAW;AAAA,MAChD;AAAA,MACA;AAAA,QACE,EAAE,MAAM,UAAU,QAAQ,UAAU,MAAM,UAAU,QAAQ,iBAAiB,SAAS,EAAE,OAAO,QAAQ,OAAO,EAAE;AAAA,QAChH,MACEA,QAAO,IAAI,aAAa;AACtB,cAAI,WAAW,SAAS;AACtB;AAAC,YAAC,WAAW,QAAgB,aAAa;AACzC,YAAC,WAAW,QAAgB,WAAW;AAAA,UAC1C;AACA,mBAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,kBAAM,SAAS,QAAQ,KAAK;AAC5B,kBAAM,WAAW,SAAS,KAAK;AAC/B,mBAAQ,sBAAsB,QAAQ,QAAQ;AAAA,UAChD;AAAA,QACF,CAAC;AAAA,MACL;AAAA,IACF,EAAE,KAAKA,QAAO,MAAM;AAAA,EACtB;AAEA,QAAM,iCAAiC,CACrC,SACA,SACA,kBAEAA,QAAO,IAAI,aAAa;AACtB,UAAM,YAAY,KAAK,IAAI;AAC3B,WAAO;AACP,UAAM,YAAY,KAAK,IAAI,IAAI;AAG/B,QAAI,aAAa,GAAG;AAClB;AAAA,IACF;AAEA,UAAM,SAAS,OAAO,cAAc;AACpC,WAAO,YAAY,qBAAqB;AAAA,MACtC;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,qBAAqB;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAEH,QAAM,uCAAuC,CAC3C,KACA,QACA,SACA,kBACwB,+BAA+B,OAAO,QAAQ,KAAK,MAAM,GAAG,SAAS,aAAa;AAE5G,QAAM,4CAA4C,CAChD,KACA,SACA,SACA,kBACwB;AACxB,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAOA,QAAO;AAAA,IAChB;AACA,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,qCAAqC,KAAK,QAAQ,CAAC,GAAQ,SAAS,aAAa;AAAA,IAC1F;AACA,WAAO,+BAA+B,OAAO,WAAW,KAAK,OAAO,GAAG,SAAS,aAAa;AAAA,EAC/F;AAEA,QAAM,yBAAyB,MAAwD;AACrF,QAAI;AACJ,WAAO,MACL,SACIA,QAAO,QAAQ,MAAM,IACrB,yBAAyB,EAAE;AAAA,MACzBA,QAAO;AAAA,QAAI,CAAC,WACVA,QAAO,KAAK,MAAM;AAChB,mBAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACR;AAEA,QAAM,2BAA2B,CAACC,WAAyD;AAAA,IACzF,eAAeA,MAAK;AAAA,IACpB,SAASA,MAAK;AAAA,IACd,GAAI,OAAOA,MAAK,aAAa,WAAW,EAAE,UAAUA,MAAK,SAAS,IAAI,CAAC;AAAA,IACvE,GAAI,OAAOA,MAAK,cAAc,WAAW,EAAE,WAAWA,MAAK,UAAU,IAAI,CAAC;AAAA,IAC1E,GAAI,OAAOA,MAAK,cAAc,WAAW,EAAE,WAAWA,MAAK,UAAU,IAAI,CAAC;AAAA,IAC1E,GAAI,OAAOA,MAAK,gBAAgB,WAAW,EAAE,aAAaA,MAAK,YAAY,IAAI,CAAC;AAAA,EAClF;AAEA,QAAM,6BAA6B,CAAC,QAAW,aAAwD;AACrG,UAAM,eAAuD,CAAC;AAC9D,UAAM,kBAAkB,SAAS;AACjC,UAAM,kBAAkB,kBAAkB,oBAAoB,IAAI,eAAe,IAAI;AACrF,QAAI,mBAAmB,iBAAiB;AACtC,mBAAa,KAAK,EAAE,UAAU,iBAAiB,KAAK,gBAAgB,CAAC;AAAA,IACvE;AAEA,UAAM,oBAAoB,SAAS;AACnC,UAAM,oBAAoB,oBAAoB,oBAAoB,IAAI,iBAAiB,IAAI;AAC3F,QAAI,qBAAqB,mBAAmB;AAC1C,mBAAa,KAAK,EAAE,UAAU,mBAAmB,KAAK,kBAAkB,CAAC;AAAA,IAC3E;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,aAAa;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,yBAAyB,CAAC,YAA0E;AACxG,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,QAAQ,CAAC,EAAG,SAAS;AACnC,aAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,UAAI,QAAQ,KAAK,EAAG,SAAS,wBAAwB,OAAO;AAC1D,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,CAAC,YAA0F;AACnH,UAAM,UAAU,oBAAI,IASlB;AAEF,aAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,YAAM,QAAQ,QAAQ,KAAK;AAC3B,eAAS,aAAa,GAAG,aAAa,MAAM,aAAa,QAAQ,cAAc,GAAG;AAChF,cAAM,cAAc,MAAM,aAAa,UAAU;AACjD,YAAI,aAAa,QAAQ,IAAI,YAAY,QAAQ;AACjD,YAAI,CAAC,YAAY;AACf,uBAAa;AAAA,YACX,UAAU,YAAY;AAAA,YACtB,KAAK,YAAY;AAAA,YACjB,SAAS,CAAC;AAAA,YACV,WAAW,MAAM,SAAS;AAAA,YAC1B,aAAa;AAAA,UACf;AACA,kBAAQ,IAAI,YAAY,UAAU,UAAU;AAAA,QAC9C;AAEA,mBAAW,QAAQ,KAAK,MAAM,MAAM;AACpC,mBAAW,eAAe,MAAM;AAChC,YAAI,WAAW,aAAa,WAAW,cAAc,MAAM,SAAS,qBAAqB;AACvF,qBAAW,YAAY;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,WAAO,MAAM,KAAK,QAAQ,OAAO,CAAC;AAAA,EACpC;AAEA,QAAM,8BAA8B,CAClC,SACA,eACA,kBAEAD,QAAO,IAAI,aAAa;AACtB,QAAI,QAAQ,WAAW,GAAG;AACxB;AAAA,IACF;AAEA,UAAM,YAAY,QAAQ;AAC1B,QAAI,mBAAmB;AACvB,aAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,0BAAoB,QAAQ,KAAK,EAAG;AAAA,IACtC;AACA,UAAM,iBAAiB,cAAc,IAAI,QAAQ,CAAC,EAAG,SAAS,sBAAsB,uBAAuB,OAAO;AAClH,QAAI,cAAc,GAAG;AACnB,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,CAAC,EAAG;AAAA,QACZ,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,yBAAyB;AAAA,YAChC;AAAA,YACA,SAAS;AAAA,YACT,WAAW;AAAA,YACX;AAAA,YACA,aAAa;AAAA,UACf,CAAC;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,eAAe,IAAI,MAAS,SAAS;AAC3C,eAAS,QAAQ,GAAG,QAAQ,WAAW,SAAS,GAAG;AACjD,qBAAa,KAAK,IAAI,QAAQ,KAAK,EAAG;AAAA,MACxC;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,yBAAyB;AAAA,YAChC;AAAA,YACA,SAAS;AAAA,YACT,WAAW;AAAA,YACX;AAAA,YACA,aAAa;AAAA,UACf,CAAC;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,UAAM,eAAe,kBAAkB,OAAO;AAC9C,aAAS,aAAa,GAAG,aAAa,aAAa,QAAQ,cAAc,GAAG;AAC1E,YAAM,aAAa,aAAa,UAAU;AAC1C,aAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW;AAAA,QACX,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,yBAAyB;AAAA,YAChC;AAAA,YACA,SAAS;AAAA,YACT,UAAU,WAAW;AAAA,YACrB,WAAW,WAAW;AAAA,YACtB,WAAW,WAAW,QAAQ;AAAA,YAC9B,aAAa,WAAW;AAAA,UAC1B,CAAC;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAEH,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,4BAA4B,CAAC,QAAQ,aAAa;AAChD,YAAM,WAAW,cAAc,MAAM;AACrC,YAAM,mBAAmB,2BAA2B,QAAQ,QAAQ;AACpE,YAAM,gBAAgB,uBAAuB;AAC7C,aAAO,mBAAmB,YAAY,QAAQ,UAAU,QAAQ,CAAC,EAAE;AAAA,QACjEA,QAAO,QAAQ,MAAM,4BAA4B,CAAC,gBAAgB,GAAG,YAAY,aAAa,CAAC;AAAA,MACjG;AAAA,IACF;AAAA,IACA,iCAAiC,CAAC,SAAS,aAAa;AACtD,YAAM,WAAW,IAAI,MAAsB,QAAQ,MAAM;AACzD,eAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,iBAAS,KAAK,IAAI,cAAc,QAAQ,KAAK,CAAM;AAAA,MACrD;AACA,YAAM,qBAAqB,IAAI,MAAiC,QAAQ,MAAM;AAC9E,eAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,2BAAmB,KAAK,IAAI,2BAA2B,QAAQ,KAAK,GAAQ,SAAS,KAAK,CAAmB;AAAA,MAC/G;AACA,YAAM,gBAAgB,uBAAuB;AAC7C,aAAO,mBAAmB,iBAAiB,SAAS,UAAU,QAAQ,CAAC,EAAE;AAAA,QACvEA,QAAO,QAAQ,MAAM,4BAA4B,oBAAoB,iBAAiB,aAAa,CAAC;AAAA,MACtG;AAAA,IACF;AAAA,IACA,uCAAuC,CAAC,QAAQ,aAAa;AAC3D,YAAM,WAAW,cAAc,MAAM;AACrC,YAAM,mBAAmB,2BAA2B,QAAQ,QAAQ;AACpE,YAAM,gBAAgB,uBAAuB;AAC7C,aAAO,mBAAmB,uBAAuB,QAAQ,UAAU,QAAQ,CAAC,EAAE;AAAA,QAC5EA,QAAO,QAAQ,MAAM,4BAA4B,CAAC,gBAAgB,GAAG,uBAAuB,aAAa,CAAC;AAAA,MAC5G;AAAA,IACF;AAAA;AAAA;AAAA,IAGA,UAAU,CAAC,WAAW;AACpB,YAAM,WAAW,cAAc,MAAM;AACrC,YAAM,mBAAmB,2BAA2B,QAAQ,QAAQ;AACpE,YAAM,gBAAgB,uBAAuB;AAC7C,aAAO,mBAAmB,YAAY,QAAQ,QAAQ,CAAC,EAAE;AAAA,QACvDA,QAAO,QAAQ,MAAM,4BAA4B,CAAC,gBAAgB,GAAG,YAAY,aAAa,CAAC;AAAA,MACjG;AAAA,IACF;AAAA,IACA,eAAe,CAAC,YAAY;AAC1B,YAAM,WAAW,IAAI,MAAsB,QAAQ,MAAM;AACzD,eAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,iBAAS,KAAK,IAAI,cAAc,QAAQ,KAAK,CAAM;AAAA,MACrD;AACA,YAAM,qBAAqB,IAAI,MAAiC,QAAQ,MAAM;AAC9E,eAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,2BAAmB,KAAK,IAAI,2BAA2B,QAAQ,KAAK,GAAQ,SAAS,KAAK,CAAmB;AAAA,MAC/G;AACA,YAAM,gBAAgB,uBAAuB;AAC7C,aAAO,mBAAmB,iBAAiB,SAAS,QAAQ,CAAC,EAAE;AAAA,QAC7DA,QAAO,QAAQ,MAAM,4BAA4B,oBAAoB,iBAAiB,aAAa,CAAC;AAAA,MACtG;AAAA,IACF;AAAA,IACA,qBAAqB,CAAC,WAAW;AAC/B,YAAM,WAAW,cAAc,MAAM;AACrC,YAAM,mBAAmB,2BAA2B,QAAQ,QAAQ;AACpE,YAAM,gBAAgB,uBAAuB;AAC7C,aAAO,mBAAmB,uBAAuB,QAAQ,QAAQ,CAAC,EAAE;AAAA,QAClEA,QAAO,QAAQ,MAAM,4BAA4B,CAAC,gBAAgB,GAAG,uBAAuB,aAAa,CAAC;AAAA,MAC5G;AAAA,IACF;AAAA,EACF;AACF;;;AE/yBA,SAAS,UAAAE,SAAQ,cAAc;AA4B/B,IAAM,mBAAmB,CAAC,WAAwC;AAChE,QAAM,MAAO,QAAgB;AAC7B,MAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,EAAG,QAAO;AACtD,QAAM,OAAQ,QAAgB;AAC9B,MAAI,OAAO,SAAS,YAAY,KAAK,SAAS,EAAG,QAAO;AACxD,MAAI,OAAO,KAAM,QAAO,OAAO,GAAG;AAClC,MAAI,QAAQ,KAAM,QAAO,OAAO,IAAI;AACpC,SAAO;AACT;AAEA,IAAM,4BAA4B,CAAC,QAAqC,gBAAwC;AAC9G,QAAM,WAAW,OAAO,IAAI,WAAW;AACvC,MAAI,SAAU,QAAO;AACrB,QAAM,OAAuB,EAAE,gBAAgB,GAAG,YAAY,oBAAI,QAAQ,EAAE;AAC5E,SAAO,IAAI,aAAa,IAAI;AAC5B,SAAO;AACT;AAEA,IAAM,uBAAuB,CAAC,OAAuB,YAAsC;AACzF,QAAM,WAAW,MAAM,WAAW,IAAI,OAAO;AAC7C,MAAI,SAAU,QAAO;AACrB,QAAM,kBAAkB;AACxB,QAAM,KAAK,IAAI,MAAM,cAAc;AACnC,QAAM,WAAW,IAAI,SAAS,EAAE;AAChC,SAAO;AACT;AAaO,IAAM,sBAAsB,CAAC,SAQ/B;AACH,QAAM,EAAE,UAAU,YAAY,SAAS,IAAI;AAE3C,QAAM,kBAAkB,oBAAI,IAA4B;AACxD,QAAM,YAAY,oBAAI,IAA4B;AAClD,MAAI,iBAAiB;AAErB,QAAM,sBAAsB,CAAC,cAAsC;AACjE,UAAM,WAAW,UAAU,IAAI,SAAS;AACxC,QAAI,SAAU,QAAO;AACrB,UAAM,OAAuB,EAAE,UAAU,oBAAI,IAAI,GAAG,iBAAiB,CAAC,EAAE;AACxE,cAAU,IAAI,WAAW,IAAI;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,yBAAyB,CAAC,UAAgC;AAC9D,UAAM,kBAAkB,MAAM,KAAK,MAAM,SAAS,OAAO,CAAC;AAAA,EAC5D;AAEA,QAAM,uBAAuB,MAAuC;AAClE,QAAI,eAAgB,QAAOC,QAAO;AAClC,qBAAiB;AAEjB,UAAM,UAAU,OAAO;AAAA,MAAW;AAAA,MAAU,CAAC,WAC3CA,QAAO,IAAI,aAAa;AACtB,cAAM,YAAY,iBAAiB,MAAM;AACzC,YAAI,CAAC,UAAW;AAEhB,cAAM,QAAQ,UAAU,IAAI,SAAS;AACrC,YAAI,CAAC,MAAO;AAEZ,cAAM,UAAU,MAAM;AACtB,YAAI,QAAQ,WAAW,EAAG;AAE1B,cAAM,UAAW,QAAgB;AAEjC,cAAM,gBAAgB,CAAC,UACrBA,QAAO;AAAA,UACLA,QAAO,IAAI,aAAa;AACtB,kBAAM,OAAO,OAAOA,QAAO,KAAK,MAAM,QAAQ,OAAO,CAAC;AACtD,gBAAI,KAAK,SAAS,UAAW;AAE7B,kBAAM,EAAE,cAAc,UAAU,IAAI,2BAA2B,KAAK,KAAK;AACzE,kBAAM,gBAAgB,YAAY,eAAe,SAAS,MAAM;AAEhE,mBAAa,OAAO;AAAA,cAClB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA,MAAM;AAAA,cACN,UAAU;AAAA,cACV,SAAS,wCAAwC,MAAM,SAAS,gBAAgB,MAAM,SAAS,KAAK,aAAa;AAAA,cACjH,MAAM,GAAG,aAAa,OAAO,GAAG,aAAa,IAAI,OAAO,EAAE,GAAG,aAAa,OAAO;AAAA,cACjF,WAAW,MAAM;AAAA,cACjB,MAAM;AAAA,cACN,SAAS;AAAA,gBACP,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP,WAAW,MAAM;AAAA,kBACjB,WAAW,MAAM;AAAA,kBACjB,aAAa,MAAM;AAAA,gBACrB;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAEF,YAAI,QAAQ,WAAW,GAAG;AACxB,iBAAO,cAAc,QAAQ,CAAC,CAAE;AAChC;AAAA,QACF;AAEA,eAAOA,QAAO,QAAQ,SAAS,eAAe,EAAE,SAAS,KAAK,CAAC;AAAA,MACjE,CAAC;AAAA,IACH,EAAE;AAAA,MACAA,QAAO,WAAW,CAAC,UACX,OAAO;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,MAAM,2BAA2B,KAAK,EAAE,aAAa;AAAA,QACrD,WAAW;AAAA,QACX,MAAM;AAAA,MACR,CAAC,CAAC;AAAA,IACN;AAEA,WAAOA,QAAO,WAAW,OAAO,EAAE,KAAKA,QAAO,MAAM;AAAA,EACtD;AAEA,QAAM,iBAAiB,CAAC,WACtBA,QAAO,IAAI,aAAa;AACtB,UAAM,YAAY,OAAO;AACzB,UAAM,UAAU,OAAO;AAEvB,UAAM,cAAc,OAAO,WAAW,eAAe;AACrD,UAAM,iBAAiB,OAAO,WAAW,kBAAkB,aAAa,WAAW;AACnF,UAAM,gBAAgB,OAAO,WAAW;AAExC,UAAM,YAAY,0BAA0B,iBAAiB,WAAW;AACxE,UAAM,YAAY,qBAAqB,WAAW,OAAO;AACzD,UAAM,YAAY,GAAG,WAAW,KAAK,SAAS;AAE9C,UAAM,WAAW,oBAAoB,SAAS;AAE9C,UAAM,YAAY,SAAS,SAAS,IAAI,SAAS;AACjD,QAAI,WAAW;AACb,aAAa,OAAO;AAAA,QAClB,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,wDAAwD,SAAS,gBAAgB,SAAS;AAAA,QACnG,MACE;AAAA,QAEF;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,YACP;AAAA,YACA;AAAA,YACA,OAAO,OAAO;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO,EAAE,WAAW,WAAW,KAAK;AAAA,IACtC;AAEA,aAAS,SAAS,IAAI,WAAW;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,2BAAuB,QAAQ;AAE/B,QAAI,OAAO,UAAU,OAAO;AAC1B,aAAa,OAAO;AAAA,QAClB,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,iDAAiD,SAAS,gBAAgB,SAAS;AAAA,QAC5F,MAAM;AAAA,QACN;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,EAAE,WAAW,WAAW,aAAa,gBAAgB,cAAc;AAAA,QAC9E;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO,qBAAqB;AAC5B,WAAO,EAAE,WAAW,WAAW,MAAM;AAAA,EACvC,CAAC;AAEH,SAAO,EAAE,eAAe;AAC1B;;;ACvPA,SAAS,SAAAC,QAAO,UAAAC,UAAQ,QAAAC,OAAM,OAAO,UAAAC,SAAQ,UAAAC,SAAe,mBAAAC,wBAAuB;;;ACUnF,IAAM,gBAAgB,CAAC,GAAe,MAA2B;AAC/D,MAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,QAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAG,QAAO;AAAA,EAC5B;AACA,SAAO;AACT;AAOO,IAAM,oBAAN,MAAwB;AAAA,EAa7B,YAAY,UAAkB;AAX9B,SAAiB,UAAU,oBAAI,IAA2C;AAG1E,SAAQ,QAAQ;AAChB,SAAQ,QAAQ;AAChB,SAAQ,UAAU;AAClB,SAAQ,UAAU;AAElB,SAAQ,YAAY;AAIlB,UAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,SAAK,WAAW,OAAO,IAAI,OAAO;AAAA,EACpC;AAAA,EAEA,aAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAQ,QAA+D;AACrE,QAAI,KAAK,UAAW;AACpB,SAAK,gBAAgB,MAAM;AAAA,EAC7B;AAAA,EAEA,IAAI,MAAc,SAA6C;AAC7D,QAAI,KAAK,YAAY,EAAG,QAAO;AAC/B,QAAI,KAAK,UAAW,QAAO;AAE3B,UAAM,SAAS,KAAK,QAAQ,IAAI,IAAI;AACpC,QAAI,CAAC,QAAQ;AACX,WAAK,WAAW;AAChB,aAAO;AAAA,IACT;AACA,eAAW,SAAS,QAAQ;AAC1B,UAAI,CAAC,cAAc,MAAM,SAAS,OAAO,EAAG;AAC5C,WAAK,SAAS;AACd,WAAK,MAAM,KAAK;AAChB,aAAO,MAAM;AAAA,IACf;AACA,SAAK,WAAW;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,MAAc,SAAqB,aAA+B;AACpE,QAAI,KAAK,YAAY,GAAG;AACtB;AAAA,IACF;AACA,QAAI,KAAK,WAAW;AAClB;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,QAAQ,IAAI,IAAI,KAAK,CAAC;AAC1C,eAAWC,UAAS,QAAQ;AAC1B,UAAI,CAAC,cAAcA,OAAM,SAAS,OAAO,EAAG;AAC5C,MAAAA,OAAM,cAAc;AACpB,WAAK,MAAMA,MAAK;AAChB,UAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,EAAG,MAAK,QAAQ,IAAI,MAAM,MAAM;AAC1D;AAAA,IACF;AAEA,UAAM,QAAgC;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO,KAAK,KAAK;AACjB,SAAK,QAAQ,IAAI,MAAM,MAAM;AAC7B,SAAK,YAAY,KAAK;AACtB,SAAK,SAAS;AAEd,WAAO,KAAK,QAAQ,KAAK,UAAU;AACjC,WAAK,SAAS;AAAA,IAChB;AAEA,SAAK,iCAAiC;AAAA,EACxC;AAAA,EAEA,SAAS,SAI0B;AACjC,WAAO;AAAA,MACL,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,KAAK,QAAQ;AAAA,MACb,GAAI,OAAO,QAAQ,YAAY,WAAW,EAAE,SAAS,QAAQ,QAAQ,IAAI;AAAA,MACzE,GAAI,QAAQ,MAAM,OAAO,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI;AAAA,MACnF,GAAI,KAAK,YACL;AAAA,QACE,UAAU;AAAA,QACV,eAAe,KAAK,kBAAkB;AAAA,MACxC,IACA;AAAA,IACN;AAAA,EACF;AAAA,EAEQ,mCAAyC;AAC/C,QAAI,KAAK,UAAW;AACpB,QAAI,KAAK,YAAY,EAAG;AAExB,UAAM,QAAQ,KAAK,QAAQ,KAAK;AAEhC,QAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,WAAW,CAAC,EAAG;AAE7C,UAAM,UAAU,QAAQ,IAAI,KAAK,QAAQ,QAAQ;AACjD,QAAI,UAAU,KAAM;AAEpB,SAAK,QAAQ,cAAc;AAAA,EAC7B;AAAA,EAEQ,gBAAgB,QAA+D;AACrF,SAAK,YAAY;AACjB,SAAK,iBAAiB;AACtB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEQ,eAAqB;AAC3B,SAAK,QAAQ,MAAM;AACnB,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,YAAY,OAAqC;AACvD,UAAM,OAAO;AACb,UAAM,OAAO,KAAK;AAClB,QAAI,KAAK,MAAM;AACb,WAAK,KAAK,OAAO;AAAA,IACnB,OAAO;AACL,WAAK,OAAO;AAAA,IACd;AACA,SAAK,OAAO;AAAA,EACd;AAAA,EAEQ,OAAO,OAAqC;AAClD,UAAM,OAAO,MAAM;AACnB,UAAM,OAAO,MAAM;AACnB,QAAI,MAAM;AACR,WAAK,OAAO;AAAA,IACd,OAAO;AACL,WAAK,OAAO;AAAA,IACd;AACA,QAAI,MAAM;AACR,WAAK,OAAO;AAAA,IACd,OAAO;AACL,WAAK,OAAO;AAAA,IACd;AACA,UAAM,OAAO;AACb,UAAM,OAAO;AAAA,EACf;AAAA,EAEQ,MAAM,OAAqC;AACjD,QAAI,KAAK,SAAS,MAAO;AACzB,SAAK,OAAO,KAAK;AACjB,SAAK,YAAY,KAAK;AAAA,EACxB;AAAA,EAEQ,WAAiB;AACvB,UAAM,QAAQ,KAAK;AACnB,QAAI,CAAC,MAAO;AAEZ,SAAK,OAAO,KAAK;AACjB,UAAM,SAAS,KAAK,QAAQ,IAAI,MAAM,IAAI;AAC1C,QAAI,QAAQ;AACV,YAAM,MAAM,OAAO,QAAQ,KAAK;AAChC,UAAI,OAAO,EAAG,QAAO,OAAO,KAAK,CAAC;AAClC,UAAI,OAAO,WAAW,EAAG,MAAK,QAAQ,OAAO,MAAM,IAAI;AAAA,IACzD;AACA,SAAK,QAAQ,KAAK,IAAI,GAAG,KAAK,QAAQ,CAAC;AACvC,SAAK,WAAW;AAAA,EAClB;AACF;;;ACzLO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAG/C,YACW,MACT,SACS,SAAgC,CAAC,GAC1C;AACA,UAAM,OAAO;AAJJ;AAEA;AALX,SAAS,OAAO;AAQd,SAAK,OAAO;AAAA,EACd;AACF;;;AC3BA,SAAS,UAAAC,eAAc;;;ACEvB,IAAM,iBAAiB,CAAC,OAAY,SAAyB;AAC3D,MAAI,UAAe;AACnB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,WAAW,KAAM,QAAO;AAC5B,cAAU,QAAQ,KAAK,CAAC,CAAE;AAAA,EAC5B;AACA,SAAO;AACT;AAEA,IAAM,eAAe,CAAC,UAAoC,OAAO,UAAU,YAAY,UAAU;AAEjG,IAAM,cAAc,CAAC,UAAuB;AAC1C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,MAAM;AAAA,EACrB;AACA,QAAM,QAAQ,OAAO,eAAe,KAAK;AACzC,QAAM,MAAM,UAAU,OAAO,uBAAO,OAAO,IAAI,IAAI,OAAO,OAAO,KAAK;AACtE,SAAO,OAAO,OAAO,KAAK,KAAK;AACjC;AAEO,IAAM,WAAN,MAAiC;AAAA,EAKtC,YAAY,MAAS;AAHrB,SAAiB,QAAQ,oBAAI,QAAgB;AAC7C,SAAiB,SAAS,oBAAI,QAAwB;AAGpD,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,UAAa;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,MAA0B;AAC9B,WAAO,eAAe,KAAK,MAAa,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,MAAiB,OAAgB,OAAuB;AAC5D,QAAI,KAAK,WAAW,EAAG;AACvB,SAAK,OAAO,KAAK,gBAAgB;AAEjC,QAAI,UAAe,KAAK;AACxB,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACxC,YAAM,MAAM,KAAK,CAAC;AAClB,YAAM,WAAW,QAAQ,GAAG;AAE5B,UAAI,CAAC,aAAa,QAAQ,GAAG;AAC3B,cAAM,UAAU,CAAC;AACjB,aAAK,MAAM,IAAI,OAAO;AACtB,gBAAQ,GAAG,IAAI;AACf,kBAAU;AACV;AAAA,MACF;AAEA,UAAI,KAAK,MAAM,IAAI,QAAQ,GAAG;AAC5B,kBAAU;AACV;AAAA,MACF;AAEA,YAAM,SAAS,KAAK,OAAO,IAAI,QAAQ;AACvC,YAAM,OAAO,UAAU,YAAY,QAAQ;AAC3C,UAAI,CAAC,QAAQ;AACX,aAAK,OAAO,IAAI,UAAU,IAAI;AAAA,MAChC;AACA,WAAK,MAAM,IAAI,IAAI;AACnB,cAAQ,GAAG,IAAI;AACf,gBAAU;AAAA,IACZ;AAEA,YAAQ,KAAK,KAAK,SAAS,CAAC,CAAE,IAAI;AAAA,EACpC;AAAA,EAEQ,kBAAqB;AAC3B,UAAM,OAAO,KAAK;AAClB,QAAI,CAAC,aAAa,IAAI,GAAG;AACvB,aAAO,KAAK;AAAA,IACd;AACA,QAAI,KAAK,MAAM,IAAI,IAAI,GAAG;AACxB,aAAO,KAAK;AAAA,IACd;AACA,UAAM,SAAS,KAAK,OAAO,IAAI,IAAI;AACnC,UAAM,OAAQ,UAAU,YAAY,IAAI;AACxC,QAAI,CAAC,QAAQ;AACX,WAAK,OAAO,IAAI,MAAM,IAAW;AAAA,IACnC;AACA,SAAK,MAAM,IAAI,IAAW;AAC1B,WAAO;AAAA,EACT;AACF;AAEO,IAAM,sBAAN,MAA4C;AAAA,EAMjD,YAAY,MAAS;AAJrB,SAAiB,OAAsB,CAAC;AACxC,SAAiB,OAAuB,CAAC;AACzC,SAAiB,MAAsB,CAAC;AAGtC,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,MAAe;AACnB,SAAK,OAAO;AACZ,SAAK,KAAK,SAAS;AACnB,SAAK,KAAK,SAAS;AACnB,SAAK,IAAI,SAAS;AAAA,EACpB;AAAA,EAEA,UAAa;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,MAA0B;AAC9B,QAAI,KAAK,WAAW,GAAG;AACrB,aAAQ,KAAK,KAAa,KAAK,CAAC,CAAE;AAAA,IACpC;AACA,WAAO,eAAe,KAAK,MAAa,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,MAAiB,OAAgB,OAAuB;AAC5D,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,MAAM,2EAA2E;AAAA,IAC7F;AACA,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,OAAY,KAAK;AACvB,UAAM,MAAM,OAAO,UAAU,eAAe,KAAK,MAAM,GAAG;AAC1D,SAAK,KAAK,KAAK,GAAG;AAClB,SAAK,IAAI,KAAK,GAAG;AACjB,SAAK,KAAK,KAAK,MAAM,KAAK,GAAG,IAAI,MAAS;AAC1C,SAAK,GAAG,IAAI;AAAA,EACd;AAAA,EAEA,SAAe;AACb,SAAK,KAAK,SAAS;AACnB,SAAK,KAAK,SAAS;AACnB,SAAK,IAAI,SAAS;AAAA,EACpB;AAAA,EAEA,WAAiB;AACf,UAAM,OAAY,KAAK;AACvB,aAAS,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,YAAM,MAAM,KAAK,KAAK,CAAC;AACvB,UAAI,KAAK,IAAI,CAAC,GAAI;AAChB,aAAK,GAAG,IAAI,KAAK,KAAK,CAAC;AAAA,MACzB,OAAO;AACL,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,IACF;AACA,SAAK,KAAK,SAAS;AACnB,SAAK,KAAK,SAAS;AACnB,SAAK,IAAI,SAAS;AAAA,EACpB;AACF;;;ACzJA,SAAS,UAAAC,SAAQ,OAAO,kBAAkB;AAQnC,IAAM,oBAAoB,WAAW,UAAmB,4BAA4B;AAAA,EACzF,cAAc,MAAM;AACtB,CAAC;AAKM,IAAM,kBAAkB,CAAC,YAC9B,MAAM,QAAQ,mBAAmB,OAAO;;;AChBnC,IAAM,gBAAN,MAAoB;AAAA,EAQzB,YACE,MACA,SAGA;AAPF,SAAQ,eAAe;AAQrB,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC;AAC7C,SAAK,OAAO;AAEZ,UAAM,YAAY,KAAK,KAAK,WAAW,EAAE;AACzC,SAAK,QAAQ,IAAI,YAAY,SAAS;AAEtC,QAAI,SAAS,kBAAkB,iBAAiB;AAC9C,WAAK,eAAe,IAAI,YAAY,SAAS;AAC7C,WAAK,eAAe,IAAI,WAAW,SAAS;AAAA,IAC9C,OAAO;AACL,WAAK,eAAe;AACpB,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,MAAM,KAAK,CAAC;AACjB;AAAA,IACF;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AAC1C,YAAM,YAAY,KAAK,aAAa,CAAC;AACrC,WAAK,MAAM,SAAS,IAAI;AACxB,WAAK,aAAc,SAAS,IAAI;AAAA,IAClC;AACA,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,IAAI,IAAqB;AACvB,QAAI,EAAE,MAAM,KAAK,KAAK,KAAK,MAAO,QAAO;AACzC,UAAM,YAAa,KAAK,KAAM;AAC9B,UAAM,MAAM,KAAK;AACjB,YAAQ,KAAK,MAAM,SAAS,IAAM,KAAK,SAAU;AAAA,EACnD;AAAA,EAEA,IAAI,IAAkB;AACpB,QAAI,EAAE,MAAM,KAAK,KAAK,KAAK,MAAO;AAClC,UAAM,YAAa,KAAK,KAAM;AAC9B,UAAM,MAAM,KAAK;AACjB,UAAM,OAAO,KAAK;AAElB,UAAM,OAAO,KAAK,MAAM,SAAS;AACjC,SAAK,OAAO,UAAU,EAAG;AAEzB,SAAK,MAAM,SAAS,IAAI,OAAO;AAE/B,QAAI,CAAC,KAAK,aAAc;AACxB,QAAI,KAAK,aAAc,SAAS,MAAM,EAAG;AACzC,SAAK,aAAc,SAAS,IAAI;AAChC,SAAK,aAAa,KAAK,YAAY,IAAI;AACvC,SAAK,gBAAgB;AAAA,EACvB;AACF;;;ACwBO,IAAM,qBAAqB,CAAC,OAAiD;AAClF,QAAM,aAAa,GAAG;AAEtB,QAAM,WAAW,GAAG;AACpB,QAAM,iBAAiB,SAAS;AAEhC,QAAM,iBAAiB,eAAe;AACtC,QAAM,wBAAwB,IAAI,WAAW,iBAAiB,CAAC;AAC/D,MAAI,cAAc;AAClB,WAAS,SAAS,GAAG,SAAS,gBAAgB,UAAU;AACtD,0BAAsB,MAAM,IAAI;AAChC,mBAAe,eAAe,MAAM,GAAG,UAAU;AAAA,EACnD;AACA,wBAAsB,cAAc,IAAI;AAExC,QAAM,6BAA6B,IAAI,WAAW,WAAW;AAC7D,WAAS,SAAS,GAAG,SAAS,gBAAgB,UAAU;AACtD,UAAM,OAAO,eAAe,MAAM;AAClC,QAAI,CAAC,KAAM;AACX,QAAI,OAAO,SAAS;AACpB,QAAI,SAAS,sBAAsB,MAAM;AACzC,eAAW,OAAO,MAAM;AACtB,YAAM,OAAO,KAAK,SAAS,IAAI,GAAG;AAClC,UAAI,CAAC,MAAM;AACT,cAAM,IAAI;AAAA,UACR,uEAAuE,OAAO,MAAM,CAAC,QAAQ,GAAG;AAAA,QAClG;AAAA,MACF;AACA,aAAO;AACP,YAAM,KAAK,KAAK;AAChB,UAAI,OAAO,OAAO,UAAU;AAC1B,cAAM,IAAI,MAAM,kEAAkE,OAAO,MAAM,CAAC,QAAQ,GAAG,EAAE;AAAA,MAC/G;AACA,iCAA2B,MAAM,IAAI;AACrC,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,iBAAiB,WAAW,KAAK,GAAG,SAAS;AAEnD,QAAM,YAAY,GAAG,UAAU;AAC/B,QAAM,oBAAoB,IAAI,WAAW,SAAS;AAClD,oBAAkB,KAAK,EAAE;AACzB,WAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,sBAAkB,eAAe,CAAC,CAAE,IAAI;AAAA,EAC1C;AAEA,QAAM,yBAAyB,IAAI,WAAW,SAAS;AACvD,WAAS,SAAS,GAAG,SAAS,WAAW,UAAU;AACjD,2BAAuB,MAAM,IAAI,GAAG,uBAAuB,MAAM,MAAM,aAAa,IAAI;AAAA,EAC1F;AAEA,QAAM,gBAA+B,CAAC;AACtC,QAAM,eAA8B,CAAC;AACrC,aAAW,UAAU,gBAAgB;AACnC,QAAI,uBAAuB,MAAM,MAAM,EAAG,cAAa,KAAK,MAAM;AAAA,QAC7D,eAAc,KAAK,MAAM;AAAA,EAChC;AACA,QAAM,0BAA0B,WAAW,KAAK,aAAa;AAC7D,QAAM,yBAAyB,WAAW,KAAK,YAAY;AAE3D,QAAM,oBAAmC,IAAI,MAAM,SAAS;AAC5D,QAAM,6BAA6B,IAAI,WAAW,SAAS;AAC3D,QAAM,8BAA8B,IAAI,WAAW,SAAS;AAC5D,8BAA4B,KAAK,EAAE;AACnC,WAAS,SAAS,GAAG,SAAS,WAAW,UAAU;AACjD,QAAI,kBAAkB,MAAM,IAAK,GAAG;AAClC,YAAM,IAAI,MAAM,uDAAuD,OAAO,MAAM,CAAC,eAAe,OAAO,UAAU,CAAC,EAAE;AAAA,IAC1H;AACA,UAAM,OAAO,GAAG,UAAU,MAAM;AAChC,QAAI,MAAM;AACR,wBAAkB,MAAM,IACtB,KAAK,SAAS,aACV,YAAY,KAAK,SAAS,KAC1B,KAAK,SAAS,SACZ,QAAQ,KAAK,SAAS,KACtB,KAAK;AAAA,IACf,OAAO;AACL,wBAAkB,MAAM,IAAI,OAAO,MAAM;AAAA,IAC3C;AACA,+BAA2B,MAAM,IAAI,GAAG,2BAA2B,MAAM;AACzE,QAAI,MAAM,SAAS,QAAQ;AACzB,YAAM,OAAO,GAAG,6BAA6B,MAAM;AACnD,UAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,oCAA4B,MAAM,IAAI,KAAK,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,0BAA0B,IAAI,WAAW,YAAY,CAAC;AAC5D,MAAI,WAAW;AACf,WAAS,SAAS,GAAG,SAAS,WAAW,UAAU;AACjD,4BAAwB,MAAM,IAAI;AAClC,UAAM,OAAO,GAAG,6BAA6B,MAAM;AACnD,gBAAY,MAAM,UAAU;AAAA,EAC9B;AACA,0BAAwB,SAAS,IAAI;AAErC,QAAM,uBAAuB,IAAI,WAAW,QAAQ;AACpD,WAAS,SAAS,GAAG,SAAS,WAAW,UAAU;AACjD,UAAM,OAAO,GAAG,6BAA6B,MAAM;AACnD,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG;AAChC,QAAI,SAAS,wBAAwB,MAAM;AAC3C,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,2BAAqB,MAAM,IAAI,KAAK,CAAC;AACrC,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,qBAAqB;AACzB,WAAS,SAAS,GAAG,SAAS,WAAW,UAAU;AACjD,UAAM,YAAY,2BAA2B,MAAM;AACnD,UAAM,OAAO,eAAe,SAAS;AACrC,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B,2BAAqB;AACrB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,iCAAiC,IAAI,WAAW,cAAc;AACpE,WAAS,SAAS,GAAG,SAAS,WAAW,UAAU;AACjD,UAAM,QAAQ,2BAA2B,MAAM;AAC/C;AACE,YAAM,QAAQ,sBAAsB,KAAK;AACzC,YAAM,MAAM,sBAAsB,QAAQ,CAAC;AAC3C,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,cAAM,WAAW,2BAA2B,CAAC;AAC7C,uCAA+B,QAAQ,IAAK,+BAA+B,QAAQ,IAAK,IAAK;AAAA,MAC/F;AAAA,IACF;AAEA,UAAM,YAAY,wBAAwB,MAAM;AAChD,UAAM,UAAU,wBAAwB,SAAS,CAAC;AAClD,aAAS,IAAI,WAAW,IAAI,SAAS,KAAK;AACxC,YAAM,QAAQ,qBAAqB,CAAC;AACpC,YAAM,QAAQ,sBAAsB,KAAK;AACzC,YAAM,MAAM,sBAAsB,QAAQ,CAAC;AAC3C,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,cAAM,WAAW,2BAA2B,CAAC;AAC7C,uCAA+B,QAAQ,IAAK,+BAA+B,QAAQ,IAAK,IAAK;AAAA,MAC/F;AAAA,IACF;AAAA,EACF;AAEA,QAAM,kCAAkC,IAAI,WAAW,iBAAiB,CAAC;AACzE,MAAI,eAAe;AACnB,WAAS,cAAc,GAAG,cAAc,gBAAgB,eAAe;AACrE,oCAAgC,WAAW,IAAI;AAC/C,oBAAgB,+BAA+B,WAAW;AAAA,EAC5D;AACA,kCAAgC,cAAc,IAAI;AAElD,QAAM,8BAA8B,IAAI,WAAW,YAAY;AAC/D,WAAS,cAAc,GAAG,cAAc,gBAAgB,eAAe;AACrE,mCAA+B,WAAW,IAAI,gCAAgC,WAAW;AAAA,EAC3F;AAEA,WAAS,SAAS,GAAG,SAAS,WAAW,UAAU;AACjD,UAAM,QAAQ,2BAA2B,MAAM;AAC/C;AACE,YAAM,QAAQ,sBAAsB,KAAK;AACzC,YAAM,MAAM,sBAAsB,QAAQ,CAAC;AAC3C,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,cAAM,WAAW,2BAA2B,CAAC;AAC7C,cAAM,SAAS,+BAA+B,QAAQ;AACtD,oCAA4B,MAAM,IAAI;AACtC,uCAA+B,QAAQ,IAAI,SAAS;AAAA,MACtD;AAAA,IACF;AAEA,UAAM,YAAY,wBAAwB,MAAM;AAChD,UAAM,UAAU,wBAAwB,SAAS,CAAC;AAClD,aAAS,IAAI,WAAW,IAAI,SAAS,KAAK;AACxC,YAAM,QAAQ,qBAAqB,CAAC;AACpC,YAAM,QAAQ,sBAAsB,KAAK;AACzC,YAAM,MAAM,sBAAsB,QAAQ,CAAC;AAC3C,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,cAAM,WAAW,2BAA2B,CAAC;AAC7C,cAAM,SAAS,+BAA+B,QAAQ;AACtD,oCAA4B,MAAM,IAAI;AACtC,uCAA+B,QAAQ,IAAI,SAAS;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,CAAC;AAAA,IACP,SAAS;AAAA,MACP,mBAAmB,IAAI,cAAc,cAAc;AAAA,MACnD,qBAAqB,IAAI,cAAc,SAAS;AAAA,MAChD,kBAAkB,IAAI,WAAW,cAAc;AAAA,MAC/C,cAAc,IAAI,WAAW,cAAc;AAAA,MAC3C,aAAa,IAAI,WAAW,SAAS;AAAA,IACvC;AAAA,EACF;AACF;;;AChTA,SAAS,UAAAC,SAAQ,UAAAC,eAAc;AAcxB,IAAM,qBAAqB,MAChCC,QAAO,cAA2B,qBAAqB,EAAE;AAAA,EACvDA,QAAO,IAAI,CAAC,UAAWC,QAAO,OAAO,KAAK,IAAI,MAAM,MAAM,QAAQ,CAAC,CAAE;AACvE;AAIF,IAAM,gBAAgB,CAAC,UACrB,MAAM,SAAS,aAAa,aAAa,MAAM,SAAS,SAAS,SAAS;AAE5E,IAAM,gBAAgB,CAAC,UAA+D;AACpF,MAAI,MAAM,SAAS,YAAY;AAC7B,WAAS,MAAM,MAAc,QAAQ,CAAC;AAAA,EACxC;AACA,MAAI,MAAM,SAAS,QAAQ;AACzB,WAAO,CAAC,MAAM,KAAK,IAAc;AAAA,EACnC;AACA,SAAO,CAAC;AACV;AAEA,IAAM,aAAa,CAAC,OAAqC,MAAe,SAA2B;AACjG,MAAI,MAAM,SAAS,YAAY;AAC7B,UAAM,SAAU,MAAM,MAAc;AACpC,WAAO,SAAS,OAAO,MAAM,IAAI,IAAI,OAAO,GAAG,MAAM,IAAI;AAAA,EAC3D;AACA,SAAO,OAAO,GAAG,MAAM,IAAI;AAC7B;AAEO,IAAM,uBAAuB,CAClC,KACA,QACA,OAKA,QACA,UACY;AACZ,QAAM,OAAO,cAAc,KAAK;AAChC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,SAAsB,SAAS,aAAa,mBAAmB;AACrE,QAAM,OAAO,SAAS,SAAU,MAAM,KAAa,OAAO;AAC1D,QAAM,YAAY,OAAO,2BAA2B,MAAM;AAC1D,QAAM,UAAU,OAAO,eAAe,SAAS;AAC/C,QAAM,aAAa,OAAO,4BAA4B,MAAM;AAC5D,QAAM,WAAW,cAAc,IAAI,OAAO,eAAe,UAAU,IAAI;AAEvE,QAAM,UAAU,MAAM,QAAQ;AAC9B,QAAM,OAAO,MAAM,MAAM,OAAO;AAEhC,MAAI;AACJ,MAAI,SAAS,YAAY;AACvB,UAAM,SAAU,MAAM,KAAa;AACnC,WAAO,OAAO,OAAO;AAAA,EACvB,OAAO;AACL,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,8DAA8D,OAAO,IAAI,CAAC,GAAG;AAAA,IAC/F;AACA,WAAO,MAAM,MAAM,QAAQ;AAAA,EAC7B;AAEA,QAAM,UAAU,CAAC,WAAW,OAAO,MAAM,IAAI;AAC7C,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,MAAM,SAAS,MAAM,IAAI;AAC/B,MAAI,SAAS,MAAM,QAAQ,CAAC;AAC5B,MAAI,YAAY,WAAW,QAAQ,MAAM,IAAI;AAC7C,SAAO;AACT;AAEO,IAAM,gBAAgB,CAC3B,KACA,QACA,OAKA,QACA,OACA,uBACA,kBACA,UAC2B;AAC3B,QAAM,WAAW,IAAI;AACrB,QAAM,aAAa,IAAI;AACvB,QAAM,YAAY,MAAM;AAExB,QAAM,OAAO,cAAc,KAAK;AAChC,MAAI,CAAC,KAAM,QAAOD,QAAO,QAAQ,KAAK;AAEtC,QAAM,SAAsB,SAAS,aAAa,mBAAmB;AACrE,QAAM,SAAmD,SAAS,aAAa,mBAAmB;AAClG,QAAM,SAAS,SAAS,aAAa,oBAAoB;AAEzD,QAAM,OAAO,cAAc,KAAK;AAChC,QAAM,OAAO,SAAS,SAAU,MAAM,KAAa,OAAO;AAC1D,QAAM,YAAY,OAAO,2BAA2B,MAAM;AAC1D,QAAM,UAAU,OAAO,eAAe,SAAS;AAC/C,QAAM,aAAa,OAAO,4BAA4B,MAAM;AAC5D,QAAM,WAAW,cAAc,IAAI,OAAO,eAAe,UAAU,IAAI;AAEvE,QAAM,UAAU,CAAC,oBACfA,QAAO,KAAK,MAAM;AAChB,UAAM,UAAU,MAAM,QAAQ;AAE9B,UAAM,OAAO,MAAM,MAAM,OAAO;AAEhC,QAAI;AACJ,QAAI;AAEJ,QAAI,SAAS,YAAY;AACvB,YAAM,SAAU,MAAM,KAAa;AACnC,UAAI,iBAAiB;AACnB,cAAM,SAAmB,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO;AACxD,eAAO,OAAO;AACd,mBAAqB,SAAW,MAAM,KAAa,QAAQ,CAAC,GAA6B,OAAO,KAAK;AAAA,MACvG,OAAO;AACL,eAAO,OAAO,OAAO;AAAA,MACvB;AAAA,IACF,OAAO;AACL,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,8DAA8D,OAAO,IAAI,CAAC,GAAG;AAAA,MAC/F;AACA,aAAO,MAAM,MAAM,QAAQ;AAAA,IAC7B;AAEA,UAAM,UAAU,CAAC,WAAW,OAAO,MAAM,IAAI;AAC7C,QAAI,CAAC,SAAS;AACZ,aAAO,EAAE,SAAS,OAAO,SAAS;AAAA,IACpC;AAEA,UAAM,MAAM,SAAS,MAAM,IAAI;AAC/B,QAAI,SAAS,MAAM,QAAQ,CAAC;AAC5B,QAAI,YAAY,WAAW,QAAQ,MAAM,MAAM,QAAW,MAAM;AAChE,WAAO,EAAE,SAAS,MAAM,SAAS;AAAA,EACnC,CAAC,EAAE;AAAA,IACDA,QAAO;AAAA,MAAQ,CAAC,EAAE,SAAS,SAAS,MAClC,YAAY,SAAS,aACjB,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA,MAAM;AAAA,MACR,CAAC,EAAE,KAAKA,QAAO,GAAG,OAAO,CAAC,IAC1BA,QAAO,QAAQ,OAAO;AAAA,IAC5B;AAAA,EACF;AAEF,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,EAAE,SAAS,cAAc,yBAAyB,SAAS,IAAI;AACjE,aAAO,QAAQ,KAAK;AAAA,IACtB;AACA,WAAOA,QAAO,IAAI,aAAa;AAC7B,YAAM,WAAW,GAAG,YAAY,SAAS,KAAK,cAAc,SAAS,eAAe,SAAS;AAC7F,YAAM,kBAAkB,OAAO,iBAAiB,sBAAsB,QAAQ,EAAE;AAChF,aAAO,OAAO,QAAQ,eAAe;AAAA,IACvC,CAAC;AAAA,EACH;AAEA,SAAOA,QAAO,IAAI,aAAa;AAC7B,UAAM,YAAY,qBAAqB,QAAQ,SAAa,OAAO,kBAAkB,MAAM,KAAK,OAAO,MAAM;AAE7G,QAAI,kBAAkB;AACtB,QAAI,SAAS,cAAc,yBAAyB,SAAS,GAAG;AAC9D,YAAM,WAAW,GAAG,YAAY,SAAS,KAAK,cAAc,SAAS,eAAe,SAAS;AAC7F,wBAAkB,OAAO,iBAAiB,sBAAsB,QAAQ,EAAE;AAAA,IAC5E;AAEA,UAAM,OAAO,QAAQ,eAAe;AAEpC,UAAM,OAAY;AAAA,MAChB;AAAA,MACA;AAAA,MACA,QAAQ,IAAI;AAAA,MACZ,OAAO,IAAI;AAAA,MACX;AAAA,MACA;AAAA,MACA,GAAI,SAAS,SACT;AAAA,QACE;AAAA,QACA,IAAI;AAAA,MACN,IACA;AAAA,MACJ,GAAI,YAAY,EAAE,QAAQ,UAAU,IAAI;AAAA,IAC1C;AAEA,QAAI,EAAE,OAAO,KAAK,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,IAAI;AACpE,YAAM,aAAa,OAAOA,QAAO,cAAc,aAAa;AAC5D,UAAIC,QAAO,OAAO,UAAU,GAAG;AAC7B,cAAM,MAAM,cAAc;AAC1B,aAAK,QAAQ,WAAW,MAAM,MAAM,QAAQ,SAAS,GAAG;AAAA,MAC1D;AAAA,IACF;AAEA,UAAM,KAAc,KAA4B;AAAA,MAC9C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,IACF,CAAC;AAED,WAAO,OAAgB,IAAI,IAAI,KAAK;AAAA,EACtC,CAAC;AACH;;;ALxLA,IAAM,cAAc,IAAI,WAAW,CAAC;AASpC,IAAM,+CAA+C,CACnD,QACA,cACA,cACA,gBACA,iBACA,+BACW;AACX,QAAM,6BAA6B,OAAO;AAC1C,QAAM,wBAAwB,OAAO;AACrC,QAAM,8BAA8B,OAAO;AAC3C,QAAM,kCAAkC,OAAO;AAC/C,QAAM,6BAA6B,OAAO;AAC1C,QAAM,yBAAyB,OAAO;AAEtC,QAAM,oBAAoB,OAAO,QAAQ;AACzC,QAAM,sBAAsB,OAAO,QAAQ;AAC3C,QAAM,mBAAmB,OAAO,QAAQ;AACxC,QAAM,cAAc,OAAO,QAAQ;AAEnC,oBAAkB,MAAM;AACxB,sBAAoB,MAAM;AAE1B,QAAM,iBAAiB,OAAO,eAAe;AAE7C,MAAI,WAAW;AACf,aAAW,OAAO,cAAc;AAC9B,QAAI,OAAO,QAAQ,YAAY,CAAC,OAAO,SAAS,GAAG,GAAG;AACpD,aAAO;AAAA,IACT;AACA,UAAM,KAAK,KAAK,MAAM,GAAG;AACzB,QAAI,KAAK,KAAK,MAAM,gBAAgB;AAClC,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,sBAAsB,EAAE;AACtC,UAAM,MAAM,sBAAsB,KAAK,CAAC;AACxC,QAAI,SAAS,QAAQ,OAAO,KAAM;AAElC,aAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,YAAM,WAAW,2BAA2B,CAAC;AAC7C,UAAI,kBAAkB,IAAI,QAAQ,EAAG;AACrC,wBAAkB,IAAI,QAAQ;AAC9B,uBAAiB,QAAQ,IAAI;AAC7B,kBAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,oBAAoB,KAAK,KAAK,iBAAiB,0BAA0B;AAE/E,MAAI,SAAS;AACb,MAAI,iBAAiB;AACrB,SAAO,SAAS,UAAU;AACxB,UAAM,WAAW,iBAAiB,MAAM;AACxC,cAAU;AAEV,UAAM,QAAQ,gCAAgC,QAAQ;AACtD,UAAM,MAAM,gCAAgC,WAAW,CAAC;AACxD,QAAI,SAAS,QAAQ,OAAO,KAAM;AAElC,aAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,YAAM,SAAS,4BAA4B,CAAC;AAC5C,UAAI,oBAAoB,OAAO;AAC7B,cAAM,OAAO,uBAAuB,MAAM;AAC1C,YAAI,oBAAoB,aAAa;AACnC,cAAI,SAAS,EAAG;AAAA,QAClB,OAAO;AACL,cAAI,SAAS,EAAG;AAAA,QAClB;AAAA,MACF;AACA,UAAI,oBAAoB,IAAI,MAAM,EAAG;AACrC,0BAAoB,IAAI,MAAM;AAC9B,wBAAkB;AAGlB,UAAI,kBAAkB,mBAAmB;AACvC,eAAO;AAAA,MACT;AAEA,YAAM,QAAQ,2BAA2B,MAAM;AAC/C,YAAM,SAAS,sBAAsB,KAAK;AAC1C,YAAM,OAAO,sBAAsB,QAAQ,CAAC;AAC5C,UAAI,UAAU,QAAQ,QAAQ,KAAM;AAEpC,eAAS,IAAI,QAAQ,IAAI,MAAM,KAAK;AAClC,cAAM,YAAY,2BAA2B,CAAC;AAC9C,YAAI,kBAAkB,IAAI,SAAS,EAAG;AACtC,0BAAkB,IAAI,SAAS;AAC/B,yBAAiB,QAAQ,IAAI;AAC7B,oBAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,SAAS,aAAa,CAAC;AAC7B,QAAI,CAAC,oBAAoB,IAAI,MAAM,EAAG;AACtC,gBAAY,OAAO,IAAI;AACvB,eAAW;AAAA,EACb;AAIA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAC,UAAkF;AACvG,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,aAAW,QAAQ,OAAO;AACxB,UAAM,IAAI,KAAK;AACf,QAAI,CAAC,SAAS,IAAI,MAAM,YAAY;AAClC,cAAQ;AACR,eAAS;AACT,cAAQ;AACR;AAAA,IACF;AACA,QAAI,CAAC,UAAU,IAAI,OAAO,YAAY;AACpC,cAAQ;AACR,eAAS;AACT;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI,MAAM,YAAY;AAClC,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,MAAI,CAAC,OAAQ,QAAO,CAAC,KAAK;AAC1B,MAAI,CAAC,MAAO,QAAO,CAAC,OAAO,MAAM;AACjC,SAAO,CAAC,OAAO,QAAQ,KAAK;AAC9B;AAEA,IAAMC,wBAAuB,CAAC,UAAuC;AACnE,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACjE,QAAM,IAAI,KAAK,MAAM,KAAK;AAC1B,SAAO,IAAI,IAAI,IAAI;AACrB;AAEA,IAAM,oBAAoB,CAAC,SAIf;AACV,QAAM,EAAE,UAAU,MAAM,KAAK,IAAI;AACjC,MAAI,QAAQ,EAAG;AAEf,QAAM,OAAO,MAAM;AACjB,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAI,KAAK,aAAa,SAAS,CAAC,EAAG,WAAY,QAAO;AAAA,IACxD;AACA,WAAO,SAAS;AAAA,EAClB,GAAG;AAEH,MAAI,OAAO,KAAM;AACjB,WAAS,OAAO,KAAK,GAAG,IAAI;AAC5B,MAAI,SAAS,SAAS,MAAM;AAC1B,aAAS,SAAS;AAAA,EACpB;AACF;AAOO,IAAM,wBAAwB,CACnC,SACA,QAEAC,QAAO,IAAI,aAAa;AACtB,SAAO,mBAAmB,SAAS,GAAG;AAEtC,QAAM,oBAAoB,IAAI,IAAI;AAClC,MAAI;AACJ,MAAI,qBAAqB;AACzB,QAAM,OAAO,IAAI,SAAS;AAC1B,QAAM,gBAA4C,IAAI,iBAAiB;AACvE,QAAM,UAAsC,CAAC;AAC7C,MAAI,OAAqB,kBAAkB,UAAU,UAAU,kBAAkB,SAAS,SAAS;AAEnG,QAAM,KAAK,QAAQ;AACnB,MAAI,CAAC,IAAI;AACP,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAGA,MAAI,SAAS,QAAQ;AACrB,MAAI,CAAC,UAAU,OAAO,eAAe,GAAG,YAAY;AAIlD,UAAM,OAAO;AACb,UAAM,OAAO,mBAAmB,EAAE;AAElC,QAAI,QAAQ,KAAK,eAAe,WAAW,KAAK,eAAe,QAAQ;AACrE,WAAK,KAAK,sBAAsB,KAAK,KAAK;AAC1C,WAAK,KAAK,2BAA2B,KAAK,KAAK;AAC/C,WAAK,KAAK,0BAA0B,KAAK,KAAK;AAAA,IAEhD;AAEA,aAAS;AACR,IAAC,QAAgB,iBAAiB;AAAA,EACrC;AAEA,MAAI,GAAG,aAAa;AAClB,UAAM,IAAI,sBAAsB,GAAG,YAAY,MAAM,GAAG,YAAY,SAAS,GAAG,YAAY,MAAM;AAAA,EACpG;AAEA,QAAM,mBAAoB,GAAG,aAAa,CAAC;AAC3C,QAAM,aAAa,iBAAiB;AAEpC,MAAI,eAAe,GAAG;AACpB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,QAAM,QAAQ,OAAO,mBAAmB;AACxC,QAAM,mBAA2C,OAAOA,QAAO,QAAc,uBAAuB,EAAE,KAAKA,QAAO,KAAK;AACvH,QAAM,aAAa,OAAOA,QAAO,QAAc,iBAAiB,EAAE,KAAKA,QAAO,KAAK;AAGnF,QAAM,wBAAwB,WAAW,SAAS,KAAK,CAAO,qBAAqB,UAAU;AAC7F,QAAM,+BAA+B,yBAAyB,qBAAqB;AACnF,QAAM,oCAAoC,yBAAyB,qBAAqB;AACxF,QAAM,aAAa,OAAO;AAG1B,MAAI;AACJ,MAAI,qBAAqB,WAAW;AAClC,UAAM,MAAM,OAAOA,QAAO,QAAc,uCAAuC,EAAE,KAAKA,QAAO,KAAK;AAClG,UAAM,eAAeD,sBAAqB,IAAI,YAAY,KAAK;AAC/D,UAAM,OAAOA,sBAAqB,IAAI,IAAI,KAAK;AAC/C,UAAM,SAAS,IAAI;AACnB,UAAM,UACJ,OAAO,WAAW,YAAY,OAAO,SAAS,MAAM,KAAK,SAAS,KAC7D,KAAK,MAAM,MAAM,IAAI,KAAK,iBAAiB,IAC5C;AACN,0BAAsB;AAAA,MACpB,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,6BACJ,0BAA0B,qBAAqB,UAAU,qBAAqB,YAAY;AAC5F,QAAM,eAAe,qBAAqB,SAAS,IAAK,qBAAqB,QAAQ;AACrF,QAAM,WAAoD,6BAA6B,CAAC,IAAI;AAC5F,QAAM,kBAAkB,IAAI,mBAAmB;AAC/C,QAAM,eACJ,IAAI,2BACH,oBAAoB,cACjB,OAAO,0BACP,oBAAoB,aAClB,OAAO,yBACP,OAAO;AACf,QAAM,iBAAiB,aAAa;AACpC,QAAM,qBAAqB,OAAO,wBAAwB;AAC1D,QAAM,oBAAoB,OAAO,uBAAuB;AACxD,QAAM,qBACJ,oBAAoB,IAChB;AAAA,IACE,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,IACA;AAEN,MAAI,oBAAoB,GAAG;AACzB,QAAI,oBAAoB,eAAe,CAAC,QAAQ,SAAS,wBAAwB,GAAG;AAClF,cAAQ,KAAK,wBAAwB;AAAA,IACvC,WAAW,oBAAoB,cAAc,CAAC,QAAQ,SAAS,uBAAuB,GAAG;AACvF,cAAQ,KAAK,uBAAuB;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,8BAA8B,CAACE,cACnC,CAAC,wBACGD,QAAO,OACD,OAAO;AAAA,IACX,MAAM;AAAA,IACN,UAAU,IAAI;AAAA,IACd,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI;AAAA,IACX,MAAMC;AAAA,EACR,CAAC;AAEP,QAAM,WAAW,GAAG;AACpB,QAAM,aAAa,IAAI,cAAc,OAAO,CAAC,IAAI,MAAM,QAAQ,IAAI,UAAU,IAAI,IAAI,aAAa,IAAI;AACtG,QAAM,qBAAqB,MAAM,QAAQ,UAAU,IAC/C,WAAW,SACX,OAAQ,YAAoB,SAAS,WACjC,WAAmB,OACrB;AAWN,QAAM,eAAe,CAAC,YAA0C;AAAA,IAC9D,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAEA,QAAM,wBAAwB,CAAC,QAA4B;AAEzD,QAAI,OAAO,eAAe;AAC1B,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAQ,IAAI,CAAC,MAAO;AACpB,aAAO,KAAK,KAAK,MAAM,QAAQ;AAAA,IACjC;AACA,WAAO,SAAS;AAAA,EAClB;AAEA,MAAI;AAEJ,QAAM,uBAAuB;AAC7B,QAAM,mBAAmB;AACzB,QAAM,mCAAmC;AACzC,QAAM,yCAAyC;AAC/C,QAAM,sCAAsC;AAC5C,QAAM,yBAAyB;AAC/B,QAAM,2BAA2B;AACjC,QAAM,oCAAoC;AAE1C,QAAM,cAAwC,IAAI,eAAe;AACjE,QAAM,qBAAsD,IAAI,cAAc;AAAA,IAC5E,YAAY,GAAG;AAAA,EACjB;AACA,QAAM,aAAa,mBAAmB;AACtC,QAAM,iBAAiB,CAAC,oCAAoC,KAAK,0BAA0B,EAAE;AAC7F,QAAM,mBAAmB,kBAAkB,SAAS,IAAI,mBAAmB;AAC3E,QAAM,sBAAsB,IAAI;AAEhC,MAAI,wBAAwB,uBAAuB,CAAC,QAAQ,SAAS,mBAAmB,GAAG;AACzF,YAAQ,KAAK,mBAAmB;AAAA,EAClC;AAEA,QAAM,2BAA2B,MAC/B,OAAO,qBAAqB,YAC5B,OAAO,SAAS,gBAAgB,KAChC,mBAAmB,KACnB,IAAI,IAAI,IAAI,oBAAoB;AAElC,QAAM,2BAA2B,MAAY;AAC3C,QAAI,CAAC,QAAQ,SAAS,eAAe,EAAG,SAAQ,KAAK,eAAe;AAAA,EACtE;AAEA,QAAM,6BAA6B,OAAO;AAC1C,QAAM,wBAAwB,OAAO;AACrC,QAAM,iBAAiB,OAAO;AAC9B,QAAM,oBAAoB,OAAO;AAEjC,QAAM,oBAAoB,OAAO,QAAQ;AACzC,QAAM,sBAAsB,OAAO,QAAQ;AAC3C,QAAM,mBAAmB,OAAO,QAAQ;AACxC,QAAM,sBAAsB,OAAO,QAAQ;AAC3C,QAAM,cAAc,OAAO,QAAQ;AACnC,QAAM,8BAA8B,OAAO;AAC3C,QAAM,kCAAkC,OAAO;AAE/C,QAAM,kBAAkB,CAAC,WAAyB;AAChD,UAAM,QAAQ,sBAAsB,MAAM;AAC1C,UAAM,MAAM,sBAAsB,SAAS,CAAC;AAC5C,QAAI,SAAS,QAAQ,OAAO,KAAM;AAClC,aAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,wBAAkB,IAAI,2BAA2B,CAAC,CAAE;AAAA,IACtD;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,WAA4B;AACrD,UAAM,QAAQ,sBAAsB,MAAM;AAC1C,UAAM,MAAM,sBAAsB,SAAS,CAAC;AAC5C,QAAI,SAAS,QAAQ,OAAO,KAAM,QAAO;AACzC,aAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,UAAI,kBAAkB,IAAI,2BAA2B,CAAC,CAAE,EAAG,QAAO;AAAA,IACpE;AACA,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,CAAC,WAA4B;AACrD,UAAM,QAAQ,OAAO,2BAA2B,MAAM;AACtD,QAAI,OAAO,UAAU,YAAY,kBAAkB,KAAK,GAAG;AACzD,aAAO;AAAA,IACT;AACA,UAAM,YAAY,OAAO,wBAAwB,MAAM;AACvD,UAAM,UAAU,OAAO,wBAAwB,SAAS,CAAC;AACzD,QAAI,aAAa,QAAQ,WAAW,KAAM,QAAO;AACjD,aAAS,IAAI,WAAW,IAAI,SAAS,KAAK;AACxC,UAAI,kBAAkB,OAAO,qBAAqB,CAAC,CAAE,EAAG,QAAO;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAEA,QAAM,qBAAqB,CACzB,SACA,YACiE;AAEjE,QAAI,aAAa,MAAM,IAAI,0BAA0B,MAAM;AACzD,wBAAkB,MAAM;AACxB,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,wBAAgB,QAAQ,CAAC,CAAE;AAAA,MAC7B;AAEA,UAAIC,WAAU;AACd,UAAIC,UAAS;AACb,eAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,cAAM,SAAS,aAAa,CAAC;AAC7B,YAAI,SAAS,sBAAsB;AACjC,UAAAA,WAAU;AACV,cAAIA,WAAU,IAAI;AAChB,YAAAA,UAAS;AACT,gBAAI,yBAAyB,GAAG;AAC9B,gCAAkB,MAAM;AACxB,qBAAO,EAAE,cAAc,KAAK;AAAA,YAC9B;AAAA,UACF;AAAA,QACF;AAEA,YAAI,CAAC,kBAAkB,MAAM,GAAG;AAC9B;AAAA,QACF;AAEA,oBAAYD,QAAO,IAAI;AACvB,QAAAA,YAAW;AACX,wBAAgB,OAAO,2BAA2B,MAAM,CAAE;AAAA,MAC5D;AAEA,YAAME,QAAO,aAAa,YAAY,SAAS,GAAGF,QAAO,IAAI,IAAI,WAAWA,QAAO;AACnF,UAAI,CAAC,cAAcA,WAAU,GAAG;AAC9B,QAAAE,MAAK,IAAI,YAAY,SAAS,GAAGF,QAAO,CAAC;AAAA,MAC3C;AACA,wBAAkB,MAAM;AACxB,aAAO,EAAE,MAAAE,MAAK;AAAA,IAChB;AAGA,sBAAkB,MAAM;AACxB,wBAAoB,MAAM;AAE1B,QAAI,WAAW;AACf,UAAM,sBAAsB,CAAC,WAAyB;AACpD,YAAM,QAAQ,sBAAsB,MAAM;AAC1C,YAAM,MAAM,sBAAsB,SAAS,CAAC;AAC5C,UAAI,SAAS,QAAQ,OAAO,KAAM;AAClC,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,cAAM,WAAW,2BAA2B,CAAC;AAC7C,YAAI,kBAAkB,IAAI,QAAQ,EAAG;AACrC,0BAAkB,IAAI,QAAQ;AAC9B,yBAAiB,QAAQ,IAAI;AAC7B,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,0BAAoB,QAAQ,CAAC,CAAE;AAAA,IACjC;AAEA,UAAM,gBAAgB,CAAC,WAA4B;AACjD,UAAI,oBAAoB,MAAO,QAAO;AACtC,YAAM,OAAO,OAAO,uBAAuB,MAAM;AACjD,aAAO,oBAAoB,cAAc,SAAS,IAAI,SAAS;AAAA,IACjE;AAEA,QAAI,SAAS;AACb,QAAI,SAAS;AACb,WAAO,SAAS,UAAU;AACxB,UAAI,SAAS,sBAAsB;AACjC,kBAAU;AACV,YAAI,UAAU,IAAI;AAChB,mBAAS;AACT,cAAI,yBAAyB,GAAG;AAC9B,8BAAkB,MAAM;AACxB,mBAAO,EAAE,cAAc,KAAK;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAEA,YAAM,WAAW,iBAAiB,MAAM;AACxC,gBAAU;AAEV,YAAM,QAAQ,gCAAgC,QAAQ;AACtD,YAAM,MAAM,gCAAgC,WAAW,CAAC;AACxD,UAAI,SAAS,QAAQ,OAAO,KAAM;AAClC,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,cAAM,SAAS,4BAA4B,CAAC;AAC5C,YAAI,CAAC,cAAc,MAAM,EAAG;AAC5B,YAAI,oBAAoB,IAAI,MAAM,EAAG;AACrC,4BAAoB,IAAI,MAAM;AAC9B,4BAAoB,OAAO,2BAA2B,MAAM,CAAE;AAAA,MAChE;AAAA,IACF;AAIA,QAAI,UAAU;AACd,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,YAAM,SAAS,aAAa,CAAC;AAC7B,UAAI,CAAC,oBAAoB,IAAI,MAAM,EAAG;AACtC,kBAAY,OAAO,IAAI;AACvB,iBAAW;AAAA,IACb;AAEA,UAAM,OAAO,aAAa,YAAY,SAAS,GAAG,OAAO,IAAI,IAAI,WAAW,OAAO;AACnF,QAAI,CAAC,cAAc,UAAU,GAAG;AAC9B,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,aAAK,CAAC,IAAI,YAAY,CAAC;AAAA,MACzB;AAAA,IACF;AACA,sBAAkB,MAAM;AACxB,WAAO,EAAE,KAAK;AAAA,EAChB;AAEA,QAAM,QAAQ,IAAI;AAClB,QAAM,2BAA2B,IAAI,4BAA4B;AACjE,MAAI,wBAAwB,uBAAuB,4BAA4B,KAAK,SAAS,CAAC,MAAM,WAAW,GAAG;AAChH,UAAM,QAAQ,mBAAmB;AAAA,EACnC;AACA,MAAI,cAAc;AAClB,MAAI,cAAc;AAClB,MAAI,aAAqC;AAEzC,QAAM,qBAAqB,MAAoB;AAC7C,QAAI,aAAc,QAAO;AAEzB,QAAI,IAAI,gBAAgB;AACtB,qBAAe,aAAa,IAAI,cAAc;AAAA,IAChD,WAAW,sBAAsB,KAAK;AACpC,wBAAkB,MAAM;AAExB,UAAI,eAAe;AACnB,iBAAW,OAAO,YAAoC;AACpD,YAAI,OAAO,QAAQ,YAAY,CAAC,OAAO,SAAS,GAAG,GAAG;AACpD,4BAAkB,MAAM;AACxB,yBAAe,aAAa,mBAAmB;AAC/C;AAAA,QACF;AAEA,cAAM,KAAK,KAAK,MAAM,GAAG;AACzB,YAAI,KAAK,KAAK,MAAM,OAAO,eAAe,QAAQ;AAChD,4BAAkB,MAAM;AACxB,yBAAe,aAAa,gBAAgB;AAC5C;AAAA,QACF;AAEA,0BAAkB,IAAI,EAAE;AACxB,4BAAoB,YAAY,IAAI;AACpC,wBAAgB;AAAA,MAClB;AAEA,UAAI,CAAC,cAAc;AACjB,YAAI,iBAAiB,GAAG;AACtB,4BAAkB,MAAM;AACxB,yBAAe,aAAa,cAAc;AAAA,QAC5C,OAAO;AACL,cAAI,UAAU;AACd,mBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,kBAAM,KAAK,oBAAoB,CAAC;AAChC,kBAAM,QAAQ,sBAAsB,EAAE;AACtC,kBAAM,MAAM,sBAAsB,KAAK,CAAC;AACxC,gBAAI,SAAS,QAAQ,OAAO,KAAM;AAGlC,gBAAI,uBAAuB;AAC3B,qBAAS,IAAI,OAAO,IAAI,MAAM,GAAG,KAAK;AACpC,oBAAM,WAAW,2BAA2B,CAAC;AAC7C,kBAAI,kBAAkB,IAAI,QAAQ,GAAG;AACnC,uCAAuB;AACvB;AAAA,cACF;AAAA,YACF;AACA,gBAAI,qBAAsB;AAE1B,gCAAoB,OAAO,IAAI;AAC/B,uBAAW;AAAA,UACb;AAEA,cAAI,YAAY,GAAG;AACjB,8BAAkB,MAAM;AACxB,2BAAe,aAAa,cAAc;AAAA,UAC5C,OAAO;AACL,kBAAM,UAAU,oBAAoB,SAAS,GAAG,OAAO;AACvD,oBAAQ,KAAK;AACb,kBAAM,UAAU,sBAAsB,OAAO;AAE7C,8BAAkB,MAAM;AAExB,2BAAe;AAAA,cACb,UAAU;AAAA,cACV;AAAA,cACA,WAAW,QAAQ;AAAA,cACnB,SAAS,QAAQ;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,QAAQ,oBAAoB;AAAA,QAChC;AAAA,QACA;AAAA,QACA,gBAAgB,IAAI;AAAA,MACtB,CAAC;AAED,qBAAe,MAAM,WACjB,aAAa,MAAM,UAAU,cAAc,IAC3C;AAAA,QACE,UAAU;AAAA,QACV,SAAS,WAAW,KAAK,MAAM,OAAO;AAAA,QACtC,WAAW,MAAM;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,SAAS,MAAM;AAAA,MACjB;AAAA,IACN;AAEA,UAAM,oBACJ,CAAC,aAAa,YAAY,iBAAiB,IAAI,aAAa,YAAY,iBAAiB;AAC3F,UAAM,kBACJ,CAAC,aAAa,YACd,aAAa,QAAQ,SAAS,KAC9B,aAAa,QAAQ,UAAU,2BAC9B,qBAAqB,QAAQ,qBAAqB;AACrD,kBACE,CAAC,CAAC,SACF,CAAC,MAAM,WAAW,KAClB,IAAI,0BAA0B,QAC9B;AACF,kBACE,aAAa,WAAW,oBAAoB,QAAQ,IAAI,oBAAoB,cAAc,IAAI;AAChG,iBAAa,cAAc,aAAa,UAAU;AAClD,WAAO;AAAA,EACT;AAEA,MAAI,gBAA4D,oCAC5D;AAAA,IACE,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,EACP,IACA;AAEJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,mBAAmB,CAAC,YAGgE;AACxF,UAAM,QAAQ,mBAAmB;AAChC,QAAI,MAAM,UAAU;AAClB,UAAI,iBAAiB,OAAO;AAC1B,wBAAgB,MAAM,SAAS;AAAA,UAC7B,KAAK;AAAA,UACL,SAAS,MAAM;AAAA,UACf,YAAY,SAAS,cAAc;AAAA,QACrC,CAAC;AAAA,MACH;AACA,YAAM,WAAW;AACjB,sBAAgB,SAAS;AACzB,aAAO,EAAE,MAAM,UAAU,KAAK,MAAM;AAAA,IACtC;AAIA,QAAI,kBAAkB,UAAU,qBAAqB,SAAS,MAAM,WAAW,MAAM,CAAC,eAAe,CAAC,QAAQ;AAC5G,UAAI,iBAAiB,OAAO;AAC1B,wBAAgB,MAAM,SAAS;AAAA,UAC7B,KAAK;AAAA,UACL,SAAS,MAAM;AAAA,UACf,YAAY,SAAS,cAAc;AAAA,QACrC,CAAC;AAAA,MACH;AACA,YAAM,WAAW;AACjB,sBAAgB,SAAS;AACzB,aAAO,EAAE,MAAM,UAAU,KAAK,MAAM;AAAA,IACtC;AAEA,QAAI,eAAe,SAAS,YAAY;AACtC,YAAM,SAAS,MAAM,IAAI,aAAa,UAAU;AAChD,UAAI,QAAQ;AACV,YAAI,eAAe;AACjB,0BAAgB,MAAM,SAAS;AAAA,YAC7B,KAAK;AAAA,YACL,SAAS,MAAM;AAAA,UACjB,CAAC;AAAA,QACH;AACA,wBAAgB,OAAO;AACvB,eAAO,EAAE,MAAM,QAAQ,KAAK,KAAK;AAAA,MACnC;AAKA,UAAI,kBAAkB,UAAU,qBAAqB,SAAS,MAAM,WAAW,GAAG;AAChF,cAAM,IAAI;AACV,cAAM,QAAQ,OAAO,KAAK;AAC1B,cAAM,QAAQ,OAAO,KAAK;AAC1B,YAAI,MAAM,SAAS,MAAM,OAAO;AAC9B,iBAAO,KAAK,sBAAsB;AAClC,iBAAO,KAAK,sBAAsB;AAElC,cAAI,eAAe;AACjB,4BAAgB,MAAM,SAAS;AAAA,cAC7B,KAAK;AAAA,cACL,SAAS,MAAM;AAAA,cACf,YAAY,SAAS,cAAc;AAAA,YACrC,CAAC;AAAA,UACH;AAEA,gBAAM,WAAW;AACjB,0BAAgB,SAAS;AACzB,iBAAO,EAAE,MAAM,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAKD,QAAI,SAAS,wBAAwB,cAAc,MAAM,yBAAyB,GAAG;AACnF,UAAI,iBAAiB,OAAO;AAC1B,wBAAgB,MAAM,SAAS;AAAA,UAC7B,KAAK;AAAA,UACL,SAAS,MAAM;AAAA,UACf,YAAY,SAAS,cAAc;AAAA,QACrC,CAAC;AAAA,MACH;AACA,YAAM,WAAW;AACjB,sBAAgB,SAAS;AACzB,UAAI,eAAe,SAAS,YAAY;AACtC,cAAM,IAAI,aAAa,WAAW,MAAM,GAAG,QAAQ;AAAA,MACrD;AACA,aAAO,EAAE,MAAM,UAAU,KAAK,OAAO,cAAc,KAAK;AAAA,IAC1D;AAEA,UAAM,WAAW,mBAAmB,MAAM,SAAS;AAAA,MACjD,sBAAsB,SAAS;AAAA,IACjC,CAAC;AACD,QAAI,SAAS,cAAc;AACzB,UAAI,iBAAiB,OAAO;AAC1B,wBAAgB,MAAM,SAAS;AAAA,UAC7B,KAAK;AAAA,UACL,SAAS,MAAM;AAAA,UACf,YAAY,SAAS,cAAc;AAAA,QACrC,CAAC;AAAA,MACH;AACA,YAAM,WAAW;AACjB,sBAAgB,SAAS;AACzB,UAAI,eAAe,SAAS,YAAY;AACtC,cAAM,IAAI,aAAa,WAAW,MAAM,GAAG,QAAQ;AAAA,MACrD;AACA,aAAO,EAAE,MAAM,UAAU,KAAK,OAAO,cAAc,KAAK;AAAA,IAC1D;AAEA,UAAM,OAAO,SAAS,QAAQ,IAAI,WAAW,CAAC;AAC9C,QAAI,eAAe,SAAS,YAAY;AACtC,YAAM,IAAI,aAAa,WAAW,MAAM,GAAG,aAAa,KAAK,MAAM,IAAI,IAAI;AAAA,IAC7E;AACA,QAAI,iBAAiB,OAAO;AAC1B,sBAAgB,MAAM,SAAS;AAAA,QAC7B,KAAK;AAAA,QACL,SAAS,MAAM;AAAA,QACf,YAAY,SAAS,cAAc;AAAA,MACrC,CAAC;AAAA,IACH;AACA,oBAAgB,KAAK;AACrB,WAAO,EAAE,MAAM,KAAK,MAAM;AAAA,EAC5B;AAEA,QAAM,gCAAgC,CAAC,cAA8B;AAKnE,QAAI,aAAa,KAAM,QAAO;AAC9B,QAAI,aAAa,KAAM,QAAO;AAC9B,QAAI,aAAa,IAAK,QAAO;AAC7B,WAAO;AAAA,EACT;AACA,QAAM,iCAAiC;AACvC,QAAM,gBAAgB,qBAAqB,SAAS,MAAM,WAAW;AACrE,QAAM,sBAAsB,OAAO,KAAK;AACxC,QAAM,qBAAqB,OAAO,KAAK;AACvC,QAAM,2BAA2B,OAAO,KAAK,4BAA4B;AACzE,QAAM,6BAA6B,8BAA8B,cAAc;AAC/E,QAAM,gBACJ,OAAO,uBAAuB,YAAY,qBAAqB,IAC3D,iBAAiB,IACf,qBAAqB,iBACrB,IACF;AAEN,MAAI,kBAAkB,QAAQ;AAC5B,QAAI,IAAI,WAAW,GAAG;AACpB,aAAO;AACP,cAAQ,KAAK,YAAY;AAAA,IAC3B,WAAW,kBAAkB,qCAAqC;AAChE,aAAO;AACP,cAAQ,KAAK,WAAW;AAAA,IAC1B,WAAW,IAAI,gBAAgB;AAC7B,aAAO;AACP,cAAQ,KAAK,WAAW;AACxB,cAAQ,KAAK,eAAe;AAAA,IAC9B,WAAW,uBAAuB,GAAG;AACnC,aAAO;AACP,cAAQ,KAAK,eAAe;AAAA,IAC9B,WAAW,iBAAiB,QAAQ,iBAAiB,4BAA4B;AAC/E,aAAO;AACP,cAAQ,KAAK,WAAW;AAAA,IAC1B,WAAW,eAAe;AAOxB,YAAM,WAAW,oBAAoB,QAAQ,IAAI,oBAAoB,cAAc,IAAI;AACvF,YAAM,eAAe,IAAI;AACzB,YAAM,eAAe,IAAI;AACzB,YAAM,kBACJ,sBAAsB,OACtB,OAAO,iBAAiB,YACxB,OAAO,SAAS,YAAY,KAC5B,OAAO,iBAAiB,YACxB,OAAO,SAAS,YAAY,KAC5B,eAAe,KACf,gBAAgB;AAElB,UAAI,iBAAiB;AACnB,cAAM,iBAAkB,eAAe,cAAc;AACrD,cAAM,UAAe,OAAO;AAG5B,cAAM,KAAK,QAAQ;AACnB,cAAM,KAAK,QAAQ;AACnB,cAAM,KAAK,QAAQ;AACnB,cAAM,KAAK,QAAQ;AACnB,YAAI,kBAAkB,MAAM,iBAAiB,MAAM,MAAM,OAAO,OAAO,YAAY,KAAK,GAAG;AACzF,iBAAO;AACP,kBAAQ,KAAK,cAAc;AAC3B,kBAAQ,KAAK,WAAW;AACxB,wBAAc;AACd,0BAAgB;AAChB,0BAAgB;AAAA,QAClB,OAAO;AACL,gBAAM,KAAK,QAAQ;AACnB,gBAAM,KAAK,QAAQ;AACnB,gBAAM,KAAK,QAAQ;AACnB,gBAAM,KAAK,QAAQ;AACnB,cAAI,kBAAkB,MAAM,iBAAiB,MAAM,MAAM,OAAO,OAAO,YAAY,KAAK,GAAG;AAEzF,oBAAQ,uBAAuB;AAC/B,oBAAQ,uBAAuB;AAC/B,oBAAQ,sBAAsB;AAC9B,oBAAQ,0BAA0B;AAClC,oBAAQ,uBAAuB;AAC/B,oBAAQ,uBAAuB;AAC/B,oBAAQ,sBAAsB;AAC9B,oBAAQ,0BAA0B;AAElC,mBAAO;AACP,oBAAQ,KAAK,cAAc;AAC3B,oBAAQ,KAAK,WAAW;AACxB,0BAAc;AACd,4BAAgB;AAChB,4BAAgB;AAAA,UAClB,OAAO;AAEL,kBAAM,QAAQ,QAAQ;AACtB,kBAAM,QAAQ,QAAQ;AAEtB,gBAAI,kBAAkB,SAAS,kBAAkB,OAAO;AACtD,sBAAQ,iCAAiC;AACzC,sBAAQ,iCAAiC;AACzC,qBAAO;AACP,sBAAQ,KAAK,yBAAyB;AAItC,kBAAI,QAAQ,4BAA4B,MAAM;AAC5C,sBAAM,YAAY,QAAQ;AAC1B,sBAAM,aAAa,OAAO,cAAc,YAAY,OAAO,SAAS,SAAS,IAAI,YAAY,KAAK;AAClG,wBAAQ,2BAA2B;AAEnC,sBAAM,eAAe,QAAQ;AAC7B,sBAAM,WAAW,OAAO,iBAAiB,YAAY,OAAO,SAAS,YAAY,IAAI,eAAe;AACpG,oBAAI,aAAa,MAAM,YAAY,GAAG;AACpC,0BAAQ,0BAA0B;AAAA,gBACpC;AAAA,cACF;AAAA,YACF,OAAO;AACL,kBAAI,QAAQ,4BAA4B,MAAM;AAC5C,uBAAO;AACP,wBAAQ,KAAK,yBAAyB;AAAA,cACxC,OAAO;AACL,uBAAO;AACP,wBAAQ,KAAK,cAAc;AAC3B,wBAAQ,KAAK,YAAY;AAEzB,sBAAM,eAAe,QAAQ;AAC7B,sBAAM,gBACH,OAAO,iBAAiB,YAAY,OAAO,SAAS,YAAY,IAAI,eAAe,KAAK;AAC3F,wBAAQ,8BAA8B;AAAA,cACxC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AAKL,cAAM,sBACJ,OAAO,uBAAuB,YAAY,OAAO,SAAS,kBAAkB,IACxE,qBACA,OAAO,wBAAwB,YAAY,OAAO,SAAS,mBAAmB,IAC5E,sBACA;AACR,cAAM,mBACJ,2BAA2B,0CAA0C,kBAAkB;AAEzF,YACE,oBACC,OAAO,wBAAwB,YAC9B,OAAO,SAAS,mBAAmB,KACnC,uBAAuB,kCACzB;AACA,iBAAO;AACP,kBAAQ,KAAK,WAAW;AAAA,QAC1B,OAAO;AACL,iBAAO;AACP,kBAAQ,KAAK,cAAc;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,QAAQ,mBAAmB;AACjC,UAAI,MAAM,UAAU;AAClB,eAAO;AACP,gBAAQ,KAAK,WAAW;AACxB,gBAAQ,KAAK,eAAe;AAAA,MAC9B,WAAW,MAAM,QAAQ,WAAW,GAAG;AACrC,eAAO;AACP,gBAAQ,KAAK,eAAe;AAAA,MAC9B,OAAO;AACL,cAAM,iBAAiB,iBAAiB,IAAI,MAAM,YAAY,iBAAiB;AAC/E,YAAI,kBAAkB,4BAA4B;AAChD,iBAAO;AACP,kBAAQ,KAAK,WAAW;AAAA,QAC1B,WACE,CAAC,eACD,kBAAkB,qCAClB,kBAAkB,6BAA6B,kBAC/C;AAEA,iBAAO;AACP,kBAAQ,KAAK,WAAW;AAAA,QAC1B,OAAO;AACL,gBAAM,EAAE,MAAM,KAAK,aAAa,IAAI,iBAAiB;AAAA,YACnD,YAAY,uBAAuB;AAAA,YACnC,sBAAsB,oBAAoB;AAAA,UAC5C,CAAC;AACD,cAAI,cAAc;AAChB,qCAAyB;AAAA,UAC3B;AACA,wBAAc;AACd,kBAAQ,KAAK,MAAM,cAAc,YAAY;AAC7C,gBAAM,QAAQ,iBAAiB,IAAI,KAAK,SAAS,iBAAiB;AAClE,cAAI,SAAS,gCAAgC;AAC3C,mBAAO;AACP,oBAAQ,KAAK,WAAW;AAAA,UAC1B,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,YAAQ,KAAK,iBAAiB;AAC9B,QAAI,SAAS,SAAS;AACpB,YAAM,QAAQ,mBAAmB;AACjC,YAAM,EAAE,MAAM,IAAI,IAAI,iBAAiB,EAAE,YAAY,uBAAuB,aAAa,CAAC;AAC1F,oBAAc;AACd,UAAI,MAAM,UAAU;AAClB,gBAAQ,KAAK,WAAW;AAAA,MAC1B,WAAW,SAAS,MAAM,QAAQ,SAAS,GAAG;AAC5C,gBAAQ,KAAK,MAAM,cAAc,YAAY;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,MACE,eAAe,YACf,cAAc,kBAAkB,kBAChC,CAAC,QAAQ,SAAS,yBAAyB,GAC3C;AACA,YAAQ,KAAK,yBAAyB;AAAA,EACxC;AAEA,QAAM,kBAAkB,MAA6C;AACnE,QAAI,CAAC,6BAA8B,QAAO;AAK1C,UAAM,kBAAkB,qBAAqB,WAAW,qBAAqB;AAE7E,QAAI,IAAI,kBAAkB,MAAM;AAC9B,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ,IAAI;AAAA,QACZ,WAAW;AAAA,QACX,GAAI,kBAAkB,EAAE,SAAS,CAAC,GAAG,kBAAkB,MAAM,IAAI;AAAA,MACnE;AAAA,IACF;AAEA,QAAI,OAAO,uBAAuB,YAAY,uBAAuB,GAAG;AACtE,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,GAAI,kBAAkB,EAAE,SAAS,CAAC,GAAG,kBAAkB,MAAM,IAAI;AAAA,MACnE;AAAA,IACF;AAEA,UAAM,QACJ,mBAAmB,gBAAgB,SAAS,qBAAqB,WAAW,qBAAqB,UAC7F,mBAAmB,IACnB;AAEN,QAAI,OAAO,UAAU;AACnB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ,MAAM,UAAU;AAAA,QACxB,WAAW;AAAA,QACX,GAAI,kBAAkB,EAAE,SAAS,CAAC,GAAG,kBAAkB,MAAM,IAAI;AAAA,MACnE;AAAA,IACF;AAEA,QAAI,OAAO;AACT,aAAO;AAAA,QACL,UAAU;AAAA,QACV,WAAW,MAAM;AAAA,QACjB,GAAI,kBACA;AAAA,UACE,SAAS,MAAM,KAAK,MAAM,QAAQ,SAAS,GAAG,oBAAoB,CAAC;AAAA,UACnE,kBAAkB,MAAM,QAAQ,SAAS;AAAA,QAC3C,IACA;AAAA,MACN;AAAA,IACF;AAEA,QAAI,OAAO,uBAAuB,UAAU;AAC1C,aAAO;AAAA,QACL,UAAU;AAAA,QACV,WAAW;AAAA,MACb;AAAA,IACF;AAEA,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,GAAI,kBAAkB,EAAE,SAAS,CAAC,GAAG,kBAAkB,MAAM,IAAI;AAAA,IACnE;AAAA,EACF;AAEA,uBAAqB,IAAI,IAAI;AAC7B,MAAI,kBAAkB,QAAQ;AAC5B,yBAAqB,KAAK,IAAI,GAAG,qBAAqB,iBAAiB;AAAA,EACzE;AAEA,MAAI,eAAe;AACnB,QAAM,oCACJ,qBAAqB,SAAS,kBAAkB,UAAU,SAAS,UAAU,QAAQ,WAAW,KAAK,QAAQ,CAAC,MAAM;AACtH,QAAM,+BAA+B,yBAAyB,CAAC;AAE/D,QAAM,iBAAiB,CAACC,oBAAmD;AAAA,IACzE;AAAA,IACA,eAAAA;AAAA,IACA,cAAc,KAAK,IAAI,GAAG,aAAaA,cAAa;AAAA,IACpD,cAAc;AAAA,IACd,GAAI,OAAO,kBAAkB,WAAW,EAAE,cAAc,IAAI;AAAA,EAC9D;AAEA,QAAM,sBAAsB,CAAC,WAIO;AAClC,UAAM,YAAY,eAAe,OAAO,aAAa;AAErD,WAAO;AAAA,MACL;AAAA,MACA,cAAc;AAAA,MACd,SAAS,OAAO;AAAA,MAChB;AAAA,MACA;AAAA,MACA,mBAAmB,IAAI;AAAA,MACvB,qBAAqB,OAAO;AAAA,MAC5B,kBAAkB,kBAAkB,SAAS,IAAI,mBAAmB;AAAA,MACpE,oBAAoB,kBAAkB,SAAS,qBAAqB;AAAA,MACpE;AAAA,MACA;AAAA,MACA,OAAO,+BAA+B,gBAAgB,IAAI;AAAA,MAC1D,YAAY,oCAAoC,EAAE,YAAY,iBAAiB,IAAI;AAAA,MACnF,OAAO,oCAAoC,gBAAgB;AAAA,MAC3D,YAAY,oCAAoC,qBAAqB;AAAA,MACrE,UAAU,oCACN;AAAA,QACE,gBAAgB,GAAG,WAAW;AAAA,QAC9B,WAAW;AAAA,QACX,iBAAiB,GAAG;AAAA,MACtB,IACA;AAAA,MACJ,aAAa,oCAAoC,qBAAqB;AAAA,MACtE,qBAAqB,oCAAoC,sBAAsB;AAAA,MAC/E,MACE,qCAAqC,YAAY,SAAS,SAAS,IAC/D,SAAS,MAAM,IACf;AAAA,IACR;AAAA,EACF;AAEA,QAAM,kCAAkC,CAAC,YAIJ;AAAA,IACnC;AAAA,IACA,cAAc;AAAA,IACd,SAAS,OAAO;AAAA,IAChB;AAAA,IACA,gBAAgB;AAAA,IAChB,mBAAmB,IAAI;AAAA,IACvB,qBAAqB,OAAO;AAAA,IAC5B,kBAAkB,kBAAkB,SAAS,IAAI,mBAAmB;AAAA,IACpE,oBAAoB,kBAAkB,SAAS,qBAAqB;AAAA,IACpE;AAAA,IACA,WAAW,eAAe,OAAO,aAAa;AAAA,EAChD;AAEA,QAAM,QAAgD,qBAAqB,SAAS,CAAC,IAAI;AACzF,MAAI,gBAAgB;AACpB,QAAM,qBAAqB,IAAI,sBAAsB,QAAQ,OAAO;AACpE,QAAM,SAAS,MAAM;AACnB,QAAI,CAAC,oBAAoB;AACvB,aAAO,IAAI,SAAS,IAAI;AAAA,IAC1B;AACA,UAAM,UAAe,OAAO;AAC5B,UAAM,SAAS,QAAQ;AACvB,QAAI,QAAQ;AACV,aAAO,MAAM,IAAI;AACjB,aAAO;AAAA,IACT;AACA,UAAM,OAAO,IAAI,oBAAoB,IAAI;AACzC,YAAQ,sBAAsB;AAC9B,WAAO;AAAA,EACT,GAAG;AACH,MAAI,eAAe;AACnB,QAAM,gBAAgB,MAAY;AAChC,QAAI,iBAAiB,qBAAqB;AACxC,YAAM,SAAS;AAAA,IACjB;AACA,QAAI,SAAS,IAAI;AAAA,EACnB;AAEA,MAAI;AACF,QAAI,SAAS,WAAW,CAAC,aAAa;AAIpC,UAAI,KAAK;AACT,UAAI,sBAAsB,KAAK;AAC7B,cAAM,eAAe;AACrB,cAAM,aACJ,OAAO,IAAI,sBAAsB,WAC7B,IAAI,oBACF,aAAqB;AAO7B,YAAI;AACJ,YAAI,OAAO,eAAe,YAAY,aAAa,KAAK,cAAc,IAAI;AACxE,gBAAM,WAAW,oBAAoB,QAAQ,IAAI,oBAAoB,cAAc,IAAI;AACvF,gBAAM,UAAU,IAAI;AAEpB,cAAI,OAAO,YAAY,UAAU;AAC/B,6BAAiB,UAAU,cAAc;AAAA,UAC3C,OAAO;AACL,gBAAI,IAAI,eAAe;AACvB,gBAAI,QAAQ;AACZ,uBAAW,OAAO,cAAc;AAC9B,kBAAI,OAAO,QAAQ,YAAY,CAAC,OAAO,SAAS,GAAG,GAAG;AACpD,wBAAQ;AACR;AAAA,cACF;AACA,oBAAM,KAAK,KAAK,MAAM,GAAG;AACzB,mBAAK,OAAO;AACZ,kBAAI,KAAK,KAAK,GAAG,QAAQ;AAAA,YAC3B;AACA,gBAAI,OAAO;AACT,+BAAiB,IAAI,cAAc;AAAA,YACrC;AAAA,UACF;AAEA,cAAI,kBAAkB,QAAW;AAC/B,kBAAM,UAAe,OAAO;AAC5B,kBAAM,KAAK,QAAQ;AACnB,kBAAM,KAAK,QAAQ;AACnB,kBAAM,KAAK,QAAQ;AACnB,kBAAM,KAAK,QAAQ;AACnB,gBAAI,kBAAkB,MAAM,eAAe,MAAM,MAAM,OAAO,OAAO,YAAY,KAAK,GAAG;AACvF,4BAAc;AACd,8BAAgB;AAChB,8BAAgB;AAChB,mBAAK;AAAA,YACP,OAAO;AACL,oBAAM,KAAK,QAAQ;AACnB,oBAAM,KAAK,QAAQ;AACnB,oBAAM,KAAK,QAAQ;AACnB,oBAAM,KAAK,QAAQ;AACnB,kBAAI,kBAAkB,MAAM,eAAe,MAAM,MAAM,OAAO,OAAO,YAAY,KAAK,GAAG;AAEvF,wBAAQ,uBAAuB;AAC/B,wBAAQ,uBAAuB;AAC/B,wBAAQ,sBAAsB;AAC9B,wBAAQ,0BAA0B;AAClC,wBAAQ,uBAAuB;AAC/B,wBAAQ,uBAAuB;AAC/B,wBAAQ,sBAAsB;AAC9B,wBAAQ,0BAA0B;AAElC,8BAAc;AACd,gCAAgB;AAChB,gCAAgB;AAChB,qBAAK;AAAA,cACP;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,CAAC,IAAI;AACP,gBAAM,UAAU;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,YAAY,IAAI;AAClB,mBAAO;AACP,4BAAgB;AAChB,gBAAI,CAAC,QAAQ,SAAS,WAAW,EAAG,SAAQ,KAAK,WAAW;AAC5D,iBAAK;AAAA,UACP,WAAW,WAAW,GAAG;AACvB,4BAAgB;AAChB,4BAAgB;AAChB,iBAAK;AAGL,gBACE,kBAAkB,UAClB,OAAO,eAAe,YACtB,aAAa,KACb,cAAc,MACd,UAAU,KACV,WAAW,KACX;AACA,oBAAM,UAAe,OAAO;AAC5B,oBAAM,QAAQ,QAAQ;AACtB,oBAAM,QAAQ,QAAQ;AACtB,oBAAM,QAAQ,kBAAkB,SAAS,kBAAkB;AAE3D,kBAAI,OAAO;AAGT,sBAAM,WAAW,QAAQ;AACzB,sBAAM,WAAW,QAAQ;AACzB,sBAAM,UAAU,QAAQ;AACxB,sBAAM,UAAU,QAAQ;AAExB,sBAAM,UAAU,QAAQ;AACxB,sBAAM,MAAM,WAAW,IAAI,WAAW,GAAG;AAEzC,yBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,sBAAI,CAAC,IAAI,YAAY,CAAC;AAAA,gBACxB;AAEA,wBAAQ,uBAAuB;AAC/B,wBAAQ,uBAAuB;AAC/B,wBAAQ,sBAAsB;AAC9B,wBAAQ,0BAA0B;AAClC,wBAAQ,uBAAuB;AAC/B,wBAAQ,uBAAuB;AAC/B,wBAAQ,sBAAsB;AAC9B,wBAAQ,0BAA0B;AAAA,cACpC,OAAO;AACL,wBAAQ,iCAAiC;AACzC,wBAAQ,iCAAiC;AAAA,cAC3C;AAAA,YACF;AAAA,UACF,OAAO;AAGL,iBAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,IAAI;AACP,cAAM,QAAQ,mBAAmB;AACjC,YAAI,MAAM,UAAU;AAClB,iBAAO;AACP,cAAI,CAAC,QAAQ,SAAS,WAAW,EAAG,SAAQ,KAAK,WAAW;AAC5D,cAAI,CAAC,QAAQ,SAAS,eAAe,EAAG,SAAQ,KAAK,eAAe;AAAA,QACtE,OAAO;AACL,gBAAM,WAAW,mBAAmB,MAAM,OAAO;AACjD,gBAAM,OAAO,SAAS,QAAQ,IAAI,WAAW,CAAC;AAC9C,0BAAgB,KAAK;AACrB,gBAAM,QAAQ,iBAAiB,IAAI,KAAK,SAAS,iBAAiB;AAClE,cAAI,SAAS,gCAAgC;AAC3C,mBAAO;AACP,gBAAI,CAAC,QAAQ,SAAS,WAAW,EAAG,SAAQ,KAAK,WAAW;AAAA,UAC9D,OAAO;AACL,0BAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UACJ,SAAS,UACL,gBAAgB,iBAAiB,OAAO,cAAc,gBACtD;AACN,UAAM,YACJ,SAAS,UACL,kBAAkB,cAAc,YAAY,SAAS,kBACrD;AAEN,aAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAM,SAAS,QAAQ,CAAC;AACxB,YAAM,QAAQ,iBAAiB,MAAM;AACrC,UAAI,CAAC,MAAO;AAEZ,YAAM,YAAY,MAAM;AAExB,UAAI,OAAO;AACT,YAAI,IAAI,IAAI,IAAI,qBAAqB,IAAI,UAAU;AAEjD,wBAAc;AACd,gBAAMC,mBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,gBAAM,OAAO,cAAc,KAAK;AAChC,gBAAM,UAA2B;AAAA,YAC/B;AAAA,YACA,UAAU,IAAI;AAAA,YACd,iBAAAA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc,KAAK,IAAI,GAAG,aAAa,aAAa;AAAA,YACpD,cAAc;AAAA,YACd;AAAA,UACF;AACA,cAAI,CAAC,QAAQ,SAAS,eAAe,EAAG,SAAQ,KAAK,eAAe;AACpE,gBAAML,YAAW,oBAAoB;AAAA,YACnC,SAAS;AAAA,YACT;AAAA,YACA,qBAAqBK;AAAA,UACvB,CAAC;AACD,cAAIL,aAAY,qBAAqB,OAAO;AAC1C,mBAAO,4BAA4BA,SAAQ;AAAA,UAC7C;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ;AAAA,YACR;AAAA,YACA,GAAIA,YAAW,EAAE,UAAAA,UAAS,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF,OAAO;AACL,wBAAgB;AAChB,YAAI,gBAAgB,IAAI;AACtB,yBAAe;AACf,cAAI,IAAI,IAAI,IAAI,qBAAqB,IAAI,UAAU;AAEjD,0BAAc;AACd,gBAAI,CAAC,QAAQ,SAAS,eAAe,EAAG,SAAQ,KAAK,eAAe;AACpE,kBAAMK,mBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,kBAAML,YAAW,wBACb,oBAAoB;AAAA,cAClB,SAAS;AAAA,cACT;AAAA,cACA,qBAAqBK;AAAA,YACvB,CAAC,IACD;AACJ,gBAAIL,aAAY,qBAAqB,MAAO,QAAO,4BAA4BA,SAAQ;AACvF,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,GAAIA,YAAW,EAAE,UAAAA,UAAS,IAAI;AAAA,YAChC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,uBAAiB;AAEjB,UAAI,OAAO;AACT,cAAM,gBAAgB,IAAI,IAAI;AAC9B,cAAMM,QAAO,OAAOP,QAAO;AAAA,UACzB,cAAc,KAAK,QAAQ,OAAO,QAAQ,OAAO,uBAAuB,kBAAkB,KAAK;AAAA,QACjG;AACA,cAAM,cAAc,IAAI,IAAI;AAC5B,cAAM,aAAa,KAAK,IAAI,GAAG,cAAc,aAAa;AAC1D,cAAM,WAAW,MAAM,SAAS,aAAa,aAAa;AAC1D,cAAM,YAAY,OAAO,kBAAkB,MAAM,KAAK,OAAO,MAAM;AACnE,cAAM,UAAUO,MAAK,SAAS,YAAYA,MAAK,QAAQ;AACvD,YAAI,UAAU;AACZ,4BAAkB;AAAA,YAChB;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,MAAM;AAAA,cACN;AAAA,cACA,gBAAgB,OAAO,2BAA2B,MAAM;AAAA,cACxD;AAAA,cACA;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,KAAK;AAAA,UACT,QAAQ;AAAA,UACR,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAIA,MAAK,SAAS,WAAW;AAC3B,gBAAM,QAAQ,2BAA2BA,MAAK,KAAK;AACnD,wBAAc;AACd,gBAAMD,mBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,gBAAM,OAAO,cAAc,KAAK;AAChC,gBAAM,UAA2B;AAAA,YAC/B;AAAA,YACA,UAAU,IAAI;AAAA,YACd,iBAAAA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc,KAAK,IAAI,GAAG,aAAa,aAAa;AAAA,YACpD,cAAc;AAAA,YACd;AAAA,UACF;AACA,gBAAML,YAAW,oBAAoB;AAAA,YACnC,SAAS;AAAA,YACT;AAAA,YACA,qBAAqBK;AAAA,UACvB,CAAC;AACD,cAAIL,aAAY,qBAAqB,OAAO;AAC1C,mBAAO,4BAA4BA,SAAQ;AAAA,UAC7C;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,cAAc,MAAM;AAAA,YACpB,gBAAgB,MAAM;AAAA,YACtB;AAAA,YACA,GAAIA,YAAW,EAAE,UAAAA,UAAS,IAAI;AAAA,UAChC;AAAA,QACF;AACA,YAAIM,MAAK,OAAO;AACd,0BAAgB;AAAA,QAClB;AACA;AAAA,MACF;AAEA,UAAI,UAAU;AACZ,cAAM,gBAAgB,IAAI,IAAI;AAC9B,cAAMA,QAAO,OAAOP,QAAO;AAAA,UACzB,cAAc,KAAK,QAAQ,OAAO,QAAQ,OAAO,uBAAuB,kBAAkB,KAAK;AAAA,QACjG;AACA,cAAM,cAAc,IAAI,IAAI;AAC5B,cAAM,aAAa,KAAK,IAAI,GAAG,cAAc,aAAa;AAC1D,cAAM,WAAW,MAAM,SAAS,aAAa,aAAa;AAC1D,cAAM,UAAUO,MAAK,SAAS,YAAYA,MAAK,QAAQ;AACvD,0BAAkB;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,MAAM;AAAA,YACN;AAAA,YACA,gBAAgB,OAAO,2BAA2B,MAAM;AAAA,YACxD;AAAA,YACA;AAAA,UACF;AAAA,QACF,CAAC;AAED,YAAIA,MAAK,SAAS,WAAW;AAC3B,gBAAM,QAAQ,2BAA2BA,MAAK,KAAK;AACnD,wBAAc;AACd,gBAAMD,mBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,gBAAML,YAAW,oBAAoB;AAAA,YACnC,SAAS;AAAA,YACT;AAAA,YACA,qBAAqBK;AAAA,UACvB,CAAC;AACD,cAAIL,aAAY,qBAAqB,OAAO;AAC1C,mBAAO,4BAA4BA,SAAQ;AAAA,UAC7C;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,cAAc,MAAM;AAAA,YACpB,gBAAgB,MAAM;AAAA,YACtB,GAAIA,YAAW,EAAE,UAAAA,UAAS,IAAI;AAAA,UAChC;AAAA,QACF;AAEA,YAAI,SAAS;AACX,0BAAgB;AAAA,QAClB;AAEA;AAAA,MACF;AAIA,UAAI,qBAAqB,SAAS,MAAM,WAAW,GAAG;AACpD,YAAI;AACF,cAAI,qBAAqB,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAC3D,4BAAgB;AAAA,UAClB;AAAA,QACF,SAAS,GAAG;AACV,gBAAM,QAAQ,2BAA2B,CAAC;AAC1C,wBAAc;AACd,gBAAMK,mBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,gBAAML,YAAW,wBACb,oBAAoB;AAAA,YAClB,SAAS;AAAA,YACT;AAAA,YACA,qBAAqBK;AAAA,UACvB,CAAC,IACD;AACJ,cAAIL,aAAY,qBAAqB,MAAO,QAAO,4BAA4BA,SAAQ;AACvF,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,cAAc,MAAM;AAAA,YACpB,gBAAgB,MAAM;AAAA,YACtB,GAAIA,YAAW,EAAE,UAAAA,UAAS,IAAI;AAAA,UAChC;AAAA,QACF;AACA;AAAA,MACF;AAEA,YAAM,OAAO,OAAOD,QAAO;AAAA,QACzB,cAAc,KAAK,QAAQ,OAAO,QAAQ,OAAO,uBAAuB,kBAAkB,KAAK;AAAA,MACjG;AACA,UAAI,KAAK,SAAS,WAAW;AAC3B,cAAM,QAAQ,2BAA2B,KAAK,KAAK;AACnD,sBAAc;AACd,cAAMM,mBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,cAAML,YAAW,wBACb,oBAAoB;AAAA,UAClB,SAAS;AAAA,UACT;AAAA,UACA,qBAAqBK;AAAA,QACvB,CAAC,IACD;AACJ,YAAIL,aAAY,qBAAqB,MAAO,QAAO,4BAA4BA,SAAQ;AACvF,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc,MAAM;AAAA,UACpB,gBAAgB,MAAM;AAAA,UACtB,GAAIA,YAAW,EAAE,UAAAA,UAAS,IAAI;AAAA,QAChC;AAAA,MACF;AACA,UAAI,KAAK,OAAO;AACd,wBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF,SAAS,GAAG;AAEV,QAAI,aAAa,uBAAuB;AACtC,YAAM;AAAA,IACR;AACA,UAAM,QAAQ,2BAA2B,CAAC;AAE1C,kBAAc;AACd,UAAMK,mBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,UAAM,UAAuC,QACzC;AAAA,MACE;AAAA,MACA,UAAU,IAAI;AAAA,MACd,iBAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,KAAK,IAAI,GAAG,aAAa,aAAa;AAAA,MACpD,cAAc;AAAA,MACd,MAAM,cAAc,KAAK;AAAA,IAC3B,IACA;AACJ,UAAML,YAAW,wBACb,oBAAoB;AAAA,MAClB,SAAS;AAAA,MACT;AAAA,MACA,qBAAqBK;AAAA,IACvB,CAAC,IACD;AACJ,QAAIL,aAAY,qBAAqB,MAAO,QAAO,4BAA4BA,SAAQ;AACvF,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,cAAc,MAAM;AAAA,MACpB,gBAAgB,MAAM;AAAA,MACtB,GAAI,UAAU,EAAE,QAAQ,IAAI;AAAA,MAC5B,GAAIA,YAAW,EAAE,UAAAA,UAAS,IAAI;AAAA,IAChC;AAAA,EACF;AAEA,MAAI,iBAAiB,qBAAqB;AAExC,UAAM,OAAO;AAAA,EACf;AAEA,QAAM,kBAAkB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,kBAAkB;AAClE,QAAM,UAAmC,eAAe,IAAI,cAAc;AAE1E,MAAI,SAAS,WAAW,kBAAkB,QAAW;AACnD,oBAAgB;AAAA,EAClB;AAEA,MAAI,SAAS,UAAU,qBAAqB,SAAS,MAAM,WAAW,GAAG;AAEvE,QAAI,IAAI,WAAW,GAAG;AACpB,YAAM,OAAO,OAAO;AACpB,YAAM,OAAO,KAAK;AAElB,WAAK,sBACH,OAAO,SAAS,YAAY,OAAO,SAAS,IAAI,IAAI,OAAO,MAAM,kBAAkB,MAAM;AAC3F,YAAM,UAAU,KAAK;AACrB,WAAK,qBACH,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,IAAI,KAAK,IAAI,SAAS,eAAe,IAAI;AACjG,YAAM,YAAY,KAAK,4BAA4B;AACnD,WAAK,2BAA2B,YAAY;AAC5C,UAAI,OAAO,IAAI,WAAW,YAAY,OAAO,SAAS,IAAI,MAAM,GAAG;AACjE,aAAK,0BAA0B,IAAI;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,+BACb,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,EACvB,CAAC,IACD,oCACE,gCAAgC;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,EACvB,CAAC,IACD;AACN,MAAI,YAAY,qBAAqB,MAAO,QAAO,4BAA4B,QAAQ;AAEvF,SAAO,eAAe,IACjB;AAAA,IACC,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,GAAI,QACA;AAAA,MACE,SAAS;AAAA,QACP;AAAA,QACA,UAAU,IAAI;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,KAAK,IAAI,GAAG,aAAa,aAAa;AAAA,QACpD,cAAc;AAAA,QACd,MAAM,cAAc,KAAK;AAAA,MAC3B;AAAA,IACF,IACA;AAAA,IACJ,GAAI,WAAW,EAAE,SAAS,IAAI;AAAA,EAChC,IACC;AAAA,IACC,MAAM;AAAA,IACN,GAAI,QACA;AAAA,MACE,SAAS;AAAA,QACP;AAAA,QACA,UAAU,IAAI;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,KAAK,IAAI,GAAG,aAAa,aAAa;AAAA,QACpD,cAAc;AAAA,QACd,MAAM,cAAc,KAAK;AAAA,MAC3B;AAAA,IACF,IACA;AAAA,IACJ,GAAI,WAAW,EAAE,SAAS,IAAI;AAAA,EAChC;AACN,CAAC;;;AM7uDH,SAAS,UAAAO,eAAc;AACvB,SAAS,cAAc;;;ACsBvB,IAAM,uBAAuB,oBAAI,QAA2D;AAErF,IAAM,uBAAuB,CAAC,YAAqD;AACxF,QAAM,QAAQ,QAAQ,MAAM;AAC5B,QAAM,SAAS,qBAAqB,IAAI,OAAO;AAC/C,MAAI,UAAU,OAAO,aAAa,OAAO;AACvC,WAAO,OAAO;AAAA,EAChB;AAEA,QAAM,aAAa,oBAAI,IAA2B;AAElD,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,WAAW,IAAI,KAAK,IAAI,KAAK,CAAC;AAC3C,SAAK,KAAK,KAAK,EAAE;AACjB,eAAW,IAAI,KAAK,MAAM,IAAI;AAAA,EAChC;AAEA,QAAM,QAAyB;AAAA,IAC7B,MAAM;AAAA,IACN;AAAA,EACF;AAGA,uBAAqB,IAAI,SAAS;AAAA,IAChC,UAAU;AAAA,IACV;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AC5CO,IAAM,iBAAiB,CAAC,OAAwB,WAAwC;AAC7F,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,QAAuB,CAAC,MAAM;AACpC,MAAI,SAAS;AAEb,SAAO,SAAS,MAAM,QAAQ;AAC5B,UAAM,UAAU,MAAM,MAAM;AAC5B,cAAU;AACV,QAAI,CAAC,QAAS;AACd,QAAI,QAAQ,IAAI,OAAO,EAAG;AAC1B,YAAQ,IAAI,OAAO;AAEnB,UAAM,QAAQ,MAAM,WAAW,IAAI,OAAO;AAC1C,QAAI,OAAO;AACT,iBAAW,KAAK,MAAO,OAAM,KAAK,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AACT;;;AFVA,IAAM,YAAY,uBAAO,IAAI,iCAAiC;AAgF9D,IAAM,gBAAgB,CAAC,SAAiD;AACtE,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,SAAO,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,QAAS,WAAW,KAAK,GAAG,IAAI,OAAO,GAAG,IAAI,GAAI;AAChF;AAEA,IAAM,YAAY,CAAC,OAAY,SAAsB;AACnD,MAAI,CAAC,QAAQ,SAAS,KAAM,QAAO;AACnC,QAAM,WAAW,cAAc,IAAI;AACnC,MAAI,UAAe;AACnB,aAAW,OAAO,UAAU;AAC1B,QAAI,WAAW,KAAM,QAAO;AAC5B,cAAU,QAAQ,GAAU;AAAA,EAC9B;AACA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,OAAgB,MAAc,UAAyB;AAChF,MAAI,CAAC,KAAM;AACX,QAAM,WAAW,cAAc,IAAI;AACnC,MAAI,SAAS,WAAW,EAAG;AAE3B,MAAI,UAAe;AACnB,WAAS,IAAI,GAAG,IAAI,SAAS,SAAS,GAAG,KAAK;AAC5C,UAAM,MAAM,SAAS,CAAC;AACtB,UAAM,UAAU,SAAS,IAAI,CAAC;AAE9B,UAAM,OAAO,QAAQ,GAAU;AAC/B,QAAI,QAAQ,QAAQ,OAAO,SAAS,UAAU;AAC5C,cAAQ,GAAU,IAAI,OAAO,YAAY,WAAW,CAAC,IAAI,CAAC;AAAA,IAC5D;AACA,cAAU,QAAQ,GAAU;AAAA,EAC9B;AAEA,QAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,UAAQ,IAAW,IAAI;AACzB;AAEA,IAAM,sBAAsB,CAAC,OAAgB,SAAuB;AAClE,MAAI,CAAC,KAAM;AACX,QAAM,WAAW,cAAc,IAAI;AACnC,MAAI,SAAS,WAAW,EAAG;AAE3B,MAAI,UAAe;AACnB,WAAS,IAAI,GAAG,IAAI,SAAS,SAAS,GAAG,KAAK;AAC5C,UAAM,MAAM,SAAS,CAAC;AACtB,UAAM,OAAO,QAAQ,GAAU;AAC/B,QAAI,QAAQ,QAAQ,OAAO,SAAS,UAAU;AAC5C;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AAEA,QAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,MAAI,MAAM,QAAQ,OAAO,KAAK,OAAO,SAAS,UAAU;AAGtD,WAAO,QAAQ,IAAI;AACnB;AAAA,EACF;AACA,MAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,WAAO,QAAQ,IAAW;AAAA,EAC5B;AACF;AAEA,IAAM,gBAAgB,CAAC,UACrB,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAErE,IAAM,sBAAsB,CAAC,UAA6B,UAAU,UAAa,UAAU,OAAO,SAAY;AAE9G,IAAM,kBAAkB,CAAC,WAA4C;AACnE,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,MAAI,OAAO,WAAW,EAAG,QAAO,OAAO,CAAC;AAGxC,MAAI,OAAO,MAAM,aAAa,GAAG;AAC/B,UAAM,SAAkC,CAAC;AACzC,eAAW,SAAS,QAAkD;AACpE,iBAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,cAAM,WAAW,oBAAoB,MAAM,GAAG,CAAC;AAC/C,YAAI,aAAa,OAAW;AAC5B,YAAI,EAAE,OAAO,QAAS,QAAO,GAAG,IAAI;AAAA,MACtC;AAAA,IACF;AACA,WAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AAAA,EACnD;AAEA,SAAO,OAAO,CAAC;AACjB;AAQA,IAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,WAAW;AACjB,QAAM,MAAM,SAAS;AACrB,MAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,EAAG,QAAO;AACxD,aAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,QAAI,QAAQ,aAAa,QAAQ,UAAU,QAAQ,UAAW,QAAO;AAAA,EACvE;AACA,QAAM,OAAO,SAAS;AACtB,MAAI,SAAS,WAAc,OAAO,SAAS,YAAY,KAAK,WAAW,GAAI,QAAO;AAClF,SAAO;AACT;AAEA,IAAM,mBAAmB,CAAC,UAA2B;AACnD,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI,OAAO,UAAU,SAAU,QAAO,MAAM,SAAS,IAAI,IAAI;AAC7D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,OAAO,CAAC,KAAK,MAAM,MAAM,iBAAiB,CAAC,GAAG,CAAC;AACtF,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,uBAAuB,KAAK,EAAG,QAAO;AAC1C,QAAI,MAAM;AACV,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAY,GAAG;AACjD,UAAI,MAAM,SAAU;AACpB,aAAO,iBAAiB,CAAC;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AA+BA,IAAM,SAAS,MAAM;AACnB,QAAM,OAAO,WAAW;AACxB,MAAI,QAAQ,OAAO,KAAK,QAAQ,YAAY;AAC1C,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACA,SAAO,MAAM,KAAK,IAAI;AACxB,GAAG;AAEH,IAAM,iBAAiB,CAAC,UACtB,UAAU,SAAS,UAAU,WAAW,UAAU,YAAY,UAAU;AAE1E,IAAM,0BAA0B,CAAC,SAAwC,mBAAmB,IAAI,KAAK,CAAC,OAAO;AAE7G,IAAM,gBAAgB,CAAC,GAA0B,MAAsC;AACrF,MAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,QAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAG,QAAO;AAAA,EAC5B;AACA,SAAO;AACT;AAEA,IAAM,sBAAsB,CAC1B,QACA,iBAC+F;AAC/F,QAAM,UAAU,QAAQ;AACxB,QAAM,aAAa,cAAc,OAAO,IAAK,UAAsC;AACnF,QAAM,MAAM,cAAc,OAAO,WAAW,SAAS,WAAW,WAAW,OAAO;AAElF,QAAM,WAAW,QAAQ,QAAQ,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO;AACxE,QAAM,OACJ,OAAO,IAAI,SAAS,IAChB,GAAG,QAAQ,IAAI,GAAG,KAClB,QAAQ,QAAQ,OAAO,KAAK,SAAS,IACnC,GAAG,QAAQ,IAAI,OAAO,IAAI,KAC1B;AAER,QAAM,QAAQ,YAAY;AAC1B,QAAM,KAAmB,eAAe,KAAK,IAAI,QAAQ;AAEzD,QAAM,UAAU,cAAc,OAAO,WAAW,SAAS,WAAW,WAAW,OAAO;AACtF,QAAM,OAAO,wBAAwB,WAAW,YAAY;AAE5D,SAAO,EAAE,MAAM,MAAM,GAAG;AAC1B;AAEA,IAAM,wBAAwB,CAAC,WAGJ;AACzB,MAAI,OAAO,QAAS,QAAO;AAC3B,MAAI,OAAO,WAAY,QAAO;AAC9B,SAAO;AACT;AAEA,IAAM,uBAAuB,CAC3B,SACA,gBACA,cACmC;AACnC,MAAI,cAAc,UAAW,QAAO;AACpC,MAAI,QAAQ,OAAO,MAAO,QAAO;AACjC,MAAI,CAAC,cAAc,QAAQ,MAAM,cAAc,EAAG,QAAO;AACzD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEA,IAAM,2BAA2B,CAC/B,MACA,aACwC;AACxC,MAAI,CAAC,cAAc,QAAQ,EAAG,QAAO;AACrC,QAAM,OAAgC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;AAC5D,aAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,UAAM,IAAI,oBAAoB,SAAS,GAAG,CAAC;AAC3C,QAAI,MAAM,OAAW;AACrB,QAAI,EAAE,OAAO,MAAO,MAAK,GAAG,IAAI;AAAA,EAClC;AACA,SAAO,OAAO,KAAK,IAAI,EAAE,SAAS,IAAI,OAAO;AAC/C;AAEA,IAAM,0BAA0B,CAAC,GAA4B,MAAwC;AACnG,QAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,QAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,MAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAC1C,aAAW,OAAO,OAAO;AACvB,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,GAAG,GAAG,EAAG,QAAO;AAC1D,QAAI,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,EAAG,QAAO;AAAA,EACzC;AACA,SAAO;AACT;AAEA,IAAM,0BAA0B,CAAC,MAAe,aAA4C;AAC1F,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO,CAAC;AAC/C,QAAM,OAAQ,KAAa;AAC3B,MAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC;AAElC,QAAM,SAAS,GAAG,QAAQ;AAC1B,QAAM,OAAsB,CAAC;AAC7B,aAAW,OAAO,MAAM;AACtB,QAAI,OAAO,QAAQ,SAAU;AAC7B,QAAI,IAAI,WAAW,MAAM,GAAG;AAC1B,YAAM,MAAM,IAAI,MAAM,OAAO,MAAM;AACnC,UAAI,IAAK,MAAK,KAAK,GAAG;AACtB;AAAA,IACF;AACA,QAAI,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,GAAG;AACpF,WAAK,KAAK,GAAG;AAAA,IACf;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK;AACxC;AAEA,IAAM,qBAAqB,CACzB,OACA,OACA,KACA,YAQuC;AACvC,QAAM,QAAQ,MAAM,KAAK;AACzB,QAAM,QAAQ,OAAO,KAAK,KAAK,EAAE,KAAK;AAEtC,MAAI,YAAiC;AACrC,MAAI,OAA+D;AACnE,MAAI,SAAgD;AACpD,MAAI,MAAM;AACV,MAAI,mBAAmB;AACvB,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,WAAW,IAAI,MAAM,YAAY,IAAI,MAAM;AACjD,QAAM,cAAc,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS;AAE1D,QAAM,YAAY,CAAC,iBAA+C;AAChE,QAAI,CAAC,KAAM,QAAO,CAAC;AACnB,QAAI,KAAK,SAAS,aAAa,OAAQ,MAAK,SAAS,aAAa;AAGlE,eAAW,OAAO,OAAO,KAAK,YAAmB,GAAG;AAClD,YAAM,QAAQ,OAAO,GAAG;AACxB,UAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,EAAG;AAC3C,YAAM,WAAY,aAAqB,KAAK;AAC5C,UAAI,aAAa,OAAW;AAC5B,YAAM,SAAS,yBAAyB,KAAK,KAAK,GAAG,QAAQ;AAC7D,WAAK,KAAK,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,oBAAoB,CACxB,gBACA,MACAC,cACA,cAMG;AACH,QAAI,KAAK,WAAW,KAAKA,gBAAe,GAAG;AACzC,aAAO,EAAE,cAAc,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,EAAE;AAAA,IACzE;AAEA,QAAI,eAAe;AACnB,QAAI,cAAc;AAClB,QAAI,WAAW;AACf,QAAI,eAAe;AAEnB,UAAM,cAAc,UAAU,SAAS,OAAO,YAAmB,GAAG,cAAc,OAAO;AACzF,UAAM,eACJ,eAAe,OAAO,gBAAgB,YAAY,CAAC,MAAM,QAAQ,WAAW,IAAK,cAAsB;AACzG,UAAM,WAAW,MAAM,QAAQ,WAAW,IAAI,cAAc;AAE5D,UAAM,UAAU,oBAAI,IAAY;AAChC,UAAM,WAAW,CAAC,MAAoB;AACpC,YAAM,IAAI,OAAO,CAAC;AAClB,UAAI,CAAC,OAAO,UAAU,CAAC,KAAK,IAAI,KAAK,KAAKA,aAAa;AACvD,cAAQ,IAAI,CAAC;AAAA,IACf;AAEA,QAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,iBAAW,KAAK,OAAO,KAAK,SAAgB,GAAG;AAC7C,cAAM,IAAK,UAAkB,CAAC;AAC9B,YAAI,MAAM,OAAW;AACrB,iBAAS,CAAC;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,iBAAW,KAAK,OAAO,KAAK,QAAe,GAAG;AAC5C,cAAM,IAAK,SAAiB,CAAC;AAC7B,YAAI,MAAM,OAAW;AACrB,iBAAS,CAAC;AAAA,MACZ;AAAA,IACF,WAAW,gBAAgB,OAAO,iBAAiB,UAAU;AAC3D,iBAAW,KAAK,OAAO,KAAK,YAAmB,GAAG;AAChD,cAAM,IAAK,aAAqB,CAAC;AACjC,YAAI,MAAM,OAAW;AACrB,iBAAS,CAAC;AAAA,MACZ;AAAA,IACF;AAEA,eAAW,SAAS,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG;AAC7D,YAAM,UAAU,WAAW,SAAS,KAAK,IAAI,eAAe,aAAa,KAAK,IAAI;AAClF,YAAM,UAAU,cAAc,OAAO,IAAK,UAAsC;AAChF,YAAM,QAAQ,YAAY,KAAK;AAC/B,YAAM,WAAW,cAAc,KAAK,IAAK,QAAoC;AAE7E,UAAI,UAAU;AACd,UAAI,UAAU;AACd,UAAI,aAAa;AAEjB,iBAAW,OAAO,MAAM;AACtB,cAAM,OAAO,oBAAoB,UAAU,GAAG,CAAC;AAC/C,cAAM,OAAO,oBAAoB,WAAW,GAAG,CAAC;AAChD,YAAI,SAAS,OAAW,WAAU;AAClC,YAAI,SAAS,OAAW,WAAU;AAClC,YAAI,OAAO,GAAG,MAAM,IAAI,EAAG;AAC3B,qBAAa;AACb,YAAI,SAAS,QAAW;AACtB,cAAI,SAAS,OAAW,iBAAgB;AAAA,QAC1C,OAAO;AACL,sBAAY;AAAA,QACd;AAAA,MACF;AAEA,UAAI,WAAW,QAAS,iBAAgB;AACxC,UAAI,WAAY,gBAAe;AAAA,IACjC;AAEA,WAAO,EAAE,cAAc,aAAa,UAAU,aAAa;AAAA,EAC7D;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,MAAM,IAAI;AACvB,UAAM,eAAe,SAAS,OAAO,YAAY,SAAS,OAAO;AACjE,UAAM,mBAAmB,SAAS,cAAc;AAChD,UAAM,YAAY,eAAe,MAAM,IAAI;AAC3C,QAAI;AACF,YAAM,MACJ,OAAO,SAAS,aACZ,KAAK,OAAO,GAAG,IACf,QAAQ,OAAO,SAAS,WACtB,KAAK,SAAS,OAAO,GAAG,IACxB;AAER,UAAI,QAAQ,UAAW;AACvB,YAAM;AAEN,YAAM,eAAe,wBAAwB,MAAM,QAAQ;AAE3D,iBAAW,OAAO,cAAc;AAC9B,oBAAY,IAAI,GAAG;AAAA,MACrB;AAEA,UAAI,cAAc;AAChB,cAAM,sBAAsB,QAAS,MAAO;AAE5C,cAAM,YAAgD,MAAM,QAAQ,GAAG,IACnE,MACA,cAAc,GAAG,KAAK,MAAM,QAAS,IAAY,IAAI,IACjD,IAAY,OACd;AAEN,cAAM,UAAU,kBAAkB,qBAAqB,cAAc,aAAa,SAAS;AAC3F,cAAM,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,SAAS;AAElD,YAAI,CAAC,OAAQ,UAAS,CAAC;AACvB,eAAO,KAAK;AAAA,UACV,QAAQ,GAAG,MAAM,SAAS,IAAI,IAAI;AAAA,UAClC,SAAS;AAAA,YACP;AAAA,YACA,cAAc,QAAQ;AAAA,YACtB,aAAa,QAAQ;AAAA,YACrB,UAAU,QAAQ;AAAA,YAClB,cAAc,QAAQ;AAAA,YACtB;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,WAAW,kBAAkB;AAC3B,YAAI,CAAC,OAAQ,UAAS,CAAC;AACvB,eAAO,KAAK;AAAA,UACV,QAAQ,GAAG,MAAM,SAAS,IAAI,IAAI;AAAA,UAClC,SAAS;AAAA,YACP;AAAA,YACA,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,QAAQ,OAAW;AAEvB,UAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,kBAAU,GAAG;AACb;AAAA,MACF;AAEA,UAAI,cAAc,GAAG,GAAG;AACtB,cAAM,YAAa,IAAY;AAC/B,cAAM,aAAa,OAAO,UAAU,eAAe,KAAK,KAAK,OAAO;AACpE,YAAI,WAAY,oBAAmB;AACnC,cAAM,iBAAiB,oBAAqB,IAAY,KAAK;AAC7D,YAAI,mBAAmB,UAAa,cAAc,QAAW;AAC3D,sBAAY;AAAA,QACd;AACA,YAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,oBAAU,SAAS;AAAA,QACrB,WAAW,CAAC,cAAc,mBAAmB,QAAW;AAEtD,gBAAMC,KAAI,oBAAoB,GAAG;AACjC,cAAIA,OAAM,UAAa,cAAc,OAAW,aAAYA;AAC5D,6BAAmB;AAAA,QACrB;AACA;AAAA,MACF;AAGA,YAAM,IAAI,oBAAoB,GAAG;AACjC,UAAI,MAAM,UAAa,cAAc,OAAW,aAAY;AAC5D,yBAAmB;AAAA,IACrB,QAAQ;AAAA,IAGR;AAAA,EACF;AAEA,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB,CAAC,SAAyB;AAC9C,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,WAAW,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC/C,QAAM,MAAqB,CAAC;AAE5B,aAAW,OAAO,UAAU;AAC1B,QAAI,WAAW,KAAK,GAAG,GAAG;AACxB,UAAI,IAAI,WAAW,EAAG;AACtB,YAAM,OAAO,IAAI,IAAI,SAAS,CAAC;AAC/B,UAAI,CAAC,KAAK,SAAS,IAAI,EAAG,KAAI,IAAI,SAAS,CAAC,IAAI,GAAG,IAAI;AACvD;AAAA,IACF;AACA,QAAI,KAAK,GAAG;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,GAAG;AACrB;AAEA,IAAM,iBAAiB,CAAC,WAAkD;AACxE,MAAI,OAAO,SAAS,QAAQ;AAC1B,WAAO,CAAC;AAAA,EACV;AACA,MAAI,OAAO,SAAS,SAAS;AAC3B,WAAO,CAAC,cAAc,OAAO,IAAI,CAAC;AAAA,EACpC;AACA,MAAI,OAAO,SAAS,QAAQ;AAE1B,WAAO,CAAC,OAAO,MAAM,GAAG,OAAO,IAAI,IAAI;AAAA,EACzC;AAEA,QAAM,OAAO,GAAG,OAAO,IAAI;AAC3B,QAAM,QAAQ,OAAO,QAAQ,cAAc,OAAO,KAAK,IAAI;AAC3D,SAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI;AAC3C;AAEA,IAAM,yBAAyB,CAAC,kBAA4E;AAC1G,MAAI,CAAC,MAAM,QAAQ,aAAa,KAAK,cAAc,WAAW,EAAG,QAAO,CAAC;AACzE,QAAM,MAAqB,CAAC;AAC5B,aAAW,KAAK,eAAe;AAC7B,QAAI,CAAC,OAAO,UAAU,CAAC,KAAK,IAAI,EAAG;AACnC,QAAI,KAAK,CAAC;AAAA,EACZ;AACA,SAAO;AACT;AAEA,IAAMC,qBAAoB,CAAC,UAAkB,kBAA6D;AACxG,QAAM,IAAI,uBAAuB,aAAa;AAC9C,SAAO,EAAE,WAAW,IAAI,GAAG,QAAQ,OAAO,GAAG,QAAQ,KAAK,EAAE,KAAK,GAAG,CAAC;AACvE;AAEA,IAAM,4CAA4C,CAChD,aAIG;AACH,QAAM,gBAAgB,oBAAI,IAAyB;AACnD,QAAM,yBAAyB,oBAAI,IAAmC;AAEtE,QAAM,0BAA0B,CAAC,UAAkB,kBAA6D;AAC9G,UAAM,aAAa,uBAAuB,aAAa;AACvD,UAAM,MAAMA,mBAAkB,UAAU,UAAU;AAClD,QAAI,CAAC,uBAAuB,IAAI,GAAG,GAAG;AACpC,6BAAuB,IAAI,KAAK,UAAU;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,CAAC,UAAkB,eAAkD,UAAwB;AACnH,QAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,EAAG;AAC3C,UAAM,MAAM,wBAAwB,UAAU,aAAa;AAC3D,UAAM,MAAM,cAAc,IAAI,GAAG,KAAK,oBAAI,IAAY;AACtD,QAAI,IAAI,KAAK;AACb,kBAAc,IAAI,KAAK,GAAG;AAAA,EAC5B;AAEA,aAAW,OAAO,UAAU;AAC1B,UAAM,SAAS,IAAI;AACnB,QAAI,OAAO,SAAS,QAAQ;AAC1B,sBAAgB,OAAO,MAAM,OAAO,eAAe,OAAO,KAAK;AAC/D;AAAA,IACF;AACA,QAAI,OAAO,SAAS,QAAQ;AAE1B,8BAAwB,OAAO,MAAM,OAAO,aAAa;AACzD;AAAA,IACF;AACA,QAAI,OAAO,SAAS,SAAS;AAG3B,YAAM,WAAW,OAAO,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AACtD,YAAM,mBAAkC,CAAC;AACzC,YAAM,gBAA+B,CAAC;AACtC,iBAAW,OAAO,UAAU;AAC1B,YAAI,WAAW,KAAK,GAAG,GAAG;AACxB,cAAI,iBAAiB,WAAW,EAAG;AACnC,gBAAM,MAAM,OAAO,GAAG;AACtB,cAAI,CAAC,OAAO,SAAS,GAAG,KAAK,MAAM,EAAG;AACtC,gBAAM,IAAI,KAAK,MAAM,GAAG;AACxB,0BAAgB,iBAAiB,KAAK,GAAG,GAAG,eAAe,CAAC;AAE5D,wBAAc,KAAK,CAAC;AACpB;AAAA,QACF;AACA,yBAAiB,KAAK,GAAG;AAAA,MAC3B;AACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,wBAAwB,oBAAI,IAAiC;AACnE,aAAW,CAAC,GAAG,GAAG,KAAK,cAAe,uBAAsB,IAAI,GAAG,GAAG;AAEtE,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,CAC1B,aAIG;AACH,QAAM,MAAM,oBAAI,IAAY;AAC5B,QAAM,YAAY,oBAAI,IAAY;AAClC,aAAW,OAAO,UAAU;AAC1B,QAAI,IAAI,OAAO,SAAS,OAAQ;AAChC,QAAI,CAAC,IAAI,OAAO,KAAM;AACtB,QAAI,IAAI,OAAO,iBAAiB,IAAI,OAAO,cAAc,SAAS,GAAG;AACnE,gBAAU,IAAIA,mBAAkB,IAAI,OAAO,MAAM,IAAI,OAAO,aAAa,CAAC;AAC1E;AAAA,IACF;AACA,QAAI,IAAI,IAAI,OAAO,IAAI;AAAA,EACzB;AACA,SAAO,EAAE,KAAK,UAAU;AAC1B;AAEA,IAAM,cAAc,CAAC,aAAiE;AACpF,QAAM,aAA2C;AAAA,IAC/C,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AACA,MAAI,OAAqB;AACzB,MAAI,QAAQ,WAAW,IAAI;AAC3B,aAAW,KAAK,UAAU;AACxB,UAAM,IAAI,WAAW,EAAE,IAAI;AAC3B,QAAI,IAAI,OAAO;AACb,cAAQ;AACR,aAAO,EAAE;AAAA,IACX;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,YAAY,CAChB,OACA,OACA,QACY;AACZ,QAAM,QAAQ,MAAM,KAAK;AACzB,QAAM,QAAQ,OAAO,KAAK,KAAK,EAAE,KAAK;AACtC,QAAM,UAA0B,CAAC;AACjC,MAAI,MAAM;AAEV,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,MAAM,IAAI;AACvB,QAAI;AACF,YAAM,MACJ,OAAO,SAAS,aACZ,KAAK,OAAO,GAAG,IACf,QAAQ,OAAO,SAAS,WACtB,KAAK,SAAS,OAAO,GAAG,IACxB;AACR,UAAI,QAAQ,UAAW;AACvB,YAAM;AACN,YAAM,aAAa,oBAAoB,GAAG;AAC1C,UAAI,eAAe,OAAW,SAAQ,KAAK,UAAU;AAAA,IACvD,QAAQ;AAAA,IAGR;AAAA,EACF;AAEA,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,gBAAgB,OAAO;AAChC;AAeO,IAAM,wBAAwB,CACnC,SACA,KACA,aAEAC,QAAO,IAAI,aAAa;AACtB,QAAM,mBAAmB,OAAOA,QAAO,QAAc,uBAAuB,EAAE,KAAKA,QAAO,KAAK;AAC/F,QAAM,cAAc,qBAAqB;AACzC,QAAM,oBAAoB,qBAAqB,UAAU,qBAAqB;AAC9E,QAAM,kBAAkB,qBAAqB;AAC7C,QAAM,cAA8C,cAAc,CAAC,IAAI;AAEvE,SAAOA,QAAO,KAAK,MAAM;AACvB,QAAI,SAAS,WAAW,EAAG;AAE3B,UAAM,SAAS,QAAQ,QAAQ;AAAA,MAC7B,CAAC,MAA+E,EAAU,SAAS;AAAA,IACrG;AACA,QAAI,OAAO,WAAW,EAAG;AAEzB,UAAM,UAAU,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,MAAM;AAC7D,UAAM,QAAQ,IAAI,SAAS;AAG3B,UAAM,oBAAoB,MAAM;AAC9B,UAAI,SAAS;AACX,eAAO,IAAI,IAAY,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,MACvD;AACA,YAAM,QAAQ,qBAAqB,OAAO;AAC1C,YAAM,MAAM,oBAAI,IAAY;AAC5B,iBAAW,OAAO,UAAU;AAC1B,mBAAW,KAAK,eAAe,IAAI,MAAM,GAAG;AAC1C,qBAAW,QAAQ,eAAe,OAAO,CAAC,GAAG;AAC3C,gBAAI,IAAI,IAAI;AAAA,UACd;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,GAAG;AAEH,UAAM,iBAAiB,OAAO,OAAO,CAAC,MAAM,iBAAiB,IAAI,EAAE,SAAS,CAAC;AAC7E,QAAI,eAAe,WAAW,EAAG;AAEjC,UAAM,OAAO,YAAY,QAAQ;AAEjC,QAAI,eAAe,aAAa;AAC9B,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,UAAU,IAAI;AAAA,QACd,YAAY,IAAI;AAAA,QAChB,QAAQ,IAAI;AAAA,QACZ,OAAO,IAAI;AAAA,QACX,MAAM;AAAA,UACJ;AAAA,UACA,cAAc,SAAS;AAAA,UACvB,oBAAoB,eAAe;AAAA,UACnC;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAIA,UAAM,YAAY,0CAA0C,QAAQ;AACpE,UAAM,gBAAgB,UAAU;AAChC,UAAM,yBAAyB,UAAU;AAEzC,UAAM,eAAe,oBAAoB,QAAQ;AACjD,UAAM,kBAAkB,aAAa;AACrC,UAAM,wBAAwB,aAAa;AAE3C,UAAM,UAA8B,CAAC;AAErC,UAAM,oBAAoB,MAAM;AAC9B,YAAM,MAAM,oBAAI,IAA8B;AAC9C,YAAM,UAAU,IAAI,eAAe,CAAC;AACpC,iBAAW,OAAO,SAAS;AACzB,YAAI,CAAC,OAAO,OAAQ,IAAY,SAAS,SAAU;AACnD,YAAI,IAAK,IAAY,MAAM,GAAU;AAAA,MACvC;AACA,aAAO;AAAA,IACT,GAAG;AAEH,UAAM,cAAc,CAAC,MAAe,YAA6B;AAC/D,UAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,YAAM,WAAW,QAAQ,MAAM,GAAG;AAClC,UAAI,UAAe;AACnB,iBAAW,OAAO,UAAU;AAC1B,YAAI,WAAW,KAAM,QAAO;AAC5B,kBAAU,QAAQ,GAAU;AAAA,MAC9B;AACA,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,CAAC,WAAmB,UACrC,UAAU,SAAY,SAAS,SAAS,KAAK,SAAS,SAAS,IAAI,KAAK;AAa1E,UAAM,YAAY,MAAM,KAAK,iBAAiB,KAAK,CAAC;AACpD,UAAM,cAAc,IAAI,IAAI,SAAS;AAErC,UAAM,WAAW,CAAC,SAAqC;AACrD,YAAM,WAAW,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC/C,UAAI;AACJ,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAM,SAAS,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAC5C,YAAI,YAAY,IAAI,MAAM,EAAG,QAAO;AAAA,MACtC;AACA,aAAO;AAAA,IACT;AAEA,UAAM,eAAe,oBAAI,IAAgC;AACzD,UAAM,eAAe,oBAAI,IAAoB;AAC7C,eAAW,QAAQ,WAAW;AAC5B,YAAM,SAAS,SAAS,IAAI;AAC5B,mBAAa,IAAI,MAAM,MAAM;AAC7B,YAAM,SAAS,SAAS,KAAK,MAAM,OAAO,SAAS,CAAC,IAAI;AACxD,mBAAa,IAAI,MAAM,MAAM;AAAA,IAC/B;AAEA,UAAM,6BAA6B,CACjC,UACA,kBACsC;AACtC,YAAM,aAAa,uBAAuB,aAAa;AACvD,UAAI,WAAW;AACf,UAAI,IAAI,aAAa,IAAI,QAAQ;AACjC,aAAO,GAAG;AACR,oBAAY;AACZ,YAAI,aAAa,IAAI,CAAC;AAAA,MACxB;AACA,UAAI,aAAa,EAAG,QAAO,CAAC;AAC5B,UAAI,WAAW,WAAW,SAAU,QAAO;AAC3C,aAAO;AAAA,IACT;AAEA,UAAM,mBAAmB,oBAAI,IAAyB;AAEtD,UAAM,iBAAiB,CAAC,UAAkB,kBAAkE;AAC1G,YAAM,SAAS,aAAa,IAAI,QAAQ;AACxC,YAAM,WAAW,SAAS,GAAG,QAAQ,MAAM,cAAc,KAAK,GAAG,CAAC,KAAK,GAAG,QAAQ;AAElF,YAAM,SAAS,iBAAiB,IAAI,QAAQ;AAC5C,UAAI,OAAQ,QAAO;AAEnB,YAAM,UAAU,iBAAiB,IAAI,QAAQ;AAC7C,YAAM,UACJ,WAAW,OAAQ,QAAgB,YAAY,WAAa,QAAgB,UAAqB;AAEnG,UAAI,CAAC,QAAQ;AACX,cAAMC,aAAY,UAAU,OAAO,QAAQ;AAC3C,cAAMC,SAAgC,MAAM,QAAQD,UAAS,IAAIA,aAAY,CAAC;AAG9E,cAAME,iBACJ,IAAI,cAAc,CAAC,UAAU,IAAI,WAAW,WAAW,UAAUD,QAAO,OAAO,IAAI;AACrF,cAAME,WAAU,CAAC,UAA0B;AACzC,cAAI,QAAQ,KAAK,SAASF,OAAM,OAAQ,QAAO,OAAO,KAAK;AAC3D,gBAAM,OAAOA,OAAM,KAAK;AACxB,cAAI,SAAS;AACX,kBAAM,IAAI,YAAY,MAAM,OAAO;AACnC,gBAAI,MAAM,OAAW,QAAO,OAAO,CAAC;AAAA,UACtC;AACA,gBAAM,cAAcC,iBAAgB,KAAK;AACzC,cAAI,OAAO,gBAAgB,YAAY,YAAY,SAAS,EAAG,QAAO;AACtE,gBAAM,YAAY,IAAI,YAAY,SAAS,UAAU,KAAK;AAC1D,cAAI,OAAO,cAAc,YAAY,UAAU,SAAS,EAAG,QAAO;AAClE,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,cAAME,OAAmB;AAAA,UACvB;AAAA,UACA,eAAe,CAAC;AAAA,UAChB,WAAW;AAAA,UACX,eAAe,UAAU,QAAQ;AAAA,UACjC,OAAAH;AAAA,UACA;AAAA,UACA,SAAAE;AAAA,QACF;AACA,yBAAiB,IAAI,UAAUC,IAAG;AAClC,eAAOA;AAAA,MACT;AAEA,UAAI,cAAc,WAAW,EAAG,QAAO;AACvC,YAAM,kBAAkB,cAAc,MAAM,GAAG,EAAE;AACjD,YAAM,cAAc,cAAc,cAAc,SAAS,CAAC;AAC1D,YAAM,gBAAgB,eAAe,QAAQ,eAAe;AAC5D,UAAI,CAAC,cAAe,QAAO;AAC3B,UAAI,cAAc,KAAK,eAAe,cAAc,MAAM,OAAQ,QAAO;AAEzE,YAAM,SAAS,aAAa,IAAI,QAAQ,KAAK;AAC7C,UAAI,CAAC,OAAQ,QAAO;AAEpB,YAAM,YAAY,GAAG,cAAc,SAAS,IAAI,WAAW,IAAI,MAAM;AACrE,YAAM,gBAAgB,GAAG,cAAc,aAAa,SAAS,WAAW,IAAI,MAAM;AAElF,YAAM,YAAY,UAAU,OAAO,SAAS;AAC5C,YAAM,QAAgC,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC;AAE9E,YAAM,eACH,cAAc,UAAW,cAAc,QAAQ,WAAW,IAAY,YACtE,IAAI,aAAa,IAAI,WAAW,SAAS,QAAQ,aAAa,cAAc,WAAW,IAAI;AAG9F,YAAM,gBACJ,IAAI,cAAc,CAAC,UAAU,IAAI,WAAW,WAAW,UAAU,OAAO,SAAS,WAAW,IAAI;AAClG,YAAM,UAAU,CAAC,UAA0B;AACzC,YAAI,QAAQ,KAAK,SAAS,MAAM,OAAQ,QAAO,OAAO,KAAK;AAC3D,cAAM,OAAO,MAAM,KAAK;AACxB,YAAI,SAAS;AACX,gBAAM,IAAI,YAAY,MAAM,OAAO;AACnC,cAAI,MAAM,OAAW,QAAO,OAAO,CAAC;AAAA,QACtC;AACA,cAAM,cAAc,gBAAgB,KAAK;AACzC,YAAI,OAAO,gBAAgB,YAAY,YAAY,SAAS,EAAG,QAAO;AACtE,cAAM,YAAY,IAAI,YAAY,SAAS,UAAU,OAAO,WAAW;AACvE,YAAI,OAAO,cAAc,YAAY,UAAU,SAAS,EAAG,QAAO;AAClE,eAAO,OAAO,KAAK;AAAA,MACrB;AAEA,YAAM,MAAmB;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,uBAAiB,IAAI,UAAU,GAAG;AAClC,aAAO;AAAA,IACT;AAEA,UAAM,4BAA4B,CAAC,aAAiD;AAClF,YAAM,SAAS,aAAa,IAAI,QAAQ;AACxC,UAAI,CAAC,QAAQ;AACX,cAAM,KAAK,eAAe,UAAU,CAAC,CAAC;AACtC,eAAO,KAAK,CAAC,EAAE,IAAI,CAAC;AAAA,MACtB;AAEA,YAAM,kBAAkB,0BAA0B,MAAM;AACxD,YAAM,MAA0B,CAAC;AACjC,iBAAW,KAAK,iBAAiB;AAC/B,iBAAS,IAAI,GAAG,IAAI,EAAE,MAAM,QAAQ,KAAK;AACvC,gBAAM,iBAAiB,CAAC,GAAG,EAAE,eAAe,CAAC;AAC7C,gBAAM,KAAK,eAAe,UAAU,cAAc;AAClD,cAAI,GAAI,KAAI,KAAK,EAAE;AAAA,QACrB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAeA,UAAM,YAAY,oBAAI,IAAsB;AAE5C,UAAM,8BAA8B,uBAAO,IAAI,qDAAqD;AACpG,UAAM,sBAAsB,CAC1B,MACA,OACA,QACA,UAAwD,gCAC3C;AACb,YAAM,YAAY,GAAG,KAAK,aAAa,SAAS,KAAK;AACrD,YAAM,WAAW,UAAU,IAAI,SAAS;AACxC,UAAI,SAAU,QAAO;AAErB,YAAM,OAAO,YAAY,8BAA8B,UAAU,OAAO,SAAS,IAAI;AACrF,YAAM,OAAgC,cAAc,IAAI,IAAI,EAAE,GAAI,KAAa,IAAI,CAAC;AAEpF,YAAM,MAAgB;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,eAAe,KAAK;AAAA,QACpB,aAAa,KAAK;AAAA,QAClB;AAAA,QACA,eAAe,KAAK;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,MACX;AACA,gBAAU,IAAI,WAAW,GAAG;AAC5B,aAAO;AAAA,IACT;AAEA,UAAM,sBAAsB,CAC1B,KACA,cACA,aACS;AACT,UAAI,aAAa,SAAS,EAAG;AAE7B,YAAM,YAAY,WAAW,OAAO,KAAK,QAAQ,IAAI,CAAC;AACtD,YAAM,eAAe,OAAO,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,MAAM,MAAM,QAAQ;AAEvE,YAAM,cAAc,oBAAI,IAAY;AACpC,iBAAW,OAAO,cAAc;AAC9B,YAAI,aAAa,IAAI,GAAG,EAAG,aAAY,IAAI,GAAG;AAAA,MAChD;AACA,iBAAW,OAAO,WAAW;AAC3B,YAAI,aAAa,IAAI,GAAG,EAAG,aAAY,IAAI,GAAG;AAAA,MAChD;AAEA,UAAI,YAAY,SAAS,EAAG;AAE5B,iBAAW,OAAO,aAAa;AAC7B,cAAM,IAAI,oBAAoB,WAAW,GAAG,CAAC;AAC7C,YAAI,MAAM,QAAW;AACnB,iBAAO,IAAI,KAAK,GAAG;AAAA,QACrB,OAAO;AACL,cAAI,KAAK,GAAG,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAEA,eAAW,SAAS,gBAAgB;AAClC,YAAM,iBAAiB,MAAM;AAG7B,YAAM,UAAU,iBAAiB,IAAI,cAAc;AACnD,UAAI,SAAS;AACX,cAAM,WAAW;AACjB,cAAM,iBAAiB,MAAM;AAC3B,cAAI,QAAS,QAAO,0BAA0B,QAAQ;AACtD,cAAI,gBAAgB,IAAI,QAAQ,EAAG,QAAO,0BAA0B,QAAQ;AAE5E,gBAAM,OAAO,oBAAI,IAAY;AAC7B,qBAAW,KAAK,uBAAuB;AACrC,gBAAI,EAAE,WAAW,GAAG,QAAQ,IAAI,EAAG,MAAK,IAAI,CAAC;AAAA,UAC/C;AACA,qBAAW,KAAK,cAAc,KAAK,GAAG;AACpC,gBAAI,EAAE,WAAW,GAAG,QAAQ,IAAI,EAAG,MAAK,IAAI,CAAC;AAAA,UAC/C;AAEA,cAAI,KAAK,SAAS,EAAG,QAAO,0BAA0B,QAAQ;AAE9D,gBAAM,MAA0B,CAAC;AACjC,qBAAW,KAAK,MAAM;AACpB,kBAAM,YAAY,uBAAuB,IAAI,CAAC;AAC9C,kBAAM,aAAa,2BAA2B,UAAU,SAAS;AACjE,gBAAI,CAAC,WAAY;AACjB,kBAAM,KAAK,eAAe,UAAU,UAAU;AAC9C,gBAAI,GAAI,KAAI,KAAK,EAAE;AAAA,UACrB;AACA,iBAAO;AAAA,QACT,GAAG;AAEH,mBAAW,eAAe,eAAe;AACvC,gBAAM,QAAQ,YAAY;AAE1B,gBAAM,cAAcN,mBAAkB,UAAU,YAAY,aAAa;AAMxE,gBAAM,kBAAqD,MAAM;AAC/D,gBAAI,QAAS,QAAO;AAGpB,gBAAI,CAAC,gBAAgB,IAAI,QAAQ,KAAK,CAAC,sBAAsB,IAAI,WAAW,GAAG;AAC7E,oBAAMO,OAAM,cAAc,IAAI,WAAW;AACzC,kBAAI,CAACA,QAAOA,KAAI,SAAS,EAAG,QAAO;AACnC,qBAAO,MAAM,KAAKA,IAAG,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,YAC7C;AAGA,kBAAM,KAAK,IAAI;AACf,kBAAM,SAAS,IAAI;AACnB,gBAAI,CAAC,MAAM,GAAG,YAAY,CAAC,OAAQ,QAAO;AAC1C,gBAAI,OAAO,YAAY,IAAI,WAAW,EAAG,QAAO;AAChD,kBAAM,MAAM,OAAO,cAAc,IAAI,WAAW;AAChD,gBAAI,CAAC,OAAO,IAAI,SAAS,EAAG,QAAO;AACnC,mBAAO,MAAM,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,UAC7C,GAAG;AAEJ,gBAAM,UAAU,cAAc,oBAAoB,IAAI,QAAQ,QAAQ,IAAI;AAE1E,gBAAM,yBAAyB,cAAc,wBAAwB,QAAQ,IAAI;AAEjF,gBAAM,YAAY,cACd,sBAAsB;AAAA,YACpB,SAAS,YAAY;AAAA,YACrB,YAAY,IAAI;AAAA,UAClB,CAAC,IACD;AAEJ,gBAAM,WACJ,eAAe,WAAW,0BAA0B,YAChD,qBAAqB,SAAS,wBAAwB,SAAS,IAC/D;AAEN,gBAAM,OAAO;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,cACE;AAAA,cACA,OAAO;AAAA,cACP,OAAO;AAAA,gBACL,WAAW;AAAA,gBACX;AAAA,gBACA,eAAe,YAAY;AAAA,gBAC3B,SAAS,YAAY;AAAA,gBACrB;AAAA,cACF;AAAA,YACF;AAAA,YACA,oBACI;AAAA,cACE,OAAO,EAAE,UAAU,gBAAgB,YAAY,eAAe,YAAY,MAAM;AAAA,YAClF,IACA,kBACE,EAAE,WAAW,KAAK,IACpB;AAAA,UACN;AACA,cAAI,SAAS,UAAW;AACxB,gBAAM,eAAe,KAAK;AAE1B,cACE,eACA,eACA,WACA,0BACA,aACA,KAAK,UACL,KAAK,OAAO,SAAS,GACrB;AACA,uBAAW,KAAK,KAAK,QAAQ;AAC3B,oBAAM,OAAY;AAAA,gBAChB,QAAQ,EAAE;AAAA,gBACV,gBAAgB;AAAA,gBAChB;AAAA,gBACA;AAAA,gBACA,SAAS,EAAE;AAAA,gBACX;AAAA,cACF;AACA,kBAAI,UAAU;AACZ,qBAAK,WAAW;AAAA,cAClB;AACA,0BAAY,KAAK;AAAA,gBACf,MAAM;AAAA,gBACN,UAAU,IAAI;AAAA,gBACd,YAAY,IAAI;AAAA,gBAChB,QAAQ,IAAI;AAAA,gBACZ,OAAO,IAAI;AAAA,gBACX;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAEA,gBAAM,gBAAgB,GAAG,YAAY,aAAa;AAClD,gBAAM,gBAAgB,UAAU,OAAO,aAAa;AACpD,gBAAM,gBAAgB,oBAAoB,KAAK,SAAS;AAExD,cAAI,KAAK,oBAAoB,CAAC,OAAO,GAAG,eAAe,aAAa,GAAG;AACrE,oBAAQ,KAAK;AAAA,cACX,WAAW;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,QAAQ,WAAW,cAAc;AAAA,YACnC,CAAC;AAAA,UACH;AAEA,gBAAM,OAAO,KAAK,QAAQ,CAAC;AAC3B,gBAAM,cAAc,UAAU,OAAO,GAAG,YAAY,aAAa,OAAO;AACxE,gBAAM,WACJ,eAAe,OAAO,gBAAgB,YAAY,CAAC,MAAM,QAAQ,WAAW,IACvE,cACD,MAAM,QAAQ,WAAW,IACvB,cACA;AAER,gBAAM,kBAAkB,CAAC,KAA8B,SAAuC;AAC5F,uBAAW,KAAK,KAAK;AACnB,kBAAI,CAAC,OAAO,UAAU,eAAe,KAAK,KAAK,CAAC,EAAG;AACnD,kBAAI,MAAM,SAAU;AACpB,kBAAI,KAAK,IAAI,CAAC,EAAG,QAAO;AAAA,YAC1B;AACA,mBAAO;AAAA,UACT;AAEA,gBAAM,cAAc,CAAC,QAA0C;AAC7D,gBAAI,WAAW;AACf,uBAAW,KAAK,KAAK;AACnB,kBAAI,CAAC,OAAO,UAAU,eAAe,KAAK,KAAK,CAAC,EAAG;AACnD,kBAAI,MAAM,UAAU;AAClB,2BAAW;AACX;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AAEA,gBAAM,iBAAiB,GAAG,YAAY,aAAa;AAEnD,gBAAM,kBAAkB,MAAM;AAC5B,kBAAM,MAAM,oBAAI,IAAY;AAC5B,kBAAM,WAAW,CAAC,MAAoB;AACpC,oBAAM,IAAI,OAAO,CAAC;AAClB,kBAAI,CAAC,OAAO,UAAU,CAAC,KAAK,IAAI,EAAG;AACnC,kBAAI,IAAI,CAAC;AAAA,YACX;AAGA,gBAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,yBAAW,KAAK,OAAO,KAAK,IAAW,GAAG;AACxC,sBAAM,IAAK,KAAa,CAAC;AACzB,oBAAI,MAAM,OAAW;AACrB,yBAAS,CAAC;AAAA,cACZ;AAAA,YACF;AAGA,gBAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,yBAAW,KAAK,OAAO,KAAK,QAAe,GAAG;AAC5C,sBAAM,IAAK,SAAiB,CAAC;AAC7B,oBAAI,MAAM,OAAW;AACrB,yBAAS,CAAC;AAAA,cACZ;AAAA,YACF;AAEA,mBAAO,MAAM,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,UAC7C,GAAG;AAEH,qBAAW,SAAS,gBAAgB;AAClC,kBAAM,eAAe,GAAG,cAAc,GAAG,KAAK;AAC9C,kBAAM,WAAW,UAAU,IAAI,YAAY;AAE3C,gBAAI,SAAS,MAAM,QAAQ;AACzB,oBAAMC,WACJ,UAAU,SAAS,WAAY,SAAiB,KAAK,IAAI,UAAU,OAAO,YAAY;AACxF,kBAAIA,aAAY,UAAa,CAAC,SAAU;AACxC,oBAAM,MACJ,YACA,oBAAoB,aAAa,OAAO,WAAW,gBAAgB,KAAK,GAAGA,QAAO;AACpF,kBAAI,UAAU;AACd,yBAAW,OAAO,OAAO,KAAK,IAAI,IAAI,GAAG;AACvC,uBAAO,IAAI,KAAK,GAAG;AAAA,cACrB;AACA;AAAA,YACF;AAEA,kBAAM,QAAS,KAAa,KAAK;AACjC,kBAAM,WAAW,cAAc,KAAK,IAAI,QAAQ;AAEhD,gBAAI,UAAU;AACZ,kCAAoB,UAAU,cAAc,QAAQ;AACpD;AAAA,YACF;AAEA,kBAAM,mBAAmB,YAAY,gBAAgB,UAAiB,YAAY;AAClF,kBAAM,UAAU,WAAY,SAAiB,KAAK,IAAI,UAAU,OAAO,YAAY;AACnF,kBAAM,UAAU,cAAc,OAAO,IAAK,UAAsC;AAChF,kBAAM,kBAAkB,UAAU,gBAAgB,SAAS,YAAY,IAAI;AAC3E,kBAAM,gBAAgB,UAAU,YAAY,OAAO,IAAI;AAEvD,gBAAI,oBAAoB,mBAAmB,eAAe;AACxD,oBAAM,MAAM,oBAAoB,aAAa,OAAO,WAAW,gBAAgB,KAAK,GAAG,OAAO;AAC9F,kCAAoB,KAAK,cAAc,mBAAoB,WAAmB,MAAS;AAAA,YACzF;AAAA,UACF;AAEA;AAAA,QACF;AAEA;AAAA,MACF;AAGA,UAAI,eAAe,SAAS,IAAI,GAAG;AACjC,cAAM,WAAW,eAAe,MAAM,GAAG,EAAE;AAE3C,cAAM,iBAAiB,MAAM;AAC3B,cAAI,QAAS,QAAO,0BAA0B,QAAQ;AACtD,cAAI,gBAAgB,IAAI,QAAQ,EAAG,QAAO,0BAA0B,QAAQ;AAE5E,gBAAM,OAAO,oBAAI,IAAY;AAC7B,qBAAW,KAAK,uBAAuB;AACrC,gBAAI,EAAE,WAAW,GAAG,QAAQ,IAAI,EAAG,MAAK,IAAI,CAAC;AAAA,UAC/C;AACA,qBAAW,KAAK,cAAc,KAAK,GAAG;AACpC,gBAAI,EAAE,WAAW,GAAG,QAAQ,IAAI,EAAG,MAAK,IAAI,CAAC;AAAA,UAC/C;AAEA,cAAI,KAAK,SAAS,EAAG,QAAO,0BAA0B,QAAQ;AAE9D,gBAAM,MAA0B,CAAC;AACjC,qBAAW,KAAK,MAAM;AACpB,kBAAM,YAAY,uBAAuB,IAAI,CAAC;AAC9C,kBAAM,aAAa,2BAA2B,UAAU,SAAS;AACjE,gBAAI,CAAC,WAAY;AACjB,kBAAM,KAAK,eAAe,UAAU,UAAU;AAC9C,gBAAI,GAAI,KAAI,KAAK,EAAE;AAAA,UACrB;AACA,iBAAO;AAAA,QACT,GAAG;AAEH,cAAM,QAAQ,MAAM,KAAK;AACzB,cAAM,QAAQ,OAAO,KAAK,KAAK,EAAE,KAAK;AAErC,mBAAW,eAAe,eAAe;AACvC,gBAAM,cAAcR,mBAAkB,UAAU,YAAY,aAAa;AACzE,gBAAM,WAAkC,MAAM;AAC5C,gBAAI,QAAS,QAAO,YAAY,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC;AAGrD,gBAAI,CAAC,gBAAgB,IAAI,QAAQ,KAAK,CAAC,sBAAsB,IAAI,WAAW,GAAG;AAC7E,qBAAO,MAAM,KAAK,cAAc,IAAI,WAAW,KAAK,CAAC,CAAC;AAAA,YACxD;AAGA,kBAAM,KAAK,IAAI;AACf,kBAAM,SAAS,IAAI;AACnB,gBAAI,CAAC,MAAM,GAAG,YAAY,CAAC,OAAQ,QAAO,YAAY,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC;AAC3E,gBAAI,OAAO,YAAY,IAAI,WAAW,EAAG,QAAO,YAAY,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC;AACjF,kBAAM,MAAM,OAAO,cAAc,IAAI,WAAW;AAChD,gBAAI,CAAC,OAAO,IAAI,SAAS,EAAG,QAAO,CAAC;AACpC,mBAAO,MAAM,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,UAC7C,GAAG;AAEH,cAAI,QAAQ,WAAW,EAAG;AAE3B,qBAAW,SAAS,SAAS;AAC3B,gBAAI,QAAQ,KAAK,SAAS,YAAY,MAAM,OAAQ;AAEpD,kBAAM,iBAAiB,GAAG,YAAY,SAAS,IAAI,KAAK;AACxD,kBAAMS,SAAQ,UAAU,OAAO,cAAc;AAE7C,kBAAM,eAAe,GAAG,YAAY,aAAa,SAAS,KAAK;AAC/D,kBAAM,UAAU,UAAU,OAAO,YAAY;AAC7C,kBAAM,UAAU,cAAc,OAAO,IAAK,UAAsC;AAChF,kBAAM,gBACJ,cAAc,OAAO,KAAK,OAAO,KAAK,OAAO,EAAE,WAAW,KAAK,OAAO,KAAK,OAAO,EAAE,CAAC,MAAM;AAE7F,gBAAI,WAAiC;AACrC,gBAAI,aAAsC;AAE1C,kBAAM,aAA0B;AAAA,cAC9B;AAAA,cACA,OAAO;AAAA,cACP,OAAO,EAAE,WAAW,gBAAgB,UAAU,eAAe,YAAY,eAAe,MAAM;AAAA,YAChG;AAEA,kBAAM,iBAAiB,MAAgB;AACrC,kBAAI,SAAU,QAAO;AACrB,yBAAW,oBAAoB,aAAa,OAAO,WAAW,gBAAgB,KAAK,CAAC;AACpF,qBAAO;AAAA,YACT;AAEA,uBAAW,QAAQ,OAAO;AACxB,oBAAM,OAAO,MAAM,IAAI;AACvB,kBAAI;AACF,sBAAM,MACJ,OAAO,SAAS,aACZ,KAAKA,QAAO,UAAU,IACtB,QAAQ,OAAO,SAAS,WACtB,KAAK,SAASA,QAAO,UAAU,IAC/B;AAER,oBAAI,QAAQ,UAAW;AAEvB,sBAAM,OAAO,wBAAwB,MAAM,QAAQ;AACnD,oBAAI,KAAK,WAAW,EAAG;AAEvB,sBAAM,WAAW,cAAc,GAAG,IAAK,MAAkC;AACzE,sBAAM,mBACJ,YAAY,OAAO,KAAK,QAAQ,EAAE,KAAK,CAAC,MAAM,MAAM,YAAY,KAAK,SAAS,CAAC,CAAC;AAClF,sBAAM,kBACJ,WAAW,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,MAAM,MAAM,YAAY,KAAK,SAAS,CAAC,CAAC;AAEhF,oBAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,eAAe;AACxE;AAAA,gBACF;AAEA,sBAAM,MAAM,eAAe;AAC3B,2BAAW,OAAO,MAAM;AACtB,sBAAI,QAAQ,SAAU;AACtB,sBAAI,YAAY,IAAI,GAAG,EAAG;AAC1B,wBAAM,IAAI,oBAAoB,WAAW,GAAG,CAAC;AAC7C,sBAAI,MAAM,QAAW;AACnB,2BAAO,IAAI,KAAK,GAAG;AAAA,kBACrB,OAAO;AACL,wBAAI,KAAK,GAAG,IAAI;AAChB,wBAAI,CAAC,WAAY,cAAa,oBAAI,IAAY;AAC9C,+BAAW,IAAI,GAAG;AAAA,kBACpB;AAAA,gBACF;AAAA,cACF,QAAQ;AAAA,cAGR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA;AAAA,MACF;AAEA,YAAM,QAAQ,mBAAmB,UAAU,QAAQ,UAAU,OAAO,cAAc;AAElF,YAAM,YAAY,UAAU,OAAO,OAAO;AAAA,QACxC;AAAA,QACA,OAAO;AAAA,QACP,OAAO,EAAE,WAAW,eAAe;AAAA,MACrC,CAAC;AACD,UAAI,cAAc,UAAW;AAE7B,YAAM,iBAAiB,MAAM;AAC3B,cAAM,KAAM,OAAe,MAAM;AACjC,cAAM,IAAI,MAAM,OAAO,OAAO,WAAY,GAAW,OAAO;AAC5D,eAAO,OAAO,MAAM,YAAY,EAAE,WAAW,SAAS,IAAI,IAAI;AAAA,MAChE,GAAG;AAEH,YAAM,YAAY,iBAAiB,UAAU,cAAc;AAC3D,YAAM,OAAO,UAAU,OAAO,SAAS;AAEvC,UAAI,CAAC,OAAO,GAAG,MAAM,SAAS,GAAG;AAC/B,gBAAQ,KAAK;AAAA,UACX;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,QAAQ,WAAW,cAAc;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAEA,eAAW,OAAO,UAAU,OAAO,GAAG;AACpC,YAAM,UAAU,IAAI;AAEpB,YAAM,WAAW,MAAM;AACrB,YAAI,IAAI,QAAS,QAAO;AAExB,eAAO,IAAI,KAAK;AAChB,cAAM,YAAY,OAAO,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,MAAM,MAAM,QAAQ;AACpE,YAAI,UAAU,WAAW,EAAG,QAAO;AAEnC,cAAM,cAAc,eAAe,IAAI,UAAU,IAAI,aAAa;AAClE,cAAM,OAAO,aAAa,MAAM,IAAI,KAAK;AACvC,cAAM,SAAS,MAAM;AACnB,gBAAM,cAAc,aAAa,UAAU,YAAY,QAAQ,IAAI,KAAK,IAAI;AAC5E,cAAI,OAAO,gBAAgB,YAAY,YAAY,SAAS,EAAG,QAAO;AACtE,gBAAM,YAAY,IAAI,YAAY,SAAS,IAAI,UAAU,IAAI,OAAO,IAAI,WAAW;AACnF,cAAI,OAAO,cAAc,YAAY,UAAU,SAAS,EAAG,QAAO;AAClE,iBAAO,OAAO,IAAI,KAAK;AAAA,QACzB,GAAG;AAEL,cAAM,aAAsC,EAAE,QAAQ,OAAO,GAAG,IAAI,KAAK;AACzE,eAAO,cAAc,OAAO,KAAK,wBAAwB,SAAS,UAAU,IAAI,UAAU;AAAA,MAC5F,GAAG;AAEH,UAAI,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;AAChC,gBAAQ,KAAK;AAAA,UACX,WAAW,IAAI;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ,IAAI;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB;AAAA,IACF;AAEA,UAAM,SAAsB;AAE5B,UAAM,qBACJ,SACA,OAAO,UAAU,YAChB,MAAc,SACf,OAAQ,MAAc,UAAU,YAChC,CAAC,MAAM,QAAS,MAAc,KAAK,KACnC,OAAQ,MAAc,MAAM,eAAe,WACrC,MAAc,MAAM,aACtB;AAEN,UAAM,kBACJ,uBAAuB,SACnB,IACA,QAAQ,OAAO,CAAC,KAAK,MAAM,OAAO,iBAAiB,EAAE,IAAI,IAAI,iBAAiB,EAAE,IAAI,IAAI,CAAC;AAE/F,UAAM,YAAY,OAAO,OAAO,CAAC,cAAc;AAC7C,iBAAW,KAAK,SAAS;AACvB,YAAI,EAAE,SAAS,QAAW;AACxB,8BAAoB,WAAW,EAAE,SAAS;AAAA,QAC5C,OAAO;AACL,4BAAkB,WAAW,EAAE,WAAW,EAAE,IAAI;AAAA,QAClD;AAAA,MACF;AAEA,UAAI,uBAAuB,UAAa,oBAAoB,GAAG;AAC7D,cAAM,OAAO,UAAU;AACvB,YAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC5D,eAAK,aAAa,KAAK,IAAI,GAAG,qBAAqB,eAAe;AAAA,QACpE;AAAA,MACF;AAAA,IACF,CAAC;AAED,QAAI,SAAS,SAAS;AAMtB,UAAM,iBAAkB,OAAe;AACvC,UAAM,iBAAkB,WAAmB;AAC3C,QAAI,YAAY,CAAC,QAAQ,GAAG,QAAQ,gBAAgB,gBAAgB,gBAAgB;AAAA,EACtF,CAAC;AAED,MAAI,eAAe,YAAY,SAAS,GAAG;AACzC,WAAOR,QAAO,QAAQ,aAAa,CAAC,UAAgB,OAAO,KAAK,GAAG;AAAA,MACjE,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;;;AGpmDH,SAAS,UAAU,UAAAS,UAAQ,KAAY,cAAAC,mBAAkB;AA8ClD,IAAM,6BAA6BC,YAAW;AAAA,EACnD;AAAA,EACA;AAAA,IACE,cAAc,MAAM;AAAA,EACtB;AACF;AA6CO,IAAM,yBAAyB,CAAC,SAMrCC,SAAO,IAAI,aAAa;AACtB,QAAM,cAAc,KAAK;AAEzB,QAAM,sBAAsB,OAAO,SAAS,KAAW;AACvD,QAAM,iBAAiB,OAAO,IAAI,KAAwB;AAAA,IACxD,cAAc;AAAA,IACd,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,CAAC;AAED,QAAM,yBAAyB,OAAO,SAAS,KAAW;AAC1D,QAAM,oBAAoB,OAAO,IAAI,KAAwB;AAAA,IAC3D,cAAc;AAAA,IACd,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,CAAC;AAED,QAAM,UAAU,CAAC,aACfA,SAAO,IAAI,aAAa;AACtB,QAAI;AACJ,UAAM,aAAa,OAAO,SAAS,KAAW;AAC9C,WAAO,IAAI,OAAO,UAAU,CAAC,MAAM;AACjC,YAAM,mBAAmB,EAAE,eAAe,IAAI,EAAE,eAAe,IAAI;AACnE,UAAI,EAAE,WAAW,GAAG;AAClB,eAAO;AAAA,UACL,cAAc;AAAA,UACd,SAAS;AAAA,UACT,QAAQ,EAAE;AAAA,QACZ;AAAA,MACF;AACA,mBAAa,EAAE;AACf,aAAO;AAAA,QACL,cAAc;AAAA,QACd,SAAS,EAAE;AAAA,QACX,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AACD,QAAI,YAAY;AACd,aAAO,SAAS,QAAQ,YAAY,MAAS;AAAA,IAC/C;AAAA,EACF,CAAC;AAEH,QAAM,qBAAqB,CAAC,MAAe,UAAkB,WAC3DA,SAAO,IAAI,aAAa;AACtB,UAAM,QAAQ,OAAOA,SAAO,QAAmB,sBAAsB,EAAE,KAAKA,SAAO,KAAK;AACxF,QAAI,OAAO;AACT,aAAa,OAAO;AAAA,QAClB,MAAM;AAAA,QACN,UAAU,KAAK;AAAA,QACf,YAAY,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SACE;AAAA,QACF,MAAM;AAAA,QACN,MAAM;AAAA,MACR,CAAC;AACD,aAAOA,SAAO,IAAI,IAAI,MAAM,8EAA8E,CAAC;AAAA,IAC7G;AAEA,UAAM,WAAW,SAAS,WAAW,iBAAiB;AAEtD,QAAI;AACJ,WAAO,MAAM;AACX,YAAM,UAAU,OAAO,IAAI,OAAO,UAAU,CAAC,MAA2D;AACtG,YAAI,EAAE,eAAe,UAAU;AAC7B,iBAAO;AAAA,YACL,EAAE,MAAM,WAAW;AAAA,YACnB;AAAA,cACE,cAAc,EAAE,eAAe;AAAA,cAC/B,SAAS,EAAE;AAAA,cACX,QAAQ,EAAE;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,UACL,EAAE,MAAM,QAAQ,cAAc,EAAE,cAAc,QAAQ,EAAE,OAAO;AAAA,UAC/D;AAAA,YACE,cAAc,EAAE;AAAA,YAChB,SAAS,EAAE,UAAU;AAAA,YACrB,QAAQ,EAAE;AAAA,UACZ;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,QAAQ,SAAS,YAAY;AAC/B;AAAA,MACF;AAEA,aAAOA,SAAO;AAAA,QAAoB,CAAC,YACjCA,SAAO;AAAA,UACL;AAAA,YACEA,SAAO,IAAI,aAAa;AACtB,oBAAM,MAAM,KAAK,IAAI;AACrB,kBAAI,iBAAiB,QAAW;AAC9B,+BAAe;AAAA,cACjB;AACA,oBAAM,sBAAsB,MAAM;AAElC,qBAAO,YAAY,qBAAqB;AAAA,gBACtC;AAAA,gBACA,SAAS,EAAE,MAAM,YAAY,MAAM,sBAAsB,IAAI,GAAG;AAAA,gBAChE,cAAc,QAAQ;AAAA,gBACtB;AAAA,cACF,CAAC;AAED,qBAAO,SAAS,MAAM,QAAQ,MAAM;AAAA,YACtC,CAAC;AAAA,UACH;AAAA,UACA,IAAI,OAAO,UAAU,CAAC,OAAO;AAAA,YAC3B,cAAc,EAAE;AAAA,YAChB,SAAS,EAAE,UAAU,IAAI,EAAE,UAAU,IAAI;AAAA,YACzC,QAAQ,EAAE;AAAA,UACZ,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAWH,MAAI,gBAAyC;AAC7C,MAAI,cAAmC;AACvC,MAAI,oBAAyC;AAC7C,MAAI,gBAAgB;AACpB,QAAM,oBAAoB,oBAAI,IAAiD;AAC/E,QAAM,kBAAsC,CAAC;AAC7C,QAAM,qBAAyC,CAAC;AAEhD,QAAMC,eAAc,MAAc;AAChC,UAAM,OAAO,WAAW;AACxB,QAAI,QAAQ,OAAO,KAAK,QAAQ,YAAY;AAC1C,aAAO,KAAK,IAAI;AAAA,IAClB;AACA,WAAO,KAAK,IAAI;AAAA,EAClB;AAEA,QAAM,qBAAqB,MAAc;AACvC,qBAAiB;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,MAA+B;AACpD,QAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAO,gBAAgB,MAAM;AAAA,IAC/B;AACA,QAAI,mBAAmB,SAAS,GAAG;AACjC,aAAO,mBAAmB,MAAM;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,QAAqB,cAAuC;AACpF,UAAM,YAAYA,aAAY;AAC9B,sBAAkB,IAAI,OAAO,OAAO;AAAA,MAClC,MAAM,OAAO;AAAA,MACb,WAAW,OAAO;AAAA,MAClB,aAAa,OAAO;AAAA,MACpB;AAAA,MACA,aAAa,KAAK,IAAI,GAAG,YAAY,OAAO,WAAW;AAAA,MACvD;AAAA,MACA,GAAI,oBAAoB,EAAE,uBAAuB,kBAAkB,IAAI,CAAC;AAAA,MACxE,GAAI,OAAO,sBAAsB,EAAE,qBAAqB,OAAO,oBAAoB,IAAI,CAAC;AAAA,MACxF,mBAAmB;AAAA,QACjB,QAAQ,gBAAgB;AAAA,QACxB,WAAW,mBAAmB;AAAA,MAChC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,CAAC,MAAe,UAAyC;AAC5E,UAAM,IAAI,SAAS,WAAW,kBAAkB;AAChD,aAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,GAAG;AACpC,UAAI,EAAE,CAAC,GAAG,UAAU,OAAO;AACzB,UAAE,OAAO,GAAG,CAAC;AACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,CACrB,kBACAC,WAEA,CAACA,SACGF,SAAO,OACP,qBAAqB,QACnBA,SAAO,OACD,OAAO;AAAA,IACX,MAAM;AAAA,IACN,UAAU,KAAK;AAAA,IACf,YAAY,KAAK;AAAA,IACjB,MAAME;AAAA,EACR,CAAC;AAET,QAAM,uBAAuB,CAAC,WAC5BF,SAAO,IAAI,aAAa;AACtB,QAAI;AACJ,WAAOA,SAAO;AAAA,MACZA,SAAO,KAAK,MAAM;AAChB,YAAI,OAAO,SAAS,UAAU;AAC5B,0BAAgB,KAAK,MAAM;AAAA,QAC7B,OAAO;AACL,6BAAmB,KAAK,MAAM;AAAA,QAChC;AAEA,YAAI,CAAC,eAAe;AAClB,gBAAM,OAAO,eAAe;AAC5B,cAAI,MAAM;AACR,4BAAgB;AAChB,0BAAc,KAAK;AACnB,6BAAiB,MAAM,oBAAoB,mBAAmB,aAAa;AAC3E,sBAAU;AAAA,UACZ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,SAAS;AACX,aAAO,SAAS,QAAQ,QAAQ,OAAO,MAAS;AAAA,IAClD;AAAA,EACF,CAAC;AAEH,QAAM,eAAe,CAAC,MAAe,UACnCA,SAAO,IAAI,aAAa;AACtB,QAAI;AACJ,QAAI,wBAAwB;AAC5B,WAAOA,SAAO;AAAA,MACZA,SAAO,KAAK,MAAM;AAChB,YAAI,eAAe,UAAU,OAAO;AAClC,0BAAgB;AAChB,wBAAc;AACd,8BAAoB;AACpB,cAAI,gBAAgB,SAAS,GAAG;AAC9B,kBAAM,OAAO,eAAe;AAC5B,gBAAI,MAAM;AACR,8BAAgB;AAChB,4BAAc,KAAK;AACnB,+BAAiB,MAAM,gBAAgB;AACvC,wBAAU;AAAA,YACZ;AAAA,UACF,WAAW,mBAAmB,SAAS,GAAG;AACxC,oCAAwB;AAAA,UAC1B;AACA;AAAA,QACF;AAGA,qBAAa,MAAM,KAAK;AAGxB,YAAI,CAAC,eAAe;AAClB,gBAAM,OAAO,eAAe;AAC5B,cAAI,MAAM;AACR,4BAAgB;AAChB,0BAAc,KAAK;AACnB,6BAAiB,MAAM,oBAAoB,mBAAmB,aAAa;AAC3E,sBAAU;AAAA,UACZ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,SAAS;AACX,aAAO,SAAS,QAAQ,QAAQ,OAAO,MAAS;AAChD;AAAA,IACF;AAEA,QAAI,uBAAuB;AACzB,aAAOA,SAAO;AACd,UAAI;AACJ,aAAOA,SAAO;AAAA,QACZA,SAAO,KAAK,MAAM;AAChB,cAAI,cAAe;AACnB,gBAAM,OAAO,eAAe;AAC5B,cAAI,CAAC,KAAM;AACX,0BAAgB;AAChB,wBAAc,KAAK;AACnB,2BAAiB,MAAM,wBAAwB;AAC/C,0BAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AACA,UAAI,eAAe;AACjB,eAAO,SAAS,QAAQ,cAAc,OAAO,MAAS;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAC;AAEH,MAAI,cAAc;AAClB,QAAM,eAAe,CAAC,aAAyC;AAC7D,QAAI,OAAO,aAAa,YAAY,SAAS,SAAS,GAAG;AACvD,aAAO;AAAA,IACT;AACA,mBAAe;AAEf,WAAO,GAAG,KAAK,UAAU,MAAM,WAAW;AAAA,EAC5C;AAEA,QAAM,qBAAyC,CAC7C,IACA,OAEAA,SAAO,IAAI,aAAa;AACtB,UAAM,OAAgB,KAAM,KAAiB;AAC7C,UAAM,MAAoC,KAAK,KAAM;AACrD,UAAM,WAAW,SAAS,WAAW,iBAAiB;AAEtD,UAAM,2BAA2BC,aAAY;AAC7C,UAAM,iBAAiB,OAAOD,SAAO,QAAqB,aAAa,EAAE,KAAKA,SAAO,KAAK;AAC1F,UAAM,SAAS,aAAa,cAAc;AAC1C,UAAM,mBAAmB,OAAOA,SAAO,QAAc,uBAAuB,EAAE,KAAKA,SAAO,KAAK;AAC/F,UAAM,qBAAqB,qBAAqB;AAChD,UAAM,kBAAkB,qBAAqB,KAAK,IAAI,GAAGC,aAAY,IAAI,wBAAwB,IAAI;AAErG,UAAM,2BAA2B,qBAAqBA,aAAY,IAAI;AACtE,UAAM,SAAS,OAAO,KAAK,yBAAyB;AACpD,UAAM,kBAAkB,qBAAqB,KAAK,IAAI,GAAGA,aAAY,IAAI,wBAAwB,IAAI;AACrG,UAAM,WAAW,OAAO;AACxB,UAAM,0BAA0B,qBAAqBA,aAAY,IAAI;AACrE,WAAQD,SAAO,eAAe,mBAAmB,MAAM,UAAU,MAAM,GAAgB,eAAe,MAAM;AAC5G,UAAM,iBAAiB,qBAAqB,KAAK,IAAI,GAAGC,aAAY,IAAI,uBAAuB,IAAI;AAEnG,UAAM,gCAAgC,qBAAqBA,aAAY,IAAI;AAC3E,UAAM,QAAQ,OAAO,SAAS,KAAW;AACzC,UAAM,SAAsB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,WAAW,mBAAmB;AAAA,MAC9B,aAAaA,aAAY;AAAA,MACzB,GAAI,cAAc,EAAE,qBAAqB,YAAY,IAAI,CAAC;AAAA,IAC5D;AACA,WAAQD,SAAO,eAAe,qBAAqB,MAAM,GAAgB,eAAe,MAAM;AAC9F,UAAM,uBAAuB,qBAAqB,KAAK,IAAI,GAAGC,aAAY,IAAI,6BAA6B,IAAI;AAE/G,WAAO,OAAQD,SAAO;AAAA,MACpBA,SAAO;AAAA,QAAoB,CAAC,YAC1BA,SAAO;AAAA,UACLA,SAAO,QAAQ,QAAQ,SAAS,MAAM,KAAK,CAAC,GAAG,MAAM;AACnD,kBAAM,aAAa,kBAAkB,IAAI,KAAK;AAC9C,8BAAkB,OAAO,KAAK;AAC9B,kBAAM,cAAc,qBAAqBC,aAAY,IAAI;AACzD,kBAAM,mBAAoD,qBACtD;AAAA,cACE;AAAA,cACA,WAAW,OAAO;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,aAAa,YAAY,eAAe;AAAA,cACxC,gBAAgB,aAAa,KAAK,IAAI,GAAG,cAAc,WAAW,SAAS,IAAI;AAAA,cAC/E,GAAI,YAAY,YAAY,EAAE,WAAW,WAAW,UAAU,IAAI;AAAA,cAClE,GAAI,YAAY,sBAAsB,EAAE,qBAAqB,WAAW,oBAAoB,IAAI;AAAA,cAChG,GAAI,YAAY,wBAAwB,EAAE,uBAAuB,WAAW,sBAAsB,IAAI;AAAA,cACtG,GAAI,YAAY,oBAAoB,EAAE,mBAAmB,WAAW,kBAAkB,IAAI;AAAA,YAC5F,IACA;AACJ,mBAAO,eAAe,kBAAkB,UAAU,EAAE;AAAA,cAClDD,SAAO;AAAA,gBAAQ,MACb;AAAA,kBACE,mBACIA,SAAO,eAAe,KAAK,4BAA4B,gBAAgB,IACvE;AAAA,gBACN;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,UACDA,SAAO,gBAAgB,aAAa,MAAM,KAAK,EAAE,KAAKA,SAAO,QAAQ,MAAM,QAAQ,QAAQ,CAAC,CAAC,CAAC;AAAA,QAChG;AAAA,MACF;AAAA,MACa;AAAA,MACb;AAAA,IACF;AAAA,EACF,CAAC;AAEH,SAAO;AACT,CAAC;;;ACpeH,SAAS,UAAAG,gBAAqC;AAEvC,IAAM,0BAA0B,CACrC,QACA,aACoBA,SAAO,YAAYA,SAAO,gBAAgB,QAAQ,QAAQ,CAA+B;;;AbqB/G,IAAM,2BAA2B,uBAAO,IAAI,oCAAoC;AAChF,IAAM,+BAA+B;AACrC,IAAM,uBAAuB;AAC7B,IAAM,oBACJ;AACF,IAAM,oBAAoB;AAE1B,IAAM,uBAAuB,MAC3B,OAAO,OAAO,IAAI,MAAM,oBAAoB,GAAG;AAAA,EAC7C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACR,CAAC;AAEH,IAAM,uBAAuB,CAAC,UAA8D;AAC1F,QAAM,SAASC,OAAM,WAAW,KAAY;AAI5C,MAAI,QAAQ,SAAS,UAAW,QAAO;AACvC,QAAM,QAAa,OAAO;AAC1B,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,SAAO,OAAO,MAAM,OAAO,YAAY,OAAO,MAAM,aAAa,aAAc,QAA0C;AAC3H;AAEA,IAAM,yBAAyB,CAAC,YAAmF;AACjH,MAAI,CAAC,WAAW,OAAO,YAAY,SAAU,QAAO;AACpD,QAAM,MAAM;AACZ,QAAM,QAAQ,IAAI;AAClB,QAAM,MAAM,IAAI;AAChB,MAAI,OAAO,UAAU,YAAY,OAAO,QAAQ,SAAU,QAAO;AACjE,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,CAAC,OAAO,SAAS,GAAG,EAAG,QAAO;AAC7D,QAAM,IAAI,KAAK,MAAM,KAAK;AAC1B,QAAM,IAAI,KAAK,MAAM,GAAG;AACxB,MAAI,IAAI,KAAK,KAAK,EAAG,QAAO;AAC5B,SAAO,EAAE,OAAO,GAAG,KAAK,EAAE;AAC5B;AA8BA,IAAMC,eAAc,MAAc;AAChC,QAAM,OAAO,WAAW;AACxB,MAAI,QAAQ,OAAO,KAAK,QAAQ,YAAY;AAC1C,WAAO,KAAK,IAAI;AAAA,EAClB;AACA,SAAO,KAAK,IAAI;AAClB;AAwCO,IAAM,qBAAqB,CAAI,SAwCjC;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAAC;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAOJ,QAAM,YAA8BC,SAAO,IAAI,aAAa;AAC1D,UAAM,QAAQ,OAAOA,SAAO,QAAmB,sBAAsB,EAAE,KAAKA,SAAO,KAAK;AACxF,UAAM,UAAU,WAAW;AAC3B,QAAI,SAAS,QAAS,QAAO,QAAQ;AACrC,WAAO,OAAOC,iBAAgB,IAAI,QAAQ;AAAA,EAC5C,CAAC;AAED,QAAM,sBAAsB,CAACC,UAW3BF,SAAO,IAAI,aAAa;AACtB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAIE;AACJ,UAAM,mBAAmB,qBAAqBJ,aAAY,IAAI;AAC9D,QAAI,cAAc;AAClB,QAAI,kBAAkB;AACtB,QAAI,2BAA2B;AAC/B,QAAI,8BAA8B;AAClC,QAAI,6BAA6B;AACjC,UAAM,6BACJ,wBAAyB,IAAI,OAAO,SAAS,WAAW,IAAI,OAAO,SAAS;AAE9E,QAAI,8BAA8BC,UAAS,KAAK,IAAI,MAAM,aAAa,MAAM;AAC3E,aAAa,OAAO;AAAA,QAClB,MAAM;AAAA,QACN,UAAU;AAAA,QACV;AAAA,QACA,QAAQ,IAAI;AAAA,QACZ,OAAO,IAAI;AAAA,QACX,SAAS,IAAI;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SACE;AAAA,QACF,MAAM;AAAA,QACN,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAIA,QAAIA,UAAS,KAAK,WAAW,OAAO,oBAAoB,QAAQ;AAC9D,cAAQ,IAAI,IAAI,OAAO,GAAG;AAC1B,YAAM,MAAM,WAAW;AACvB,UAAI,MAAM,GAAG;AACX,cAAM,MAAM,WAAW;AACvB,YAAI,WAAW,OAAO,KAAK;AACzB,eAAK,WAAW,QAAQ,WAAW,QAAQ,GAAG,IAAI;AAClD,qBAAW,QAAQ;AAAA,QACrB,OAAO;AACL,gBAAM,UAAU,IAAI,WAAW,KAAK;AACpC,cAAI,WAAW,KAAK,IAAI;AACxB,qBAAW,SAAS,WAAW,QAAQ,KAAK;AAC5C,cAAI,SAAS;AACX,oBAAQ,OAAO,QAAQ,KAAK;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAIA,UAAM,cAAc,aAAa,eAAe;AAChD,QAAI,YAAY,SAAS,GAAG;AAC1B,YAAM,uBAAuB,qBAAqBD,aAAY,IAAI;AAClE,YAAM,mBAAyB,0CAA0C;AAAA,QACvE,OAAO,IAAI;AAAA,QACX;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,kBAAkB;AACpB,qBAAa,WAAW,UAAU,WAAkB,WAAW;AAAA,MACjE;AACA,UAAI,oBAAoB;AACtB,sBAAc,KAAK,IAAI,GAAGA,aAAY,IAAI,oBAAoB;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,OAAwB;AAAA,MAC5B,QAAQ,IAAI;AAAA,MACZ,OAAO,IAAI;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAY,IAAI,OAAO;AAAA,MACvB,YAAY,IAAI,OAAO;AAAA,IACzB;AAKA,UAAM,2BAA2B,qBAAqBA,aAAY,IAAI;AACtE,WAAOK,QAAO,QAAQ,WAAW;AAAA,MAC/B,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AACD,QAAI,oBAAoB;AACtB,wBAAkB,KAAK,IAAI,GAAGL,aAAY,IAAI,wBAAwB;AAAA,IACxE;AAUA,UAAM,mBAAmB,OAAOE,SAAO,QAAc,uBAAuB,EAAE,KAAKA,SAAO,KAAK;AAC/F,QAAI,gCAAgC;AACpC,QAAI,UAAU;AACZ,UAAI,qBAAqB,OAAO;AAC9B,wCAAgC;AAAA,MAClC,OAAO;AACL,cAAM,YAAY,OAAOA,SAAO,QAAc,gBAAgB,EAAE,KAAKA,SAAO,KAAK;AACjF,wCAAgC,cAAc;AAAA,MAChD;AAAA,IACF;AAEA,QAAI,YAAY,+BAA+B;AAC7C,YAAM,sBAAsB,qBAAqBF,aAAY,IAAI;AACjE,aAAO,SAAS;AAAA,QACd,OAAO;AAAA,QACP;AAAA,QACA,aAAa;AAAA,QACb;AAAA,MACF,CAAC;AACD,UAAI,oBAAoB;AACtB,sCAA8B,KAAK,IAAI,GAAGA,aAAY,IAAI,mBAAmB;AAAA,MAC/E;AAAA,IACF;AAEA,UAAM,aAAa,OAAOE,SAAO,QAAc,iBAAiB,EAAE,KAAKA,SAAO,KAAK;AACnF,UAAM,0BAA0B,WAAW,SAAS,KAAK,CAAO,qBAAqB,UAAU;AAE/F,QAAI,yBAAyB;AAC3B,YAAM,oCAAoC,qBAAqBF,aAAY,IAAI;AAC/E,YAAM,wBAAwB,qBAAqB;AAEnD,YAAM,iBAAiB,wBAAwB,aAAa,0BAA0B,IAAI;AAE1F,YAAM,mBAAmB,yBACpB,MAAM;AACL,cAAM,cAAc,qBAAqB,SAAS,KAAK;AAEvD,YAAI,IAAI,MAAM,UAAU;AACtB,iBAAO;AAAA,YACL,UAAU;AAAA,YACV,QAAQ,IAAI,MAAM,kBAAkB;AAAA,YACpC,SAAS,CAAC;AAAA,YACV,WAAW;AAAA,YACX,SAAS;AAAA,YACT,SAAS;AAAA,YACT,kBAAkB;AAAA,UACpB;AAAA,QACF;AAEA,cAAM,cAAc,IAAI,MAAM;AAC9B,cAAM,OAAO,YAAY,MAAM,GAAG,WAAW;AAC7C,eAAO;AAAA,UACL,UAAU;AAAA;AAAA,UAEV,SAAS;AAAA,UACT,WAAW,YAAY;AAAA,UACvB,SAAS,IAAI,MAAM;AAAA,UACnB,SAAS,IAAI,MAAM;AAAA,UACnB,kBAAkB,YAAY,SAAS;AAAA,QACzC;AAAA,MACF,GAAG,IACH;AAEJ,aAAa,OAAO;AAAA,QAClB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,OAAO;AAAA,QACP;AAAA,QACA,QAAQ,IAAI;AAAA,QACZ,OAAO,IAAI;AAAA,QACX;AAAA,QACA,UAAU;AAAA,QACV,YAAY,IAAI;AAAA,QAChB,kBAAkB,IAAI;AAAA,QACtB,GAAI,IAAI,mBAAmB,EAAE,wBAAwB,IAAI,uBAAuB,IAAI;AAAA,QACpF;AAAA,QACA;AAAA,QACA,YAAY,IAAI,OAAO;AAAA,QACvB,YAAY,IAAI,OAAO;AAAA,QACvB;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,oBAAoB;AACtB,mCAA2B,KAAK,IAAI,GAAGA,aAAY,IAAI,iCAAiC;AAAA,MAC1F;AAAA,IACF;AAEA,QAAI,YAAY,CAAC,+BAA+B;AAC9C,YAAM,sBAAsB,qBAAqBA,aAAY,IAAI;AACjE,aAAO,SAAS;AAAA,QACd,OAAO;AAAA,QACP;AAAA,QACA,aAAa;AAAA,QACb;AAAA,MACF,CAAC;AACD,UAAI,oBAAoB;AACtB,qCAA6B,KAAK,IAAI,GAAGA,aAAY,IAAI,mBAAmB;AAAA,MAC9E;AAAA,IACF;AAEA,WAAO,qBACH;AAAA,MACE,SAAS,KAAK,IAAI,GAAGA,aAAY,IAAI,gBAAgB;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IACA;AAAA,EACN,CAAC;AAQH,QAAM,0BAAmD,CACvD,QACA,SAECE,SAAO,eAAeA,SAAO,IAAI,aAAa;AAC7C,UAAM,wBAAwBF,aAAY;AAC1C,UAAM,wBAAwB,OAAOE,SAAO,QAAc,uBAAuB,EAAE,KAAKA,SAAO,KAAK;AACpG,UAAM,qBAAqB,0BAA0B;AACrD,UAAM,mBAAmB,OAAOA,SAAO,QAAQ,0BAA0B,EAAE,KAAKA,SAAO,KAAK;AAC5F,UAAM,YAAY,OAAOC,iBAAgB,IAAI,QAAQ;AAErD,IAAiB,iBAAiB,YAAY,QAAQ,SAAS;AAC/D,UAAM,aAAkB,WAAW;AACnC,eAAW,6BAA6B,CAAC;AACzC,eAAW,aAAa;AACxB,eAAW,WAAW;AACtB,eAAW,6BAA6B;AACxC,eAAW,yBAAyB;AACpC,eAAW,4BAA4B;AACvC,eAAW,sBAAsB;AACjC,UAAM,eAAe,qBAAqB,KAAK,IAAI,GAAGH,aAAY,IAAI,qBAAqB,IAAI;AAE/F,UAAM,sBAAuB,QAAgB,SAAS,aAAa;AACnE,QAAI,wBAAwB,SAAS,wBAAwB,UAAU;AACrE,iBAAW,WAAW;AAAA,IACxB;AAEA,UAAM,QAAQ,WAAW,SAAS;AAClC,UAAM,SAAS,WAAW,SAAS;AAEnC,IAAW,2BAA2B;AACtC,QAAI;AAEJ,QAAI;AACF,aAAO,OAAOE,SAAO;AAAA,QACnBA,SAAO;AAAA,UACLA,SAAO,IAAI,aAAa;AAEtB,gBAAI;AAUJ,kBAAM,uBAAuB,qBAAqBF,aAAY,IAAI;AAClE,kBAAM,8BAA8B,qBAAqBA,aAAY,IAAI;AACzE,kBAAM,kBAAkB,OAAOE,SAAO,SAAc;AACpD,kBAAM,WAAW,OAAOA,SAAO;AAAA,cAC7B,MAAM,wBAAwB,KAAK,GAAmC,eAAe;AAAA,YACvF;AACA,kBAAM,qBAAqB,qBACvB,KAAK,IAAI,GAAGF,aAAY,IAAI,2BAA2B,IACvD;AAEJ,gBAAIM,MAAK,UAAU,QAAQ,GAAG;AAC5B,oBAAM,mBAAmB,qBAAqB,SAAS,KAAK;AAE5D,kBAAI,kBAAkB;AACpB,oBAAI,0BAA0B,OAAO;AACnC,yBAAa,OAAO;AAAA,oBAClB,MAAM;AAAA,oBACN,UAAU;AAAA,oBACV;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,SAAS;AAAA,oBACT,MAAM;AAAA,oBACN,UAAU;AAAA,oBACV,SAAS;AAAA,oBACT,MAAM;AAAA,oBACN,MAAM;AAAA,kBACR,CAAC;AAAA,gBACH;AAEA,uBAAO,MAAM,UAAU,gBAAgB,EAAE,KAAKJ,SAAO,QAAQA,SAAO,WAAW,EAAE,kBAAkB,KAAK,CAAC,CAAC;AAC1G,uBAAO,OAAOA,SAAO,IAAI,qBAAqB,CAAC;AAAA,cACjD;AAEA,qBAAO,OAAOA,SAAO,UAAU,SAAS,KAAK;AAAA,YAC/C;AACA,kBAAM,cAAc,qBAAqB,KAAK,IAAI,GAAGF,aAAY,IAAI,oBAAoB,IAAI;AAE7F,kBAAM,oBAAoB,aAAa,WAAW;AAClD,gBAAI,kBAAkB;AACtB,gBAAI,mBAAmB;AACvB,gBAAI,eAAe;AAGnB,gBAAI,qBAAqB,WAAW,SAAS;AAC3C,oBAAM,iBAAiB,OAAO,2BAA2B;AACzD,uCAAyB,uBAAuB;AAChD,oBAAM,oBAAoB,eAAe;AACzC,oBAAM,qBAAqB,OAAO,SAAS;AAC3C,oBAAM,mBACJ,kBAAkB,kBAAkB,QACpC,kBAAkB,eAAe,uBAAuB,SAAS;AACnE,oBAAM,eAAe,kBAAkB,YAAY,QAAQ;AAC3D,oBAAM,kBAA8E,qBAChF,aACA,eACE,cACA;AAEN,oBAAM,gBAAgB,qBAAqB,uBAAuB,OAAO,OAAO,IAAI;AACpF,oBAAM,uBACJ,iBAAiB,kBAAkB,iBAC/B,kBAAkB,eAAe,uBAAuB;AAAA,gBACtD,cAAc;AAAA,gBACd,cAAc;AAAA,cAChB,IACA;AAEN,oBAAM,2BAA2B,qBAAqBA,aAAY,IAAI;AACtE,oBAAM,eAAe,OAAOE,SAAO;AAAA,gBACd;AAAA,kBACjB;AAAA,kBACA;AAAA,oBACE,UAAU;AAAA,oBACV;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,aAAa,eAAe;AAAA,oBAC5B,KAAK,WAAW,OAAO;AAAA,oBACvB,UAAU,eAAe;AAAA,oBACzB,kBAAkB,eAAe;AAAA,oBACjC,eAAe,qBAAqB,SAAS,eAAe;AAAA,oBAC5D;AAAA,oBACA,GAAI,uBAAuB,EAAE,wBAAwB,qBAAqB,IAAI,CAAC;AAAA,oBAC/E,gBAAiB,WAAW,SAAiB;AAAA,oBAC7C,YAAY,WAAW,SAAS;AAAA,oBAChC,mBAAoB,WAAW,SAAiB;AAAA,oBAChD,mBAAoB,WAAW,SAAiB;AAAA,oBAChD,mBACE,WAAW,WAAW,QACtB,CAAC,OAAO,GAAG,WAAW,QAAQ,OAAO,WAAW,QAAQ,SAAS;AAAA,oBAC5D,WAAW,aAAa,qBAAqB;AAAA,oBAC7C,YAAY,aAAa,sBAAsB;AAAA,oBAC/C,qBAAqB,aAAa,0BAA0B;AAAA,oBAC5D,0BAA0B,aAAa,+BAA+B;AAAA,oBACtE,UAAU,MAAM,WAAW,QAAS;AAAA,oBACpC,UAAU,CAAC,SAAS;AAClB,sBAAiB,YAAY,YAAY,IAAW;AAAA,oBACtD;AAAA,oBACP,aAAa,CAAC,MAAM,QAAQ,MAAM,IAAI,aAAa,WACjD,iBAAiB,MAAM,QAAQ,MAAM,IAAI,aAAa,MAAM;AAAA,kBAChE;AAAA,gBACF;AAAA,cACF;AACA,kBAAI,oBAAoB;AACtB,kCAAkB,KAAK,IAAI,GAAGF,aAAY,IAAI,wBAAwB;AAAA,cACxE;AAEA,kBAAI,aAAa,0BAA0B,MAAM,qBAAqB;AACpE,6BAAa,0BAA0B,MAAS;AAAA,cAClD;AAEA,kBAAI,aAAa,SAAS,WAAW;AACnC,sBAAM,SAAS,aAAa,MAAM,QAC/B,OAAO,CAAC,WAAWD,OAAM,aAAa,MAAM,KAAKA,OAAM,YAAY,MAAM,CAAC,EAC1E,IAAI,CAAC,WAAYA,OAAM,aAAa,MAAM,IAAI,OAAO,QAAQ,OAAO,MAAO;AAC9E,sBAAM,cAAc,OAAO;AAAA,kBACzB,CAAC,QACC,eAAkC;AAAA,gBACtC;AAEA,oBAAI,aAAa;AACf,wBAAM,SAAS,YAAY,UAAU,CAAC;AACtC,yBAAa,OAAO;AAAA,oBAClB,MAAM;AAAA,oBACN,UAAU;AAAA,oBACV;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,SAAS;AAAA,oBACT,MAAM;AAAA,oBACN,UAAU;AAAA,oBACV,SAAS,YAAY;AAAA,oBACrB,MACE,YAAY,SAAS,mBACjB,oCAAoC,OAAO,KAAK,IAAI,CAAC,KACrD,iDAAiD,OAAO,KAAK,IAAI,CAAC;AAAA,oBACxE,MAAM,4BAA4B,YAAY,IAAI;AAAA,kBACpD,CAAC;AAAA,gBACH;AAEA,uBAAO,OAAOG,SAAO,UAAU,aAAa,KAAK;AAAA,cACnD;AAEA,oBAAM,UAAU,aAAa;AAE7B,oBAAM,4BAAyD,WAAW,SAAiB;AAC3F,oBAAM,0BACJ,gBAAgB,CAAC,sBAAsB,CAAC,4BACpC,WAAW,QAAQ,eACnB;AAEN,kBACE,gBACA,CAAC,sBACD,QAAQ,SAAS,eAChB,6BAA6B,QAC3B,2BAA2B,QAAQ,wBAAwB,OAAO,IACrE;AACA,sBAAMK,SAAQ,KAAK,IAAI;AACvB,yCAAyB,mBAAmB,yBAAyB,oBAAoBA;AACzF,yCAAyB,kBAAkBA;AAE3C,oBAAI,6BAA6B,MAAM;AACrC,2CAAyB,wBAAwB;AACjD,2CAAyB,kBAAkB,MAAM;AAAA,gBACnD,WAAW,CAAC,yBAAyB,yBAAyB,yBAAyB;AACrF,6BAAW,KAAK,yBAAyB;AACvC,6CAAyB,kBAAkB,IAAI,CAAC;AAAA,kBAClD;AAAA,gBACF;AAEA,sBAAM,eAAe,OAAOL,SAAO,QAAc,mBAAmB,EAAE,KAAKA,SAAO,KAAK;AACvF,sBAAM,mBAAmB,OAAOA,SAAO,QAAc,uBAAuB,EAAE,KAAKA,SAAO,KAAK;AAC/F,sBAAM,aAAa,OAAOA,SAAO,QAAc,iBAAiB,EAAE,KAAKA,SAAO,KAAK;AACnF,sBAAM,eAAe,OAAOA,SAAO,cAAc,4BAA4B;AAC7E,sBAAM,YAAYM,QAAO,OAAO,YAAY,IAAI,aAAa,QAAQ;AAErE,yCAAyB,kBAAkB;AAAA,kBACzC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF;AAEA,uBAAO,yBAAyB,oBAAoB;AAAA,cACtD;AAEA,6BAAe,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI;AAEnE,kBAAI,QAAQ,SAAS,YAAY;AAC/B,uBAAa,OAAO;AAAA,kBAClB,MAAM;AAAA,kBACN,UAAU;AAAA,kBACV;AAAA,kBACA;AAAA,kBACA,MAAM,QAAQ,WAAW,oBAAoB,2BAA2B;AAAA,kBACxE,UAAU;AAAA,kBACV,SACE,QAAQ,WAAW,oBACf,yFACA;AAAA,kBACN,MACE,QAAQ,WAAW,oBACf,4HACA;AAAA,kBACN,MAAM;AAAA,gBACR,CAAC;AAAA,cACH;AAAA,YACF;AAGA,gBAAI,qBAAqB,WAAW,SAAS;AAC3C,oBAAM,+BAA+B,CACnC,aAC4D;AAC5D,oBAAI,SAAS,UAAU,EAAG,QAAO;AAEjC,sBAAM,aAA8D;AAAA,kBAClE,QAAQ;AAAA,kBACR,MAAM;AAAA,kBACN,aAAa;AAAA,kBACb,QAAQ;AAAA,gBACV;AAEA,oBAAI,WAA4C;AAChD,oBAAI,QAAQ,WAAW,QAAQ;AAC/B,oBAAI,UAAU;AAEd,2BAAW,KAAK,UAAU;AACxB,wBAAM,IAAI,WAAW,EAAE,IAAI;AAC3B,sBAAI,IAAI,OAAO;AACb,4BAAQ;AACR,+BAAW,EAAE;AAAA,kBACf;AACA,sBAAI,EAAE,OAAO,SAAS,QAAQ;AAC5B,8BAAU;AAAA,kBACZ;AAAA,gBACF;AAEA,oBAAI,SAAS;AACX,yBAAO,CAAC,EAAE,MAAM,UAAU,QAAQ,EAAE,MAAM,OAAO,EAAE,CAAC;AAAA,gBACtD;AAEA,sBAAM,UAAU,CAAC,WAAsD;AACrE,0BAAQ,OAAO,MAAM;AAAA,oBACnB,KAAK;AACH,6BAAO,SAAS,OAAO,IAAI;AAAA,oBAC7B,KAAK;AACH,6BAAO,QAAQ,OAAO,IAAI;AAAA,oBAC5B,KAAK;AACH,6BAAO,QAAQ,OAAO,IAAI,IAAI,OAAO,KAAK,IAAI,OAAO,SAAS,EAAE;AAAA,oBAClE,KAAK;AACH,6BAAO;AAAA,kBACX;AAAA,gBACF;AAEA,sBAAM,QAAuB,CAAC;AAC9B,sBAAM,QAAQ,oBAAI,IAAsD;AAExE,2BAAW,OAAO,UAAU;AAC1B,wBAAM,MAAM,QAAQ,IAAI,MAAM;AAC9B,wBAAM,WAAW,MAAM,IAAI,GAAG;AAC9B,sBAAI,CAAC,UAAU;AACb,0BAAM,IAAI,KAAK,GAAG;AAClB,0BAAM,KAAK,GAAG;AACd;AAAA,kBACF;AACA,sBAAI,WAAW,IAAI,IAAI,IAAI,WAAW,SAAS,IAAI,GAAG;AACpD,0BAAM,IAAI,KAAK,EAAE,GAAG,UAAU,MAAM,IAAI,KAAK,CAAC;AAAA,kBAChD;AAAA,gBACF;AAEA,uBAAO,MAAM,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,CAAE,EAAE,OAAO,OAAO;AAAA,cACvD;AAEA,oBAAM,UAAW,WAAW,QAAgB;AAI5C,kBAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,sBAAM,4BAA4B,qBAAqBR,aAAY,IAAI;AACvE,sBAAM,UAAU,6BAA6B,OAAO;AACpD,uBAA0B;AAAA,kBACjB;AAAA,kBACA;AAAA,oBACE,UAAU;AAAA,oBACV;AAAA,oBACA,QAAQ,WAAW,QAAS;AAAA,oBAC5B,OAAO,WAAW,QAAS;AAAA,oBAC3B,QAAQ,WAAW,QAAS;AAAA,oBAC5B,YAAY,aAAa;AAAA,oBACzB,aAAa,aAAa,eAAe;AAAA,oBACzC,kBAAmC,kBAAkB,UAAU;AAAA,oBAC/D,UAAU,MAAM,WAAW,QAAS;AAAA,oBACpC,UAAU,CAAC,SAAS;AAClB,sBAAiB,YAAY,YAAY,IAAW;AAAA,oBACtD;AAAA,oBACP,aAAa,CAAC,MAAM,QAAQ,MAAM,IAAI,aAAa,WACjD,iBAAiB,MAAM,QAAQ,MAAM,IAAI,aAAa,MAAM;AAAA,kBAChE;AAAA,kBACA;AAAA,gBACF;AACA,oBAAI,oBAAoB;AACtB,qCAAmB,KAAK,IAAI,GAAGA,aAAY,IAAI,yBAAyB;AAAA,gBAC1E;AAAA,cACF;AAAA,YACF;AAGA,gBAAI,qBAAqB,WAAW,SAAS;AAC3C,oBAAM,wBAAwB,qBAAqBA,aAAY,IAAI;AACnE,qBAAwB;AAAA,gBACtB;AAAA,gBACA;AAAA,kBACE,UAAU;AAAA,kBACV;AAAA,kBACA,UAAU,MAAM,WAAW,QAAS;AAAA,kBACpC,UAAU,CAAC,SAAS;AAClB,oBAAiB,YAAY,YAAY,IAAW;AAAA,kBACtD;AAAA,kBACA,aAAa,CAAC,MAAM,QAAQ,MAAM,IAAI,aAAa,WACjD,iBAAiB,MAAM,QAAQ,MAAM,IAAI,aAAa,MAAM;AAAA,gBAChE;AAAA,cACF;AACA,kBAAI,oBAAoB;AACtB,+BAAe,KAAK,IAAI,GAAGA,aAAY,IAAI,qBAAqB;AAAA,cAClE;AAAA,YACF;AAGA,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA,EAAE,MAAM,EAAE,UAAU,iBAAiB,WAAW,EAAE;AAAA,cAClDE,SAAO,IAAI,aAAa;AACtB,sBAAM,cAAe,WAAW,SAAiB;AACjD,sBAAM,aAAe,WAAW,SAAiB,cAAc;AAC/D,sBAAM,WAAa,WAAW,SAAiB,YAAY;AAC3D,sBAAM,sBAAsB,WAAW,SAAS;AAChD,sBAAM,sBACJ,sBAAsB,WAAW,UAC7B;AAAA,kBACE,wBACE,OAAQ,WAAW,QAAgB,2BAA2B,WACzD,WAAW,QAAgB,yBAC5B;AAAA,kBACN,2BACE,OAAQ,WAAW,QAAgB,8BAA8B,WAC5D,WAAW,QAAgB,4BAC5B;AAAA,kBACN,qBACE,OAAQ,WAAW,QAAgB,wBAAwB,WACtD,WAAW,QAAgB,sBAC5B;AAAA,gBACR,IACA;AACN,sBAAM,uBACJ,WAAW,WAAW,QAAS,WAAW,QAAgB,wBAAwB,MAAM;AAC1F,sBAAM,eAAe,OAAwB,gBAAgB,YAAY,QAAQ;AAEjF,oBAAI,cAAc;AAChB,wBAAM,oBAAoB,OAAO,oBAAoB;AAAA,oBACnD,KAAK,aAAa;AAAA,oBAClB,WAAW,aAAa;AAAA,oBACxB;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,CAAC;AAED,sBAAI,sBAAsB,mBAAmB;AAC3C,0BAAMO,SAA2B;AAAA,sBAC/B,MAAM;AAAA,sBACN,YAAY,aAAa,YAAY,OAAO;AAAA,sBAC5C,YAAY,aAAa,YAAY,OAAO;AAAA,sBAC5C;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA,GAAI,mBAAmB,EAAE,OAAO,iBAAiB,IAAI;AAAA,sBACrD,wBAAwB,qBAAqB,0BAA0B;AAAA,sBACvE,2BAA2B,qBAAqB,6BAA6B;AAAA,sBAC7E,qBAAqB,qBAAqB,uBAAuB;AAAA,sBACjE;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA,QAAQ;AAAA,oBACV;AACA,2BAAa,OAAO;AAAA,sBAClB,MAAM;AAAA,sBACN,UAAU;AAAA,sBACV;AAAA,sBACA,QAAQ,aAAa,YAAY;AAAA,sBACjC,OAAO,aAAa,YAAY;AAAA,sBAChC,MAAMA;AAAA,oBACR,CAAC;AAAA,kBACH;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,UACK;AAAA,UACN;AAAA,QACF;AAAA,MACA;AAAA,IACF,UAAE;AACF,MAAW,0BAA0B;AAAA,IACvC;AAEA,QAAI,KAAM,SAAS,WAAW;AAE5B,MAAiB,MAAM,UAAU;AACjC,aAAO,OAAOP,SAAO,UAAU,KAAM,KAAK;AAAA,IAC5C;AAAA,EACF,CAAC,GAAc,wBAAwB,IAAI;AAa7C,QAAM,mBAAwC,CAC5C,MACA,MACA,QACA,MACA,IACA,aACA,WAEAA,SAAO,IAAI,aAAa;AACtB,UAAM,QAAQ,OAAOA,SAAO,QAAmB,sBAAsB,EAAE,KAAKA,SAAO,KAAK;AACxF,QAAI,SAAS,WAAW,SAAS;AAC/B,YAAM,UAAe,WAAW;AAEhC,MAAiB,YAAY,YAAY,IAAI;AAM7C,UAAI,SAAS,OAAO,WAAW,WAAW;AACxC,gBAAQ,wBAAwB,IAAI;AACpC,gBAAQ,uBAAuB;AAC/B;AAAA,MACF;AAEA,uBAAiB,MAAM,QAAQ,MAAM,IAAI,aAAa,MAAM;AAE5D,UAAI,SAAS,KAAK;AAChB,gBAAQ,wBAAwB,IAAI;AAAA,MACtC;AACA;AAAA,IACF;AAGA,WAAO;AAAA,MACL;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,UACE,SAAS;AAAA,UACT,MAAM,EAAE,UAAU,WAAW;AAAA,QAC/B;AAAA,QACA;AAAA,UACE;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,MACEA,SAAO,KAAK,MAAM;AAEhB,YAAiB,YAAY,YAAY,IAAI;AAC7C,6BAAiB,MAAM,QAAQ,MAAM,IAAI,aAAa,MAAM;AAAA,UAC9D,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,4BAA4B,MAAe;AAC/C,UAAM,SAAS,aAAa,0BAA0B;AACtD,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO;AAAA,MACL,wBAAwB;AAAA,MACxB,oBAAoB,aAAa,sBAAsB,EAAE;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,kCAAkC;AAAA,EACpC;AACF;;;Acx+BA,SAAS,UAAAQ,UAAQ,UAAAC,eAAc;AAoC/B,IAAM,4BAA4B,CAAC,MACjC,MAAM,cAAc,cAAc,qBAAqB,CAAC;AAU1D,IAAM,mBAAmB,CACvB,UACW;AACX,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,YAAa,MAAc;AACjC,QAAM,iBACJ,aAAa,OAAO,cAAc,WAAW,OAAQ,UAAkB,gBAAgB,EAAE,IAAI;AAC/F,QAAM,oBACJ,aAAa,OAAO,cAAc,WAAW,OAAQ,UAAkB,qBAAqB,EAAE,IAAI;AACpG,SAAO;AAAA,IACL,OAAQ,MAAc,oBAAoB,EAAE;AAAA,IAC5C,OAAQ,MAAc,gCAAgC,EAAE;AAAA,IACxD,OAAQ,MAAc,kBAAkB,EAAE;AAAA,IAC1C;AAAA,IACA;AAAA,IACA,OAAQ,MAAc,qBAAqB,EAAE;AAAA,EAC/C,EAAE,KAAK,GAAG;AACZ;AAEO,IAAM,qCAAqC,CAAC,SAKW;AAC5D,QAAM,0BAAiD;AACvD,QAAM,sCAAsC;AAC5C,QAAM,wBAAwB;AAC9B,QAAM,+BAA+B;AACrC,QAAM,oCAAoC;AAC1C,QAAM,2BAA2B;AACjC,MAAI;AAEJ,SAAO,MACLC,SAAO,IAAI,aAAa;AACtB,UAAM,mBAAmB,OAAOA,SAAO,cAAc,0BAA0B;AAC/E,UAAM,eAAe,OAAOA,SAAO,cAAc,mCAAmC;AAEpF,UAAM,gBAAqDC,QAAO,OAAO,gBAAgB,IACrF,iBAAiB,QACjB;AACJ,UAAM,oBAAkEA,QAAO,OAAO,YAAY,IAC9F,aAAa,QACb;AAEJ,QAAI,mBAA0C;AAC9C,QAAI,wBAA4D;AAChE,QAAI,8BAA8B;AAClC,QAAI,mCAAuE;AAE3E,QAAI,+BAA+B;AACnC,QAAI,iBAAiB;AACrB,QAAI,sBAA0D;AAC9D,QAAI,wBAAwB;AAC5B,QAAI,6BAA6B;AACjC,QAAI,oBAAoB;AAExB,QAAI,cAAkD;AAEtD,UAAM,aAAa,CACjB,OACA,UACS;AACT,UAAI,CAAC,MAAO;AACZ,UAAI,UAAU;AAEd,YAAM,QAAQ,0BAA2B,MAAc,gBAAgB;AACvE,UAAI,OAAO;AACT,2BAAmB;AACnB,gCAAwB;AACxB,YAAI,UAAU,aAAa;AACzB,wCAA8B;AAC9B,6CAAmC;AAAA,QACrC;AACA,kBAAU;AAAA,MACZ;AAEA,YAAM,WAAW,qBAAsB,MAAc,4BAA4B;AACjF,UAAI,YAAY,MAAM;AACpB,uCAA+B;AAC/B,kBAAU;AAAA,MACZ;AAEA,YAAM,QAAQ,iBAAkB,MAAc,cAAc;AAC5D,UAAI,SAAS,MAAM;AACjB,yBAAiB;AACjB,8BAAsB;AACtB,kBAAU;AAAA,MACZ;AAEA,YAAM,YAAa,MAAc;AACjC,UAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,cAAM,QAAQ,qBAAsB,UAAkB,YAAY;AAClE,YAAI,SAAS,MAAM;AACjB,kCAAwB;AACxB,oBAAU;AAAA,QACZ;AAEA,cAAM,WAAW,wBAAyB,UAAkB,iBAAiB;AAC7E,YAAI,YAAY,MAAM;AACpB,uCAA6B;AAC7B,oBAAU;AAAA,QACZ;AAAA,MACF;AAEA,YAAM,aAAa,wBAAyB,MAAc,iBAAiB;AAC3E,UAAI,cAAc,MAAM;AACtB,4BAAoB;AACpB,kBAAU;AAAA,MACZ;AAEA,UAAI,SAAS;AACX,sBAAc;AAAA,MAChB;AAAA,IACF;AAEA,UAAM,WAAW,KAAK;AACtB,UAAM,qBACJ,YAAY,eAAe,sBAAsB,cAAc,oBAAoB,QAAQ,IAAI;AACjG,UAAM,sBACJ,YAAY,mBAAmB,sBAAsB,kBAAkB,oBAAoB,QAAQ,IAAI;AACzG,UAAM,4BAA4B,iBAAiB,aAAa;AAChE,UAAM,2BAA2B,iBAAiB,kBAAkB;AACpE,UAAM,6BAA6B,iBAAiB,iBAAiB;AACrE,UAAM,4BAA4B,iBAAiB,mBAAmB;AAEtE,QACE,SACA,MAAM,8BAA8B,6BACpC,MAAM,6BAA6B,4BACnC,MAAM,+BAA+B,8BACrC,MAAM,8BAA8B,2BACpC;AACA,UAAI,KAAK,aAAa;AACpB,eAAO,KAAK,YAAY,4BAA4B;AAAA,UAClD,QAAQ,MAAM;AAAA,UACd,SAAS,EAAE,MAAM,qBAAqB,MAAM,UAAU;AAAA,QACxD,CAAC;AAAA,MACH;AACA,aAAO,MAAM;AAAA,IACf;AAGA,eAAW,eAAe,iBAAiB;AAC3C,eAAW,oBAAoB,gBAAgB;AAC/C,eAAW,mBAAmB,UAAU;AACxC,eAAW,qBAAqB,UAAU;AAE1C,UAAM,4BAA4B;AAClC,UAAM,iCAAiC;AAGvC,QAAI,OAAO,qBAAqB,YAAY,CAAC,gBAAgB;AAC3D,yBAAmB;AACnB,8BAAwB;AAAA,IAC1B;AAGA,UAAM,WAA4C;AAAA,MAChD;AAAA,MACA;AAAA,MACA;AAAA,MACA,0BAA0B;AAAA,QACxB,cAAc;AAAA,QACd,mBAAmB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,KAAK,aAAa;AACpB,aAAO,KAAK,YAAY,4BAA4B;AAAA,QAClD,QAAQ;AAAA,QACR,SAAS,EAAE,MAAM,qBAAqB,MAAM,UAAU;AAAA,MACxD,CAAC;AAAA,IACH;AAEA,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AACL;AAEO,IAAM,+BAA+B;;;AChP5C,SAAS,UAAAC,UAAQ,UAAAC,eAAc;AAiC/B,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAEf,IAAM,2BAA2B,CAAC,SAIW;AAClD,QAAM,4BAA4B,KAAK,kBAAkB;AAEzD,QAAM,iBAAiB;AACvB,QAAM,kBAAkB;AACxB,QAAM,oBAAoB;AAC1B,QAAM,kBAAkB;AACxB,QAAM,uBAAuB;AAC7B,QAAM,uBAA6C;AAEnD,SAAO,MACLC,SAAO,IAAI,aAAa;AACtB,UAAM,mBAAmB,OAAOA,SAAO,cAAc,yBAAyB;AAC9E,UAAM,eAAe,OAAOA,SAAO,cAAc,4BAA4B;AAE7E,UAAM,gBAAgBC,QAAO,OAAO,gBAAgB,IAAI,iBAAiB,QAAQ;AACjF,UAAM,oBAAoBA,QAAO,OAAO,YAAY,IAAI,aAAa,QAAQ;AAE7E,QAAI,UAAU;AACd,QAAI,WAAW;AACf,QAAI,aAAa;AACjB,QAAI,WAAW;AACf,QAAI,gBAAgB;AACpB,QAAI,gBAAsC;AAE1C,QAAI,eAAsD;AAE1D,QAAI,cAAkC;AAEtC,UAAM,aAAa,CACjB,OACA,UACS;AACT,UAAI,CAAC,MAAO;AAEZ,YAAM,MAAO,MAAc,YAAY,OAAQ,MAAc,WAAW;AACxE,UAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AAErC,UAAI,UAAU;AAEd,YAAM,cAAc,cAAe,IAAY,OAAO;AACtD,UAAI,eAAe,MAAM;AACvB,kBAAU;AACV,kBAAU;AAAA,MACZ;AAEA,YAAM,mBAAoB,IAAY;AACtC,UAAI,qBAAqB,gBAAgB,qBAAqB,eAAe;AAC3E,uBAAe;AACf,kBAAU;AAAA,MACZ;AAEA,YAAM,eAAe,YAAa,IAAY,QAAQ;AACtD,UAAI,gBAAgB,MAAM;AACxB,mBAAW;AACX,kBAAU;AAAA,MACZ;AAEA,YAAM,iBAAiB,YAAa,IAAY,UAAU;AAC1D,UAAI,kBAAkB,MAAM;AAC1B,qBAAa;AACb,kBAAU;AAAA,MACZ;AAEA,YAAM,eAAe,YAAa,IAAY,QAAQ;AACtD,UAAI,gBAAgB,MAAM;AACxB,mBAAW;AACX,kBAAU;AAAA,MACZ;AAEA,YAAM,oBAAoB,cAAe,IAAY,aAAa;AAClE,UAAI,qBAAqB,MAAM;AAC7B,wBAAgB;AAChB,kBAAU;AAAA,MACZ;AAEA,YAAM,oBAAqB,IAAY;AACvC,UAAI,sBAAsB,cAAc,sBAAsB,gBAAgB;AAC5E,wBAAgB;AAChB,kBAAU;AAAA,MACZ;AAEA,UAAI,SAAS;AACX,sBAAc;AAAA,MAChB;AAAA,IACF;AAEA,UAAM,WAAW,KAAK;AACtB,UAAM,qBACJ,YAAY,eAAe,8BACvB,cAAc,4BAA4B,QAAQ,IAClD;AACN,UAAM,sBACJ,YAAY,mBAAmB,8BAC3B,kBAAkB,4BAA4B,QAAQ,IACtD;AAGN,eAAW,2BAA2B,iBAAiB;AACvD,eAAW,eAAe,iBAAiB;AAC3C,eAAW,oBAAoB,gBAAgB;AAC/C,eAAW,mBAAmB,UAAU;AACxC,eAAW,qBAAqB,UAAU;AAE1C,UAAM,mBAAmB,eAAe,QAAQ;AAChD,UAAM,YAA8B,mBAAmB,UAAU;AAEjE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACL;;;AC/JA,SAAS,UAAAC,UAAQ,UAAAC,eAAc;AAkC/B,IAAM,sBAAsB;AAE5B,IAAM,yBAAyB,CAAC,SAC9B,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU,OAAO;AAElE,IAAMC,iBAAgB,CAAC,UAAyC,OAAO,UAAU,YAAY,QAAQ;AAE9F,IAAM,iCAAiC,CAAC,SAIW;AACxD,QAAM,+BAAuC,oBAAoB,KAAK,kBAAkB,qBAAqB,KAAK;AAClH,QAAM,uCACJ,oBAAoB,KAAK,kBAAkB,6BAA6B,KAAK;AAC/E,QAAM,2BACJ,uBAAuB,KAAK,kBAAkB,iBAAiB,KAAK;AAEtE,QAAM,4BACJA,eAAc,KAAK,kBAAkB,0BAA0B,OAAO,KAAK;AAC7E,QAAM,+BACJ,oBAAoB,KAAK,kBAAkB,0BAA0B,UAAU,KAAK;AACtF,QAAM,6BACJ,oBAAoB,KAAK,kBAAkB,0BAA0B,QAAQ,KAAK;AAEpF,SAAO,MACLC,SAAO,IAAI,aAAa;AACtB,UAAM,mBAAmB,OAAOA,SAAO,cAAc,yBAAyB;AAC9E,UAAM,eAAe,OAAOA,SAAO,cAAc,4BAA4B;AAE7E,UAAM,gBAAgBC,QAAO,OAAO,gBAAgB,IAAI,iBAAiB,QAAQ;AACjF,UAAM,oBAAoBA,QAAO,OAAO,YAAY,IAAI,aAAa,QAAQ;AAE7E,QAAI,oBAAoB;AACxB,QAAI,wBAAwB;AAC5B,QAAI,gCAAgC;AACpC,QAAI,kCAAkC;AACtC,QAAI,qCAAqC;AACzC,QAAI,mCAAmC;AAEvC,QAAI,cAAwC;AAE5C,UAAM,aAAa,CACjB,OACA,UACS;AACT,UAAI,CAAC,MAAO;AACZ,UAAI,UAAU;AAEd,YAAM,OAAO,uBAAwB,MAAc,iBAAiB;AACpE,UAAI,MAAM;AACR,4BAAoB;AACpB,kBAAU;AAAA,MACZ;AAEA,YAAM,WAAW,oBAAqB,MAAc,qBAAqB;AACzE,UAAI,YAAY,MAAM;AACpB,gCAAwB;AACxB,kBAAU;AAAA,MACZ;AAEA,YAAM,mBAAmB,oBAAqB,MAAc,6BAA6B;AACzF,UAAI,oBAAoB,MAAM;AAC5B,wCAAgC;AAChC,kBAAU;AAAA,MACZ;AAEA,YAAM,cAAe,MAAc;AACnC,UAAI,eAAe,OAAO,gBAAgB,UAAU;AAClD,cAAM,UAAUF,eAAe,YAAoB,OAAO;AAC1D,YAAI,WAAW,MAAM;AACnB,4CAAkC;AAClC,oBAAU;AAAA,QACZ;AAEA,cAAM,aAAa,oBAAqB,YAAoB,UAAU;AACtE,YAAI,cAAc,MAAM;AACtB,+CAAqC;AACrC,oBAAU;AAAA,QACZ;AAEA,cAAM,WAAW,oBAAqB,YAAoB,QAAQ;AAClE,YAAI,YAAY,MAAM;AACpB,6CAAmC;AACnC,oBAAU;AAAA,QACZ;AAAA,MACF;AAEA,UAAI,SAAS;AACX,sBAAc;AAAA,MAChB;AAAA,IACF;AAEA,UAAM,WAAW,KAAK;AACtB,UAAM,qBACJ,YAAY,eAAe,mCACvB,cAAc,iCAAiC,QAAQ,IACvD;AACN,UAAM,sBACJ,YAAY,mBAAmB,mCAC3B,kBAAkB,iCAAiC,QAAQ,IAC3D;AAGN,eAAW,eAAe,iBAAiB;AAC3C,eAAW,oBAAoB,gBAAgB;AAC/C,eAAW,mBAAmB,UAAU;AACxC,eAAW,qBAAqB,UAAU;AAE1C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,0BAA0B;AAAA,QACxB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACL;;;AC3JA,SAAS,UAAAG,gBAAc;AA2BhB,IAAM,uBAAuB,CAAO,SAIzCC,SAAO,KAAK,MAAM;AAChB,QAAM,EAAE,SAAS,iBAAiB,IAAI;AAEtC,sBAAoB,SAAgB,gBAAgB;AACtD,CAAC;;;ACnCH,SAAS,UAAAC,UAAQ,UAAAC,eAAqB;AAoDtC,IAAM,yBAAyB,CAAC,SAAiC,KAAK,CAAC,KAAK;AAE5E,IAAM,WAAW,CAAC,GAAc,MAA0B,WAAW,GAAG,CAAC,KAAK,WAAW,GAAG,CAAC;AAE7F,IAAM,uBAAuB,CAAC,oBAA8C,cAAkC;AAC5G,aAAW,YAAY,oBAAoB;AACzC,QAAI,WAAW,UAAU,SAAS,GAAG;AACnC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,kBAAkB,CAAC,oBAAsC,cAAkC;AAC/F,MAAI,qBAAqB,oBAAoB,SAAS,GAAG;AACvD,WAAO;AAAA,EACT;AAEA,MAAI,aAAa;AACjB,WAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;AAClD,UAAM,WAAW,mBAAmB,CAAC;AACrC,QAAI,WAAW,WAAW,QAAQ,GAAG;AACnC;AAAA,IACF;AACA,uBAAmB,UAAU,IAAI;AACjC,kBAAc;AAAA,EAChB;AACA,qBAAmB,SAAS;AAC5B,qBAAmB,KAAK,SAAS;AACjC,SAAO;AACT;AAEA,IAAM,sBAAsB,CAAC,GAAY,MAAwB;AAC/D,MAAI,OAAO,GAAG,GAAG,CAAC,EAAG,QAAO;AAC5B,MAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AACrB,MAAI,OAAO,MAAM,YAAY,OAAO,MAAM,SAAU,QAAO;AAC3D,MAAI,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,EAAG,QAAO;AAEjD,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAC1C,aAAW,KAAK,OAAO;AACrB,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,CAAC,EAAG,QAAO;AAC3D,QAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,EAAG,QAAO;AAAA,EAC3C;AACA,SAAO;AACT;AAEA,IAAM,cAAc,CAAI,OAAkC,GAAM,MAAkB;AAChF,MAAI,MAAM,eAAe,YAAY,OAAO,MAAM,WAAW,YAAY;AACvE,WAAO,MAAM,OAAO,GAAG,CAAC;AAAA,EAC1B;AACA,MAAI,MAAM,eAAe,iBAAiB;AACxC,WAAO,oBAAoB,GAAG,CAAC;AAAA,EACjC;AACA,SAAO,OAAO,GAAG,GAAG,CAAC;AACvB;AAEA,IAAMC,SAAQ,MAAc;AAC1B,QAAM,OAAQ,WAAmB;AACjC,MAAI,QAAQ,OAAO,KAAK,QAAQ,YAAY;AAC1C,WAAO,KAAK,IAAI;AAAA,EAClB;AACA,SAAO,KAAK,IAAI;AAClB;AAEA,IAAM,0CAA0C;AAEhD,IAAM,mCAAmC,CAAI,SAK9B;AACb,MAAI,KAAK,MAAM,SAAU,QAAO;AAChC,MAAI,KAAK,MAAM,MAAM,WAAW,EAAG,QAAO;AAC1C,MAAI,CAAC,KAAK,YAAa,QAAO;AAE9B,aAAW,eAAe,KAAK,MAAM,cAAc;AACjD,UAAM,YAAY,KAAK,aAAa,WAAW;AAC/C,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,eAAe,uBAAuB,SAAS;AACrD,UAAM,eAAe,KAAK,MAAM,eAAe,IAAI,YAAY;AAC/D,QAAI,CAAC,gBAAgB,aAAa,WAAW,GAAG;AAC9C;AAAA,IACF;AAEA,eAAW,QAAQ,cAAc;AAC/B,UAAI,SAAS,WAAW,IAAI,GAAG;AAC7B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAI,SAWxBC,SAAO,IAAI,aAAa;AACtB,MAAI;AACJ,QAAM,gBAAgB,KAAK,gBAAgBD,OAAM,IAAI;AAErD,MAAI;AACF,WAAO,KAAK,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,EAC/C,QAAQ;AACN,QAAI,KAAK,eAAe;AACtB,aAAa,OAAO;AAAA,QAClB,MAAM;AAAA,QACN,UAAU,KAAK;AAAA,QACf,YAAY,KAAK;AAAA,QACjB,QAAQ,KAAK,KAAK;AAAA,QAClB,OAAO,KAAK,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,cAAc,MAAM,iBAAiB,SAAS,EAAE,YAAY,KAAK,WAAW,EAAE;AAAA,MACjG,CAAC;AAAA,IACH;AACA;AAAA,EACF;AAEA,QAAM,SAAS,KAAK,iBAAiB,iBAAiB,OAAO,KAAK,IAAI,GAAGA,OAAM,IAAI,aAAa,IAAI;AACpG,QAAM,WAAW,KAAK,MAAM;AAC5B,QAAM,OAAO,KAAK,MAAM;AACxB,QAAM,QAAQ,WAAW,YAAY,KAAK,MAAM,WAAkB,MAAM,IAAI,IAAI;AAChF,QAAM,UAAU,CAAC,YAAY,CAAC;AAE9B,MAAI,SAAS;AACX,SAAK,MAAM,cAAc;AACzB,SAAK,MAAM,WAAW;AACtB,SAAK,MAAM,iBAAiB,KAAK,KAAK;AACtC,SAAK,oBAAoB,KAAK,UAAU;AAExC,WAAOE,QAAO,QAAQ,KAAK,MAAM,KAAY;AAAA,MAC3C,OAAO,KAAK,MAAM;AAAA,MAClB,MAAM,KAAK;AAAA,IACb,CAAoC;AAAA,EACtC;AAEA,QAAM,sBACJ,KAAK,kBACJ,KAAK,oBAAoB,YAAY,WAAY,UAAU,QAAQ,UAAU;AAEhF,MAAI,CAAC,qBAAqB;AACxB;AAAA,EACF;AAEA,SAAa,OAAO;AAAA,IAClB,MAAM;AAAA,IACN,UAAU,KAAK;AAAA,IACf,YAAY,KAAK;AAAA,IACjB,QAAQ,KAAK,KAAK;AAAA,IAClB,OAAO,KAAK,KAAK;AAAA,IACjB,MAAM;AAAA,MACJ,YAAY,KAAK;AAAA,MACjB,MAAM,KAAK,MAAM,UAAU;AAAA,MAC3B,UAAU,KAAK,MAAM,UAAU;AAAA,MAC/B,gBAAgB,KAAK,MAAM,UAAU;AAAA,MACrC,aAAa,KAAK,MAAM,UAAU;AAAA,MAClC,YAAY,KAAK,MAAM,UAAU;AAAA,MACjC;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;AAEI,IAAMC,QAAO,CAAI,SAIA;AACtB,QAAM,EAAE,UAAU,YAAY,uBAAuB,IAAI;AAEzD,QAAM,gBAAgB,oBAAI,IAAmC;AAC7D,QAAM,kBAAkB,oBAAI,IAA8B;AAC1D,QAAM,wBAAwB,oBAAI,IAAY;AAE9C,QAAM,gBAAmD,MAAM,cAAc,OAAO;AAEpF,QAAM,cAA+C,CAAC,cAAc;AAClE,UAAM,WAAW,cAAc,IAAI,UAAU,UAAU;AACvD,QAAI,UAAU;AACZ,aAAOF,SAAO,QAAQ,QAAe;AAAA,IACvC;AAEA,WAAOA,SAAO,IAAI,aAAa;AAC7B,YAAM,MAAM,OAAOC,QAAO,UAAoC;AAE9D,YAAM,QAA0B,CAAC;AACjC,YAAM,iBAAiB,oBAAI,IAA8B;AACzD,YAAM,eAAmC,CAAC;AAC1C,iBAAW,WAAW,UAAU,OAAO;AACrC,YAAI,OAAO,YAAY,SAAU;AACjC,cAAM,OAAO,mBAAmB,OAAO;AACvC,YAAI,QAAQ,KAAM;AAElB,cAAM,KAAK,IAAI;AACf,cAAM,UAAU,uBAAuB,IAAI;AAC3C,cAAM,SAAS,eAAe,IAAI,OAAO;AACzC,YAAI,QAAQ;AACV,iBAAO,KAAK,IAAI;AAAA,QAClB,OAAO;AACL,yBAAe,IAAI,SAAS,CAAC,IAAI,CAAC;AAClC,uBAAa,KAAK,OAAO;AAAA,QAC3B;AAAA,MACF;AACA,UAAI,aAAa,WAAW,GAAG;AAC7B,8BAAsB,IAAI,UAAU,UAAU;AAAA,MAChD,OAAO;AACL,mBAAW,WAAW,cAAc;AAClC,gBAAM,MAAM,gBAAgB,IAAI,OAAO;AACvC,cAAI,KAAK;AACP,gBAAI,IAAI,UAAU,UAAU;AAAA,UAC9B,OAAO;AACL,4BAAgB,IAAI,SAAS,oBAAI,IAAI,CAAC,UAAU,UAAU,CAAC,CAAC;AAAA,UAC9D;AAAA,QACF;AAAA,MACF;AAEA,YAAM,QAA+B;AAAA,QACnC,YAAY,UAAU;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,QACjB,qBAAqB;AAAA,QACrB,gBAAgB;AAAA,QAChB,UAAU;AAAA,QACV,aAAa;AAAA,MACf;AACA,oBAAc,IAAI,UAAU,YAAY,KAAK;AAC7C,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,eAAiD,CAAC,eAAe;AACrE,UAAM,QAAQ,cAAc,IAAI,UAAU;AAC1C,QAAI,CAAC,MAAO;AACZ,UAAM,kBAAkB,KAAK,IAAI,GAAG,MAAM,kBAAkB,CAAC;AAC7D,QAAI,MAAM,kBAAkB,EAAG;AAE/B,kBAAc,OAAO,UAAU;AAC/B,0BAAsB,OAAO,UAAU;AACvC,eAAW,WAAW,MAAM,cAAc;AACxC,YAAM,MAAM,gBAAgB,IAAI,OAAO;AACvC,UAAI,CAAC,IAAK;AACV,UAAI,OAAO,UAAU;AACrB,UAAI,IAAI,SAAS,GAAG;AAClB,wBAAgB,OAAO,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAyC,CAAC,OAAO,MAAM,OAAO,kBAAkB,sBACpFD,SAAO,IAAI,aAAa;AACtB,QAAI,cAAc,SAAS,EAAG;AAE9B,UAAM,gBACJ,qBAAqB,WAAW,qBAAqB,UAAU,qBAAqB;AACtF,UAAM,kBAA2C,qBAAqB,YAAY,YAAY;AAE9F,UAAM,WACJ,MAAM,YAAY,MAAM,aAAa,WAAW,IAAI,SAAY,yBAAyB;AAE3F,UAAM,eAAe,CAAC,OAAsC;AAC1D,UAAI,CAAC,SAAU,QAAO;AACtB,UAAI,CAAC,OAAO,SAAS,EAAE,EAAG,QAAO;AACjC,YAAM,MAAM,KAAK,MAAM,EAAE;AACzB,UAAI,MAAM,EAAG,QAAO;AACpB,YAAM,OAAO,SAAS,WAAW,GAAG;AACpC,aAAO,QAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO;AAAA,IAC9C;AAEA,UAAM,0BAA0B,CAAC,OAA8B,eAA4C;AACzG,UAAI,MAAM,oBAAoB,EAAG,QAAOA,SAAO;AAC/C,UAAI,MAAM,wBAAwB,KAAK,OAAQ,QAAOA,SAAO;AAG7D,YAAM,sBAAsB,KAAK;AACjC,aAAO,cAAc;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,iCAAiC,MACrCA,SAAO,IAAI,aAAa;AACtB,iBAAW,CAAC,YAAY,KAAK,KAAK,cAAc,QAAQ,GAAG;AACzD,eAAO,wBAAwB,OAAO,UAAU;AAAA,MAClD;AAAA,IACF,CAAC;AAEH,UAAM,0BAA0B,oBAAI,IAAyD;AAC7F,UAAM,8BAA8B,CAAC,YAAiE;AACpG,YAAM,SAAS,wBAAwB,IAAI,OAAO;AAClD,UAAI,QAAQ;AACV,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,gBAAgB,IAAI,OAAO;AAC/C,UAAI,CAAC,eAAe,YAAY,SAAS,GAAG;AAC1C,gCAAwB,IAAI,SAAS,CAAC,CAAC;AACvC,eAAO,CAAC;AAAA,MACV;AAEA,YAAM,UAA0C,CAAC;AACjD,iBAAW,cAAc,aAAa;AACpC,cAAM,QAAQ,cAAc,IAAI,UAAU;AAC1C,YAAI,CAAC,MAAO;AACZ,cAAM,eAAe,MAAM,eAAe,IAAI,OAAO;AACrD,YAAI,CAAC,gBAAgB,aAAa,WAAW,EAAG;AAChD,gBAAQ,KAAK;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,8BAAwB,IAAI,SAAS,OAAO;AAC5C,aAAO;AAAA,IACT;AAEA,QAAI,cAAc,SAAS,GAAG;AAC5B,YAAM,QAAQ,cAAc,OAAO,EAAE,KAAK,EAAE;AAC5C,UAAI,CAAC,MAAO;AAEZ,UACE,CAAC,iCAAiC;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa,YAAY;AAAA,MAC3B,CAAC,GACD;AACA;AAAA,MACF;AAEA,aAAO,wBAAwB,OAAO,MAAM,UAAU;AACtD;AAAA,IACF;AAEA,QAAI,MAAM,UAAU;AAClB,aAAO,+BAA+B;AACtC;AAAA,IACF;AAEA,QAAI,CAAC,UAAU;AACb,aAAO,+BAA+B;AACtC;AAAA,IACF;AAEA,eAAW,cAAc,uBAAuB;AAC9C,YAAM,QAAQ,cAAc,IAAI,UAAU;AAC1C,UAAI,CAAC,MAAO;AACZ,aAAO,wBAAwB,OAAO,UAAU;AAAA,IAClD;AAEA,UAAM,4BAA4B,oBAAI,IAAmC;AACzE,eAAW,eAAe,MAAM,cAAc;AAC5C,YAAM,YAAY,aAAa,WAAW;AAC1C,UAAI,CAAC,WAAW;AACd,eAAO,+BAA+B;AACtC;AAAA,MACF;AAEA,YAAM,UAAU,uBAAuB,SAAS;AAEhD,YAAM,qBAAqB,0BAA0B,IAAI,OAAO;AAChE,UAAI,oBAAoB;AACtB,wBAAgB,oBAAoB,SAAS;AAC7C;AAAA,MACF;AACA,gCAA0B,IAAI,SAAS,CAAC,SAAS,CAAC;AAAA,IACpD;AAEA,eAAW,CAAC,SAAS,iBAAiB,KAAK,2BAA2B;AACpE,YAAM,aAAa,4BAA4B,OAAO;AACtD,UAAI,WAAW,WAAW,GAAG;AAC3B;AAAA,MACF;AAEA,YAAM,oBAAoB,kBAAkB,KAAK,CAAC,SAAS,KAAK,UAAU,CAAC;AAE3E,iBAAW,aAAa,YAAY;AAClC,cAAM,EAAE,OAAO,YAAY,aAAa,IAAI;AAC5C,YAAI,MAAM,oBAAoB,KAAK,MAAM,wBAAwB,KAAK,OAAQ;AAE9E,YAAI,mBAAmB;AACrB,iBAAO,wBAAwB,OAAO,UAAU;AAChD;AAAA,QACF;AAEA,YAAI,uBAAuB;AAC3B,mBAAW,iBAAiB,mBAAmB;AAC7C,qBAAW,QAAQ,cAAc;AAC/B,gBAAI,SAAS,eAAe,IAAI,GAAG;AACjC,qCAAuB;AACvB;AAAA,YACF;AAAA,UACF;AACA,cAAI,sBAAsB;AACxB;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,qBAAsB;AAE3B,eAAO,wBAAwB,OAAO,UAAU;AAAA,MAClD;AAAA,IACF;AAAA,EACF,CAAC;AAEH,SAAO,EAAE,aAAa,cAAc,eAAe,SAAS;AAC9D;;;ACxeA,SAAS,SAAAG,QAAO,YAAAC,WAAU,UAAAC,UAAQ,UAAAC,SAAQ,cAAAC,mBAAkB;;;ACA5D,SAAS,SAAAC,QAAc,UAAAC,gBAAc;AA8B9B,IAAM,uCAAuC,CAClD,WACA,aAEA,UAAU,mBAAmB;AAAA,EAC3BC,SAAO;AAAA,IAAQ,CAAC,QACd,OAAO,CAAC,WACJA,SAAO,OACD,OAAO;AAAA,MACX,MAAM;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,WAAW,QAAQ;AAAA,MAC5B,MAAM;AAAA,IACR,CAAC;AAAA,EACP;AACF;AAWK,IAAM,wCAAwC,CACnD,OACA,aAEAA,SAAO,KAAK,MAAM;AAChB,QAAM,UAAU,MAAM,QAAQ,OAAOC,OAAM,WAAW,EAAE,IAAI,CAAC,WAAW,OAAO,MAAM;AACrF,QAAM,UAAU,QAAQ;AAAA,IACtB,CAAC,MAAM,KAAK,OAAO,MAAM,YAAa,EAAU,SAAS;AAAA,EAC3D;AAEA,MAAI,CAAC,SAAS;AACZ,WAAOD,SAAO;AAAA,EAChB;AAEA,QAAM,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU;AACxE,QAAM,MACJ,MAAM,QAAQ,QAAQ,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAe,OAAO,MAAM,QAAQ,IAChF,QAAQ,IAA8B,KAAK,IAAI,IAChD;AAEN,SAAa,OAAO;AAAA,IAClB,MAAM;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS,wCAAwC,OAAO;AAAA,IACxD,MACE,OAAO;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACH,CAAC,EAAE,KAAKA,SAAO,OAAO;;;ACtFxB,IAAM,oBAAoB,uBAAO,IAAI,+BAA+B;AACpE,IAAM,kBAAkB,uBAAO,IAAI,6BAA6B;AAChE,IAAM,iBAAiB,uBAAO,IAAI,4BAA4B;AAE9D,IAAM,eAAe,CAAC,QAAgB,KAAa,UAAyB;AAC1E,SAAO,eAAe,QAAQ,KAAK;AAAA,IACjC;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,IAAM,wBAAwB,CAAC,UAAyB;AAC7D,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,eAAa,OAAiB,mBAAmB,IAAI;AACvD;AAEO,IAAM,oBAAoB,CAAC,UAChC,QAAQ,SAAS,OAAO,UAAU,YAAa,MAAc,iBAAiB,MAAM,IAAI;AAEnF,IAAM,iBAAiB,CAAC,OAAgB,aAA6B;AAC1E,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,eAAa,OAAiB,iBAAiB,QAAQ;AACzD;AAEO,IAAM,cAAc,CAAC,UAAyC;AACnE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,SAAQ,MAAc,eAAe;AACvC;AAEO,IAAM,cAAc,CAAC,SAAwB;AAClD,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AACvC,eAAa,MAAgB,gBAAgB,IAAI;AACnD;AAEO,IAAM,YAAY,CAAC,SACxB,QAAQ,QAAQ,OAAO,SAAS,YAAa,KAAa,cAAc,MAAM,IAAI;;;AF1BpF,IAAM,iBAAiB,OAAiB,EAAE,SAAS,MAAM;AAElD,IAAM,kBAAkB,CAAU,SAOA;AACvC,QAAM,EAAE,KAAK,QAAQ,SAAS,WAAW,UAAU,WAAW,IAAI;AAClE,QAAM,kBAAkB;AAExB,SAAOE,SAAO,IAAI,aAAa;AAC7B,UAAM,0BAA0B,CAC9B,KACA,UACA,cACG;AACH,YAAM,eAAeA,SAAO;AAAA,QAC1BA,SAAO,eAAe,KAAe,kBAAkB,SAAS;AAAA,QAChE;AAAA,QACA;AAAA,MACF;AAGA,YAAM,YAAYA,SAAO,aAAa;AAAA,QACpC,kBAAkB;AAAA,MACpB,CAAC,EAAE,YAA0C;AAE7C,YAAM,gBAAgB,YAClBA,SAAO,eAAe,WAA4B,qBAAqB,SAAS,IAChF;AAEJ,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AAEA,YAAM,eAAmD;AAAA,QACvD,IAAI,UAAU;AACZ,iBAAO,SAAS;AAAA,QAClB;AAAA,MACF;AAEA,aAAOA,SAAO,eAAe,eAAgC,sBAAsB,YAAY;AAAA,IACjG;AAEA,UAAM,yBAAyB,CAAa,QAC1CA,SAAO,IAAI,aAAa;AACtB,YAAM,UAAU,OAAOA,SAAO,cAAc,cAAc;AAC1D,UAAIC,QAAO,OAAO,OAAO,GAAG;AAC1B,eAAO,OAAO;AAAA,MAChB;AACA,YAAM,OAAO,QAAQ;AACrB,YAAM,UAAU,KAAK,YAAY,OAAOC,UAAS,MAAM,KAAK,KAAK;AAMjE,YAAM,aAAc,OAAOF,SAAO,SAAa;AAC/C,YAAM,YAAYG,YAAW,MAAM,SAAuC,UAAU;AAEpF,aAAO,OAAOH,SAAO,gBAAgB,KAAY,SAAgB;AAAA,IACnE,CAAC;AAEH,UAAM,eAAe,CAAC,WAIK,SAAS,GAAG,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,OAAO,MAAM,KAAK;AAEvF,UAAM,0BAA0B,CAAC,UAAmB,UAAqD;AACvG,YAAM,OAAqB,iBAAiB,QAAQ;AAEpD,YAAM,cAAc,MAAM,cAAc,MAAM,MAAM,SAAS,QAAQ,CAAC;AAEtE,YAAM,kBAAkB,MAAM,mBAAmB,MAAM,KAAK,aAAa;AAEzE,YAAM,YAAY,MAAM,gBAAgB,MAAM,QAAQ;AAEtD,YAAM,OAAO,MAAM,gBAAgB,MAAM;AACzC,YAAM,aAAa,QAAQ,KAAK,SAAS,IAAI,GAAG,IAAI,MAAM;AAE1D,YAAM,SAAS,MAAM,kBAAkB,MAAM;AAE7C,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,gBAAgB,aAAa,UAAU,GAAG,SAAS;AAAA,QACnD,MAAM,aAAa,MAAM;AAAA,MAC3B;AAAA,IACF;AAEA,UAAM,qBAAqB,CAAC,UAAe;AACzC,UAAII,OAAM,kBAAkB,KAAK,GAAG;AAClC,eAAOJ,SAAO,UAAU,KAAK;AAAA,MAC/B;AAEA,YAAM,mBAAmB,MAAM,QAC5B,OAAO,CAAC,WAAgBI,OAAM,aAAa,MAAM,KAAKA,OAAM,YAAY,MAAM,CAAC,EAC/E,IAAI,CAAC,WAAiBA,OAAM,aAAa,MAAM,IAAI,OAAO,QAAQ,OAAO,MAAO,EAChF,KAAK,CAAC,QAAa,KAAK,SAAS,iBAAiB;AAErD,YAAM,OAAO,UACV,YAAY,OAAO;AAAA,QAClB,OAAO;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV,CAAC,EACA;AAAA,QACCJ,SAAO,IAAI,MAA2B,qCAAqC,WAAW,QAAQ,CAAC;AAAA,QAC/FA,SAAO,IAAI,MAA2B,sCAAsC,OAAO,QAAQ,CAAC;AAAA,QAC5FA,SAAO,IAAI,MAAyB,yBAAyB,OAAO,QAAQ,CAAC;AAAA,QAC7EA,SAAO,IAAI,MAAuB,yCAAyC,OAAO,QAAQ,CAAC;AAAA,QAC3FA,SAAO,IAAI,MAAuB,mCAAmC,OAAO,QAAQ,CAAC;AAAA,MACzF;AAIA,UAAI,kBAAkB;AACpB,eAAO;AAAA,MACT;AAEA,aAAO,KAAK,KAAKA,SAAO,QAAQ,MAAMA,SAAO,UAAU,KAAK,CAAC,CAAC;AAAA,IAChE;AAEA,UAAM,oBAAoB,CAAC,UACzBI,OAAM,kBAAkB,KAAK,IACzBJ,SAAO,UAAU,KAAK,IACtBA,SAAO,KAAK;AAAA,MACVA,SAAO,IAAI,MAA2B,qCAAqC,WAAW,QAAQ,CAAC;AAAA,MAC/FA,SAAO,IAAI,MAA2B,sCAAsC,OAAO,QAAQ,CAAC;AAAA,MAC5FA,SAAO,IAAI,MAAyB,yBAAyB,OAAO,QAAQ,CAAC;AAAA,MAC7EA,SAAO,IAAI,MAAuB,yCAAyC,OAAO,QAAQ,CAAC;AAAA,MAC3FA,SAAO,IAAI,MAAuB,mCAAmC,OAAO,QAAQ,CAAC;AAAA,MACrFA,SAAO,QAAQ,MAAMA,SAAO,UAAU,KAAK,CAAC;AAAA,IAC9C;AAEN,UAAM,cAAc,CAAC,UACnB,QAAQ,SAAS,OAAO,UAAU,YAAY,SAAU,SAAiB,WAAY,KAAa;AAEpG,UAAM,qBAAqB,CAAC,UAC1B,MAAM,QACH,OAAO,CAAC,WAAgBI,OAAM,aAAa,MAAM,KAAKA,OAAM,YAAY,MAAM,CAAC,EAC/E,IAAI,CAAC,WAAiBA,OAAM,aAAa,MAAM,IAAI,OAAO,QAAQ,OAAO,MAAO,EAChF,KAAK,CAAC,QAAa,KAAK,SAAS,iBAAiB;AAEvD,UAAM,kBAAkB,CAAC,OAAgB,oBAAyD;AAChG,YAAM,WAA2B,YAAY,KAAK,KAAK,mBAAmB,eAAe;AAEzF,UAAI,YAAY,KAAK,GAAG;AACtB,cAAMC,QAAO;AACb,YAAI,CAAiB,YAAYA,KAAI,GAAG;AACtC,UAAgB,eAAeA,OAAa,QAAQ;AAAA,QACtD;AACA,eAAOA;AAAA,MACT;AAEA,YAAM,OAAiC;AAAA,QACrC,OAAOL,SAAO;AAAA,QACd,KAAK;AAAA,MACP;AACA,MAAgB,eAAe,MAAa,QAAQ;AACpD,aAAO;AAAA,IACT;AAEA,UAAM,eAAe,CAAC,aAAiD;AACrE,YAAM,OAAiC;AAAA,QACrC,OAAOA,SAAO;AAAA,QACd,KAAKA,SAAO;AAAA,MACd;AACA,MAAgB,eAAe,MAAa,QAAQ;AACpD,MAAgB,YAAY,IAAW;AACvC,aAAO;AAAA,IACT;AAEA,UAAM,iCAAiC,CACrC,MACA,WACA,oBACsC;AACtC,YAAM,cAAc,QAAwB,YAAY,IAAI,CAAC;AAC7D,YAAM,WAA2B,YAAY,IAAI,KAAK,mBAAmB,eAAe;AACxF,UAAI,CAAC,aAAa;AAChB,QAAgB,eAAe,MAAa,QAAQ;AAAA,MACtD;AAEA,YAAM,aAAa,wBAAwB,KAAK,OAAO,UAAU,SAAS;AAC1E,YAAM,WAAW,uBAAuB,wBAAwB,KAAK,KAAK,UAAU,SAAS,CAAC;AAE9F,eAAS,UAAU;AACnB,aAAO,WAAW;AAAA,QAChBA,SAAO,WAAW,kBAAkB;AAAA,QACpCA,SAAO;AAAA,UAAQ,MACG,UAAU,IAAI,IAC1BA,SAAO,OACPA,SAAO,KAAK,MAAM;AAChB,qBAAS,UAAU;AAAA,UACrB,CAAC,EAAE;AAAA,YACDA,SAAO,QAAQ,MAAMA,SAAO,WAAW,SAAS,KAAKA,SAAO,WAAW,kBAAkB,CAAC,CAAC,CAAC;AAAA,YAC5FA,SAAO;AAAA,UACT;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAEA,UAAM,+BAA+B,CACnC,OACA,WACA,UACA,UAC0D;AAC1D,UAAI,CAAiB,kBAAkB,KAAK,GAAG;AAC7C,eAAOA,SAAO,QAAQ,gBAAgB,OAAO,QAAQ,CAAC;AAAA,MACxD;AAEA,UAAI,QAAQ,GAAG;AACb,eAAOA,SAAO,KAAK,IAAI,MAAM,6EAA6E,CAAC;AAAA,MAC7G;AAGA,aAAO,wBAAwB,OAAuC,UAAU,SAAS,EAAE;AAAA,QACzFA,SAAO,iBAAiB;AAAA,UACtB,WAAW,CAAC,SAAS,6BAA6B,MAAM,WAAW,UAAU,QAAQ,CAAC;AAAA,UACtF,WAAW,CAAC,UAAU;AACpB,gBAAI,mBAAmB,KAAK,GAAG;AAC7B,qBAAO,mBAAmB,KAAK,EAAE,KAAKA,SAAO,GAAG,aAAa,QAAQ,CAAC,CAAC;AAAA,YACzE;AACA,mBAAOA,SAAO,IAAI,aAAa;AAC7B,qBAAO,mBAAmB,KAAK;AAC/B,qBAAO,OAAOA,SAAO,UAAU,KAAK;AAAA,YACtC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,uBAAuB,CAC3B,UACA,cAC0D;AAC1D,UAAI,CAAiB,kBAAkB,QAAQ,GAAG;AAChD,YAAI,YAAY,QAAQ,GAAG;AACzB,iBAAOA,SAAO,QAAQ,gBAAgB,QAAQ,CAAC;AAAA,QACjD;AAEA,cAAMM,YAA2B,YAAY,QAAQ,KAAK,eAAe;AACzE,cAAM,YAAY;AAKlB,cAAM,OAAiC;AAAA,UACrC,OAAON,SAAO;AAAA,UACd,KAAK,UAAU;AAAA,YACbA,SAAO;AAAA,cAAQ,CAAC,UACd,CAAiB,kBAAkB,KAAK,IACpCA,SAAO,OACP,6BAA6B,OAAO,WAAWM,WAAU,CAAC,EAAE;AAAA,gBAC1DN,SAAO,QAAQ,CAAC,iBAAiB,+BAA+B,cAAc,WAAWM,SAAQ,CAAC;AAAA,cACpG;AAAA,YACN;AAAA,UACF;AAAA,QACF;AACA,QAAgB,eAAe,MAAaA,SAAQ;AACpD,eAAON,SAAO,QAAQ,IAAI;AAAA,MAC5B;AAGA,YAAM,WAA2B,YAAY,QAAQ,KAAK,eAAe;AACzE,eAAS,UAAU;AAEnB,aAAO,wBAAwB,UAA0C,UAAU,SAAS,EAAE;AAAA,QAC5FA,SAAO,iBAAiB;AAAA,UACtB,WAAW,CAAC,UAAU,6BAA6B,OAAO,WAAW,UAAU,CAAC;AAAA,UAChF,WAAW,CAAC,UAAU;AACpB,gBAAI,mBAAmB,KAAK,GAAG;AAC7B,qBAAO,mBAAmB,KAAK,EAAE,KAAKA,SAAO,GAAG,aAAa,QAAQ,CAAC,CAAC;AAAA,YACzE;AACA,mBAAOA,SAAO,IAAI,aAAa;AAC7B,qBAAO,mBAAmB,KAAK;AAC/B,qBAAO,OAAOA,SAAO,UAAU,KAAK;AAAA,YACtC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,mBAAmB,CACvB,MACA,cAEAA,SAAO,IAAI,aAAa;AACtB,YAAM,cAAc,QAAwB,YAAY,IAAI,CAAC;AAC7D,YAAM,WAA2B,YAAY,IAAI,KAAK,eAAe;AACrE,UAAI,CAAC,aAAa;AAChB,QAAgB,eAAe,MAAa,QAAQ;AAAA,MACtD;AAEA,YAAM,aAAa,wBAAwB,KAAK,OAAO,UAAU,SAAS;AAC1E,YAAM,WAAW,uBAAuB,wBAAwB,KAAK,KAAK,UAAU,SAAS,CAAC;AAE9F,eAAS,UAAU;AACnB,aAAO,WAAW,KAAKA,SAAO,WAAW,kBAAkB,CAAC;AAE5D,UAAoB,UAAU,IAAI,GAAG;AACnC;AAAA,MACF;AAEA,sBAAgB;AAAA,QACdA,SAAO,KAAK,MAAM;AAChB,mBAAS,UAAU;AAAA,QACrB,CAAC,EAAE;AAAA,UACDA,SAAO,QAAQ,MAAMA,SAAO,WAAW,SAAS,KAAKA,SAAO,WAAW,kBAAkB,CAAC,CAAC,CAAC;AAAA,UAC5FA,SAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAC;AAEH,UAAM,kBAA0D,CAAC;AAEjE,QAAI,aAAa;AACjB,eAAW,YAAY,QAAQ;AAC7B,YAAM,YAAY,wBAAwB,UAAU,UAAU;AAC9D,oBAAc;AAEd,YAAM,gBAAgB,OAAO,qBAAqB,UAAU,SAAS;AACrE,aAAO,iBAAiB,eAAe,SAAS;AAAA,IAClD;AAGA,WAAO,UAAU,gBAAgB,KAAKA,SAAO,WAAW,iBAAiB,CAAC;AAG1E,UAAM,cAAc,OAAOA,SAAO,cAAuB,GAAG;AAC5D,QAAIC,QAAO,OAAO,WAAW,GAAG;AAC9B,YAAM,WAAW,YAAY;AAC7B,YAAM,WAAW,OAAO,UAAU;AAElC,YAAM,mBAA6B,EAAE,SAAS,MAAM;AACpD,YAAM,eAAmD;AAAA,QACvD,IAAI,UAAU;AACZ,iBAAO,iBAAiB;AAAA,QAC1B;AAAA,MACF;AAEA,YAAM,qBAAqB,CAAa,QACtCD,SAAO;AAAA,QACLA,SAAO;AAAA,UACLA,SAAO;AAAA,YACLA,SAAO,eAAe,KAA4C,KAAK,QAAQ;AAAA,YACrE;AAAA,YACV;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACiB;AAAA,QACjB;AAAA,MACF;AAEF,YAAM,WAAW,CACf,OACA,cAEAA,SAAO;AAAA,QACL;AAAA,UACE;AAAA,YACE,UAAU,YACN,UAAU,qBACV,UAAU,WACR,UAAU,oBACV,UAAU;AAAA,UAClB,EAAE,KAAKA,SAAO,MAAM;AAAA,QACtB,EAAE;AAAA,UACAA,SAAO,WAAW,CAAC,UACjB,UAAU,YAAY,OAAO;AAAA,YAC3B,OAAO;AAAA,YACP,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UACV,CAAC,CAAC;AAAA,QACN;AAAA,MACF,EAAE,KAAKA,SAAO,MAAM;AAEtB,UAAI,SAAS,gBAAgB,SAAS,GAAG;AACvC,eAAO,SAAS,WAAW,SAAS,UAAU,SAAS;AAAA,MACzD;AACA,UAAI,SAAS,eAAe,SAAS,GAAG;AACtC,eAAO,SAAS,UAAU,SAAS,UAAU,QAAQ;AAAA,MACvD;AACA,UAAI,SAAS,cAAc,SAAS,KAAK,OAAO,SAAS,UAAU,YAAY,YAAY;AACzF,eAAO,SAAS,SAAS,SAAS,UAAU,OAAO;AAAA,MACrD;AAAA,IACF;AAGA,WAAOA,SAAO,QAAQ,iBAAiB,CAAC,QAAQ,KAAK,EAAE,SAAS,KAAK,CAAC;AAGtE,WAAO,UAAU;AAGjB,WAAOA,SAAO;AAAA,EAChB,CAAC;AACH;;;AGtaA,SAAS,UAAAO,UAAQ,OAAAC,YAAW;AAW5B,IAAM,QAAQ,CAAC,YAA2C;AACxD,QAAM,OAAO,OAAO,QAAQ,SAAS,WAAW,QAAQ,OAAO;AAC/D,QAAM,UAAU,QAAQ;AACxB,MAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,WAAO,GAAG,QAAQ,IAAI,KAAK,IAAI;AAAA,EACjC;AAEA,QAAM,SAAS;AACf,QAAM,gBAAgB,OAAO,OAAO,kBAAkB,WAAW,OAAO,gBAAgB;AACxF,QAAM,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AACtE,QAAM,WAAW,OAAO,OAAO,aAAa,WAAW,OAAO,WAAW;AACzE,QAAM,YAAY,OAAO,OAAO,cAAc,WAAW,OAAO,YAAY;AAE5E,SAAO,GAAG,QAAQ,IAAI,KAAK,IAAI,KAAK,aAAa,KAAK,OAAO,KAAK,QAAQ,KAAK,SAAS;AAC1F;AAEA,IAAMC,SAAQC,SAAO,UAAU,CAAC,UAAU,MAAM,iBAAiB;AAgB1D,IAAMC,QAAO,CAAC,SAInBD,SAAO,IAAI,aAAa;AACtB,QAAM,2BAA2B,OAAOE,KAAI,KAA2D,CAAC,CAAC;AAEzG,QAAM,6BAA6B,OAAOA,KAAI,KAAK,KAAK;AACxD,QAAM,6BAA6B,OAAOA,KAAI,KAAK,KAAK;AAExD,QAAM,uBAAuE,CAAC,WAC5EF,SAAO,IAAI,aAAa;AACtB,UAAM,SAAS,OAAO;AAEtB,UAAM,eAAe,OAAO,gBAAgB;AAC5C,UAAM,sBAAsB,OAAO,uBAAuB;AAE1D,UAAM,YAAY,OAAO;AACzB,UAAM,iBACJ,gBAAgB,UAAU,gBAAgB,uBAAuB,UAAU;AAE7E,QAAI,CAAC,gBAAgB;AACnB;AAAA,IACF;AAEA,UAAM,aAAa,OAAO;AAC1B,UAAM,MAAM,OAAOD;AACnB,UAAM,MAAM,MAAM,OAAO,OAAO;AAEhC,UAAM,WAAW,OAAOG,KAAI;AAAA,MAC1B;AAAA,MACA,CACE,UAIG;AACH,cAAM,OAAO,MAAM,GAAG;AACtB,YAAI,QAAQ,MAAM,KAAK,kBAAkB,YAAY;AACnD,iBAAO;AAAA,YACL,EAAE,MAAM,WAAW;AAAA,YACnB;AAAA,cACE,GAAG;AAAA,cACH,CAAC,GAAG,GAAG;AAAA,gBACL,iBAAiB,KAAK;AAAA,gBACtB,iBAAiB,KAAK,kBAAkB;AAAA,cAC1C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,cAAM,kBAAkB,MAAM,mBAAmB;AACjD,eAAO;AAAA,UACL,EAAE,MAAM,QAAQ,gBAAgB;AAAA,UAChC;AAAA,YACE,GAAG;AAAA,YACH,CAAC,GAAG,GAAG;AAAA,cACL,iBAAiB;AAAA,cACjB,iBAAiB;AAAA,YACnB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS,SAAS,YAAY;AAChC;AAAA,IACF;AAEA,UAAM,UAAmC;AAAA,MACvC,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,cAAc,UAAU;AAAA,QACxB,mBAAmB,UAAU;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,iBAAiB,SAAS,kBAAkB,IAAK,aAAwB;AAAA,MACzE,iBAAiB,SAAS;AAAA,MAC1B,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AACA,QAAI,OAAO,OAAO,aAAa,YAAY,OAAO,SAAS,OAAO,QAAQ,GAAG;AAC3E,cAAQ,WAAW,OAAO;AAAA,IAC5B;AACA,QAAI,OAAO,QAAQ,YAAY,QAAW;AACxC,YAAM,aAAa,MAAM;AACvB,YAAI;AACF,iBAAO,KAAK,MAAM,KAAK,UAAU,OAAO,QAAQ,OAAO,CAAC;AAAA,QAC1D,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MACF,GAAG;AACH,UAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,gBAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAEA,WAAa,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM,OAAO,QAAQ;AAAA,QACrB,MAAM,OAAO,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAEH,QAAM,8BAAqF,CAAC,WAC1FF,SAAO,IAAI,aAAa;AACtB,UAAM,SAAS,OAAO;AAGtB,QAAI,OAAO,qBAAqB,eAAe,OAAO,mBAAmB,MAAM;AAC7E,YAAMG,cAAa,OAAOD,KAAI;AAAA,QAAO;AAAA,QAA4B,CAAC,YAChE,UAAW,CAAC,OAAO,IAAI,IAAe,CAAC,MAAM,IAAI;AAAA,MACnD;AACA,UAAI,CAACC,aAAY;AACf;AAAA,MACF;AAEA,YAAMC,WAAmC;AAAA,QACvC,aAAa,OAAO;AAAA,QACpB,OAAO,OAAO;AAAA,MAChB;AAEA,aAAa,OAAO;AAAA,QAClB,MAAM;AAAA,QACN,UAAU,KAAK;AAAA,QACf,YAAY,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,MACE;AAAA,QAEF,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM,OAAO,QAAQ;AAAA,UACrB,MAAM,OAAO,QAAQ;AAAA,UACrB,SAAAA;AAAA,QACF;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAGA,UAAM,qBACJ,OAAO,8BAA8B,eAAe,OAAO,qBAAqB;AAElF,QAAI,CAAC,oBAAoB;AACvB;AAAA,IACF;AAEA,UAAM,aAAa,OAAOF,KAAI;AAAA,MAAO;AAAA,MAA4B,CAAC,YAChE,UAAW,CAAC,OAAO,IAAI,IAAe,CAAC,MAAM,IAAI;AAAA,IACnD;AACA,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AAEA,UAAM,UAAmC;AAAA,MACvC,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,IAChB;AAEA,WAAa,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,MACE;AAAA,MAEF,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM,OAAO,QAAQ;AAAA,QACrB,MAAM,OAAO,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAEH,SAAO,EAAE,sBAAsB,4BAA4B;AAC7D,CAAC;;;A7B3GH,IAAI,kBAAkB;AAEtB,IAAM,wBAAwB,MAAc;AAC1C,qBAAmB;AACnB,SAAO,IAAI,eAAe;AAC5B;AAEO,IAAMG,QAAO,CAClB,cACA,UAAyC,CAAC,MAC2B;AACrE,QAAM,UAAUC,SAAO,IAAI,aAAa;AACtC,UAAM,WAAW,QAAQ,cAAc,OAAO,QAAQ,cAAc,OAAOC,iBAAgB,KAAK,YAAY;AAE5G,UAAM,YAAY,OAAOC,QAAO,UAAkC;AAClE,UAAM,kBAAkB,OAAOA,QAAO,UAAkC;AACxE,QAAI,2BAA2B;AAE/B,UAAM,gBAAgBC,QAAO;AAAA,MAC3BH,SAAO,IAAI,aAAa;AACtB,oCAA4B;AAC5B,eAAOA,SAAO;AAAA,UAAa,MACzBA,SAAO,KAAK,MAAM;AAChB,uCAA2B,KAAK,IAAI,GAAG,2BAA2B,CAAC;AAAA,UACrE,CAAC;AAAA,QACH;AACA,eAAOG,QAAO,WAAW,SAAS;AAAA,MACpC,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,QAAQ,YAAY;AACrC,UAAM,aAAa,wBAAwB,QAAQ,UAAU,KAAK,sBAAsB;AACxF,UAAM,oBAAoB,sBAAsB,UAAU,UAAU;AACpE,UAAM,eAAe,OAAOH,SAAO,QAAc,mBAAmB,EAAE,KAAKA,SAAO,KAAK;AACvF,UAAM,YAAY,OAAiB,qBAAqB;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,yBAAyB,OAA8BD,MAAK;AAAA,MAChE,UAAU,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AAMD,UAAM,mBAAmB,OAAOC,SAAO;AAAA,MACrC;AAAA,IACF;AACA,UAAM,yBAAsEI,QAAO,OAAO,gBAAgB,IACtG,iBAAiB,MAAM,kBACvB;AAEJ,UAAM,kBACJ,QAAQ,kBAAkB,mBAAmB,0BAA0B,kCAAkC;AAE3G,UAAM,6BAA6B,+BAA+B;AAAA,MAChE,UAAU,QAAQ;AAAA,MAClB,kBAAkB,QAAQ;AAAA,IAC5B,CAAC;AAED,UAAM,2BAA2B,6BAA6B;AAAA,MAC5D,UAAU,QAAQ;AAAA,MAClB,aAAa;AAAA,IACf,CAAC;AAED,UAAM,+BAA+B,6BAA6B;AAAA,MAChE,UAAU,QAAQ;AAAA,IACpB,CAAC;AAED,UAAM,uBAAuB,yBAAyB;AAAA,MACpD,UAAU,QAAQ;AAAA,MAClB,kBAAkB,QAAQ;AAAA,IAC5B,CAAC;AAED,UAAM,YAAY,QAAQ,kBACtB,OAAO,QAAQ,kBACf,OAAOJ,SAAO,IAAI,aAAa;AAC7B,YAAM,SAAS,OAAO,yBAAyB;AAC/C,aAAO,OAAOE,QAAO,QAAW,OAAO,4BAA4B;AAAA,IACrE,CAAC;AAEH,UAAM,4BAA4B;AAClC,UAAM,aAAyB;AAAA,MAC7B,SAAS;AAAA,MACT,wBAAwB;AAAA,MACxB,mBAAmB;AAAA,MACpB,oBAAoB;AAAA,QAClB,YAAY;AAAA,QACZ,qBAAqB;AAAA,MACvB;AAAA,MACA,wBAAwB;AAAA,MACxB,6BAA6B;AAAA,MAC5B,oBAAoB;AAAA,MACpB,aAAa,CAAC;AAAA,IAChB;AAID,QAAI,cAA+C;AAEnD,QAAI,0BAAoD,CAAC;AACzD,QAAI,6BAAkD,oBAAI,IAAI;AAE/D,UAAM,aAAa,IAAU,WAAW,UAAU;AAClD,UAAM,gBAA8BH,MAAQ;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,wBAAwB,MAAM;AAC5B,cAAM,aAAmB,WAAW,SAAiB;AACrD,YAAI,CAAC,cAAc,WAAW,YAAa,QAAO;AAClD,eAAO,WAAW;AAAA,MACpB;AAAA,IACF,CAAC;AAMA,UAAM,aAA8B,YAAe;AAAA,MACjD;AAAA,MACA;AAAA,MACA;AAAA,MACA,wBAAwB,MAAM;AAC5B,cAAM,aAAmB,WAAW,SAAiB;AACrD,YAAI,CAAC,cAAc,WAAW,YAAa,QAAO;AAClD,eAAO,WAAW;AAAA,MACpB;AAAA,MACA,gBAAgB,MAAM;AAAA,IACxB,CAAC;AAEF,UAAM,mBAAgE,CACpE,MACA,QACA,MACA,IACA,aACA,WACS;AACT,UAAI,wBAAwB,SAAS,GAAG;AACtC,cAAM,WAAW,WAAW,SAAS;AAErC,cAAM,oBAAoB,CAAC,UAAoF;AAC7G,cAAI,UAAU,OAAW,QAAO;AAChC,cAAI,UAAU,IAAK,QAAO;AAE1B,cAAI,OAAO,UAAU,UAAU;AAC7B,gBAAI,CAAC,SAAU,QAAO;AACtB,gBAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpC,kBAAM,MAAM,KAAK,MAAM,KAAK;AAC5B,gBAAI,MAAM,EAAG,QAAO;AACpB,kBAAMM,YAAW,SAAS,WAAW,GAAG;AACxC,mBAAOA,aAAY,MAAM,QAAQA,SAAQ,IAAIA,YAAW;AAAA,UAC1D;AAEA,cAAI,OAAO,UAAU,UAAU;AAC7B,gBAAI,CAAC,SAAU,QAAO;AACtB,kBAAM,KAAK,SAAS,gBAAgB,IAAI,KAAK;AAC7C,gBAAI,MAAM,KAAM,QAAO;AACvB,kBAAMA,YAAW,SAAS,WAAW,EAAE;AACvC,mBAAOA,aAAY,MAAM,QAAQA,SAAQ,IAAIA,YAAW;AAAA,UAC1D;AAEA,gBAAM,aAAa,mBAAmB,KAAK;AAC3C,iBAAO,cAAc;AAAA,QACvB;AAEA,cAAM,WAAW,kBAAkB,IAAI;AAEvC,cAAM,iBAAiB,CAAC,YAA4F;AAClH,gBAAM,QAAQ,QAAQ,SAAS,wBAAwB,CAAC;AACxD,gBAAM,YAAY,QAAQ,MAAM,KAAK,GAAG,IAAI;AAC5C,gBAAM,eACJ,QAAQ,iBAAiB,SACrB,cACA,QAAQ,iBAAiB,MACvB,MACA,QAAQ,aAAa,KAAK,GAAG;AAErC,gBAAM,MAAW,IAAI;AAAA,YACnB;AAAA,WACc,QAAQ,YAAY,SAAS;AAAA,aAC3B,UAAU;AAAA,QACf,SAAS;AAAA,OACV,YAAY;AAAA,SACV,OAAO,MAAM,CAAC;AAAA;AAAA,UAE5B;AACA,cAAI,OAAO;AACX,cAAI,OAAO;AACX,cAAI,WAAW,QAAQ;AACvB,cAAI,aAAa;AACjB,cAAI,SAAS;AACb,cAAI,OAAO;AACX,gBAAM;AAAA,QACR;AAEA,cAAM,kBAAkB,CAAC,UAAkD;AACzE,cAAI,UAAU,UAAa,UAAU,KAAK;AACxC,mBAAO,eAAe,EAAE,cAAc,MAAM,CAAC;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AAEA,YAAI,WAAW,wBAAwB;AACrC,gBAAM,oBAAoB,gBAAgB,QAAQ;AAClD,gBAAM,MAAM,MAAM,iBAAiB;AACnC,cAAI,CAAC,2BAA2B,IAAI,GAAG,GAAG;AACxC,2BAAe,EAAE,cAAc,kBAAkB,CAAC;AAAA,UACpD;AAAA,QACF,OAAO;AACL,gBAAM,oBAAoB,gBAAgB,QAAQ;AAClD,qBAAW,SAAS,yBAAyB;AAC3C,gBAAI,WAAW,OAAO,iBAAiB,KAAK,WAAW,mBAAmB,KAAK,GAAG;AAChF,6BAAe,EAAE,cAAc,mBAAmB,MAAM,CAAC;AAAA,YAC3D;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAiB,YAAY,YAAY,MAAM,QAAQ,MAAM,IAAI,aAAa,MAAM;AAAA,IACtF;AAEA,UAAMC,eAAsD,CAAC,cAAoB;AAC/E,UAAI,CAAC,WAAW,QAAS;AACzB,MAAiB,YAAY,YAAY,SAAc;AAAA,IACzD;AAEA,UAAM,iCAAiC,OAAOC,OAAM,UAAgB;AACpE,UAAM,gCAUF;AAAA,MACF,QAAQ;AAAA,MACR,mBAAmB,oBAAI,IAAI;AAAA,MAC3B,qBAAqB,MAAM,4CAA4C;AAAA,MACvE,aAAa;AAAA,MACb,uBAAuB;AAAA,MACvB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,MACtB,iBAAiB;AAAA,IACnB;AAEA,UAAM,oBAIF;AAAA,MACF,QAAQ;AAAA,MACR,eAAe,CAAC;AAAA,MAChB,UAAU;AAAA,IACZ;AAQA,UAAM,gBAAgB;AACtB,UAAM,aAAa;AAAA,MACjB,QAAQ,IAAI,MAAwD,aAAa;AAAA,MACjF,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AACA,UAAM,UAAU,oBAAI,IAAkD;AAOtE,UAAM,0BAA0B,OAAiB,+BAA+B;AAChF,UAAM,qBAAqB,OAAOP,SAAO;AAAA,MACzB;AAAA,IAChB;AACA,UAAM,kBAAkBI,QAAO,OAAO,kBAAkB,IAAI,mBAAmB,QAAQ;AACvF,UAAM,2BAA2B,OAAqB,gCAAgC;AAAA,MACpF,UAAU,QAAQ;AAAA,IACpB,CAAC;AAED,UAAM,6BAA6B,OAAOJ,SAAO;AAAA,MACjC;AAAA,IAChB;AACA,UAAM,0BAA0BI,QAAO,OAAO,0BAA0B,IACpE,2BAA2B,QAC3B;AAEJ,UAAM,6BAA6B,CACjC,WACA,YAC6D;AAC7D,YAAM,WAAW,yBAAyB,iBAAiB,SAAS;AACpE,UAAI,CAAC,YAAY,SAAS,WAAW,EAAG,QAAO;AAE/C,YAAM,QAAQ;AACd,YAAM,OAAO,oBAAI,IAAY;AAC7B,YAAM,MAAwD,CAAC;AAE/D,iBAAW,QAAQ,SAAS;AAC1B,aAAK,IAAI,KAAK,MAAM;AACpB,YAAI,KAAK,IAAI;AAAA,MACf;AAEA,iBAAW,QAAQ,OAAO;AACxB,YAAI,CAAC,QAAQ,OAAO,KAAK,WAAW,YAAY,KAAK,OAAO,WAAW,EAAG;AAC1E,YAAI,KAAK,IAAI,KAAK,MAAM,EAAG;AAC3B,aAAK,IAAI,KAAK,MAAM;AACpB,YAAI,KAAK,IAAI;AAAA,MACf;AAEA,aAAO;AAAA,IACT;AAEA,UAAM,6BAA6B,CACjC,WACA,aACA,WAEA,OAAO;AAAA,MACLJ,SAAO,eAAsC,2BAA2B;AAAA,QACtE,gBAAgB,CAAC,uBACf,uBAAuB,YAClB,cACDA,SAAO,IAAI,IAAI,MAAM,uCAAuC,kBAAkB,EAAE,CAAC;AAAA,MACzF,CAAyD;AAAA,IAC3D;AAEF,UAAM,mBAAmB,MACvBA,SAAO,QAAc,YAAY,EAAE,KAAKA,SAAO,KAAK,EAAE;AAAA,MACpDA,SAAO;AAAA,QAAI,CAAC,aACV,OAAO,aAAa,YAAY,OAAO,SAAS,QAAQ,KAAK,YAAY,IAAI,KAAK,MAAM,QAAQ,IAAI;AAAA,MACtG;AAAA,IACF;AAEF,UAAM,sBAAsB,uBAAuB;AAAA,MACjD,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IACf,CAAC;AAED,UAAM,gBAA8B;AAAA,MAClC;AAAA,MACA,2BAA2B,YAAY;AAAA,QACrC;AAAA,UACE,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAEA,UAAM,yBAAyB,OAAO,2BAA2B,YAAY,qBAAqB,cAAc,KAAK,IAAI;AAEzH,UAAM,6BAA6BA,SAAO;AAAA,MACxC,iBAAiB;AAAA,QACf,iBAAiB,QAAQ;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,kBAAgC;AAAA,MACpC;AAAA,MACA,2BAA2B,mBAAmB;AAAA,QAC5C;AAAA,UACE,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,QACR;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAEA,UAAM,eAAe,OAAO;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,gBAAgB,KAAK;AAAA,IACvB;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,EAAE,MAAM,EAAE,UAAU,WAAW,EAAE;AAAA,MAC3B,OAAO;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAMA,UAAM,kBAAkB,OAAOC,iBAAgB,IAAI,QAAQ;AAC3D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,EAAE,MAAM,EAAE,UAAU,WAAW,EAAE;AAAA,MAC3B,OAAO;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAEA,UAAM,kBAAkB,OAAOD,SAAO;AAAA,MACpC;AAAA,IACF;AACA,QAAII,QAAO,OAAO,eAAe,GAAG;AAClC,sBAAgB,MAAM,uBAAuB;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAEA,UAAM,oBAAoB,OAAOJ,SAAO,cAAc,cAA6D;AACnH,UAAM,cAAcI,QAAO,OAAO,iBAAiB,IAAK,kBAAkB,QAAwB;AAElG,UAAM,mBAAoB,OAAOJ,SAAO;AAAA,MACtC;AAAA,IACF;AACA,QAAI,sBAAwDI,QAAO,OAAO,gBAAgB,IAAI,iBAAiB,QAAQ;AAEvH,UAAM,mCAAmC,CAAC,SAAoE;AAC5G,UAAI,CAAC,MAAM,SAAS;AAClB,eAAO;AAAA,MACT;AAEA,YAAM,WAAWI,YAAW,UAAU,KAAK,SAAS,gBAAuB;AAC3E,aAAOJ,QAAO,OAAO,QAAQ,IAAI,SAAS,QAAQ;AAAA,IACpD;AAEA,UAAM,8BAA8B,MAClCJ,SAAO,IAAI,aAAa;AACtB,YAAM,YAAa,OAAOA,SAAO;AAAA,QAC/B;AAAA,MACF;AACA,UAAII,QAAO,OAAO,SAAS,GAAG;AAC5B,8BAAsB,UAAU;AAChC,eAAO,UAAU;AAAA,MACnB;AACA,aAAO;AAAA,IACT,CAAC;AAEH,UAAM,sBAA0C,CAAC,IAAS,OACxDJ,SAAO,IAAI,aAAa;AAKtB,UAAI,CAAC,qBAAqB;AACxB,cAAM,YAAY,OAAO,4BAA4B;AACrD,YAAI,CAAC,WAAW;AACd,gBAAM,WAAW,iCAAiC,WAAW;AAC7D,cAAI,UAAU;AACZ,kCAAsB;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAGA,aAAO,OAAQ,OAAO,SAAa,uBAA+B,IAAI,EAAE,IAAK,uBAA+B,EAAE;AAAA,IAChH,CAAC;AAEH,UAAM,yBAAyBA,SAAO;AAAA,MAAK,MACzC,mBAAsB;AAAA,QACpB;AAAA,QACA,iBAAiB,QAAQ;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA,wBAAwB,MAAM,2BAA2B;AAAA,QACzD;AAAA,QACA,UAAU,CAAC,EAAE,OAAO,MAAM,aAAa,iBAAiB,MACtDA,SAAO,IAAI,aAAa;AACtB,cAAI,YAAY;AAChB,cAAI,CAAC,WAAW;AACd,wBAAY,OAAO,4BAA4B;AAAA,UACjD;AAEA,cAAI,OAAO;AACX,cAAI,CAAC,MAAM;AACT,kBAAM,UAAU,OAAOA,SAAO,cAAc,cAA6D;AACzG,gBAAII,QAAO,OAAO,OAAO,GAAG;AAC1B,qBAAO,QAAQ;AAAA,YACjB;AAAA,UACF;AAEA,cAAI,CAAC,WAAW;AACd,kBAAM,WAAW,iCAAiC,IAAI;AACtD,gBAAI,UAAU;AACZ,0BAAY;AACZ,oCAAsB;AAAA,YACxB;AAAA,UACF;AAEA,cAAI,CAAC,aAAa,qBAAqB,SAAS,SAAS,GAAG;AAC1D,mBAAa,OAAO;AAAA,cAClB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA,QAAQ,KAAK;AAAA,cACb,OAAO,KAAK;AAAA,cACZ,SAAS;AAAA,gBACP,MAAM,KAAK,cAAc;AAAA,gBACzB,MAAM,KAAK,cAAc,KAAK,cAAc;AAAA,cAC9C;AAAA,cACA,MAAM;AAAA,cACN,UAAU;AAAA,cACV,SACE;AAAA,cACF,MACE;AAAA,cACF,MAAM;AAAA,YACR,CAAC;AAAA,UACH;AAIA,cAAI,cAAc,cAAc,GAAG;AACjC,mBAAO,cAAc;AAAA,cACnB;AAAA,cACA;AAAA,cACA,YAAY;AAAA,cACZ;AAAA,cACA,YACI,CAAC,eAAe;AACd,0BAAU,kBAAkB;AAAA,kBAC1B;AAAA,kBACA;AAAA,kBACA,UAAU,KAAK;AAAA,gBACjB,CAAC;AAAA,cACH,IACA;AAAA,YACN;AAAA,UACF;AAEA,cAAI,WAAW;AACb,kBAAM,QAAQ,OAAO,iBAAiB;AACpC,gBAAI;AACJ,gBAAI,qBAAqB,OAAO;AAC9B,oBAAM,WAAW,OAAO,6BAA6B;AACrD,yCAA2B;AAAA,gBACzB,aAAa,SAAS;AAAA,gBACtB,kBAAkB,SAAS;AAAA,gBAC3B,gBAAgB,SAAS;AAAA,gBAC3B,8BAA8B,SAAS;AAAA,gBACvC,0BAA0B,SAAS;AAAA,gBACnC,mBAAmB,SAAS;AAAA,gBAC5B,kBAAkB,KAAK;AAAA,cACzB;AAAA,YACF;AAEA,mBAAO,UAAU,eAAe;AAAA,cAC9B;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,kBAAkB;AAAA,YACpB,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA,0BAA0B;AAAA,QACzB,cAAc;AAAA,UACZ,YAAY,MAAM,WAAW;AAAA,UAC7B,2BAA2B,MAAM,WAAW;AAAA,UAC5C,sBAAsB,MAAM,WAAW;AAAA,UACvC,uBAAuB,MAAM,WAAW;AAAA,UACxC,2BAA2B,MAAM,WAAW;AAAA,UAC5C,gCAAgC,MAAM,WAAW;AAAA,UACjD,2BAA2B,CAAC,SAAS;AACnC,uBAAW,yBAAyB;AACpC,gBAAI,QAAQ,MAAM;AAChB,yBAAW,8BAA8B;AAAA,YAC3C;AAAA,UACF;AAAA,UACA;AAAA,UACA,gBAAgB,MAAM,WAAW;AAAA,QACnC;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,iBAA+B;AAAA,MACnC;AAAA,MACA,2BAA2B,eAAe;AAAA,QACxC;AAAA,UACE,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,QACR;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAEA,UAAM,EAAE,WAAW,kBAAkB,wBAAwB,IAAI,OAAO;AAAA,MACtE;AAAA,MACA;AAAA,MACA,eAAe,KAAK;AAAA,IACtB;AAEA,QAAI,8BAA8B;AAClC,QAAI,6BAA6B;AAEjC,UAAM,2BAA2B,CAAC,SAWkE;AAClG,UAAI,iBAAiB;AACrB,UAAI,gBAAoC;AACxC,UAAI,gBAAoC;AAExC,YAAM,UAAe,EAAE,gBAAgB,KAAK,mBAAmB,OAAO;AACtE,UAAI,KAAK,gBAAgB;AACvB,gBAAQ,iBAAiB,KAAK;AAAA,MAChC;AACA,UAAI,KAAK,OAAO;AACd,gBAAQ,aAAa,KAAK,MAAM;AAChC,gBAAQ,WAAW,KAAK,MAAM;AAC9B,gBAAQ,aAAa,KAAK,MAAM;AAAA,MAClC;AAEA,aAAO;AAAA,QACL,KAAK;AAAA,QACL;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,YACE,SAAS,EAAE,gBAAgB,KAAK,mBAAmB,OAAO;AAAA,YAC1D,MAAM,EAAE,UAAU,WAAW;AAAA,UAC/B;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN;AAAA,YACF;AAAA,YACA,MACEJ,SAAO,IAAI,aAAa;AACtB,oBAAM,UAAe,WAAW;AAChC,kBAAI,SAAS;AACX,iCAAiB,QAAQ;AACzB,gCAAgB,QAAQ;AAAA,cAC1B;AAEA,kBAAI,KAAK,cAAc;AACrB,gCAAgB,OAAO,iBAAiB;AAAA,cAC1C;AAEA,kBAAI,KAAK,kBAAkB;AACzB,uBAAO,KAAK,iBAAiB;AAAA,kBAC3B,QAAQ;AAAA,kBACR,OAAO;AAAA,kBACP,OAAO;AAAA,gBACT,CAAC;AAAA,cACH;AAEA,kBAAI,CAAC,QAAS;AACd,kBAAI,KAAK,gBAAgB;AACvB,wBAAQ,iBAAiB,KAAK;AAAA,cAChC;AACA,yBAAW,KAAK,KAAK,oBAAoB;AACvC,gBAAiB,cAAc,YAAY,GAAG,SAAS;AAAA,cACzD;AAAA,YACF,CAAC;AAAA,UACL;AAAA,QACF;AAAA,MACF,EAAE;AAAA,QACAA,SAAO,GAAG;AAAA,UACR,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,OAAO;AAAA,QACT,CAAU;AAAA,MACZ;AAAA,IACF;AAGA,UAAM,oCAAoCA,SAAO,IAAI,aAAa;AAChE,UAAI;AACF,eAAO,MAAM;AACX,iBAAO,MAAM;AACX,kBAAM,SAAS,8BAA8B,sBAAsB;AACnE,gBAAI,CAAC,QAAQ,SAAS;AACpB,4CAA8B,kBAAkB,MAAM;AACtD,4CAA8B,wBAAwB;AACtD,4CAA8B,mBAAmB;AACjD,4CAA8B,kBAAkB;AAChD;AAAA,YACF;AAEA,kBAAM,aACJ,8BAA8B,kBAAkB,OAAO,KACvD,8BAA8B,yBAAyB;AACzD,gBAAI,CAAC,YAAY;AACf;AAAA,YACF;AAEA,kBAAM,MAAM,KAAK,IAAI;AACrB,kBAAMS,oBAAmB,8BAA8B,oBAAoB;AAC3E,0CAA8B,mBAAmBA;AAEjD,kBAAMC,YAAW,8BAA8B;AAC/C,kBAAMC,iBAAgB,OAAQD,WAAU,YACpCV,SAAO;AAAA,cACL,qBAAqB;AAAA,cACrB;AAAA,cACAU,UAAS;AAAA,YACX,IACA,qBAAqB;AAEzB,kBAAM,aAAaC,eAAc,UAAUA,eAAc,aAAa,OAAO;AAC7E,kBAAM,WAAWA,eAAc,UAAUA,eAAc,WAAW,OAAO;AACzE,kBAAM,kBAAkB,8BAA8B,mBAAmBF;AACzE,kBAAM,UAAU,KAAK,IAAI,GAAG,MAAM,eAAe;AACjD,kBAAM,QAAQ,KAAK,IAAI,GAAG,MAAMA,iBAAgB;AAEhD,gBAAI,WAAW,cAAc,SAAS,UAAU;AAC9C;AAAA,YACF;AAEA,kBAAM,eAAe,KAAK,IAAI,GAAG,aAAa,OAAO;AACrD,kBAAM,aAAa,KAAK,IAAI,GAAG,WAAW,KAAK;AAC/C,kBAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,cAAc,UAAU,CAAC;AAC9D,gBAAI,UAAU,GAAG;AACf,qBAAOT,SAAO,MAAM,SAAS,OAAO,OAAO,CAAC;AAAA,YAC9C,OAAO;AACL,qBAAOA,SAAO;AAAA,YAChB;AAAA,UACF;AAEA,gBAAM,qBAAqB,MAAM,KAAK,8BAA8B,iBAAiB;AACrF,wCAA8B,kBAAkB,MAAM;AACtD,gBAAM,yBAAyB,8BAA8B;AAC7D,wCAA8B,wBAAwB;AACtD,gBAAM,yBAAyB,8BAA8B;AAC7D,wCAA8B,mBAAmB;AACjD,wCAA8B,kBAAkB;AAEhD,cAAI,mBAAmB,WAAW,KAAK,CAAC,wBAAwB;AAC9D;AAAA,UACF;AAEA,gBAAMY,WAAU,WAAW;AAC3B,cAAI,CAACA,UAAS,kBAAkBA,SAAQ,eAAe,uBAAuB,WAAW,GAAG;AAC1F;AAAA,UACF;AAEA,gBAAM,WAAW,8BAA8B;AAC/C,gBAAM,gBAAgB,OAAO,UAAU,YACnCZ,SAAO,eAAe,qBAAqB,GAAG,8BAA8B,SAAS,SAAS,IAC9F,qBAAqB;AAEzB,gBAAM,yBAAyB,YAAY,QAAQ,SAAS,qBAAqB;AACjF,gBAAM,kCACJ,2BAA2B,cAAc,WAAW,cAAc,gBAAgB;AAEpF,gBAAM,sBAAsB,CAAa,QAA8D;AACrG,gBAAI,OAAO;AACX,gBAAI,UAAU,WAAW;AACvB,qBAAOA,SAAO,eAAe,MAAM,8BAA8B,SAAS,SAAS;AAAA,YACrF;AACA,gBAAI,UAAU;AACZ,qBAAOA,SAAO,eAAe,MAAY,qBAAqB,SAAS,YAAY;AACnF,qBAAOA,SAAO,eAAe,MAAY,yBAAyB,SAAS,gBAAgB;AAC3F,qBAAOA,SAAO,eAAe,MAAY,mBAAmB,SAAS,UAAU;AAAA,YACjF;AACA,mBAAO;AAAA,UACT;AAEA,gBAAM,mBAAmB,0BAA0B,KAAK,IAAI;AAE5D,cAAI,CAAC,cAAc,SAAS;AAC1B,gBAAI,cAAc,iBAAiB,cAAc;AAC/C,6CAA+B;AAC/B,4CAA8B;AAAA,YAChC;AAEA,kBAAM,UACJ,cAAc,iBAAiB,eAC3B,CAAC,cAAc,UAAU,IACzB,cAAc,iBAAiB,gBAC7B,CAAC,aAAa,IACd,CAAC,UAAU;AAEnB,mBAAO;AAAA,cACL,yBAAyB;AAAA,gBACvB;AAAA,gBACA,gBAAgB;AAAA,gBAChB,MAAM;AAAA,gBACN,cAAc;AAAA,gBACd,kBAAkB,kCACd,CAAC,WACO,OAAO;AAAA,kBACX,MAAM;AAAA,kBACN;AAAA,kBACA;AAAA,kBACA,QAAQ,OAAO;AAAA,kBACf,OAAO,OAAO;AAAA,kBACd,MAAM;AAAA,oBACJ,UAAU;AAAA,sBACR,QAAQ;AAAA,wBACN;AAAA,wBACA;AAAA,wBACA,QAAQ,OAAO;AAAA,wBACf,GAAI,OAAO,OAAO,UAAU,WAAW,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AAAA,sBACpE;AAAA,sBACA,MAAM;AAAA,sBACN,MAAM;AAAA,sBACN,QAAQ;AAAA,sBACR,SAAS;AAAA,wBACP,cAAc;AAAA,wBACd,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,gBAAgB;AAAA,wBAChD,gBAAgB;AAAA,wBAChB,eAAe;AAAA,sBACjB;AAAA,sBACA,YAAY,EAAE,WAAW,MAAM;AAAA,sBAC/B;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF,CAAC,IACH;AAAA,cACN,CAAC;AAAA,YACH;AAEA,kBAAMa,cACJ,8BAA8B,kBAAkB,OAAO,KACvD,8BAA8B,yBAAyB;AACzD,gBAAI,CAACA,aAAY;AACf;AAAA,YACF;AACA;AAAA,UACF;AAEA,gBAAM,aAAaD,SAAQ,eAAe,uBAAuB;AAEjE,cAAI,SAAS;AACb,gBAAM,mBAAmB,cAAc,YAAY,IAAI,IAAI;AAC3D,cAAI,YAAY,KAAK,IAAI,kBAAkB,UAAU;AACrD,cAAI,aAAa;AACjB,cAAI,gBAAgB,KAAK,IAAI;AAE7B,gBAAM,qBAAqB,MAAe;AACxC,kBAAM,MAAO,WAAmB;AAChC,kBAAM,aAAa,KAAK;AACxB,kBAAM,iBAAiB,YAAY;AACnC,gBAAI,OAAO,mBAAmB,WAAY,QAAO;AACjD,gBAAI;AACF,qBAAO,QAAQ,eAAe,KAAK,UAAU,CAAC;AAAA,YAChD,QAAQ;AACN,qBAAO;AAAA,YACT;AAAA,UACF;AAEA,iBAAO,SAAS,YAAY;AAC1B,kBAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,gBAAgB;AACvD,kBAAM,cAAc,SAAS,cAAc;AAC3C,kBAAM,WAAW,cACb,KAAK,IAAI,cAAc,UAAU,cAAc,WAAW,CAAC,IAC3D,cAAc;AAElB,kBAAM,aAAa;AACnB,kBAAM,WAAW,KAAK,IAAI,YAAY,SAAS,SAAS;AAExD,kBAAM,EAAE,iBAAiB,OAAO,IAAI,OAAO;AAAA,cACzCZ,SAAO,IAAI,aAAa;AACtB,sBAAM,mBAAmB,KAAK,IAAI;AAClC,sBAAMc,UAAS,OAAO,yBAAyB;AAAA,kBAC7C;AAAA,kBACA,gBAAgB;AAAA,kBAChB,MAAM;AAAA,kBACN,OAAO,EAAE,OAAO,YAAY,KAAK,UAAU,OAAO,WAAW;AAAA,kBAC7D,cAAc;AAAA,gBAChB,CAAC;AACD,sBAAMC,mBAAkB,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,gBAAgB;AACjE,uBAAO,EAAE,iBAAAA,kBAAiB,QAAAD,QAAO;AAAA,cACnC,CAAC;AAAA,YACH;AAEA,qBAAS;AAET,kBAAMD,cACJ,8BAA8B,kBAAkB,OAAO,KACvD,8BAA8B,yBAAyB;AACzD,kBAAM,eAAe,cAAc,iBAAiB,CAAC,eAAeA;AAEpE,kBAAM,0BAA0B,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,aAAa;AACtE,kBAAM,iBAAiB,WAAW,KAAK,OAAO,SAAS,QAAQ,KAAK,2BAA2B;AAC/F,kBAAM,mBAAmB,2BAA2B;AACpD,kBAAM,eACJ,CAAC,gBAAgB,cAAc,kBAAkB,iBAAiB,mBAAmB,IAAI;AAE3F,kBAAM,cACJ,SAAS,cAAc,CAAC,iBAAiB,gBAAgB,kBAAkB;AAE7E,kBAAM,cAAiD,CAAC,cACpD,SACA,eACE,kBACA,iBACE,oBACA;AAER,gBAAI,wBAAwB;AAC1B,qBAAO;AAAA,gBACLb,SAAO,IAAI,aAAa;AACtB,wBAAM,UAA8C,CAAC,mBAAmB;AACxE,sBAAI,YAAa,SAAQ,KAAK,kBAAkB,uBAAuB;AACvE,sBAAI,gBAAgB,kBAAmB,SAAQ,KAAK,cAAc;AAElE,wBAAM,WAAkC;AAAA,oBACtC,QAAQ;AAAA,sBACN;AAAA,sBACA;AAAA,sBACA,QAAQ,OAAO;AAAA,sBACf,GAAI,OAAO,OAAO,UAAU,WAAW,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AAAA,oBACpE;AAAA,oBACA,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,QAAQ;AAAA,oBACR,SAAS;AAAA,sBACP,cAAc,KAAK,IAAI,GAAG,aAAa,QAAQ;AAAA,sBAC/C,OAAO;AAAA,sBACP,gBAAgB;AAAA,sBAChB,eAAe;AAAA,oBACjB;AAAA,oBACA,QAAQ;AAAA,sBACN;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA,SAAS;AAAA,sBACT;AAAA,oBACF;AAAA,oBACA,YAAY,cAAc,EAAE,WAAW,MAAM,QAAQ,mBAAmB,IAAI,EAAE,WAAW,MAAM;AAAA,oBAC/F;AAAA,kBACF;AAEA,yBAAa,OAAO;AAAA,oBAClB,MAAM;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA,QAAQ,OAAO;AAAA,oBACf,OAAO,OAAO;AAAA,oBACd,MAAM,EAAE,SAAS;AAAA,kBACnB,CAAC;AAAA,gBACH,CAAC;AAAA,cACH;AAAA,YACF;AAEA,gBAAI,cAAc;AAChB,6CAA+B;AAC/B,4CAA8B;AAC9B,kBAAI,wBAAwB;AAC1B,uBAAO;AAAA,kBACC,OAAO;AAAA,oBACX,MAAM;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA,QAAQ,OAAO;AAAA,oBACf,OAAO,OAAO;AAAA,oBACd,MAAM;AAAA,sBACJ,UAAU;AAAA,wBACR,QAAQ;AAAA,0BACN;AAAA,0BACA;AAAA,0BACA,QAAQ,OAAO;AAAA,0BACf,GAAI,OAAO,OAAO,UAAU,WAAW,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AAAA,wBACpE;AAAA,wBACA,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,QAAQ;AAAA,wBACR,SAAS;AAAA,0BACP,cAAc,KAAK,IAAI,GAAG,aAAa,MAAM;AAAA,0BAC7C,OAAO;AAAA,0BACP,gBAAgB;AAAA,0BAChB,eAAe;AAAA,wBACjB;AAAA,wBACA,QAAQ;AAAA,0BACN;AAAA,0BACA;AAAA,0BACA;AAAA,0BACA,SAAS;AAAA,0BACT,aAAa;AAAA,wBACf;AAAA,wBACA,YAAY,EAAE,WAAW,MAAM;AAAA,wBAC/B,SAAS,CAAC,aAAa,UAAU;AAAA,sBACnC;AAAA,oBACF;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA,cACF;AACA;AAAA,YACF;AAEA,gBAAI,WAAW,KAAK,OAAO,SAAS,QAAQ,GAAG;AAC7C,kBAAI,kBAAkB,YAAY,YAAY,GAAG;AAC/C,4BAAY,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,CAAC,CAAC;AAAA,cACnD,WAAW,kBAAkB,WAAW,GAAG;AACzC,4BAAY,KAAK,IAAI,YAAY,YAAY,CAAC;AAAA,cAChD;AAAA,YACF;AAEA,gBAAI,aAAa;AACf,4BAAc;AACd,8BAAgB,KAAK,IAAI;AACzB,qBAAOA,SAAO;AAAA,YAChB;AAAA,UACF;AAEA,gBAAM,aACJ,8BAA8B,kBAAkB,OAAO,KACvD,8BAA8B,yBAAyB;AACzD,cAAI,CAAC,YAAY;AACf;AAAA,UACF;AAAA,QACF;AAAA,MACF,UAAE;AACA,sCAA8B,cAAc;AAAA,MAC9C;AAAA,IACF,CAAC;AAED,UAAM,8CAA8C,MAClDA,SAAO,IAAI,aAAa;AACtB,UAAI,8BAA8B,aAAa;AAC7C;AAAA,MACF;AACA,YAAM,QAAQ,OAAO,kCAAkC;AAAA,QACrDA,SAAO,eAA0B,wBAAwB,KAAK;AAAA,QAC9DA,SAAO,WAAW,EAAE,kBAAkB,KAAK,CAAC;AAAA,MAC9C;AACA,oCAA8B,cAAc;AAAA,IAC9C,CAAC;AAEH,cAAU;AAAA,MACRA,SAAO,QAAQ,MAAM;AACnB,cAAM,QAAQ,8BAA8B;AAC5C,eAAO,QAAQgB,OAAM,UAAU,KAAK,EAAE,KAAKhB,SAAO,MAAM,IAAIA,SAAO;AAAA,MACrE,CAAC;AAAA,MACD,EAAE,MAAM,2BAA2B;AAAA,IACrC;AAEA,UAAM,sBAAsB,MAAM;AAChC,YAAM,YAAa,QAAQ,KAAa,OAAO;AAC/C,UAAI,CAAC,aAAa,OAAO,cAAc,UAAU;AAC/C,eAAO;AAAA,MACT;AACA,aAAO,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC;AAAA,IACvC,GAAG;AAEH,UAAM,yBAAyB,OAAO,yBAAyB,EAAE;AAAA,MAC/DA,SAAO,IAAI,CAAC,WAAW,OAAO,4BAA4B;AAAA,IAC5D;AACA,UAAM,qBAAqB,oBAAI,IAA8B;AAC7D,QAAI,sBAAsB,mBAAmB,OAAO,GAAG;AACrD,YAAM,kBAAkB,OAAOA,SAAO;AAAA,QACpC;AAAA,QACA,CAAC,QACCE,QAAO,QAAW,sBAAsB,EAAE;AAAA,UACxCF,SAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAU;AAAA,QACzC;AAAA,MACJ;AACA,iBAAW,CAAC,KAAK,GAAG,KAAK,iBAAiB;AACxC,2BAAmB,IAAI,KAAK,GAAG;AAAA,MACjC;AAAA,IACF;AAEA,UAAM,qBAAqB,CAAC,WAAwC;AAClE,YAAM,MAAO,QAAgB;AAC7B,UAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,EAAG,QAAO;AACtD,YAAM,OAAQ,QAAgB;AAC9B,UAAI,OAAO,SAAS,YAAY,KAAK,SAAS,EAAG,QAAO;AACxD,UAAI,OAAO,KAAM,QAAO,OAAO,GAAG;AAClC,UAAI,QAAQ,KAAM,QAAO,OAAO,IAAI;AACpC,aAAO;AAAA,IACT;AAEA,UAAM,wBAAwB,CAAC,QAAiB,aAA8B;AAC5E,YAAM,MAAO,QAAgB;AAC7B,UAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,YAAI,QAAQ,SAAU,QAAO;AAC7B,cAAMiB,QAAQ,QAAgB;AAC9B,eAAO,OAAOA,UAAS,YAAYA,MAAK,SAAS,KAAKA,UAAS;AAAA,MACjE;AAEA,YAAM,OAAQ,QAAgB;AAC9B,UAAI,OAAO,SAAS,YAAY,KAAK,SAAS,GAAG;AAC/C,eAAO,SAAS;AAAA,MAClB;AAEA,YAAM,aAAa,mBAAmB,MAAM;AAC5C,aAAO,cAAc,QAAQ,WAAW,SAAS,KAAK,eAAe;AAAA,IACvE;AAEA,UAAM,gBAAkCd,QAAO,WAAW,SAAS;AACnE,UAAM,qBAAqB,CAAC,QAAkC;AAC5D,YAAM,WAAW,mBAAmB,IAAI,GAAG;AAC3C,UAAI,UAAU;AACZ,eAAOA,QAAO,WAAW,QAAQ;AAAA,MACnC;AACA,aAAO,cAAc,KAAKA,QAAO,OAAO,CAAC,WAAc,sBAAsB,QAAQ,GAAG,CAAC,CAAC;AAAA,IAC5F;AAEA,UAAM,sBAAsBH,SAAO;AAAA,MAAK,MACtC,gBAAsB;AAAA,QACpB,iBAAiB,QAAQ;AAAA,QACzB;AAAA,QACA;AAAA,QACA,iBAAiB,QAAQ;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,cAA4B;AAAA,MAChC;AAAA,MACA,2BAA2B,YAAY;AAAA,QACrC;AAAA,UACE,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,QACR;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,2BAA2B,YAAY,qBAAqB,YAAY,KAAK,IAAI;AAE5G,UAAM,0BAAwC,4BAA4B;AAAA,MACxE,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA,UAAU,CAAC,cAAc,SAAS,gBAAgB,SAAS,eAAe,SAAS,YAAY,OAAO;AAAA,MACtG,kBAAkB;AAAA,QAChB,GAAG,cAAc;AAAA,QACjB,GAAG,gBAAgB;AAAA,QACnB,GAAG,eAAe;AAAA,QAClB,GAAG,YAAY;AAAA,MACjB;AAAA,IACF,CAAC;AAED,UAAM,OAAuB,wBAAwB;AAAA,MACnD,MAAM;AAAA,MACN,mBAAmB,wBAAwB;AAAA,MAC3C;AAAA,MACA,kBAAkB,SAAS,IAAI,UAAU;AAAA,IAC3C,CAAC;AAED,QAAI,KAAK,YAAY,QAAQ;AAC3B,YAAM,MAAM,SAAS,IACjB;AAAA,QACE;AAAA,QACA,sBAAsB,wBAAwB,QAAQ;AAAA,QACtD,WAAW,KAAK,MAAM;AAAA,QACtB,sBAAsB,KAAK,kBAAkB,KAAK,GAAG,CAAC;AAAA,QACtD,uBAAuB,KAAK,mBAAmB,KAAK,GAAG,CAAC;AAAA,QACxD,yBAAyB,KAAK,SAAS,oBAAoB;AAAA,QAC3D,oBAAoB,KAAK,OAAO,QAAQ,gBAAgB,KAAK,OAAO,UAAU,YAAY,KAAK,OAAO,MAAM;AAAA,MAC9G,EAAE,KAAK,IAAI,IACX;AAEJ,YAAM,MAAW,IAAI,MAAM,GAAG;AAC9B,UAAI,OAAO;AACX,UAAI,OAAO;AACX,UAAI,SAAS,KAAK;AAClB,UAAI,WAAW,KAAK;AACpB,UAAI,aAAa;AACjB,UAAI,WAAW,QAAQ;AACvB,YAAM;AAAA,IACR;AAEA,UAAM,cAAc,MAClBA,SAAO,IAAI,IAAI,MAAM,6GAA6G,CAAC;AAErI,UAAM,cAAc,CAAC,WAA4C,YAAY;AAE7E,UAAM,kBACJ,CAAC,aACD,CAAa,UACX,YAAY;AAEhB,UAAM,mBAAmB;AAAA,MACvB,KAAKC,iBAAgB,IAAI,QAAQ;AAAA,MACjC,QAAQ;AAAA,IACV;AAGA,UAAM,kBAAkB;AAAA,MACtB,KAAKA,iBAAgB,IAAI,QAAQ;AAAA,MACjC,SAASA,iBAAgB,QAAQ,QAAQ;AAAA;AAAA,MAEzC,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA,WAAW;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF;AAEA,UAAM,UAAqC;AAAA;AAAA,MAEzC;AAAA,MACA;AAAA,MACA,iBAAiB,UAAU;AAAA,MAC3B,UAAU;AAAA,MACV,UAAU,CAAC,SAAS,iBAAiB,MAAM,KAAK,WAAW,QAAW,IAAI;AAAA,MAC1E,UAAU,CAAC;AAAA;AAAA,QAET,YAAY,SAAS,MAAM;AAAA;AAAA,MAC7B,eAAe,CAAC,YAAY,YAAY,cAAc,OAAO;AAAA,MAC7D,qBAAqB,CAAC,WAAW,YAAY,oBAAoB,MAAM;AAAA,MACvE,UAAU;AAAA,MACV,eAAe;AAAA,MACf,kBAAkBE,QAAO,WAAW,eAAe;AAAA,MACnD,SAAS,CAAI,aAA0BA,QAAO,IAAIF,iBAAgB,QAAQ,QAAQ,GAAG,QAAQ,EAAE,KAAKE,QAAO,OAAO;AAAA,MAClH,iBAAiB,CAAI,aACnBA,QAAO,IAAI,eAAe,CAAC,EAAE,OAAO,KAAK,OAAO;AAAA,QAC9C,OAAO,SAAS,KAAK;AAAA,QACrB;AAAA,MACF,EAAE;AAAA,MACJ,0BAA0B,CAAI,UAA0C;AACtE,cAAM,WAAwD,oBAA0B,KAAK,IACzF,QACU,QAAQ,KAAK;AAE3B,YAAI,SAAS,SAAS,UAAU;AAC9B,gBAAM,qBAA+B,oCAAoC;AAAA,YACvE;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UACF,CAAC;AAED,gBAAM,kBAA4B,6BAA6B,QAAQ;AACvE,cAAI,oBAAoB;AAExB,iBAAOA,QAAO;AAAA,YAAU;AAAA,YAAe,CAAC,EAAE,OAAO,KAAK,MACpDH,SAAO,IAAI,aAAa;AACtB,kBAAI,CAAC,mBAAmB;AACtB,oCAAoB;AAEpB,oBAAI,oBAAoB,YAAY,QAAQ;AAC1C,yBAAa,OAAO,mBAAmB,UAAU;AAAA,gBACnD,WAAW,oBAAoB,YAAY,QAAQ;AACjD,yBAAa,OAAO,mBAAmB,UAAU;AACjD,yBAAOA,SAAO,IAAI,mBAAmB,KAAK;AAAA,gBAC5C;AAEA,oBAAc,kCAAkC,eAAe,GAAG;AAChE,wBAAM,gBAAgB,OAAOA,SAAO;AAAA,oBAClC;AAAA,kBACF;AAEA,sBAAII,QAAO,OAAO,aAAa,GAAG;AAChC,0BAAM,WAAqB,mBAAmB;AAAA,sBAC5C,QAAQ,cAAc;AAAA,sBACtB;AAAA,sBACA;AAAA,sBACA,QAAQ;AAAA,sBACR,UAAU;AAAA,oBACZ,CAAC;AAED,wBAAI,SAAS,YAAY,QAAQ;AAC/B,6BAAa,OAAO,SAAS,UAAU;AAAA,oBACzC,WAAW,SAAS,YAAY,QAAQ;AACtC,6BAAa,OAAO,SAAS,UAAU;AACvC,6BAAOJ,SAAO,IAAI,SAAS,KAAK;AAAA,oBAClC;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO;AAAA,gBACL,OAAO,gBAAgB,OAAO,KAAK;AAAA,gBACnC;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAOG,QAAO;AAAA,UACZH,SAAO,IAAI,aAAa;AACtB,kBAAM,QAAQ,OAAO,cAAc,YAAY,QAAQ;AACvD,kBAAM,mBAAmB;AAEzB,mBAAOA,SAAO;AAAA,cAAa,MACzBA,SAAO,KAAK,MAAM;AAChB,8BAAc,aAAa,SAAS,UAAU;AAAA,cAChD,CAAC;AAAA,YACH;AAEA,gBAAI,CAAC,MAAM,UAAU;AACnB,oBAAM,UAAU,OAAO;AACvB,kBAAI;AACF,sBAAM,cAAc,SAAS,OAAO,OAAO;AAC3C,sBAAM,WAAW;AACjB,sBAAM,iBAAiB;AAAA,cACzB,QAAQ;AAAA,cAER;AAAA,YACF;AAEA,mBAAOG,QAAO,WAAW,MAAM,GAAG;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,KAAK,CAAQ,aAAuD;AAClE,YAAI,CAAC,UAAU;AACb,iBAAO;AAAA,QACT;AAEA,cAAM,eAAe;AAAA,UACnB,KAAKH,SAAO,IAAIC,iBAAgB,IAAI,QAAQ,GAAG,QAAQ;AAAA,UACvD,QAAQ;AAAA,QACV;AAEA,cAAM,aAAa;AAAA,UACjB,KAAKD,SAAO,IAAIC,iBAAgB,IAAI,QAAQ,GAAG,QAAQ;AAAA;AAAA,UAEvD,SAASE,QAAO,IAAIF,iBAAgB,QAAQ,QAAQ,GAAG,QAAQ,EAAE,KAAKE,QAAO,OAAO;AAAA;AAAA,UAEpF,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,QAAQ;AAAA,YACN,SAAS;AAAA,UACX;AAAA,UACA,WAAW;AAAA,YACT,aAAa;AAAA,UACf;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAOA,QAAI,sBAAsB,mBAAmB,OAAO,GAAG;AACrD,YAAM,WAAW,OAAOH,SAAO,SAAc;AAC7C,YAAM,SAAS,eAAe,KAAKkB,OAAM,eAAelB,SAAO,QAAQ,QAAQ,CAAC,CAAC;AACjF,YAAM,UAAe,CAAC;AAEtB,YAAM,yBAAyB,CAAC,WAAoB;AAClD,YAAI;AACF,gBAAM,OAAO,OAAO,YAAY,YAAY,SAAS,MAAM,CAAQ;AACnE,cAAImB,MAAK,UAAU,IAAI,GAAG;AACxB,mBAAO,QAAQ,YAAY,SAAS,MAAM,CAAQ;AAAA,UACpD;AAAA,QACF,QAAQ;AACN,cAAI;AACF,mBAAO,QAAQ,YAAY,SAAS,MAAM,CAAQ;AAAA,UACpD,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAEA,iBAAW,OAAO,oBAAoB;AACpC,gBAAQ,GAAG,IAAI,CAAC,YAAsB;AACpC,gBAAM,SAAS,YAAY,SAAa,EAAE,MAAM,IAAI,IAAa,EAAE,MAAM,KAAK,QAAQ;AACtF,iCAAuB,MAAW;AAAA,QACpC;AAAA,MACF;AAEA;AAAC,MAAC,QAAgB,UAAU;AAAA,IAC9B;AAEA,IAAU,2BAA2B,SAAS,uBAAuB;AACrE,IAAc,2BAA2B,SAAS,uBAAuB;AAIvE,UAAM,eAAe,OAAOnB,SAAO;AAAA,MACjC;AAAA,IACF;AACF,QAAII,QAAO,OAAO,YAAY,GAAG;AAC/B,mBAAa,MAAM,2BAA2B,uBAAuB;AACrE,YAAM,QAAQ,OAAOJ,SAAO,QAAc,uBAAuB,EAAE,KAAKA,SAAO,KAAK;AACpF,UAAI,UAAU,OAAO;AACnB,qBAAa,MAAM,2BAA2B,uBAAuB;AAAA,MACvE;AAAA,IACF;AAEA,UAAM,6BAA6B,OAAOA,SAAO,QAAQ,iCAAiC,EAAE,KAAKA,SAAO,KAAK;AAC7G,UAAM,2BAA2B,CAAC,aAA4B;AAC5D,UAAI,2BAA2B,WAAW,EAAG;AAC7C,iBAAW,aAAa,4BAA4B;AAClD,kBAAU,SAAS,QAAe;AAAA,MACpC;AAAA,IACF;AAEA,UAAM,wBAAwB,oBAAI,IAAiE;AACnG,WAAOA,SAAO;AAAA,MAAa,MACzBA,SAAO,KAAK,MAAM;AAChB,8BAAsB,MAAM;AAAA,MAC9B,CAAC;AAAA,IACH;AAKA,UAAM,aAAa,oBAAI,IAAuF;AAE9G,eAAW,YAAY,QAAQ,WAAW,CAAC,GAAG;AAC5C,YAAM,QAAQ,OAAOA,SAAO,cAAc,QAAQ;AAClD,UAAII,QAAO,OAAO,KAAK,GAAG;AACxB,mBAAW,IAAI,UAAU,MAAM,KAAK;AAAA,MACtC;AAAA,IACF;AAEA,UAAM,eAA4C;AAAA,MAChD,MAAM;AAAA,MACN,KAAK,CAAC,WAAW,WAAW,IAAI,MAAM;AAAA,IACxC;AAEA,UAAM,cAAc,QAAQ,YAAY,OAAO,GAAG,QAAQ,QAAQ,KAAK,UAAU,KAAK;AAEtF,QAAI,aAAa;AACf,mCAA6B,aAAa,OAAwC;AAAA,IACpF;AAEA,UAAM,4BAA4B,CAChCQ,UACA,oBACS;AACT,YAAM,SAAUA,SAAgB;AAChC,YAAM,WAAW,SACb;AAAA,QACE,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO;AAAA,MAClB,IACA;AAEJ,YAAM,sBAAsB,iBAAiB;AAC7C,UAAI;AAEJ,UAAI,WAAW,sBAAsB,UAAU;AAC7C,YAAI,qBAAqB;AACvB,uBAAa;AAAA,QACf,WAAW,WAAW,mBAAmB,eAAe,SAAS,YAAY;AAC3E,uBAAa;AAAA,QACf,WAAW,WAAW,mBAAmB,YAAY,SAAS,SAAS;AACrE,uBAAa;AAAA,QACf;AAAA,MACF,WAAW,WAAW,sBAAsB,CAAC,UAAU;AACrD,qBAAa,uBAAuB;AAAA,MACtC;AAEA,UAAI,YAAY;AACd,cAAM,iBAAiB,WAAW,mBAAmB,aAAa;AAClE,cAAM,iBAAiB,WAAW,mBAAmB,uBAAuB,KAAK;AACjF,mBAAW,qBAAqB;AAAA,UAC9B,YAAY;AAAA,UACZ,qBAAqB;AAAA,UACrB,gBAAgB;AAAA,QACjB;AAEA,mBAAW,yBAAyB;AACpC,mBAAW,+BAA+B,WAAW,+BAA+B,KAAK;AACzF,mBAAW,oBAAoB,IAAuB,kBAAkB,yBAAyB;AAAA,MACnG;AAED,iBAAW,qBAAqB;AAEhC,YAAM,aAAa,SACf;AAAA,QACE,GAAG;AAAA,QACH,YAAY,WAAW,mBAAmB;AAAA,MAC5C,IACA;AAEJ,YAAM,iBAAkB,WAAW,SAAiB;AACpD,YAAM,6BACJ,CAAC,CAAC,kBACF,CAAC,CAAC,UACF,eAAe,eAAgB,OAAe,cAC9C,eAAe,YAAa,OAAe;AAE7C,YAAM,qBAAsB,WAAW,SAAiB;AAGxD,YAAM,iBACJ,cAAc,CAAE,WAAmB,cAAc,mBAAmB,UAAiB,IAAI;AAE3F,UAAI,kBAAkB,oBAAoB;AAGxC,uBAAe,KAAK,sBAAsB,mBAAmB,KAAK;AAClE,uBAAe,KAAK,0BAA0B,mBAAmB,KAAK;AACtE,uBAAe,KAAK,qBAAqB,mBAAmB,KAAK;AACjE,uBAAe,KAAK,2BAA2B,mBAAmB,KAAK;AACvE,uBAAe,KAAK,sBAAsB,mBAAmB,KAAK;AAClE,uBAAe,KAAK,sBAAsB,mBAAmB,KAAK;AAGlE,cAAM,cAAmB,eAAe;AACxC,cAAM,cAAmB,mBAAmB;AAC5C,oBAAY,sBAAsB,YAAY;AAG9C,YAAI,4BAA4B;AAC9B,sBAAY,uBAAuB,YAAY;AAC/C,sBAAY,uBAAuB,YAAY;AAC/C,sBAAY,uBAAuB,YAAY;AAC/C,sBAAY,uBAAuB,YAAY;AAC/C,sBAAY,uBAAuB,YAAY;AAC/C,sBAAY,uBAAuB,YAAY;AAC/C,sBAAY,iCAAiC,YAAY;AACzD,sBAAY,iCAAiC,YAAY;AAAA,QAC3D;AAAA,MACF;AAEA,iBAAW,yBACT,cAAc,CAAE,WAAmB,cAAc,0BAA0B,UAAiB,IAAI;AAEjG,iBAAW,UAAU;AAAA,QACnB,GAAIA;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AACA,iBAAW,cAAoB,mBAAoBA,SAAgB,IAAI;AACvE,qBAAe,MAAM;AACnB,cAAM,UAAU,WAAW;AAC3B,YAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,QAAQ,WAAW,EAAG,QAAO;AAC5D,cAAM,MAAM,oBAAI,IAAY;AAC5B,mBAAW,OAAO,SAA+B;AAC/C,gBAAM,IAAI,KAAK;AACf,cAAI,OAAO,MAAM,YAAY,EAAE,SAAS,EAAG,KAAI,IAAI,CAAC;AAAA,QACtD;AACA,eAAO,IAAI,OAAO,IAAI,MAAM;AAAA,MAC9B,GAAG;AACH,YAAM,SAAuBA,UAAiB,WAAW,CAAC,GACvD,OAAO,CAAC,MAAW,KAAK,EAAE,SAAS,mBAAmB,OAAO,EAAE,cAAc,QAAQ,EACrF,IAAI,CAAC,MAAW,mBAAmB,EAAE,SAAS,CAAC,EAC/C,OAAO,CAAC,MAA2B,KAAK,IAAI,EAC7C,KAAK,gBAAgB;AACxB,gCAA0B;AAC1B,mCAA6B,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;AAE/D,UAAI,CAAC,WAAW,mBAAmB;AACjC,mBAAW,oBAAoB,IAAuB,kBAAkB,yBAAyB;AAAA,MACnG;AAEA,YAAM,wBAAwB,iBAAiB,mBAAmB;AAElE,UAAI,yBAAyB,cAAc,CAAE,WAAmB,aAAa;AAC3E,YAAI,2BAA2B,SAAS,GAAG;AACzC;AAAA,YACE,uBAAuB;AAAA,cACrB,IAAI;AAAA,cACJ,UAAU,QAAQ,YAAY;AAAA,cAC9B;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAIA,QAAI,CAAC,WAAW,SAAS;AACvB,YAAMQ,eAAe,QAAQ,KAAa;AAC1C,UAAIA,cAAa;AACf,YAAI;AACF,oCAA0C,MAAMA,cAAoB,CAAC,CAAQ,GAAG,EAAE,gBAAgB,MAAM,CAAC;AAAA,QAC3G,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAEA,UAAM,mCAAmC,CAAC,YAA4D;AACpG,UAAI,CAAC,WAAW,QAAS;AACzB,YAAM,UAAe,WAAW;AAChC,YAAM,OAAwD,QAAQ,8BAA8B,CAAC;AACrG,WAAK,KAAK,OAAO;AACjB,cAAQ,6BAA6B;AAAA,IACvC;AAEA,UAAM,oBAAoB,CAAC,UAAyB;AAClD,UAAI,CAAC,WAAW,QAAS;AACzB,YAAM,UAAe,WAAW;AAChC,cAAQ,kBAAkB;AAAA,QACxB,GAAI;AAAA,QACJ,OAAO,QAAQ;AAAA,QACf,SAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAEA,UAAM,kCAAkC,CACtC,QACA,SAEA;AAAA,MACE;AAAA,QACE,OAAO;AAAA,QACP,OAAO,OAAO,OAAO,OAAO,IAAI,KAAK;AAAA,QACrC,EAAE,MAAM,EAAE,UAAU,QAAQ,UAAU,WAAW,EAAE;AAAA,QACnD,wBAAwB,QAAQ,IAAI;AAAA,MACtC;AAAA,IACF;AAEF,UAAM,2BAA2B,CAAC,OAAe,SAC/C;AAAA,MACEpB,SAAO,IAAI,aAAa;AAGtB,YAAI,CAAC,SAAS,GAAG;AACf;AAAA,QACF;AAEA,cAAM,MAAM,QAAQ,IAAI,KAAK;AAC7B,YAAI,CAAC,KAAK;AACR;AAAA,QACF;AAEA,cAAM,cAAc,SAAS,WAAW,IAAI,uBAAuB,IAAI;AAEvE,YAAI,gBAAgB,QAAW;AAE7B;AAAA,QACF;AAIA,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,cACP,WAAW;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAAA,UACA,MACEA,SAAO,KAAK,MAAM;AAChB,YAAiB,YAAY,YAAY,WAAgB;AACzD,YAAiB,YAAY,YAAY,KAAK,UAAU;AAAA,UAC1D,CAAC;AAAA,QACL;AAAA,MACF,CAAC;AAAA,IACH;AAEF,UAAM,cAAe,QAAQ,KAAa;AAE1C,UAAM,kBAAkB,oBAAoB;AAAA,MAC1C,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA,UAAU,QAAQ;AAAA,IACpB,CAAC;AAED,UAAM,mBAAqC;AAAA,MACzC,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,sBAAsB,CAAC,KAAKqB,aAAY;AACtC,oBAAU,qBAAqB,KAAKA,QAAO;AAAA,QAC7C;AAAA,QACA,eAAe,CAAC,KAAKA,aAAY;AAC/B,oBAAU,cAAc,KAAKA,QAAO;AAAA,QACtC;AAAA,QACA,iBAAiB,CAAC,KAAKA,aAAY;AACjC,oBAAU,gBAAgB,KAAKA,QAAO;AAAA,QACxC;AAAA,QACA,iBAAiB,CAAC,YAAY;AAC5B,oBAAU,gBAAgB,OAAO;AAAA,QACnC;AAAA,QACA,yBAAyB,CAAC,KAAKA,aAAY;AACzC,oBAAU,wBAAwB,KAAKA,QAAO;AAAA,QAChD;AAAA,QACA,wBAAwB,CAAC,KAAKA,aAAY;AACxC,oBAAU,uBAAuB,KAAKA,QAAO;AAAA,QAC/C;AAAA,QACA,uBAAuB,CAAC,KAAKA,aAAY;AACvC,oBAAU,sBAAsB,KAAKA,QAAO;AAAA,QAC9C;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MACT,KAAK;AAAA,QACH;AAAA,QACA,iBAAiB,YAAY;AAAA,QAC7B,8BAA8B,YAAY;AAAA,QAC1C,4BAA4B,YAAY;AAAA,QACxC,uCAAuC,YAAY;AAAA,QACnD,iCAAiC,YAAY;AAAA,QAC7C,yBAAyB;AAAA,QACzB,aAAAf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN;AAAA,QACA,gBAAgB,MAAM,WAAW;AAAA,QACjC,uBAAuB,CAAC,WAAW,YAAY;AAC7C,gCAAsB,IAAI,WAAW,OAAO;AAAA,QAC9C;AAAA,QACA,yBAAyB,CAAC,cAAc,sBAAsB,IAAI,SAAS;AAAA,QAC3E;AAAA,QACA;AAAA,QACA,kCAAkC,CAAC,iBAAiB;AAClD,cAAI,kBAAkB,QAAQ;AAC5B,kBAAM,IAAI,MAAM,iFAAiF;AAAA,UACnG;AACA,4BAAkB,cAAc,KAAK,YAAY;AAAA,QACnD;AAAA,QACA,oBAAoB,MAAM;AACxB,4BAAkB,SAAS;AAAA,QAC7B;AAAA,QACA,8BAA8B,MAAM,kBAAkB;AAAA,QACtD,yBAAyB,MAAM,kBAAkB;AAAA,QACjD,yBAAyB,CAAC,aAAa;AACrC,4BAAkB,WAAW;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB,CAAC,SAAS,gBAAgB,eAAe,IAAW;AAAA,MACtE;AAAA,MACA,UAAU;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,qBAAqB,EAAE,SAAS,iBAAiB,CAAC;AAEzD,WAAON,SAAO;AAAA,MAAa,MACzBA,SAAO,KAAK,MAAM;AAChB,mBAAW,MAAM;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,WAAOA,SAAO;AAAA,MAAa,MACzBA,SAAO,KAAK,MAAM;AAChB,YAAII,QAAO,OAAO,eAAe,GAAG;AAClC,0BAAgB,MAAM,yBAAyB,iBAAiB;AAAA,QAClE;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,KAAK;AACf,sBAAgB,QAAQ,KAAuD,OAAO;AAAA,IACxF;AAEA,WAAOJ,SAAO;AAAA,MAAa,MACzB,UAAU,WAAW;AAAA,QACnBA,SAAO;AAAA,UAAQ,MACb;AAAA,YACE;AAAA,YACA;AAAA,YACA,EAAE,MAAM,EAAE,UAAU,QAAQ,UAAU,WAAW,EAAE;AAAA,YAC7C,OAAO;AAAA,cACX,MAAM;AAAA,cACN,UAAU,QAAQ;AAAA,cAClB;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACAA,SAAO;AAAA,UAAI,MACTA,SAAO,KAAK,MAAM;AAChB,gBAAI,QAAQ,KAAK;AACf,gCAAkB,QAAQ,GAAyD;AAAA,YACrF;AACA,gBAAI,aAAa;AACf,6CAA+B,WAAW;AAAA,YAC5C;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,QAAI,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;AACzC,aAAO,gBAAgB;AAAA,QACrB,KAAK,QAAQ;AAAA,QACb,QAAQ,QAAQ;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,aAAa,QAAQ,UAAU,SAAS,GAAG;AACrD,YAAM,MAAO,OAAOA,SAAO,SAA0B;AACrD,YAAM,iBAAiBQ,YAAW,UAAU,KAAK,cAAqB;AACtE,YAAM,cACJJ,QAAO,OAAO,cAAc,KAC5B,MAAM,QAAS,eAAe,MAAsB,YAAY,KAC/D,eAAe,MAAsB,aAAc,SAAS,QAAQ;AAEvE,UAAI,CAAC,aAAa;AAChB,cAAM,oBAAoBI,YAAW,UAAU,KAAoB,iBAAwB;AAC3F,cAAM,iBAAiBJ,QAAO,OAAO,iBAAiB,IACjD,kBAAkB,QACnB;AACJ,cAAM,QAAQ;AAAA,UACZ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACF;AAEA,eAAOJ,SAAO;AAAA,UACZ,QAAQ;AAAA,UACR,CAAC,YACCA,SAAO,IAAI,aAAa;AACtB,gBAAI,gBAAgB;AAClB,oBAAM,gBAAgB,eAAe,QAAQ,SAAgB;AAAA,gBAC3D;AAAA,gBACA,SAAS;AAAA,gBACT,aAAa;AAAA,cACf,CAAC;AAKD,oBAAM,eAAe,QAAQ,MACzB,OAAO,cAAc;AAAA,gBACnBA,SAAO,eAAe,QAAQ,KAAiC,OAAc;AAAA,cAC/E,IACA,OAAO;AAEX,kBAAI,iBAAiB,QAAW;AAC9B;AAAA,cACF;AAAA,YACF;AAGA,mBAAOA,SAAO,WAAW,OAAc;AAAA,UACzC,CAAC;AAAA,UACH,EAAE,SAAS,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AACT;","names":["Exit","Effect","Fiber","Layer","Stream","SubscriptionRef","PubSub","Option","Queue","ServiceMap","idx","record","Effect","Effect","Effect","currentTxnId","Effect","Effect","Effect","isDevEnv","Effect","args","Effect","Effect","Cause","Effect","Exit","Option","PubSub","SubscriptionRef","entry","Effect","Effect","Effect","Option","Effect","Option","normalizePositiveInt","Effect","decision","planLen","checks","plan","executedSteps","totalDurationMs","exit","Effect","scannedRows","v","toListInstanceKey","Effect","listValue","items","ensuredRowIds","rowIdAt","out","set","prevRow","input","Effect","ServiceMap","ServiceMap","Effect","readClockMs","trace","Effect","Cause","readClockMs","isDevEnv","Effect","SubscriptionRef","args","PubSub","Exit","nowMs","Option","trace","Effect","Option","Effect","Option","Effect","Option","Effect","Option","Effect","Option","normalizeBool","Effect","Option","Effect","Effect","Effect","PubSub","nowMs","Effect","PubSub","make","Cause","Deferred","Effect","Option","ServiceMap","Cause","Effect","Effect","Cause","Effect","Option","Deferred","ServiceMap","Cause","plan","phaseRef","Effect","Ref","nowMs","Effect","make","Ref","shouldEmit","details","make","Effect","SubscriptionRef","PubSub","Stream","Option","resolved","updateDraft","Queue","ServiceMap","firstPendingAtMs","captured","txnLanePolicy","program","hasPending","anchor","sliceDurationMs","Fiber","type","Layer","Exit","stateSchema","options"]}
|