schematex 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/ai/ai-sdk.cjs +25 -25
  2. package/dist/ai/ai-sdk.d.cts +1 -1
  3. package/dist/ai/ai-sdk.d.ts +1 -1
  4. package/dist/ai/ai-sdk.js +20 -20
  5. package/dist/ai/index.cjs +28 -28
  6. package/dist/ai/index.d.cts +1 -1
  7. package/dist/ai/index.d.ts +1 -1
  8. package/dist/ai/index.js +20 -20
  9. package/dist/browser.cjs +22 -22
  10. package/dist/browser.js +20 -20
  11. package/dist/{chunk-LFZZ4NCP.cjs → chunk-3WNW5Y7P.cjs} +48 -8
  12. package/dist/chunk-3WNW5Y7P.cjs.map +1 -0
  13. package/dist/{chunk-MKKFIPKU.cjs → chunk-55UEHL57.cjs} +46 -46
  14. package/dist/{chunk-MKKFIPKU.cjs.map → chunk-55UEHL57.cjs.map} +1 -1
  15. package/dist/{chunk-BJ65PKDU.js → chunk-5U2W3HQA.js} +3 -3
  16. package/dist/{chunk-BJ65PKDU.js.map → chunk-5U2W3HQA.js.map} +1 -1
  17. package/dist/{chunk-75BMFCP5.cjs → chunk-5UCXMYE7.cjs} +44 -44
  18. package/dist/{chunk-75BMFCP5.cjs.map → chunk-5UCXMYE7.cjs.map} +1 -1
  19. package/dist/{chunk-F6OROIHS.js → chunk-66XQBGX7.js} +3 -3
  20. package/dist/{chunk-F6OROIHS.js.map → chunk-66XQBGX7.js.map} +1 -1
  21. package/dist/{chunk-HIQPEAL7.js → chunk-6TIN33CA.js} +3 -3
  22. package/dist/{chunk-HIQPEAL7.js.map → chunk-6TIN33CA.js.map} +1 -1
  23. package/dist/{chunk-RNGYXGHS.js → chunk-6YUP3QMA.js} +19 -19
  24. package/dist/{chunk-RNGYXGHS.js.map → chunk-6YUP3QMA.js.map} +1 -1
  25. package/dist/{chunk-C3IVD7DI.cjs → chunk-7EWFVNYD.cjs} +25 -25
  26. package/dist/{chunk-C3IVD7DI.cjs.map → chunk-7EWFVNYD.cjs.map} +1 -1
  27. package/dist/{chunk-56LXBM45.js → chunk-AC3XH3LB.js} +4 -4
  28. package/dist/{chunk-56LXBM45.js.map → chunk-AC3XH3LB.js.map} +1 -1
  29. package/dist/{chunk-YTEEZV6J.cjs → chunk-APV4AWQ5.cjs} +422 -422
  30. package/dist/{chunk-YTEEZV6J.cjs.map → chunk-APV4AWQ5.cjs.map} +1 -1
  31. package/dist/{chunk-UK7JF5QB.cjs → chunk-AVIKQZSX.cjs} +37 -37
  32. package/dist/{chunk-UK7JF5QB.cjs.map → chunk-AVIKQZSX.cjs.map} +1 -1
  33. package/dist/{chunk-OK5RYX55.cjs → chunk-CWZKP3CJ.cjs} +26 -26
  34. package/dist/{chunk-OK5RYX55.cjs.map → chunk-CWZKP3CJ.cjs.map} +1 -1
  35. package/dist/{chunk-2J2QWNGI.js → chunk-FIVUMDLF.js} +26 -7
  36. package/dist/chunk-FIVUMDLF.js.map +1 -0
  37. package/dist/{chunk-ZTSO3S4P.js → chunk-FO7BLCEW.js} +3 -3
  38. package/dist/{chunk-ZTSO3S4P.js.map → chunk-FO7BLCEW.js.map} +1 -1
  39. package/dist/{chunk-6BKUD5EJ.js → chunk-GLFBHQSQ.js} +4 -4
  40. package/dist/{chunk-6BKUD5EJ.js.map → chunk-GLFBHQSQ.js.map} +1 -1
  41. package/dist/{chunk-ZNLEUL7T.js → chunk-GVCPFBAV.js} +4 -4
  42. package/dist/chunk-GVCPFBAV.js.map +1 -0
  43. package/dist/{chunk-KUXOHLGC.cjs → chunk-HOI6QKC6.cjs} +52 -52
  44. package/dist/{chunk-KUXOHLGC.cjs.map → chunk-HOI6QKC6.cjs.map} +1 -1
  45. package/dist/{chunk-L2KUGWFR.cjs → chunk-IAEABLIV.cjs} +46 -46
  46. package/dist/{chunk-L2KUGWFR.cjs.map → chunk-IAEABLIV.cjs.map} +1 -1
  47. package/dist/{chunk-M5ZC3LFJ.js → chunk-IQRRZPVZ.js} +3 -3
  48. package/dist/{chunk-M5ZC3LFJ.js.map → chunk-IQRRZPVZ.js.map} +1 -1
  49. package/dist/{chunk-H4CJTKEH.js → chunk-MNOO7STY.js} +5 -5
  50. package/dist/{chunk-H4CJTKEH.js.map → chunk-MNOO7STY.js.map} +1 -1
  51. package/dist/{chunk-XI6JOG76.cjs → chunk-N56YC75X.cjs} +45 -45
  52. package/dist/{chunk-XI6JOG76.cjs.map → chunk-N56YC75X.cjs.map} +1 -1
  53. package/dist/{chunk-X4F6VVEJ.js → chunk-PAG3BNIV.js} +3 -3
  54. package/dist/{chunk-X4F6VVEJ.js.map → chunk-PAG3BNIV.js.map} +1 -1
  55. package/dist/{chunk-W7GIQTJV.cjs → chunk-PG6TDGKI.cjs} +21 -21
  56. package/dist/{chunk-W7GIQTJV.cjs.map → chunk-PG6TDGKI.cjs.map} +1 -1
  57. package/dist/{chunk-7MVDN5UC.cjs → chunk-Q5OFA4I2.cjs} +35 -35
  58. package/dist/{chunk-7MVDN5UC.cjs.map → chunk-Q5OFA4I2.cjs.map} +1 -1
  59. package/dist/{chunk-BUN3CRMP.cjs → chunk-QOLBWCF5.cjs} +65 -65
  60. package/dist/{chunk-BUN3CRMP.cjs.map → chunk-QOLBWCF5.cjs.map} +1 -1
  61. package/dist/{chunk-2UJAVPA4.cjs → chunk-QXL7AY2H.cjs} +26 -26
  62. package/dist/{chunk-2UJAVPA4.cjs.map → chunk-QXL7AY2H.cjs.map} +1 -1
  63. package/dist/{chunk-WHJXRLFD.js → chunk-SYYBKDL7.js} +48 -8
  64. package/dist/chunk-SYYBKDL7.js.map +1 -0
  65. package/dist/{chunk-SE23X5OE.js → chunk-TQU44E46.js} +4 -4
  66. package/dist/{chunk-SE23X5OE.js.map → chunk-TQU44E46.js.map} +1 -1
  67. package/dist/{chunk-SFSZUOFT.js → chunk-U3KRKXF7.js} +3 -3
  68. package/dist/{chunk-SFSZUOFT.js.map → chunk-U3KRKXF7.js.map} +1 -1
  69. package/dist/{chunk-EYHD7LV3.cjs → chunk-UDGU73RL.cjs} +129 -129
  70. package/dist/{chunk-EYHD7LV3.cjs.map → chunk-UDGU73RL.cjs.map} +1 -1
  71. package/dist/{chunk-M3R6RCXY.js → chunk-UDJ2KN2A.js} +3 -3
  72. package/dist/{chunk-M3R6RCXY.js.map → chunk-UDJ2KN2A.js.map} +1 -1
  73. package/dist/{chunk-BJWMPPEA.js → chunk-UT4TIDAA.js} +3 -3
  74. package/dist/{chunk-BJWMPPEA.js.map → chunk-UT4TIDAA.js.map} +1 -1
  75. package/dist/{chunk-RODV6PC4.cjs → chunk-UWRTV6IV.cjs} +7 -7
  76. package/dist/{chunk-RODV6PC4.cjs.map → chunk-UWRTV6IV.cjs.map} +1 -1
  77. package/dist/{chunk-IT2TVXC7.js → chunk-WTF6JXHN.js} +4 -4
  78. package/dist/{chunk-IT2TVXC7.js.map → chunk-WTF6JXHN.js.map} +1 -1
  79. package/dist/{chunk-7BEJHG43.js → chunk-X5QJO4ZD.js} +3 -3
  80. package/dist/{chunk-7BEJHG43.js.map → chunk-X5QJO4ZD.js.map} +1 -1
  81. package/dist/{chunk-NFT6VW73.js → chunk-XV2DTN6G.js} +3 -3
  82. package/dist/{chunk-NFT6VW73.js.map → chunk-XV2DTN6G.js.map} +1 -1
  83. package/dist/{chunk-XUEROLSB.cjs → chunk-YUPG2M3I.cjs} +16 -16
  84. package/dist/chunk-YUPG2M3I.cjs.map +1 -0
  85. package/dist/{chunk-K5QG53GT.cjs → chunk-ZCW7YH3C.cjs} +26 -26
  86. package/dist/{chunk-K5QG53GT.cjs.map → chunk-ZCW7YH3C.cjs.map} +1 -1
  87. package/dist/{chunk-GYTWJ6VB.cjs → chunk-ZFNZ2FYI.cjs} +67 -48
  88. package/dist/chunk-ZFNZ2FYI.cjs.map +1 -0
  89. package/dist/{chunk-3YXXZ4LT.cjs → chunk-ZZJDGGC3.cjs} +33 -33
  90. package/dist/{chunk-3YXXZ4LT.cjs.map → chunk-ZZJDGGC3.cjs.map} +1 -1
  91. package/dist/diagrams/blockdiagram/index.cjs +6 -6
  92. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  93. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  94. package/dist/diagrams/blockdiagram/index.js +2 -2
  95. package/dist/diagrams/circuit/index.cjs +8 -8
  96. package/dist/diagrams/circuit/index.d.cts +1 -1
  97. package/dist/diagrams/circuit/index.d.ts +1 -1
  98. package/dist/diagrams/circuit/index.js +2 -2
  99. package/dist/diagrams/ecomap/index.cjs +8 -8
  100. package/dist/diagrams/ecomap/index.d.cts +1 -1
  101. package/dist/diagrams/ecomap/index.d.ts +1 -1
  102. package/dist/diagrams/ecomap/index.js +3 -3
  103. package/dist/diagrams/entity/index.cjs +6 -6
  104. package/dist/diagrams/entity/index.d.cts +1 -1
  105. package/dist/diagrams/entity/index.d.ts +1 -1
  106. package/dist/diagrams/entity/index.js +2 -2
  107. package/dist/diagrams/fishbone/index.cjs +8 -8
  108. package/dist/diagrams/fishbone/index.d.cts +1 -1
  109. package/dist/diagrams/fishbone/index.d.ts +1 -1
  110. package/dist/diagrams/fishbone/index.js +2 -2
  111. package/dist/diagrams/flowchart/index.cjs +8 -8
  112. package/dist/diagrams/flowchart/index.d.cts +2 -2
  113. package/dist/diagrams/flowchart/index.d.ts +2 -2
  114. package/dist/diagrams/flowchart/index.js +2 -2
  115. package/dist/diagrams/genogram/index.cjs +10 -10
  116. package/dist/diagrams/genogram/index.d.cts +1 -1
  117. package/dist/diagrams/genogram/index.d.ts +1 -1
  118. package/dist/diagrams/genogram/index.js +3 -3
  119. package/dist/diagrams/ladder/index.cjs +6 -6
  120. package/dist/diagrams/ladder/index.d.cts +1 -1
  121. package/dist/diagrams/ladder/index.d.ts +1 -1
  122. package/dist/diagrams/ladder/index.js +2 -2
  123. package/dist/diagrams/logic/index.cjs +6 -6
  124. package/dist/diagrams/logic/index.d.cts +1 -1
  125. package/dist/diagrams/logic/index.d.ts +1 -1
  126. package/dist/diagrams/logic/index.js +2 -2
  127. package/dist/diagrams/orgchart/index.cjs +7 -7
  128. package/dist/diagrams/orgchart/index.d.cts +1 -1
  129. package/dist/diagrams/orgchart/index.d.ts +1 -1
  130. package/dist/diagrams/orgchart/index.js +2 -2
  131. package/dist/diagrams/pedigree/index.cjs +8 -8
  132. package/dist/diagrams/pedigree/index.d.cts +1 -1
  133. package/dist/diagrams/pedigree/index.d.ts +1 -1
  134. package/dist/diagrams/pedigree/index.js +3 -3
  135. package/dist/diagrams/phylo/index.cjs +7 -7
  136. package/dist/diagrams/phylo/index.d.cts +1 -1
  137. package/dist/diagrams/phylo/index.d.ts +1 -1
  138. package/dist/diagrams/phylo/index.js +2 -2
  139. package/dist/diagrams/sld/index.cjs +6 -6
  140. package/dist/diagrams/sld/index.d.cts +1 -1
  141. package/dist/diagrams/sld/index.d.ts +1 -1
  142. package/dist/diagrams/sld/index.js +2 -2
  143. package/dist/diagrams/sociogram/index.cjs +7 -7
  144. package/dist/diagrams/sociogram/index.d.cts +1 -1
  145. package/dist/diagrams/sociogram/index.d.ts +1 -1
  146. package/dist/diagrams/sociogram/index.js +3 -3
  147. package/dist/diagrams/timing/index.cjs +5 -5
  148. package/dist/diagrams/timing/index.d.cts +1 -1
  149. package/dist/diagrams/timing/index.d.ts +1 -1
  150. package/dist/diagrams/timing/index.js +2 -2
  151. package/dist/diagrams/venn/index.cjs +9 -9
  152. package/dist/diagrams/venn/index.d.cts +1 -1
  153. package/dist/diagrams/venn/index.d.ts +1 -1
  154. package/dist/diagrams/venn/index.js +2 -2
  155. package/dist/{index-dWDwG6BW.d.ts → index-D3u6vcA4.d.ts} +1 -1
  156. package/dist/{index-BrLxEzSQ.d.cts → index-bdfj6FpQ.d.cts} +1 -1
  157. package/dist/index.cjs +41 -41
  158. package/dist/index.d.cts +2 -2
  159. package/dist/index.d.ts +2 -2
  160. package/dist/index.js +19 -19
  161. package/dist/react.cjs +20 -20
  162. package/dist/react.js +19 -19
  163. package/dist/{types-BtiUg7Gx.d.cts → types-DnU2UlWz.d.cts} +2 -0
  164. package/dist/{types-BtiUg7Gx.d.ts → types-DnU2UlWz.d.ts} +2 -0
  165. package/package.json +1 -1
  166. package/dist/chunk-2J2QWNGI.js.map +0 -1
  167. package/dist/chunk-GYTWJ6VB.cjs.map +0 -1
  168. package/dist/chunk-LFZZ4NCP.cjs.map +0 -1
  169. package/dist/chunk-WHJXRLFD.js.map +0 -1
  170. package/dist/chunk-XUEROLSB.cjs.map +0 -1
  171. package/dist/chunk-ZNLEUL7T.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/diagrams/circuit/netlist.ts","../src/diagrams/circuit/parser.ts","../src/diagrams/circuit/symbols.ts","../src/diagrams/circuit/layout.ts","../src/diagrams/circuit/autolayout.ts","../src/diagrams/circuit/renderer.ts","../src/diagrams/circuit/index.ts"],"names":["title","text","c","laid","minX","maxX","circle","escapeXml","resolveIndustrialTheme","svgRoot","desc","defs","el","group"],"mappings":";;;;;;AAkCO,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM;AAAA,EAC3C,WAAA,CAAY,SAAiC,IAAA,EAAe;AAC1D,IAAA,KAAA,CAAM,OAAO,CAAA;AAD8B,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAE3C,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AAAA,EAH6C,IAAA;AAI/C,CAAA;AAQA,IAAM,UAAA,GAA6E;AAAA,EACjF,CAAA,EAAG,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EAC9C,CAAA,EAAG,EAAE,IAAA,EAAM,WAAA,EAAa,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EAC/C,CAAA,EAAG,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EAC9C,CAAA,EAAG,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA;AAAA,EAC3C,CAAA,EAAG,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAE;AAAA,EACrD,CAAA,EAAG,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAE;AAAA,EACrD,CAAA,EAAG,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACxC,CAAA,EAAG,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACzC,CAAA,EAAG,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC3C,CAAA,EAAG,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EACjD,CAAA,EAAG,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EAC1C,CAAA,EAAG,EAAE,IAAA,EAAM,SAAA,EAAW,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAE;AAAA,EAC9C,CAAA,EAAG,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA,EAChD,GAAG,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,EAAC,EAAE;AAAA;AAAA,EAClC,GAAG,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,EAAC,EAAE;AAAA,EAClC,CAAA,EAAG,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAE;AAAA;AAAA,EAC1C,GAAG,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,EAAC;AAAE;AACxC,CAAA;AAGA,IAAM,YAAA,GAAqD;AAAA,EACzD,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,gBAAA;AAAA,EACT,QAAA,EAAU,WAAA;AAAA,EACV,IAAA,EAAM,kBAAA;AAAA,EACN,GAAA,EAAK,eAAA;AAAA,EACL,GAAA,EAAK,QAAA;AAAA,EACL,EAAA,EAAI,YAAA;AAAA,EACJ,GAAA,EAAK,mBAAA;AAAA,EACL,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY,KAAA;AAAA,EACZ,EAAA,EAAI,gBAAA;AAAA,EACJ,YAAA,EAAc,gBAAA;AAAA,EACd,IAAA,EAAM,gBAAA;AAAA,EACN,SAAA,EAAW;AACb,CAAA;AAGA,IAAM,UAAA,GAAa,mEAAA;AAEnB,SAAS,YAAY,CAAA,EAAoB;AACvC,EAAA,OAAO,UAAA,CAAW,KAAK,CAAC,CAAA;AAC1B;AAEA,SAAS,SAAS,IAAA,EAAwB;AAExC,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAM;AAC7B,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAC,CAAA;AACnC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAA,GAAM,IAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAC,CAAC,CAAA;AAC1D,MAAA,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,CAAC,MAAM,GAAA,IAAO,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,EAAM;AAC7D,MAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,IAAO,KAAK,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AAC1C,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAC,CAAA;AACnC,QAAA,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAA;AAClC,QAAA;AAAA,MACF;AACA,MAAA,CAAA,EAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAC5B,IAAA,CAAA,GAAI,CAAA;AAAA,EACN;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAW,GAAA,EAAsB;AACxC,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC1B,EAAA,OAAO,EAAA,GAAK,KAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAC3D;AAEA,SAAS,QAAQ,GAAA,EAA+B;AAC9C,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC1B,EAAA,MAAM,MAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,IAAA,EAAK;AAClC,EAAA,IAAI,MAAM,GAAA,CAAI,KAAA,CAAM,EAAA,GAAK,CAAC,EAAE,IAAA,EAAK;AACjC,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnE,EAAA,OAAO,CAAC,KAAK,GAAG,CAAA;AAClB;AAMO,SAAS,YAAA,CACd,MACAA,MAAAA,EACY;AACZ,EAAA,MAAM,aAAiC,EAAC;AACxC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAwB;AAC9C,EAAA,MAAM,SAAiD,EAAC;AACxD,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAA6B;AAC9C,IAAA,IAAI,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC1B,IAAA,IAAI,CAAC,CAAA,EAAG;AACN,MAAA,CAAA,GAAI,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,EAAC,EAAE;AAC5B,MAAA,SAAA,CAAU,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAE9D,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,KAAA,CAAM,QAAQ,OAAA,EAAA,EAAW;AACvD,IAAA,MAAM,GAAA,GAAM,MAAM,OAAO,CAAA;AACzB,IAAA,MAAM,WAAW,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,EAAE,IAAA,EAAK;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,MAAM,MAAA,GAAS,SAAS,QAAQ,CAAA;AAChC,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,iBAAA;AAAA,QACR,kDAAkD,QAAQ,CAAA,CAAA,CAAA;AAAA,QAC1D,OAAA,GAAU;AAAA,OACZ;AAAA,IACF;AAEA,IAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,IAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,iBAAA,CAAkB,CAAA,uBAAA,EAA0B,EAAE,CAAA,CAAA,CAAA,EAAK,UAAU,CAAC,CAAA;AAAA,IAC1E;AAIA,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,OAAO,MAAA,GAAS,OAAO,MAAA,IAAU,CAAC,WAAW,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG;AAC5D,MAAA,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AAC3B,MAAA,MAAA,EAAA;AAAA,IACF;AAGA,IAAA,MAAM,KAA6B,EAAC;AACpC,IAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAA,EAAU;AACvC,MAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG;AAC/B,QAAA,MAAM,IAAI,iBAAA;AAAA,UACR,CAAA,oCAAA,EAAuC,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,CAAA;AAAA,UACrD,OAAA,GAAU;AAAA,SACZ;AAAA,MACF;AACA,MAAA,MAAM,CAAC,CAAA,EAAG,CAAC,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAC,CAAA;AACrC,MAAA,EAAA,CAAG,CAAC,CAAA,GAAI,CAAA;AAAA,IACV;AAGA,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,CAAC,CAAA,CAAE,WAAA,EAAY;AACjC,IAAA,MAAM,QAAA,GAAW,WAAW,MAAM,CAAA;AAClC,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,GAAG,IAAA,EAAM;AACX,MAAA,MAAM,CAAA,GAAI,EAAA,CAAG,IAAA,CAAK,WAAA,EAAY;AAC9B,MAAA,KAAA,GAAS,YAAA,CAAa,CAAC,CAAA,IAAK,CAAA;AAC5B,MAAA,QAAA,GAAW,QAAA,EAAU,IAAA,IAAQ,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,IAC1C,WAAW,QAAA,EAAU;AACnB,MAAA,KAAA,GAAQ,QAAA,CAAS,IAAA;AACjB,MAAA,QAAA,GAAW,QAAA,CAAS,IAAA;AAAA,IACtB,CAAA,MAAA,IAAW,WAAA,CAAY,EAAE,CAAA,EAAG;AAC1B,MAAA,KAAA,GAAQ,QAAA;AACR,MAAA,QAAA,GAAW,CAAC,OAAO,CAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,iBAAA;AAAA,QACR,CAAA,2BAAA,EAA8B,EAAE,CAAA,iKAAA,EAE2B,EAAE,CAAA,4JAAA,CAAA;AAAA,QAE7D,OAAA,GAAU;AAAA,OACZ;AAAA,IACF;AAMA,IAAA,MAAM,eAAe,QAAA,CAAS,MAAA;AAC9B,IAAA,IAAI,aAAA;AAEJ,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,YAAA,IAAgB,YAAA,GAAe,CAAA,EAAG;AAErD,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA;AACvC,MAAA,OAAA,CAAQ,MAAA,GAAS,YAAA;AAEjB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAC,CAAA,CAAE,WAAA,EAAY;AAClC,MAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,QAAA,KAAA,GAAQ,aAAa,KAAK,CAAA;AAAA,MAC5B,CAAA,MAAA,IACE,UAAU,KAAA,IAAS,KAAA,KAAU,SAC7B,KAAA,KAAU,MAAA,IAAU,UAAU,MAAA,IAC9B,KAAA,KAAU,YAAY,KAAA,KAAU,QAAA,IAChC,UAAU,OAAA,IAAW,KAAA,KAAU,cAAc,KAAA,KAAU,KAAA,IACvD,UAAU,YAAA,EACV;AACA,QAAA,KAAA,GAAQ,KAAA;AAER,QAAA,IAAI,UAAU,KAAA,EAAO,QAAA,GAAW,CAAC,GAAA,EAAK,KAAK,GAAG,CAAA;AAC9C,QAAA,IAAI,KAAA,KAAU,UAAU,KAAA,KAAU,QAAA,aAAqB,CAAC,GAAA,EAAK,KAAK,GAAG,CAAA;AAAA,MACvE,CAAA,MAAO;AAEL,QAAA,aAAA,GAAgB,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,MAC/B;AAEA,MAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,CAAC,aAAA,EAAe;AACrC,QAAA,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MACxC;AAAA,IACF;AAIA,IAAA,IAAI,UAAU,QAAA,IAAY,KAAA,KAAU,gBAAgB,KAAA,KAAU,aAAA,IAAiB,UAAU,aAAA,EAAe;AACtG,MAAA,QAAA,GAAW,CAAC,OAAO,CAAA;AAAA,IACrB;AAIA,IAAA,IAAI,UAAU,gBAAA,EAAkB;AAC9B,MAAA,MAAM,QAAA,GAAW,EAAA,CAAG,IAAA,IAAQ,EAAA,CAAG,SAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,QAAA,GACX,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA,GACvD,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,QAAQ,MAAA,EAAQ,CAAC,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC7E,MAAA,QAAA,GAAW,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,EAAO,GAAA,KAC5B,KAAA,CAAM,WAAA,EAAY,CAAE,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,IAAK,CAAA,CAAA,EAAI,GAAA,GAAM,CAAC,CAAA;AAAA,OAChE;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,QAAA,CAAS,MAAA,EAAQ;AACpC,MAAA,MAAM,IAAI,iBAAA;AAAA,QACR,CAAA,UAAA,EAAa,EAAE,CAAA,EAAA,EAAK,KAAK,aAAa,QAAA,CAAS,MAAM,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,QACjF,OAAA,GAAU;AAAA,OACZ;AAAA,IACF;AAIA,IAAA,MAAM,OAA+B,EAAC;AACtC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,MAAA,IAAI,GAAA,GAAM,QAAQ,CAAC,CAAA;AACnB,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,EAAG,GAAA,GAAM,KAAA;AAC5B,MAAA,IAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAA,GAAI,GAAA;AACpB,MAAA,SAAA,CAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,QAAA,CAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,IACpD;AAOA,IAAA,MAAA,CAAO,EAAE,CAAA,GAAI,IAAA;AAEb,IAAA,MAAM,IAAA,GAAyB;AAAA,MAC7B,EAAA;AAAA,MACA,aAAA,EAAe,KAAA;AAAA,MACf,SAAA,EAAW,OAAA;AAAA,MACX,KAAA,EAAO,GAAG,KAAA,IAAS,EAAA;AAAA,MACnB,KAAA,EAAO,GAAG,KAAA,IAAS,aAAA;AAAA,MACnB,OAAO;AAAC,KACV;AAEA,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA,EAAG;AACvC,MAAA,IAAI,CAAA,KAAM,OAAA,IAAW,CAAA,KAAM,OAAA,IAAW,MAAM,MAAA,EAAQ;AACpD,MAAA,IAAA,CAAK,KAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AAAA,IACnB;AACA,IAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AAAA,EACtB;AAIA,EAAA,IAAI,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,eAAe,UAAA,CAAW,IAAA;AAAA,MAAK,CAAC,CAAA,KACpC,CAAA,CAAE,aAAA,KAAkB,QAAA,IACpB,CAAA,CAAE,aAAA,KAAkB,YAAA,IACpB,CAAA,CAAE,aAAA,KAAkB,aAAA,IACpB,CAAA,CAAE,aAAA,KAAkB;AAAA,KACtB;AACA,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,GAAA,GAAM,OAAO,OAAA,EAAS,CAAA,CAAA;AAC5B,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,EAAA,EAAI,GAAA;AAAA,QACJ,aAAA,EAAe,QAAA;AAAA,QACf,SAAA,EAAW,MAAA;AAAA,QACX,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA;AAAO,OACvB,CAAA;AACD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,EAAE,KAAA,EAAO,KAAA,EAAM;AAC7B,MAAA,SAAA,CAAU,KAAK,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,MAAA,CAAQ,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAqB,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAExD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAAA,MAAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;;;ACzVO,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM;AAAA,EAC3C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF,CAAA;AAEA,IAAM,eAAA,uBAAsB,GAAA,CAA0B;AAAA,EACpD,UAAA;AAAA,EAAY,eAAA;AAAA,EAAiB,UAAA;AAAA,EAAY,gBAAA;AAAA,EAAkB,gBAAA;AAAA,EAC3D,KAAA;AAAA,EAAO,UAAA;AAAA,EAAY,MAAA;AAAA,EAAQ,WAAA;AAAA,EAC3B,WAAA;AAAA,EAAa,kBAAA;AAAA,EAAoB,cAAA;AAAA,EACjC,UAAA;AAAA,EAAY,eAAA;AAAA,EAAiB,kBAAA;AAAA,EAAoB,mBAAA;AAAA,EACjD,cAAA;AAAA,EAAgB,SAAA;AAAA,EAAW,aAAA;AAAA,EAC3B,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,UAAA;AAAA,EAAY,KAAA;AAAA,EAAO,YAAA;AAAA,EAAc,UAAA;AAAA,EAAY,WAAA;AAAA,EAAa,kBAAA;AAAA,EAC5E,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,gBAAA;AAAA,EAAkB,gBAAA;AAAA,EAChC,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,gBAAA;AAAA,EAAkB,QAAA;AAAA,EAAU,QAAA;AAAA,EAC5C,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,MAAA;AAAA,EACxB,iBAAA;AAAA,EAAmB,aAAA;AAAA,EACnB,OAAA;AAAA,EAAS,YAAA;AAAA,EAAc,gBAAA;AAAA,EAAkB,kBAAA;AAAA,EAAoB,qBAAA;AAAA,EAC7D,YAAA;AAAA,EAAc,mBAAA;AAAA,EAAqB,iBAAA;AAAA,EAAmB,WAAA;AAAA,EACtD,gBAAA;AAAA,EAAkB,gBAAA;AAAA,EAAkB,WAAA;AAAA,EAAa,SAAA;AAAA,EAAW,KAAA;AAAA,EAC5D,QAAA;AAAA,EAAU,YAAA;AAAA,EAAc,aAAA;AAAA,EAAe,aAAA;AAAA,EACvC,aAAA;AAAA,EAAe,aAAA;AAAA,EAAe,aAAA;AAAA,EAAe,SAAA;AAAA,EAAW,SAAA;AAAA,EACxD,YAAA;AAAA,EAAc,UAAA;AAAA,EAAY,UAAA;AAAA,EAC1B,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,YAAA;AAAA,EAAc,QAAA;AAAA,EAClC,SAAA;AAAA,EAAW,WAAA;AAAA,EAAa,WAAA;AAAA,EAAa,cAAA;AAAA,EACrC,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,YAAA;AAAA,EAAc,YAAA;AAAA,EAAc;AAC9D,CAAC,CAAA;AAGD,IAAM,OAAA,GAAgD;AAAA,EACpD,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,gBAAA;AAAA,EACT,QAAA,EAAU,WAAA;AAAA,EACV,IAAA,EAAM,kBAAA;AAAA,EACN,GAAA,EAAK,eAAA;AAAA,EACL,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,aAAA;AAAA,EACN,UAAA,EAAY,KAAA;AAAA,EACZ,OAAA,EAAS,KAAA;AAAA,EACT,OAAA,EAAS,KAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,GAAA,EAAK,QAAA;AAAA,EACL,EAAA,EAAI,YAAA;AAAA,EACJ,GAAA,EAAK,mBAAA;AAAA,EACL,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,gBAAA;AAAA,EACP,GAAA,EAAK,gBAAA;AAAA,EACL,GAAA,EAAK,gBAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAGA,IAAM,WAAA,mBAAc,IAAI,GAAA,CAAY,CAAC,MAAM,CAAC,CAAA;AAE5C,SAAS,cAAc,GAAA,EAA0C;AAC/D,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,EAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,QAAQ,KAAK,CAAA;AACxC,EAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,KAA6B,CAAA,EAAG;AACtD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA,EAAG;AAE1B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,UAAA,uBAAiB,GAAA,CAAI,CAAC,SAAS,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAC,CAAA;AAE1D,SAAS,WAAW,IAAA,EAA6I;AAC/J,EAAA,MAAM,GAAA,GAOF,EAAE,KAAA,EAAO,EAAC,EAAE;AAGhB,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,EAAM;AAC7B,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAC,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAC,CAAA;AACzD,MAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,MAAA,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAA;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,CAAC,MAAM,GAAA,IAAO,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,EAAM;AAC7D,MAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,IAAO,KAAK,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AAC1C,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAC,CAAA;AACnC,QAAA,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAA;AAClC,QAAA;AAAA,MACF;AACA,MAAA,CAAA,EAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAC5B,IAAA,CAAA,GAAI,CAAA;AAAA,EACN;AAEA,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,WAAA,EAAa,CAAA,EAAG;AACrC,MAAA,GAAA,CAAI,SAAA,GAAY,IAAI,WAAA,EAAY;AAChC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC1B,IAAA,IAAI,KAAK,CAAA,EAAG;AACV,MAAA,MAAM,MAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,IAAA,EAAK;AAClC,MAAA,IAAI,MAAM,GAAA,CAAI,KAAA,CAAM,EAAA,GAAK,CAAC,EAAE,IAAA,EAAK;AACjC,MAAA,IAAI,IAAI,UAAA,CAAW,GAAG,KAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5C,QAAA,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MACvB;AACA,MAAA,IAAI,GAAA,KAAQ,OAAA,EAAS,GAAA,CAAI,KAAA,GAAQ,GAAA;AAAA,WAAA,IACxB,GAAA,KAAQ,OAAA,EAAS,GAAA,CAAI,KAAA,GAAQ,GAAA;AAAA,WAAA,IAC7B,GAAA,KAAQ,IAAA,EAAM,GAAA,CAAI,EAAA,GAAK,GAAA;AAAA,WAAA,IACvB,GAAA,KAAQ,QAAA,EAAU,GAAA,CAAI,MAAA,GAAS,GAAA;AAAA,WACnC,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,GAAI,MAAA;AAAA,EACnB;AACA,EAAA,OAAO,GAAA;AACT;AAYO,SAAS,aAAaC,KAAAA,EAA0B;AACrD,EAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,kBAAkB,QAAA,CACrB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,MAAA,EAAQ,EAAE,EAAE,IAAA,EAAM,EACvC,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAEhC,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,eAAe,CAAA,EAAG;AACtD,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,KAAA,CAAM,WAAW,CAAA;AACpD,IAAA,IAAI,SAAA,GAAY,EAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,MAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA,CAAE,QAAQ,MAAA,EAAQ,EAAE,EAAE,IAAA,EAAK;AAC/C,MAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,QAAA,SAAA,GAAY,CAAA;AACZ,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,OAAO,QAAA,CAAS,KAAA,CAAM,YAAY,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AACpD,IAAA,OAAO,YAAA,CAAa,IAAA,EAAM,UAAA,GAAa,CAAC,CAAC,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,KAAA,GAAQA,KAAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAC9D,EAAA,IAAID,MAAAA;AACJ,EAAA,MAAM,aAAiC,EAAC;AACxC,EAAA,MAAM,OAAqB,EAAC;AAC5B,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAwB;AAC9C,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,SAAA;AAEJ,EAAA,MAAM,OAAO,CAAC,MAAA,KAAmB,CAAA,EAAG,MAAM,IAAI,MAAA,EAAQ,CAAA,CAAA;AAEtD,EAAA,KAAA,MAAW,WAAW,KAAA,EAAO;AAC3B,IAAA,MAAM,WAAW,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,EAAE,IAAA,EAAK;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU;AAGf,IAAA,IAAI,aAAA,CAAc,IAAA,CAAK,QAAQ,CAAA,EAAG;AAChC,MAAA,MAAM,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA;AACpC,MAAA,IAAI,CAAA,EAAGA,MAAAA,GAAQ,CAAA,CAAE,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,eAAe,CAAA;AAC9C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,SAAA,GAAY,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAA,EAAK;AAC5B,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,8BAA8B,CAAA;AAC7D,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,MAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AACxB,QAAA,MAAM,IAAgB,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,EAAC,EAAE;AAC9C,QAAA,SAAA,CAAU,GAAA,CAAI,MAAM,CAAC,CAAA;AACrB,QAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACb;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,wCAAwC,CAAA;AAC3E,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAC1B,MAAA,IAAI,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC1B,MAAA,IAAI,CAAC,CAAA,EAAG;AACN,QAAA,CAAA,GAAI,EAAE,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,EAAC,EAAE;AAC5B,QAAA,SAAA,CAAU,GAAA,CAAI,MAAM,CAAC,CAAA;AACrB,QAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACb;AACA,MAAA,MAAM,EAAA,GAAK,KAAK,KAAK,CAAA;AACrB,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,EAAA;AAAA,QACA,aAAA,EAAe,KAAA;AAAA,QACf,SAAA,EAAW,OAAA;AAAA,QACX,EAAA,EAAI,SAAA;AAAA,QACJ,KAAA,EAAO,EAAE,GAAA,EAAK,IAAA;AAAK,OACpB,CAAA;AACD,MAAA,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,EAAE,CAAA,IAAA,CAAM,CAAA;AAC1B,MAAA,SAAA,GAAY,GAAG,EAAE,CAAA,IAAA,CAAA;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,qDAAqD,CAAA;AACvF,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,EAAA,GAAK,KAAK,KAAK,CAAA;AACrB,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,EAAA;AAAA,QACA,aAAA,EAAe,OAAA;AAAA,QACf,SAAA,EAAY,UAAA,CAAW,CAAC,CAAA,EAAG,aAAY,IAA0B,OAAA;AAAA,QACjE,EAAA,EAAI,SAAA;AAAA,QACJ,KAAA,EAAO,WAAW,CAAC;AAAA,OACpB,CAAA;AAED,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,4DAA4D,CAAA;AAC7F,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,EAAA,GAAK,KAAK,GAAG,CAAA;AACnB,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,EAAA;AAAA,QACA,aAAA,EAAe,MAAA;AAAA,QACf,SAAA,EAAY,SAAA,CAAU,CAAC,CAAA,EAAG,aAAY,IAA0B,OAAA;AAAA,QAChE,EAAA,EAAI,SAAA;AAAA,QACJ,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,GAAI,EAAE,QAAQ,SAAA,CAAU,CAAC,CAAA,EAAE,GAAI;AAAC,OACnD,CAAA;AACD,MAAA,SAAA,GAAY,GAAG,EAAE,CAAA,IAAA,CAAA;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,4BAA4B,CAAA;AAC7D,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,mDAAmD,CAAA;AAErF,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,EAAA,GAAK,WAAW,CAAC,CAAA;AACvB,MAAA,MAAM,OAAA,GAAU,WAAW,CAAC,CAAA;AAC5B,MAAA,MAAM,IAAA,GAAO,cAAc,OAAO,CAAA;AAClC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,iBAAA,CAAkB,CAAA,wBAAA,EAA2B,OAAO,CAAA,CAAE,CAAA;AAAA,MAClE;AACA,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,CAAC,CAAA,IAAK,EAAA;AAC9B,MAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,MAAA,MAAM,IAAA,GAAyB;AAAA,QAC7B,EAAA;AAAA,QACA,aAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAW,OAAO,SAAA,IAAa,OAAA;AAAA,QAC/B,EAAA,EAAI,OAAO,EAAA,IAAM,SAAA;AAAA,QACjB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,OAAO,MAAA,CAAO;AAAA,OAChB;AACA,MAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,QAAA,IAAA,CAAK,QAAQ,EAAE,GAAG,KAAK,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,MACtD;AACA,MAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AACpB,MAAA,SAAA,GAAY,GAAG,EAAE,CAAA,IAAA,CAAA;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,OAAA,GAAU,UAAU,CAAC,CAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,cAAc,OAAO,CAAA;AAClC,MAAA,IAAI,CAAC,IAAA,EAAM;AAET,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,CAAC,CAAA,IAAK,EAAA;AAC7B,MAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,MAAA,MAAM,EAAA,GAAK,KAAK,IAAI,CAAA;AACpB,MAAA,MAAM,IAAA,GAAyB;AAAA,QAC7B,EAAA;AAAA,QACA,aAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAW,OAAO,SAAA,IAAa,OAAA;AAAA,QAC/B,EAAA,EAAI,OAAO,EAAA,IAAM,SAAA;AAAA,QACjB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,OAAO,MAAA,CAAO;AAAA,OAChB;AACA,MAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AACpB,MAAA,SAAA,GAAY,GAAG,EAAE,CAAA,IAAA,CAAA;AACjB,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAAA,MAAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;;;AC9SA,IAAM,IAAA,GAAO,gCAAA;AACb,IAAM,IAAA,GAAO,gCAAA;AACb,IAAM,IAAA,GAAO,gCAAA;AAEb,SAAS,QAAA,CAAS,EAAA,EAAY,EAAA,EAAY,EAAA,EAAY,EAAA,EAAoB;AACxE,EAAA,OAAO,CAAA,UAAA,EAAa,EAAE,CAAA,MAAA,EAAS,EAAE,SAAS,EAAE,CAAA,MAAA,EAAS,EAAE,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,CAAA;AAClE;AAIA,IAAM,QAAA,GAAsB;AAAA,EAC1B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,GAAA,EAAK,MACH,CAAA,wFAAA,EAA2F,IAAI,CAAA,EAAA;AACnG,CAAA;AAEA,IAAM,SAAA,GAAuB;AAAA,EAC3B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,gBAAA,GAA8B;AAAA,EAClC,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,CAAA,4EAAA,CAAA;AAAA,IACA,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACrB,CAAA,+DAAA,CAAA;AAAA,IACA,CAAA,2DAAA;AAAA,GACF,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,QAAA,GAAsB;AAAA,EAC1B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,GAAA,EAAK,MACH,CAAA,4FAAA,EAA+F,IAAI,CAAA,EAAA;AACvG,CAAA;AAEA,IAAM,IAAA,GAAkB;AAAA,EACtB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,gEAAgE,IAAI,CAAA,EAAA,CAAA;AAAA,IACpE,sCAAsC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,OAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,0DAA0D,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9D,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,WAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACjB,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACjB,EAAA,EAAI,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IAClB,EAAA,EAAI,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA;AAAE,GACpB;AAAA,EACA,KAAK,MACH;AAAA;AAAA,IAEE,oGAAoG,IAAI,CAAA,EAAA,CAAA;AAAA,IACxG,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA;AAAA,IAEnB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA;AAAA,IAE9C,yGAAyG,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7G,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,cAAA,GAA4B;AAAA,EAChC,MAAA,EAAQ,EAAA;AAAA;AAAA,EAER,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,IAAA,EAAM,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA;AAAE,GACtB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,CAAA,0DAAA,CAAA;AAAA,IACA,CAAA,8DAAA,CAAA;AAAA,IACA,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,cAAA,GAA4B;AAAA,EAChC,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,IAAA,EAAM,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA;AAAE,GACtB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,qCAAqC,IAAI,CAAA,EAAA,CAAA;AAAA,IACzC,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,SAAA,GAAuB;AAAA,EAC3B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,IAAA,EAAM,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA;AAAE,GACtB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,yDAAyD,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7D,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,OAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,IAAA,EAAM,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA;AAAE,GACtB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,sCAAsC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,MAAA,GAAoB;AAAA,EACxB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA;AAAA,EAEvD,KAAK,MACH;AAAA,IACE,sCAAsC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,sCAAsC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1C,sCAAsC,IAAI,CAAA,EAAA;AAAA,GAC5C,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,UAAA,GAAwB;AAAA,EAC5B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,qCAAqC,IAAI,CAAA,EAAA,CAAA;AAAA,IACzC,mCAAmC,IAAI,CAAA,EAAA;AAAA,GACzC,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,GAAA,GAAiB;AAAA,EACrB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,sCAAsC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1C,wCAAwC,IAAI,CAAA,EAAA;AAAA,GAC9C,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,KAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,mCAAmC,IAAI,CAAA,EAAA,CAAA;AAAA,IACvC,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,KAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,mCAAmC,IAAI,CAAA,EAAA,CAAA;AAAA,IACvC,yDAAyD,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7D,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,QAAA,GAAsB;AAAA,EAC1B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,mCAAmC,IAAI,CAAA,EAAA,CAAA;AAAA,IACvC,sEAAsE,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1E,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,GAAA,GAAiB;AAAA,EACrB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,mCAAmC,IAAI,CAAA,EAAA,CAAA;AAAA,IACvC,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA;AAAA,IAErB,sEAAsE,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1E,sEAAsE,IAAI,CAAA,EAAA;AAAA,GAC5E,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,UAAA,GAAwB;AAAA,EAC5B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,mCAAmC,IAAI,CAAA,EAAA,CAAA;AAAA,IACvC,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA;AAAA,IAErB,sEAAsE,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1E,sEAAsE,IAAI,CAAA,EAAA;AAAA,GAC5E,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,GAAA,GAAiB;AAAA,EACrB,MAAA,EAAQ,EAAA;AAAA;AAAA,EAER,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACrB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACnB,SAAA,EAAW,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IAC3B,OAAA,EAAS,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,IACxB,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAChB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACnB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GACpB;AAAA,EACA,KAAK,MACH;AAAA,IACE,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,QAAA,CAAS,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAG,CAAA;AAAA,IACzB,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAAA;AAAA,IAEvB,uCAAuC,IAAI,CAAA,EAAA;AAAA,GAC7C,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,GAAA,GAAiB;AAAA,EACrB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACrB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACnB,SAAA,EAAW,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,IAC1B,OAAA,EAAS,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACzB,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAChB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,IAClB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA;AAAI,GACrB;AAAA,EACA,KAAK,MACH;AAAA,IACE,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,QAAA,CAAS,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAG,CAAA;AAAA,IACzB,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAAA;AAAA,IAEvB,wCAAwC,IAAI,CAAA,EAAA;AAAA,GAC9C,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,IAAA,GAAkB;AAAA,EACtB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACrB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACvB,MAAA,EAAQ,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,IACvB,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAChB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACnB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GACpB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAG,CAAA;AAAA,IACxB,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IACtB,qCAAqC,IAAI,CAAA,EAAA;AAAA,GAC3C,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,IAAA,GAAkB;AAAA,EACtB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACrB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACnB,MAAA,EAAQ,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACxB,KAAA,EAAO,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,IACtB,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAChB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACnB,CAAA,EAAG,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GACpB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAG,CAAA;AAAA,IACxB,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IACtB,qCAAqC,IAAI,CAAA,EAAA;AAAA,GAC3C,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,MAAA,GAAoB;AAAA,EACxB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACrB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACvB,MAAA,EAAQ,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GACzB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAG,CAAA;AAAA,IACxB,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IACtB,qCAAqC,IAAI,CAAA,EAAA;AAAA,GAC3C,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,MAAA,GAAoB;AAAA,EACxB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACrB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACvB,MAAA,EAAQ,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GACzB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAG,CAAA;AAAA,IACxB,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IACtB,qCAAqC,IAAI,CAAA,EAAA;AAAA,GAC3C,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,KAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,IACrB,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,IACrB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,SAAA,EAAW,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IAC3B,SAAA,EAAW,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GAC5B;AAAA,EACA,KAAK,MACH;AAAA,IACE,kDAAkD,IAAI,CAAA,EAAA,CAAA;AAAA,IACtD,CAAA,yDAAA,CAAA;AAAA,IACA,CAAA,8DAAA;AAAA,GACF,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,UAAA,GAAwB;AAAA,EAC5B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,IACrB,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,IACrB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA;AAAE,GACrB;AAAA,EACA,KAAK,MACH;AAAA,IACE,kDAAkD,IAAI,CAAA,EAAA,CAAA;AAAA,IACtD,CAAA,yDAAA,CAAA;AAAA,IACA,CAAA,8DAAA,CAAA;AAAA,IACA,6CAA6C,IAAI,CAAA,EAAA;AAAA,GACnD,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,WAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,gCAAgC,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,gCAAgC,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,OAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACrB,gCAAgC,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,gCAAgC,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,2CAA2C,IAAI,CAAA,EAAA;AAAA,GACjD,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,QAAA,GAAW,CAAC,MAAA,KAAqC,MACrD;AAAA,EACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,EACnB,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,EAClD,2EAA2E,MAAM,CAAA,OAAA,CAAA;AAAA,EACjF,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AACvB,CAAA,CAAE,KAAK,EAAE,CAAA;AAEX,IAAM,OAAA,GAAqB,EAAE,MAAA,EAAQ,EAAA,EAAI,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAA,IAAI,EAAG,GAAA,EAAK,QAAA,CAAS,GAAG,CAAA,EAAE;AACtH,IAAM,SAAA,GAAuB,EAAE,MAAA,EAAQ,EAAA,EAAI,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAA,IAAI,EAAG,GAAA,EAAK,QAAA,CAAS,GAAG,CAAA,EAAE;AACxH,IAAM,SAAA,GAAuB,EAAE,MAAA,EAAQ,EAAA,EAAI,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAA,IAAI,EAAG,GAAA,EAAK,QAAA,CAAS,GAAG,CAAA,EAAE;AACxH,IAAM,KAAA,GAAmB,EAAE,MAAA,EAAQ,EAAA,EAAI,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAA,IAAI,EAAG,GAAA,EAAK,QAAA,CAAS,GAAG,CAAA,EAAE;AAKpH,IAAM,IAAA,GAAkB;AAAA,EACtB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAGA,IAAM,MAAA,GAAoB;AAAA,EACxB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,2DAA2D,IAAI,CAAA,EAAA,CAAA;AAAA,IAC/D,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAGA,IAAM,OAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,0DAA0D,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9D,4DAA4D,IAAI,CAAA,EAAA,CAAA;AAAA,IAChE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC;AAAA,GACrB,CAAE,KAAK,EAAE;AACb,CAAA;AAGA,IAAM,UAAA,GAAwB;AAAA,EAC5B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC;AAAA,GACvB,CAAE,KAAK,EAAE;AACb,CAAA;AAKA,IAAM,QAAA,GAAsB;AAAA,EAC1B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,qFAAqF,IAAI,CAAA,EAAA,CAAA;AAAA,IACzF,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,wCAAwC,IAAI,CAAA,EAAA;AAAA,GAC9C,CAAE,KAAK,EAAE;AACb,CAAA;AAGA,IAAM,cAAA,GAA4B;AAAA,EAChC,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,qFAAqF,IAAI,CAAA,EAAA,CAAA;AAAA,IACzF,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,CAAA,gEAAA;AAAA,GACF,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,cAAA,GAA4B;AAAA,EAChC,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,qFAAqF,IAAI,CAAA,EAAA,CAAA;AAAA,IACzF,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,CAAA,gEAAA;AAAA,GACF,CAAE,KAAK,EAAE;AACb,CAAA;AAGA,IAAM,GAAA,GAAiB;AAAA,EACrB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,qFAAqF,IAAI,CAAA,EAAA,CAAA;AAAA,IACzF,8CAA8C,IAAI,CAAA,EAAA,CAAA;AAAA,IAClD,sEAAsE,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1E,sEAAsE,IAAI,CAAA,EAAA;AAAA,GAC5E,CAAE,KAAK,EAAE;AACb,CAAA;AAGA,IAAM,YAAA,GAA0B;AAAA,EAC9B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,0CAA0C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9C,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACrB,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,yCAAyC,IAAI,CAAA,EAAA;AAAA,GAC/C,CAAE,KAAK,EAAE;AACb,CAAA;AAGA,IAAM,iBAAA,GAA+B;AAAA,EACnC,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,+FAA+F,IAAI,CAAA,EAAA,CAAA;AAAA,IACnG,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,yCAAyC,IAAI,CAAA,EAAA;AAAA,GAC/C,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,WAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACrB,EAAA,EAAI,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,IACpB,EAAA,EAAI,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GACrB;AAAA,EACA,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,gCAAgC,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,kCAAkC,IAAI,CAAA,EAAA,CAAA;AAAA,IACtC,QAAA,CAAS,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,GAAG,CAAA;AAAA,IACzB,iCAAiC,IAAI,CAAA,EAAA,CAAA;AAAA,IACrC,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE;AAAA,GACzB,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,OAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACrB,gCAAgC,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,gCAAgC,IAAI,CAAA,EAAA,CAAA;AAAA,IACpC,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,yCAAyC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC7C,2CAA2C,IAAI,CAAA,EAAA;AAAA,GACjD,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,WAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,sCAAsC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,wCAAwC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC5C,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,wCAAwC,IAAI,CAAA,EAAA;AAAA,GAC9C,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,WAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,sCAAsC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC1C,+CAA+C,IAAI,CAAA,EAAA;AAAA,GACrD,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,UAAA,GAAwB;AAAA,EAC5B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACnB,6CAA6C,IAAI,CAAA,EAAA;AAAA,GACnD,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,UAAA,GAAwB;AAAA,EAC5B,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAE,EAAE;AAAA,EACtD,KAAK,MACH;AAAA,IACE,uCAAuC,IAAI,CAAA,EAAA,CAAA;AAAA,IAC3C,uCAAuC,IAAI,CAAA,EAAA;AAAA,GAC7C,CAAE,KAAK,EAAE;AACb,CAAA;AAEA,IAAM,OAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,KAAK,MACH;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AAAA,IACrB,2CAA2C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC/C,0CAA0C,IAAI,CAAA,EAAA;AAAA,GAChD,CAAE,KAAK,EAAE;AACb,CAAA;AAUA,SAAS,QAAA,CACP,WAAA,EACA,YAAA,EACA,SAAA,EACW;AACX,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MACpB,GAAA,EAAK,EAAE,CAAA,EAAG,MAAA,EAAQ,GAAG,CAAA;AAAE,KACzB;AAAA,IACA,GAAA,EAAK,CAAC,MAAA,EAAiB,MAAA,EAAiB,KAAA,KAAmC;AACzE,MAAA,MAAM,IAAA,GAAQ,KAAA,EAAO,SAAA,GAAY,KAAA,CAAM,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,GAAI,WAAA;AACnF,MAAA,MAAM,KAAA,GAAS,KAAA,EAAO,UAAA,GAAa,KAAA,CAAM,WAAW,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,GAAI,YAAA;AACtF,MAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC/C,MAAA,MAAM,KAAA,GAAQ,EAAA;AACd,MAAA,MAAM,KAAA,GAAQ,SAAS,CAAA,GAAI,CAAA,CAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,CAAC,KAAA,GAAQ,CAAA;AACtB,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,KAAA,CAAM,IAAA,CAAK,kBAAkB,IAAI,CAAA,SAAA,EAAY,MAAM,CAAA,UAAA,EAAa,KAAK,CAAA,eAAA,EAAkB,IAAI,CAAA,EAAA,CAAI,CAAA;AAC/F,MAAA,MAAM,SAAA,GAAY,KAAA,EAAO,QAAA,IAAY,SAAA,IAAa,EAAA;AAClD,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,CAAM,KAAK,CAAA,SAAA,EAAY,MAAA,GAAS,CAAC,CAAA,6DAAA,EAAgE,SAAS,CAAA,OAAA,CAAS,CAAA;AAAA,MACrH;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,QAAA,MAAM,CAAA,GAAI,IAAA,GAAO,KAAA,IAAS,CAAA,GAAI,CAAA,CAAA;AAC9B,QAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAqB,CAAC,gBAAgB,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,CAAI,CAAA;AAC/D,QAAA,KAAA,CAAM,IAAA,CAAK,kBAAkB,CAAA,GAAI,CAAC,mCAAmC,IAAA,CAAK,CAAC,CAAC,CAAA,OAAA,CAAS,CAAA;AAAA,MACvF;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,QAAA,MAAM,CAAA,GAAI,IAAA,GAAO,KAAA,IAAS,CAAA,GAAI,CAAA,CAAA;AAC9B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,MAAA,EAAS,MAAA,GAAS,CAAC,CAAA,MAAA,EAAS,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,CAAI,CAAA;AAClF,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,GAAS,CAAC,CAAA,KAAA,EAAQ,CAAA,GAAI,CAAC,CAAA,kDAAA,EAAqD,KAAA,CAAM,CAAC,CAAC,CAAA,OAAA,CAAS,CAAA;AAAA,MACtH;AACA,MAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACtB;AAAA,GACF;AACF;AAEA,IAAM,UAAA,GAAwB,QAAA;AAAA,EAC5B,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,EACnB,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,EACnB;AACF,CAAA;AAGA,IAAM,aAAwB,MAAM;AAClC,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AACzC,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAEvC,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,CAAA,GAAI,CAAA;AAEV,EAAA,MAAM,IAAA,GAAO,GAAC,GAAQ,CAAA;AACtB,EAAA,MAAM,OAAA,GAAqC;AAAA,IACzC,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,MAAA,EAAQ,GAAG,CAAA;AAAE,GACzB;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAC9C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,CAAA,GAAI,IAAA,GAAO,KAAA,IAAS,CAAA,GAAI,CAAA,CAAA;AAC9B,IAAA,OAAA,CAAQ,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA,EAAG,IAAI,CAAA,EAAE;AACnC,IAAA,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAC,CAAA,GAAI,EAAE,CAAA,EAAG,MAAA,GAAS,GAAG,CAAA,EAAE;AAAA,EAC9C;AACA,EAAA,OAAO,EAAE,GAAG,GAAA,EAAK,OAAA,EAAQ;AAC3B,CAAA,GAAG;AAEH,IAAM,iBAAA,GAA+B;AAAA,EACnC,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACjB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AAAG,GACtB;AAAA,EACA,GAAA,EAAK,CAAC,EAAA,EAAa,EAAA,EAAa,KAAA,KAC9B;AAAA,IACE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACpB,4DAA4D,IAAI,CAAA,EAAA,CAAA;AAAA,IAChE,CAAA,wEAAA,EAA2E,KAAA,EAAO,KAAA,IAAS,KAAK,CAAA,OAAA,CAAA;AAAA,IAChG,QAAA,CAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,IACrB,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE;AAAA,GACzB,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,aAAA,GAA2B;AAAA,EAC/B,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IACpB,GAAA,EAAK,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,IACnB,KAAA,EAAO,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA;AAAI,GACzB;AAAA,EACA,KAAK,MACH;AAAA,IACE,qFAAqF,IAAI,CAAA,EAAA,CAAA;AAAA,IACzF,2CAA2C,IAAI,CAAA,EAAA,CAAA;AAAA,IAC/C,0CAA0C,IAAI,CAAA,EAAA;AAAA,GAChD,CAAE,KAAK,EAAE;AACb,CAAA;AAIA,IAAM,cAAA,GAA4B;AAAA,EAChC,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAE,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,EAAG,KAAK,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,GAAE,EAAE;AAAA,EACvD,GAAA,EAAK,CAAC,KAAA,EAAgB,MAAA,EAAiB,KAAA,KAAmC;AACxE,IAAA,MAAM,QAAA,GAAW,KAAA,EAAO,IAAA,IAAQ,KAAA,EAAO,SAAA,IAAa,SAAA;AACpD,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AACpE,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAC,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,EAAA;AACf,IAAA,MAAM,KAAA,GAAQ,EAAA;AACd,IAAA,MAAM,KAAA,GAAQ,SAAS,CAAA,GAAI,CAAA,CAAA;AAC3B,IAAA,MAAM,IAAA,GAAO,CAAC,KAAA,GAAQ,CAAA;AACtB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,kBAAkB,IAAI,CAAA,SAAA,EAAY,MAAM,CAAA,UAAA,EAAa,KAAK,0CAA0C,IAAI,CAAA,EAAA;AAAA,KAC1G;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,YAAY,MAAA,GAAS,CAAC,QAAQ,IAAA,GAAO,EAAE,0DAA0D,KAAK,CAAA,OAAA;AAAA,OACxG;AAAA,IACF;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAM,IAAI,IAAA,GAAO,KAAA,IAAS,CAAA,GAAI,CAAA,CAAA,IAAM,QAAQ,CAAA,GAAI,CAAA,CAAA;AAChD,MAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAqB,CAAC,gBAAgB,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,CAAI,CAAA;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,CAAI,CAAA;AACrD,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,CAAA,gBAAA,EAAmB,CAAA,GAAI,CAAC,CAAA,gCAAA,EAAmC,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA,OAAA;AAAA,OACnF;AAAA,IACF;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACtB;AACF,CAAA;AAIO,IAAM,OAAA,GAA4D;AAAA,EACvE,QAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,GAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA,EAAa,SAAA;AAAA,EACb;AAAA;AAAA;AAGF,CAAA;AAGO,IAAM,aAAA,GAA2C;AAAA,EACtD;AACF,CAAA;AAEO,SAAS,UAAU,CAAA,EAAkC;AAC1D,EAAA,OAAO,OAAA,CAAQ,CAAyB,CAAA,IAAK,aAAA,CAAc,CAAC,CAAA;AAC9D;;;AC97BA,SAAS,YAAY,CAAA,EAA6B;AAChD,EAAA,OAAO,CAAA,KAAM,UAAU,CAAA,GAAI,CAAA,KAAM,SAAS,EAAA,GAAK,CAAA,KAAM,SAAS,GAAA,GAAM,GAAA;AACtE;AAEA,SAAS,WAAA,CAAY,GAAc,QAAA,EAA6B;AAC9D,EAAA,MAAM,CAAA,GAAK,QAAA,GAAW,IAAA,CAAK,EAAA,GAAM,GAAA;AACjC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpB,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpB,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,EAAE;AACtD;AAEA,SAAS,gBAAA,CACP,GAAA,EACA,IAAA,EACA,IAAA,EACuB;AACvB,EAAA,IAAI,QAAQ,QAAA,EAAU,OAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAC1C,EAAA,IAAI,KAAK,GAAA,CAAI,GAAG,GAAG,OAAO,IAAA,CAAK,IAAI,GAAG,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC3B,EAAA,IAAI,MAAM,CAAA,EAAG;AAEX,IAAA,MAAME,EAAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AACtB,IAAA,IAAIA,EAAAA,EAAG,OAAOA,EAAAA,CAAE,OAAA,CAAQ,OAAOA,EAAAA,CAAE,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,EAAGA,EAAAA,CAAE,CAAA,EAAG,CAAA,EAAGA,GAAE,CAAA,EAAE;AACpE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAC3B,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAC7B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACrB,EAAA,IAAI,CAAC,GAAG,OAAO,MAAA;AACf,EAAA,OAAO,CAAA,CAAE,QAAQ,GAAG,CAAA;AACtB;AAEO,SAAS,cAAc,GAAA,EAAsC;AAClE,EAAA,MAAM,QAA4B,EAAC;AACnC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA8B;AAC/C,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAuB;AACxC,EAAA,IAAI,MAAA,GAAoB,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAErC,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,UAAA,EAAY;AAEjC,IAAA,IAAI,OAAA,GAAqB,MAAA;AACzB,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,CAAA;AACrD,MAAA,IAAI,UAAU,OAAA,GAAU,QAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,aAAa,CAAA;AACxC,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA;AAEtC,IAAA,IAAI,IAAA,CAAK,kBAAkB,MAAA,EAAQ;AACjC,MAAA,MAAM,MAAM,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,MAAA,IAAU,MAAM,EAAE,CAAA;AACnD,MAAA,MAAM,SAAA,GAAY,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA;AACnD,MAAA,MAAM,GAAA,GAAM,EAAE,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,SAAA,CAAU,CAAA,EAAE;AACrE,MAAA,MAAMC,KAAAA,GAAyB;AAAA,QAC7B,SAAA,EAAW,IAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,QAAA,EAAU,GAAA;AAAA,QACV,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,GAAA;AAAI,OACjC;AACA,MAAA,KAAA,CAAM,KAAKA,KAAI,CAAA;AACf,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAIA,KAAI,CAAA;AACtB,MAAA,MAAA,GAAS,GAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,kBAAkB,KAAA,EAAO;AAChC,MAAA,MAAMA,KAAAA,GAAyB;AAAA,QAC7B,SAAA,EAAW,IAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,QAAA,EAAU,CAAA;AAAA,QACV,MAAA,EAAQ,CAAA;AAAA,QACR,SAAS,EAAE,KAAA,EAAO,SAAS,GAAA,EAAK,OAAA,EAAS,QAAQ,OAAA;AAAQ,OAC3D;AACA,MAAA,KAAA,CAAM,KAAKA,KAAI,CAAA;AACf,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAIA,KAAI,CAAA;AACtB,MAAA,IAAI,IAAA,CAAK,OAAO,GAAA,EAAK,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,OAAO,CAAA;AACrD,MAAA,MAAA,GAAS,OAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,kBAAkB,OAAA,EAAS;AAClC,MAAA,MAAMA,KAAAA,GAAyB;AAAA,QAC7B,SAAA,EAAW,IAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,QAAA,EAAU,GAAA;AAAA,QACV,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,KAAK,OAAA;AAAQ,OAC1C;AACA,MAAA,KAAA,CAAM,KAAKA,KAAI,CAAA;AACf,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAIA,KAAI,CAAA;AAEtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,GAAA,EAAK;AAER,MAAA,MAAM,SAAA,GAAY,YAAY,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA;AAClD,MAAA,MAAM,GAAA,GAAM,EAAE,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,SAAA,CAAU,CAAA,EAAE;AACrE,MAAA,MAAMA,KAAAA,GAAyB;AAAA,QAC7B,SAAA,EAAW,IAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,GAAG,OAAA,CAAQ,CAAA;AAAA,QACX,QAAA,EAAU,GAAA;AAAA,QACV,MAAA,EAAQ,EAAA;AAAA,QACR,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,GAAA;AAAI,OACjC;AACA,MAAA,KAAA,CAAM,KAAKA,KAAI,CAAA;AACf,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAIA,KAAI,CAAA;AACtB,MAAA,MAAA,GAAS,GAAA;AACT,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,eAA0C,EAAC;AACjD,IAAA,KAAA,MAAW,CAAC,MAAM,EAAE,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACpD,MAAA,MAAM,EAAA,GAAK,WAAA,CAAY,EAAA,EAAI,GAAG,CAAA;AAC9B,MAAA,YAAA,CAAa,IAAI,CAAA,GAAI,EAAE,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAI,EAAA,CAAG,CAAA,EAAE;AAAA,IAClE;AAEA,IAAA,MAAM,IAAA,GAAyB;AAAA,MAC7B,SAAA,EAAW,IAAA;AAAA,MACX,GAAG,OAAA,CAAQ,CAAA;AAAA,MACX,GAAG,OAAA,CAAQ,CAAA;AAAA,MACX,QAAA,EAAU,GAAA;AAAA,MACV,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,OAAA,EAAS;AAAA,KACX;AACA,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AACtB,IAAA,MAAA,GAAS,aAAa,GAAA,IAAO,OAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,OAAO,QAAA,EACT,IAAA,GAAO,QAAA,EACP,IAAA,GAAO,WACP,IAAA,GAAO,CAAA,QAAA;AACT,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,MAAA,CAAO,EAAA,CAAG,OAAO,CAAA,EAAG;AACzC,MAAA,IAAI,CAAA,CAAE,CAAA,GAAI,IAAA,EAAM,IAAA,GAAO,CAAA,CAAE,CAAA;AACzB,MAAA,IAAI,CAAA,CAAE,CAAA,GAAI,IAAA,EAAM,IAAA,GAAO,CAAA,CAAE,CAAA;AACzB,MAAA,IAAI,CAAA,CAAE,CAAA,GAAI,IAAA,EAAM,IAAA,GAAO,CAAA,CAAE,CAAA;AACzB,MAAA,IAAI,CAAA,CAAE,CAAA,GAAI,IAAA,EAAM,IAAA,GAAO,CAAA,CAAE,CAAA;AAAA,IAC3B;AAAA,EACF;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,EAAG;AACnB,IAAA,IAAA,GAAO,CAAA;AACP,IAAA,IAAA,GAAO,CAAA;AACP,IAAA,IAAA,GAAO,GAAA;AACP,IAAA,IAAA,GAAO,GAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,IAAA,IAAQ,GAAA;AACR,EAAA,IAAA,IAAQ,GAAA;AACR,EAAA,IAAA,IAAQ,GAAA;AACR,EAAA,IAAA,IAAQ,GAAA;AACR,EAAA,MAAM,QAAQ,IAAA,GAAO,IAAA;AACrB,EAAA,MAAM,SAAS,IAAA,GAAO,IAAA;AAEtB,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAS,CAAC,IAAA;AAAA,IACV,SAAS,CAAC,IAAA;AAAA,IACV;AAAA,GACF;AACF;;;AC5JA,IAAM,KAAA,GAAQ,GAAA;AACd,IAAM,KAAA,GAAQ,GAAA;AACd,IAAM,QAAA,GAAW,EAAA;AACjB,IAAM,WAAA,GAAc,EAAA;AACpB,IAAM,UAAA,GAAa,EAAA;AAcnB,SAAS,cAAc,CAAA,EAA8B;AACnD,EAAA,OACE,CAAA,CAAE,aAAA,KAAkB,gBAAA,IACpB,CAAA,CAAE,aAAA,KAAkB,gBAAA,IACpB,CAAA,CAAE,aAAA,KAAkB,WAAA,IACpB,CAAA,CAAE,aAAA,KAAkB,SAAA,IACpB,EAAE,aAAA,KAAkB,KAAA;AAExB;AAEA,SAAS,SAAS,CAAA,EAA8B;AAC9C,EAAA,OACE,CAAA,CAAE,aAAA,KAAkB,QAAA,IACpB,CAAA,CAAE,aAAA,KAAkB,gBACpB,CAAA,CAAE,aAAA,KAAkB,aAAA,IACpB,CAAA,CAAE,aAAA,KAAkB,aAAA;AAExB;AAEA,SAAS,QAAA,CAAS,GAAc,QAAA,EAA6B;AAC3D,EAAA,MAAM,CAAA,GAAK,QAAA,GAAW,IAAA,CAAK,EAAA,GAAM,GAAA;AACjC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpB,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpB,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,EAAE;AACtD;AAEA,SAAS,WAAW,GAAA,EAA+C;AACjE,EAAA,OAAO,GAAA,KAAQ,UAAU,CAAA,GAAI,GAAA,KAAQ,SAAS,EAAA,GAAK,GAAA,KAAQ,SAAS,GAAA,GAAM,GAAA;AAC5E;AAcA,SAAS,iBAAiB,CAAA,EAAuD;AAC/E,EAAA,IAAI,aAAA,CAAc,CAAC,CAAA,EAAG,OAAO,IAAA;AAI7B,EAAA,IAAI,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,MAAA;AACxB,EAAA,OAAO,OAAA;AACT;AAMA,SAAS,UAAA,CACP,MACA,EAAA,EACM;AACN,EAAA,IAAI,GAAG,CAAA,GAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,EAAA,CAAG,CAAA;AACrC,EAAA,IAAI,GAAG,CAAA,GAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,EAAA,CAAG,CAAA;AACrC,EAAA,IAAI,GAAG,CAAA,GAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,EAAA,CAAG,CAAA;AACrC,EAAA,IAAI,GAAG,CAAA,GAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,EAAA,CAAG,CAAA;AACvC;AAEO,SAAS,qBAAqB,GAAA,EAAmC;AACtE,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,IAAU,EAAC;AAQ9B,EAAA,MAAM,aAAiC,EAAC;AACxC,EAAA,MAAM,cAAkC,EAAC;AACzC,EAAA,MAAM,cAAkC,EAAC;AAEzC,EAAA,KAAA,MAAW,CAAA,IAAK,IAAI,UAAA,EAAY;AAC9B,IAAA,IAAI,aAAA,CAAc,CAAC,CAAA,EAAG,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,SAAA,IAC9B,QAAA,CAAS,CAAC,CAAA,EAAG,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,SACnC,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EACzB;AAEA,EAAA,MAAM,QAA8B,EAAC;AACrC,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,UAAA,EAAY,GAAG,WAAW,CAAA;AAC/C,EAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACxC,EAAA,IAAI,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AAG9C,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,UAAU,CAAA;AAGjD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA8B;AACjD,EAAA,MAAM,QAA4B,EAAC;AAEnC,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO,OAAA,GAAU,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,MAAM,CAAA;AAEjE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,IAAA,GAAO,UAAA,GAAa,CAAA,IAAK,KAAA,GAAQ,QAAA,CAAA;AAEvC,IAAA,MAAM,MAAA,GAAS,WAAA,GAAA,CAAgB,OAAA,GAAU,IAAA,CAAK,UAAU,KAAA,GAAS,CAAA;AAEjE,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AAInB,MAAA,MAAM,SAAA,GAAY,iBAAiB,IAAI,CAAA;AACvC,MAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,MAAA,MAAM,GAAA,GAAM,WAAW,SAAS,CAAA;AAEhC,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,aAAa,CAAA;AACxC,MAAA,MAAM,CAAA,GAAI,SAAS,CAAA,GAAI,KAAA;AACvB,MAAA,MAAM,CAAA,GAAI,IAAA;AAEV,MAAA,MAAM,eAA0C,EAAC;AACjD,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,KAAA,MAAW,CAAC,MAAM,EAAE,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACpD,UAAA,MAAM,EAAA,GAAK,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AAC3B,UAAA,YAAA,CAAa,IAAI,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,CAAA,EAAE;AAAA,QAClD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,KAAA,GAAQ,EAAE,CAAA,EAAG,CAAA,EAAE;AAC5B,QAAA,YAAA,CAAa,GAAA,GAAM,EAAE,CAAA,EAAG,CAAA,GAAI,IAAI,CAAA,EAAE;AAAA,MACpC;AAEA,MAAA,MAAM,IAAA,GAAyB;AAAA,QAC7B,SAAA,EAAW,IAAA;AAAA,QACX,CAAA;AAAA,QACA,CAAA;AAAA,QACA,QAAA,EAAU,GAAA;AAAA,QACV,MAAA,EAAQ,KAAK,MAAA,IAAU,EAAA;AAAA,QACvB,OAAA,EAAS;AAAA,OACX;AACA,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,MAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,IAC1B;AAAA,EACF;AAIA,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAsB;AAE1C,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,UAAA,EAAY;AACjC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC3B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAC/B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACnD,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AAC/B,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,IAAI,CAAC,QAAQ,GAAA,CAAI,KAAK,GAAG,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAG,IAAA,CAAK,EAAE,QAAQ,IAAA,CAAK,EAAA,EAAI,OAAA,EAAS,EAAA,EAAI,CAAA;AAAA,IAC3D;AAAA,EACF;AAGA,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,CAAA,QAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,GACR;AACA,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,CAAO,EAAA,CAAG,OAAO,CAAA,EAAG,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AAAA,EACd;AAEA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,OAAA,EAAS;AACnC,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AAErB,IAAA,IAAI,UAAU,KAAA,EAAO;AAEnB,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,GAAO,EAAA;AAC1B,MAAA,MAAMC,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA;AAChD,MAAA,MAAMC,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA;AAEhD,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA;AAAA,UACA,MAAA,EAAQ;AAAA,YACN,EAAE,CAAA,EAAGD,KAAAA,EAAM,CAAA,EAAG,KAAA,EAAM;AAAA,YACpB,EAAE,CAAA,EAAGC,KAAAA,EAAM,CAAA,EAAG,KAAA;AAAM;AACtB,SACD,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,EAAE,MAAM,CAAA,CAAA;AAAA,UAC3B,MAAA,EAAQ;AAAA,YACN,CAAA,CAAE,EAAA;AAAA,YACF,EAAE,CAAA,EAAG,CAAA,CAAE,EAAA,CAAG,CAAA,EAAG,GAAG,KAAA;AAAM;AACxB,SACD,CAAA;AAAA,MACH;AACA,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAM,KAAK,CAAA;AACrC,MAAA;AAAA,IACF;AAKA,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,CAAA,CAAE,MAAM,CAAA;AACzD,MAAA,OAAO,CAAC,CAAC,IAAA,IAAQ,aAAA,CAAc,IAAI,CAAA;AAAA,IACrC,CAAC,CAAA;AACD,IAAA,IAAI,kBAAA,IAAsB,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACzC,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,GAAO,EAAA;AAC1B,MAAA,MAAMD,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA;AAChD,MAAA,MAAMC,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAC,CAAA;AAChD,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,EAAE,CAAA,EAAGD,KAAAA,EAAM,CAAA,EAAG,KAAA,EAAM;AAAA,UACpB,EAAE,CAAA,EAAGC,KAAAA,EAAM,CAAA,EAAG,KAAA;AAAM;AACtB,OACD,CAAA;AACD,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,EAAE,MAAM,CAAA,CAAA;AAAA,UAC3B,MAAA,EAAQ,CAAC,CAAA,CAAE,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,CAAE,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO;AAAA,SACvC,CAAA;AAAA,MACH;AACA,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAM,KAAK,CAAA;AACrC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AAIrB,MAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA;AACf,MAAA,MAAM,MAAA,GACJ,KAAK,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,GAAI,CAAA,CAAE,GAAG,CAAC,CAAA,GAAI,MACxB,CAAC,CAAA,CAAE,IAAI,CAAA,CAAE,EAAE,IACX,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAA,CAAG,CAAA,GAAI,CAAA,CAAE,GAAG,CAAC,CAAA,GAAI,MAC1B,CAAC,CAAA,CAAE,IAAI,CAAA,CAAE,EAAE,CAAA,GACX,CAAC,CAAA,CAAE,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,EAAG,EAAE,EAAA,CAAG,CAAA,EAAE,EAAG,CAAA,CAAE,EAAE,CAAA;AAC7C,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,IAC/B,CAAA,MAAO;AAEL,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACvD,MAAA,MAAM,SAAS,EAAA,CAAG,IAAA,CAAK,MAAM,EAAA,CAAG,MAAA,GAAS,CAAC,CAAC,CAAA;AAC3C,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACvD,MAAA,MAAM,SAAA,GAAY,GAAG,CAAC,CAAA;AACtB,MAAA,MAAM,UAAA,GAAa,EAAA,CAAG,EAAA,CAAG,MAAA,GAAS,CAAC,CAAA;AAEnC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,EAAE,CAAA,EAAG,SAAA,EAAW,CAAA,EAAG,MAAA,EAAO;AAAA,UAC1B,EAAE,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,MAAA;AAAO;AAC7B,OACD,CAAA;AACD,MAAA,MAAM,YAAyB,EAAC;AAChC,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,IAAI,KAAK,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,GAAI,MAAM,IAAI,GAAA,EAAK;AAEnC,UAAA,IAAI,EAAE,EAAA,CAAG,CAAA,GAAI,aAAa,CAAA,CAAE,EAAA,CAAG,IAAI,UAAA,EAAY;AAC7C,YAAA,SAAA,CAAU,IAAA,CAAK,EAAE,EAAE,CAAA;AAAA,UACrB;AACA,UAAA;AAAA,QACF;AACA,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,EAAE,MAAM,CAAA,CAAA;AAAA,UAC3B,MAAA,EAAQ,CAAC,CAAA,CAAE,EAAA,EAAI,EAAE,CAAA,EAAG,CAAA,CAAE,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ;AAAA,SACxC,CAAA;AACD,QAAA,IAAI,EAAE,EAAA,CAAG,CAAA,GAAI,aAAa,CAAA,CAAE,EAAA,CAAG,IAAI,UAAA,EAAY;AAC7C,UAAA,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,EAAG,QAAQ,CAAA;AAAA,QACzC;AAAA,MACF;AACA,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AAExB,QAAA,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,MAAA;AAAA,UAAO,CAAC,MACtC,IAAA,CAAK,GAAA,CAAI,EAAE,EAAA,CAAG,CAAA,GAAI,MAAM,CAAA,IAAK;AAAA,SAC/B,CAAE,MAAM,CAAA,CAAE,SAAA,GAAY,SAAA;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,CAAA,CAAE,MAAA,EAAQ,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,GAAO,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,GAAO,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,GAAO,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,GAAO,GAAA;AAEzB,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,GAAO,IAAA;AAAA,IACd,QAAQ,IAAA,GAAO,IAAA;AAAA,IACf,SAAS,CAAC,IAAA;AAAA,IACV,SAAS,CAAC,IAAA;AAAA,IACV,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACjWA,SAAS,UAAA,CAAW,EAAA,EAAsB,IAAA,EAAc,IAAA,EAAsB;AAC5E,EAAA,MAAM,OAAO,EAAA,CAAG,SAAA;AAChB,EAAA,MAAM,EAAA,GAAK,GAAG,CAAA,GAAI,IAAA;AAClB,EAAA,MAAM,EAAA,GAAK,GAAG,CAAA,GAAI,IAAA;AAElB,EAAA,IAAI,IAAA,CAAK,kBAAkB,MAAA,EAAQ;AACjC,IAAA,MAAM,EAAA,GAAM,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAK,IAAA;AAChC,IAAA,MAAM,EAAA,GAAM,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAK,IAAA;AAChC,IAAA,OAAO,aAAa,EAAE,CAAA,MAAA,EAAS,EAAE,CAAA,MAAA,EAAS,EAAE,SAAS,EAAE,CAAA,kCAAA,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,IAAA,CAAK,kBAAkB,KAAA,EAAO;AAChC,IAAA,OAAOC,wBAAA,CAAO;AAAA,MACZ,EAAA,EAAI,EAAA;AAAA,MACJ,EAAA,EAAI,EAAA;AAAA,MACJ,CAAA,EAAG,GAAA;AAAA,MACH,KAAA,EAAO,uBAAA;AAAA,MACP,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,IAAA,CAAK,kBAAkB,OAAA,EAAS;AAClC,IAAA,MAAM,MAAM,IAAA,CAAK,SAAA;AACjB,IAAA,MAAM,SACJ,GAAA,KAAQ,MAAA,GAAS,KAAA,GAAQ,GAAA,KAAQ,UAAU,OAAA,GAAU,QAAA;AACvD,IAAA,MAAM,KAAK,GAAA,KAAQ,OAAA,GAAU,CAAA,GAAI,GAAA,KAAQ,SAAS,EAAA,GAAK,CAAA;AACvD,IAAA,MAAM,KAAK,GAAA,KAAQ,MAAA,GAAS,EAAA,GAAK,GAAA,KAAQ,OAAO,EAAA,GAAK,CAAA;AACrD,IAAA,OAAOL,sBAAA;AAAA,MACL;AAAA,QACE,GAAG,EAAA,GAAK,EAAA;AAAA,QACR,GAAG,EAAA,GAAK,EAAA;AAAA,QACR,KAAA,EAAO,6BAAA;AAAA,QACP,aAAA,EAAe;AAAA,OACjB;AAAA,MACA,KAAK,KAAA,IAAS;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,aAAa,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,CAAA,SAAA,EAAY,EAAA,GAAK,EAAE,CAAA,KAAA,EAAQ,KAAK,EAAE,CAAA,oGAAA,EAAuG,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAC,CAAA,oEAAA,EAAuEM,2BAAA,CAAU,IAAA,CAAK,aAAa,CAAC,CAAA,OAAA,CAAA;AAAA,EACtQ;AAEA,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA,EAAO,KAAK,KAAK,CAAA;AACvD,EAAA,MAAM,YAAY,CAAA,UAAA,EAAa,EAAE,KAAK,EAAE,CAAA,SAAA,EAAY,GAAG,QAAQ,CAAA,CAAA,CAAA;AAG/D,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,EAAO;AAI5B,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,CAAA,GAAI,IAAA,GAAO,EAAA,CAAG,MAAA,GAAS,IAAA,CAAK,GAAA,CAAK,EAAA,CAAG,QAAA,GAAW,IAAA,CAAK,EAAA,GAAM,GAAG,CAAA,GAAI,CAAA;AACnF,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,CAAA,GAAI,IAAA,GAAO,EAAA,CAAG,MAAA,GAAS,IAAA,CAAK,GAAA,CAAK,EAAA,CAAG,QAAA,GAAW,IAAA,CAAK,EAAA,GAAM,GAAG,CAAA,GAAI,CAAA;AACnF,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAK,GAAG,QAAA,GAAW,IAAA,CAAK,KAAM,GAAG,CAAA;AACrD,IAAA,MAAM,MAAA,GAAS,CAAC,IAAA,CAAK,GAAA,CAAK,GAAG,QAAA,GAAW,IAAA,CAAK,KAAM,GAAG,CAAA;AACtD,IAAA,MAAM,GAAA,GAAM,EAAA;AACZ,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,IAAA;AAAA,QACLN,sBAAA;AAAA,UACE;AAAA,YACE,CAAA,EAAG,SAAS,MAAA,GAAS,GAAA;AAAA,YACrB,CAAA,EAAG,MAAA,GAAS,MAAA,GAAS,GAAA,GAAM,CAAA;AAAA,YAC3B,KAAA,EAAO,yBAAA;AAAA,YACP,aAAA,EAAe;AAAA,WACjB;AAAA,UACA,IAAA,CAAK;AAAA;AACP,OACF;AAAA,IACF;AACA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,IAAA;AAAA,QACLA,sBAAA;AAAA,UACE;AAAA,YACE,CAAA,EAAG,SAAS,MAAA,GAAS,GAAA;AAAA,YACrB,CAAA,EAAG,MAAA,GAAS,MAAA,GAAS,GAAA,GAAM,EAAA;AAAA,YAC3B,KAAA,EAAO,yBAAA;AAAA,YACP,aAAA,EAAe;AAAA,WACjB;AAAA,UACA,IAAA,CAAK;AAAA;AACP,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OACE,iBAAiB,SAAS,CAAA,WAAA,EAAcM,2BAAA,CAAU,IAAA,CAAK,EAAE,CAAC,CAAA,aAAA,EAAgBA,2BAAA,CAAU,IAAA,CAAK,aAAa,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,IAAA,CAAA,GAChH,MAAA,CAAO,KAAK,EAAE,CAAA;AAElB;AAEA,SAAS,WAAA,CAAY,CAAA,EAAe,IAAA,EAAc,IAAA,EAAsB;AACtE,EAAA,IAAI,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,EAAA;AAChC,EAAA,MAAM,MAAM,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,IAAI,IAAI,CAAA,CAAE,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AACvE,EAAA,MAAM,IAAA,GAAO,qBAAqB,GAAG,CAAA,8CAAA,CAAA;AACrC,EAAA,MAAM,IAAA,GAAA,CAAQ,CAAA,CAAE,SAAA,IAAa,EAAC,EAC3B,GAAA;AAAA,IACC,CAAC,MACC,CAAA,YAAA,EAAe,CAAA,CAAE,IAAI,IAAI,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,IAAI,CAAA,yCAAA;AAAA,GAChD,CACC,KAAK,EAAE,CAAA;AACV,EAAA,OAAO,IAAA,GAAO,IAAA;AAChB;AAEO,SAAS,aAAA,CAAc,KAAiB,MAAA,EAA+B;AAC5E,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,KAAS,SAAA;AAC/B,EAAA,MAAM,SAA0D,SAAA,GAC5D,oBAAA,CAAqB,GAAG,CAAA,GACxB,cAAc,GAAG,CAAA;AACrB,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,SAAQ,GAAI,MAAA;AAE5C,EAAA,MAAM,CAAA,GAAIC,wCAAA,CAAuB,MAAA,EAAQ,KAAA,IAAS,SAAS,CAAA;AAI3D,EAAA,MAAM,QAAA,GAAA,CAAY,MAAA,CAAO,MAAA,IAAU,IAChC,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,GAAG,OAAA,EAAS,OAAO,CAAC,CAAA,CAC3C,KAAK,EAAE,CAAA;AACV,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,KAAO,UAAA,CAAW,EAAA,EAAI,OAAA,EAAS,OAAO,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAEhF,EAAA,MAAM,GAAA,GAAM;AAAA,iCAAA,EACqB,EAAE,EAAE,CAAA;AAAA,kCAAA,EACH,EAAE,MAAM,CAAA;AAAA,kCAAA,EACR,CAAA,CAAE,MAAM,CAAA,2BAAA,EAA8B,CAAA,CAAE,MAAM,CAAA;AAAA,kCAAA,EAC9C,EAAE,MAAM,CAAA;AAAA,+BAAA,EACX,EAAE,MAAM,CAAA;AAAA,uEAAA,EACgC,EAAE,IAAI,CAAA;AAAA,0EAAA,EACH,EAAE,SAAS,CAAA;AAAA,2EAAA,EACV,EAAE,MAAM,CAAA;AAAA,qDAAA,EAC9B,EAAE,MAAM,CAAA;AAAA,6DAAA,EACA,EAAE,MAAM,CAAA;AAAA,6DAAA,EACR,EAAE,IAAI,CAAA;AAAA,iCAAA,EAClC,CAAA,CAAE,KAAK,CAAA,QAAA,EAAW,CAAA,CAAE,KAAK,CAAA;AAAA,CAAA,CAC1D,IAAA,EAAK;AAEL,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,GACjBP,sBAAA;AAAA,IACE;AAAA,MACE,GAAG,KAAA,GAAQ,CAAA;AAAA,MACX,CAAA,EAAG,EAAA;AAAA,MACH,aAAA,EAAe,QAAA;AAAA,MACf,KAAA,EAAO;AAAA,KACT;AAAA,IACA,GAAA,CAAI;AAAA,GACN,GACA,EAAA;AAEJ,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,GAAQ,EAAA,GAAK,CAAA;AAEhC,EAAA,OAAOQ,yBAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO,mBAAA;AAAA,MACP,OAAA,EAAS,CAAA,IAAA,EAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,MAAM,CAAC,CAAA,CAAA;AAAA,MAChE,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,MACvB,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,MAAM,CAAA;AAAA,MAClC,IAAA,EAAM,KAAA;AAAA,MACN,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA;AAAA,MACET,uBAAA,CAAQ,GAAA,CAAI,KAAA,IAAS,mBAAmB,CAAA;AAAA,MACxCU,sBAAA;AAAA,QACE,CAAA,uBAAA,EAA0B,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,WAAA;AAAA,OACjD;AAAA,MACAC,sBAAA,CAAK,CAACC,oBAAA,CAAG,OAAA,EAAS,EAAC,EAAG,GAAG,CAAC,CAAC,CAAA;AAAA,MAC3B,QAAA;AAAA,MACAC,uBAAA,CAAM,EAAE,SAAA,EAAW,CAAA,aAAA,EAAgB,MAAM,KAAI,EAAG,CAAC,QAAA,GAAW,KAAK,CAAC;AAAA;AACpE,GACF;AACF;;;ACrLO,IAAM,OAAA,GAAyB;AAAA,EACpC,IAAA,EAAM,SAAA;AAAA,EACN,OAAOZ,KAAAA,EAAuB;AAC5B,IAAA,MAAM,KAAA,GAAQA,KAAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK,CAAE,WAAA,EAAY,IAAK,EAAA;AAClE,IAAA,OAAO,KAAA,CAAM,WAAW,SAAS,CAAA;AAAA,EACnC,CAAA;AAAA,EACA,KAAA,EAAO,YAAA;AAAA,EAEP,MAAA,CAAOA,OAAc,MAAA,EAAgB;AACnC,IAAA,MAAM,GAAA,GAAM,aAAaA,KAAI,CAAA;AAC7B,IAAA,OAAO,aAAA,CAAc,KAAK,MAAM,CAAA;AAAA,EAClC;AACF","file":"chunk-YUPG2M3I.cjs","sourcesContent":["/**\n * Netlist DSL parser — SPICE-subset text → CircuitAST.\n *\n * Grammar (line-oriented, after stripping `circuit \"name\" netlist` header):\n *\n * R1 vin vout 10k ← 2-terminal passive\n * C1 out 0 100n ← `0` / `gnd` / `GND` → ground net\n * V1 vin 0 5V ← voltage source\n * D1 vout 0 value=\"1N4007\" ← diode\n * Q1 c b e npn ← 3-terminal, explicit model\n * M1 d g s nmos\n * # comment\n *\n * Pin ordering by prefix (SPICE conventions):\n * R/C/L/F(fuse) → [p1, p2]\n * D → [anode, cathode]\n * V/I → [plus, minus]\n * Q → [c, b, e]\n * M/J → [d, g, s]\n * S (switch) → [p1, p2]\n * U (IC) → custom via pins=\"vcc,gnd,out,...\" attr\n *\n * After the pin list, trailing tokens can be:\n * - a bare value (e.g. \"10k\") → value\n * - a bare model name (e.g. \"npn\", \"1N4007\") → componentType override or value\n * - key=value pairs (value=, label=, type=, ...)\n */\nimport type {\n CircuitAST,\n CircuitComponent,\n CircuitComponentType,\n CircuitNet,\n} from \"../../core/types\";\n\nexport class NetlistParseError extends Error {\n constructor(message: string, public readonly line?: number) {\n super(message);\n this.name = \"NetlistParseError\";\n }\n}\n\n/**\n * Map from SPICE prefix → default type + pin order.\n * Pin names MUST match the anchor names in the corresponding symbol definition\n * (symbols.ts). Passive 2-terminals use `start` / `end`; sources use\n * `plus` / `minus`; BJTs use `c/b/e`; FETs use `d/g/s`.\n */\nconst PREFIX_MAP: Record<string, { type: CircuitComponentType; pins: string[] }> = {\n R: { type: \"resistor\", pins: [\"start\", \"end\"] },\n C: { type: \"capacitor\", pins: [\"start\", \"end\"] },\n L: { type: \"inductor\", pins: [\"start\", \"end\"] },\n D: { type: \"diode\", pins: [\"start\", \"end\"] }, // anode → start, cathode → end\n V: { type: \"voltage_source\", pins: [\"plus\", \"minus\"] },\n I: { type: \"current_source\", pins: [\"plus\", \"minus\"] },\n Q: { type: \"npn\", pins: [\"c\", \"b\", \"e\"] },\n M: { type: \"nmos\", pins: [\"d\", \"g\", \"s\"] },\n J: { type: \"jfet_n\", pins: [\"d\", \"g\", \"s\"] },\n S: { type: \"switch_spst\", pins: [\"start\", \"end\"] },\n F: { type: \"fuse\", pins: [\"start\", \"end\"] },\n B: { type: \"battery\", pins: [\"plus\", \"minus\"] },\n K: { type: \"relay_coil\", pins: [\"start\", \"end\"] },\n U: { type: \"generic_ic\", pins: [] }, // pins declared via pins=\"...\" attr\n X: { type: \"generic_ic\", pins: [] },\n W: { type: \"wire\", pins: [\"start\", \"end\"] }, // explicit wire (non-SPICE convention, common in EE textbooks)\n T: { type: \"terminal_block\", pins: [] }, // pins via pins=\"...\"\n};\n\n/** Aliases for type=xxx — mirror parser.ts aliases. */\nconst TYPE_ALIASES: Record<string, CircuitComponentType> = {\n vsource: \"voltage_source\",\n isource: \"current_source\",\n acsource: \"ac_source\",\n ecap: \"electrolytic_cap\",\n pot: \"potentiometer\",\n gnd: \"ground\",\n ic: \"generic_ic\",\n reg: \"voltage_regulator\",\n timer555: \"555_timer\",\n transistor: \"npn\",\n tb: \"terminal_block\",\n junction_box: \"terminal_block\",\n jbox: \"terminal_block\",\n enclosure: \"terminal_block\",\n};\n\n/** Ground refs: SPICE \"0\", canonical aliases (GND/AGND/DGND/EARTH/PE/VSS/COM), and suffixed variants (GND_REF, AGND_DIG, EARTH1). */\nconst GROUND_REF = /^(0|gnd|ground|earth|pe|agnd|dgnd|gnda|gndd|vss|com)(_\\w+|\\d+)?$/i;\n\nfunction isGroundRef(s: string): boolean {\n return GROUND_REF.test(s);\n}\n\nfunction tokenize(line: string): string[] {\n // Split on whitespace, respecting key=\"quoted values with spaces\"\n const tokens: string[] = [];\n let i = 0;\n while (i < line.length) {\n const ch = line[i];\n if (ch === \" \" || ch === \"\\t\") {\n i++;\n continue;\n }\n if (ch === '\"') {\n const end = line.indexOf('\"', i + 1);\n tokens.push(line.slice(i, end < 0 ? line.length : end + 1));\n i = end < 0 ? line.length : end + 1;\n continue;\n }\n let j = i;\n while (j < line.length && line[j] !== \" \" && line[j] !== \"\\t\") {\n if (line[j] === \"=\" && line[j + 1] === '\"') {\n const end = line.indexOf('\"', j + 2);\n j = end < 0 ? line.length : end + 1;\n break;\n }\n j++;\n }\n tokens.push(line.slice(i, j));\n i = j;\n }\n return tokens;\n}\n\nfunction isKeyEqVal(tok: string): boolean {\n const eq = tok.indexOf(\"=\");\n return eq > 0 && /^[a-zA-Z_][\\w]*$/.test(tok.slice(0, eq));\n}\n\nfunction parseKV(tok: string): [string, string] {\n const eq = tok.indexOf(\"=\");\n const key = tok.slice(0, eq).trim();\n let val = tok.slice(eq + 1).trim();\n if (val.startsWith('\"') && val.endsWith('\"')) val = val.slice(1, -1);\n return [key, val];\n}\n\n/**\n * Parse a netlist body (lines after `circuit \"name\" netlist` header).\n * Returns components + nets + pinMap.\n */\nexport function parseNetlist(\n body: string,\n title?: string\n): CircuitAST {\n const components: CircuitComponent[] = [];\n const netByName = new Map<string, CircuitNet>();\n const pinMap: Record<string, Record<string, string>> = {};\n let autoGnd = 0;\n\n const ensureNet = (name: string): CircuitNet => {\n let n = netByName.get(name);\n if (!n) {\n n = { id: name, anchors: [] };\n netByName.set(name, n);\n }\n return n;\n };\n\n const lines = body.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const raw = lines[lineIdx];\n const stripped = raw.replace(/#.*$/, \"\").trim();\n if (!stripped) continue;\n\n const tokens = tokenize(stripped);\n if (tokens.length < 2) {\n throw new NetlistParseError(\n `Netlist line must have at least ID + one net: \"${stripped}\"`,\n lineIdx + 1\n );\n }\n\n const id = tokens[0];\n if (!/^[a-zA-Z_][\\w]*$/.test(id)) {\n throw new NetlistParseError(`Invalid component id: \"${id}\"`, lineIdx + 1);\n }\n\n // Separate net refs from trailing attrs. Net refs are the positional\n // (non key=value) tokens immediately after the id.\n let cursor = 1;\n const netRefs: string[] = [];\n while (cursor < tokens.length && !isKeyEqVal(tokens[cursor])) {\n netRefs.push(tokens[cursor]);\n cursor++;\n }\n\n // Collect key=value pairs\n const kv: Record<string, string> = {};\n for (; cursor < tokens.length; cursor++) {\n if (!isKeyEqVal(tokens[cursor])) {\n throw new NetlistParseError(\n `Expected key=value after nets, got \"${tokens[cursor]}\"`,\n lineIdx + 1\n );\n }\n const [k, v] = parseKV(tokens[cursor]);\n kv[k] = v;\n }\n\n // Determine component type + pin order\n const prefix = id[0].toUpperCase();\n const defaults = PREFIX_MAP[prefix];\n let cType: CircuitComponentType;\n let pinOrder: string[];\n\n if (kv.type) {\n const t = kv.type.toLowerCase();\n cType = (TYPE_ALIASES[t] ?? t) as CircuitComponentType;\n pinOrder = defaults?.pins ?? [\"p1\", \"p2\"];\n } else if (defaults) {\n cType = defaults.type;\n pinOrder = defaults.pins;\n } else if (isGroundRef(id)) {\n cType = \"ground\";\n pinOrder = [\"start\"];\n } else {\n throw new NetlistParseError(\n `Cannot infer type from id \"${id}\". ` +\n `Either rename to a SPICE-prefix id (R*, C*, L*, D*, V*, I*, Q*, M*, J*, S*, F*, B*, K*, U*, X*, W*, T*) ` +\n `or pass an explicit \\`type=<name>\\` attribute (e.g. \\`${id} ... type=resistor\\`). ` +\n `Schematex circuit covers electrical schematics only — hydraulic/pneumatic prefixes (EV*, BOMBA*, TANK*, etc.) are not supported.`,\n lineIdx + 1\n );\n }\n\n // Net refs consumption depends on type: last net ref may actually be the\n // \"value\" / \"model\" if it doesn't look like a net name.\n // Heuristic: if we have more refs than expected pins+0, last one is value.\n // Model override: Q/D/M can have a model name at the end (e.g. \"Q1 c b e npn\")\n const expectedPins = pinOrder.length;\n let valueFromTail: string | undefined;\n\n if (netRefs.length > expectedPins && expectedPins > 0) {\n // tail contains model/value\n const tail = netRefs.slice(expectedPins);\n netRefs.length = expectedPins;\n // Try to interpret first tail token as type override (model name)\n const first = tail[0].toLowerCase();\n if (TYPE_ALIASES[first]) {\n cType = TYPE_ALIASES[first];\n } else if (\n first === \"npn\" || first === \"pnp\" ||\n first === \"nmos\" || first === \"pmos\" ||\n first === \"jfet_n\" || first === \"jfet_p\" ||\n first === \"zener\" || first === \"schottky\" || first === \"led\" ||\n first === \"photodiode\"\n ) {\n cType = first as CircuitComponentType;\n // Rebuild pinOrder for transistor flips (pnp mirrors npn pin names)\n if (first === \"pnp\") pinOrder = [\"c\", \"b\", \"e\"];\n if (first === \"pmos\" || first === \"jfet_p\") pinOrder = [\"d\", \"g\", \"s\"];\n } else {\n // Treat as value\n valueFromTail = tail.join(\" \");\n }\n // If there are more trailing tokens after the model, those are value\n if (tail.length > 1 && !valueFromTail) {\n valueFromTail = tail.slice(1).join(\" \");\n }\n }\n\n // Ground auto-connection: if this is a ground symbol, one net slot is\n // implicit. The parser supports `GND1 gnd_net` as a 1-pin component.\n if (cType === \"ground\" || cType === \"gnd_signal\" || cType === \"gnd_chassis\" || cType === \"gnd_digital\") {\n pinOrder = [\"start\"];\n }\n\n // Terminal block / junction box: pins from pins=\"...\" attr (or t1/t2/…).\n // Always reset pinOrder — prefix-derived defaults (e.g. J→jfet_n) are wrong here.\n if (cType === \"terminal_block\") {\n const pinsAttr = kv.pins ?? kv.terminals;\n const labels = pinsAttr\n ? pinsAttr.split(\",\").map((s) => s.trim()).filter(Boolean)\n : Array.from({ length: Math.max(netRefs.length, 1) }, (_, i) => `t${i + 1}`);\n pinOrder = labels.map((label, idx) =>\n label.toLowerCase().replace(/[^a-z0-9]+/g, \"_\") || `t${idx + 1}`\n );\n }\n\n if (netRefs.length < pinOrder.length) {\n throw new NetlistParseError(\n `Component ${id} (${cType}) expects ${pinOrder.length} nets, got ${netRefs.length}`,\n lineIdx + 1\n );\n }\n\n // Build pinMap entry, binding each pin to a net. Ground net aliases are\n // normalized to a shared canonical name.\n const pins: Record<string, string> = {};\n for (let p = 0; p < pinOrder.length; p++) {\n let net = netRefs[p];\n if (isGroundRef(net)) net = \"GND\";\n pins[pinOrder[p]] = net;\n ensureNet(net).anchors.push(`${id}.${pinOrder[p]}`);\n }\n\n // Auto-synthesize a ground component whenever GND net is referenced so the\n // symbol shows up. We emit one per GND reference pin later, or a single\n // floor — keep it simple: one ground symbol attached to the GND net.\n // (Done below, after the main component scan.)\n\n pinMap[id] = pins;\n\n const comp: CircuitComponent = {\n id,\n componentType: cType,\n direction: \"right\",\n label: kv.label ?? id,\n value: kv.value ?? valueFromTail,\n attrs: {},\n };\n // Propagate extra key=value attrs (skip well-known keys)\n for (const [k, v] of Object.entries(kv)) {\n if (k === \"label\" || k === \"value\" || k === \"type\") continue;\n comp.attrs![k] = v;\n }\n components.push(comp);\n }\n\n // Auto-emit ground symbols for the GND net if any component pin references it\n // but no explicit ground component exists.\n if (netByName.has(\"GND\")) {\n const hasGroundSym = components.some((c) =>\n c.componentType === \"ground\" ||\n c.componentType === \"gnd_signal\" ||\n c.componentType === \"gnd_chassis\" ||\n c.componentType === \"gnd_digital\"\n );\n if (!hasGroundSym) {\n const gId = `_GND${autoGnd++}`;\n components.push({\n id: gId,\n componentType: \"ground\",\n direction: \"down\",\n label: undefined,\n value: undefined,\n attrs: { auto: \"true\" },\n });\n pinMap[gId] = { start: \"GND\" };\n ensureNet(\"GND\").anchors.push(`${gId}.start`);\n }\n }\n\n const nets: CircuitNet[] = Array.from(netByName.values());\n\n return {\n type: \"circuit\",\n title,\n components,\n nets,\n pinMap,\n mode: \"netlist\",\n };\n}\n","import type {\n CircuitAST,\n CircuitComponent,\n CircuitComponentType,\n CircuitDirection,\n CircuitNet,\n} from \"../../core/types\";\nimport { parseNetlist } from \"./netlist\";\n\nexport class CircuitParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CircuitParseError\";\n }\n}\n\nconst COMPONENT_TYPES = new Set<CircuitComponentType>([\n \"resistor\", \"potentiometer\", \"rheostat\", \"thermistor_ntc\", \"thermistor_ptc\",\n \"ldr\", \"varistor\", \"fuse\", \"fuse_slow\",\n \"capacitor\", \"electrolytic_cap\", \"variable_cap\",\n \"inductor\", \"inductor_iron\", \"inductor_ferrite\", \"variable_inductor\",\n \"ferrite_bead\", \"crystal\", \"transformer\",\n \"diode\", \"zener\", \"schottky\", \"led\", \"photodiode\", \"varactor\", \"tvs_diode\", \"bridge_rectifier\",\n \"npn\", \"pnp\", \"darlington_npn\", \"darlington_pnp\",\n \"nmos\", \"pmos\", \"nmos_depletion\", \"jfet_n\", \"jfet_p\",\n \"igbt\", \"scr\", \"triac\", \"diac\",\n \"phototransistor\", \"optocoupler\",\n \"opamp\", \"comparator\", \"schmitt_buffer\", \"tri_state_buffer\", \"instrumentation_amp\",\n \"generic_ic\", \"voltage_regulator\", \"dc_dc_converter\", \"555_timer\",\n \"voltage_source\", \"current_source\", \"ac_source\", \"battery\", \"vcc\",\n \"ground\", \"gnd_signal\", \"gnd_chassis\", \"gnd_digital\",\n \"switch_spst\", \"switch_spdt\", \"switch_dpdt\", \"push_no\", \"push_nc\",\n \"relay_coil\", \"relay_no\", \"relay_nc\",\n \"motor\", \"speaker\", \"microphone\", \"buzzer\",\n \"ammeter\", \"voltmeter\", \"wattmeter\", \"oscilloscope\",\n \"wire\", \"dot\", \"label\", \"port\", \"test_point\", \"no_connect\", \"antenna\",\n]);\n\n// Aliases for convenience — DSL uses short names\nconst ALIASES: Record<string, CircuitComponentType> = {\n vsource: \"voltage_source\",\n isource: \"current_source\",\n acsource: \"ac_source\",\n ecap: \"electrolytic_cap\",\n pot: \"potentiometer\",\n xtal: \"crystal\",\n xfmr: \"transformer\",\n transistor: \"npn\",\n bjt_npn: \"npn\",\n bjt_pnp: \"pnp\",\n mosfet_n: \"nmos\",\n mosfet_p: \"pmos\",\n gnd: \"ground\",\n ic: \"generic_ic\",\n reg: \"voltage_regulator\",\n timer555: \"555_timer\",\n therm: \"thermistor_ntc\",\n ntc: \"thermistor_ntc\",\n ptc: \"thermistor_ptc\",\n ths: \"thermistor_ntc\",\n};\n\n/** Component types that exist as symbols but aren't listed in CircuitComponentType. */\nconst EXTRA_TYPES = new Set<string>([\"lamp\"]);\n\nfunction normalizeType(raw: string): CircuitComponentType | null {\n const lower = raw.toLowerCase();\n if (ALIASES[lower]) return ALIASES[lower];\n if (COMPONENT_TYPES.has(lower as CircuitComponentType)) {\n return lower as CircuitComponentType;\n }\n if (EXTRA_TYPES.has(lower)) {\n // Cast through unknown — symbol lookup handles string; type system happy.\n return lower as unknown as CircuitComponentType;\n }\n return null;\n}\n\nconst DIRECTIONS = new Set([\"right\", \"left\", \"up\", \"down\"]);\n\nfunction parseAttrs(rest: string): { direction?: CircuitDirection; attrs: Record<string, string>; label?: string; value?: string; at?: string; length?: string } {\n const out: {\n direction?: CircuitDirection;\n attrs: Record<string, string>;\n label?: string;\n value?: string;\n at?: string;\n length?: string;\n } = { attrs: {} };\n\n // Tokenize respecting quoted strings and key=value pairs\n const tokens: string[] = [];\n let i = 0;\n while (i < rest.length) {\n const ch = rest[i];\n if (ch === \" \" || ch === \"\\t\") {\n i++;\n continue;\n }\n // quoted\n if (ch === '\"') {\n const end = rest.indexOf('\"', i + 1);\n const tok = rest.slice(i, end < 0 ? rest.length : end + 1);\n tokens.push(tok);\n i = end < 0 ? rest.length : end + 1;\n continue;\n }\n // key=value possibly with quoted value\n let j = i;\n while (j < rest.length && rest[j] !== \" \" && rest[j] !== \"\\t\") {\n if (rest[j] === \"=\" && rest[j + 1] === '\"') {\n const end = rest.indexOf('\"', j + 2);\n j = end < 0 ? rest.length : end + 1;\n break;\n }\n j++;\n }\n tokens.push(rest.slice(i, j));\n i = j;\n }\n\n for (const tok of tokens) {\n if (!tok) continue;\n if (DIRECTIONS.has(tok.toLowerCase())) {\n out.direction = tok.toLowerCase() as CircuitDirection;\n continue;\n }\n const eq = tok.indexOf(\"=\");\n if (eq > 0) {\n const key = tok.slice(0, eq).trim();\n let val = tok.slice(eq + 1).trim();\n if (val.startsWith('\"') && val.endsWith('\"')) {\n val = val.slice(1, -1);\n }\n if (key === \"label\") out.label = val;\n else if (key === \"value\") out.value = val;\n else if (key === \"at\") out.at = val;\n else if (key === \"length\") out.length = val;\n else out.attrs[key] = val;\n continue;\n }\n // bare attribute flags\n out.attrs[tok] = \"true\";\n }\n return out;\n}\n\n/**\n * Top-level circuit parser. Detects two DSL modes:\n *\n * 1. Positional (Schemdraw-style): header `circuit \"name\"`, body uses\n * direction chains, `wire`, `at:`, bare component types with direction.\n *\n * 2. Netlist (SPICE-style): header `circuit \"name\" netlist`, body\n * uses `<ID> <net1> <net2> [value]` lines. Auto-layout engine computes\n * positions.\n */\nexport function parseCircuit(text: string): CircuitAST {\n const rawLines = text.split(\"\\n\");\n const firstMeaningful = rawLines\n .map((l) => l.replace(/#.*$/, \"\").trim())\n .find((l) => l.length > 0) ?? \"\";\n\n if (/^circuit\\b.*\\bnetlist\\s*$/i.test(firstMeaningful)) {\n const titleMatch = firstMeaningful.match(/\"([^\"]*)\"/);\n let headerIdx = -1;\n for (let i = 0; i < rawLines.length; i++) {\n const s = rawLines[i].replace(/#.*$/, \"\").trim();\n if (s.length > 0) {\n headerIdx = i;\n break;\n }\n }\n const body = rawLines.slice(headerIdx + 1).join(\"\\n\");\n return parseNetlist(body, titleMatch?.[1]);\n }\n\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n let title: string | undefined;\n const components: CircuitComponent[] = [];\n const nets: CircuitNet[] = [];\n const netByName = new Map<string, CircuitNet>();\n let autoId = 0;\n let pendingAt: string | undefined;\n\n const mkId = (prefix: string) => `${prefix}_${autoId++}`;\n\n for (const rawLine of lines) {\n const stripped = rawLine.replace(/#.*$/, \"\").trim();\n if (!stripped) continue;\n\n // header\n if (/^circuit\\b/i.test(stripped)) {\n const t = stripped.match(/\"([^\"]*)\"/);\n if (t) title = t[1];\n continue;\n }\n\n // at: <anchor>\n const atMatch = stripped.match(/^at:\\s*(.+)$/i);\n if (atMatch) {\n pendingAt = atMatch[1].trim();\n continue;\n }\n\n // net NAME\n const netDecl = stripped.match(/^net\\s+([a-zA-Z_][\\w]*)\\s*$/i);\n if (netDecl) {\n const name = netDecl[1];\n if (!netByName.has(name)) {\n const n: CircuitNet = { id: name, anchors: [] };\n netByName.set(name, n);\n nets.push(n);\n }\n continue;\n }\n\n // net NAME: dot (declare net AND place a dot+remember anchor)\n const netDotMatch = stripped.match(/^net\\s+([a-zA-Z_][\\w]*)\\s*:\\s*dot\\s*$/i);\n if (netDotMatch) {\n const name = netDotMatch[1];\n let n = netByName.get(name);\n if (!n) {\n n = { id: name, anchors: [] };\n netByName.set(name, n);\n nets.push(n);\n }\n const id = mkId(\"dot\");\n components.push({\n id,\n componentType: \"dot\",\n direction: \"right\",\n at: pendingAt,\n attrs: { net: name },\n });\n n.anchors.push(`${id}.end`);\n pendingAt = `${id}.end`;\n continue;\n }\n\n // label \"text\" direction?\n const labelMatch = stripped.match(/^label\\s+\"([^\"]*)\"(?:\\s+(right|left|up|down))?\\s*$/i);\n if (labelMatch) {\n const id = mkId(\"lbl\");\n components.push({\n id,\n componentType: \"label\",\n direction: (labelMatch[2]?.toLowerCase() as CircuitDirection) ?? \"right\",\n at: pendingAt,\n label: labelMatch[1],\n });\n // labels don't advance cursor\n continue;\n }\n\n // wire <direction> [N px]\n const wireMatch = stripped.match(/^wire(?:\\s+(right|left|up|down))?(?:\\s+(\\d+)(?:px)?)?\\s*$/i);\n if (wireMatch) {\n const id = mkId(\"w\");\n components.push({\n id,\n componentType: \"wire\",\n direction: (wireMatch[1]?.toLowerCase() as CircuitDirection) ?? \"right\",\n at: pendingAt,\n attrs: wireMatch[2] ? { length: wireMatch[2] } : {},\n });\n pendingAt = `${id}.end`;\n continue;\n }\n\n // bare type (dot, ground, etc.) with optional direction + attrs\n const bareMatch = stripped.match(/^([a-zA-Z_][\\w]*)(\\s+.*)?$/);\n const colonMatch = stripped.match(/^([a-zA-Z_][\\w]*)\\s*:\\s*([a-zA-Z_][\\w]*)(\\s+.*)?$/);\n\n if (colonMatch) {\n const id = colonMatch[1];\n const typeStr = colonMatch[2];\n const norm = normalizeType(typeStr);\n if (!norm) {\n throw new CircuitParseError(`Unknown component type: ${typeStr}`);\n }\n const rest = colonMatch[3] ?? \"\";\n const parsed = parseAttrs(rest);\n const comp: CircuitComponent = {\n id,\n componentType: norm,\n direction: parsed.direction ?? \"right\",\n at: parsed.at ?? pendingAt,\n label: parsed.label,\n value: parsed.value,\n attrs: parsed.attrs,\n };\n if (parsed.length) {\n comp.attrs = { ...comp.attrs, length: parsed.length };\n }\n components.push(comp);\n pendingAt = `${id}.end`;\n continue;\n }\n\n if (bareMatch) {\n const typeStr = bareMatch[1];\n const norm = normalizeType(typeStr);\n if (!norm) {\n // ignore unknown bare tokens rather than throwing — keeps DSL forgiving\n continue;\n }\n const rest = bareMatch[2] ?? \"\";\n const parsed = parseAttrs(rest);\n const id = mkId(norm);\n const comp: CircuitComponent = {\n id,\n componentType: norm,\n direction: parsed.direction ?? \"right\",\n at: parsed.at ?? pendingAt,\n label: parsed.label,\n value: parsed.value,\n attrs: parsed.attrs,\n };\n components.push(comp);\n pendingAt = `${id}.end`;\n continue;\n }\n }\n\n return {\n type: \"circuit\",\n title,\n components,\n nets,\n mode: \"positional\",\n };\n}\n","/**\n * Circuit schematic symbol library.\n *\n * Each symbol is defined in RIGHTWARD orientation (direction=\"right\"):\n * - `start` anchor at (0, 0) — where the previous component's end connects in\n * - `end` anchor at (length, 0) — where the next component's start attaches\n * - Other named anchors (plus/minus/out/base/collector/emitter/wiper/gate/…)\n *\n * When the component is placed with a different direction, the renderer applies\n * an SVG rotation transform around (0,0) and the layout rotates the anchor\n * coordinates accordingly.\n */\nimport type { CircuitComponentType } from \"../../core/types\";\n\nexport interface PinAnchor {\n x: number;\n y: number;\n}\n\nexport interface SymbolDef {\n /** Length along the direction axis, used to compute next cursor position. */\n length: number;\n /** Anchor map in rightward orientation. MUST include start + end. */\n anchors: Record<string, PinAnchor>;\n /** SVG fragment drawn from (0,0); caller wraps in <g transform=\"translate()+rotate()\">. */\n svg: (label?: string, value?: string, attrs?: Record<string, string>) => string;\n}\n\n// ─── Drawing helpers ────────────────────────────────────────────\n\nconst BODY = 'class=\"schematex-circuit-body\"';\nconst FILL = 'class=\"schematex-circuit-fill\"';\nconst WIRE = 'class=\"schematex-circuit-wire\"';\n\nfunction lineWire(x1: number, y1: number, x2: number, y2: number): string {\n return `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" ${WIRE}/>`;\n}\n\n// ─── Passive ──────────────────────────────────────────────────\n\nconst resistor: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n `<path d=\"M 0,0 L 5,0 L 8,-8 L 12,8 L 16,-8 L 20,8 L 24,-8 L 28,8 L 32,-8 L 35,0 L 40,0\" ${BODY}/>`,\n};\n\nconst capacitor: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<line x1=\"8\" y1=\"-10\" x2=\"8\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"-10\" x2=\"12\" y2=\"10\" ${BODY}/>`,\n lineWire(12, 0, 20, 0),\n ].join(\"\"),\n};\n\nconst electrolytic_cap: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<line x1=\"8\" y1=\"-10\" x2=\"8\" y2=\"10\" ${BODY}/>`,\n `<path d=\"M 12,-10 Q 16,0 12,10\" fill=\"none\" class=\"schematex-circuit-body\"/>`,\n lineWire(12, 0, 20, 0),\n `<text x=\"5\" y=\"-12\" class=\"schematex-circuit-pol\">−</text>`,\n `<text x=\"15\" y=\"-12\" class=\"schematex-circuit-pol\">+</text>`,\n ].join(\"\"),\n};\n\nconst inductor: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n `<path d=\"M 0,0 L 5,0 A 5,5 0 0 1 15,0 A 5,5 0 0 1 25,0 A 5,5 0 0 1 35,0 L 40,0\" fill=\"none\" ${BODY}/>`,\n};\n\nconst fuse: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 5, 0),\n `<rect x=\"5\" y=\"-5\" width=\"20\" height=\"10\" rx=\"5\" fill=\"none\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"0\" x2=\"25\" y2=\"0\" ${BODY}/>`,\n lineWire(25, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst crystal: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-9\" x2=\"10\" y2=\"9\" ${BODY}/>`,\n `<rect x=\"14\" y=\"-7\" width=\"12\" height=\"14\" fill=\"none\" ${BODY}/>`,\n `<line x1=\"30\" y1=\"-9\" x2=\"30\" y2=\"9\" ${BODY}/>`,\n lineWire(30, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst transformer: SymbolDef = {\n length: 60,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 60, y: 0 },\n p1: { x: 0, y: 0 },\n p2: { x: 0, y: 0 },\n s1: { x: 60, y: 0 },\n s2: { x: 60, y: 0 },\n },\n svg: () =>\n [\n // Primary coils (left)\n `<path d=\"M 5,-18 A 5,5 0 0 1 5,-8 A 5,5 0 0 1 5,2 A 5,5 0 0 1 5,12 A 5,5 0 0 1 5,22\" fill=\"none\" ${BODY}/>`,\n lineWire(0, 0, 5, 0),\n // Core lines\n `<line x1=\"28\" y1=\"-20\" x2=\"28\" y2=\"22\" ${BODY}/>`,\n `<line x1=\"32\" y1=\"-20\" x2=\"32\" y2=\"22\" ${BODY}/>`,\n // Secondary coils (right)\n `<path d=\"M 55,-18 A 5,5 0 0 0 55,-8 A 5,5 0 0 0 55,2 A 5,5 0 0 0 55,12 A 5,5 0 0 0 55,22\" fill=\"none\" ${BODY}/>`,\n lineWire(55, 0, 60, 0),\n ].join(\"\"),\n};\n\n// ─── Sources ──────────────────────────────────────────────────\n\nconst voltage_source: SymbolDef = {\n length: 40,\n // plus/minus aliases: end = +, start = − (matches on-symbol label)\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 40, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<text x=\"16\" y=\"-2\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"23\" y=\"8\" class=\"schematex-circuit-pol\">−</text>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst current_source: SymbolDef = {\n length: 40,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 40, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"0\" x2=\"24\" y2=\"0\" ${BODY}/>`,\n `<polygon points=\"26,0 20,-4 20,4\" ${FILL}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst ac_source: SymbolDef = {\n length: 40,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 40, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<path d=\"M 14,0 Q 17,-6 20,0 Q 23,6 26,0\" fill=\"none\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst battery: SymbolDef = {\n length: 24,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 24, y: 0 },\n minus: { x: 0, y: 0 },\n plus: { x: 24, y: 0 },\n },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<line x1=\"8\" y1=\"-8\" x2=\"8\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"-4\" x2=\"12\" y2=\"4\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-8\" x2=\"14\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-4\" x2=\"18\" y2=\"4\" ${BODY}/>`,\n lineWire(18, 0, 24, 0),\n ].join(\"\"),\n};\n\nconst ground: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n // Drawn as a \"terminal\" — vertical connection at start, earth lines below\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<line x1=\"10\" y1=\"-8\" x2=\"10\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"6\" y1=\"4\" x2=\"14\" y2=\"4\" ${BODY}/>`,\n `<line x1=\"8\" y1=\"8\" x2=\"12\" y2=\"8\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst gnd_signal: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"8\" y2=\"0\" ${WIRE}/>`,\n `<polygon points=\"8,-6 8,6 16,0\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst vcc: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<line x1=\"4\" y1=\"-6\" x2=\"16\" y2=\"-6\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Diodes ───────────────────────────────────────────────────\n\nconst diode: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<line x1=\"22\" y1=\"-8\" x2=\"22\" y2=\"8\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst zener: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<path d=\"M 18,-10 L 22,-8 L 22,8 L 26,10\" fill=\"none\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst schottky: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<path d=\"M 18,-4 L 18,-8 L 22,-8 L 22,8 L 26,8 L 26,4\" fill=\"none\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n ].join(\"\"),\n};\n\nconst led: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<line x1=\"22\" y1=\"-8\" x2=\"22\" y2=\"8\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n // outward light arrows\n `<path d=\"M 12,-10 L 20,-18 M 18,-18 L 20,-18 L 20,-16\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 16,-10 L 24,-18 M 22,-18 L 24,-18 L 24,-16\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst photodiode: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<polygon points=\"8,-8 8,8 22,0\" ${FILL}/>`,\n `<line x1=\"22\" y1=\"-8\" x2=\"22\" y2=\"8\" ${BODY}/>`,\n lineWire(22, 0, 30, 0),\n // inward light arrows\n `<path d=\"M 20,-18 L 12,-10 M 12,-12 L 12,-10 L 14,-10\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 24,-18 L 16,-10 M 16,-12 L 16,-10 L 18,-10\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── BJT ──────────────────────────────────────────────────────\n\nconst npn: SymbolDef = {\n length: 40,\n // base at left, collector up-right, emitter down-right\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n base: { x: 0, y: 0 },\n collector: { x: 40, y: -16 },\n emitter: { x: 40, y: 16 },\n b: { x: 0, y: 0 },\n c: { x: 40, y: -16 },\n e: { x: 40, y: 16 },\n },\n svg: () =>\n [\n `<circle cx=\"20\" cy=\"0\" r=\"16\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-6\" x2=\"30\" y2=\"-12\" ${BODY}/>`,\n lineWire(30, -12, 40, -16),\n `<line x1=\"14\" y1=\"6\" x2=\"30\" y2=\"12\" ${BODY}/>`,\n lineWire(30, 12, 40, 16),\n // NPN arrow (outward on emitter)\n `<polygon points=\"30,12 24,10 26,16\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst pnp: SymbolDef = {\n length: 40,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n base: { x: 0, y: 0 },\n collector: { x: 40, y: 16 },\n emitter: { x: 40, y: -16 },\n b: { x: 0, y: 0 },\n c: { x: 40, y: 16 },\n e: { x: 40, y: -16 },\n },\n svg: () =>\n [\n `<circle cx=\"20\" cy=\"0\" r=\"16\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-6\" x2=\"30\" y2=\"-12\" ${BODY}/>`,\n lineWire(30, -12, 40, -16),\n `<line x1=\"14\" y1=\"6\" x2=\"30\" y2=\"12\" ${BODY}/>`,\n lineWire(30, 12, 40, 16),\n // PNP arrow (inward on emitter → toward base line)\n `<polygon points=\"14,-6 20,-4 18,-10\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// ─── MOSFET ───────────────────────────────────────────────────\n\nconst nmos: SymbolDef = {\n length: 40,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n drain: { x: 40, y: -16 },\n source: { x: 40, y: 16 },\n g: { x: 0, y: 0 },\n d: { x: 40, y: -16 },\n s: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-10\" x2=\"18\" y2=\"-4\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-2\" x2=\"18\" y2=\"2\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"4\" x2=\"18\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"18\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"22,0 18,-4 18,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst pmos: SymbolDef = {\n length: 40,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n source: { x: 40, y: -16 },\n drain: { x: 40, y: 16 },\n g: { x: 0, y: 0 },\n s: { x: 40, y: -16 },\n d: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-10\" x2=\"18\" y2=\"-4\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-2\" x2=\"18\" y2=\"2\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"4\" x2=\"18\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"18\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"18\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"14,0 18,-4 18,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst jfet_n: SymbolDef = {\n length: 40,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n drain: { x: 40, y: -16 },\n source: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"14\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"14,0 10,-4 10,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\nconst jfet_p: SymbolDef = {\n length: 40,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 40, y: -16 },\n gate: { x: 0, y: 0 },\n drain: { x: 40, y: -16 },\n source: { x: 40, y: 16 },\n },\n svg: () =>\n [\n lineWire(0, 0, 14, 0),\n `<line x1=\"14\" y1=\"-12\" x2=\"14\" y2=\"12\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-8\" x2=\"32\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, -8, 40, -16),\n `<line x1=\"14\" y1=\"8\" x2=\"32\" y2=\"8\" ${BODY}/>`,\n lineWire(32, 8, 40, 16),\n `<polygon points=\"10,0 14,-4 14,4\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// ─── Opamp / Comparator ───────────────────────────────────────\n\nconst opamp: SymbolDef = {\n length: 50,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n plus: { x: 0, y: -10 },\n minus: { x: 0, y: 10 },\n out: { x: 50, y: 0 },\n \"supply+\": { x: 25, y: -20 },\n \"supply-\": { x: 25, y: 20 },\n },\n svg: () =>\n [\n `<polygon points=\"0,-20 0,20 50,0\" fill=\"white\" ${BODY}/>`,\n `<text x=\"5\" y=\"-6\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"5\" y=\"14\" class=\"schematex-circuit-pol\">−</text>`,\n ].join(\"\"),\n};\n\nconst comparator: SymbolDef = {\n length: 50,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n plus: { x: 0, y: -10 },\n minus: { x: 0, y: 10 },\n out: { x: 50, y: 0 },\n },\n svg: () =>\n [\n `<polygon points=\"0,-20 0,20 50,0\" fill=\"white\" ${BODY}/>`,\n `<text x=\"5\" y=\"-6\" class=\"schematex-circuit-pol\">+</text>`,\n `<text x=\"5\" y=\"14\" class=\"schematex-circuit-pol\">−</text>`,\n `<circle cx=\"48\" cy=\"0\" r=\"3\" fill=\"white\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Switches ─────────────────────────────────────────────────\n\nconst switch_spst: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"0\" x2=\"30\" y2=\"-10\" ${BODY}/>`,\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"30\" cy=\"0\" r=\"2\" ${FILL}/>`,\n lineWire(30, 0, 40, 0),\n ].join(\"\"),\n};\n\nconst push_no: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 12, 0),\n lineWire(28, 0, 40, 0),\n `<circle cx=\"12\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"28\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<line x1=\"12\" y1=\"-4\" x2=\"28\" y2=\"-4\" ${BODY}/>`,\n `<line x1=\"20\" y1=\"-4\" x2=\"20\" y2=\"-12\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-12\" x2=\"26\" y2=\"-12\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Measurement ──────────────────────────────────────────────\n\nconst meterSvg = (letter: string): SymbolDef[\"svg\"] => () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<text x=\"20\" y=\"4\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${letter}</text>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\");\n\nconst ammeter: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"A\") };\nconst voltmeter: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"V\") };\nconst wattmeter: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"W\") };\nconst motor: SymbolDef = { length: 40, anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } }, svg: meterSvg(\"M\") };\n\n// ─── Electromechanical / Output devices ───────────────────────\n\n// Lamp / bulb — circle with X through it\nconst lamp: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"-8\" x2=\"28\" y2=\"8\" ${BODY}/>`,\n `<line x1=\"12\" y1=\"8\" x2=\"28\" y2=\"-8\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Buzzer — semicircle (dome)\nconst buzzer: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<path d=\"M 8,0 A 12,12 0 0 1 32,0 L 8,0 Z\" fill=\"white\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// Speaker — trapezoid/box with cone flare\nconst speaker: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n `<rect x=\"6\" y=\"-8\" width=\"10\" height=\"16\" fill=\"white\" ${BODY}/>`,\n `<path d=\"M 16,-8 L 28,-16 L 28,16 L 16,8 Z\" fill=\"white\" ${BODY}/>`,\n lineWire(0, 8, 6, 8),\n ].join(\"\"),\n};\n\n// Microphone — circle + vertical bar\nconst microphone: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 8, 0),\n `<circle cx=\"20\" cy=\"0\" r=\"12\" fill=\"white\" ${BODY}/>`,\n `<line x1=\"20\" y1=\"-10\" x2=\"20\" y2=\"10\" ${BODY}/>`,\n lineWire(32, 0, 40, 0),\n ].join(\"\"),\n};\n\n// ─── Variable passives ────────────────────────────────────────\n\n// Rheostat — resistor with a diagonal arrow across it\nconst rheostat: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"12\" x2=\"45\" y2=\"-12\" ${BODY}/>`,\n `<polygon points=\"45,-12 40,-9 44,-5\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// Thermistor — resistor with diagonal line (no arrow) + t° label\nconst thermistor_ntc: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"10\" x2=\"45\" y2=\"-10\" ${BODY}/>`,\n `<text x=\"40\" y=\"-14\" class=\"schematex-circuit-pol\">-t°</text>`,\n ].join(\"\"),\n};\n\nconst thermistor_ptc: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"10\" x2=\"45\" y2=\"-10\" ${BODY}/>`,\n `<text x=\"40\" y=\"-14\" class=\"schematex-circuit-pol\">+t°</text>`,\n ].join(\"\"),\n};\n\n// LDR — resistor + two inward light arrows\nconst ldr: SymbolDef = {\n length: 50,\n anchors: { start: { x: 0, y: 0 }, end: { x: 50, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<circle cx=\"25\" cy=\"-2\" r=\"14\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 10,-24 L 18,-16 M 14,-16 L 18,-16 L 18,-20\" fill=\"none\" ${BODY}/>`,\n `<path d=\"M 20,-24 L 28,-16 M 24,-16 L 28,-16 L 28,-20\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// Variable capacitor\nconst variable_cap: SymbolDef = {\n length: 24,\n anchors: { start: { x: 0, y: 0 }, end: { x: 24, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<line x1=\"10\" y1=\"-10\" x2=\"10\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n lineWire(14, 0, 24, 0),\n `<line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"-12\" ${BODY}/>`,\n `<polygon points=\"21,-12 15,-10 19,-6\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// Variable inductor\nconst variable_inductor: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n `<path d=\"M 0,0 L 5,0 A 5,5 0 0 1 15,0 A 5,5 0 0 1 25,0 A 5,5 0 0 1 35,0 L 40,0\" fill=\"none\" ${BODY}/>`,\n `<line x1=\"0\" y1=\"10\" x2=\"38\" y2=\"-14\" ${BODY}/>`,\n `<polygon points=\"38,-14 32,-12 36,-8\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// ─── Switches (extra) ────────────────────────────────────────\n\nconst switch_spdt: SymbolDef = {\n length: 50,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n common: { x: 0, y: 0 },\n nc: { x: 50, y: -12 },\n no: { x: 50, y: 12 },\n },\n svg: () =>\n [\n lineWire(0, 0, 10, 0),\n `<circle cx=\"10\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<line x1=\"10\" y1=\"0\" x2=\"40\" y2=\"-12\" ${BODY}/>`,\n `<circle cx=\"42\" cy=\"-12\" r=\"2\" ${FILL}/>`,\n lineWire(42, -12, 50, -12),\n `<circle cx=\"42\" cy=\"12\" r=\"2\" ${FILL}/>`,\n lineWire(42, 12, 50, 12),\n ].join(\"\"),\n};\n\nconst push_nc: SymbolDef = {\n length: 40,\n anchors: { start: { x: 0, y: 0 }, end: { x: 40, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 12, 0),\n lineWire(28, 0, 40, 0),\n `<circle cx=\"12\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<circle cx=\"28\" cy=\"0\" r=\"2\" ${FILL}/>`,\n `<line x1=\"10\" y1=\"0\" x2=\"30\" y2=\"0\" ${BODY}/>`,\n `<line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"-10\" ${BODY}/>`,\n `<line x1=\"14\" y1=\"-10\" x2=\"26\" y2=\"-10\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Ground variants ────────────────────────────────────────\n\nconst gnd_chassis: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<line x1=\"10\" y1=\"-6\" x2=\"10\" y2=\"6\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"6\" x2=\"14\" y2=\"10\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"2\" x2=\"14\" y2=\"6\" ${BODY}/>`,\n `<line x1=\"10\" y1=\"-2\" x2=\"14\" y2=\"2\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst gnd_digital: SymbolDef = {\n length: 20,\n anchors: { start: { x: 0, y: 0 }, end: { x: 20, y: 0 } },\n svg: () =>\n [\n `<line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"0\" ${WIRE}/>`,\n `<polygon points=\"8,-6 8,6 16,0\" fill=\"none\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── Annotations ─────────────────────────────────────────────\n\nconst test_point: SymbolDef = {\n length: 16,\n anchors: { start: { x: 0, y: 0 }, end: { x: 16, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 6, 0),\n `<circle cx=\"10\" cy=\"0\" r=\"4\" fill=\"white\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst no_connect: SymbolDef = {\n length: 0,\n anchors: { start: { x: 0, y: 0 }, end: { x: 0, y: 0 } },\n svg: () =>\n [\n `<line x1=\"-5\" y1=\"-5\" x2=\"5\" y2=\"5\" ${BODY}/>`,\n `<line x1=\"5\" y1=\"-5\" x2=\"-5\" y2=\"5\" ${BODY}/>`,\n ].join(\"\"),\n};\n\nconst antenna: SymbolDef = {\n length: 30,\n anchors: { start: { x: 0, y: 0 }, end: { x: 30, y: 0 } },\n svg: () =>\n [\n lineWire(0, 0, 0, -10),\n `<line x1=\"0\" y1=\"-10\" x2=\"-10\" y2=\"-24\" ${BODY}/>`,\n `<line x1=\"0\" y1=\"-10\" x2=\"10\" y2=\"-24\" ${BODY}/>`,\n ].join(\"\"),\n};\n\n// ─── ICs / Generic blocks ────────────────────────────────────\n\n/**\n * Generic IC — 8-pin dual-inline rectangular block.\n * `attrs.pins_left` / `attrs.pins_right`: comma-separated pin labels.\n * Total pins determine body height. Left pins are input side (start anchor\n * attaches to pin 1 = top-left).\n */\nfunction icSymbol(\n defaultLeft: string[],\n defaultRight: string[],\n bodyLabel?: string\n): SymbolDef {\n const BODY_W = 80;\n return {\n length: BODY_W,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: BODY_W, y: 0 },\n },\n svg: (_label?: string, _value?: string, attrs?: Record<string, string>) => {\n const left = (attrs?.pins_left ? attrs.pins_left.split(\",\").map((s) => s.trim()) : defaultLeft);\n const right = (attrs?.pins_right ? attrs.pins_right.split(\",\").map((s) => s.trim()) : defaultRight);\n const n = Math.max(left.length, right.length, 2);\n const pitch = 16;\n const bodyH = pitch * (n + 1);\n const topY = -bodyH / 2;\n const parts: string[] = [];\n parts.push(`<rect x=\"0\" y=\"${topY}\" width=\"${BODY_W}\" height=\"${bodyH}\" fill=\"white\" ${BODY}/>`);\n const labelText = attrs?.ic_label ?? bodyLabel ?? \"\";\n if (labelText) {\n parts.push(`<text x=\"${BODY_W / 2}\" y=\"3\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${labelText}</text>`);\n }\n for (let i = 0; i < left.length; i++) {\n const y = topY + pitch * (i + 1);\n parts.push(`<line x1=\"-8\" y1=\"${y}\" x2=\"0\" y2=\"${y}\" ${WIRE}/>`);\n parts.push(`<text x=\"4\" y=\"${y + 3}\" class=\"schematex-circuit-pol\">${left[i]}</text>`);\n }\n for (let i = 0; i < right.length; i++) {\n const y = topY + pitch * (i + 1);\n parts.push(`<line x1=\"${BODY_W}\" y1=\"${y}\" x2=\"${BODY_W + 8}\" y2=\"${y}\" ${WIRE}/>`);\n parts.push(`<text x=\"${BODY_W - 4}\" y=\"${y + 3}\" text-anchor=\"end\" class=\"schematex-circuit-pol\">${right[i]}</text>`);\n }\n return parts.join(\"\");\n },\n };\n}\n\nconst generic_ic: SymbolDef = icSymbol(\n [\"1\", \"2\", \"3\", \"4\"],\n [\"8\", \"7\", \"6\", \"5\"],\n \"IC\"\n);\n\n/** 555 timer — 8-pin standard pinout */\nconst timer_555: SymbolDef = (() => {\n const left = [\"GND\", \"TRG\", \"OUT\", \"RST\"];\n const right = [\"VCC\", \"DIS\", \"THR\", \"CTL\"];\n const sym = icSymbol(left, right, \"555\");\n // Add custom pin anchors so DSL can reference U1.trg, U1.out, etc.\n const BODY_W = 80;\n const pitch = 16;\n const n = 4;\n const bodyH = pitch * (n + 1);\n const topY = -bodyH / 2;\n const anchors: Record<string, PinAnchor> = {\n start: { x: 0, y: 0 },\n end: { x: BODY_W, y: 0 },\n };\n const leftNames = [\"gnd\", \"trg\", \"out\", \"rst\"];\n const rightNames = [\"vcc\", \"dis\", \"thr\", \"ctl\"];\n for (let i = 0; i < n; i++) {\n const y = topY + pitch * (i + 1);\n anchors[leftNames[i]] = { x: -8, y };\n anchors[rightNames[i]] = { x: BODY_W + 8, y };\n }\n return { ...sym, anchors };\n})();\n\nconst voltage_regulator: SymbolDef = {\n length: 60,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 60, y: 0 },\n in: { x: 0, y: 0 },\n out: { x: 60, y: 0 },\n gnd: { x: 30, y: 20 },\n },\n svg: (_l?: string, _v?: string, attrs?: Record<string, string>) =>\n [\n lineWire(0, 0, 10, 0),\n `<rect x=\"10\" y=\"-15\" width=\"40\" height=\"30\" fill=\"white\" ${BODY}/>`,\n `<text x=\"30\" y=\"4\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${attrs?.model ?? \"REG\"}</text>`,\n lineWire(50, 0, 60, 0),\n lineWire(30, 15, 30, 20),\n ].join(\"\"),\n};\n\n// ─── Potentiometer ────────────────────────────────────────────\n\nconst potentiometer: SymbolDef = {\n length: 50,\n anchors: {\n start: { x: 0, y: 0 },\n end: { x: 50, y: 0 },\n wiper: { x: 25, y: -22 },\n },\n svg: () =>\n [\n `<path d=\"M 0,0 L 10,0 L 13,-8 L 18,8 L 23,-8 L 28,8 L 33,-8 L 38,8 L 40,0 L 50,0\" ${BODY}/>`,\n `<line x1=\"25\" y1=\"-22\" x2=\"25\" y2=\"-10\" ${BODY}/>`,\n `<polygon points=\"25,-10 21,-16 29,-16\" ${FILL}/>`,\n ].join(\"\"),\n};\n\n// Terminal block / junction box. Pin anchors are dynamic per-instance from\n// `pins=\"...\"`; the static `start`/`end` anchors here are placeholders.\nconst terminal_block: SymbolDef = {\n length: 80,\n anchors: { start: { x: 0, y: 0 }, end: { x: 80, y: 0 } },\n svg: (label?: string, _value?: string, attrs?: Record<string, string>) => {\n const pinsAttr = attrs?.pins ?? attrs?.terminals ?? \"1,2,3,4\";\n const pins = pinsAttr.split(\",\").map((s) => s.trim()).filter(Boolean);\n const n = Math.max(pins.length, 1);\n const BODY_W = 80;\n const pitch = 18;\n const bodyH = pitch * (n + 1);\n const topY = -bodyH / 2;\n const parts: string[] = [];\n parts.push(\n `<rect x=\"0\" y=\"${topY}\" width=\"${BODY_W}\" height=\"${bodyH}\" rx=\"3\" fill=\"white\" stroke-width=\"2\" ${BODY}/>`\n );\n if (label) {\n parts.push(\n `<text x=\"${BODY_W / 2}\" y=\"${topY + 14}\" text-anchor=\"middle\" class=\"schematex-circuit-meter\">${label}</text>`\n );\n }\n for (let i = 0; i < n; i++) {\n const y = topY + pitch * (i + 1) + (label ? 8 : 0);\n parts.push(`<line x1=\"-8\" y1=\"${y}\" x2=\"0\" y2=\"${y}\" ${WIRE}/>`);\n parts.push(`<circle cx=\"6\" cy=\"${y}\" r=\"2\" ${FILL}/>`);\n parts.push(\n `<text x=\"12\" y=\"${y + 3}\" class=\"schematex-circuit-pol\">${pins[i] ?? `T${i + 1}`}</text>`\n );\n }\n return parts.join(\"\");\n },\n};\n\n// ─── Registry ─────────────────────────────────────────────────\n\nexport const SYMBOLS: Partial<Record<CircuitComponentType, SymbolDef>> = {\n resistor,\n capacitor,\n electrolytic_cap,\n inductor,\n fuse,\n crystal,\n transformer,\n voltage_source,\n current_source,\n ac_source,\n battery,\n ground,\n gnd_signal,\n vcc,\n diode,\n zener,\n schottky,\n led,\n photodiode,\n npn,\n pnp,\n nmos,\n pmos,\n jfet_n,\n jfet_p,\n opamp,\n comparator,\n switch_spst,\n push_no,\n ammeter,\n voltmeter,\n wattmeter,\n motor,\n speaker,\n microphone,\n buzzer,\n potentiometer,\n rheostat,\n thermistor_ntc,\n thermistor_ptc,\n ldr,\n variable_cap,\n variable_inductor,\n switch_spdt,\n push_nc,\n gnd_chassis,\n gnd_digital,\n test_point,\n no_connect,\n antenna,\n generic_ic,\n terminal_block,\n \"555_timer\": timer_555,\n voltage_regulator,\n // Lamp reuses buzzer slot? No, needs its own entry but our CircuitComponentType\n // doesn't have \"lamp\". We map it via parser alias to \"buzzer\" or add specifically.\n};\n\n// Lamp is not in CircuitComponentType; expose via a side channel so parser can find it.\nexport const EXTRA_SYMBOLS: Record<string, SymbolDef> = {\n lamp,\n};\n\nexport function getSymbol(t: string): SymbolDef | undefined {\n return SYMBOLS[t as CircuitComponentType] ?? EXTRA_SYMBOLS[t];\n}\n","import type {\n CircuitAST,\n CircuitComponent,\n CircuitDirection,\n} from \"../../core/types\";\nimport { getSymbol, type PinAnchor } from \"./symbols\";\n\nexport interface LaidOutComponent {\n component: CircuitComponent;\n /** World (SVG) coordinates of the component's origin (before rotation). */\n x: number;\n y: number;\n /** Rotation applied to the symbol, in degrees. */\n rotation: number;\n /** Length along direction — 0 for zero-length items (dots, labels). */\n length: number;\n /** Resolved anchors in world coordinates. */\n anchors: Record<string, PinAnchor>;\n}\n\nexport interface CircuitLayoutResult {\n width: number;\n height: number;\n offsetX: number;\n offsetY: number;\n items: LaidOutComponent[];\n}\n\nfunction rotationDeg(d: CircuitDirection): number {\n return d === \"right\" ? 0 : d === \"down\" ? 90 : d === \"left\" ? 180 : 270;\n}\n\nfunction rotatePoint(p: PinAnchor, angleDeg: number): PinAnchor {\n const r = (angleDeg * Math.PI) / 180;\n const c = Math.cos(r);\n const s = Math.sin(r);\n return { x: p.x * c - p.y * s, y: p.x * s + p.y * c };\n}\n\nfunction resolveAnchorRef(\n ref: string,\n byId: Map<string, LaidOutComponent>,\n nets: Map<string, PinAnchor>\n): PinAnchor | undefined {\n if (ref === \"origin\") return { x: 0, y: 0 };\n if (nets.has(ref)) return nets.get(ref);\n const dot = ref.indexOf(\".\");\n if (dot < 0) {\n // bare id — treat as .end\n const c = byId.get(ref);\n if (c) return c.anchors.end ?? c.anchors.center ?? { x: c.x, y: c.y };\n return undefined;\n }\n const id = ref.slice(0, dot);\n const pin = ref.slice(dot + 1);\n const c = byId.get(id);\n if (!c) return undefined;\n return c.anchors[pin];\n}\n\nexport function layoutCircuit(ast: CircuitAST): CircuitLayoutResult {\n const items: LaidOutComponent[] = [];\n const byId = new Map<string, LaidOutComponent>();\n const nets = new Map<string, PinAnchor>();\n let cursor: PinAnchor = { x: 0, y: 0 };\n\n for (const comp of ast.components) {\n // Determine starting point\n let startPt: PinAnchor = cursor;\n if (comp.at) {\n const resolved = resolveAnchorRef(comp.at, byId, nets);\n if (resolved) startPt = resolved;\n }\n\n const sym = getSymbol(comp.componentType);\n const rot = rotationDeg(comp.direction);\n\n if (comp.componentType === \"wire\") {\n const len = parseInt(comp.attrs?.length ?? \"20\", 10);\n const endOffset = rotatePoint({ x: len, y: 0 }, rot);\n const end = { x: startPt.x + endOffset.x, y: startPt.y + endOffset.y };\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: len,\n anchors: { start: startPt, end },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n cursor = end;\n continue;\n }\n\n if (comp.componentType === \"dot\") {\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: 0,\n length: 0,\n anchors: { start: startPt, end: startPt, center: startPt },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n if (comp.attrs?.net) nets.set(comp.attrs.net, startPt);\n cursor = startPt;\n continue;\n }\n\n if (comp.componentType === \"label\") {\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: 0,\n anchors: { start: startPt, end: startPt },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n // don't advance cursor\n continue;\n }\n\n if (!sym) {\n // Unknown symbol — render as placeholder square, advance 30\n const endOffset = rotatePoint({ x: 30, y: 0 }, rot);\n const end = { x: startPt.x + endOffset.x, y: startPt.y + endOffset.y };\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: 30,\n anchors: { start: startPt, end },\n };\n items.push(laid);\n byId.set(comp.id, laid);\n cursor = end;\n continue;\n }\n\n // Resolve all anchors to world coords by rotating + translating\n const worldAnchors: Record<string, PinAnchor> = {};\n for (const [name, pt] of Object.entries(sym.anchors)) {\n const rp = rotatePoint(pt, rot);\n worldAnchors[name] = { x: startPt.x + rp.x, y: startPt.y + rp.y };\n }\n\n const laid: LaidOutComponent = {\n component: comp,\n x: startPt.x,\n y: startPt.y,\n rotation: rot,\n length: sym.length,\n anchors: worldAnchors,\n };\n items.push(laid);\n byId.set(comp.id, laid);\n cursor = worldAnchors.end ?? startPt;\n }\n\n // Compute bounding box with margin for labels/text\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (const it of items) {\n for (const a of Object.values(it.anchors)) {\n if (a.x < minX) minX = a.x;\n if (a.y < minY) minY = a.y;\n if (a.x > maxX) maxX = a.x;\n if (a.y > maxY) maxY = a.y;\n }\n }\n if (!isFinite(minX)) {\n minX = 0;\n minY = 0;\n maxX = 100;\n maxY = 100;\n }\n // Pad for symbol radii + text overflow\n const pad = 40;\n minX -= pad;\n minY -= pad;\n maxX += pad;\n maxY += pad;\n const width = maxX - minX;\n const height = maxY - minY;\n\n return {\n width,\n height,\n offsetX: -minX,\n offsetY: -minY,\n items,\n };\n}\n","/**\n * Auto-layout engine for netlist-mode circuits.\n *\n * Strategy (lightweight Sugiyama-ish, no external deps):\n *\n * 1. Classify components by role:\n * - POWER_TOP: voltage/current sources, battery (supply rails → top)\n * - GROUND: ground symbols (→ bottom)\n * - MIDDLE: everything else\n *\n * 2. Build adjacency between non-rail components via shared nets (power/\n * ground nets ignored for this purpose — they'd make everything adjacent).\n *\n * 3. Rank (vertical Y layer) via BFS from power sources:\n * rank 0 = power, rank K = ground, middle at 1..K-1 by topo distance.\n *\n * 4. Within each rank, order components by declaration order (stable).\n * Orientation per component is chosen based on which pins connect up vs\n * down vs sideways — defaults to horizontal.\n *\n * 5. Orthogonal routing: each net is drawn as a polyline via HVH (horizontal\n * → vertical → horizontal) from each member pin to a common spine.\n * - 2-pin nets: direct HVH between the two pin coords.\n * - 3+ pin nets: find median Y, draw horizontal spine, each pin drops\n * V to spine, then H to spine center. Junctions get dots.\n *\n * 6. Power rail and ground rail: drawn as full-width horizontal lines at the\n * top/bottom edges of the component region.\n *\n * This is deliberately simple. Output is readable but not publication-grade.\n * Quality can improve by adding rank constraints, barycenter ordering, and a\n * proper grid A* router — but that's future work.\n */\nimport type {\n CircuitAST,\n CircuitComponent,\n} from \"../../core/types\";\nimport { getSymbol, type PinAnchor } from \"./symbols\";\nimport type {\n LaidOutComponent,\n CircuitLayoutResult,\n} from \"./layout\";\n\nconst COL_W = 120; // horizontal spacing per component\nconst ROW_H = 100; // vertical spacing per rank\nconst RAIL_PAD = 60; // distance from top/bottom rail to component row\nconst LEFT_MARGIN = 80;\nconst TOP_MARGIN = 60;\n\nexport interface RoutedWire {\n netId: string;\n /** Polyline points in world coords. */\n points: PinAnchor[];\n /** Junction dot positions (3+ pin nets have these). */\n junctions?: PinAnchor[];\n}\n\nexport interface AutoLayoutResult extends CircuitLayoutResult {\n routes: RoutedWire[];\n}\n\nfunction isPowerSource(c: CircuitComponent): boolean {\n return (\n c.componentType === \"voltage_source\" ||\n c.componentType === \"current_source\" ||\n c.componentType === \"ac_source\" ||\n c.componentType === \"battery\" ||\n c.componentType === \"vcc\"\n );\n}\n\nfunction isGround(c: CircuitComponent): boolean {\n return (\n c.componentType === \"ground\" ||\n c.componentType === \"gnd_signal\" ||\n c.componentType === \"gnd_chassis\" ||\n c.componentType === \"gnd_digital\"\n );\n}\n\nfunction rotatePt(p: PinAnchor, angleDeg: number): PinAnchor {\n const r = (angleDeg * Math.PI) / 180;\n const c = Math.cos(r);\n const s = Math.sin(r);\n return { x: p.x * c - p.y * s, y: p.x * s + p.y * c };\n}\n\nfunction rotationOf(dir: \"right\" | \"left\" | \"up\" | \"down\"): number {\n return dir === \"right\" ? 0 : dir === \"down\" ? 90 : dir === \"left\" ? 180 : 270;\n}\n\n/**\n * Choose default direction per role so pin anchors aim the right way.\n *\n * Convention:\n * - Power source gets direction \"up\" so its `end` (= plus) rotates to land\n * ABOVE origin — naturally connects to a supply rail at the top.\n * Its `start` (= minus) stays at origin, close to the GND rail.\n * i.e. rotation 270° takes (40,0)→(0,−40) — plus sits 40px above origin.\n * - Ground keeps direction \"up\" (the stem points down from the origin which\n * sits on the rail).\n * - Middle components stay horizontal.\n */\nfunction defaultDirection(c: CircuitComponent): \"right\" | \"left\" | \"up\" | \"down\" {\n if (isPowerSource(c)) return \"up\";\n // Ground symbol is drawn with stem pointing rightward in its native\n // orientation; rotating by \"down\" (90°) makes the stem point down and rake\n // lines appear below — the conventional ground-hanging-below layout.\n if (isGround(c)) return \"down\";\n return \"right\";\n}\n\n/**\n * Compute bounding box for a laid-out component including its rotated anchors\n * and a margin for the symbol body.\n */\nfunction extendBBox(\n bbox: { minX: number; minY: number; maxX: number; maxY: number },\n pt: PinAnchor\n): void {\n if (pt.x < bbox.minX) bbox.minX = pt.x;\n if (pt.y < bbox.minY) bbox.minY = pt.y;\n if (pt.x > bbox.maxX) bbox.maxX = pt.x;\n if (pt.y > bbox.maxY) bbox.maxY = pt.y;\n}\n\nexport function layoutCircuitNetlist(ast: CircuitAST): AutoLayoutResult {\n const pinMap = ast.pinMap ?? {};\n\n // ── Step 1: classify ───────────────────────────────────────\n // MVP ranking: power sources + regular components share the MIDDLE rank\n // (sources on the left, others to their right). Grounds live on a dedicated\n // bottom rank so a full-width GND rail can be drawn underneath. This mimics\n // the standard textbook convention where a vertical source on the left\n // feeds a horizontal chain of components into a ground at the bottom.\n const powerComps: CircuitComponent[] = [];\n const groundComps: CircuitComponent[] = [];\n const middleComps: CircuitComponent[] = [];\n\n for (const c of ast.components) {\n if (isPowerSource(c)) powerComps.push(c);\n else if (isGround(c)) groundComps.push(c);\n else middleComps.push(c);\n }\n\n const ranks: CircuitComponent[][] = [];\n const mainRank = [...powerComps, ...middleComps];\n if (mainRank.length) ranks.push(mainRank);\n if (groundComps.length) ranks.push(groundComps);\n\n // If classification produced nothing, fall through with one row\n if (ranks.length === 0) ranks.push(ast.components);\n\n // ── Step 4: place components on grid ───────────────────────\n const placed = new Map<string, LaidOutComponent>();\n const items: LaidOutComponent[] = [];\n\n let maxCols = 0;\n for (const rank of ranks) maxCols = Math.max(maxCols, rank.length);\n\n for (let r = 0; r < ranks.length; r++) {\n const rank = ranks[r];\n const rowY = TOP_MARGIN + r * (ROW_H + RAIL_PAD);\n // Center this rank under the widest rank\n const startX = LEFT_MARGIN + ((maxCols - rank.length) * COL_W) / 2;\n\n for (let i = 0; i < rank.length; i++) {\n const comp = rank[i];\n // For netlist mode, override direction based on role: power sources\n // face down (plus at bottom, connecting to the middle rank), ground\n // symbols face up (stem pointing down).\n const direction = defaultDirection(comp);\n comp.direction = direction;\n const rot = rotationOf(direction);\n\n const sym = getSymbol(comp.componentType);\n const x = startX + i * COL_W;\n const y = rowY;\n\n const worldAnchors: Record<string, PinAnchor> = {};\n if (sym) {\n for (const [name, pt] of Object.entries(sym.anchors)) {\n const rp = rotatePt(pt, rot);\n worldAnchors[name] = { x: x + rp.x, y: y + rp.y };\n }\n } else {\n worldAnchors.start = { x, y };\n worldAnchors.end = { x: x + 30, y };\n }\n\n const laid: LaidOutComponent = {\n component: comp,\n x,\n y,\n rotation: rot,\n length: sym?.length ?? 30,\n anchors: worldAnchors,\n };\n items.push(laid);\n placed.set(comp.id, laid);\n }\n }\n\n // ── Step 5: build net → world pin coords ───────────────────\n type NetPin = { compId: string; pinName: string; pt: PinAnchor };\n const netPins = new Map<string, NetPin[]>();\n\n for (const comp of ast.components) {\n const pins = pinMap[comp.id];\n if (!pins) continue;\n const laid = placed.get(comp.id);\n if (!laid) continue;\n for (const [pinName, netId] of Object.entries(pins)) {\n const pt = laid.anchors[pinName];\n if (!pt) continue;\n if (!netPins.has(netId)) netPins.set(netId, []);\n netPins.get(netId)!.push({ compId: comp.id, pinName, pt });\n }\n }\n\n // ── Step 6: route each net orthogonally ───────────────────\n const routes: RoutedWire[] = [];\n const bbox = {\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity,\n };\n for (const it of items) {\n for (const a of Object.values(it.anchors)) extendBBox(bbox, a);\n }\n // default if no components\n if (!isFinite(bbox.minX)) {\n bbox.minX = 0;\n bbox.minY = 0;\n bbox.maxX = 200;\n bbox.maxY = 200;\n }\n\n for (const [netId, pins] of netPins) {\n if (pins.length < 2) continue; // dangling pin, nothing to route\n\n if (netId === \"GND\") {\n // Ground rail: horizontal line near bottom. All pins connect via V-line.\n const railY = bbox.maxY + 30;\n const minX = Math.min(...pins.map((p) => p.pt.x));\n const maxX = Math.max(...pins.map((p) => p.pt.x));\n // the rail itself\n if (pins.length > 1) {\n routes.push({\n netId,\n points: [\n { x: minX, y: railY },\n { x: maxX, y: railY },\n ],\n });\n }\n // each pin drops to rail\n for (const p of pins) {\n routes.push({\n netId: `${netId}.${p.compId}`,\n points: [\n p.pt,\n { x: p.pt.x, y: railY },\n ],\n });\n }\n bbox.maxY = Math.max(bbox.maxY, railY);\n continue;\n }\n\n // Power-like nets: only route as a top rail when at least one pin belongs\n // to a power source (V/I/B/AC). Otherwise the net is a regular signal net\n // between middle-rank components and should use HVH routing below.\n const touchesPowerSource = pins.some((p) => {\n const comp = ast.components.find((c) => c.id === p.compId);\n return !!comp && isPowerSource(comp);\n });\n if (touchesPowerSource && pins.length > 1) {\n const railY = bbox.minY - 30;\n const minX = Math.min(...pins.map((p) => p.pt.x));\n const maxX = Math.max(...pins.map((p) => p.pt.x));\n routes.push({\n netId,\n points: [\n { x: minX, y: railY },\n { x: maxX, y: railY },\n ],\n });\n for (const p of pins) {\n routes.push({\n netId: `${netId}.${p.compId}`,\n points: [p.pt, { x: p.pt.x, y: railY }],\n });\n }\n bbox.minY = Math.min(bbox.minY, railY);\n continue;\n }\n\n if (pins.length === 2) {\n // Single-L route: exit source vertically, then horizontally to target.\n // This avoids the midpoint of HVH landing on an intermediate component's\n // pin x-coordinate (visible as a false T-junction).\n const [a, b] = pins;\n const points: PinAnchor[] =\n Math.abs(a.pt.y - b.pt.y) < 0.5\n ? [a.pt, b.pt] // already horizontal\n : Math.abs(a.pt.x - b.pt.x) < 0.5\n ? [a.pt, b.pt] // already vertical\n : [a.pt, { x: a.pt.x, y: b.pt.y }, b.pt];\n routes.push({ netId, points });\n } else {\n // 3+ pin net — spine at median Y\n const ys = pins.map((p) => p.pt.y).sort((x, y) => x - y);\n const spineY = ys[Math.floor(ys.length / 2)];\n const xs = pins.map((p) => p.pt.x).sort((x, y) => x - y);\n const spineLeft = xs[0];\n const spineRight = xs[xs.length - 1];\n // spine\n routes.push({\n netId,\n points: [\n { x: spineLeft, y: spineY },\n { x: spineRight, y: spineY },\n ],\n });\n const junctions: PinAnchor[] = [];\n for (const p of pins) {\n if (Math.abs(p.pt.y - spineY) < 0.5) {\n // already on spine\n if (p.pt.x > spineLeft && p.pt.x < spineRight) {\n junctions.push(p.pt);\n }\n continue;\n }\n routes.push({\n netId: `${netId}.${p.compId}`,\n points: [p.pt, { x: p.pt.x, y: spineY }],\n });\n if (p.pt.x > spineLeft && p.pt.x < spineRight) {\n junctions.push({ x: p.pt.x, y: spineY });\n }\n }\n if (junctions.length > 0) {\n // Attach junctions to the last spine route (share same netId entry).\n routes[routes.length - 1 - pins.filter((p) =>\n Math.abs(p.pt.y - spineY) >= 0.5\n ).length].junctions = junctions;\n }\n }\n }\n\n // ── Compute final bbox including routes ───────────────────\n for (const r of routes) {\n for (const p of r.points) extendBBox(bbox, p);\n }\n const pad = 40;\n const minX = bbox.minX - pad;\n const minY = bbox.minY - pad;\n const maxX = bbox.maxX + pad;\n const maxY = bbox.maxY + pad;\n\n return {\n width: maxX - minX,\n height: maxY - minY,\n offsetX: -minX,\n offsetY: -minY,\n items,\n routes,\n };\n}\n","import type { CircuitAST, RenderConfig } from \"../../core/types\";\nimport { layoutCircuit, type LaidOutComponent, type CircuitLayoutResult } from \"./layout\";\nimport { layoutCircuitNetlist, type RoutedWire } from \"./autolayout\";\nimport { getSymbol } from \"./symbols\";\nimport {\n svgRoot,\n defs,\n group,\n el,\n circle,\n text,\n title as titleEl,\n desc,\n escapeXml,\n} from \"../../core/svg\";\nimport { resolveIndustrialTheme } from \"../../core/theme\";\n\nfunction renderItem(it: LaidOutComponent, offX: number, offY: number): string {\n const comp = it.component;\n const tx = it.x + offX;\n const ty = it.y + offY;\n\n if (comp.componentType === \"wire\") {\n const x2 = (it.anchors.end.x) + offX;\n const y2 = (it.anchors.end.y) + offY;\n return `<line x1=\"${tx}\" y1=\"${ty}\" x2=\"${x2}\" y2=\"${y2}\" class=\"schematex-circuit-wire\"/>`;\n }\n\n if (comp.componentType === \"dot\") {\n return circle({\n cx: tx,\n cy: ty,\n r: 3.5,\n class: \"schematex-circuit-dot\",\n \"data-id\": comp.id,\n });\n }\n\n if (comp.componentType === \"label\") {\n const dir = comp.direction;\n const anchor =\n dir === \"left\" ? \"end\" : dir === \"right\" ? \"start\" : \"middle\";\n const dx = dir === \"right\" ? 6 : dir === \"left\" ? -6 : 0;\n const dy = dir === \"down\" ? 14 : dir === \"up\" ? -6 : 4;\n return text(\n {\n x: tx + dx,\n y: ty + dy,\n class: \"schematex-circuit-net-label\",\n \"text-anchor\": anchor,\n },\n comp.label ?? \"\"\n );\n }\n\n const sym = getSymbol(comp.componentType);\n if (!sym) {\n return `<rect x=\"${tx - 10}\" y=\"${ty - 10}\" width=\"20\" height=\"20\" fill=\"none\" class=\"schematex-circuit-err\" stroke-dasharray=\"3,2\"/><text x=\"${tx}\" y=\"${ty + 3}\" text-anchor=\"middle\" font-size=\"9\" class=\"schematex-circuit-err\">?${escapeXml(comp.componentType)}</text>`;\n }\n\n const body = sym.svg(comp.label, comp.value, comp.attrs);\n const transform = `translate(${tx}, ${ty}) rotate(${it.rotation})`;\n\n // Label + value text: placed in non-rotated space using unrotated anchor endpoints.\n const labels: string[] = [];\n if (comp.label || comp.value) {\n // Compute a perpendicular offset in world coords (perpendicular to the\n // component direction). For rightward: \"above\" (y negative). For\n // down/up we put label to the right.\n const labelX = it.x + offX + it.length * Math.cos((it.rotation * Math.PI) / 180) / 2;\n const labelY = it.y + offY + it.length * Math.sin((it.rotation * Math.PI) / 180) / 2;\n const perpDX = Math.sin((it.rotation * Math.PI) / 180);\n const perpDY = -Math.cos((it.rotation * Math.PI) / 180);\n const off = 16;\n if (comp.label) {\n labels.push(\n text(\n {\n x: labelX + perpDX * off,\n y: labelY + perpDY * off - 2,\n class: \"schematex-circuit-label\",\n \"text-anchor\": \"middle\",\n },\n comp.label\n )\n );\n }\n if (comp.value) {\n labels.push(\n text(\n {\n x: labelX + perpDX * off,\n y: labelY + perpDY * off + 10,\n class: \"schematex-circuit-value\",\n \"text-anchor\": \"middle\",\n },\n comp.value\n )\n );\n }\n }\n\n return (\n `<g transform=\"${transform}\" data-id=\"${escapeXml(comp.id)}\" data-type=\"${escapeXml(comp.componentType)}\">${body}</g>` +\n labels.join(\"\")\n );\n}\n\nfunction renderRoute(r: RoutedWire, offX: number, offY: number): string {\n if (r.points.length < 2) return \"\";\n const pts = r.points.map((p) => `${p.x + offX},${p.y + offY}`).join(\" \");\n const line = `<polyline points=\"${pts}\" class=\"schematex-circuit-wire\" fill=\"none\"/>`;\n const dots = (r.junctions ?? [])\n .map(\n (j) =>\n `<circle cx=\"${j.x + offX}\" cy=\"${j.y + offY}\" r=\"3.5\" class=\"schematex-circuit-dot\"/>`\n )\n .join(\"\");\n return line + dots;\n}\n\nexport function renderCircuit(ast: CircuitAST, config?: RenderConfig): string {\n const isNetlist = ast.mode === \"netlist\";\n const layout: CircuitLayoutResult & { routes?: RoutedWire[] } = isNetlist\n ? layoutCircuitNetlist(ast)\n : layoutCircuit(ast);\n const { width, height, offsetX, offsetY } = layout;\n\n const t = resolveIndustrialTheme(config?.theme ?? \"default\");\n\n // In netlist mode, routes are rendered BEFORE items so components sit on top\n // of wires (visually cleaner — symbol fills cover the wire endpoints).\n const routeSvg = (layout.routes ?? [])\n .map((r) => renderRoute(r, offsetX, offsetY))\n .join(\"\");\n const items = layout.items.map((it) => renderItem(it, offsetX, offsetY)).join(\"\");\n\n const css = `\n.schematex-circuit { background: ${t.bg}; font-family: system-ui, -apple-system, sans-serif; }\n.schematex-circuit-body { stroke: ${t.stroke}; stroke-width: 1.75; fill: none; stroke-linejoin: round; stroke-linecap: round; }\n.schematex-circuit-fill { stroke: ${t.stroke}; stroke-width: 1.5; fill: ${t.stroke}; }\n.schematex-circuit-wire { stroke: ${t.stroke}; stroke-width: 1.75; fill: none; stroke-linecap: square; }\n.schematex-circuit-dot { fill: ${t.stroke}; stroke: none; }\n.schematex-circuit-label { font: 600 11px system-ui, sans-serif; fill: ${t.text}; }\n.schematex-circuit-value { font: italic 10px system-ui, sans-serif; fill: ${t.textMuted}; }\n.schematex-circuit-net-label { font: 600 11px system-ui, sans-serif; fill: ${t.accent}; }\n.schematex-circuit-pol { font: 9px sans-serif; fill: ${t.stroke}; }\n.schematex-circuit-meter { font: bold 12px sans-serif; fill: ${t.stroke}; }\n.schematex-circuit-title { font: bold 14px sans-serif; fill: ${t.text}; }\n.schematex-circuit-err { stroke: ${t.error}; fill: ${t.error}; }\n`.trim();\n\n const titleBar = ast.title\n ? text(\n {\n x: width / 2,\n y: 18,\n \"text-anchor\": \"middle\",\n class: \"schematex-circuit-title\",\n },\n ast.title\n )\n : \"\";\n\n const topOff = ast.title ? 24 : 0;\n\n return svgRoot(\n {\n class: \"schematex-circuit\",\n viewBox: `0 0 ${Math.round(width)} ${Math.round(height + topOff)}`,\n width: Math.round(width),\n height: Math.round(height + topOff),\n role: \"img\",\n \"data-diagram-type\": \"circuit\",\n },\n [\n titleEl(ast.title ?? \"Circuit Schematic\"),\n desc(\n `Circuit schematic with ${ast.components.length} components`\n ),\n defs([el(\"style\", {}, css)]),\n titleBar,\n group({ transform: `translate(0, ${topOff})` }, [routeSvg + items]),\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseCircuit } from \"./parser\";\nimport { renderCircuit } from \"./renderer\";\n\nexport const circuit: DiagramPlugin = {\n type: \"circuit\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"circuit\");\n },\n parse: parseCircuit,\n\n render(text: string, config): string {\n const ast = parseCircuit(text);\n return renderCircuit(ast, config);\n },\n};\n\nexport { parseCircuit } from \"./parser\";\nexport { parseNetlist } from \"./netlist\";\nexport { renderCircuit } from \"./renderer\";\nexport { layoutCircuit } from \"./layout\";\nexport { layoutCircuitNetlist } from \"./autolayout\";\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkLFZZ4NCP_cjs = require('./chunk-LFZZ4NCP.cjs');
3
+ var chunk3WNW5Y7P_cjs = require('./chunk-3WNW5Y7P.cjs');
4
4
 
5
5
  // src/diagrams/timing/parser.ts
6
6
  var TimingParseError = class extends Error {
@@ -132,12 +132,12 @@ function renderWave(signal, ctx) {
132
132
  const inset = Math.min(5, (end - start) / 2);
133
133
  const d = `M ${start + inset},${yHi} L ${end - inset},${yHi} L ${end},${yMid} L ${end - inset},${yLo} L ${start + inset},${yLo} L ${start},${yMid} Z`;
134
134
  busRects.push(
135
- chunkLFZZ4NCP_cjs.el("path", { class: "schematex-timing-bus", d, "data-bus-index": String(busIndex) })
135
+ chunk3WNW5Y7P_cjs.el("path", { class: "schematex-timing-bus", d, "data-bus-index": String(busIndex) })
136
136
  );
137
137
  const label = signal.data?.[dataIdx] ?? "";
138
138
  if (label) {
139
139
  busTexts.push(
140
- chunkLFZZ4NCP_cjs.text(
140
+ chunk3WNW5Y7P_cjs.text(
141
141
  {
142
142
  x: (start + end) / 2,
143
143
  y: yMid + 4,
@@ -231,7 +231,7 @@ function renderWave(signal, ctx) {
231
231
  if (prev === "bus") closeBus(x);
232
232
  flushLine();
233
233
  zLines.push(
234
- chunkLFZZ4NCP_cjs.el("line", {
234
+ chunk3WNW5Y7P_cjs.el("line", {
235
235
  x1: x,
236
236
  y1: yMid,
237
237
  x2: xNext,
@@ -246,7 +246,7 @@ function renderWave(signal, ctx) {
246
246
  if (prev === "bus") closeBus(x);
247
247
  flushLine();
248
248
  xPatchRects.push(
249
- chunkLFZZ4NCP_cjs.el("rect", {
249
+ chunk3WNW5Y7P_cjs.el("rect", {
250
250
  x,
251
251
  y: yHi,
252
252
  width: pw,
@@ -279,7 +279,7 @@ function renderWave(signal, ctx) {
279
279
  default: {
280
280
  flushLine();
281
281
  xPatchRects.push(
282
- chunkLFZZ4NCP_cjs.el("rect", {
282
+ chunk3WNW5Y7P_cjs.el("rect", {
283
283
  x,
284
284
  y: yHi,
285
285
  width: pw,
@@ -295,7 +295,7 @@ function renderWave(signal, ctx) {
295
295
  }
296
296
  if (prev === "bus") closeBus(wave.length * pw);
297
297
  flushLine();
298
- const waveSvg = paths.map((d) => chunkLFZZ4NCP_cjs.el("path", { class: "schematex-timing-wave", d })).concat(xPatchRects, zLines, busRects).join("");
298
+ const waveSvg = paths.map((d) => chunk3WNW5Y7P_cjs.el("path", { class: "schematex-timing-wave", d })).concat(xPatchRects, zLines, busRects).join("");
299
299
  return { svg: waveSvg, labels: busTexts.join("") };
300
300
  }
301
301
  function renderTiming(ast) {
@@ -321,7 +321,7 @@ function renderTiming(ast) {
321
321
  for (let i = 0; i <= maxWaveLen; i++) {
322
322
  const xg = NAME_W + i * pw;
323
323
  gridLines.push(
324
- chunkLFZZ4NCP_cjs.el("line", {
324
+ chunk3WNW5Y7P_cjs.el("line", {
325
325
  x1: xg,
326
326
  y1: PAD_TOP,
327
327
  x2: xg,
@@ -335,7 +335,7 @@ function renderTiming(ast) {
335
335
  const ry = rowYs[i];
336
336
  if (row.kind === "group") {
337
337
  nameSvgs.push(
338
- chunkLFZZ4NCP_cjs.text(
338
+ chunk3WNW5Y7P_cjs.text(
339
339
  {
340
340
  x: 6 + row.indent * 10,
341
341
  y: ry + GROUP_LABEL_H - 6,
@@ -353,7 +353,7 @@ function renderTiming(ast) {
353
353
  const activeLow = signal.name.startsWith("~") || signal.name.startsWith("/");
354
354
  const displayName = activeLow ? signal.name.slice(1) : signal.name;
355
355
  nameSvgs.push(
356
- chunkLFZZ4NCP_cjs.text(
356
+ chunk3WNW5Y7P_cjs.text(
357
357
  {
358
358
  x: NAME_W - 8,
359
359
  y: yMid + 4,
@@ -369,7 +369,7 @@ function renderTiming(ast) {
369
369
  yLo,
370
370
  yMid});
371
371
  waveSvgs.push(
372
- chunkLFZZ4NCP_cjs.group(
372
+ chunk3WNW5Y7P_cjs.group(
373
373
  {
374
374
  transform: `translate(${NAME_W}, 0)`,
375
375
  "data-signal": signal.name
@@ -378,10 +378,10 @@ function renderTiming(ast) {
378
378
  )
379
379
  );
380
380
  labelSvgs.push(
381
- chunkLFZZ4NCP_cjs.group({ transform: `translate(${NAME_W}, 0)` }, [labels])
381
+ chunk3WNW5Y7P_cjs.group({ transform: `translate(${NAME_W}, 0)` }, [labels])
382
382
  );
383
383
  }
384
- const xhatch = chunkLFZZ4NCP_cjs.el(
384
+ const xhatch = chunk3WNW5Y7P_cjs.el(
385
385
  "pattern",
386
386
  {
387
387
  id: "schematex-timing-xhatch",
@@ -390,8 +390,8 @@ function renderTiming(ast) {
390
390
  height: 6
391
391
  },
392
392
  [
393
- chunkLFZZ4NCP_cjs.el("rect", { x: 0, y: 0, width: 6, height: 6, fill: "#f5f5f5" }),
394
- chunkLFZZ4NCP_cjs.el("path", {
393
+ chunk3WNW5Y7P_cjs.el("rect", { x: 0, y: 0, width: 6, height: 6, fill: "#f5f5f5" }),
394
+ chunk3WNW5Y7P_cjs.el("path", {
395
395
  d: "M 0,6 L 6,0 M -1,1 L 1,-1 M 5,7 L 7,5",
396
396
  stroke: "#999",
397
397
  "stroke-width": 0.8
@@ -410,7 +410,7 @@ function renderTiming(ast) {
410
410
  .schematex-timing-hiz { stroke: #555; stroke-width: 1.5; stroke-dasharray: 4 3; }
411
411
  .schematex-timing-grid { stroke: #eee; stroke-width: 0.5; }
412
412
  `.trim();
413
- return chunkLFZZ4NCP_cjs.svgRoot(
413
+ return chunk3WNW5Y7P_cjs.svgRoot(
414
414
  {
415
415
  class: "schematex-timing",
416
416
  viewBox: `0 0 ${width} ${height}`,
@@ -420,14 +420,14 @@ function renderTiming(ast) {
420
420
  "data-diagram-type": "timing"
421
421
  },
422
422
  [
423
- chunkLFZZ4NCP_cjs.title(ast.title ?? "Timing Diagram"),
424
- chunkLFZZ4NCP_cjs.desc(`Digital timing diagram with ${rows.filter((r) => r.kind === "signal").length} signals`),
425
- chunkLFZZ4NCP_cjs.defs([xhatch, chunkLFZZ4NCP_cjs.el("style", {}, css)]),
426
- chunkLFZZ4NCP_cjs.group({ class: "schematex-timing-grid-g" }, gridLines),
427
- chunkLFZZ4NCP_cjs.group({ class: "schematex-timing-waves" }, waveSvgs),
428
- chunkLFZZ4NCP_cjs.group({ class: "schematex-timing-labels" }, labelSvgs),
429
- chunkLFZZ4NCP_cjs.group({ class: "schematex-timing-names" }, nameSvgs),
430
- ast.title ? chunkLFZZ4NCP_cjs.text(
423
+ chunk3WNW5Y7P_cjs.title(ast.title ?? "Timing Diagram"),
424
+ chunk3WNW5Y7P_cjs.desc(`Digital timing diagram with ${rows.filter((r) => r.kind === "signal").length} signals`),
425
+ chunk3WNW5Y7P_cjs.defs([xhatch, chunk3WNW5Y7P_cjs.el("style", {}, css)]),
426
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-timing-grid-g" }, gridLines),
427
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-timing-waves" }, waveSvgs),
428
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-timing-labels" }, labelSvgs),
429
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-timing-names" }, nameSvgs),
430
+ ast.title ? chunk3WNW5Y7P_cjs.text(
431
431
  {
432
432
  x: width / 2,
433
433
  y: 14,
@@ -458,5 +458,5 @@ var timing = {
458
458
  exports.parseTiming = parseTiming;
459
459
  exports.renderTiming = renderTiming;
460
460
  exports.timing = timing;
461
- //# sourceMappingURL=chunk-K5QG53GT.cjs.map
462
- //# sourceMappingURL=chunk-K5QG53GT.cjs.map
461
+ //# sourceMappingURL=chunk-ZCW7YH3C.cjs.map
462
+ //# sourceMappingURL=chunk-ZCW7YH3C.cjs.map