@sjcrh/proteinpaint-client 2.224.2 → 2.225.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (970) hide show
  1. package/dist/2dmaf-4W2R2HXG.js +1362 -0
  2. package/dist/AggMatrixInput-3SQ7UW5L.js +402 -0
  3. package/dist/AggregateMatrix-QI55DXDU.js +37 -0
  4. package/dist/AppHeader-C26OHIUQ.js +826 -0
  5. package/dist/BoxPlot-27OYBGJ3.js +1247 -0
  6. package/dist/CorrelationVolcano-XIMXCSHG.js +613 -0
  7. package/dist/Cuminc-737O733E.js +1217 -0
  8. package/dist/DE-EDTGDY6L.js +85 -0
  9. package/dist/DEinput-ZN76I5M5.js +479 -0
  10. package/dist/DM-25IRANGL.js +86 -0
  11. package/dist/DifferentialAnalysis-7HQYEA5T.js +236 -0
  12. package/dist/Disco-4YNXWGRX.js +3445 -0
  13. package/dist/Disco-4YNXWGRX.js.map +7 -0
  14. package/dist/Disco.UI-67HBGS4Y.js +239 -0
  15. package/dist/DmrPlot-KZVDVPUT.js +366 -0
  16. package/dist/DmrPlot-KZVDVPUT.js.map +7 -0
  17. package/dist/GB-HT3B7Y7R.js +1388 -0
  18. package/dist/GSEA-CMFMNK5Y.js +870 -0
  19. package/dist/GeneExpInput-HMGV23E7.js +38 -0
  20. package/dist/Geomap-RB4SGVPC.js +80 -0
  21. package/dist/HicApp-YRP6YQFA.js +2240 -0
  22. package/dist/IDCViewer-OUSOZNSR.js +10810 -0
  23. package/dist/NumBinaryEditor-YFQDPBB6.js +274 -0
  24. package/dist/NumBinaryEditor.unit.spec-6YC5PCPK.js +308 -0
  25. package/dist/NumContEditor-EH6MA2RW.js +100 -0
  26. package/dist/NumContEditor.unit.spec-Q2JBVIRT.js +160 -0
  27. package/dist/NumCustomBinEditor-USQA3BC6.js +29 -0
  28. package/dist/NumCustomBinEditor.unit.spec-PE2HFRCK.js +393 -0
  29. package/dist/NumDiscreteEditor-VKE4WT24.js +165 -0
  30. package/dist/NumDiscreteEditor.unit.spec-JNG673LE.js +229 -0
  31. package/dist/NumRegularBinEditor-KCCPGJSX.js +29 -0
  32. package/dist/NumRegularBinEditor.unit.spec-4BLKQRZU.js +274 -0
  33. package/dist/NumSplineEditor-4YELHGUO.js +205 -0
  34. package/dist/NumSplineEditor.unit.spec-CKHHK6GH.js +220 -0
  35. package/dist/NumericDensity-LCFM7VSY.js +29 -0
  36. package/dist/NumericDensity.unit.spec-R4ARTJ5I.js +414 -0
  37. package/dist/NumericHandler-2OHRSY6Z.js +30 -0
  38. package/dist/NumericHandler.unit.spec-M3TRIFZW.js +225 -0
  39. package/dist/ProteomeInput-G2EP6QH2.js +610 -0
  40. package/dist/Regression-2HKE6C7F.js +1412 -0
  41. package/dist/RunChart2-WRVW63PB.js +744 -0
  42. package/dist/SC-37RDNFGH.js +1290 -0
  43. package/dist/Violin-KD6FPWC7.js +1105 -0
  44. package/dist/Violin-KD6FPWC7.js.map +7 -0
  45. package/dist/Volcano-U62TCDEL.js +2748 -0
  46. package/dist/Volcano-U62TCDEL.js.map +7 -0
  47. package/dist/Wsi-PB77PVAA.js +637 -0
  48. package/dist/aboutSunburst-5Z24ODIN.js +93 -0
  49. package/dist/adSandbox-AFORHU3V.js +29 -0
  50. package/dist/animatedBubbleChart-F75OBRZW.js +542 -0
  51. package/dist/app-4RZ76DZZ.js +28 -0
  52. package/dist/app-IHE3RNI5.js +38 -0
  53. package/dist/app.js +14 -14
  54. package/dist/bam-IIRZX3IK.js +872 -0
  55. package/dist/barchart-UIHRIMOE.js +38 -0
  56. package/dist/barchart2-DG3S6FDJ.js +305 -0
  57. package/dist/block-COZKGPXY.js +6203 -0
  58. package/dist/block.init-UBXYVTPQ.js +29 -0
  59. package/dist/block.mds.expressionrank-KSXPPPGR.js +350 -0
  60. package/dist/block.mds.geneboxplot-5RDFDVDE.js +819 -0
  61. package/dist/block.mds.junction-LMM24KXJ.js +1534 -0
  62. package/dist/block.mds.svcnv-4XRXZMPS.js +6325 -0
  63. package/dist/block.svg-VAKLMPMS.js +155 -0
  64. package/dist/block.tk.aicheck-6GHZK2YY.js +274 -0
  65. package/dist/block.tk.bam-7H3BSHR2.js +1906 -0
  66. package/dist/block.tk.bigwig.ui-KX2GACY5.js +202 -0
  67. package/dist/block.tk.hicstraw-OOWEWGMF.js +814 -0
  68. package/dist/block.tk.junction-U7W36OZA.js +2353 -0
  69. package/dist/block.tk.junction.textmatrixui-PAMSBYZT.js +190 -0
  70. package/dist/block.tk.ld-RFQPDG7Q.js +90 -0
  71. package/dist/block.tk.menu-JDJU2OGK.js +1050 -0
  72. package/dist/block.tk.pgv-G2UFCQUT.js +934 -0
  73. package/dist/brainImaging-ASAHWZJH.js +550 -0
  74. package/dist/brainRegions-XTJDLUU4.js +213 -0
  75. package/dist/bubbleHeatmap-UPUITTU6.js +374 -0
  76. package/dist/cellTypeBubbleHeatmap-25SOXC2Q.js +274 -0
  77. package/dist/chunk-2N345NXD.js +5790 -0
  78. package/dist/chunk-2N345NXD.js.map +7 -0
  79. package/dist/chunk-2ZYAC3DC.js +299 -0
  80. package/dist/chunk-325X3T7G.js +692 -0
  81. package/dist/chunk-3UXHTSZJ.js +159 -0
  82. package/dist/chunk-4DFKK46J.js +96 -0
  83. package/dist/chunk-54W2RWRB.js +123 -0
  84. package/dist/chunk-5QGC2624.js +54 -0
  85. package/dist/chunk-5YKXYWP3.js +480 -0
  86. package/dist/chunk-6B4AME6E.js +4389 -0
  87. package/dist/chunk-6H4FFHFQ.js +82 -0
  88. package/dist/chunk-6PVVV3UW.js +37 -0
  89. package/dist/chunk-72QBXULB.js +102 -0
  90. package/dist/chunk-7APH7QLC.js +141 -0
  91. package/dist/chunk-7HBAALWJ.js +2685 -0
  92. package/dist/chunk-7UK7CU4F.js +398 -0
  93. package/dist/chunk-7ZTUUKLX.js +203 -0
  94. package/dist/chunk-A7GCFL3R.js +30 -0
  95. package/dist/chunk-AGWIWLOP.js +14 -0
  96. package/dist/chunk-CHQ43UJQ.js +397 -0
  97. package/dist/chunk-CQWR4QZO.js +70 -0
  98. package/dist/chunk-D6TLBMIX.js +1339 -0
  99. package/dist/chunk-DDABG5BR.js +328 -0
  100. package/dist/chunk-DDABG5BR.js.map +7 -0
  101. package/dist/chunk-DOC3HBOV.js +119 -0
  102. package/dist/chunk-DR5JLHTB.js +35 -0
  103. package/dist/chunk-E2Z4X6C2.js +55 -0
  104. package/dist/chunk-E4WAVMI5.js +194 -0
  105. package/dist/chunk-EM76Y3HQ.js +1253 -0
  106. package/dist/chunk-ES7XNERS.js +468 -0
  107. package/dist/chunk-F2RTD23W.js +848 -0
  108. package/dist/chunk-FEE2HAON.js +418 -0
  109. package/dist/chunk-FIWVGOSE.js +54 -0
  110. package/dist/chunk-FT5HOBHJ.js +31 -0
  111. package/dist/chunk-G5BQJGRA.js +2799 -0
  112. package/dist/chunk-GAYYXHOG.js +257 -0
  113. package/dist/chunk-GDIKNIEA.js +263 -0
  114. package/dist/chunk-GIZTZCE5.js +195 -0
  115. package/dist/chunk-GONC3LVY.js +626 -0
  116. package/dist/chunk-HGC4EON3.js +348 -0
  117. package/dist/chunk-HM23KADV.js +281 -0
  118. package/dist/chunk-I7R6YROK.js +267 -0
  119. package/dist/chunk-I7R6YROK.js.map +7 -0
  120. package/dist/chunk-JWX6GEWQ.js +276 -0
  121. package/dist/chunk-K4LZR3HU.js +56 -0
  122. package/dist/chunk-K55KOEI6.js +6375 -0
  123. package/dist/chunk-K7YJILBY.js +5254 -0
  124. package/dist/chunk-K7YJILBY.js.map +7 -0
  125. package/dist/chunk-KLJM7HE5.js +2349 -0
  126. package/dist/chunk-LFH5VSSF.js +176 -0
  127. package/dist/chunk-LVFWXUUX.js +34 -0
  128. package/dist/chunk-LVFWXUUX.js.map +7 -0
  129. package/dist/chunk-MBWG3QHI.js +1219 -0
  130. package/dist/chunk-MZTVOOR6.js +56 -0
  131. package/dist/chunk-N2JOZ3QD.js +444 -0
  132. package/dist/chunk-NG2U3VHX.js +170 -0
  133. package/dist/chunk-NUGYNLTL.js +2334 -0
  134. package/dist/chunk-OCOB7XJW.js +2008 -0
  135. package/dist/chunk-OGDBTL5C.js +54 -0
  136. package/dist/chunk-OOVVKQSD.js +26747 -0
  137. package/dist/chunk-OOVVKQSD.js.map +7 -0
  138. package/dist/chunk-OVXHMJJJ.js +59 -0
  139. package/dist/chunk-PAF5KZCR.js +2932 -0
  140. package/dist/chunk-PI2MCZXG.js +140 -0
  141. package/dist/chunk-PPICALUF.js +2102 -0
  142. package/dist/chunk-QFOT5WAZ.js +134 -0
  143. package/dist/chunk-QFQJO7LD.js +472 -0
  144. package/dist/chunk-QFQJO7LD.js.map +7 -0
  145. package/dist/chunk-QGCB5AKN.js +243 -0
  146. package/dist/chunk-QRZRAMHA.js +184 -0
  147. package/dist/chunk-RGOZHZCN.js +103 -0
  148. package/dist/chunk-RJKY22D4.js +240 -0
  149. package/dist/chunk-RZ2HG7G3.js +102 -0
  150. package/dist/chunk-SI2KSG6E.js +379 -0
  151. package/dist/chunk-U4PLKSSS.js +50 -0
  152. package/dist/chunk-U7G65D2G.js +466 -0
  153. package/dist/chunk-UU3FWU6D.js +305 -0
  154. package/dist/chunk-UXLT7W2N.js +562 -0
  155. package/dist/chunk-VHQDN3OA.js +182 -0
  156. package/dist/chunk-VTMNHAFC.js +30 -0
  157. package/dist/chunk-W3K7KLIR.js +217 -0
  158. package/dist/chunk-WSLS55SH.js +296 -0
  159. package/dist/chunk-WUCIHN7D.js +382 -0
  160. package/dist/chunk-XQIB27PB.js +516 -0
  161. package/dist/chunk-XSBGICK5.js +652 -0
  162. package/dist/chunk-YHW2RAAG.js +274 -0
  163. package/dist/chunk-Z7CCL464.js +550 -0
  164. package/dist/chunk-ZBNPXXMK.js +42 -0
  165. package/dist/chunk-ZNHC46CT.js +340 -0
  166. package/dist/chunk-ZSTD6Y3K.js +255 -0
  167. package/dist/chunk-ZSTD6Y3K.js.map +7 -0
  168. package/dist/cohort-ZFGFEEBD.js +66 -0
  169. package/dist/cohortSunburst-EEPGV2RB.js +402 -0
  170. package/dist/condition-7EWFLQSO.js +323 -0
  171. package/dist/controls-QHDSDWKI.js +30 -0
  172. package/dist/controls.config-LBSCZ6GP.js +30 -0
  173. package/dist/correlation-IJQJPNNP.js +91 -0
  174. package/dist/customdata.inputui-TZGX2CUD.js +280 -0
  175. package/dist/dataDownload-33EWD3AD.js +326 -0
  176. package/dist/databrowser.ui-YNKDTAAN.js +424 -0
  177. package/dist/dictionary-OTR6Z5EZ.js +109 -0
  178. package/dist/dnaMethylation-LQTCTOOE.js +29 -0
  179. package/dist/dnaMethylation.integration.spec-U5VQYAK3.js +194 -0
  180. package/dist/dofetch-HLG7G7RX.js +49 -0
  181. package/dist/e2pca-AXDPYR7U.js +340 -0
  182. package/dist/ep-4WK46CH7.js +1247 -0
  183. package/dist/expclust.gdc.spec-CYGWGREQ.js +298 -0
  184. package/dist/facet-IZSSZDHK.js +556 -0
  185. package/dist/gb-AUZBUZFM.js +77 -0
  186. package/dist/geneExpClustering-AQBFLXLP.js +240 -0
  187. package/dist/geneExpression-HDJVPVPK.js +309 -0
  188. package/dist/geneExpression-V4JMTMLI.js +29 -0
  189. package/dist/geneExpression.unit.spec-KFMSDVMX.js +151 -0
  190. package/dist/geneORA-LDFFSEMQ.js +269 -0
  191. package/dist/geneRanking-IVKDSNDV.js +544 -0
  192. package/dist/geneVariant-7X7EEUDW.js +289 -0
  193. package/dist/geneVariant-TK3FJ22L.js +32 -0
  194. package/dist/geneVariant.integration.spec-ZHAFWQ2O.js +672 -0
  195. package/dist/genefusion.ui-U5YPVXAF.js +299 -0
  196. package/dist/geneset-NSHQ2NDR.js +199 -0
  197. package/dist/genomeBrowser.spec-HP4OQPCV.js +272 -0
  198. package/dist/grin2-5WKONQPG.js +66 -0
  199. package/dist/grin2-V2ZBOJBO.js +945 -0
  200. package/dist/hierCluster-7IOPNYFN.js +55 -0
  201. package/dist/hierCluster-IDBCUKHJ.js +51 -0
  202. package/dist/hierCluster.config-Z4NRL5P5.js +32 -0
  203. package/dist/hierCluster.integration.spec-PHEXOGPI.js +479 -0
  204. package/dist/hierCluster.interactivity-NHZ5EPBV.js +45 -0
  205. package/dist/hierCluster.renderers-WXJUMDFN.js +18 -0
  206. package/dist/imagePlot-NMNCAYS7.js +152 -0
  207. package/dist/importPlot-HZML5XMJ.js +8 -0
  208. package/dist/isoformExpression-4IU4AUQ2.js +31 -0
  209. package/dist/isoformExpression.unit.spec-KKMKU5Z2.js +233 -0
  210. package/dist/junction-EXA2WANI.js +32 -0
  211. package/dist/junction.customTerm-LQYKCZX4.js +15 -0
  212. package/dist/junction.unit.spec-H3FGTLEP.js +178 -0
  213. package/dist/launch.adhoc-YA6FRHSC.js +33 -0
  214. package/dist/leftlabel.sample-N6M4OL2X.js +254 -0
  215. package/dist/leftlabel.sample-N6M4OL2X.js.map +7 -0
  216. package/dist/lollipop-EWLGYDIR.js +162 -0
  217. package/dist/maf-PXMHR3PY.js +451 -0
  218. package/dist/maftimeline-QFKT7PW2.js +583 -0
  219. package/dist/matrix-KASG3KIY.js +55 -0
  220. package/dist/matrix-VSX63V3L.js +50 -0
  221. package/dist/matrix.cells-7TTOQRWU.js +25 -0
  222. package/dist/matrix.config-U3I726EC.js +33 -0
  223. package/dist/matrix.data-Y4DXSR2P.js +22 -0
  224. package/dist/matrix.groups-C5CHYWQZ.js +25 -0
  225. package/dist/matrix.integration.spec-4KWLFXMY.js +3156 -0
  226. package/dist/matrix.interactivity-JK6URU6Z.js +33 -0
  227. package/dist/matrix.layout-KKOA7GGL.js +35 -0
  228. package/dist/matrix.legend-3FFHXTLX.js +19 -0
  229. package/dist/matrix.renderers-F7EWYQWL.js +30 -0
  230. package/dist/matrix.serieses-I4JWWONC.js +18 -0
  231. package/dist/matrix.sort-5JTCLBPB.js +25 -0
  232. package/dist/matrix.sort.unit.spec-EW53F5DT.js +464 -0
  233. package/dist/matrix.sorterUi-Z4JDY7VW.js +15 -0
  234. package/dist/matrix.sorterUi.unit.spec-OGTYY6GC.js +334 -0
  235. package/dist/matrix.unit.spec-RXKKHRUN.js +146 -0
  236. package/dist/mavb-YI2WEGFI.js +726 -0
  237. package/dist/mds.samplescatterplot-GGJE67MF.js +1545 -0
  238. package/dist/mds.survivalplot-A6DS6FHO.js +472 -0
  239. package/dist/multivalue-3WCYDVL3.js +79 -0
  240. package/dist/numericDictTermCluster-AOTEPNEI.js +62 -0
  241. package/dist/oncomatrix-BB4SB5AJ.js +286 -0
  242. package/dist/oncomatrix.spec-M4ZC3KFC.js +439 -0
  243. package/dist/plot.2dvaf-QUD743E6.js +368 -0
  244. package/dist/plot.app-35I4DJXK.js +32 -0
  245. package/dist/plot.barplot-7OL4HWZB.js +93 -0
  246. package/dist/plot.boxplot-N2VSPDYA.js +142 -0
  247. package/dist/plot.brainImaging-4PIAFROV.js +51 -0
  248. package/dist/plot.disco-6CFYMWU3.js +100 -0
  249. package/dist/plot.disco-6CFYMWU3.js.map +7 -0
  250. package/dist/plot.ssgq-MGUBQNWE.js +130 -0
  251. package/dist/plot.vaf2cov-KVI2GMG4.js +249 -0
  252. package/dist/polar2-IGAOHGPE.js +228 -0
  253. package/dist/profileForms-MW7JQURG.js +937 -0
  254. package/dist/profilePlot-OVOSFR47.js +45 -0
  255. package/dist/proteinView-LFP5YYMK.js +1346 -0
  256. package/dist/proteomeCohortCompare-ONYL2UN4.js +866 -0
  257. package/dist/proteomeCohortCompare-ONYL2UN4.js.map +7 -0
  258. package/dist/pseudbulk.unit.spec-CGV4JTEK.js +82 -0
  259. package/dist/pseudobulk-WFCQX5KR.js +31 -0
  260. package/dist/qualitative-4SLUE6BW.js +241 -0
  261. package/dist/qualitative-6H674T7D.js +34 -0
  262. package/dist/radar2-QXHO2MQA.js +323 -0
  263. package/dist/radarFacility2-JCVOYMH4.js +331 -0
  264. package/dist/rememberedGvQ.unit.spec-Q3UZJPE2.js +210 -0
  265. package/dist/render-IIFS3Y2N.js +29 -0
  266. package/dist/report-NFBB3PUI.js +213 -0
  267. package/dist/sampleView-XQXKIPC7.js +39 -0
  268. package/dist/samplelst-RIC5E2W4.js +114 -0
  269. package/dist/samplematrix-WLCFCPBR.js +2188 -0
  270. package/dist/sc-TXRF7D6F.js +77 -0
  271. package/dist/scatter-JUGGPR4B.js +919 -0
  272. package/dist/scatter-YQ47446T.js +84 -0
  273. package/dist/selectGenomeWithTklst-2ELB6HQK.js +125 -0
  274. package/dist/singleCellCellType-DUTH4SZF.js +29 -0
  275. package/dist/singleCellCellType.unit.spec-PWP6I5PZ.js +150 -0
  276. package/dist/singleCellGeneExpression-3563T7GE.js +29 -0
  277. package/dist/singleCellGeneExpression.unit.spec-66IDCFJC.js +144 -0
  278. package/dist/singleCellNumericValue-XVQTKLTS.js +29 -0
  279. package/dist/singleCellNumericValue.unit.spec-LJSTGKNS.js +412 -0
  280. package/dist/singleCellPlot-MKYJJXSG.js +44 -0
  281. package/dist/singlecell-ANCWPAAO.js +1562 -0
  282. package/dist/singlecell-KMRVFOC5.js +77 -0
  283. package/dist/snp-B5UHGWVD.js +29 -0
  284. package/dist/snp.unit.spec-YAHITASM.js +167 -0
  285. package/dist/snplocus-MLGICRGT.js +200 -0
  286. package/dist/snplst-DZPIQEKI.js +36 -0
  287. package/dist/spliceevent.a53ss.diagram-4NYPSFC2.js +142 -0
  288. package/dist/spliceevent.exonskip.diagram-WLLTP7NP.js +274 -0
  289. package/dist/spliceevent.noeventdiagram-NOSO752Y.js +451 -0
  290. package/dist/ssGSEA-4DVY6Z5U.js +29 -0
  291. package/dist/ssGSEA.unit.spec-UDXV4Q7S.js +79 -0
  292. package/dist/stattable-T5X76Q32.js +112 -0
  293. package/dist/studyCatalog-O3EPBJPW.js +457 -0
  294. package/dist/summarizeCnvGeneexp-ST36TPEJ.js +154 -0
  295. package/dist/summarizeGeneexpSurvival-AZOFCBMT.js +101 -0
  296. package/dist/summarizeMutationCnv-HRCW6BYV.js +155 -0
  297. package/dist/summarizeMutationDiagnosis-RQQO2MOR.js +31 -0
  298. package/dist/summarizeMutationSurvival-UHSUJ7FU.js +95 -0
  299. package/dist/summary-ZMM5ET67.js +40 -0
  300. package/dist/summary.integration.spec-GW5UGDDU.js +405 -0
  301. package/dist/summaryInput-ZO5TPARQ.js +238 -0
  302. package/dist/sunburst-6VJS2SUY.js +34 -0
  303. package/dist/sunburst-LXRG2SFE.js +274 -0
  304. package/dist/survival-QXHY7JRR.js +49 -0
  305. package/dist/survival-U6J6KFN2.js +1248 -0
  306. package/dist/survival.integration.spec-HN3LL6IY.js +609 -0
  307. package/dist/svgraph-CVI27CTM.js +1377 -0
  308. package/dist/svmr-GZHAP5IV.js +3834 -0
  309. package/dist/swimmer-M4JGBO72.js +993 -0
  310. package/dist/table-QO22C2ER.js +192 -0
  311. package/dist/termCollection-EN73BZV5.js +247 -0
  312. package/dist/termCollection-KWNFLRWJ.js +29 -0
  313. package/dist/termCollection.unit.spec-Z27AZUE6.js +295 -0
  314. package/dist/termCollectionFractionSelection-Q7QFEPKA.js +38 -0
  315. package/dist/termCollectionFractionSelection.unit.spec-PYLIFZN5.js +184 -0
  316. package/dist/tk-BISILMKL.js +1198 -0
  317. package/dist/tk-BISILMKL.js.map +7 -0
  318. package/dist/tk-WVEDS5OU.js +38 -0
  319. package/dist/tp.ui-CG36YXBY.js +1453 -0
  320. package/dist/tvs.categorical-GCJISWBS.js +28 -0
  321. package/dist/tvs.condition-YTCVMB3I.js +160 -0
  322. package/dist/tvs.dt-UCSZ5S44.js +34 -0
  323. package/dist/tvs.dtcnv.categorical-KYB6XPL3.js +31 -0
  324. package/dist/tvs.dtcnv.continuous-MJWJNMKJ.js +72 -0
  325. package/dist/tvs.dtfusion-IZCEMTH5.js +31 -0
  326. package/dist/tvs.dtitd-DZ4WWGNO.js +31 -0
  327. package/dist/tvs.dtsnvindel-PMJCV4E7.js +31 -0
  328. package/dist/tvs.dtsv-5K2RNWDH.js +31 -0
  329. package/dist/tvs.multivalue-6NSC6JPR.js +84 -0
  330. package/dist/tvs.numeric-7U2NDY4A.js +32 -0
  331. package/dist/tvs.samplelst-3SIYTFWZ.js +95 -0
  332. package/dist/tvs.survival-Q3F5SLBW.js +110 -0
  333. package/dist/tvs.termCollection-OR73LBNX.js +118 -0
  334. package/dist/vocabulary-RWRAQ4VJ.js +32 -0
  335. package/dist/wsi.direct-HABLR3IF.js +11515 -0
  336. package/package.json +3 -3
  337. package/dist/2dmaf-OWA6REJ5.js +0 -1362
  338. package/dist/AggMatrixInput-5GC33U5A.js +0 -402
  339. package/dist/AggregateMatrix-CMJFO53B.js +0 -37
  340. package/dist/AppHeader-KJCXF35P.js +0 -826
  341. package/dist/BoxPlot-NZTO6CLZ.js +0 -1247
  342. package/dist/CorrelationVolcano-GHTPFM2V.js +0 -613
  343. package/dist/Cuminc-HHBYFFFM.js +0 -1217
  344. package/dist/DE-VVKIMVXD.js +0 -85
  345. package/dist/DEinput-F7HSM2SO.js +0 -479
  346. package/dist/DM-UBCIWZEY.js +0 -86
  347. package/dist/DifferentialAnalysis-UUXXMOQS.js +0 -236
  348. package/dist/Disco-NHXU7LG7.js +0 -3384
  349. package/dist/Disco-NHXU7LG7.js.map +0 -7
  350. package/dist/Disco.UI-GSSSK4YJ.js +0 -239
  351. package/dist/DmrPlot-QFSU62PY.js +0 -344
  352. package/dist/DmrPlot-QFSU62PY.js.map +0 -7
  353. package/dist/GB-CIQGJBJP.js +0 -1388
  354. package/dist/GSEA-3GVFEJTX.js +0 -870
  355. package/dist/GeneExpInput-CFU3Q7FM.js +0 -38
  356. package/dist/Geomap-NMVFA77Q.js +0 -80
  357. package/dist/HicApp-4FCGUUJD.js +0 -2240
  358. package/dist/IDCViewer-WFB6AXHD.js +0 -10810
  359. package/dist/NumBinaryEditor-4WUDJRSU.js +0 -274
  360. package/dist/NumBinaryEditor.unit.spec-MV53GTGQ.js +0 -308
  361. package/dist/NumContEditor-U4R6HPDM.js +0 -100
  362. package/dist/NumContEditor.unit.spec-J4ANPBSF.js +0 -160
  363. package/dist/NumCustomBinEditor-QRGDNFP4.js +0 -29
  364. package/dist/NumCustomBinEditor.unit.spec-PPF233FW.js +0 -393
  365. package/dist/NumDiscreteEditor-LNK4KHSL.js +0 -165
  366. package/dist/NumDiscreteEditor.unit.spec-QY6O62JU.js +0 -229
  367. package/dist/NumRegularBinEditor-XTINNM5L.js +0 -29
  368. package/dist/NumRegularBinEditor.unit.spec-FSLARHOC.js +0 -274
  369. package/dist/NumSplineEditor-YSQTKBFA.js +0 -205
  370. package/dist/NumSplineEditor.unit.spec-QNITPY7R.js +0 -220
  371. package/dist/NumericDensity-J5WS74JZ.js +0 -29
  372. package/dist/NumericDensity.unit.spec-4WQWLSSJ.js +0 -414
  373. package/dist/NumericHandler-ZEWC25U2.js +0 -30
  374. package/dist/NumericHandler.unit.spec-A3G5FWGV.js +0 -225
  375. package/dist/ProteomeInput-7DXGQIOO.js +0 -610
  376. package/dist/Regression-VQ5MC6KW.js +0 -1412
  377. package/dist/RunChart2-B33CQUXH.js +0 -744
  378. package/dist/SC-LEVWXS4P.js +0 -1290
  379. package/dist/Violin-L43OHY63.js +0 -1105
  380. package/dist/Violin-L43OHY63.js.map +0 -7
  381. package/dist/Volcano-NTXVM3UR.js +0 -2657
  382. package/dist/Volcano-NTXVM3UR.js.map +0 -7
  383. package/dist/Wsi-VPF6RX3B.js +0 -637
  384. package/dist/aboutSunburst-NGH3V74S.js +0 -93
  385. package/dist/adSandbox-VOAL4P5A.js +0 -29
  386. package/dist/animatedBubbleChart-HKOGYPSS.js +0 -542
  387. package/dist/app-AZLUP2BA.js +0 -28
  388. package/dist/app-JJPKGBEV.js +0 -38
  389. package/dist/bam-GIZSH2MF.js +0 -872
  390. package/dist/barchart-CVTXLIIQ.js +0 -38
  391. package/dist/barchart2-XYC6WITL.js +0 -305
  392. package/dist/block-DXRSU62C.js +0 -6203
  393. package/dist/block.init-U4Y6ROG4.js +0 -29
  394. package/dist/block.mds.expressionrank-BB26LVTM.js +0 -350
  395. package/dist/block.mds.geneboxplot-VVKEU3SL.js +0 -819
  396. package/dist/block.mds.junction-XUZX6EAQ.js +0 -1534
  397. package/dist/block.mds.svcnv-WDSACPWG.js +0 -6325
  398. package/dist/block.svg-T5BA7VLS.js +0 -155
  399. package/dist/block.tk.aicheck-3VN2RDPD.js +0 -274
  400. package/dist/block.tk.bam-5XZ3N4Y7.js +0 -1906
  401. package/dist/block.tk.bigwig.ui-JODVOS4R.js +0 -202
  402. package/dist/block.tk.hicstraw-AFNWJ2YP.js +0 -814
  403. package/dist/block.tk.junction-T2G6XEVS.js +0 -2353
  404. package/dist/block.tk.junction.textmatrixui-FL5MZH7K.js +0 -190
  405. package/dist/block.tk.ld-JKBXDOB5.js +0 -90
  406. package/dist/block.tk.menu-2X4BN7BN.js +0 -1050
  407. package/dist/block.tk.pgv-ASUVEGQF.js +0 -934
  408. package/dist/brainImaging-27442GMQ.js +0 -550
  409. package/dist/brainRegions-3367RQCU.js +0 -213
  410. package/dist/bubbleHeatmap-IOVS6SHX.js +0 -374
  411. package/dist/cellTypeBubbleHeatmap-7XJP6B5W.js +0 -274
  412. package/dist/chunk-2CTAWHGB.js +0 -56
  413. package/dist/chunk-2ESAB2PP.js +0 -848
  414. package/dist/chunk-2GP3LH7J.js +0 -194
  415. package/dist/chunk-2UGYE6EJ.js +0 -54
  416. package/dist/chunk-3TJBSAIO.js +0 -170
  417. package/dist/chunk-46KQE4DV.js +0 -418
  418. package/dist/chunk-4ICGMPPE.js +0 -56
  419. package/dist/chunk-4RQTQDHF.js +0 -5214
  420. package/dist/chunk-4RQTQDHF.js.map +0 -7
  421. package/dist/chunk-5FD6NRGE.js +0 -472
  422. package/dist/chunk-5FD6NRGE.js.map +0 -7
  423. package/dist/chunk-5JBOGNSG.js +0 -159
  424. package/dist/chunk-5OWPH4IH.js +0 -626
  425. package/dist/chunk-63TCOVAK.js +0 -30
  426. package/dist/chunk-7ONTCJWB.js +0 -1219
  427. package/dist/chunk-7Q4KAFCS.js +0 -281
  428. package/dist/chunk-7UXV4IX5.js +0 -102
  429. package/dist/chunk-7ZCYC2DQ.js +0 -70
  430. package/dist/chunk-AQSZLUDV.js +0 -184
  431. package/dist/chunk-BBA5MAFS.js +0 -240
  432. package/dist/chunk-BNJC6OX5.js +0 -2102
  433. package/dist/chunk-BOQYGAYA.js +0 -119
  434. package/dist/chunk-C4YACFGH.js +0 -692
  435. package/dist/chunk-CKO54XWB.js +0 -54
  436. package/dist/chunk-COWLQ74R.js +0 -82
  437. package/dist/chunk-CU434U4N.js +0 -35
  438. package/dist/chunk-CZOJUH3C.js +0 -30
  439. package/dist/chunk-D22DJFFZ.js +0 -254
  440. package/dist/chunk-D22DJFFZ.js.map +0 -7
  441. package/dist/chunk-D2YPS46O.js +0 -266
  442. package/dist/chunk-D2YPS46O.js.map +0 -7
  443. package/dist/chunk-DVSTBGZT.js +0 -182
  444. package/dist/chunk-EIO6DMIQ.js +0 -31
  445. package/dist/chunk-EM56Y4X6.js +0 -2685
  446. package/dist/chunk-F6CYUMSM.js +0 -37
  447. package/dist/chunk-FUTHP5J4.js +0 -274
  448. package/dist/chunk-G5GFCBJT.js +0 -217
  449. package/dist/chunk-GOL6A746.js +0 -96
  450. package/dist/chunk-GVLXSPTN.js +0 -141
  451. package/dist/chunk-HNU4RYI5.js +0 -203
  452. package/dist/chunk-HTIZFNBC.js +0 -4389
  453. package/dist/chunk-HUF5BTO6.js +0 -562
  454. package/dist/chunk-HWP3U2VY.js +0 -382
  455. package/dist/chunk-JEXS72M5.js +0 -550
  456. package/dist/chunk-JNIYPQWY.js +0 -176
  457. package/dist/chunk-K5RCZIZN.js +0 -2799
  458. package/dist/chunk-KA3KYNOP.js +0 -195
  459. package/dist/chunk-KGFH5VTH.js +0 -444
  460. package/dist/chunk-KTRDLHCP.js +0 -397
  461. package/dist/chunk-L6TGKNRA.js +0 -516
  462. package/dist/chunk-LN4KNFOQ.js +0 -55
  463. package/dist/chunk-M4ML4ACA.js +0 -134
  464. package/dist/chunk-MIDVLNN3.js +0 -123
  465. package/dist/chunk-MUVXIOXM.js +0 -276
  466. package/dist/chunk-N2RAPA7D.js +0 -42
  467. package/dist/chunk-N6AHRJAM.js +0 -1339
  468. package/dist/chunk-NB4UU4DH.js +0 -54
  469. package/dist/chunk-NGG4737W.js +0 -296
  470. package/dist/chunk-O4BDFBVK.js +0 -1253
  471. package/dist/chunk-OGU7IDV7.js +0 -102
  472. package/dist/chunk-OT2DMA2D.js +0 -652
  473. package/dist/chunk-OVO6NYUR.js +0 -480
  474. package/dist/chunk-OXRZSZKA.js +0 -2008
  475. package/dist/chunk-QMR3QMJG.js +0 -50
  476. package/dist/chunk-QUVGLTCF.js +0 -103
  477. package/dist/chunk-R2H22S4J.js +0 -5786
  478. package/dist/chunk-R2H22S4J.js.map +0 -7
  479. package/dist/chunk-RCLCEA55.js +0 -305
  480. package/dist/chunk-RCVA2RWU.js +0 -466
  481. package/dist/chunk-RSCSTOUN.js +0 -6375
  482. package/dist/chunk-SCXWXLMR.js +0 -237
  483. package/dist/chunk-SCXWXLMR.js.map +0 -7
  484. package/dist/chunk-SQUMXZXI.js +0 -257
  485. package/dist/chunk-T2DORAV4.js +0 -398
  486. package/dist/chunk-TBXJ2CUA.js +0 -14
  487. package/dist/chunk-TQLHKDNS.js +0 -140
  488. package/dist/chunk-TTSKLWP7.js +0 -2932
  489. package/dist/chunk-VQD6GZMU.js +0 -59
  490. package/dist/chunk-VZBRG6HQ.js +0 -263
  491. package/dist/chunk-WQHL6SR3.js +0 -468
  492. package/dist/chunk-X7JGAQ5N.js +0 -340
  493. package/dist/chunk-Z6ZFRHXK.js +0 -2334
  494. package/dist/chunk-ZCY72DDM.js +0 -379
  495. package/dist/chunk-ZHY7ZHWC.js +0 -243
  496. package/dist/chunk-ZIMAIUZD.js +0 -26744
  497. package/dist/chunk-ZIMAIUZD.js.map +0 -7
  498. package/dist/chunk-ZLQ6PAI6.js +0 -299
  499. package/dist/chunk-ZUG4EY4T.js +0 -348
  500. package/dist/chunk-ZUXXBQ7D.js +0 -2349
  501. package/dist/cohort-2DQOQ5AO.js +0 -66
  502. package/dist/cohortSunburst-W6XC7VD6.js +0 -402
  503. package/dist/condition-3A7I5UQA.js +0 -323
  504. package/dist/controls-G5WYBX4P.js +0 -30
  505. package/dist/controls.config-TAFGM2S2.js +0 -30
  506. package/dist/correlation-K4EOOQJU.js +0 -91
  507. package/dist/customdata.inputui-E7RRN3KY.js +0 -280
  508. package/dist/dataDownload-OXZGAE5R.js +0 -326
  509. package/dist/databrowser.ui-IPUF6LUC.js +0 -424
  510. package/dist/dictionary-MUNAUI43.js +0 -109
  511. package/dist/dnaMethylation-SOV4HBAX.js +0 -29
  512. package/dist/dnaMethylation.integration.spec-T4KKTMRL.js +0 -194
  513. package/dist/dofetch-2CR2TVWC.js +0 -49
  514. package/dist/e2pca-EIOJCV4O.js +0 -340
  515. package/dist/ep-5QX3CW6D.js +0 -1247
  516. package/dist/expclust.gdc.spec-TNHPZLYQ.js +0 -298
  517. package/dist/facet-I3OC4DK2.js +0 -556
  518. package/dist/gb-WPIUHR3O.js +0 -77
  519. package/dist/geneExpClustering-EYGZENSP.js +0 -240
  520. package/dist/geneExpression-54L3DH32.js +0 -309
  521. package/dist/geneExpression-6S6H2EVY.js +0 -29
  522. package/dist/geneExpression.unit.spec-VVI2MXIH.js +0 -151
  523. package/dist/geneORA-7M64LXZC.js +0 -269
  524. package/dist/geneRanking-676CAA3B.js +0 -544
  525. package/dist/geneVariant-4UPJE6MJ.js +0 -289
  526. package/dist/geneVariant-PFVPL22U.js +0 -32
  527. package/dist/geneVariant.integration.spec-EAJ4OSFQ.js +0 -672
  528. package/dist/genefusion.ui-LP4EJUTO.js +0 -299
  529. package/dist/geneset-ANDOMTPO.js +0 -199
  530. package/dist/genomeBrowser.spec-NUXOOL5N.js +0 -272
  531. package/dist/grin2-K4LRVCES.js +0 -66
  532. package/dist/grin2-YFCWJZFR.js +0 -945
  533. package/dist/hierCluster-POD3DRO4.js +0 -55
  534. package/dist/hierCluster-QA7HXKRD.js +0 -51
  535. package/dist/hierCluster.config-HQ3SVKCE.js +0 -32
  536. package/dist/hierCluster.integration.spec-MOYDWJL3.js +0 -479
  537. package/dist/hierCluster.interactivity-OZTNHXZQ.js +0 -45
  538. package/dist/hierCluster.renderers-46E37NL4.js +0 -18
  539. package/dist/imagePlot-HNAYBWY3.js +0 -152
  540. package/dist/importPlot-XTW46VF4.js +0 -8
  541. package/dist/isoformExpression-2TMTILKG.js +0 -31
  542. package/dist/isoformExpression.unit.spec-SIJWP7TH.js +0 -233
  543. package/dist/junction-AICKHNXX.js +0 -32
  544. package/dist/junction.customTerm-5STKYZ4B.js +0 -15
  545. package/dist/junction.unit.spec-EXFN4MLW.js +0 -178
  546. package/dist/launch.adhoc-PB6PGR7Q.js +0 -33
  547. package/dist/leftlabel.sample-ISUD4A7F.js +0 -253
  548. package/dist/leftlabel.sample-ISUD4A7F.js.map +0 -7
  549. package/dist/lollipop-5UXUAFYY.js +0 -162
  550. package/dist/maf-L6YD25JK.js +0 -451
  551. package/dist/maftimeline-63YZDGJ3.js +0 -583
  552. package/dist/matrix-OPEBHZCW.js +0 -55
  553. package/dist/matrix-TLMWPG7C.js +0 -50
  554. package/dist/matrix.cells-IELMNYC6.js +0 -25
  555. package/dist/matrix.config-J7SVFXLM.js +0 -33
  556. package/dist/matrix.data-DJTJCPO4.js +0 -22
  557. package/dist/matrix.groups-2REICNZK.js +0 -25
  558. package/dist/matrix.integration.spec-ZXU2OEFU.js +0 -3156
  559. package/dist/matrix.interactivity-SX3OR6OI.js +0 -33
  560. package/dist/matrix.layout-ZJ6X5RON.js +0 -35
  561. package/dist/matrix.legend-ZOP72TIO.js +0 -19
  562. package/dist/matrix.renderers-YUSROXKN.js +0 -30
  563. package/dist/matrix.serieses-UMAZNCMR.js +0 -18
  564. package/dist/matrix.sort-2JNIZHNL.js +0 -25
  565. package/dist/matrix.sort.unit.spec-SNB643Y6.js +0 -464
  566. package/dist/matrix.sorterUi-JXEIY6UL.js +0 -15
  567. package/dist/matrix.sorterUi.unit.spec-LDAT4R3H.js +0 -334
  568. package/dist/matrix.unit.spec-QBQIMDLD.js +0 -146
  569. package/dist/mavb-EQUF3VGG.js +0 -726
  570. package/dist/mds.samplescatterplot-73E45ZT7.js +0 -1545
  571. package/dist/mds.survivalplot-DL53IRVD.js +0 -472
  572. package/dist/multivalue-PQN75ENP.js +0 -79
  573. package/dist/numericDictTermCluster-FGMIOTBO.js +0 -62
  574. package/dist/oncomatrix-CCHWOA3N.js +0 -286
  575. package/dist/oncomatrix.spec-GQT3UTCR.js +0 -439
  576. package/dist/plot.2dvaf-L6ZI5ROR.js +0 -368
  577. package/dist/plot.app-A73VXJCP.js +0 -32
  578. package/dist/plot.barplot-HSCHPOO7.js +0 -93
  579. package/dist/plot.boxplot-AXBVNTNH.js +0 -142
  580. package/dist/plot.brainImaging-PEMURKM3.js +0 -51
  581. package/dist/plot.disco-YKMYYVMV.js +0 -98
  582. package/dist/plot.disco-YKMYYVMV.js.map +0 -7
  583. package/dist/plot.ssgq-FGMQXKZU.js +0 -130
  584. package/dist/plot.vaf2cov-IBM7NQEB.js +0 -249
  585. package/dist/polar2-N7KWY36S.js +0 -228
  586. package/dist/profileForms-Q4NN7653.js +0 -937
  587. package/dist/profilePlot-SQ77M6LI.js +0 -45
  588. package/dist/proteinView-KSIZRDNP.js +0 -1346
  589. package/dist/proteomeCohortCompare-GYSBJSDY.js +0 -866
  590. package/dist/proteomeCohortCompare-GYSBJSDY.js.map +0 -7
  591. package/dist/pseudbulk.unit.spec-XELPZVXM.js +0 -82
  592. package/dist/pseudobulk-H3USXM5U.js +0 -31
  593. package/dist/qualitative-ABXENRAF.js +0 -34
  594. package/dist/qualitative-OSEJTJ4D.js +0 -241
  595. package/dist/radar2-VTDQGHWN.js +0 -323
  596. package/dist/radarFacility2-BWGEC5A2.js +0 -331
  597. package/dist/rememberedGvQ.unit.spec-TWUDSEDP.js +0 -210
  598. package/dist/render-C3XJQ2QY.js +0 -29
  599. package/dist/report-7ZZ44X4R.js +0 -213
  600. package/dist/sampleView-CUCNI65Q.js +0 -39
  601. package/dist/samplelst-S7AJQ36J.js +0 -114
  602. package/dist/samplematrix-U7WM6GNB.js +0 -2188
  603. package/dist/sc-FMJHN2SW.js +0 -77
  604. package/dist/scatter-4UMCJNEH.js +0 -919
  605. package/dist/scatter-KMAZ3ZNR.js +0 -84
  606. package/dist/selectGenomeWithTklst-5SRM45BI.js +0 -125
  607. package/dist/singleCellCellType-GIIICJK5.js +0 -29
  608. package/dist/singleCellCellType.unit.spec-MVA7BMGL.js +0 -150
  609. package/dist/singleCellGeneExpression-2QFQHJJH.js +0 -29
  610. package/dist/singleCellGeneExpression.unit.spec-SAIETYHV.js +0 -144
  611. package/dist/singleCellNumericValue-45H5EPIB.js +0 -29
  612. package/dist/singleCellNumericValue.unit.spec-FNKEJ2WC.js +0 -412
  613. package/dist/singleCellPlot-SP7OEGYQ.js +0 -44
  614. package/dist/singlecell-AVZQX4AH.js +0 -1562
  615. package/dist/singlecell-JQKUHGIH.js +0 -77
  616. package/dist/snp-4SA7VABN.js +0 -29
  617. package/dist/snp.unit.spec-YIYGR6GW.js +0 -167
  618. package/dist/snplocus-TDGQ57ZJ.js +0 -200
  619. package/dist/snplst-SWBGRYPA.js +0 -36
  620. package/dist/spliceevent.a53ss.diagram-YODOBS6U.js +0 -142
  621. package/dist/spliceevent.exonskip.diagram-PMZIQ5UG.js +0 -274
  622. package/dist/spliceevent.noeventdiagram-A4T2PNUX.js +0 -451
  623. package/dist/ssGSEA-U7D6HOIV.js +0 -29
  624. package/dist/ssGSEA.unit.spec-SMNAM5DJ.js +0 -79
  625. package/dist/stattable-DBYMPJU6.js +0 -112
  626. package/dist/studyCatalog-7RABX4W5.js +0 -457
  627. package/dist/summarizeCnvGeneexp-YVRW7LWY.js +0 -154
  628. package/dist/summarizeGeneexpSurvival-ZB7IWGPS.js +0 -101
  629. package/dist/summarizeMutationCnv-CUSYURDK.js +0 -155
  630. package/dist/summarizeMutationDiagnosis-NSPCT5WI.js +0 -31
  631. package/dist/summarizeMutationSurvival-2PZZCC4G.js +0 -95
  632. package/dist/summary-CYDZSICI.js +0 -40
  633. package/dist/summary.integration.spec-2TLKJS3X.js +0 -405
  634. package/dist/summaryInput-BRQ5JRGV.js +0 -238
  635. package/dist/sunburst-435LKL2S.js +0 -34
  636. package/dist/sunburst-D5WAGHX6.js +0 -274
  637. package/dist/survival-M63B6DY5.js +0 -1248
  638. package/dist/survival-MHESSYWF.js +0 -49
  639. package/dist/survival.integration.spec-WMS3FTNR.js +0 -609
  640. package/dist/svgraph-LYFGVTHI.js +0 -1377
  641. package/dist/svmr-UR67QZIP.js +0 -3834
  642. package/dist/swimmer-RP4SUEZS.js +0 -993
  643. package/dist/table-V4OOMF3B.js +0 -192
  644. package/dist/termCollection-VHGVBSWW.js +0 -29
  645. package/dist/termCollection-WSNM3YFK.js +0 -247
  646. package/dist/termCollection.unit.spec-NCZUZL6P.js +0 -295
  647. package/dist/termCollectionFractionSelection-XM3FJWBQ.js +0 -38
  648. package/dist/termCollectionFractionSelection.unit.spec-VO4SAV72.js +0 -184
  649. package/dist/tk-G5PKWSXJ.js +0 -1193
  650. package/dist/tk-G5PKWSXJ.js.map +0 -7
  651. package/dist/tk-KIELQHVI.js +0 -37
  652. package/dist/tp.ui-HAKSWLFB.js +0 -1453
  653. package/dist/tvs.categorical-G4DM4JY5.js +0 -28
  654. package/dist/tvs.condition-E5NUQONB.js +0 -160
  655. package/dist/tvs.dt-T4BK24VZ.js +0 -34
  656. package/dist/tvs.dtcnv.categorical-V57TZFRA.js +0 -31
  657. package/dist/tvs.dtcnv.continuous-D4YIB4PN.js +0 -72
  658. package/dist/tvs.dtfusion-6DUFLUNH.js +0 -31
  659. package/dist/tvs.dtitd-GOEPAQGR.js +0 -31
  660. package/dist/tvs.dtsnvindel-ASTXGC4O.js +0 -31
  661. package/dist/tvs.dtsv-7TGDEWXK.js +0 -31
  662. package/dist/tvs.multivalue-SEIGL2W6.js +0 -84
  663. package/dist/tvs.numeric-MLLX5L7Z.js +0 -32
  664. package/dist/tvs.samplelst-HAV7C2EA.js +0 -95
  665. package/dist/tvs.survival-3B522MT2.js +0 -110
  666. package/dist/tvs.termCollection-R5NG4VXP.js +0 -118
  667. package/dist/vocabulary-LBNHNSEN.js +0 -32
  668. package/dist/wsi.direct-ZEZO4NLR.js +0 -11515
  669. /package/dist/{2dmaf-OWA6REJ5.js.map → 2dmaf-4W2R2HXG.js.map} +0 -0
  670. /package/dist/{AggMatrixInput-5GC33U5A.js.map → AggMatrixInput-3SQ7UW5L.js.map} +0 -0
  671. /package/dist/{AggregateMatrix-CMJFO53B.js.map → AggregateMatrix-QI55DXDU.js.map} +0 -0
  672. /package/dist/{AppHeader-KJCXF35P.js.map → AppHeader-C26OHIUQ.js.map} +0 -0
  673. /package/dist/{BoxPlot-NZTO6CLZ.js.map → BoxPlot-27OYBGJ3.js.map} +0 -0
  674. /package/dist/{CorrelationVolcano-GHTPFM2V.js.map → CorrelationVolcano-XIMXCSHG.js.map} +0 -0
  675. /package/dist/{Cuminc-HHBYFFFM.js.map → Cuminc-737O733E.js.map} +0 -0
  676. /package/dist/{DE-VVKIMVXD.js.map → DE-EDTGDY6L.js.map} +0 -0
  677. /package/dist/{DEinput-F7HSM2SO.js.map → DEinput-ZN76I5M5.js.map} +0 -0
  678. /package/dist/{DM-UBCIWZEY.js.map → DM-25IRANGL.js.map} +0 -0
  679. /package/dist/{DifferentialAnalysis-UUXXMOQS.js.map → DifferentialAnalysis-7HQYEA5T.js.map} +0 -0
  680. /package/dist/{Disco.UI-GSSSK4YJ.js.map → Disco.UI-67HBGS4Y.js.map} +0 -0
  681. /package/dist/{GB-CIQGJBJP.js.map → GB-HT3B7Y7R.js.map} +0 -0
  682. /package/dist/{GSEA-3GVFEJTX.js.map → GSEA-CMFMNK5Y.js.map} +0 -0
  683. /package/dist/{GeneExpInput-CFU3Q7FM.js.map → GeneExpInput-HMGV23E7.js.map} +0 -0
  684. /package/dist/{Geomap-NMVFA77Q.js.map → Geomap-RB4SGVPC.js.map} +0 -0
  685. /package/dist/{HicApp-4FCGUUJD.js.map → HicApp-YRP6YQFA.js.map} +0 -0
  686. /package/dist/{IDCViewer-WFB6AXHD.js.map → IDCViewer-OUSOZNSR.js.map} +0 -0
  687. /package/dist/{NumBinaryEditor-4WUDJRSU.js.map → NumBinaryEditor-YFQDPBB6.js.map} +0 -0
  688. /package/dist/{NumBinaryEditor.unit.spec-MV53GTGQ.js.map → NumBinaryEditor.unit.spec-6YC5PCPK.js.map} +0 -0
  689. /package/dist/{NumContEditor-U4R6HPDM.js.map → NumContEditor-EH6MA2RW.js.map} +0 -0
  690. /package/dist/{NumContEditor.unit.spec-J4ANPBSF.js.map → NumContEditor.unit.spec-Q2JBVIRT.js.map} +0 -0
  691. /package/dist/{NumCustomBinEditor-QRGDNFP4.js.map → NumCustomBinEditor-USQA3BC6.js.map} +0 -0
  692. /package/dist/{NumCustomBinEditor.unit.spec-PPF233FW.js.map → NumCustomBinEditor.unit.spec-PE2HFRCK.js.map} +0 -0
  693. /package/dist/{NumDiscreteEditor-LNK4KHSL.js.map → NumDiscreteEditor-VKE4WT24.js.map} +0 -0
  694. /package/dist/{NumDiscreteEditor.unit.spec-QY6O62JU.js.map → NumDiscreteEditor.unit.spec-JNG673LE.js.map} +0 -0
  695. /package/dist/{NumRegularBinEditor-XTINNM5L.js.map → NumRegularBinEditor-KCCPGJSX.js.map} +0 -0
  696. /package/dist/{NumRegularBinEditor.unit.spec-FSLARHOC.js.map → NumRegularBinEditor.unit.spec-4BLKQRZU.js.map} +0 -0
  697. /package/dist/{NumSplineEditor-YSQTKBFA.js.map → NumSplineEditor-4YELHGUO.js.map} +0 -0
  698. /package/dist/{NumSplineEditor.unit.spec-QNITPY7R.js.map → NumSplineEditor.unit.spec-CKHHK6GH.js.map} +0 -0
  699. /package/dist/{NumericDensity-J5WS74JZ.js.map → NumericDensity-LCFM7VSY.js.map} +0 -0
  700. /package/dist/{NumericDensity.unit.spec-4WQWLSSJ.js.map → NumericDensity.unit.spec-R4ARTJ5I.js.map} +0 -0
  701. /package/dist/{NumericHandler-ZEWC25U2.js.map → NumericHandler-2OHRSY6Z.js.map} +0 -0
  702. /package/dist/{NumericHandler.unit.spec-A3G5FWGV.js.map → NumericHandler.unit.spec-M3TRIFZW.js.map} +0 -0
  703. /package/dist/{ProteomeInput-7DXGQIOO.js.map → ProteomeInput-G2EP6QH2.js.map} +0 -0
  704. /package/dist/{Regression-VQ5MC6KW.js.map → Regression-2HKE6C7F.js.map} +0 -0
  705. /package/dist/{RunChart2-B33CQUXH.js.map → RunChart2-WRVW63PB.js.map} +0 -0
  706. /package/dist/{SC-LEVWXS4P.js.map → SC-37RDNFGH.js.map} +0 -0
  707. /package/dist/{Wsi-VPF6RX3B.js.map → Wsi-PB77PVAA.js.map} +0 -0
  708. /package/dist/{aboutSunburst-NGH3V74S.js.map → aboutSunburst-5Z24ODIN.js.map} +0 -0
  709. /package/dist/{adSandbox-VOAL4P5A.js.map → adSandbox-AFORHU3V.js.map} +0 -0
  710. /package/dist/{animatedBubbleChart-HKOGYPSS.js.map → animatedBubbleChart-F75OBRZW.js.map} +0 -0
  711. /package/dist/{app-AZLUP2BA.js.map → app-4RZ76DZZ.js.map} +0 -0
  712. /package/dist/{app-JJPKGBEV.js.map → app-IHE3RNI5.js.map} +0 -0
  713. /package/dist/{bam-GIZSH2MF.js.map → bam-IIRZX3IK.js.map} +0 -0
  714. /package/dist/{barchart-CVTXLIIQ.js.map → barchart-UIHRIMOE.js.map} +0 -0
  715. /package/dist/{barchart2-XYC6WITL.js.map → barchart2-DG3S6FDJ.js.map} +0 -0
  716. /package/dist/{block-DXRSU62C.js.map → block-COZKGPXY.js.map} +0 -0
  717. /package/dist/{block.init-U4Y6ROG4.js.map → block.init-UBXYVTPQ.js.map} +0 -0
  718. /package/dist/{block.mds.expressionrank-BB26LVTM.js.map → block.mds.expressionrank-KSXPPPGR.js.map} +0 -0
  719. /package/dist/{block.mds.geneboxplot-VVKEU3SL.js.map → block.mds.geneboxplot-5RDFDVDE.js.map} +0 -0
  720. /package/dist/{block.mds.junction-XUZX6EAQ.js.map → block.mds.junction-LMM24KXJ.js.map} +0 -0
  721. /package/dist/{block.mds.svcnv-WDSACPWG.js.map → block.mds.svcnv-4XRXZMPS.js.map} +0 -0
  722. /package/dist/{block.svg-T5BA7VLS.js.map → block.svg-VAKLMPMS.js.map} +0 -0
  723. /package/dist/{block.tk.aicheck-3VN2RDPD.js.map → block.tk.aicheck-6GHZK2YY.js.map} +0 -0
  724. /package/dist/{block.tk.bam-5XZ3N4Y7.js.map → block.tk.bam-7H3BSHR2.js.map} +0 -0
  725. /package/dist/{block.tk.bigwig.ui-JODVOS4R.js.map → block.tk.bigwig.ui-KX2GACY5.js.map} +0 -0
  726. /package/dist/{block.tk.hicstraw-AFNWJ2YP.js.map → block.tk.hicstraw-OOWEWGMF.js.map} +0 -0
  727. /package/dist/{block.tk.junction-T2G6XEVS.js.map → block.tk.junction-U7W36OZA.js.map} +0 -0
  728. /package/dist/{block.tk.junction.textmatrixui-FL5MZH7K.js.map → block.tk.junction.textmatrixui-PAMSBYZT.js.map} +0 -0
  729. /package/dist/{block.tk.ld-JKBXDOB5.js.map → block.tk.ld-RFQPDG7Q.js.map} +0 -0
  730. /package/dist/{block.tk.menu-2X4BN7BN.js.map → block.tk.menu-JDJU2OGK.js.map} +0 -0
  731. /package/dist/{block.tk.pgv-ASUVEGQF.js.map → block.tk.pgv-G2UFCQUT.js.map} +0 -0
  732. /package/dist/{brainImaging-27442GMQ.js.map → brainImaging-ASAHWZJH.js.map} +0 -0
  733. /package/dist/{brainRegions-3367RQCU.js.map → brainRegions-XTJDLUU4.js.map} +0 -0
  734. /package/dist/{bubbleHeatmap-IOVS6SHX.js.map → bubbleHeatmap-UPUITTU6.js.map} +0 -0
  735. /package/dist/{cellTypeBubbleHeatmap-7XJP6B5W.js.map → cellTypeBubbleHeatmap-25SOXC2Q.js.map} +0 -0
  736. /package/dist/{chunk-ZLQ6PAI6.js.map → chunk-2ZYAC3DC.js.map} +0 -0
  737. /package/dist/{chunk-C4YACFGH.js.map → chunk-325X3T7G.js.map} +0 -0
  738. /package/dist/{chunk-5JBOGNSG.js.map → chunk-3UXHTSZJ.js.map} +0 -0
  739. /package/dist/{chunk-GOL6A746.js.map → chunk-4DFKK46J.js.map} +0 -0
  740. /package/dist/{chunk-MIDVLNN3.js.map → chunk-54W2RWRB.js.map} +0 -0
  741. /package/dist/{chunk-CKO54XWB.js.map → chunk-5QGC2624.js.map} +0 -0
  742. /package/dist/{chunk-OVO6NYUR.js.map → chunk-5YKXYWP3.js.map} +0 -0
  743. /package/dist/{chunk-HTIZFNBC.js.map → chunk-6B4AME6E.js.map} +0 -0
  744. /package/dist/{chunk-COWLQ74R.js.map → chunk-6H4FFHFQ.js.map} +0 -0
  745. /package/dist/{chunk-F6CYUMSM.js.map → chunk-6PVVV3UW.js.map} +0 -0
  746. /package/dist/{chunk-7UXV4IX5.js.map → chunk-72QBXULB.js.map} +0 -0
  747. /package/dist/{chunk-GVLXSPTN.js.map → chunk-7APH7QLC.js.map} +0 -0
  748. /package/dist/{chunk-EM56Y4X6.js.map → chunk-7HBAALWJ.js.map} +0 -0
  749. /package/dist/{chunk-T2DORAV4.js.map → chunk-7UK7CU4F.js.map} +0 -0
  750. /package/dist/{chunk-HNU4RYI5.js.map → chunk-7ZTUUKLX.js.map} +0 -0
  751. /package/dist/{chunk-CZOJUH3C.js.map → chunk-A7GCFL3R.js.map} +0 -0
  752. /package/dist/{chunk-TBXJ2CUA.js.map → chunk-AGWIWLOP.js.map} +0 -0
  753. /package/dist/{chunk-KTRDLHCP.js.map → chunk-CHQ43UJQ.js.map} +0 -0
  754. /package/dist/{chunk-7ZCYC2DQ.js.map → chunk-CQWR4QZO.js.map} +0 -0
  755. /package/dist/{chunk-N6AHRJAM.js.map → chunk-D6TLBMIX.js.map} +0 -0
  756. /package/dist/{chunk-BOQYGAYA.js.map → chunk-DOC3HBOV.js.map} +0 -0
  757. /package/dist/{chunk-CU434U4N.js.map → chunk-DR5JLHTB.js.map} +0 -0
  758. /package/dist/{chunk-LN4KNFOQ.js.map → chunk-E2Z4X6C2.js.map} +0 -0
  759. /package/dist/{chunk-2GP3LH7J.js.map → chunk-E4WAVMI5.js.map} +0 -0
  760. /package/dist/{chunk-O4BDFBVK.js.map → chunk-EM76Y3HQ.js.map} +0 -0
  761. /package/dist/{chunk-WQHL6SR3.js.map → chunk-ES7XNERS.js.map} +0 -0
  762. /package/dist/{chunk-2ESAB2PP.js.map → chunk-F2RTD23W.js.map} +0 -0
  763. /package/dist/{chunk-46KQE4DV.js.map → chunk-FEE2HAON.js.map} +0 -0
  764. /package/dist/{chunk-2UGYE6EJ.js.map → chunk-FIWVGOSE.js.map} +0 -0
  765. /package/dist/{chunk-EIO6DMIQ.js.map → chunk-FT5HOBHJ.js.map} +0 -0
  766. /package/dist/{chunk-K5RCZIZN.js.map → chunk-G5BQJGRA.js.map} +0 -0
  767. /package/dist/{chunk-SQUMXZXI.js.map → chunk-GAYYXHOG.js.map} +0 -0
  768. /package/dist/{chunk-VZBRG6HQ.js.map → chunk-GDIKNIEA.js.map} +0 -0
  769. /package/dist/{chunk-KA3KYNOP.js.map → chunk-GIZTZCE5.js.map} +0 -0
  770. /package/dist/{chunk-5OWPH4IH.js.map → chunk-GONC3LVY.js.map} +0 -0
  771. /package/dist/{chunk-ZUG4EY4T.js.map → chunk-HGC4EON3.js.map} +0 -0
  772. /package/dist/{chunk-7Q4KAFCS.js.map → chunk-HM23KADV.js.map} +0 -0
  773. /package/dist/{chunk-MUVXIOXM.js.map → chunk-JWX6GEWQ.js.map} +0 -0
  774. /package/dist/{chunk-4ICGMPPE.js.map → chunk-K4LZR3HU.js.map} +0 -0
  775. /package/dist/{chunk-RSCSTOUN.js.map → chunk-K55KOEI6.js.map} +0 -0
  776. /package/dist/{chunk-ZUXXBQ7D.js.map → chunk-KLJM7HE5.js.map} +0 -0
  777. /package/dist/{chunk-JNIYPQWY.js.map → chunk-LFH5VSSF.js.map} +0 -0
  778. /package/dist/{chunk-7ONTCJWB.js.map → chunk-MBWG3QHI.js.map} +0 -0
  779. /package/dist/{chunk-2CTAWHGB.js.map → chunk-MZTVOOR6.js.map} +0 -0
  780. /package/dist/{chunk-KGFH5VTH.js.map → chunk-N2JOZ3QD.js.map} +0 -0
  781. /package/dist/{chunk-3TJBSAIO.js.map → chunk-NG2U3VHX.js.map} +0 -0
  782. /package/dist/{chunk-Z6ZFRHXK.js.map → chunk-NUGYNLTL.js.map} +0 -0
  783. /package/dist/{chunk-OXRZSZKA.js.map → chunk-OCOB7XJW.js.map} +0 -0
  784. /package/dist/{chunk-NB4UU4DH.js.map → chunk-OGDBTL5C.js.map} +0 -0
  785. /package/dist/{chunk-VQD6GZMU.js.map → chunk-OVXHMJJJ.js.map} +0 -0
  786. /package/dist/{chunk-TTSKLWP7.js.map → chunk-PAF5KZCR.js.map} +0 -0
  787. /package/dist/{chunk-TQLHKDNS.js.map → chunk-PI2MCZXG.js.map} +0 -0
  788. /package/dist/{chunk-BNJC6OX5.js.map → chunk-PPICALUF.js.map} +0 -0
  789. /package/dist/{chunk-M4ML4ACA.js.map → chunk-QFOT5WAZ.js.map} +0 -0
  790. /package/dist/{chunk-ZHY7ZHWC.js.map → chunk-QGCB5AKN.js.map} +0 -0
  791. /package/dist/{chunk-AQSZLUDV.js.map → chunk-QRZRAMHA.js.map} +0 -0
  792. /package/dist/{chunk-QUVGLTCF.js.map → chunk-RGOZHZCN.js.map} +0 -0
  793. /package/dist/{chunk-BBA5MAFS.js.map → chunk-RJKY22D4.js.map} +0 -0
  794. /package/dist/{chunk-OGU7IDV7.js.map → chunk-RZ2HG7G3.js.map} +0 -0
  795. /package/dist/{chunk-ZCY72DDM.js.map → chunk-SI2KSG6E.js.map} +0 -0
  796. /package/dist/{chunk-QMR3QMJG.js.map → chunk-U4PLKSSS.js.map} +0 -0
  797. /package/dist/{chunk-RCVA2RWU.js.map → chunk-U7G65D2G.js.map} +0 -0
  798. /package/dist/{chunk-RCLCEA55.js.map → chunk-UU3FWU6D.js.map} +0 -0
  799. /package/dist/{chunk-HUF5BTO6.js.map → chunk-UXLT7W2N.js.map} +0 -0
  800. /package/dist/{chunk-DVSTBGZT.js.map → chunk-VHQDN3OA.js.map} +0 -0
  801. /package/dist/{chunk-63TCOVAK.js.map → chunk-VTMNHAFC.js.map} +0 -0
  802. /package/dist/{chunk-G5GFCBJT.js.map → chunk-W3K7KLIR.js.map} +0 -0
  803. /package/dist/{chunk-NGG4737W.js.map → chunk-WSLS55SH.js.map} +0 -0
  804. /package/dist/{chunk-HWP3U2VY.js.map → chunk-WUCIHN7D.js.map} +0 -0
  805. /package/dist/{chunk-L6TGKNRA.js.map → chunk-XQIB27PB.js.map} +0 -0
  806. /package/dist/{chunk-OT2DMA2D.js.map → chunk-XSBGICK5.js.map} +0 -0
  807. /package/dist/{chunk-FUTHP5J4.js.map → chunk-YHW2RAAG.js.map} +0 -0
  808. /package/dist/{chunk-JEXS72M5.js.map → chunk-Z7CCL464.js.map} +0 -0
  809. /package/dist/{chunk-N2RAPA7D.js.map → chunk-ZBNPXXMK.js.map} +0 -0
  810. /package/dist/{chunk-X7JGAQ5N.js.map → chunk-ZNHC46CT.js.map} +0 -0
  811. /package/dist/{cohort-2DQOQ5AO.js.map → cohort-ZFGFEEBD.js.map} +0 -0
  812. /package/dist/{cohortSunburst-W6XC7VD6.js.map → cohortSunburst-EEPGV2RB.js.map} +0 -0
  813. /package/dist/{condition-3A7I5UQA.js.map → condition-7EWFLQSO.js.map} +0 -0
  814. /package/dist/{controls-G5WYBX4P.js.map → controls-QHDSDWKI.js.map} +0 -0
  815. /package/dist/{controls.config-TAFGM2S2.js.map → controls.config-LBSCZ6GP.js.map} +0 -0
  816. /package/dist/{correlation-K4EOOQJU.js.map → correlation-IJQJPNNP.js.map} +0 -0
  817. /package/dist/{customdata.inputui-E7RRN3KY.js.map → customdata.inputui-TZGX2CUD.js.map} +0 -0
  818. /package/dist/{dataDownload-OXZGAE5R.js.map → dataDownload-33EWD3AD.js.map} +0 -0
  819. /package/dist/{databrowser.ui-IPUF6LUC.js.map → databrowser.ui-YNKDTAAN.js.map} +0 -0
  820. /package/dist/{dictionary-MUNAUI43.js.map → dictionary-OTR6Z5EZ.js.map} +0 -0
  821. /package/dist/{dnaMethylation-SOV4HBAX.js.map → dnaMethylation-LQTCTOOE.js.map} +0 -0
  822. /package/dist/{dnaMethylation.integration.spec-T4KKTMRL.js.map → dnaMethylation.integration.spec-U5VQYAK3.js.map} +0 -0
  823. /package/dist/{dofetch-2CR2TVWC.js.map → dofetch-HLG7G7RX.js.map} +0 -0
  824. /package/dist/{e2pca-EIOJCV4O.js.map → e2pca-AXDPYR7U.js.map} +0 -0
  825. /package/dist/{ep-5QX3CW6D.js.map → ep-4WK46CH7.js.map} +0 -0
  826. /package/dist/{expclust.gdc.spec-TNHPZLYQ.js.map → expclust.gdc.spec-CYGWGREQ.js.map} +0 -0
  827. /package/dist/{facet-I3OC4DK2.js.map → facet-IZSSZDHK.js.map} +0 -0
  828. /package/dist/{gb-WPIUHR3O.js.map → gb-AUZBUZFM.js.map} +0 -0
  829. /package/dist/{geneExpClustering-EYGZENSP.js.map → geneExpClustering-AQBFLXLP.js.map} +0 -0
  830. /package/dist/{geneExpression-54L3DH32.js.map → geneExpression-HDJVPVPK.js.map} +0 -0
  831. /package/dist/{geneExpression-6S6H2EVY.js.map → geneExpression-V4JMTMLI.js.map} +0 -0
  832. /package/dist/{geneExpression.unit.spec-VVI2MXIH.js.map → geneExpression.unit.spec-KFMSDVMX.js.map} +0 -0
  833. /package/dist/{geneORA-7M64LXZC.js.map → geneORA-LDFFSEMQ.js.map} +0 -0
  834. /package/dist/{geneRanking-676CAA3B.js.map → geneRanking-IVKDSNDV.js.map} +0 -0
  835. /package/dist/{geneVariant-4UPJE6MJ.js.map → geneVariant-7X7EEUDW.js.map} +0 -0
  836. /package/dist/{geneVariant-PFVPL22U.js.map → geneVariant-TK3FJ22L.js.map} +0 -0
  837. /package/dist/{geneVariant.integration.spec-EAJ4OSFQ.js.map → geneVariant.integration.spec-ZHAFWQ2O.js.map} +0 -0
  838. /package/dist/{genefusion.ui-LP4EJUTO.js.map → genefusion.ui-U5YPVXAF.js.map} +0 -0
  839. /package/dist/{geneset-ANDOMTPO.js.map → geneset-NSHQ2NDR.js.map} +0 -0
  840. /package/dist/{genomeBrowser.spec-NUXOOL5N.js.map → genomeBrowser.spec-HP4OQPCV.js.map} +0 -0
  841. /package/dist/{grin2-K4LRVCES.js.map → grin2-5WKONQPG.js.map} +0 -0
  842. /package/dist/{grin2-YFCWJZFR.js.map → grin2-V2ZBOJBO.js.map} +0 -0
  843. /package/dist/{hierCluster-POD3DRO4.js.map → hierCluster-7IOPNYFN.js.map} +0 -0
  844. /package/dist/{hierCluster-QA7HXKRD.js.map → hierCluster-IDBCUKHJ.js.map} +0 -0
  845. /package/dist/{hierCluster.config-HQ3SVKCE.js.map → hierCluster.config-Z4NRL5P5.js.map} +0 -0
  846. /package/dist/{hierCluster.integration.spec-MOYDWJL3.js.map → hierCluster.integration.spec-PHEXOGPI.js.map} +0 -0
  847. /package/dist/{hierCluster.interactivity-OZTNHXZQ.js.map → hierCluster.interactivity-NHZ5EPBV.js.map} +0 -0
  848. /package/dist/{hierCluster.renderers-46E37NL4.js.map → hierCluster.renderers-WXJUMDFN.js.map} +0 -0
  849. /package/dist/{imagePlot-HNAYBWY3.js.map → imagePlot-NMNCAYS7.js.map} +0 -0
  850. /package/dist/{importPlot-XTW46VF4.js.map → importPlot-HZML5XMJ.js.map} +0 -0
  851. /package/dist/{isoformExpression-2TMTILKG.js.map → isoformExpression-4IU4AUQ2.js.map} +0 -0
  852. /package/dist/{isoformExpression.unit.spec-SIJWP7TH.js.map → isoformExpression.unit.spec-KKMKU5Z2.js.map} +0 -0
  853. /package/dist/{junction-AICKHNXX.js.map → junction-EXA2WANI.js.map} +0 -0
  854. /package/dist/{junction.customTerm-5STKYZ4B.js.map → junction.customTerm-LQYKCZX4.js.map} +0 -0
  855. /package/dist/{junction.unit.spec-EXFN4MLW.js.map → junction.unit.spec-H3FGTLEP.js.map} +0 -0
  856. /package/dist/{launch.adhoc-PB6PGR7Q.js.map → launch.adhoc-YA6FRHSC.js.map} +0 -0
  857. /package/dist/{lollipop-5UXUAFYY.js.map → lollipop-EWLGYDIR.js.map} +0 -0
  858. /package/dist/{maf-L6YD25JK.js.map → maf-PXMHR3PY.js.map} +0 -0
  859. /package/dist/{maftimeline-63YZDGJ3.js.map → maftimeline-QFKT7PW2.js.map} +0 -0
  860. /package/dist/{matrix-OPEBHZCW.js.map → matrix-KASG3KIY.js.map} +0 -0
  861. /package/dist/{matrix-TLMWPG7C.js.map → matrix-VSX63V3L.js.map} +0 -0
  862. /package/dist/{matrix.cells-IELMNYC6.js.map → matrix.cells-7TTOQRWU.js.map} +0 -0
  863. /package/dist/{matrix.config-J7SVFXLM.js.map → matrix.config-U3I726EC.js.map} +0 -0
  864. /package/dist/{matrix.data-DJTJCPO4.js.map → matrix.data-Y4DXSR2P.js.map} +0 -0
  865. /package/dist/{matrix.groups-2REICNZK.js.map → matrix.groups-C5CHYWQZ.js.map} +0 -0
  866. /package/dist/{matrix.integration.spec-ZXU2OEFU.js.map → matrix.integration.spec-4KWLFXMY.js.map} +0 -0
  867. /package/dist/{matrix.interactivity-SX3OR6OI.js.map → matrix.interactivity-JK6URU6Z.js.map} +0 -0
  868. /package/dist/{matrix.layout-ZJ6X5RON.js.map → matrix.layout-KKOA7GGL.js.map} +0 -0
  869. /package/dist/{matrix.legend-ZOP72TIO.js.map → matrix.legend-3FFHXTLX.js.map} +0 -0
  870. /package/dist/{matrix.renderers-YUSROXKN.js.map → matrix.renderers-F7EWYQWL.js.map} +0 -0
  871. /package/dist/{matrix.serieses-UMAZNCMR.js.map → matrix.serieses-I4JWWONC.js.map} +0 -0
  872. /package/dist/{matrix.sort-2JNIZHNL.js.map → matrix.sort-5JTCLBPB.js.map} +0 -0
  873. /package/dist/{matrix.sort.unit.spec-SNB643Y6.js.map → matrix.sort.unit.spec-EW53F5DT.js.map} +0 -0
  874. /package/dist/{matrix.sorterUi-JXEIY6UL.js.map → matrix.sorterUi-Z4JDY7VW.js.map} +0 -0
  875. /package/dist/{matrix.sorterUi.unit.spec-LDAT4R3H.js.map → matrix.sorterUi.unit.spec-OGTYY6GC.js.map} +0 -0
  876. /package/dist/{matrix.unit.spec-QBQIMDLD.js.map → matrix.unit.spec-RXKKHRUN.js.map} +0 -0
  877. /package/dist/{mavb-EQUF3VGG.js.map → mavb-YI2WEGFI.js.map} +0 -0
  878. /package/dist/{mds.samplescatterplot-73E45ZT7.js.map → mds.samplescatterplot-GGJE67MF.js.map} +0 -0
  879. /package/dist/{mds.survivalplot-DL53IRVD.js.map → mds.survivalplot-A6DS6FHO.js.map} +0 -0
  880. /package/dist/{multivalue-PQN75ENP.js.map → multivalue-3WCYDVL3.js.map} +0 -0
  881. /package/dist/{numericDictTermCluster-FGMIOTBO.js.map → numericDictTermCluster-AOTEPNEI.js.map} +0 -0
  882. /package/dist/{oncomatrix-CCHWOA3N.js.map → oncomatrix-BB4SB5AJ.js.map} +0 -0
  883. /package/dist/{oncomatrix.spec-GQT3UTCR.js.map → oncomatrix.spec-M4ZC3KFC.js.map} +0 -0
  884. /package/dist/{plot.2dvaf-L6ZI5ROR.js.map → plot.2dvaf-QUD743E6.js.map} +0 -0
  885. /package/dist/{plot.app-A73VXJCP.js.map → plot.app-35I4DJXK.js.map} +0 -0
  886. /package/dist/{plot.barplot-HSCHPOO7.js.map → plot.barplot-7OL4HWZB.js.map} +0 -0
  887. /package/dist/{plot.boxplot-AXBVNTNH.js.map → plot.boxplot-N2VSPDYA.js.map} +0 -0
  888. /package/dist/{plot.brainImaging-PEMURKM3.js.map → plot.brainImaging-4PIAFROV.js.map} +0 -0
  889. /package/dist/{plot.ssgq-FGMQXKZU.js.map → plot.ssgq-MGUBQNWE.js.map} +0 -0
  890. /package/dist/{plot.vaf2cov-IBM7NQEB.js.map → plot.vaf2cov-KVI2GMG4.js.map} +0 -0
  891. /package/dist/{polar2-N7KWY36S.js.map → polar2-IGAOHGPE.js.map} +0 -0
  892. /package/dist/{profileForms-Q4NN7653.js.map → profileForms-MW7JQURG.js.map} +0 -0
  893. /package/dist/{profilePlot-SQ77M6LI.js.map → profilePlot-OVOSFR47.js.map} +0 -0
  894. /package/dist/{proteinView-KSIZRDNP.js.map → proteinView-LFP5YYMK.js.map} +0 -0
  895. /package/dist/{pseudbulk.unit.spec-XELPZVXM.js.map → pseudbulk.unit.spec-CGV4JTEK.js.map} +0 -0
  896. /package/dist/{pseudobulk-H3USXM5U.js.map → pseudobulk-WFCQX5KR.js.map} +0 -0
  897. /package/dist/{qualitative-OSEJTJ4D.js.map → qualitative-4SLUE6BW.js.map} +0 -0
  898. /package/dist/{qualitative-ABXENRAF.js.map → qualitative-6H674T7D.js.map} +0 -0
  899. /package/dist/{radar2-VTDQGHWN.js.map → radar2-QXHO2MQA.js.map} +0 -0
  900. /package/dist/{radarFacility2-BWGEC5A2.js.map → radarFacility2-JCVOYMH4.js.map} +0 -0
  901. /package/dist/{rememberedGvQ.unit.spec-TWUDSEDP.js.map → rememberedGvQ.unit.spec-Q3UZJPE2.js.map} +0 -0
  902. /package/dist/{render-C3XJQ2QY.js.map → render-IIFS3Y2N.js.map} +0 -0
  903. /package/dist/{report-7ZZ44X4R.js.map → report-NFBB3PUI.js.map} +0 -0
  904. /package/dist/{sampleView-CUCNI65Q.js.map → sampleView-XQXKIPC7.js.map} +0 -0
  905. /package/dist/{samplelst-S7AJQ36J.js.map → samplelst-RIC5E2W4.js.map} +0 -0
  906. /package/dist/{samplematrix-U7WM6GNB.js.map → samplematrix-WLCFCPBR.js.map} +0 -0
  907. /package/dist/{sc-FMJHN2SW.js.map → sc-TXRF7D6F.js.map} +0 -0
  908. /package/dist/{scatter-4UMCJNEH.js.map → scatter-JUGGPR4B.js.map} +0 -0
  909. /package/dist/{scatter-KMAZ3ZNR.js.map → scatter-YQ47446T.js.map} +0 -0
  910. /package/dist/{selectGenomeWithTklst-5SRM45BI.js.map → selectGenomeWithTklst-2ELB6HQK.js.map} +0 -0
  911. /package/dist/{singleCellCellType-GIIICJK5.js.map → singleCellCellType-DUTH4SZF.js.map} +0 -0
  912. /package/dist/{singleCellCellType.unit.spec-MVA7BMGL.js.map → singleCellCellType.unit.spec-PWP6I5PZ.js.map} +0 -0
  913. /package/dist/{singleCellGeneExpression-2QFQHJJH.js.map → singleCellGeneExpression-3563T7GE.js.map} +0 -0
  914. /package/dist/{singleCellGeneExpression.unit.spec-SAIETYHV.js.map → singleCellGeneExpression.unit.spec-66IDCFJC.js.map} +0 -0
  915. /package/dist/{singleCellNumericValue-45H5EPIB.js.map → singleCellNumericValue-XVQTKLTS.js.map} +0 -0
  916. /package/dist/{singleCellNumericValue.unit.spec-FNKEJ2WC.js.map → singleCellNumericValue.unit.spec-LJSTGKNS.js.map} +0 -0
  917. /package/dist/{singleCellPlot-SP7OEGYQ.js.map → singleCellPlot-MKYJJXSG.js.map} +0 -0
  918. /package/dist/{singlecell-AVZQX4AH.js.map → singlecell-ANCWPAAO.js.map} +0 -0
  919. /package/dist/{singlecell-JQKUHGIH.js.map → singlecell-KMRVFOC5.js.map} +0 -0
  920. /package/dist/{snp-4SA7VABN.js.map → snp-B5UHGWVD.js.map} +0 -0
  921. /package/dist/{snp.unit.spec-YIYGR6GW.js.map → snp.unit.spec-YAHITASM.js.map} +0 -0
  922. /package/dist/{snplocus-TDGQ57ZJ.js.map → snplocus-MLGICRGT.js.map} +0 -0
  923. /package/dist/{snplst-SWBGRYPA.js.map → snplst-DZPIQEKI.js.map} +0 -0
  924. /package/dist/{spliceevent.a53ss.diagram-YODOBS6U.js.map → spliceevent.a53ss.diagram-4NYPSFC2.js.map} +0 -0
  925. /package/dist/{spliceevent.exonskip.diagram-PMZIQ5UG.js.map → spliceevent.exonskip.diagram-WLLTP7NP.js.map} +0 -0
  926. /package/dist/{spliceevent.noeventdiagram-A4T2PNUX.js.map → spliceevent.noeventdiagram-NOSO752Y.js.map} +0 -0
  927. /package/dist/{ssGSEA-U7D6HOIV.js.map → ssGSEA-4DVY6Z5U.js.map} +0 -0
  928. /package/dist/{ssGSEA.unit.spec-SMNAM5DJ.js.map → ssGSEA.unit.spec-UDXV4Q7S.js.map} +0 -0
  929. /package/dist/{stattable-DBYMPJU6.js.map → stattable-T5X76Q32.js.map} +0 -0
  930. /package/dist/{studyCatalog-7RABX4W5.js.map → studyCatalog-O3EPBJPW.js.map} +0 -0
  931. /package/dist/{summarizeCnvGeneexp-YVRW7LWY.js.map → summarizeCnvGeneexp-ST36TPEJ.js.map} +0 -0
  932. /package/dist/{summarizeGeneexpSurvival-ZB7IWGPS.js.map → summarizeGeneexpSurvival-AZOFCBMT.js.map} +0 -0
  933. /package/dist/{summarizeMutationCnv-CUSYURDK.js.map → summarizeMutationCnv-HRCW6BYV.js.map} +0 -0
  934. /package/dist/{summarizeMutationDiagnosis-NSPCT5WI.js.map → summarizeMutationDiagnosis-RQQO2MOR.js.map} +0 -0
  935. /package/dist/{summarizeMutationSurvival-2PZZCC4G.js.map → summarizeMutationSurvival-UHSUJ7FU.js.map} +0 -0
  936. /package/dist/{summary-CYDZSICI.js.map → summary-ZMM5ET67.js.map} +0 -0
  937. /package/dist/{summary.integration.spec-2TLKJS3X.js.map → summary.integration.spec-GW5UGDDU.js.map} +0 -0
  938. /package/dist/{summaryInput-BRQ5JRGV.js.map → summaryInput-ZO5TPARQ.js.map} +0 -0
  939. /package/dist/{sunburst-435LKL2S.js.map → sunburst-6VJS2SUY.js.map} +0 -0
  940. /package/dist/{sunburst-D5WAGHX6.js.map → sunburst-LXRG2SFE.js.map} +0 -0
  941. /package/dist/{survival-MHESSYWF.js.map → survival-QXHY7JRR.js.map} +0 -0
  942. /package/dist/{survival-M63B6DY5.js.map → survival-U6J6KFN2.js.map} +0 -0
  943. /package/dist/{survival.integration.spec-WMS3FTNR.js.map → survival.integration.spec-HN3LL6IY.js.map} +0 -0
  944. /package/dist/{svgraph-LYFGVTHI.js.map → svgraph-CVI27CTM.js.map} +0 -0
  945. /package/dist/{svmr-UR67QZIP.js.map → svmr-GZHAP5IV.js.map} +0 -0
  946. /package/dist/{swimmer-RP4SUEZS.js.map → swimmer-M4JGBO72.js.map} +0 -0
  947. /package/dist/{table-V4OOMF3B.js.map → table-QO22C2ER.js.map} +0 -0
  948. /package/dist/{termCollection-WSNM3YFK.js.map → termCollection-EN73BZV5.js.map} +0 -0
  949. /package/dist/{termCollection-VHGVBSWW.js.map → termCollection-KWNFLRWJ.js.map} +0 -0
  950. /package/dist/{termCollection.unit.spec-NCZUZL6P.js.map → termCollection.unit.spec-Z27AZUE6.js.map} +0 -0
  951. /package/dist/{termCollectionFractionSelection-XM3FJWBQ.js.map → termCollectionFractionSelection-Q7QFEPKA.js.map} +0 -0
  952. /package/dist/{termCollectionFractionSelection.unit.spec-VO4SAV72.js.map → termCollectionFractionSelection.unit.spec-PYLIFZN5.js.map} +0 -0
  953. /package/dist/{tk-KIELQHVI.js.map → tk-WVEDS5OU.js.map} +0 -0
  954. /package/dist/{tp.ui-HAKSWLFB.js.map → tp.ui-CG36YXBY.js.map} +0 -0
  955. /package/dist/{tvs.categorical-G4DM4JY5.js.map → tvs.categorical-GCJISWBS.js.map} +0 -0
  956. /package/dist/{tvs.condition-E5NUQONB.js.map → tvs.condition-YTCVMB3I.js.map} +0 -0
  957. /package/dist/{tvs.dt-T4BK24VZ.js.map → tvs.dt-UCSZ5S44.js.map} +0 -0
  958. /package/dist/{tvs.dtcnv.categorical-V57TZFRA.js.map → tvs.dtcnv.categorical-KYB6XPL3.js.map} +0 -0
  959. /package/dist/{tvs.dtcnv.continuous-D4YIB4PN.js.map → tvs.dtcnv.continuous-MJWJNMKJ.js.map} +0 -0
  960. /package/dist/{tvs.dtfusion-6DUFLUNH.js.map → tvs.dtfusion-IZCEMTH5.js.map} +0 -0
  961. /package/dist/{tvs.dtitd-GOEPAQGR.js.map → tvs.dtitd-DZ4WWGNO.js.map} +0 -0
  962. /package/dist/{tvs.dtsnvindel-ASTXGC4O.js.map → tvs.dtsnvindel-PMJCV4E7.js.map} +0 -0
  963. /package/dist/{tvs.dtsv-7TGDEWXK.js.map → tvs.dtsv-5K2RNWDH.js.map} +0 -0
  964. /package/dist/{tvs.multivalue-SEIGL2W6.js.map → tvs.multivalue-6NSC6JPR.js.map} +0 -0
  965. /package/dist/{tvs.numeric-MLLX5L7Z.js.map → tvs.numeric-7U2NDY4A.js.map} +0 -0
  966. /package/dist/{tvs.samplelst-HAV7C2EA.js.map → tvs.samplelst-3SIYTFWZ.js.map} +0 -0
  967. /package/dist/{tvs.survival-3B522MT2.js.map → tvs.survival-Q3F5SLBW.js.map} +0 -0
  968. /package/dist/{tvs.termCollection-R5NG4VXP.js.map → tvs.termCollection-OR73LBNX.js.map} +0 -0
  969. /package/dist/{vocabulary-LBNHNSEN.js.map → vocabulary-RWRAQ4VJ.js.map} +0 -0
  970. /package/dist/{wsi.direct-ZEZO4NLR.js.map → wsi.direct-HABLR3IF.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/disco/arc/FullArcRenderer.ts", "../plots/disco/menu/MenuProvider.ts", "../plots/disco/fusion/FusionColorProvider.ts", "../plots/disco/fusion/FusionRenderer.ts", "../plots/disco/DiscoRenderer.ts", "../plots/disco/interactions/DiscoInteractions.ts", "../plots/disco/chromosome/Reference.ts", "../plots/disco/data/DataObjectMapper.ts", "../plots/disco/data/PercentileMapper.ts", "../plots/disco/snv/vafTooltip.ts", "../plots/disco/data/DataMapper.ts", "../plots/disco/legend/Legend.ts", "../plots/disco/fusion/Fusion.ts", "../plots/disco/fusion/FusionSubgroup.ts", "../plots/disco/fusion/FusionMapper.ts", "../plots/disco/loh/LohLegend.ts", "../plots/disco/viewmodel/ViewModel.ts", "../plots/disco/ring/Ring.ts", "../plots/disco/label/MLabel.ts", "../plots/disco/snv/SnvLegendElement.ts", "../plots/disco/snv/SnvArcsMapper.ts", "../plots/disco/cnv/CnvLegend.ts", "../plots/disco/cnv/CnvColorProvider.ts", "../plots/disco/cnv/CnvArcsMapper.ts", "../plots/disco/label/Line.ts", "../plots/disco/label/LabelFactory.ts", "../plots/disco/label/LabelsMapper.ts", "../plots/disco/label/Labels.ts", "../plots/disco/snv/NonExonicSnvArcsMapper.ts", "../plots/disco/loh/GradientColorProvider.ts", "../plots/disco/loh/LohArcMapper.ts", "../plots/disco/ring/Rings.ts", "../plots/disco/waterfall/MutationWaterfallMapper.ts", "../plots/disco/viewmodel/ViewModelProvider.ts", "../plots/disco/viewmodel/ViewModelMapper.ts", "../plots/disco/legend/LegendJSONMapper.ts", "../plots/disco/cnv/renderCnvSourceLegend.ts", "../plots/disco/legend/LegendRenderer.ts", "../plots/disco/chromosome/ChromosomesRenderer.ts", "../plots/disco/label/LabelsRenderer.ts", "../plots/disco/defaults.ts", "../plots/disco/snv/NonExonicSnvRenderer.ts", "../plots/disco/snv/SnvRenderer.ts", "../plots/disco/loh/LohRenderer.ts", "../plots/disco/cnv/CnvBarRenderer.ts", "../plots/disco/cnv/CnvHeatmapRenderer.ts", "../plots/disco/waterfall/MutationWaterfallRenderer.ts", "../plots/disco/Disco.ts"],
4
+ "sourcesContent": ["import * as d3 from 'd3'\nimport type Arc from './Arc.ts'\n\nexport default class FullArcRenderer {\n\tprivate radius: number\n\tprivate width: number\n\tprivate color: string\n\tconstructor(radius: number, width: number, color: string) {\n\t\tthis.radius = radius\n\t\tthis.width = width\n\t\tthis.color = color\n\t}\n\trender(holder: any) {\n\t\tconst donutGenerator = d3.arc<Arc>()\n\t\tconst arc: Arc = {\n\t\t\tstartAngle: 0,\n\t\t\tendAngle: Math.PI * 2,\n\t\t\tinnerRadius: this.radius,\n\t\t\touterRadius: this.radius + this.width,\n\t\t\tcolor: this.color,\n\t\t\ttext: 'No label'\n\t\t}\n\n\t\tconst array: Array<Arc> = []\n\t\tarray.push(arc)\n\t\tconst donutArc = holder.append('g')\n\t\tdonutArc\n\t\t\t.selectAll('path')\n\t\t\t.data(array)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: Arc) => donutGenerator(d))\n\t\t\t.attr('fill', (d: Arc) => d.color)\n\t}\n}\n", "import { Menu } from '#dom/menu'\n\nexport default class MenuProvider {\n\tstatic create(): Menu {\n\t\tconst menu = new Menu({ padding: 5 })\n\t\tmenu.d.style('border', '1px solid #FFF').style('position', 'absolute').style('z-index', 1001)\n\n\t\treturn menu\n\t}\n}\n", "import { FusionLegend } from '#plots/disco/fusion/FusionLegend.ts'\n\nexport default class FusionColorProvider {\n\tstatic getColor(chrA: string, chrB: string) {\n\t\tif (chrA != chrB) {\n\t\t\treturn FusionLegend.Interchromosomal.valueOf()\n\t\t} else {\n\t\t\treturn FusionLegend.Intrachromosomal.valueOf()\n\t\t}\n\t}\n}\n", "import * as d3 from 'd3'\nimport FullArcRenderer from '#plots/disco/arc/FullArcRenderer.ts'\nimport type Fusion from './Fusion.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport FusionColorProvider from '#plots/disco/fusion/FusionColorProvider.ts'\nimport { table2col } from '#dom/table2col'\nimport { dofetch3 } from '#common/dofetch'\nimport { renderEventImages } from '#dom/eventImages'\nimport type { ClientGenome } from '../../../types/clientGenome.ts'\n\nexport type FusionContext = {\n\tdslabel?: string\n\teventImages?: { label: string }\n}\n\nexport default class FusionRenderer {\n\tprivate genome: ClientGenome\n\tprivate context: FusionContext\n\n\tconstructor(genome: ClientGenome, context: FusionContext = {}) {\n\t\tthis.genome = genome\n\t\tthis.context = context\n\t}\n\n\trender(holder: any, fusions: Array<Fusion>, opacity = 1) {\n\t\tlet radius = 0\n\t\tconst fusionsWithTarget = fusions.filter(f => f.target)\n\t\tif (fusionsWithTarget.length > 0) {\n\t\t\tradius = fusionsWithTarget[0].target.radius\n\t\t\tconst fullArcRenderer = new FullArcRenderer(radius, 2, '#6464641A')\n\t\t\tfullArcRenderer.render(holder)\n\t\t} else return\n\n\t\tconst ribbon = d3.ribbon().radius(radius)\n\t\tconst ribbons = holder.selectAll('.chord').data(fusions)\n\n\t\tconst menu = MenuProvider.create()\n\t\tconst createTooltip = this.createTooltip.bind(this)\n\t\tconst showEvents = this.showEvents.bind(this)\n\n\t\tribbons\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('class', 'chord')\n\t\t\t.attr('d', ribbon)\n\t\t\t.attr('fill', (fusion: Fusion) => {\n\t\t\t\treturn FusionColorProvider.getColor(\n\t\t\t\t\tfusion.source.positionInChromosome.chromosome,\n\t\t\t\t\tfusion.target.positionInChromosome.chromosome\n\t\t\t\t)\n\t\t\t})\n\t\t\t.style('opacity', opacity)\n\t\t\t.each(function (this: any, d: Fusion) {\n\t\t\t\tconst path = d3.select(this)\n\t\t\t\t// Keep the clicked graph open independently of hover tooltips.\n\t\t\t\tconst tip = MenuProvider.create()\n\n\t\t\t\tpath.on('click', function (event: MouseEvent) {\n\t\t\t\t\tmenu.clear().hide()\n\t\t\t\t\ttip.clear().show(event.x, event.y)\n\t\t\t\t\tshowEvents(tip.d.append('div'), getOverlappingFusions(fusions, d))\n\t\t\t\t})\n\t\t\t})\n\t\t\t.on('mouseover', function (mouseEvent: MouseEvent, fusion: Fusion) {\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tcreateTooltip(table, getOverlappingFusions(fusions, fusion))\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n\n\tcreateTooltip(table: any, events: Fusion[]) {\n\t\t{\n\t\t\tconst [td1, td2] = table.addRow()\n\t\t\ttd1.text('Data type')\n\t\t\ttd2.append('span').style('margin-left', '5px').text('Fusion transcript')\n\t\t}\n\t\tfor (const fusion of events) {\n\t\t\tconst [td1, td2] = table.addRow()\n\t\t\ttd1.text('Position')\n\t\t\ttd2.append('span').style('margin-left', '5px').text(fusionText(fusion))\n\t\t}\n\t}\n\n\tshowEvents(holder: any, events: Fusion[]) {\n\t\tif (events.length == 1) return this.showEvent(holder, events[0])\n\t\tholder.selectAll('*').remove()\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('padding', '5px')\n\t\t\t.style('font-size', '0.85em')\n\t\t\t.style('opacity', 0.7)\n\t\t\t.text(`${events.length} fusion events, select one:`)\n\t\tfor (const fusion of events) {\n\t\t\tholder\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.attr('data-testid', 'sjpp-disco-fusion-option')\n\t\t\t\t.text(fusionText(fusion))\n\t\t\t\t.on('click', () => this.showEvent(holder, fusion, () => this.showEvents(holder, events)))\n\t\t}\n\t}\n\n\tasync showEvent(holder: any, fusion: Fusion, back?: () => void) {\n\t\tholder.selectAll('*').remove()\n\t\tif (back) {\n\t\t\tholder\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.text('\u00AB All events')\n\t\t\t\t.on('click', back)\n\t\t}\n\t\tholder.append('div').style('padding', '5px').text(fusionText(fusion))\n\t\tconst graph = holder.append('div')\n\t\tif (this.context.eventImages && this.context.dslabel && fusion.eventImage) {\n\t\t\tconst section = holder.append('div').attr('data-testid', 'sjpp-disco-event-images').style('margin', '10px 5px')\n\t\t\tsection.append('div').style('font-weight', 'bold').text(this.context.eventImages!.label)\n\t\t\t// not awaited, so that the fusion graph is rendered without waiting for the image list\n\t\t\tthis.showEventImages(section, fusion)\n\t\t}\n\t\ttry {\n\t\t\tawait makeSvgraph(fusion, graph, this.genome)\n\t\t} catch (e: any) {\n\t\t\tgraph.text('Error: ' + (e.message || e))\n\t\t}\n\t}\n\n\tprivate async showEventImages(section: any, fusion: Fusion) {\n\t\tconst content = section.append('div').text('Loading...')\n\t\ttry {\n\t\t\tconst body = { genome: this.genome.name, dslabel: this.context.dslabel, eventImage: fusion.eventImage }\n\t\t\tconst data = await dofetch3('termdb/mds3/eventImage', { body })\n\t\t\tif (data.error) throw data.error\n\t\t\tconst images = data.images\n\t\t\tif (!Array.isArray(images)) throw 'images[] not array from return'\n\t\t\tif (!images.length) return section.remove()\n\t\t\trenderEventImages(content, images)\n\t\t} catch (e: any) {\n\t\t\tcontent.text('Error: ' + (e.message || e))\n\t\t}\n\t}\n}\n\nfunction fusionText(fusion: Fusion) {\n\treturn `${sideText(fusion.source)} > ${sideText(fusion.target)}`\n}\n\nfunction sideText(side: Fusion['source']) {\n\tconst p = side.positionInChromosome\n\treturn `${side.gene || ''} ${p.chromosome}:${p.position} ${side.strand === '+' ? 'forward' : 'reverse'}`\n}\n\n/** fusions drawn on top of the given one, i.e. both ribbon ends overlap in either orientation */\nexport function getOverlappingFusions(fusions: Fusion[], fusion: Fusion) {\n\tif (!fusion.target) return [fusion]\n\tconst overlaps = (x, y) => x.startAngle < y.endAngle && y.startAngle < x.endAngle\n\treturn fusions.filter(\n\t\tf =>\n\t\t\tf == fusion ||\n\t\t\t(f.target &&\n\t\t\t\t((overlaps(f.source, fusion.source) && overlaps(f.target, fusion.target)) ||\n\t\t\t\t\t(overlaps(f.source, fusion.target) && overlaps(f.target, fusion.source))))\n\t)\n}\n\nasync function makeSvgraph(fusion: Fusion, div: any, genome: ClientGenome) {\n\tconst wait = div.append('div').text('Loading...')\n\tconst svpair = {\n\t\ta: {\n\t\t\tchr: fusion.source.positionInChromosome.chromosome,\n\t\t\tposition: fusion.source.positionInChromosome.position,\n\t\t\tstrand: fusion.source.strand\n\t\t},\n\t\tb: {\n\t\t\tchr: fusion.target.positionInChromosome.chromosome,\n\t\t\tposition: fusion.target.positionInChromosome.position,\n\t\t\tstrand: fusion.target.strand\n\t\t}\n\t}\n\n\tawait getGm(svpair.a, genome.name, fusion.source.gene)\n\tawait getGm(svpair.b, genome.name, fusion.target.gene)\n\n\twait.remove()\n\n\tconst _ = await import('#src/svgraph')\n\t_.default({\n\t\tpairlst: [svpair],\n\t\tgenome,\n\t\tholder: div\n\t})\n}\n\nasync function getGm(p: any, genome: string, name: string) {\n\tconst d = await dofetch3('isoformbycoord', {\n\t\tbody: { genome, chr: p.chr, pos: p.position }\n\t})\n\tif (d.error) throw d.error\n\tconst u = d.lst.find((i: any) => i.isdefault && name === i.name) || d.lst[0]\n\tif (u) {\n\t\tp.name = u.name\n\t\tp.gm = { isoform: u.isoform }\n\t}\n}\n", "import type IRenderer from './IRenderer.ts'\nimport type ViewModel from './viewmodel/ViewModel.ts'\nimport type LegendRenderer from './legend/LegendRenderer.ts'\nimport type { RingType } from './ring/RingType.ts'\nimport FusionRenderer, { type FusionContext } from './fusion/FusionRenderer.ts'\n\nexport class DiscoRenderer {\n\tprivate renders: Map<RingType, IRenderer>\n\tprivate legendRenderer: LegendRenderer\n\tprivate fusionRenderer: FusionRenderer\n\n\tconstructor(\n\t\trenders: Map<RingType, IRenderer>,\n\t\tlegendRenderer: LegendRenderer,\n\t\tgenome: any,\n\t\tfusionContext: FusionContext = {}\n\t) {\n\t\tthis.renders = renders\n\t\tthis.legendRenderer = legendRenderer\n\t\tthis.fusionRenderer = new FusionRenderer(genome, fusionContext)\n\t}\n\n\trender(holder: any, viewModel: ViewModel, onCnvSourceSelect: (index: number) => void) {\n\t\tconst svgDiv = holder.append('div').style('display', 'inline-block').style('font-family', 'Arial')\n\n\t\tconst svg = svgDiv\n\t\t\t.append('svg')\n\t\t\t.attr('id', 'sjpp_disco_plot')\n\t\t\t.attr('data-testid', 'sjpp_disco_plot')\n\t\t\t.attr('width', viewModel.width)\n\t\t\t.attr('height', viewModel.height + viewModel.legendHeight)\n\n\t\tconst mainG = svg\n\t\t\t.append('g')\n\t\t\t.attr('class', 'mainG')\n\t\t\t.attr(\n\t\t\t\t'transform',\n\t\t\t\t`translate(${\n\t\t\t\t\tviewModel.settings.rings.labelLinesInnerRadius + viewModel.settings.rings.labelsToLinesDistance + 100\n\t\t\t\t},${viewModel.height / 2})`\n\t\t\t)\n\n\t\tfor (const [ringType, renderer] of this.renders) {\n\t\t\tconst elements = viewModel.getElements(ringType)\n\t\t\tconst collisions = viewModel.getCollisions(ringType)\n\n\t\t\trenderer.render(mainG, elements, collisions)\n\t\t}\n\n\t\tthis.fusionRenderer.render(mainG, viewModel.fusions, viewModel.settings.Disco.fusionOpacity)\n\n\t\tif (viewModel.settings.Disco.centerText) {\n\t\t\tconst chrRingBbox = mainG.select('[data-testid=\"sjpp_chromosomes_arc_group\"]').node().getBBox()\n\t\t\t/** Truncate longer texts to stay within the center */\n\t\t\tconst text =\n\t\t\t\tviewModel.settings.Disco.centerText.length > 20\n\t\t\t\t\t? viewModel.settings.Disco.centerText.slice(0, 20) + '...'\n\t\t\t\t\t: viewModel.settings.Disco.centerText\n\t\t\tconst textElem = mainG.append('text').attr('class', 'sjpp-disco-center-text').text(text)\n\t\t\tconst textBbox = textElem.node().getBBox()\n\t\t\ttextElem.attr('transform', `translate(${chrRingBbox.x + chrRingBbox.width / 2 - textBbox.width / 2},0)`)\n\t\t}\n\n\t\tthis.legendRenderer.render(\n\t\t\tmainG,\n\t\t\tviewModel.legend,\n\t\t\t-1 * (viewModel.settings.rings.labelLinesInnerRadius + viewModel.settings.rings.labelsToLinesDistance + 75),\n\t\t\tviewModel.width,\n\t\t\tviewModel.height / 2,\n\t\t\tviewModel,\n\t\t\tonCnvSourceSelect\n\t\t)\n\t}\n}\n", "import { getNormalRoot } from '#filter'\n\nexport class DiscoInteractions {\n\tdiscoApp: any\n\n\tdownloadClickListener: (d: any) => void\n\tgeneClickListener: (gene: string, mnames: Array<string>) => void\n\tcolorScaleNumericInputsCallback: (obj: {\n\t\tcutoffMode: string\n\t\tmin?: number\n\t\tmax?: number\n\t\tpercentile?: number\n\t}) => void\n\tonMutationWaterfallColorChange: (color: string) => void\n\n\tconstructor(discoApp: any) {\n\t\t// note: discoApp will be set when discoApp.state{} is created\n\t\tthis.discoApp = discoApp\n\n\t\tthis.downloadClickListener = (svg: any) => {\n\t\t\tconst downloadImgName = this.discoApp.state.settings.downloadImgName || 'disco.plot'\n\t\t\tconst a = document.createElement('a')\n\t\t\tdocument.body.appendChild(a)\n\n\t\t\ta.addEventListener(\n\t\t\t\t'click',\n\t\t\t\t() => {\n\t\t\t\t\t// must use arrow function but not \"function()\", so this.downloadImgName is accessible\n\t\t\t\t\tconst serializer = new XMLSerializer()\n\t\t\t\t\tconst svg_blob = new Blob([serializer.serializeToString(svg)], {\n\t\t\t\t\t\ttype: 'image/svg+xml'\n\t\t\t\t\t})\n\t\t\t\t\ta.download = downloadImgName + '.svg'\n\t\t\t\t\ta.href = URL.createObjectURL(svg_blob)\n\t\t\t\t\tdocument.body.removeChild(a)\n\t\t\t\t},\n\t\t\t\tfalse\n\t\t\t)\n\t\t\ta.click()\n\t\t}\n\n\t\tthis.geneClickListener = async (gene: string, mnames: Array<string>) => {\n\t\t\tconst { filter, filter0 } = this.discoApp.app.getState().termfilter\n\t\t\tconst arg = {\n\t\t\t\tholder: this.discoApp.app.opts.holder,\n\t\t\t\tgenome: this.discoApp.app.opts.state.args.genome,\n\t\t\t\tnobox: true,\n\t\t\t\tquery: gene,\n\t\t\t\ttklst: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'mds3',\n\t\t\t\t\t\tdslabel: this.discoApp.app.opts.state.vocab.dslabel,\n\t\t\t\t\t\thlaachange: mnames.join(','),\n\t\t\t\t\t\tfilter0,\n\t\t\t\t\t\tfilterObj: getNormalRoot(filter) // must not pass filter as frozen. pass unfrozen, normalized copy so mds3 code will work\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t\tconst _ = await import('#src/block.init')\n\t\t\tawait _.default(arg)\n\t\t}\n\n\t\t/** Corresponds to the numericInputs callback in dom/ColorScale.ts\n\t\t * Used for CNV legend items only. */\n\t\tthis.colorScaleNumericInputsCallback = async (obj: {\n\t\t\tcutoffMode: string\n\t\t\tmin?: number\n\t\t\tmax?: number\n\t\t\tpercentile?: number\n\t\t}) => {\n\t\t\tconst callAppDispatch = (settings: Record<string, any>) => {\n\t\t\t\tthis.discoApp.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: this.discoApp.id,\n\t\t\t\t\tconfig: { settings: { Disco: Object.assign({ cnvCutoffMode: obj.cutoffMode }, settings) } }\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (obj.cutoffMode == 'auto') {\n\t\t\t\tif (obj.min == null || obj.max == null)\n\t\t\t\t\tthrow new Error('Color scale must return min and max if cutoffMode \"auto\"')\n\t\t\t\tcallAppDispatch({\n\t\t\t\t\tcnvCapping: this.discoApp.state.settings.cnv.capping,\n\t\t\t\t\tcnvPercentile: this.discoApp.state.settings.cnv.percentile\n\t\t\t\t})\n\t\t\t} else if (obj.cutoffMode == 'fixed') {\n\t\t\t\tif (obj.min == null || obj.max == null)\n\t\t\t\t\tthrow new Error('Color scale must return min and max if cutoffMode \"fixed\"')\n\t\t\t\tconst diffValue = obj.max !== this.discoApp.state.settings.cnv.capping ? obj.max : Math.abs(obj.min)\n\t\t\t\tcallAppDispatch({\n\t\t\t\t\tcnvCapping: diffValue\n\t\t\t\t})\n\t\t\t} else if (obj.cutoffMode == 'percentile') callAppDispatch({ cnvPercentile: obj.percentile })\n\t\t\telse throw new Error('Unknown cutoff mode returned from dom/ColorScale')\n\t\t}\n\n\t\tthis.onMutationWaterfallColorChange = (color: string) => {\n\t\t\tthis.discoApp.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: this.discoApp.id,\n\t\t\t\tconfig: { settings: { Disco: { mutationWaterfallColor: color } } }\n\t\t\t})\n\t\t}\n\t}\n}\n", "import type Chromosome from './Chromosome.ts'\nimport type Settings from '../Settings.ts'\n\nexport default class Reference {\n\tchromosomes: Array<Chromosome> = []\n\tchromosomesOrder: Array<string> = []\n\ttotalSize: number\n\n\ttotalPadAngle: number\n\ttotalChromosomesAngle: number\n\n\tprivate keysArray: Array<string> = []\n\tprivate totalSizeArray: Array<number> = []\n\tprivate chrSizesArray: Array<number> = []\n\n\tprivate settings: Settings\n\n\t/**\n\t * Creates a Reference object that contains information about chromosomes.\n\t * @param settings State settings\n\t * @param chromosomes Chromosome order. This function formats into an obj with `chr` removed.\n\t * @param chromosomeOverride Obj of chromsome keys and sizes. Filtered to remove hidden chromosomes in settings.\n\t */\n\tconstructor(\n\t\tsettings: Settings,\n\t\tchromosomes: string[] | { [chromosome: string]: number },\n\t\tchromosomeOverride?: { [chromosome: string]: number }\n\t) {\n\t\tconst chrSizes = chromosomeOverride || chromosomes\n\n\t\tthis.settings = settings\n\n\t\tthis.chromosomesOrder = []\n\t\tlet totalSize = 0\n\t\tthis.totalPadAngle = Object.keys(chrSizes).length * this.settings.padAngle\n\t\tthis.totalChromosomesAngle = 2 * Math.PI - this.totalPadAngle\n\n\t\tfor (const chr in chrSizes) {\n\t\t\tconst key = chr.slice(0, 3) === 'chr' ? chr.slice(3) : chr\n\t\t\tthis.chromosomesOrder.push(chr)\n\t\t\tthis.keysArray.push(key)\n\t\t\tthis.totalSizeArray.push(totalSize)\n\t\t\tthis.chrSizesArray.push(chrSizes[chr])\n\n\t\t\ttotalSize += chrSizes[chr]\n\t\t}\n\n\t\tthis.totalSize = totalSize\n\n\t\tlet lastAngle = 0\n\n\t\tfor (let i = 0; i < this.keysArray.length; i++) {\n\t\t\tconst chromosomeAngle = this.totalChromosomesAngle * (this.chrSizesArray[i] / totalSize)\n\n\t\t\tconst startAngle = i == 0 ? this.settings.padAngle / 2 : lastAngle + this.settings.padAngle\n\t\t\tconst endAngle =\n\t\t\t\ti == 0 ? this.settings.padAngle / 2 + chromosomeAngle : lastAngle + this.settings.padAngle + chromosomeAngle\n\t\t\tconst chromosome: Chromosome = {\n\t\t\t\tstart: this.totalSizeArray[i],\n\t\t\t\tsize: this.chrSizesArray[i],\n\t\t\t\tfactor: 1,\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tangle: (startAngle + endAngle) / 2,\n\t\t\t\tinnerRadius: this.settings.rings.chromosomeInnerRadius,\n\t\t\t\touterRadius: this.settings.rings.chromosomeInnerRadius + this.settings.rings.chromosomeWidth,\n\t\t\t\tcolor: '#AAA',\n\t\t\t\ttext: this.keysArray[i]\n\t\t\t}\n\n\t\t\tthis.chromosomes.push(chromosome)\n\n\t\t\tif (chromosome.endAngle != null) {\n\t\t\t\tlastAngle = chromosome.endAngle\n\t\t\t}\n\t\t}\n\t}\n}\n", "import type Data from './Data.ts'\n\nexport default class DataObjectMapper {\n\tprivate sampleName: string\n\tprivate prioritizedGenes: Array<string>\n\n\tconstructor(sampleName: string, prioritizedGenes: Array<string>) {\n\t\tthis.sampleName = sampleName\n\t\tthis.prioritizedGenes = prioritizedGenes\n\t}\n\n\tmap(dObject: any): Data {\n\t\treturn {\n\t\t\tdt: dObject.dt,\n\t\t\tmname: dObject.mname,\n\t\t\tmClass: dObject.class,\n\t\t\tgene: dObject.gene,\n\t\t\tchr: dObject.chr,\n\t\t\tref: dObject.ref,\n\t\t\talt: dObject.alt,\n\t\t\tvafs: dObject.vafs,\n\t\t\tposition: dObject.pos ? dObject.pos : dObject.position,\n\t\t\tposchr: dObject.poschr,\n\t\t\tposbins: dObject.posbins,\n\t\t\tposlabel: dObject.poslabel,\n\t\t\tsampleName: this.sampleName,\n\t\t\tssm_id: dObject.ssm_id,\n\t\t\tstart: dObject.start,\n\t\t\tstop: dObject.stop,\n\t\t\tvalue: dObject.value,\n\t\t\tsegmean: dObject.segmean,\n\t\t\tisPrioritized: this.prioritizedGenes.some(cancerGene => cancerGene == dObject.gene),\n\t\t\tchrA: dObject.chrA,\n\t\t\tchrB: dObject.chrB,\n\t\t\tgeneA: dObject.geneA,\n\t\t\tgeneB: dObject.geneB,\n\t\t\tposA: dObject.posA,\n\t\t\tposB: dObject.posB,\n\t\t\tstrandA: dObject.strandA,\n\t\t\tstrandB: dObject.strandB,\n\t\t\teventImage: dObject.eventImage\n\t\t}\n\t}\n}\n", "// import Data from '#plots/disco/data/Data.ts'\n\nexport class PercentileMapper {\n\tmap(data: Array<number>, percentile: number) {\n\t\treturn this.calculatePercentileForPositivesAndNegatives(data, percentile)\n\t}\n\n\tprivate calculatePercentileForPositivesAndNegatives(\n\t\tdata: Array<number>,\n\t\tpercentile: number\n\t): {\n\t\tpositive: number\n\t\tnegative: number\n\t} {\n\t\t// Filter positive and negative numbers\n\t\tconst positives = data.filter(x => x > 0)\n\t\tconst negatives = data.filter(x => x < 0).map(x => -1 * x)\n\n\t\tlet positive = NaN\n\t\tlet negative = NaN\n\n\t\tif (positives.length > 0) {\n\t\t\tpositive = this.calculatePercentile(positives, percentile)\n\t\t}\n\n\t\tif (negatives.length > 0) {\n\t\t\tnegative = -1 * this.calculatePercentile(negatives, percentile)\n\t\t}\n\n\t\treturn { positive: positive, negative: negative }\n\t}\n\n\tprivate calculatePercentile(data: Array<number>, percentile: number): number {\n\t\tif (data.length === 0) {\n\t\t\tthrow new Error('Array must contain at least one element.')\n\t\t}\n\n\t\tconst sortedValues = data.sort((a, b) => a - b)\n\t\tconst index = (percentile / 100) * (sortedValues.length - 1)\n\n\t\tconst lowerIndex = Math.floor(index)\n\t\tconst upperIndex = Math.ceil(index)\n\t\tconst fraction = index - lowerIndex\n\n\t\tif (lowerIndex === upperIndex) {\n\t\t\treturn sortedValues[lowerIndex]\n\t\t}\n\n\t\treturn sortedValues[lowerIndex] + fraction * (sortedValues[upperIndex] - sortedValues[lowerIndex])\n\t}\n}\n", "import { fillbar } from '#dom'\nimport type Data from '#plots/disco/data/Data.ts'\n\nexport type ReadCountValue = string | number | undefined\nexport type VafEntry = {\n\tlabel: string\n\trefCount?: ReadCountValue\n\ttotalCount?: ReadCountValue\n\taltCount: ReadCountValue\n}\n\nexport function getIntegerCount(v: ReadCountValue): number | null {\n\tif (Number.isInteger(v)) return v as number\n\tif (typeof v == 'string' && /^-?\\d+$/.test(v)) {\n\t\tconst n = Number(v)\n\t\tif (Number.isInteger(n)) return n\n\t}\n\treturn null\n}\n\nexport function getReadCounts(\n\trefCountValue: ReadCountValue,\n\taltCountValue: ReadCountValue,\n\ttotalCountValue?: ReadCountValue\n) {\n\tconst altCount = getIntegerCount(altCountValue)\n\tif (altCount == null || altCount < 0) return null\n\n\tconst totalCount = getIntegerCount(totalCountValue)\n\tif (totalCount != null) {\n\t\tif (totalCount <= 0 || totalCount < altCount) return null\n\t\treturn { altCount, refCount: totalCount - altCount, totalCount }\n\t}\n\n\tconst refCount = getIntegerCount(refCountValue)\n\tif (refCount == null || refCount < 0 || refCount + altCount <= 0) return null\n\treturn { altCount, refCount, totalCount: refCount + altCount }\n}\n\nexport function hasValidReadCounts(\n\trefCountValue: ReadCountValue,\n\taltCountValue: ReadCountValue,\n\ttotalCountValue?: ReadCountValue\n): boolean {\n\treturn getReadCounts(refCountValue, altCountValue, totalCountValue) != null\n}\n\nexport function getVafEntries(vafs: Data['vafs']): VafEntry[] {\n\tconst entries: VafEntry[] = []\n\tif (Array.isArray(vafs)) {\n\t\tfor (const vaf of vafs) {\n\t\t\tconst label = vaf?.id || vaf?.name\n\t\t\tconst refCount = vaf?.refCount\n\t\t\tconst totalCount = vaf?.totalCount\n\t\t\tconst altCount = vaf?.altCount\n\t\t\tif (!label || altCount == null || (refCount == null && totalCount == null)) continue\n\t\t\tconst entry: VafEntry = { label, altCount }\n\t\t\tif (refCount != null) entry.refCount = refCount\n\t\t\tif (totalCount != null) entry.totalCount = totalCount\n\t\t\tentries.push(entry)\n\t\t}\n\t}\n\treturn entries\n}\n\nexport function getNumericFraction(v: ReadCountValue): number | null {\n\tif (typeof v != 'number' && typeof v != 'string') return null\n\tconst n = Number(v)\n\treturn Number.isFinite(n) && n >= 0 && n <= 1 ? n : null\n}\n\nexport function getMutationFractions(vafs: Data['vafs']): number[] {\n\tconst fractions: number[] = []\n\tif (!Array.isArray(vafs)) return fractions\n\n\tfor (const vaf of vafs) {\n\t\tconst explicitFraction = getNumericFraction(vaf?.fraction ?? vaf?.mutationFraction)\n\t\tif (explicitFraction != null) {\n\t\t\tfractions.push(explicitFraction)\n\t\t\tcontinue\n\t\t}\n\n\t\tconst counts = getReadCounts(vaf?.refCount, vaf?.altCount, vaf?.totalCount)\n\t\tif (!counts) continue\n\t\tfractions.push(counts.altCount / counts.totalCount)\n\t}\n\treturn fractions\n}\n\nexport function getMaxMutationFraction(vafs: Data['vafs']): number | null {\n\tconst fractions = getMutationFractions(vafs)\n\treturn fractions.length ? Math.max(...fractions) : null\n}\n\nexport function hasAnyValidVafEntry(vafs: Data['vafs']): boolean {\n\treturn getVafEntries(vafs).some(vaf => hasValidReadCounts(vaf.refCount, vaf.altCount, vaf.totalCount))\n}\n\nexport function appendVafBar(\n\ttd2: any,\n\trefCountValue: ReadCountValue,\n\taltCountValue: ReadCountValue,\n\tlabel = 'VAF',\n\ttotalCountValue?: ReadCountValue\n) {\n\tconst counts = getReadCounts(refCountValue, altCountValue, totalCountValue)\n\tif (!counts) return\n\n\tconst fraction = counts.altCount / counts.totalCount\n\tconst div = td2\n\t\t.append('div')\n\t\t.style('margin-left', '5px')\n\t\t.style('margin-top', '4px')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '6px')\n\n\tdiv.append('span').style('font-size', '0.8em').style('color', '#555').text(label)\n\tfillbar(div, { f: fraction, v1: counts.altCount, v2: counts.totalCount })\n}\n\nexport function appendVafBars(td2: any, vafs: Data['vafs']) {\n\tfor (const vaf of getVafEntries(vafs)) {\n\t\tif (!hasValidReadCounts(vaf.refCount, vaf.altCount, vaf.totalCount)) continue\n\t\tappendVafBar(td2, vaf.refCount, vaf.altCount, vaf.label, vaf.totalCount)\n\t}\n}\n", "import type Data from './Data.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport DataObjectMapper from './DataObjectMapper.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport { ViewModelMapper } from '#plots/disco/viewmodel/ViewModelMapper.ts'\nimport type { DataHolder } from '#plots/disco/data/DataHolder.ts'\nimport { dtsnvindel, dtfusionrna, dtsv, dtcnv, dtloh, dtitd } from '#shared/common.js'\nimport { PercentileMapper } from '#plots/disco/data/PercentileMapper.ts'\nimport type { MutationWaterfallDatum } from '#plots/disco/waterfall/MutationWaterfallDatum.ts'\nimport { getMaxMutationFraction } from '#plots/disco/snv/vafTooltip.ts'\n\nexport default class DataMapper {\n\t// remove fields and extract filters to seperate classes\n\n\tprivate labelData: Array<Data> = []\n\n\tprivate nonExonicSnvData: Array<Data> = []\n\tprivate nonExonicInnerRadius = 0\n\n\tprivate snvRingDataMap: Map<number, Array<Data>> = new Map()\n\tprivate snvInnerRadius = 0\n\n\tprivate snvData: Array<Data> = []\n\tprivate bpx = 0\n\tprivate onePxArcAngle = 0\n\tprivate filteredSnvData: Array<Data> = []\n\tprivate filteredSnvCountByChr: Map<string, number> = new Map()\n\n\tprivate lohData: Array<Data> = []\n\tprivate lohInnerRadius = 0\n\n\tprivate cnvData: Array<Data> = []\n\tprivate cnvInnerRadius = 0\n\n\tprivate fusionData: Array<Data> = []\n\tprivate fusionRadius = 0\n\n\tprivate hasPrioritizedGenes = false\n\tprivate hasWaterfallEligibleChromosome = false\n\n\tprivate invalidEntries: { dataType: string; reason: string }[] = []\n\n\tprivate cnvLossMaxValue = 0\n\tprivate cnvGainMaxValue = 0\n\tprivate gainCapped: number\n\tprivate lossCapped: number\n\tprivate cappedCnvMaxAbsValue?: number\n\tprivate percentilePositive = 0\n\tprivate percentileNegative = 0\n\tprivate cnvMaxPercentileAbs = 0\n\n\tprivate mutationWaterfallData: Array<MutationWaterfallDatum> = []\n\tprivate hasMutationFractionData = false\n\tprivate mutationWaterfallInnerRadius = 0\n\tprivate mutationWaterfallRangeMin = Infinity\n\tprivate mutationWaterfallRangeMax = -Infinity\n\n\tprivate lohMaxValue?: number = undefined\n\tprivate lohMinValue?: number = undefined\n\n\tprivate settings: Settings\n\tprivate reference: Reference\n\tprivate sample: string\n\n\tprivate nonExonicFilter: (data: Data) => boolean\n\tprivate snvRingFilter: (data: Data) => boolean\n\tprivate dataObjectMapper: DataObjectMapper\n\tprivate lastInnerRadious: number\n\tprivate excludedChromosomes: string[]\n\n\tprivate snvFilter = (data: Data) => data.dt == dtsnvindel\n\tprivate fusionFilter = (data: Data) => data.dt == dtfusionrna || data.dt == dtsv\n\n\tprivate cnvFilter = (data: Data) => data.dt == dtcnv || data.dt == dtitd\n\tprivate lohFilter = (data: Data) => data.dt == dtloh\n\n\tprivate compareData = (a, b) => {\n\t\tconst chrDiff = this.reference.chromosomesOrder.indexOf(a.chr) - this.reference.chromosomesOrder.indexOf(b.chr)\n\t\tif (chrDiff != 0) {\n\t\t\treturn chrDiff\n\t\t}\n\n\t\tconst aPos = a.pos ? a.pos : a.start\n\n\t\tconst bPos = b.pos ? b.pos : b.start\n\n\t\treturn aPos - bPos\n\t}\n\n\tconstructor(settings: Settings, reference: Reference, sample: string, prioritizedGenes: Array<string> = []) {\n\t\tthis.settings = settings\n\t\tthis.reference = reference\n\t\tthis.sample = sample\n\t\tthis.excludedChromosomes = this.settings.Disco.hiddenChromosomes\n\t\tthis.lastInnerRadious = this.settings.rings.chromosomeInnerRadius\n\n\t\tthis.gainCapped = this.settings.Disco.cnvCapping\n\t\tthis.lossCapped = -1 * this.settings.Disco.cnvCapping\n\n\t\tthis.nonExonicFilter = (data: Data) => {\n\t\t\tif (prioritizedGenes.length > 0 && this.settings.Disco.prioritizeGeneLabelsByGeneSets) {\n\t\t\t\treturn (\n\t\t\t\t\tprioritizedGenes.includes(data.gene) &&\n\t\t\t\t\tsettings.rings.nonExonicFilterValues.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn settings.rings.nonExonicFilterValues.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t}\n\t\t}\n\n\t\tthis.snvRingFilter = (data: Data) => {\n\t\t\tif (prioritizedGenes.length > 0 && this.settings.Disco.prioritizeGeneLabelsByGeneSets) {\n\t\t\t\treturn (\n\t\t\t\t\tprioritizedGenes.includes(data.gene) &&\n\t\t\t\t\tsettings.rings.snvRingFilters.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn settings.rings.snvRingFilters.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t}\n\t\t}\n\n\t\tthis.dataObjectMapper = new DataObjectMapper(sample, prioritizedGenes)\n\t}\n\n\tmap(data: any) {\n\t\tconst dataArray: Array<Data> = []\n\n\t\tthis.filteredSnvCountByChr.clear()\n\t\tthis.hasWaterfallEligibleChromosome = false\n\t\tthis.mutationWaterfallData = []\n\t\tthis.mutationWaterfallInnerRadius = 0\n\t\tthis.mutationWaterfallRangeMin = Infinity\n\t\tthis.mutationWaterfallRangeMax = -Infinity\n\t\tthis.hasMutationFractionData = false\n\n\t\tdata.forEach(dObject => {\n\t\t\tif (dObject.dt == dtsnvindel && getMaxMutationFraction(dObject.vafs) != null) {\n\t\t\t\tthis.hasMutationFractionData = true\n\t\t\t}\n\t\t\tconst index = this.reference.chromosomesOrder.indexOf(dObject.chr)\n\t\t\tconst indexA = this.reference.chromosomesOrder.indexOf(dObject.chrA)\n\t\t\tconst indexB = this.reference.chromosomesOrder.indexOf(dObject.chrB)\n\n\t\t\tif (dObject.dt == dtsnvindel) {\n\t\t\t\tif (index != -1 && this.snvData.length < this.settings.snv.maxMutationCount) {\n\t\t\t\t\tconst pos = dObject.pos ?? dObject.position\n\t\t\t\t\tconst chrSize = this.reference.chromosomes[index].size\n\t\t\t\t\t// ensure position is numeric and within chromosome range\n\t\t\t\t\tif (Number.isFinite(pos) && pos >= 0 && pos <= chrSize) {\n\t\t\t\t\t\tthis.addData(dObject, dataArray)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.invalidEntries.push({ dataType: 'SNV', reason: `Position ${pos} outside of ${dObject.chr}` })\n\t\t\t\t\t}\n\t\t\t\t} else if (index == -1) {\n\t\t\t\t\tif (!this.excludedChromosomes.includes(dObject.chr)) {\n\t\t\t\t\t\tthis.invalidEntries.push({ dataType: 'SNV', reason: `Unknown chr ${dObject.chr}` })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (dObject.dt == dtfusionrna || dObject.dt == dtsv) {\n\t\t\t\tif (indexA != -1 && indexB != -1) {\n\t\t\t\t\t// show sv/fusion event with valid A/B breakpoints.\n\t\t\t\t\tconst posA = dObject.posA\n\t\t\t\t\tconst posB = dObject.posB\n\t\t\t\t\tconst chrSizeA = this.reference.chromosomes[indexA].size\n\t\t\t\t\tconst chrSizeB = this.reference.chromosomes[indexB].size\n\t\t\t\t\t// verify that both breakpoints are numeric and within chromosome ranges\n\t\t\t\t\tif (\n\t\t\t\t\t\tNumber.isFinite(posA) &&\n\t\t\t\t\t\tNumber.isFinite(posB) &&\n\t\t\t\t\t\tposA >= 0 &&\n\t\t\t\t\t\tposA <= chrSizeA &&\n\t\t\t\t\t\tposB >= 0 &&\n\t\t\t\t\t\tposB <= chrSizeB\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.addData(dObject, dataArray)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst reasonParts: string[] = []\n\t\t\t\t\t\tif (!(Number.isFinite(posA) && posA >= 0 && posA <= chrSizeA))\n\t\t\t\t\t\t\treasonParts.push(`Position ${posA} outside of ${dObject.chrA}`)\n\t\t\t\t\t\tif (!(Number.isFinite(posB) && posB >= 0 && posB <= chrSizeB))\n\t\t\t\t\t\t\treasonParts.push(`Position ${posB} outside of ${dObject.chrB}`)\n\t\t\t\t\t\tthis.invalidEntries.push({ dataType: 'Fusion', reason: reasonParts.join('; ') })\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst missing: string[] = []\n\t\t\t\t\tif (indexA == -1 && !this.excludedChromosomes.includes(dObject.chrA)) missing.push(dObject.chrA)\n\t\t\t\t\tif (indexB == -1 && !this.excludedChromosomes.includes(dObject.chrB)) missing.push(dObject.chrB)\n\t\t\t\t\tif (missing.length) this.invalidEntries.push({ dataType: 'Fusion', reason: 'Unknown chr in fusion' })\n\t\t\t\t}\n\t\t\t} else if ([dtcnv, dtloh, dtitd].includes(Number(dObject.dt))) {\n\t\t\t\tconst idx = this.reference.chromosomesOrder.indexOf(dObject.chr)\n\t\t\t\tconst dataType = dObject.dt == dtcnv ? 'CNV' : dObject.dt == dtloh ? 'LOH' : 'ITD'\n\t\t\t\tif (dObject.chr && idx != -1) {\n\t\t\t\t\tconst chrSize = this.reference.chromosomes[idx].size\n\t\t\t\t\tconst start = dObject.start\n\t\t\t\t\tconst stop = dObject.stop\n\t\t\t\t\t// validate CNV/LOH/ITD boundaries are numeric and fall within chromosome range\n\t\t\t\t\tif (Number.isFinite(start) && Number.isFinite(stop) && start >= 0 && stop <= chrSize && start <= stop) {\n\t\t\t\t\t\tthis.addData(dObject, dataArray)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.invalidEntries.push({\n\t\t\t\t\t\t\tdataType,\n\t\t\t\t\t\t\treason: `Position ${start}-${stop} outside of ${dObject.chr}`\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.excludedChromosomes.includes(dObject.chr)) {\n\t\t\t\t\t\tthis.invalidEntries.push({\n\t\t\t\t\t\t\tdataType,\n\t\t\t\t\t\t\treason: `Unknown chr ${dObject.chr}`\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Error('Unknown mutation type!')\n\t\t\t}\n\t\t})\n\n\t\tconst sortedData = dataArray.sort(this.compareData)\n\n\t\tif (this.settings.rings.nonExonicRingEnabled) {\n\t\t\tsortedData.forEach(data => {\n\t\t\t\tthis.filterNonExonicSnvData(data)\n\t\t\t})\n\t\t}\n\n\t\tif (this.nonExonicSnvData.length > 0) {\n\t\t\tthis.nonExonicInnerRadius = this.lastInnerRadious - this.settings.rings.nonExonicRingWidth\n\t\t\tthis.lastInnerRadious = this.nonExonicInnerRadius\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterSnvs(data)\n\t\t})\n\n\t\tthis.hasWaterfallEligibleChromosome = Array.from(this.filteredSnvCountByChr.values()).some(count => count >= 2)\n\n\t\tif (this.settings.Disco.mutationWaterfallPlot && this.hasWaterfallEligibleChromosome) {\n\t\t\tthis.prepareMutationWaterfallData()\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterLohs(data)\n\t\t})\n\n\t\tif (this.lohData.length > 0) {\n\t\t\tthis.lohInnerRadius = this.lastInnerRadious - this.settings.rings.lohRingWidth\n\t\t\tthis.lastInnerRadious = this.lohInnerRadius\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterCnvs(data)\n\t\t})\n\n\t\tif (this.cnvData.length > 0) {\n\t\t\tthis.cnvInnerRadius = this.lastInnerRadious - this.settings.rings.cnvRingWidth\n\t\t\tthis.lastInnerRadious = this.cnvInnerRadius\n\n\t\t\tthis.cappedCnvMaxAbsValue = Math.min(\n\t\t\t\tthis.settings.Disco.cnvCapping,\n\t\t\t\tMath.max(\n\t\t\t\t\tMath.abs(DataMapper.capMaxValue(this.cnvLossMaxValue, this.gainCapped, this.lossCapped)),\n\t\t\t\t\tMath.abs(DataMapper.capMaxValue(this.cnvGainMaxValue, this.gainCapped, this.lossCapped))\n\t\t\t\t)\n\t\t\t)\n\n\t\t\tconst cnvValues = this.cnvData.filter(data => data.dt == dtcnv).map(data => data.value)\n\t\t\tif (cnvValues.length) {\n\t\t\t\tconst percentilePair = new PercentileMapper().map(cnvValues, this.settings.Disco.cnvPercentile)\n\t\t\t\tthis.percentilePositive = DataMapper.capMaxValue(percentilePair.positive, this.gainCapped, this.lossCapped)\n\t\t\t\tthis.percentileNegative = DataMapper.capMaxValue(percentilePair.negative, this.gainCapped, this.lossCapped)\n\n\t\t\t\tthis.cnvMaxPercentileAbs = Math.min(\n\t\t\t\t\tthis.settings.Disco.cnvCapping,\n\t\t\t\t\tMath.max(this.percentilePositive, Math.abs(this.percentileNegative))\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterFusion(data)\n\t\t})\n\n\t\tif (this.fusionData.length > 0) {\n\t\t\tthis.fusionRadius = this.lastInnerRadious\n\t\t}\n\n\t\tconst dataHolder: DataHolder = {\n\t\t\tlabelData: this.labelData,\n\t\t\tnonExonicSnvData: this.nonExonicSnvData,\n\t\t\tnonExonicInnerRadius: this.nonExonicInnerRadius,\n\t\t\tsnvRingDataMap: this.snvRingDataMap,\n\t\t\tsnvInnerRadius: this.snvInnerRadius,\n\n\t\t\tsnvData: this.snvData,\n\t\t\tbpx: this.bpx,\n\t\t\tonePxArcAngle: this.onePxArcAngle,\n\t\t\tfilteredSnvData: this.filteredSnvData,\n\n\t\t\tlohData: this.lohData,\n\t\t\tlohInnerRadius: this.lohInnerRadius,\n\n\t\t\tcnvData: this.cnvData,\n\t\t\tcnvInnerRadius: this.cnvInnerRadius,\n\n\t\t\tfusionData: this.fusionData,\n\t\t\tfusionRadius: this.fusionRadius,\n\n\t\t\thasPrioritizedGenes: this.hasPrioritizedGenes,\n\t\t\thasWaterfallEligibleChromosome: this.hasWaterfallEligibleChromosome,\n\n\t\t\tcnvGainMaxValue: this.cnvGainMaxValue,\n\t\t\tcnvLossMaxValue: this.cnvLossMaxValue,\n\t\t\tcappedCnvMaxAbsValue: this.cappedCnvMaxAbsValue,\n\t\t\tpercentilePositive: this.percentilePositive,\n\t\t\tpercentileNegative: this.percentileNegative,\n\t\t\tcnvMaxPercentileAbs: this.cnvMaxPercentileAbs,\n\n\t\t\tlohMaxValue: this.lohMaxValue,\n\t\t\tlohMinValue: this.lohMinValue,\n\n\t\t\thasMutationFractionData: this.hasMutationFractionData,\n\n\t\t\tmutationWaterfallData: this.mutationWaterfallData,\n\t\t\tmutationWaterfallInnerRadius: this.mutationWaterfallInnerRadius,\n\t\t\tmutationWaterfallLogRange: this.mutationWaterfallData.length\n\t\t\t\t? { min: this.mutationWaterfallRangeMin, max: this.mutationWaterfallRangeMax }\n\t\t\t\t: undefined,\n\n\t\t\tinvalidDataInfo: {\n\t\t\t\tentries: this.invalidEntries,\n\t\t\t\terrorMsg: `Entries listed above were skipped due to invalid or unsupported chromosome information.`\n\t\t\t}\n\t\t}\n\n\t\treturn dataHolder\n\t}\n\n\tprivate addData(dObject, dataArray: Array<Data>) {\n\t\tconst instance = this.dataObjectMapper.map(dObject)\n\n\t\tif (instance.isPrioritized) {\n\t\t\tthis.hasPrioritizedGenes = true\n\t\t}\n\n\t\tdataArray.push(instance)\n\t}\n\n\tprivate filterNonExonicSnvData(data: Data) {\n\t\tif (this.snvFilter(data) && this.passesMutationFractionFilter(data)) {\n\t\t\tif (this.settings.rings.nonExonicRingEnabled && this.nonExonicFilter(data)) {\n\t\t\t\tthis.nonExonicSnvData.push(data)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate filterSnvs(data: Data) {\n\t\tif (this.snvFilter(data)) {\n\t\t\tthis.snvData.push(data)\n\n\t\t\tif (this.passesMutationFractionFilter(data) && this.snvRingFilter(data)) {\n\t\t\t\tif (this.snvInnerRadius == 0) {\n\t\t\t\t\tthis.snvInnerRadius = this.lastInnerRadious - this.settings.rings.snvRingWidth\n\t\t\t\t\tthis.lastInnerRadious = this.snvInnerRadius\n\n\t\t\t\t\t// number of base pairs per pixel\n\t\t\t\t\t// TODO verify place of bpx calculation\n\t\t\t\t\tthis.bpx = Math.floor(this.reference.totalSize / (this.reference.totalChromosomesAngle * this.snvInnerRadius))\n\t\t\t\t\tthis.onePxArcAngle = 1 / this.snvInnerRadius\n\t\t\t\t}\n\n\t\t\t\tthis.filteredSnvData.push(data)\n\t\t\t\tthis.labelData.push(data)\n\n\t\t\t\tconst currentCount = this.filteredSnvCountByChr.get(data.chr) || 0\n\t\t\t\tthis.filteredSnvCountByChr.set(data.chr, currentCount + 1)\n\n\t\t\t\tconst arcAngle = this.calculateArcAngle(data)\n\t\t\t\tlet dataArray = this.snvRingDataMap.get(arcAngle)\n\t\t\t\tif (!dataArray) {\n\t\t\t\t\tdataArray = new Array<Data>()\n\t\t\t\t}\n\t\t\t\tdataArray.push(data)\n\t\t\t\tthis.snvRingDataMap.set(arcAngle, dataArray)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate passesMutationFractionFilter(data: Data): boolean {\n\t\t// If the dataset has no usable mutation-fraction info anywhere, don't apply the threshold.\n\t\tif (!this.hasMutationFractionData) return true\n\t\tconst minMutationFraction = this.settings.Disco.minMutationFraction || 0\n\t\tif (minMutationFraction <= 0) return true\n\n\t\tconst fraction = getMaxMutationFraction(data.vafs)\n\t\treturn fraction != null && fraction >= minMutationFraction\n\t}\n\n\tprivate filterFusion(data: Data) {\n\t\tif (this.fusionFilter(data)) {\n\t\t\tdata.isPrioritized = true\n\t\t\tthis.fusionData.push(data)\n\t\t\tthis.labelData.push(data)\n\t\t}\n\t}\n\n\tprivate filterLohs(data: Data) {\n\t\tif (this.lohFilter(data)) {\n\t\t\tif (this.lohMaxValue == undefined || this.lohMaxValue < data.value) {\n\t\t\t\tthis.lohMaxValue = data.segmean\n\t\t\t}\n\n\t\t\tif (this.lohMinValue == undefined || this.lohMinValue > data.value) {\n\t\t\t\tthis.lohMinValue = data.segmean\n\t\t\t}\n\n\t\t\tthis.lohData.push(data)\n\t\t}\n\t}\n\n\tprivate filterCnvs(data: Data) {\n\t\tif (this.cnvFilter(data)) {\n\t\t\tif (!data.chr || this.reference.chromosomesOrder.indexOf(data.chr) == -1) {\n\t\t\t\t// when chr is unknown or not in reference chromosomes (chr1-22, X, Y), do not render arc\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// ITDs share the CNV interval ring, but must not affect the CNV color scale.\n\t\t\tif (data.dt == dtcnv) {\n\t\t\t\tif (this.cnvGainMaxValue == undefined || this.cnvGainMaxValue < data.value) {\n\t\t\t\t\tthis.cnvGainMaxValue = data.value\n\t\t\t\t}\n\n\t\t\t\tif (this.cnvLossMaxValue == undefined || this.cnvLossMaxValue > data.value) {\n\t\t\t\t\tthis.cnvLossMaxValue = data.value\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.cnvData.push(data)\n\t\t}\n\t}\n\n\tprivate prepareMutationWaterfallData() {\n\t\tthis.mutationWaterfallInnerRadius = this.lastInnerRadious - this.settings.rings.mutationWaterfallRingWidth\n\t\tthis.lastInnerRadious = this.mutationWaterfallInnerRadius\n\n\t\tconst groupedSnvs: Map<string, Array<Data>> = new Map()\n\t\tconst firstMutationByChr: MutationWaterfallDatum[] = []\n\t\tfor (const snv of this.filteredSnvData) {\n\t\t\tconst list = groupedSnvs.get(snv.chr) || []\n\t\t\tlist.push(snv)\n\t\t\tgroupedSnvs.set(snv.chr, list)\n\t\t}\n\n\t\tfor (const [, snvs] of groupedSnvs) {\n\t\t\tif (snvs.length < 2) continue\n\t\t\tsnvs.sort((a, b) => a.position - b.position)\n\t\t\tfirstMutationByChr.push({\n\t\t\t\tchr: snvs[0].chr,\n\t\t\t\tposition: snvs[0].position,\n\t\t\t\tlogDistance: 0 // placeholder updated after range computed\n\t\t\t})\n\t\t\tfor (let i = 1; i < snvs.length; i++) {\n\t\t\t\tconst prev = snvs[i - 1]\n\t\t\t\tconst curr = snvs[i]\n\t\t\t\tconst distance = Math.max(1, Math.abs(curr.position - prev.position))\n\t\t\t\tconst logDistance = Math.log10(distance)\n\t\t\t\tthis.mutationWaterfallData.push({\n\t\t\t\t\tchr: curr.chr,\n\t\t\t\t\tposition: curr.position,\n\t\t\t\t\tlogDistance\n\t\t\t\t})\n\t\t\t\tif (logDistance < this.mutationWaterfallRangeMin) {\n\t\t\t\t\tthis.mutationWaterfallRangeMin = logDistance\n\t\t\t\t}\n\t\t\t\tif (logDistance > this.mutationWaterfallRangeMax) {\n\t\t\t\t\tthis.mutationWaterfallRangeMax = logDistance\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!this.mutationWaterfallData.length) {\n\t\t\tthis.mutationWaterfallRangeMin = 0\n\t\t\tthis.mutationWaterfallRangeMax = 0\n\t\t}\n\n\t\tconst topLogDistance = this.mutationWaterfallRangeMax\n\t\tfor (const first of firstMutationByChr) {\n\t\t\tthis.mutationWaterfallData.push({\n\t\t\t\t...first,\n\t\t\t\tlogDistance: topLogDistance\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate calculateArcAngle(data: Data) {\n\t\tconst currentChromosome =\n\t\t\tthis.reference.chromosomes[\n\t\t\t\tthis.reference.chromosomesOrder.findIndex(chromosomeOrder => data.chr == chromosomeOrder)\n\t\t\t]\n\n\t\tconst dataAnglePos = Math.floor(data.position / this.bpx)\n\n\t\treturn currentChromosome.startAngle + dataAnglePos * this.onePxArcAngle\n\t}\n\n\tstatic capMaxValue(value: number, gainCapped: number, lossCapped: number) {\n\t\tif (value && Math.sign(value) == 1) {\n\t\t\treturn value > gainCapped ? gainCapped : value\n\t\t}\n\n\t\tif (Math.sign(value) == -1) {\n\t\t\treturn value < lossCapped ? lossCapped : value\n\t\t}\n\n\t\treturn 0\n\t}\n\n\tstatic capMinValue(value: number, capMinValue = 1) {\n\t\tif (Math.sign(value) == 1) {\n\t\t\treturn value > capMinValue ? value : capMinValue\n\t\t}\n\n\t\tif (Math.sign(value) == -1) {\n\t\t\treturn value < -1 * capMinValue ? value : -1 * capMinValue\n\t\t}\n\n\t\treturn 1\n\t}\n}\n", "import type SnvLegendElement from '#plots/disco/snv/SnvLegendElement.ts'\nimport type CnvLegend from '#plots/disco/cnv/CnvLegend.ts'\nimport type LohLegend from '#plots/disco/loh/LohLegend.ts'\nimport { CnvType } from '#plots/disco/cnv/CnvType.ts'\nimport type { DiscoInteractions } from '../interactions/DiscoInteractions'\n\nexport type MutationWaterfallLegend = {\n\tcolor: string\n\tonColorChange: (color: string) => void\n}\n\nexport type FusionLegendCounts = {\n\tinterchromosomal: number\n\tintrachromosomal: number\n}\n\nexport default class Legend {\n\tsnvTitle: string\n\tsnvClassMap: Map<string, SnvLegendElement>\n\n\tcnvTitle: string\n\tcnvClassMap: Map<CnvType, CnvLegend>\n\tcnvPercentile: number\n\tcnvCutoffMode: string\n\tcnvCount: number\n\n\tlohTitle: string\n\tlohLegend?: LohLegend\n\n\tfusionTitle: string\n\tfusionLegend: boolean\n\tfusionLegendCounts: FusionLegendCounts\n\tcnvRenderingType: string\n\n\tdiscoInteractions: DiscoInteractions\n\n\tmutationWaterfallLegend?: MutationWaterfallLegend\n\n\tconstructor(\n\t\tsnvTitle: string,\n\t\tcnvTitle: string,\n\t\tlohTitle: string,\n\t\tfusionTitle: string,\n\t\tcnvPercentile: number,\n\t\tcnvCutoffmode: string,\n\t\tsnvClassMap: Map<string, SnvLegendElement>,\n\t\tcnvClassMap: Map<CnvType, CnvLegend>,\n\t\tcnvRenderingType: string,\n\t\tfusionLegend: boolean,\n\t\tdiscoInteractions: DiscoInteractions,\n\t\tlohLegend?: LohLegend,\n\t\tmutationWaterfallLegend?: MutationWaterfallLegend,\n\t\tfusionLegendCounts: FusionLegendCounts = { interchromosomal: 0, intrachromosomal: 0 },\n\t\tcnvCount = 0\n\t) {\n\t\tthis.snvTitle = snvTitle\n\t\tthis.cnvTitle = cnvTitle\n\t\tthis.lohTitle = lohTitle\n\t\tthis.fusionTitle = fusionTitle\n\t\tthis.cnvPercentile = cnvPercentile\n\t\tthis.cnvCutoffMode = cnvCutoffmode\n\t\tthis.cnvCount = cnvCount\n\t\tthis.snvClassMap = snvClassMap\n\t\tthis.cnvClassMap = cnvClassMap\n\t\tthis.cnvRenderingType = cnvRenderingType\n\t\tthis.lohLegend = lohLegend\n\t\tthis.fusionLegend = fusionLegend\n\t\tthis.fusionLegendCounts = fusionLegendCounts\n\t\tthis.discoInteractions = discoInteractions\n\t\tthis.mutationWaterfallLegend = mutationWaterfallLegend\n\t}\n\n\tlegendCount(): number {\n\t\tconst hasItd = this.cnvClassMap.has(CnvType.ITD)\n\t\treturn (\n\t\t\t(this.snvClassMap.size > 0 ? 1 : 0) +\n\t\t\t(this.cnvCount > 0 ? 1 : 0) +\n\t\t\t(hasItd ? 1 : 0) +\n\t\t\t(this.lohLegend ? 1 : 0) +\n\t\t\t(this.fusionLegend ? 1 : 0) +\n\t\t\t(this.mutationWaterfallLegend ? 1 : 0)\n\t\t)\n\t}\n}\n", "import type { Ribbon } from 'd3'\nimport type FusionSubgroup from './FusionSubgroup.ts'\n\nexport default class Fusion implements Ribbon {\n\tsource: FusionSubgroup\n\ttarget: FusionSubgroup\n\tgenes: string\n\tcount: number\n\tendpts: string\n\tdt: number\n\t/** optional image file prefix of the event */\n\teventImage?: string\n\n\tconstructor(\n\t\tsource: FusionSubgroup,\n\t\ttarget: FusionSubgroup,\n\t\tgenes: string,\n\t\tcount: number,\n\t\tendpts: string,\n\t\tdt: number,\n\t\teventImage?: string\n\t) {\n\t\tthis.source = source\n\t\tthis.target = target\n\t\tthis.genes = genes\n\t\tthis.count = count\n\t\tthis.endpts = endpts\n\t\tthis.dt = dt\n\t\tthis.eventImage = eventImage\n\t}\n}\n", "import type { RibbonSubgroup } from 'd3'\nimport type PositionInChromosome from './PositionInChromosome.ts'\n\nexport default class FusionSubgroup implements RibbonSubgroup {\n\tstartAngle: number\n\tendAngle: number\n\tradius: number\n\n\tgene: string\n\tvalue: number\n\tgenes: Set<string>\n\tpositionInChromosome: PositionInChromosome\n\tstrand: string\n\n\tconstructor(\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tradius: number,\n\t\tgene: string,\n\t\tvalue: number,\n\t\tgenes: Set<string>,\n\t\tpositionInChromosome: PositionInChromosome,\n\t\tstrand: string\n\t) {\n\t\tthis.startAngle = startAngle\n\t\tthis.endAngle = endAngle\n\t\tthis.radius = radius\n\t\tthis.gene = gene\n\t\tthis.value = value\n\t\tthis.genes = genes\n\t\tthis.positionInChromosome = positionInChromosome\n\t\tthis.strand = strand\n\t}\n}\n", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport Fusion from './Fusion.ts'\nimport FusionSubgroup from './FusionSubgroup.ts'\n\nexport default class FusionMapper {\n\tprivate radius: number\n\tprivate sampleName: string\n\tprivate reference: Reference\n\n\tconstructor(radius: number, sampleName: string, reference: Reference) {\n\t\tthis.radius = radius\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t}\n\n\tmap(fusionData: Array<Data>): Array<Fusion> {\n\t\tconst fusions: Array<Fusion> = []\n\n\t\tfusionData.forEach(data => {\n\t\t\tconst genes = new Set<string>()\n\t\t\tgenes.add(data.geneA)\n\t\t\tgenes.add(data.geneB)\n\n\t\t\t/** skip any null (i.e. from isoforms or minor chrs) fusions */\n\t\t\tconst startAngle = this.calculateStartAngle(data.chrA, data.posA)\n\t\t\tconst endAngle = this.calculateEndAngle(data.chrA, data.posA)\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tconst source = new FusionSubgroup(\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tthis.radius,\n\t\t\t\tdata.geneA,\n\t\t\t\tdata.value,\n\t\t\t\tgenes,\n\t\t\t\t{\n\t\t\t\t\tchromosome: data.chrA,\n\t\t\t\t\tposition: data.posA\n\t\t\t\t},\n\t\t\t\tdata.strandA\n\t\t\t)\n\n\t\t\tlet target\n\t\t\tif (data.chrB && data.posB) {\n\t\t\t\t/** skip any null (i.e. from isoforms or minor chrs) fusions */\n\t\t\t\tconst startAngle = this.calculateStartAngle(data.chrB, data.posB)\n\t\t\t\tconst endAngle = this.calculateEndAngle(data.chrB, data.posB)\n\t\t\t\tif (startAngle === null || endAngle === null) return\n\t\t\t\ttarget = new FusionSubgroup(\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tthis.radius,\n\t\t\t\t\tdata.geneB,\n\t\t\t\t\tdata.value,\n\t\t\t\t\tgenes,\n\t\t\t\t\t{\n\t\t\t\t\t\tchromosome: data.chrB,\n\t\t\t\t\t\tposition: data.posB\n\t\t\t\t\t},\n\t\t\t\t\tdata.strandB\n\t\t\t\t)\n\t\t\t}\n\t\t\tconst fusion = new Fusion(source, target, 'genes', -1, 'Endpoints', data.dt, data.eventImage)\n\n\t\t\tfusions.push(fusion)\n\t\t})\n\n\t\treturn fusions\n\t}\n\n\tcalculateStartAngle(chr: string, pos: number) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(chr)\n\t\t/** Return null for isforms or minor chr */\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\t// TODO calculate 0.01 base on BPs\n\t\treturn (\n\t\t\tchromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(pos) / chromosome.size) - 0.01\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(chr: string, pos: number) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(chr)\n\t\t/** Return null for isforms or minor chr*/\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\t// TODO calculate 0.01 base on BPs\n\t\treturn (\n\t\t\t0.01 + chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(pos) / chromosome.size)\n\t\t)\n\t}\n}\n", "export default class LohLegend {\n\tcount: number\n\tconstructor(count: number) {\n\t\tthis.count = count\n\t}\n}\n", "import type Rings from '#plots/disco/ring/Rings.ts'\nimport type Legend from '#plots/disco/legend/Legend.ts'\nimport { RingType } from '#plots/disco/ring/RingType.ts'\nimport type Arc from '#plots/disco/arc/Arc.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport { select } from 'd3-selection'\nimport { getMaxLabelWidth } from '#dom/maxLabelWidth'\nimport type Fusion from '#plots/disco/fusion/Fusion.ts'\nimport type { DataHolder } from '#plots/disco/data/DataHolder.ts'\nimport type { InvalidDataInfo } from '#dom'\n\nexport default class ViewModel {\n\tpublic appState: any\n\tpublic svgDiv: any\n\n\twidth: number\n\theight: number\n\tlegendHeight: number\n\n\trings: Rings\n\tlegend: Legend\n\n\tfusions: Array<Fusion>\n\n\tsettings: Settings\n\tsnvDataLength: number\n\tfilteredSnvDataLength: number\n\tsnvDataLengthAll: number\n\tgenesetName: string\n\tcnvMaxValue?: number\n\tcnvMinValue?: number\n\tcappedCnvMaxAbsValue?: number\n\tnegativePercentile?: number\n\tpositivePercentile?: number\n\tinvalidDataInfo?: InvalidDataInfo\n\tcanShowMutationWaterfallPlot: boolean\n\thasMutationFractionData: boolean\n\n\tconstructor(\n\t\tsettings: Settings,\n\t\trings: Rings,\n\t\tlegend: Legend,\n\t\tfusions: Array<Fusion>,\n\t\tdataHolder: DataHolder,\n\t\tgenesetName: string,\n\t\t// TODO do we need this?\n\t\tsnvDataLengthAll: number\n\t) {\n\t\tthis.settings = settings\n\t\tthis.rings = rings\n\t\tthis.legend = legend\n\t\tthis.fusions = fusions\n\t\tthis.genesetName = genesetName\n\n\t\tconst tempHolder = select('body').append('div').style('position', 'absolute').style('visibility', 'hidden')\n\t\tconst tempSvg = tempHolder.append('svg')\n\t\tconst labels = rings.labelsRing?.elementsToDisplay?.map(l => l.text) || []\n\t\tconst maxLabelSpace = getMaxLabelWidth(tempSvg as any, labels)\n\t\ttempHolder.remove()\n\n\t\t//Diameter of the disco and labels usedd to calculate height and with of canvas\n\t\tthis.width =\n\t\t\t2 *\n\t\t\t(this.settings.horizontalPadding +\n\t\t\t\tthis.settings.rings.labelLinesInnerRadius +\n\t\t\t\tthis.settings.rings.labelsToLinesDistance +\n\t\t\t\tmaxLabelSpace)\n\t\tthis.height =\n\t\t\t2 *\n\t\t\t(this.settings.rings.labelLinesInnerRadius +\n\t\t\t\tthis.settings.rings.labelsToLinesDistance +\n\t\t\t\tthis.settings.verticalPadding +\n\t\t\t\tthis.settings.label.fontSize * 2 +\n\t\t\t\tmaxLabelSpace)\n\n\t\tthis.legendHeight = this.calculateLegendHeight(legend)\n\t\tthis.snvDataLength = dataHolder.snvData.length\n\t\tthis.filteredSnvDataLength = dataHolder.filteredSnvData.length\n\t\tthis.snvDataLengthAll = snvDataLengthAll\n\n\t\tthis.cnvMaxValue = dataHolder.cnvGainMaxValue\n\t\tthis.cnvMinValue = dataHolder.cnvLossMaxValue\n\t\tthis.cappedCnvMaxAbsValue = dataHolder.cappedCnvMaxAbsValue\n\t\tthis.negativePercentile = dataHolder.percentileNegative\n\t\tthis.positivePercentile = dataHolder.percentilePositive\n\t\tthis.invalidDataInfo = dataHolder.invalidDataInfo\n\t\tthis.canShowMutationWaterfallPlot = dataHolder.hasWaterfallEligibleChromosome\n\t\tthis.hasMutationFractionData = dataHolder.hasMutationFractionData\n\t}\n\n\tgetElements(ringType: RingType): Array<Arc> {\n\t\tswitch (ringType) {\n\t\t\tcase RingType.CHROMOSOME:\n\t\t\t\treturn this.rings.chromosomesRing ? this.rings.chromosomesRing.elements : []\n\t\t\tcase RingType.LABEL:\n\t\t\t\treturn this.rings.labelsRing.elementsToDisplay\n\t\t\tcase RingType.NONEXONICSNV:\n\t\t\t\treturn this.rings.nonExonicArcRing ? this.rings.nonExonicArcRing.elements : []\n\t\t\tcase RingType.SNV:\n\t\t\t\treturn this.rings.snvArcRing ? this.rings.snvArcRing.elements : []\n\t\t\tcase RingType.CNV:\n\t\t\t\treturn this.rings.cnvArcRing ? this.rings.cnvArcRing.elements : []\n\t\t\tcase RingType.LOH:\n\t\t\t\treturn this.rings.lohArcRing ? this.rings.lohArcRing.elements : []\n\t\t\tcase RingType.MUTATION_WATERFALL:\n\t\t\t\treturn this.rings.mutationWaterfallRing ? this.rings.mutationWaterfallRing.elements : []\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`ringType ${ringType} not defined`)\n\t\t}\n\t}\n\n\tgetCollisions(ringType: RingType): Array<Arc> | undefined {\n\t\tif (ringType == RingType.LABEL) {\n\t\t\treturn this.rings.labelsRing.collisions\n\t\t} else {\n\t\t\treturn undefined\n\t\t}\n\t}\n\n\tprivate calculateLegendHeight(legend: Legend): number {\n\t\tconst rawHeight = this.settings.legend.rowHeight\n\t\treturn rawHeight * legend.legendCount()\n\t}\n}\n", "import type Arc from '#plots/disco/arc/Arc.ts'\n\nexport default class Ring<T extends Arc> {\n\twidth: number\n\n\tinnerRadius: number\n\touterRadius: number\n\n\telements: Array<T>\n\n\tconstructor(innerRadius: number, width: number, elements: Array<T>) {\n\t\tthis.innerRadius = innerRadius\n\t\tthis.outerRadius = innerRadius + width\n\t\tthis.width = width\n\t\tthis.elements = elements\n\t}\n}\n", "import { mclass } from '#shared/common.js'\nexport default class MLabel {\n\tprivate static instance: MLabel\n\treadonly mlabel\n\n\t/**\n\t * The Singleton's constructor should always be private to prevent direct\n\t * construction calls with the `new` operator.\n\t */\n\tprivate constructor() {\n\t\tconst mlabel = {}\n\t\tfor (const key in mclass) {\n\t\t\tmlabel[mclass[key].label] = mclass[key]\n\t\t\tmlabel[key] = mclass[key]\n\t\t}\n\n\t\tthis.mlabel = mlabel\n\t}\n\n\t/**\n\t * The static method that controls the access to the singleton instance.\n\t *\n\t * This implementation let you subclass the Singleton class while keeping\n\t * just one instance of each subclass around.\n\t */\n\tpublic static getInstance(): MLabel {\n\t\tif (!MLabel.instance) {\n\t\t\tMLabel.instance = new MLabel()\n\t\t}\n\n\t\treturn MLabel.instance\n\t}\n}\n", "export default class SnvLegendElement {\n snvType: string\n color: string\n count: number;\n\n constructor(snvType: string, color: string, count: number) {\n this.snvType = snvType;\n this.color = color;\n this.count = count\n }\n}", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport type SnvArc from './SnvArc.ts'\nimport MLabel from '#plots/disco/label/MLabel.ts'\nimport SnvLegendElement from './SnvLegendElement.ts'\n\nexport default class SnvArcsMapper {\n\tsnvClassMap: Map<string, SnvLegendElement> = new Map()\n\n\tprivate sampleName: string\n\tprivate reference: Reference\n\n\tprivate onePxArcAngle: number\n\tprivate bpx: number\n\tprivate svnInnerRadius: number\n\tprivate svnWidth: number\n\n\tconstructor(svnInnerRadius: number, svnWidth: number, sampleName: string, reference: Reference) {\n\t\tthis.svnInnerRadius = svnInnerRadius\n\t\tthis.svnWidth = svnWidth\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\n\t\t// number of base pairs per pixel\n\t\tthis.bpx = Math.floor(this.reference.totalSize / (this.reference.totalChromosomesAngle * svnInnerRadius))\n\t\tthis.onePxArcAngle = 1 / svnInnerRadius\n\t}\n\n\tmap(exonicSnvDataMap: Map<number, Array<Data>>): Array<SnvArc> {\n\t\tconst snvArray: Array<SnvArc> = []\n\t\tfor (const angle of exonicSnvDataMap.keys()) {\n\t\t\tconst array = exonicSnvDataMap.get(angle)\n\t\t\tif (array) {\n\t\t\t\tconst arraySize = array.length\n\n\t\t\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\t\t\tconst data = array[i]\n\t\t\t\t\tconst snvLegendElement = this.snvClassMap.get(data.mClass)\n\t\t\t\t\tif (snvLegendElement) {\n\t\t\t\t\t\tthis.snvClassMap.set(data.mClass, this.createSnvLegend(data.mClass, ++snvLegendElement.count))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.snvClassMap.set(data.mClass, this.createSnvLegend(data.mClass, 1))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst startAngle = angle\n\t\t\t\t\tconst endAngle = angle + this.onePxArcAngle\n\n\t\t\t\t\tconst mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : undefined\n\n\t\t\t\t\tconst arc: SnvArc = {\n\t\t\t\t\t\tstartAngle: startAngle,\n\t\t\t\t\t\tendAngle: endAngle,\n\t\t\t\t\t\tinnerRadius: this.svnInnerRadius + (i * this.svnWidth) / arraySize,\n\t\t\t\t\t\touterRadius: this.svnInnerRadius + ((i + 1) * this.svnWidth) / arraySize,\n\t\t\t\t\t\tcolor: mLabel.color,\n\t\t\t\t\t\ttext: data.gene,\n\t\t\t\t\t\tdataClass: mLabel.label,\n\t\t\t\t\t\tmname: data.mname,\n\t\t\t\t\t\tchr: data.chr,\n\t\t\t\t\t\tpos: data.position,\n\t\t\t\t\t\tvafs: data.vafs,\n\t\t\t\t\t\tsampleName: [data.sampleName]\n\t\t\t\t\t}\n\t\t\t\t\tsnvArray.push(arc)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn snvArray\n\t}\n\n\tprivate createSnvLegend(dataClass: string, count: number) {\n\t\tconst mClass = MLabel.getInstance().mlabel[dataClass]\n\t\treturn new SnvLegendElement(mClass.label, mClass.color, count)\n\t}\n}\n", "import type { CnvType } from './CnvType.ts'\n\nexport default class CnvLegend {\n\ttext: string\n\tcnvType: CnvType\n\tcolor: string\n\tvalue: number\n\n\tconstructor(text: string, cnvType: CnvType, color: string, value: number) {\n\t\tthis.text = text\n\t\tthis.cnvType = cnvType\n\t\tthis.color = color\n\t\tthis.value = value\n\t}\n}\n", "import type Settings from '#plots/disco/Settings.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\n\nexport default class CnvColorProvider {\n\tstatic getColor(value: number, settings: Settings, cnvMaxPercentileAbs = 0) {\n\t\tconst cnv = settings.cnv\n\t\tconst gainCapped =\n\t\t\tsettings.Disco.cnvRenderingType == CnvRenderingType.heatmap ? settings.Disco.cnvCapping : cnvMaxPercentileAbs\n\t\tconst lossCapped =\n\t\t\tsettings.Disco.cnvRenderingType == CnvRenderingType.heatmap\n\t\t\t\t? -1 * settings.Disco.cnvCapping\n\t\t\t\t: -1 * cnvMaxPercentileAbs\n\t\tif (value < lossCapped) {\n\t\t\treturn cnv.cappedLossColor\n\t\t} else if (value >= lossCapped && value <= 0) {\n\t\t\treturn cnv.lossColor\n\t\t} else if (value > 0 && value <= gainCapped) {\n\t\t\treturn cnv.ampColor\n\t\t} else {\n\t\t\treturn cnv.cappedAmpColor\n\t\t}\n\t}\n}\n", "import type Data from '#plots/disco/data/Data.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type CnvArc from './CnvArc.ts'\nimport CnvLegend from './CnvLegend.ts'\nimport { CnvType } from './CnvType.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport CnvColorProvider from '#plots/disco/cnv/CnvColorProvider.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\nimport DataMapper from '#plots/disco/data/DataMapper.ts'\nimport { dtitd, mclass, mclassitd } from '#shared/common.js'\n\nexport default class CnvArcsMapper {\n\tcnvClassMap: Map<CnvType, CnvLegend> = new Map()\n\n\tprivate settings: Settings\n\tprivate sampleName: string\n\tprivate reference: Reference\n\tprivate cnvMaxValue: number\n\tprivate cnvMinValue: number\n\tprivate cnvUnit: string\n\n\tprivate onePxArcAngle: number\n\tprivate lossOnly: boolean\n\tprivate gainOnly: boolean\n\tprivate gainCapped: number\n\tprivate lossCapped: number\n\tprivate cnvMaxAbsValue: number\n\tprivate cnvInnerRadius: number\n\tprivate cnvWidth: number\n\tprivate cnvRenderingType: string\n\tprivate cnvAbsPercentile: number\n\n\tconstructor(\n\t\tcnvInnerRadius: number,\n\t\tcnvWidth: number,\n\t\tsettings: Settings,\n\t\tsampleName: string,\n\t\treference: Reference,\n\t\tcnvMaxValue = 0,\n\t\tcnvMinValue = 0,\n\t\tcnvMaxAbsValue = 0,\n\t\tcnvAbsPercentile = 0,\n\t\tcnvUnit = '',\n\t\tcnvRenderingType: string\n\t) {\n\t\tthis.cnvInnerRadius = cnvInnerRadius\n\t\tthis.cnvWidth = cnvWidth\n\t\tthis.settings = settings\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t\tthis.cnvMaxValue = cnvMaxValue\n\t\tthis.cnvMinValue = cnvMinValue\n\t\tthis.cnvMaxAbsValue = cnvMaxAbsValue\n\t\tthis.cnvAbsPercentile = cnvAbsPercentile\n\t\tthis.cnvUnit = cnvUnit\n\t\tthis.cnvRenderingType = cnvRenderingType\n\n\t\tthis.gainCapped = Math.min(cnvAbsPercentile, this.settings.Disco.cnvCapping)\n\t\tthis.lossCapped = -1 * Math.min(cnvAbsPercentile, this.settings.Disco.cnvCapping)\n\n\t\tthis.lossOnly = cnvMaxValue <= 0\n\t\tthis.gainOnly = cnvMinValue >= 0\n\n\t\tthis.onePxArcAngle = 1 / this.cnvInnerRadius\n\n\t\tconst gain = new CnvLegend(\n\t\t\t'Max',\n\t\t\tcnvMaxValue > 0 ? CnvType.Gain : CnvType.Loss,\n\t\t\tthis.getColor(cnvMaxValue),\n\t\t\tcnvMaxValue\n\t\t)\n\t\tconst loss = new CnvLegend(\n\t\t\t'Min',\n\t\t\tcnvMinValue > 0 ? CnvType.Gain : CnvType.Loss,\n\t\t\tthis.getColor(cnvMinValue),\n\t\t\tcnvMinValue\n\t\t)\n\t\tconst cap = new CnvLegend(\n\t\t\t'Capping',\n\t\t\tCnvType.Loss,\n\t\t\tthis.getColor(cnvMinValue > 0 ? cnvMinValue : cnvMaxValue),\n\t\t\tthis.settings.Disco.cnvCapping\n\t\t)\n\n\t\tthis.cnvClassMap.set(CnvType.Gain, gain)\n\t\tthis.cnvClassMap.set(CnvType.Loss, loss)\n\t\tthis.cnvClassMap.set(CnvType.Cap, cap)\n\t}\n\n\tmap(arcData: Array<Data>): Array<CnvArc> {\n\t\tconst arcs: Array<CnvArc> = []\n\t\tlet itdCount = 0\n\n\t\tarcData.forEach(data => {\n\t\t\tlet startAngle = this.calculateStartAngle(data)\n\t\t\tlet endAngle = this.calculateEndAngle(data)\n\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tif (endAngle - startAngle < this.onePxArcAngle) {\n\t\t\t\tconst restAngle = this.onePxArcAngle - (endAngle - startAngle)\n\t\t\t\tstartAngle = startAngle - restAngle / 2\n\t\t\t\tendAngle = endAngle + restAngle / 2\n\t\t\t}\n\n\t\t\tconst isItd = data.dt == dtitd\n\t\t\tif (isItd) itdCount++\n\t\t\tconst color = isItd ? mclass[mclassitd].color : this.getColor(data.value)\n\t\t\tconst innerRadius = isItd ? this.cnvInnerRadius : this.calculateInnerRadius(data)\n\t\t\tconst outerRadius = isItd ? this.cnvInnerRadius + this.cnvWidth : this.calculateOuterRadius(data)\n\n\t\t\tconst arc: CnvArc = {\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tinnerRadius,\n\t\t\t\touterRadius,\n\t\t\t\tcolor: color,\n\t\t\t\tdt: data.dt,\n\t\t\t\tdataClass: data.mClass,\n\t\t\t\ttext: data.gene,\n\t\t\t\tchr: data.chr,\n\t\t\t\tstart: data.start,\n\t\t\t\tstop: data.stop,\n\t\t\t\tvalue: data.value,\n\t\t\t\tunit: this.cnvUnit,\n\t\t\t\tsampleName: [this.sampleName]\n\t\t\t}\n\n\t\t\tarcs.push(arc)\n\t\t})\n\t\tif (itdCount) {\n\t\t\tthis.cnvClassMap.set(CnvType.ITD, new CnvLegend('ITD', CnvType.ITD, mclass[mclassitd].color, itdCount))\n\t\t}\n\n\t\treturn arcs\n\t}\n\n\tcalculateStartAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tif (index == -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tchromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.start) / chromosome.size)\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.stop) / chromosome.size)\n\t}\n\n\tgetColor(value: number) {\n\t\treturn CnvColorProvider.getColor(value, this.settings, this.cnvAbsPercentile)\n\t}\n\n\tprivate calculateInnerRadius(data: Data) {\n\t\tif (this.cnvRenderingType == CnvRenderingType.heatmap) {\n\t\t\treturn this.cnvInnerRadius\n\t\t}\n\n\t\tif (this.gainOnly) {\n\t\t\treturn this.cnvInnerRadius\n\t\t}\n\n\t\tif (this.lossOnly) {\n\t\t\tconst outerRadius = this.cnvInnerRadius + this.cnvWidth\n\n\t\t\treturn (\n\t\t\t\touterRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(this.cnvWidth * DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped)) / this.cnvAbsPercentile\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tconst centerRadius = this.cnvInnerRadius + this.cnvWidth / 2\n\n\t\tif (Math.sign(data.value) == 1) {\n\t\t\treturn centerRadius\n\t\t}\n\n\t\tif (Math.sign(data.value) == -1) {\n\t\t\treturn (\n\t\t\t\tcenterRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvAbsPercentile) *\n\t\t\t\t\t\t(this.cnvWidth / 2)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\treturn 1\n\t}\n\n\tprivate calculateOuterRadius(data: Data) {\n\t\tconst maxOuterRadius = this.cnvInnerRadius + this.cnvWidth\n\n\t\tif (this.cnvRenderingType == CnvRenderingType.heatmap) {\n\t\t\treturn maxOuterRadius\n\t\t}\n\n\t\tif (this.gainOnly) {\n\t\t\treturn (\n\t\t\t\tthis.cnvInnerRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(this.cnvWidth * DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped)) / this.cnvAbsPercentile\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tif (this.lossOnly) {\n\t\t\treturn maxOuterRadius\n\t\t}\n\n\t\tconst centerRadius = this.cnvInnerRadius + this.cnvWidth / 2\n\n\t\tif (Math.sign(data.value) == 1) {\n\t\t\treturn (\n\t\t\t\tcenterRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvMaxAbsValue) *\n\t\t\t\t\t\t(this.cnvWidth / 2)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tif (Math.sign(data.value) == -1) {\n\t\t\treturn centerRadius\n\t\t}\n\t\treturn 1\n\t}\n}\n", "import type Point from './Point.ts'\n\nexport default class Line {\n\tcolor: string\n\tpoints = new Array<Point>()\n\n\tconstructor(points: Array<Point>, color: string) {\n\t\tthis.points = points\n\t\tthis.color = color\n\t}\n}\n", "import type Label from './Label.ts'\nimport type Point from './Point.ts'\nimport Line from './Line.ts'\nimport type MutationTooltip from '#plots/disco/label/MutationTooltip.ts'\nimport type FusionTooltip from '#plots/disco/fusion/FusionTooltip.ts'\n\nexport default class LabelFactory {\n\tstatic createLabel(\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tinnerRadius: number,\n\t\touterRadius: number,\n\t\tvalue: number,\n\t\tgene: string,\n\t\tcolor: string,\n\t\tdataClass: string,\n\t\tchr: string,\n\t\tposition: number,\n\t\tisPrioritized = false,\n\t\tlabelsToLinesGap: number,\n\t\tmutationTooltip?: MutationTooltip,\n\t\tfusionTooltip?: FusionTooltip\n\t) {\n\t\tconst angle = (startAngle + endAngle) / 2\n\t\tconst ccAngle = angle - Math.PI / 2\n\t\tconst transform = `rotate(${(angle * 180) / Math.PI - 90}) translate(${outerRadius})${\n\t\t\tangle > Math.PI ? 'rotate(180)' : ''\n\t\t}`\n\t\tconst textAnchor = angle > Math.PI ? 'end' : ''\n\t\tconst r0 = innerRadius\n\t\tconst r1 = outerRadius - labelsToLinesGap\n\n\t\tconst points: Array<Point> = []\n\t\tconst point0: Point = {\n\t\t\tx: r0 * Math.cos(ccAngle),\n\t\t\ty: r0 * Math.sin(ccAngle)\n\t\t}\n\t\tconst point1: Point = {\n\t\t\tx: r1 * Math.cos(ccAngle),\n\t\t\ty: r1 * Math.sin(ccAngle)\n\t\t}\n\n\t\tpoints.push(point0)\n\t\tpoints.push(point1)\n\n\t\tconst line = new Line(points, color)\n\n\t\tconst label: Label = {\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tinnerRadius,\n\t\t\touterRadius,\n\t\t\tangle,\n\t\t\tvalue,\n\t\t\ttext: gene,\n\t\t\tcolor,\n\t\t\ttransform,\n\t\t\ttextAnchor,\n\t\t\tccAngle,\n\t\t\tline,\n\t\t\tisPrioritized,\n\t\t\tstart: position,\n\t\t\tstop: position,\n\t\t\tchr: chr,\n\t\t\tmutationsTooltip: mutationTooltip ? [mutationTooltip] : undefined,\n\t\t\tfusionTooltip: fusionTooltip ? [fusionTooltip] : undefined\n\t\t}\n\n\t\treturn label\n\t}\n\n\tstatic createMovedLabel(element: Label, overlap: number): Label {\n\t\tconst startAngle = element.startAngle + overlap\n\t\tconst endAngle = element.endAngle + overlap\n\n\t\tconst angle = (startAngle + endAngle) / 2\n\t\tconst ccAngle = angle - Math.PI / 2\n\n\t\tconst r0 = element.innerRadius\n\t\tconst r1 = element.outerRadius - 2\n\t\tconst dr = (r1 - r0) / 3\n\t\tconst cos0 = Math.cos(element.ccAngle)\n\t\tconst sin0 = Math.sin(element.ccAngle)\n\t\tconst cos1 = Math.cos(element.ccAngle + overlap)\n\t\tconst sin1 = Math.sin(element.ccAngle + overlap)\n\n\t\tconst points: Array<Point> = []\n\n\t\tconst point0: Point = {\n\t\t\tx: r0 * cos0,\n\t\t\ty: r0 * sin0\n\t\t}\n\t\tconst point1: Point = {\n\t\t\tx: (r0 + dr) * cos0,\n\t\t\ty: (r0 + dr) * sin0\n\t\t}\n\t\tconst point2: Point = {\n\t\t\tx: (r0 + 2 * dr) * cos1,\n\t\t\ty: (r0 + 2 * dr) * sin1\n\t\t}\n\n\t\tconst point3: Point = {\n\t\t\tx: (r0 + 3 * dr) * cos1,\n\t\t\ty: (r0 + 3 * dr) * sin1\n\t\t}\n\n\t\tpoints.push(point0)\n\t\tpoints.push(point1)\n\t\tpoints.push(point2)\n\t\tpoints.push(point3)\n\n\t\tconst line = new Line(points, element.color)\n\n\t\tconst transform: string =\n\t\t\t'rotate(' +\n\t\t\t((angle * 180) / Math.PI - 90) +\n\t\t\t')' +\n\t\t\t'translate(' +\n\t\t\telement.outerRadius +\n\t\t\t')' +\n\t\t\t(angle > Math.PI ? 'rotate(180)' : '')\n\n\t\tconst textAnchor = angle > Math.PI ? 'end' : ''\n\n\t\tconst color = element.mutationsTooltip\n\t\t\t? element.mutationsTooltip[0].color\n\t\t\t: element.fusionTooltip\n\t\t\t? element.fusionTooltip[0].color\n\t\t\t: undefined\n\n\t\tconst label: Label = {\n\t\t\tstartAngle: startAngle,\n\t\t\tendAngle: endAngle,\n\t\t\tinnerRadius: element.innerRadius,\n\t\t\touterRadius: element.outerRadius,\n\t\t\tangle: angle,\n\t\t\tvalue: element.value,\n\t\t\ttext: element.text,\n\t\t\ttransform: transform,\n\t\t\ttextAnchor: textAnchor,\n\t\t\tccAngle: ccAngle,\n\t\t\tcolor: color,\n\t\t\tline: line,\n\t\t\tisPrioritized: element.isPrioritized,\n\t\t\tstart: element.start,\n\t\t\tstop: element.stop,\n\t\t\tchr: element.chr,\n\t\t\tmutationsTooltip: element.mutationsTooltip,\n\t\t\tfusionTooltip: element.fusionTooltip,\n\t\t\tcnvTooltip: element.cnvTooltip\n\t\t}\n\n\t\treturn label\n\t}\n}\n", "import type Data from '#plots/disco/data/Data.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Label from './Label.ts'\nimport LabelFactory from './LabelFactory.ts'\nimport MLabel from './MLabel.ts'\nimport type MutationTooltip from '#plots/disco/label/MutationTooltip.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport FusionColorProvider from '#plots/disco/fusion/FusionColorProvider.ts'\nimport type FusionTooltip from '#plots/disco/fusion/FusionTooltip.ts'\nimport type CnvTooltip from '#plots/disco/cnv/CnvTooltip.ts'\nimport CnvColorProvider from '#plots/disco/cnv/CnvColorProvider.ts'\nimport { dtsnvindel, dtfusionrna, dtcnv, dtitd, mclass, mclassitd } from '#shared/common.js'\n\nexport default class LabelsMapper {\n\tprivate settings: Settings\n\tprivate sampleName: string\n\tprivate reference: Reference\n\n\tprivate labelMap: Map<string, Label> = new Map()\n\tprivate cnvMaxPercentileAbs: number\n\n\tconstructor(settings: Settings, sampleName: string, reference: Reference, cnvMaxPercentileAbs = 0) {\n\t\tthis.settings = settings\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t\tthis.cnvMaxPercentileAbs = cnvMaxPercentileAbs\n\t}\n\n\tmap(data: Array<Data>, cnvData: Array<Data> = []): Array<Label> {\n\t\tconst innerRadius = this.settings.rings.labelLinesInnerRadius\n\t\tconst outerRadius = innerRadius + this.settings.rings.labelsToLinesDistance\n\n\t\tdata.forEach(data => {\n\t\t\tif (data.dt == dtsnvindel) {\n\t\t\t\tconst startAngle = this.calculateStartAngle(data.chr, data.position)\n\t\t\t\tconst endAngle = this.calculateEndAngle(data.chr, data.position)\n\t\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\t\tconst mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : undefined\n\n\t\t\t\tthis.addLabelOrMutation(\n\t\t\t\t\tdata,\n\t\t\t\t\tdata.gene,\n\t\t\t\t\tdata.mname,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tmLabel.color,\n\t\t\t\t\tmLabel.label\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (data.dt == dtfusionrna) {\n\t\t\t\tconst color = FusionColorProvider.getColor(data.chrA, data.chrB)\n\t\t\t\tif (data.geneA) {\n\t\t\t\t\tconst startAngleSource = this.calculateStartAngle(data.chrA, data.posA)\n\t\t\t\t\tconst endAngleSource = this.calculateEndAngle(data.chrA, data.posA)\n\t\t\t\t\tif (startAngleSource === null || endAngleSource === null) return\n\n\t\t\t\t\tthis.addLabelOrFusion(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tdata.geneA,\n\t\t\t\t\t\tdata.posA,\n\t\t\t\t\t\tdata.chrA,\n\t\t\t\t\t\tstartAngleSource,\n\t\t\t\t\t\tendAngleSource,\n\t\t\t\t\t\tinnerRadius,\n\t\t\t\t\t\touterRadius,\n\t\t\t\t\t\tcolor\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tif (data.geneB && data.geneA != data.geneB) {\n\t\t\t\t\tconst startAngleTarget = this.calculateStartAngle(data.chrB, data.posB)\n\t\t\t\t\tconst endAngleTarget = this.calculateEndAngle(data.chrB, data.posB)\n\n\t\t\t\t\tif (startAngleTarget == null || endAngleTarget == null) return\n\n\t\t\t\t\tthis.addLabelOrFusion(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tdata.geneB,\n\t\t\t\t\t\tdata.posB,\n\t\t\t\t\t\tdata.chrB,\n\t\t\t\t\t\tstartAngleTarget,\n\t\t\t\t\t\tendAngleTarget,\n\t\t\t\t\t\tinnerRadius,\n\t\t\t\t\t\touterRadius,\n\t\t\t\t\t\tcolor\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst labelsArray = Array.from(this.labelMap.values())\n\t\tlabelsArray.forEach((label: Label) => {\n\t\t\tcnvData.forEach((cnv: Data) => {\n\t\t\t\tif (\n\t\t\t\t\t(cnv.dt == dtcnv || cnv.dt == dtitd) &&\n\t\t\t\t\tlabel.chr == cnv.chr &&\n\t\t\t\t\tlabel.stop >= cnv.start &&\n\t\t\t\t\tcnv.stop >= label.start\n\t\t\t\t) {\n\t\t\t\t\tconst mutation: CnvTooltip = {\n\t\t\t\t\t\tdt: cnv.dt,\n\t\t\t\t\t\tvalue: cnv.value,\n\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\tcnv.dt == dtitd\n\t\t\t\t\t\t\t\t? mclass[mclassitd].color\n\t\t\t\t\t\t\t\t: CnvColorProvider.getColor(cnv.value, this.settings, this.cnvMaxPercentileAbs),\n\t\t\t\t\t\tchr: cnv.chr,\n\t\t\t\t\t\tstart: cnv.start,\n\t\t\t\t\t\tstop: cnv.stop\n\t\t\t\t\t}\n\t\t\t\t\tif (label.cnvTooltip) {\n\t\t\t\t\t\tlabel.cnvTooltip.push(mutation)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel.cnvTooltip = []\n\t\t\t\t\t\tlabel.cnvTooltip.push(mutation)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\treturn Array.from(this.labelMap.values())\n\t}\n\n\tprivate addLabelOrMutation(\n\t\tdata: Data,\n\t\tgene: string,\n\t\tmname: string,\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcolor,\n\t\tdataClass\n\t) {\n\t\tconst label = this.labelMap.get(gene)\n\t\tconst mutation: MutationTooltip = {\n\t\t\tmname: mname,\n\t\t\tcolor: color,\n\t\t\tdataClass: dataClass,\n\t\t\tchr: data.chr,\n\t\t\tposition: data.position,\n\t\t\tvafs: data.vafs\n\t\t}\n\t\tif (!label) {\n\t\t\tthis.labelMap.set(\n\t\t\t\tgene,\n\t\t\t\tLabelFactory.createLabel(\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tdata.value,\n\t\t\t\t\tgene,\n\t\t\t\t\tcolor,\n\t\t\t\t\tdataClass,\n\t\t\t\t\tdata.chr,\n\t\t\t\t\tdata.position,\n\t\t\t\t\tdata.isPrioritized,\n\t\t\t\t\tthis.settings.rings.labelsToLinesGap,\n\t\t\t\t\tmutation\n\t\t\t\t)\n\t\t\t)\n\t\t} else {\n\t\t\tif (label.mutationsTooltip) {\n\t\t\t\tlabel.start = Math.min(label.start, data.position)\n\t\t\t\tlabel.stop = Math.max(label.stop, data.position)\n\t\t\t\tlabel.mutationsTooltip.push(mutation)\n\t\t\t} else {\n\t\t\t\tlabel.mutationsTooltip = []\n\t\t\t\tlabel.start = Math.min(label.start, data.position)\n\t\t\t\tlabel.stop = Math.max(label.stop, data.position)\n\t\t\t\tlabel.mutationsTooltip.push(mutation)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addLabelOrFusion(\n\t\tdata: Data,\n\t\tgene: string,\n\t\tposition: number,\n\t\tchr: string,\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcolor\n\t) {\n\t\tconst label = this.labelMap.get(gene)\n\t\tconst fusionTooltip: FusionTooltip = {\n\t\t\tcolor: color,\n\t\t\tchrA: data.chrA,\n\t\t\tchrB: data.chrB,\n\t\t\tposA: data.posA,\n\t\t\tposB: data.posB,\n\t\t\tgeneA: data.geneA,\n\t\t\tgeneB: data.geneB,\n\t\t\tstrandA: data.strandA,\n\t\t\tstrandB: data.strandB\n\t\t}\n\t\tif (!label) {\n\t\t\tthis.labelMap.set(\n\t\t\t\tgene,\n\t\t\t\tLabelFactory.createLabel(\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tdata.value,\n\t\t\t\t\tgene,\n\t\t\t\t\tcolor,\n\t\t\t\t\t'Fusion transcript',\n\t\t\t\t\tchr,\n\t\t\t\t\tposition,\n\t\t\t\t\tdata.isPrioritized,\n\t\t\t\t\tthis.settings.rings.labelsToLinesGap,\n\t\t\t\t\tundefined,\n\t\t\t\t\tfusionTooltip\n\t\t\t\t)\n\t\t\t)\n\t\t} else {\n\t\t\tif (label.fusionTooltip) {\n\t\t\t\tlabel.start = Math.min(label.start, position)\n\t\t\t\tlabel.stop = Math.max(label.stop, position)\n\t\t\t\tlabel.fusionTooltip.push(fusionTooltip)\n\t\t\t} else {\n\t\t\t\tlabel.fusionTooltip = []\n\t\t\t\tlabel.start = Math.min(label.start, position)\n\t\t\t\tlabel.stop = Math.max(label.stop, position)\n\t\t\t\tlabel.fusionTooltip.push(fusionTooltip)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate calculateStartAngle(chr: string, position: number) {\n\t\tconst index = this.reference.chromosomesOrder.findIndex(element => element == chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(position) / chromosome.size)\n\t}\n\n\tprivate calculateEndAngle(chr: string, position: number) {\n\t\tconst index = this.reference.chromosomesOrder.findIndex(element => element == chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(position) / chromosome.size)\n\t}\n}\n", "import Ring from '#plots/disco/ring/Ring.ts'\nimport type Label from './Label.ts'\nimport LabelFactory from './LabelFactory.ts'\nimport type Settings from '#plots/disco/Settings.ts'\n\nexport default class Labels extends Ring<Label> {\n\tcollisions?: Array<Label>\n\tsettings: any\n\telementsToDisplay: Array<Label> = []\n\n\tprivate hasPrioritizedGenes: boolean\n\tprivate overlapAngle: number\n\n\tconstructor(settings: Settings, elements: Array<Label>, hasPrioritizedGenes: boolean) {\n\t\tsuper(\n\t\t\tsettings.rings.labelLinesInnerRadius,\n\t\t\tsettings.rings.labelsToLinesDistance,\n\t\t\telements.sort((a, b) => {\n\t\t\t\treturn a.startAngle < b.startAngle ? -1 : a.startAngle > b.startAngle ? 1 : 0\n\t\t\t})\n\t\t)\n\n\t\tthis.settings = settings\n\t\tthis.hasPrioritizedGenes = hasPrioritizedGenes\n\n\t\tconst circumference = 2 * Math.PI * (settings.rings.labelLinesInnerRadius + settings.rings.labelsToLinesDistance)\n\t\tthis.overlapAngle = (this.settings.label.overlapAngleFactor * this.settings.label.fontSize) / circumference\n\n\t\tthis.calculateCollisions()\n\t}\n\n\tprivate calculateCollisions() {\n\t\tthis.collisions = []\n\n\t\tlet hasPrioritizedGenesList: Array<Label> = []\n\t\thasPrioritizedGenesList = this.elements.filter(label => label.isPrioritized)\n\n\t\tif (this.settings.label.prioritizeGeneLabelsByGeneSets) {\n\t\t\tthis.elementsToDisplay = this.getLabelsWithPrioritizedGenes(hasPrioritizedGenesList)\n\t\t} else if (this.hasPrioritizedGenes) {\n\t\t\tconst prioritizedGenesList = this.elements.filter(label => label.isPrioritized)\n\t\t\tconst filteredPrioritizedGenesList = this.getLabelsWithPrioritizedGenes(prioritizedGenesList)\n\n\t\t\tconst withoutPrioritizedGenesList = this.elements.filter(label => !label.isPrioritized)\n\n\t\t\tconst combinedAndSortedList = [...withoutPrioritizedGenesList, ...filteredPrioritizedGenesList].sort(\n\t\t\t\t(a, b) => a.startAngle - b.startAngle\n\t\t\t)\n\n\t\t\tthis.elementsToDisplay = this.getAllLabels(combinedAndSortedList)\n\t\t} else {\n\t\t\tthis.elementsToDisplay = this.getLabelsWithPrioritizedGenes(this.elements)\n\t\t}\n\t}\n\n\tprivate getLabelsWithPrioritizedGenes(elemenets: Array<Label>) {\n\t\tconst filteredList: Array<Label> = []\n\n\t\tlet prev = { endAngle: 0 }\n\t\telemenets.forEach((element, index) => {\n\t\t\tif (index == 0) {\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tprev = element\n\t\t\t} else {\n\t\t\t\tconst overlap = prev.endAngle - element.startAngle + this.overlapAngle\n\n\t\t\t\tif (overlap > 0 && overlap < this.settings.label.maxDeltaAngle) {\n\t\t\t\t\tconst labelCopy = LabelFactory.createMovedLabel(element, overlap)\n\t\t\t\t\tfilteredList?.push(labelCopy)\n\t\t\t\t\tprev = labelCopy\n\t\t\t\t}\n\n\t\t\t\tif (overlap <= 0) {\n\t\t\t\t\tfilteredList.push(element)\n\t\t\t\t\tprev = element\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\treturn filteredList\n\t}\n\n\tprivate getAllLabels(elemenets: Array<Label>) {\n\t\tconst filteredList: Array<Label> = []\n\t\tlet prev = { endAngle: 0 }\n\t\tconst elemenetsLength = elemenets.length\n\t\tlet lastCancerGeneLabelIndex = -1\n\n\t\tfor (let index = 0; index < elemenets.length; index++) {\n\t\t\tconst element = elemenets[index]\n\t\t\tif (element.isPrioritized) {\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tlastCancerGeneLabelIndex = index\n\t\t\t\tprev = element\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (index == 0) {\n\t\t\t\tif (elemenetsLength > 1) {\n\t\t\t\t\tif (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, 0)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfilteredList.push(element)\n\t\t\t\t\tprev = element\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst prevOverlap = prev.endAngle - element.startAngle + this.overlapAngle\n\n\t\t\tif (prevOverlap > 0 && prevOverlap < this.settings.label.maxDeltaAngle) {\n\t\t\t\tif (index == length - 1) {\n\t\t\t\t\t// last element\n\t\t\t\t\tfilteredList.push(element)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, prevOverlap)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst labelCopy = LabelFactory.createMovedLabel(element, prevOverlap)\n\t\t\t\tthis.collisions?.push(labelCopy)\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tprev = labelCopy\n\t\t\t}\n\n\t\t\tif (prevOverlap <= 0) {\n\t\t\t\tif (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, 0)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tprev = element\n\t\t\t}\n\t\t}\n\t\treturn filteredList\n\t}\n\n\tprivate isElementOverlappingNextCancerGene(\n\t\telemenets: Array<Label>,\n\t\tlastCancerGeneLabelIndex: number,\n\t\telement: Label,\n\t\tprevOverlap: number\n\t) {\n\t\tconst nextLabelWithCancerGene = this.getNextLabelWithCancerGene(elemenets, lastCancerGeneLabelIndex)\n\t\tif (nextLabelWithCancerGene) {\n\t\t\tconst nextOverlap = element.endAngle + prevOverlap - nextLabelWithCancerGene.startAngle + this.overlapAngle\n\t\t\tif (nextOverlap > 0) {\n\t\t\t\t// skip element\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate getNextLabelWithCancerGene(elemenets: Array<Label>, lastCancerGeneLabelIndex: number) {\n\t\treturn elemenets.find((label, index) => label.isPrioritized && index > lastCancerGeneLabelIndex)\n\t}\n}\n", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport MLabel from '#plots/disco/label/MLabel.ts'\nimport type SnvArc from './SnvArc.ts'\n\nexport default class NonExonicSnvArcsMapper {\n\tprivate sampleName: string\n\tprivate reference: Reference\n\tprivate onePxArcAngle: number\n\tprivate nonExonicInnerRadius: number\n\tprivate nonExonicWidht: number\n\n\tconstructor(nonExonicInnerRadius: number, nonExonicWidht: number, sampleName: string, reference: Reference) {\n\t\tthis.nonExonicInnerRadius = nonExonicInnerRadius\n\t\tthis.nonExonicWidht = nonExonicWidht\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\n\t\tthis.onePxArcAngle = 1 / nonExonicInnerRadius\n\t}\n\n\tmap(arcData: Array<Data>): Array<SnvArc> {\n\t\tconst innerRadius = this.nonExonicInnerRadius\n\t\tconst outerRadius = innerRadius + this.nonExonicWidht\n\n\t\tconst arcs: Array<SnvArc> = []\n\n\t\tarcData.forEach(data => {\n\t\t\tconst mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : undefined\n\n\t\t\tconst startAngle = this.calculateStartAngle(data)\n\t\t\tconst endAngle = this.calculateEndAngle(data)\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tconst arc: SnvArc = {\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tcolor: mLabel.color,\n\t\t\t\ttext: data.gene,\n\t\t\t\tdataClass: mLabel.label,\n\t\t\t\tmname: data.mname,\n\t\t\t\tchr: data.chr,\n\t\t\t\tpos: data.position,\n\t\t\t\tvafs: data.vafs,\n\t\t\t\tsampleName: [data.sampleName]\n\t\t\t}\n\n\t\t\tarcs.push(arc)\n\t\t})\n\n\t\treturn arcs\n\t}\n\n\tcalculateStartAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tchromosome.startAngle +\n\t\t\t(chromosome.endAngle - chromosome.startAngle) * (Number(data.position) / chromosome.size) -\n\t\t\tthis.onePxArcAngle\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tthis.onePxArcAngle +\n\t\t\tchromosome.startAngle +\n\t\t\t(chromosome.endAngle - chromosome.startAngle) * (Number(data.position) / chromosome.size)\n\t\t)\n\t}\n}\n", "export default class GradientColorProvider {\n static provide(value: number): string {\n const clampedValue = Math.min(Math.max(value, 0), 1);\n\n const colorValue = Math.round(clampedValue * 255);\n\n return `rgb(${colorValue}, ${colorValue}, ${colorValue})`;\n }\n}", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport type LohArc from './LohArc.ts'\nimport GradientColorProvider from './GradientColorProvider.ts'\n\nexport default class LohArcMapper {\n\tprivate sampleName: string\n\tprivate reference: Reference\n\tprivate lohInnerRadius: number\n\tprivate lohWidth: number\n\n\tconstructor(lohInnerRadius: number, lohWidth: number, sampleName: string, reference: Reference) {\n\t\tthis.lohInnerRadius = lohInnerRadius\n\t\tthis.lohWidth = lohWidth\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t}\n\n\tmap(arcData: Array<Data>): Array<LohArc> {\n\t\tconst arcs: Array<LohArc> = []\n\n\t\tarcData.forEach(data => {\n\t\t\tconst startAngle = this.calculateStartAngle(data)\n\t\t\tconst endAngle = this.calculateEndAngle(data)\n\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tconst innerRadius = this.lohInnerRadius\n\t\t\tconst outerRadius = innerRadius + this.lohWidth\n\t\t\tconst color = GradientColorProvider.provide(data.segmean)\n\n\t\t\tconst arc: LohArc = {\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tcolor: color,\n\t\t\t\ttext: data.gene,\n\t\t\t\tchr: data.chr,\n\t\t\t\tstart: data.start,\n\t\t\t\tstop: data.stop,\n\t\t\t\tvalue: data.segmean\n\t\t\t}\n\n\t\t\tarcs.push(arc)\n\t\t})\n\n\t\treturn arcs\n\t}\n\n\tprivate calculateStartAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tchromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.start) / chromosome.size)\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.stop) / chromosome.size)\n\t}\n}\n", "import type Ring from './Ring.ts'\nimport type Chromosome from '#plots/disco/chromosome/Chromosome.ts'\nimport type Labels from '#plots/disco/label/Labels.ts'\nimport type SnvArc from '#plots/disco/snv/SnvArc.ts'\nimport type CnvArc from '#plots/disco/cnv/CnvArc.ts'\nimport type LohArc from '#plots/disco/loh/LohArc.ts'\nimport type MutationWaterfallPoint from '#plots/disco/waterfall/MutationWaterfallPoint.ts'\n\nexport default class Rings {\n\tlabelsRing: Labels\n\tchromosomesRing: Ring<Chromosome>\n\tnonExonicArcRing?: Ring<SnvArc>\n\tsnvArcRing?: Ring<SnvArc>\n\tcnvArcRing?: Ring<CnvArc>\n\tlohArcRing?: Ring<LohArc>\n\tmutationWaterfallRing?: Ring<MutationWaterfallPoint>\n\n\tconstructor(\n\t\tlabelsRing: Labels,\n\t\tchromosomesRing: Ring<Chromosome>,\n\t\tnonExonicArcRing?: Ring<SnvArc>,\n\t\tsnvArcRing?: Ring<SnvArc>,\n\t\tcnvArcRing?: Ring<CnvArc>,\n\t\tlohArcRing?: Ring<LohArc>,\n\t\tmutationWaterfallRing?: Ring<MutationWaterfallPoint>\n\t) {\n\t\tthis.labelsRing = labelsRing\n\t\tthis.chromosomesRing = chromosomesRing\n\t\tthis.nonExonicArcRing = nonExonicArcRing\n\t\tthis.snvArcRing = snvArcRing\n\t\tthis.cnvArcRing = cnvArcRing\n\t\tthis.lohArcRing = lohArcRing\n\t\tthis.mutationWaterfallRing = mutationWaterfallRing\n\t}\n}\n", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type MutationWaterfallPoint from './MutationWaterfallPoint.ts'\nimport type { MutationWaterfallDatum, MutationWaterfallLogRange } from './MutationWaterfallDatum.ts'\n\nexport default class MutationWaterfallMapper {\n\tprivate innerRadius: number\n\tprivate ringWidth: number\n\tprivate reference: Reference\n\tprivate logRange?: MutationWaterfallLogRange\n\tprivate color: string\n\n\tconstructor(\n\t\tinnerRadius: number,\n\t\tringWidth: number,\n\t\treference: Reference,\n\t\tlogRange?: MutationWaterfallLogRange,\n\t\tcolor = '#4d4d4d'\n\t) {\n\t\tthis.innerRadius = innerRadius\n\t\tthis.ringWidth = ringWidth\n\t\tthis.reference = reference\n\t\tthis.logRange = logRange\n\t\tthis.color = color\n\t}\n\n\tmap(data: Array<MutationWaterfallDatum> = []): Array<MutationWaterfallPoint> {\n\t\tif (!data.length) return []\n\n\t\tconst min = this.logRange?.min ?? 0\n\t\tconst max = this.logRange?.max ?? min + 1\n\t\tconst span = max - min || 1\n\n\t\tconst points: MutationWaterfallPoint[] = []\n\t\tfor (const datum of data) {\n\t\t\tconst chrIndex = this.reference.chromosomesOrder.indexOf(datum.chr)\n\t\t\tif (chrIndex === -1) continue\n\n\t\t\tconst chromosome = this.reference.chromosomes[chrIndex]\n\t\t\tconst chrAngleSpan = chromosome.endAngle - chromosome.startAngle\n\t\t\tconst relPos = chromosome.size > 0 ? datum.position / chromosome.size : 0\n\t\t\tconst angle = chromosome.startAngle + chrAngleSpan * relPos\n\n\t\t\tconst normalized = Math.max(0, Math.min(1, (datum.logDistance - min) / span))\n\t\t\tconst radius = this.innerRadius + this.ringWidth * normalized\n\n\t\t\tpoints.push({\n\t\t\t\tstartAngle: angle,\n\t\t\t\tendAngle: angle,\n\t\t\t\tinnerRadius: radius,\n\t\t\t\touterRadius: radius,\n\t\t\t\ttext: chromosome.text,\n\t\t\t\tcolor: this.color,\n\t\t\t\tchr: datum.chr,\n\t\t\t\tposition: datum.position,\n\t\t\t\tlogDistance: datum.logDistance,\n\t\t\t\tringInnerRadius: this.innerRadius,\n\t\t\t\tringWidth: this.ringWidth,\n\t\t\t\trangeMin: min,\n\t\t\t\trangeMax: max\n\t\t\t})\n\t\t}\n\n\t\treturn points\n\t}\n}\n", "import type Settings from '#plots/disco/Settings.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport Legend from '#plots/disco/legend/Legend.ts'\nimport FusionMapper from '#plots/disco/fusion/FusionMapper.ts'\nimport LohLegend from '#plots/disco/loh/LohLegend.ts'\nimport ViewModel from './ViewModel.ts'\nimport type DataMapper from '#plots/disco/data/DataMapper.ts'\nimport Ring from '#plots/disco/ring/Ring.ts'\nimport SnvArcsMapper from '#plots/disco/snv/SnvArcsMapper.ts'\nimport type SnvArc from '#plots/disco/snv/SnvArc.ts'\nimport type LohArc from '#plots/disco/loh/LohArc.ts'\nimport CnvArcsMapper from '#plots/disco/cnv/CnvArcsMapper.ts'\nimport type CnvArc from '#plots/disco/cnv/CnvArc.ts'\nimport LabelsMapper from '#plots/disco/label/LabelsMapper.ts'\nimport Labels from '#plots/disco/label/Labels.ts'\nimport NonExonicSnvArcsMapper from '#plots/disco/snv/NonExonicSnvArcsMapper.ts'\nimport LohArcMapper from '#plots/disco/loh/LohArcMapper.ts'\nimport Rings from '#plots/disco/ring/Rings.ts'\nimport { dtcnv, dtsnvindel } from '#shared/common.js'\nimport type { DiscoInteractions } from '../interactions/DiscoInteractions.ts'\nimport MutationWaterfallMapper from '#plots/disco/waterfall/MutationWaterfallMapper.ts'\nimport type MutationWaterfallPoint from '#plots/disco/waterfall/MutationWaterfallPoint.ts'\n\nexport default class ViewModelProvider {\n\tprivate settings: Settings\n\tprivate reference: Reference\n\tprivate sampleName: string\n\tprivate genesetName: string\n\tprivate dataMapper: DataMapper\n\tprivate discoInteractions: DiscoInteractions\n\n\tprivate nonExonicArcRing?: Ring<SnvArc> = undefined\n\tprivate snvArcsMapper?: SnvArcsMapper\n\tprivate snvArcRing?: Ring<SnvArc>\n\tprivate lohArcRing?: Ring<LohArc>\n\tprivate cnvArcsMapper?: CnvArcsMapper\n\tprivate cnvArcRing?: Ring<CnvArc>\n\tprivate mutationWaterfallRing?: Ring<MutationWaterfallPoint>\n\n\tconstructor(\n\t\tsettings: Settings,\n\t\tdataMapper: DataMapper,\n\t\treference: Reference,\n\t\tsampleName: string,\n\t\tgenesetName: string,\n\t\tdiscoInteractions: DiscoInteractions\n\t) {\n\t\tthis.settings = settings\n\t\tthis.dataMapper = dataMapper\n\t\tthis.reference = reference\n\t\tthis.sampleName = sampleName\n\t\tthis.genesetName = genesetName\n\t\tthis.discoInteractions = discoInteractions\n\t}\n\n\tmap(data: Array<any>) {\n\t\tconst dataHolder = this.dataMapper.map(data)\n\n\t\tlet labelsRing: Labels\n\t\tif (this.settings.Disco.showGeneNames) {\n\t\t\tconst labelsMapper = new LabelsMapper(\n\t\t\t\tthis.settings,\n\t\t\t\tthis.sampleName,\n\t\t\t\tthis.reference,\n\t\t\t\tdataHolder.cnvMaxPercentileAbs\n\t\t\t)\n\n\t\t\tconst labelsData = labelsMapper.map(dataHolder.labelData, dataHolder.cnvData)\n\t\t\tlabelsRing = new Labels(this.settings, labelsData, dataHolder.hasPrioritizedGenes)\n\t\t} else {\n\t\t\tlabelsRing = new Labels(this.settings, [], false)\n\t\t}\n\n\t\tconst chromosomesRing = new Ring(\n\t\t\tthis.settings.rings.chromosomeInnerRadius,\n\t\t\tthis.settings.rings.chromosomeWidth,\n\t\t\tthis.reference.chromosomes\n\t\t)\n\n\t\tconst nonExonicSnvArcsMapper = new NonExonicSnvArcsMapper(\n\t\t\tdataHolder.nonExonicInnerRadius,\n\t\t\tthis.settings.rings.nonExonicRingWidth,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference\n\t\t)\n\n\t\tconst nonExonicData = nonExonicSnvArcsMapper.map(dataHolder.nonExonicSnvData)\n\n\t\tif (nonExonicData.length > 0) {\n\t\t\tthis.nonExonicArcRing = new Ring(\n\t\t\t\tdataHolder.nonExonicInnerRadius,\n\t\t\t\tthis.settings.rings.nonExonicRingWidth,\n\t\t\t\tnonExonicData\n\t\t\t)\n\t\t}\n\n\t\tthis.snvArcsMapper = new SnvArcsMapper(\n\t\t\tdataHolder.snvInnerRadius,\n\t\t\tthis.settings.rings.snvRingWidth,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference\n\t\t)\n\t\tconst snvData = this.snvArcsMapper.map(dataHolder.snvRingDataMap)\n\t\tif (snvData.length > 0) {\n\t\t\tthis.snvArcRing = new Ring(dataHolder.snvInnerRadius, this.settings.rings.snvRingWidth, snvData)\n\t\t}\n\n\t\tconst lohMapper = new LohArcMapper(\n\t\t\tdataHolder.lohInnerRadius,\n\t\t\tthis.settings.rings.lohRingWidth,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference\n\t\t)\n\t\tconst lohData = lohMapper.map(dataHolder.lohData)\n\t\tif (lohData.length > 0) {\n\t\t\tthis.lohArcRing = new Ring(dataHolder.lohInnerRadius, this.settings.rings.lohRingWidth, lohData)\n\t\t}\n\n\t\tthis.cnvArcsMapper = new CnvArcsMapper(\n\t\t\tdataHolder.cnvInnerRadius,\n\t\t\tthis.settings.rings.cnvRingWidth,\n\t\t\tthis.settings,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference,\n\t\t\tdataHolder.percentilePositive,\n\t\t\tdataHolder.percentileNegative,\n\t\t\tdataHolder.cappedCnvMaxAbsValue,\n\t\t\tdataHolder.cnvMaxPercentileAbs,\n\t\t\tthis.settings.cnv.unit,\n\t\t\tthis.settings.Disco.cnvRenderingType\n\t\t)\n\n\t\tconst cnvData = this.cnvArcsMapper.map(dataHolder.cnvData)\n\t\tif (cnvData.length > 0) {\n\t\t\tthis.cnvArcRing = new Ring(dataHolder.cnvInnerRadius, this.settings.rings.cnvRingWidth, cnvData)\n\t\t}\n\n\t\tif (\n\t\t\tthis.settings.Disco.mutationWaterfallPlot &&\n\t\t\tdataHolder.mutationWaterfallData?.length &&\n\t\t\tdataHolder.mutationWaterfallInnerRadius !== undefined &&\n\t\t\t//Added this check to prevent TypeScript error \"mutationWaterfallInnerRadius might be undefined\"\n\t\t\t(dataHolder.mutationWaterfallInnerRadius ?? 0) > 0 &&\n\t\t\tdataHolder.mutationWaterfallLogRange\n\t\t) {\n\t\t\tconst mutationWaterfallMapper = new MutationWaterfallMapper(\n\t\t\t\tdataHolder.mutationWaterfallInnerRadius,\n\t\t\t\tthis.settings.rings.mutationWaterfallRingWidth,\n\t\t\t\tthis.reference,\n\t\t\t\tdataHolder.mutationWaterfallLogRange,\n\t\t\t\tthis.settings.Disco.mutationWaterfallColor || '#4d4d4d'\n\t\t\t)\n\n\t\t\tconst waterfallData = mutationWaterfallMapper.map(dataHolder.mutationWaterfallData)\n\t\t\tif (waterfallData.length > 0) {\n\t\t\t\tthis.mutationWaterfallRing = new Ring(\n\t\t\t\t\tdataHolder.mutationWaterfallInnerRadius,\n\t\t\t\t\tthis.settings.rings.mutationWaterfallRingWidth,\n\t\t\t\t\twaterfallData\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tconst fusionMapper = new FusionMapper(dataHolder.fusionRadius, this.sampleName, this.reference)\n\n\t\tconst fusions = fusionMapper.map(dataHolder.fusionData)\n\n\t\tlet lohLegend: LohLegend | undefined\n\n\t\tif (this.settings.legend.lohLegendEnabled && dataHolder.lohData.length) {\n\t\t\tlohLegend = new LohLegend(dataHolder.lohData.length)\n\t\t}\n\n\t\tconst fusionLegendCounts = fusions.reduce(\n\t\t\t(counts, fusion) => {\n\t\t\t\tif (\n\t\t\t\t\tfusion.target &&\n\t\t\t\t\tfusion.source.positionInChromosome.chromosome == fusion.target.positionInChromosome.chromosome\n\t\t\t\t)\n\t\t\t\t\tcounts.intrachromosomal++\n\t\t\t\telse counts.interchromosomal++\n\t\t\t\treturn counts\n\t\t\t},\n\t\t\t{ interchromosomal: 0, intrachromosomal: 0 }\n\t\t)\n\n\t\tconst legend = new Legend(\n\t\t\tthis.settings.legend.snvTitle,\n\t\t\tthis.settings.legend.cnvTitle,\n\t\t\tthis.settings.legend.lohTitle,\n\t\t\tthis.settings.legend.fusionTitle,\n\t\t\tthis.settings.Disco.cnvPercentile,\n\t\t\tthis.settings.Disco.cnvCutoffMode,\n\t\t\tthis.snvArcsMapper ? this.snvArcsMapper.snvClassMap : new Map(),\n\t\t\tthis.cnvArcsMapper ? this.cnvArcsMapper.cnvClassMap : new Map(),\n\t\t\tthis.settings.Disco.cnvRenderingType,\n\t\t\tfusions.length > 0,\n\t\t\tthis.discoInteractions,\n\t\t\tlohLegend,\n\t\t\tthis.settings.Disco.mutationWaterfallPlot && this.mutationWaterfallRing\n\t\t\t\t? {\n\t\t\t\t\t\tcolor: this.settings.Disco.mutationWaterfallColor || '#4d4d4d',\n\t\t\t\t\t\tonColorChange: this.discoInteractions.onMutationWaterfallColorChange\n\t\t\t\t }\n\t\t\t\t: undefined,\n\t\t\tfusionLegendCounts,\n\t\t\tdataHolder.cnvData.filter(event => event.dt == dtcnv).length\n\t\t)\n\n\t\tconst rings = new Rings(\n\t\t\tlabelsRing,\n\t\t\tchromosomesRing,\n\t\t\tthis.nonExonicArcRing,\n\t\t\tthis.snvArcRing,\n\t\t\tthis.cnvArcRing,\n\t\t\tthis.lohArcRing,\n\t\t\tthis.mutationWaterfallRing\n\t\t)\n\n\t\treturn new ViewModel(\n\t\t\tthis.settings,\n\t\t\trings,\n\t\t\tlegend,\n\t\t\tfusions,\n\t\t\tdataHolder,\n\t\t\tthis.genesetName,\n\t\t\tdata.filter(i => i.dt == dtsnvindel).length\n\t\t)\n\t}\n}\n", "import type ViewModel from '#plots/disco/viewmodel/ViewModel.ts'\nimport Reference from '#plots/disco/chromosome/Reference.ts'\nimport DataMapper from '#plots/disco/data/DataMapper.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport ViewModelProvider from './ViewModelProvider.ts'\nimport type { DiscoInteractions } from '../interactions/DiscoInteractions.ts'\nimport { dtsnvindel, dtcnv, dtloh, dtitd } from '#shared/common.js'\n\nexport class ViewModelMapper {\n\tstatic snvClassLayer = {\n\t\tM: 'exonic',\n\t\tE: 'exonic',\n\t\tF: 'exonic',\n\t\tN: 'exonic',\n\t\tS: 'exonic',\n\t\tD: 'exonic',\n\t\tI: 'exonic',\n\t\tP: 'exonic',\n\t\tL: 'exonic',\n\t\tUtr3: 'exonic',\n\t\tUtr5: 'exonic',\n\t\tProteinAltering: 'exonic',\n\t\tmnv: 'non-exonic',\n\t\tITD: 'non-exonic',\n\t\tinsertion: 'non-exonic',\n\t\tdeletion: 'non-exonic',\n\t\tIntron: 'non-exonic',\n\t\tX: 'non-exonic',\n\t\tnoncoding: 'non-exonic'\n\t}\n\n\tprivate settings: Settings\n\tprivate discoInteractions: DiscoInteractions\n\n\tconstructor(settings: Settings, discoInteractions: DiscoInteractions) {\n\t\t// the settings object retrieved is frozen. created\n\t\t// a mutable copy so ring dimensions can be adjusted at runtime\n\t\tthis.settings = JSON.parse(JSON.stringify(settings))\n\t\tthis.discoInteractions = discoInteractions\n\t}\n\n\tprivate applyRadius() {\n\t\tconst radius = this.settings.Disco.radius\n\t\tif (!radius) return\n\n\t\tconst scale = radius / this.settings.rings.labelLinesInnerRadius\n\n\t\tthis.settings.rings.labelLinesInnerRadius *= scale\n\t\tthis.settings.rings.labelsToLinesDistance *= scale\n\t\tthis.settings.rings.chromosomeInnerRadius *= scale\n\t}\n\n\tstatic computeDynamicRadius(data: Array<any>): number {\n\t\tlet ringCount = 0\n\t\tif (data.some(d => d.dt == dtsnvindel)) ringCount++\n\t\tif (data.some(d => d.dt == dtcnv || d.dt == dtitd)) ringCount++\n\t\tif (data.some(d => d.dt == dtloh)) ringCount++\n\n\t\tif (ringCount <= 1) return 200\n\t\tif (ringCount == 2) return 250\n\t\treturn 300\n\t}\n\n\tmap(opts: any): ViewModel {\n\t\tconst chrSizes = opts.args.genome.majorchr\n\n\t\t/** Remove hidden chromosomes */\n\t\tconst chromosomesOverride = {}\n\t\tfor (const chr of Object.keys(chrSizes)) {\n\t\t\tif (!this.settings.Disco.hiddenChromosomes.includes(chr)) {\n\t\t\t\tchromosomesOverride[chr] = chrSizes[chr]\n\t\t\t}\n\t\t}\n\n\t\tconst sampleName = opts.args.sampleName\n\n\t\tconst genome = opts.args.genome\n\n\t\tconst prioritizedGenes = genome?.geneset?.[0] ? genome.geneset[0].lst : []\n\n\t\tconst genesetName = genome?.geneset?.[0] ? genome.geneset[0].name : ''\n\n\t\tconst data: Array<any> = opts.args.data\n\n\t\tif (this.settings.Disco.autoRadius) {\n\t\t\tthis.settings.Disco.radius = ViewModelMapper.computeDynamicRadius(data)\n\t\t}\n\n\t\tthis.applyRadius()\n\n\t\tconst reference = new Reference(this.settings, chrSizes, chromosomesOverride)\n\n\t\tconst dataMapper = new DataMapper(this.settings, reference, sampleName, prioritizedGenes)\n\n\t\treturn new ViewModelProvider(\n\t\t\tthis.settings,\n\t\t\tdataMapper,\n\t\t\treference,\n\t\t\tsampleName,\n\t\t\tgenesetName,\n\t\t\tthis.discoInteractions\n\t\t).map(data)\n\t}\n}\n", "import type Legend from './Legend.ts'\nimport { CnvType } from '#plots/disco/cnv/CnvType.ts'\nimport { FusionLegend } from '#plots/disco/fusion/FusionLegend.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\nimport { scaleLinear } from 'd3-scale'\n\nexport default class LegendJSONMapper {\n\tprivate cappedCnvMaxAbsValue: number\n\n\tconstructor(cappedCnvMaxAbsValue: number) {\n\t\tthis.cappedCnvMaxAbsValue = cappedCnvMaxAbsValue\n\t}\n\n\tmap(legend: Legend) {\n\t\tconst legendJSON: Array<any> = []\n\n\t\tlet order = 0\n\t\tif (legend.snvClassMap) {\n\t\t\tthis.mapSnv(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.cnvCount > 0 && legend.cnvRenderingType == CnvRenderingType.heatmap) {\n\t\t\tthis.mapCnvHeatmap(legend, legendJSON, order++)\n\t\t} else if (legend.cnvCount > 0 && legend.cnvRenderingType == CnvRenderingType.bar) {\n\t\t\tif (legend.cnvClassMap) {\n\t\t\t\tthis.mapCnvBar(legend, legendJSON, order++)\n\t\t\t}\n\t\t}\n\n\t\tif (legend.cnvClassMap.has(CnvType.ITD)) {\n\t\t\tthis.mapItd(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.lohLegend) {\n\t\t\tthis.mapLoh(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.fusionLegend) {\n\t\t\tthis.mapFusion(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.mutationWaterfallLegend) {\n\t\t\tthis.mapMutationWaterfall(legend, legendJSON, order++)\n\t\t}\n\n\t\treturn legendJSON\n\t}\n\n\tprivate mapSnv(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tconst snvItems: Array<any> = []\n\n\t\tlet snvOrder = 0\n\n\t\tfor (const [snvKey, snvLegendElement] of legend.snvClassMap) {\n\t\t\tsnvItems.push({\n\t\t\t\ttermid: legend.snvTitle,\n\t\t\t\tkey: snvKey,\n\t\t\t\ttext: `${snvLegendElement.snvType} (${snvLegendElement.count})`,\n\t\t\t\tcolor: snvLegendElement.color,\n\t\t\t\torder: snvOrder++\n\t\t\t})\n\t\t}\n\n\t\tlegendJSON.push({\n\t\t\tname: legend.snvTitle,\n\t\t\torder: order,\n\t\t\titems: snvItems\n\t\t})\n\t}\n\n\tprivate mapCnvBar(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.cnvClassMap) return\n\t\tconst gain = legend.cnvClassMap.get(CnvType.Gain)\n\t\tconst loss = legend.cnvClassMap.get(CnvType.Loss)\n\t\tconst cap = legend.cnvClassMap.get(CnvType.Cap)\n\n\t\tif (gain && loss && cap) {\n\t\t\tlet cnvOrder = 0\n\t\t\tconst cnvItems: Array<any> = []\n\t\t\tif (gain.value > 0) {\n\t\t\t\tcnvItems.push({\n\t\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\t\tkey: CnvType.Gain,\n\t\t\t\t\ttext: `Max: ${gain.value}`,\n\t\t\t\t\tcolor: gain.color,\n\t\t\t\t\torder: cnvOrder++\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (loss.value < 0) {\n\t\t\t\tcnvItems.push({\n\t\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\t\tkey: CnvType.Loss,\n\t\t\t\t\ttext: `Min: ${loss.value}`,\n\t\t\t\t\tcolor: loss.color,\n\t\t\t\t\torder: cnvOrder++\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tcnvItems.push({\n\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\tkey: CnvType.Cap,\n\t\t\t\ttext: `Capping: ${cap.value}`,\n\t\t\t\tcolor: cap.color,\n\t\t\t\torder: cnvOrder++\n\t\t\t\t// ,\n\t\t\t\t// onClickCallback: this.onClickCallback\n\t\t\t})\n\t\t\tlegendJSON.push({\n\t\t\t\tname: legend.cnvTitle,\n\t\t\t\tid: 'sjpp-disco-cnv-legend',\n\t\t\t\torder: order,\n\t\t\t\titems: cnvItems\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate mapCnvHeatmap(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.cnvClassMap) return\n\t\tconst gain = legend.cnvClassMap.get(CnvType.Gain)\n\t\tconst loss = legend.cnvClassMap.get(CnvType.Loss)\n\t\tconst cap = legend.cnvClassMap.get(CnvType.Cap)\n\n\t\tif (gain && loss && cap) {\n\t\t\tlet cnvOrder = 0\n\n\t\t\tconst cnvItems: Array<any> = []\n\t\t\tconst base = {\n\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\twidth: 100,\n\t\t\t\torder: cnvOrder++,\n\t\t\t\tisLegendItem: true,\n\t\t\t\tdt: 4\n\t\t\t}\n\t\t\tif (gain.value > 0 && loss.value < 0) {\n\t\t\t\t// Use a symmetric scale for the heatmap\n\t\t\t\t// Matches the logic for coloring the arcs in the heatmap\n\t\t\t\t// in CnvHeatmapRenderer.ts\n\t\t\t\tconst maxValue = Math.max(Math.abs(loss.value), gain.value)\n\t\t\t\tconst domain = [-maxValue, 0, maxValue]\n\t\t\t\tcnvItems.push(\n\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: CnvType.LossGain,\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\tscale: scaleLinear([-1, 0, 1], [loss.color, 'white', gain.color]),\n\t\t\t\t\t\t\tlabels: { left: 'Loss', right: 'Gain' },\n\t\t\t\t\t\t\tnumericInputs: {\n\t\t\t\t\t\t\t\tcutoffMode: legend.cnvCutoffMode,\n\t\t\t\t\t\t\t\tdefaultPercentile: legend.cnvPercentile,\n\t\t\t\t\t\t\t\tcallback: obj => legend.discoInteractions.colorScaleNumericInputsCallback(obj)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbase\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tif (gain.value > 0) {\n\t\t\t\t\tcnvItems.push(\n\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: CnvType.Gain,\n\t\t\t\t\t\t\t\ttext: 'Copy number gain',\n\t\t\t\t\t\t\t\tdomain: [0, gain.value],\n\t\t\t\t\t\t\t\tscale: scaleLinear([0, 1], ['white', gain.color])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbase\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (loss.value < 0) {\n\t\t\t\t\tcnvItems.push(\n\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: CnvType.Loss,\n\t\t\t\t\t\t\t\ttext: 'Copy number loss',\n\t\t\t\t\t\t\t\tdomain: [loss.value, 0],\n\t\t\t\t\t\t\t\tscale: scaleLinear([0, 1], [loss.color, 'white'])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbase\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tlegendJSON.push({\n\t\t\t\tname: legend.cnvTitle,\n\t\t\t\torder: order,\n\t\t\t\tid: 'sjpp-disco-cnv-legend',\n\t\t\t\titems: cnvItems\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate mapItd(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tconst itd = legend.cnvClassMap.get(CnvType.ITD)\n\t\tif (!itd) return\n\t\tlegendJSON.push({\n\t\t\tname: 'ITD',\n\t\t\torder,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttermid: 'ITD',\n\t\t\t\t\tkey: CnvType.ITD,\n\t\t\t\t\ttext: `ITD (${itd.value})`,\n\t\t\t\t\tcolor: itd.color,\n\t\t\t\t\torder: 0\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tprivate mapLoh(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.lohLegend) return\n\n\t\tlegendJSON.push({\n\t\t\tname: legend.lohTitle,\n\t\t\torder: order,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttermid: legend.lohTitle,\n\t\t\t\t\tkey: 'count',\n\t\t\t\t\ttext: `LOH (${legend.lohLegend.count})`,\n\t\t\t\t\tskipIcon: true,\n\t\t\t\t\torder: 0\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tprivate mapFusion(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tconst fusionItems: Array<any> = []\n\n\t\tfusionItems.push({\n\t\t\ttermid: legend.fusionTitle,\n\t\t\tkey: FusionLegend.Interchromosomal,\n\t\t\ttext: `Interchromosomal (${legend.fusionLegendCounts.interchromosomal})`,\n\t\t\tcolor: FusionLegend.Interchromosomal.valueOf(),\n\t\t\torder: 0\n\t\t})\n\n\t\tfusionItems.push({\n\t\t\ttermid: legend.fusionTitle,\n\t\t\tkey: FusionLegend.Intrachromosomal,\n\t\t\ttext: `Intrachromosomal (${legend.fusionLegendCounts.intrachromosomal})`,\n\t\t\tcolor: FusionLegend.Intrachromosomal.valueOf(),\n\t\t\torder: 1\n\t\t})\n\n\t\tlegendJSON.push({\n\t\t\tname: legend.fusionTitle,\n\t\t\torder: order,\n\t\t\titems: fusionItems\n\t\t})\n\t}\n\n\tprivate mapMutationWaterfall(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.mutationWaterfallLegend) return\n\n\t\tconst waterfallItems: Array<any> = []\n\n\t\twaterfallItems.push({\n\t\t\ttermid: 'Mutation Waterfall Plot',\n\t\t\tkey: 'mutation-waterfall-color',\n\t\t\ttext: 'Dot color',\n\t\t\tcolor: legend.mutationWaterfallLegend.color,\n\t\t\torder: 0,\n\t\t\tcolorPicker: true,\n\t\t\tinputWidth: 28,\n\t\t\twidth: 0,\n\t\t\tonColorChange: legend.mutationWaterfallLegend.onColorChange\n\t\t})\n\n\t\twaterfallItems.push({\n\t\t\ttermid: 'Mutation Waterfall Plot',\n\t\t\tkey: 'mutation-waterfall-axis',\n\t\t\ttext: 'Axis: log10 intermutation distance',\n\t\t\torder: 1,\n\t\t\tskipIcon: true,\n\t\t\twidth: 0\n\t\t})\n\n\t\tlegendJSON.push({\n\t\t\tname: 'Mutation Waterfall Plot',\n\t\t\torder: order,\n\t\t\titems: waterfallItems\n\t\t})\n\t}\n}\n", "import type { SvgG } from '../../../types/d3'\nimport { Menu, renderTable } from '#dom'\nimport type { TableCell, TableColumn } from '#dom'\n\nexport type AlternativeCnvSet = {\n\tnameHtml?: string\n\tname?: string\n\tinuse?: boolean\n\tmlst: any[]\n\tattrs?: { [key: string]: string }\n}\n\nfunction parseSetLabel(set: AlternativeCnvSet, index: number) {\n\tlet text = set.name || `Set ${index + 1}`\n\tlet href: string | undefined\n\tlet target = '_blank'\n\n\tif (set.nameHtml) {\n\t\tconst parser = new DOMParser()\n\t\tconst doc = parser.parseFromString(set.nameHtml, 'text/html')\n\t\tconst anchor = doc.querySelector('a')\n\t\tif (anchor) {\n\t\t\thref = anchor.getAttribute('href') || undefined\n\t\t\ttarget = anchor.getAttribute('target') || '_blank'\n\t\t\ttext = anchor.textContent?.trim() || text\n\t\t} else {\n\t\t\ttext = doc.body.textContent?.trim() || text\n\t\t}\n\t}\n\n\treturn { text, href, target }\n}\n\n/**\n * Render the CNV source label and a control inside the legend. Clicking the\n * control will display a menu with a table to choose among the\n * available CNV data sets.\n *\n * @param legendG - legend <g> element to append the label and control to\n * @param datasets - list of alternative CNV data sets from the server\n * @param fontSize - font size used in the legend\n * @param onChange - callback fired with the index of the selected data set\n */\nexport function renderCnvSourceLegend(\n\tlegendG: SvgG,\n\tdatasets: AlternativeCnvSet[],\n\tfontSize: number,\n\tonChange: (index: number) => void\n) {\n\tif (!legendG || legendG.empty()) throw new Error('legendG is required')\n\tif (!datasets || datasets.length === 0) throw new Error('at least one dataset is required')\n\n\tlegendG.select('g.sjpp-cnv-source').remove()\n\n\tconst gBBox = legendG.node()!.getBBox()\n\tconst cnvSrcWrapper = legendG\n\t\t.append('g')\n\t\t.attr('class', 'sjpp-cnv-source')\n\t\t.attr('transform', `translate(${gBBox.width},${gBBox.y + fontSize})`)\n\n\tconst btnPaddingX = Math.round(fontSize * 0.8)\n\tconst btnHgt = Math.round(fontSize * 1.8)\n\n\tconst btnWrapper = cnvSrcWrapper\n\t\t.append('g')\n\t\t.attr('transform', `translate(${fontSize},${-btnHgt / 2})`)\n\t\t.style('cursor', 'pointer')\n\t\t.on('click', function (event: MouseEvent) {\n\t\t\tevent.stopPropagation()\n\t\t\tshowCnvMenu(this)\n\t\t})\n\n\tconst btnText = btnWrapper\n\t\t.append('text')\n\t\t.attr('x', 0)\n\t\t.attr('y', btnHgt / 2)\n\t\t.attr('font-size', fontSize)\n\t\t.attr('text-anchor', 'start')\n\t\t.attr('dominant-baseline', 'middle')\n\t\t.text('Select source \u25B2'.toUpperCase())\n\n\tconst textW = btnText.node() ? Math.ceil(btnText.node()!.getBBox().width) : 0\n\tconst btnWdt = textW + btnPaddingX * 2\n\n\tbtnWrapper\n\t\t.insert('rect', ':first-child')\n\t\t.attr('width', btnWdt)\n\t\t.attr('height', btnHgt)\n\t\t.attr('rx', 10)\n\t\t.attr('ry', 10)\n\t\t.style('fill', '#f2f2f2')\n\n\tbtnText.attr('x', btnWdt / 2).attr('text-anchor', 'middle')\n\n\tconst cnvMenu = new Menu({\n\t\tonHide: () => {\n\t\t\tbtnText.text('Select source \u25B2'.toUpperCase())\n\t\t}\n\t})\n\n\tfunction showCnvMenu(dom: Element) {\n\t\tbtnText.text('Select source \u25BC'.toUpperCase())\n\t\tcnvMenu.clear().showunder(dom)\n\n\t\tcnvMenu.d.append('div').text('Choose data source for CNV:').style('margin', '5px 5px 0 5px')\n\n\t\tconst tableHolder = cnvMenu.d.append('div').style('padding', '5px')\n\n\t\tconst { columns, rows } = buildTableData(datasets)\n\t\tconst [, activeIndex] = getActiveDataset(datasets)\n\n\t\trenderTable({\n\t\t\tcolumns,\n\t\t\trows,\n\t\t\tdiv: tableHolder,\n\t\t\tsingleMode: true,\n\t\t\tmaxWidth: '70vw',\n\t\t\tmaxHeight: '60vh',\n\t\t\tselectedRows: [activeIndex],\n\t\t\theader: { allowSort: false },\n\t\t\tnoButtonCallback: (rowIndex, node) => {\n\t\t\t\tconst inputIndex = Number(node?.value)\n\t\t\t\tconst selectedIndex = Number.isNaN(inputIndex) ? rowIndex : inputIndex\n\t\t\t\tif (!Number.isNaN(selectedIndex)) onChange(selectedIndex)\n\t\t\t\tcnvMenu.hide()\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunction getActiveDataset(datasets) {\n\tlet currentIndex = datasets.findIndex(d => d.inuse)\n\tif (currentIndex == -1) currentIndex = 0\n\treturn [datasets[currentIndex], currentIndex]\n}\n\nfunction buildTableData(datasets: AlternativeCnvSet[]): { columns: TableColumn[]; rows: TableCell[][] } {\n\tconst attrKeys: string[] = []\n\tfor (const set of datasets) {\n\t\tif (!set.attrs) continue\n\t\tfor (const key of Object.keys(set.attrs)) {\n\t\t\tif (!attrKeys.includes(key)) attrKeys.push(key)\n\t\t}\n\t}\n\n\tconst columns: TableColumn[] = [{ label: 'Source' }]\n\tfor (const key of attrKeys) columns.push({ label: key })\n\n\tconst rows: TableCell[][] = datasets.map((set, index) => {\n\t\tconst sourceInfo = parseSetLabel(set, index)\n\t\tconst cells: TableCell[] = []\n\n\t\tif (set.nameHtml) cells.push({ html: set.nameHtml })\n\t\telse if (sourceInfo.href) cells.push({ value: sourceInfo.text, url: sourceInfo.href })\n\t\telse cells.push({ value: sourceInfo.text })\n\n\t\tfor (const key of attrKeys) {\n\t\t\tconst value = set.attrs?.[key]\n\t\t\tcells.push({ value: value ?? '' })\n\t\t}\n\n\t\treturn cells\n\t})\n\n\treturn { columns, rows }\n}\n", "import type Legend from './Legend.ts'\nimport { svgLegend, getMaxLabelWidth } from '#dom'\nimport LegendJSONMapper from './LegendJSONMapper.ts'\nimport { dtcnv } from '#shared/common.js'\nimport { renderCnvSourceLegend, type AlternativeCnvSet } from '../cnv/renderCnvSourceLegend.ts'\nimport type ViewModel from '../viewmodel/ViewModel.ts'\n\nexport default class LegendRenderer {\n\tprivate legendJSONMapper: LegendJSONMapper\n\tprivate fontSize: number\n\n\tconstructor(cappedCnvMaxAbsValue = 0, fontSize: number) {\n\t\tthis.fontSize = fontSize\n\t\tthis.legendJSONMapper = new LegendJSONMapper(cappedCnvMaxAbsValue)\n\t}\n\n\trender(\n\t\tholder: any,\n\t\tlegend: Legend,\n\t\txOffset: number,\n\t\tsvgw: number,\n\t\tsvgh: number,\n\t\tviewModel: ViewModel,\n\t\tonCnvSourceSelect: (index: number) => void\n\t) {\n\t\tconst svgLegendRenderer = svgLegend({\n\t\t\tholder: holder.append('g').attr('data-testid', 'sjpp_disco_plot_legend'),\n\t\t\trectFillFxn: d => d.color,\n\t\t\ticonStroke: '#aaa'\n\t\t})\n\t\tconst data = this.legendJSONMapper.map(legend)\n\n\t\tconst legendTitles = data.map(d => d.name.trim())\n\t\tconst maxLabelWidth = getMaxLabelWidth(holder, legendTitles)\n\n\t\tconst d = {\n\t\t\txOffset: maxLabelWidth + xOffset\n\t\t}\n\n\t\tsvgLegendRenderer(data, {\n\t\t\tsettings: Object.assign(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tsvgw: svgw,\n\t\t\t\t\tsvgh: svgh,\n\t\t\t\t\tdimensions: d,\n\t\t\t\t\tfontsize: this.fontSize\n\t\t\t\t}\n\t\t\t)\n\t\t})\n\t\tconst altCnv: AlternativeCnvSet[] = viewModel.appState.args.alternativeDataByDt?.[dtcnv]\n\n\t\tif (altCnv && altCnv.length > 0) {\n\t\t\tconst legendG = holder.select('g[data-testid=\"sjpp_disco_plot_legend\"]')\n\t\t\tconst cnvLegendG = legendG.select('#sjpp-disco-cnv-legend')\n\n\t\t\tif (!legendG.empty()) {\n\t\t\t\t/** This shouldn't be necessary. It's reasonable to assume\n\t\t\t\t * a cnv legend group will exist if there is a cnvClassMap.*/\n\t\t\t\tconst add2G = cnvLegendG.empty() ? legendG : cnvLegendG\n\t\t\t\trenderCnvSourceLegend(add2G, altCnv, this.fontSize, onCnvSourceSelect)\n\t\t\t}\n\t\t}\n\t}\n}\n", "import * as d3 from 'd3'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport type Chromosome from './Chromosome.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { bplen } from '#shared/common.js'\n\nexport default class ChromosomesRenderer implements IRenderer {\n private padAngle: number\n private innerRadius: number\n private outerRadius: number\n private fontSize: number\n\n constructor(\n padAngle: number,\n innerRadius: number,\n outerRadius: number,\n fontSize: number\n ) {\n this.padAngle = padAngle\n this.innerRadius = innerRadius\n this.outerRadius = outerRadius\n this.fontSize = fontSize\n }\n\n\trender(holder: any, elements: Array<Chromosome>) {\n\t\tconst pie = d3\n\t\t\t.pie<Chromosome>()\n\t\t\t.padAngle(this.padAngle)\n\t\t\t.value(d => d.size)\n\t\t\t.sort(null)\n\n\t\tconst arcData = pie(elements)\n\n\t\tconst arc = d3.arc<d3.PieArcDatum<number>>().innerRadius(this.innerRadius).outerRadius(this.outerRadius)\n\n\t\tconst arcs = holder.append('g').attr('data-testid', 'sjpp_chromosomes_arc_group')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(arcData)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', arc)\n\t\t\t.attr('fill', 'black')\n\t\t\t.on('mousemove', (event: MouseEvent, d: d3.PieArcDatum<Chromosome>) => {\n\t\t\t\t// Get mouse pointer coordinates relative to the arcs group\n\t\t\t\tconst [x, y] = d3.pointer(event, arcs.node())\n\t\t\t\t// Convert Cartesian coordinates to polar angle (in radians)\n\t\t\t\tlet angle = Math.atan2(y, x) + Math.PI / 2\n\t\t\t\t// Normalize angle to be within [0, 2\u03C0]\n\t\t\t\tif (angle < 0) angle += 2 * Math.PI\n\t\t\t\t// Compute how far along this arc segment the angle falls (fraction between 0 and 1)\n\t\t\t\tconst frac = Math.max(0, Math.min(1, (angle - d.data.startAngle) / (d.data.endAngle - d.data.startAngle)))\n\t\t\t\t// Interpolate position along chromosome based on angle\n\t\t\t\tconst pos = Math.round(frac * d.data.size)\n\t\t\t\t// Update tooltip text with chromosome name and position (formatted with commas)\n\t\t\t\tmenu.d.html(`<span style=\"font-size:.8em\">chr${d.data.text}</span> ${bplen(pos)}`).style('padding', '5px')\n\t\t\t\t// Display tooltip at cursor position\n\t\t\t\tmenu.show(event.x, event.y)\n\t\t\t})\n\t\t\t.on('mouseenter', (event: MouseEvent) => {\n\t\t\t\t// When hovering over an arc, highlight it with an orange border\n\t\t\t\td3.select(event.currentTarget as SVGElement)\n\t\t\t\t\t.attr('stroke', 'orange')\n\t\t\t\t\t.attr('stroke-width', 1)\n\t\t\t})\n\t\t\t.on('mouseleave', event => {\n\t\t\t\t// Remove highlight and hide tooltip when mouse leaves the arc\n\t\t\t\td3.select(event.currentTarget as SVGElement)\n\t\t\t\t\t.attr('stroke', null)\n\t\t\t\t\t.attr('stroke-width', null)\n\t\t\t\tmenu.hide()\n\t\t\t})\n\n\t\tarcs\n\t\t\t.selectAll('text')\n\t\t\t.data(arcData)\n\t\t\t.enter()\n\t\t\t.append('text')\n\t\t\t// TODO extract all value and functions to Chromosomes\n\t\t\t.attr('transform', (d: d3.PieArcDatum<Chromosome>) => {\n\t\t\t\treturn `translate(${arc.centroid(<any>d)}) rotate(${(d.data.angle * 180) / Math.PI - 90})${\n\t\t\t\t\td.data.angle > Math.PI ? 'rotate(180)' : ''\n\t\t\t\t}`\n\t\t\t})\n .attr('dy', '0.35em')\n .attr('text-anchor', 'middle')\n .text((d: d3.PieArcDatum<Chromosome>) => d.data.text)\n .style('fill', 'white')\n .style('font-size', `${this.fontSize}px`)\n .style('padding', '500px')\n //prevents chromosome number from interfering with hover\n .style('pointer-events', 'none')\n .style('padding', '500px')\n\t}\n}\n", "import type IRenderer from '#plots/disco/IRenderer.ts'\nimport { select } from 'd3-selection'\nimport { line } from 'd3-shape'\nimport type Label from './Label.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport type MutationTooltip from '#plots/disco/label/MutationTooltip.ts'\nimport type FusionTooltip from '#plots/disco/fusion/FusionTooltip.ts'\nimport { table2col } from '#dom/table2col'\nimport type CnvTooltip from '#plots/disco/cnv/CnvTooltip.ts'\nimport { appendVafBars, hasAnyValidVafEntry } from '#plots/disco/snv/vafTooltip.ts'\nimport { dtitd, dtloh } from '#shared/common.js'\nimport { dofetch3 } from '#common/dofetch'\n\ntype GeneCoordinates = {\n\tchr: string\n\tstart: number\n\tstop: number\n}\n\ntype GeneLookup = (gene: string, genome: string) => Promise<any>\n\nexport default class LabelsRenderer implements IRenderer {\n\tprivate animationDuration: number\n\tprivate fontSize: number\n\tprivate geneClickListener: (gene: string, mnames: Array<string>) => void\n\tprivate genomeName?: string\n\tprivate intervalEvents: Array<CnvTooltip>\n\tprivate geneLookup: GeneLookup\n\tprivate geneCoordinatesCache = new Map<string, Promise<GeneCoordinates | undefined>>()\n\tprivate hoverRequestId = 0\n\n\tconstructor(\n\t\tanimationDuration: number,\n\t\tfontSize: number,\n\t\tgeneClickListener: (gene: string, mnames: Array<string>) => void,\n\t\tgenomeName?: string,\n\t\tintervalEvents: Array<CnvTooltip> = [],\n\t\tgeneLookup: GeneLookup = async (gene, genome) =>\n\t\t\tawait dofetch3('genelookup', { body: { deep: 1, input: gene, genome } })\n\t) {\n\t\tthis.animationDuration = animationDuration\n\t\tthis.fontSize = fontSize\n\t\tthis.geneClickListener = geneClickListener\n\t\tthis.genomeName = genomeName\n\t\tthis.intervalEvents = intervalEvents\n\t\tthis.geneLookup = geneLookup\n\t}\n\n\trender(holder: any, elements: Array<Label>, collisions?: Array<Label>) {\n\t\tconst labelsG = holder.append('g')\n\n\t\tconst lineFunction = line<{ x: number; y: number }>()\n\t\t\t.x(point => point.x)\n\t\t\t.y(point => point.y)\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tlabelsG\n\t\t\t.selectAll('.group')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.attr('class', 'group')\n\t\t\t.each((label: Label, i: number, nodes: HTMLDivElement[]) => {\n\t\t\t\tconst g = select(nodes[i])\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'chord-text')\n\t\t\t\t\t.attr('data-testid', 'sjpp-disco-genelabel')\n\t\t\t\t\t.attr('dy', '.35em')\n\t\t\t\t\t.attr('transform', label.transform)\n\t\t\t\t\t.style('text-anchor', label.textAnchor)\n\t\t\t\t\t.style('font-size', `${this.fontSize}px`)\n\t\t\t\t\t.style('fill', label.color)\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.text(label.text)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (label.mutationsTooltip) {\n\t\t\t\t\t\t\tthis.geneClickListener(\n\t\t\t\t\t\t\t\tlabel.text,\n\t\t\t\t\t\t\t\tlabel.mutationsTooltip.map(value => value.mname)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseover', async (mouseEvent: MouseEvent) => {\n\t\t\t\t\t\tconst requestId = ++this.hoverRequestId\n\t\t\t\t\t\tthis.renderTooltip(menu, label)\n\t\t\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\n\t\t\t\t\t\tconst coordinates = await this.getGeneCoordinates(label)\n\t\t\t\t\t\tif (requestId != this.hoverRequestId || !coordinates) return\n\n\t\t\t\t\t\tconst overlappingEvents = this.intervalEvents.filter(\n\t\t\t\t\t\t\tevent =>\n\t\t\t\t\t\t\t\tthis.sameChromosome(event.chr, coordinates.chr) &&\n\t\t\t\t\t\t\t\tcoordinates.stop >= event.start &&\n\t\t\t\t\t\t\t\tevent.stop >= coordinates.start\n\t\t\t\t\t\t)\n\t\t\t\t\t\tthis.renderTooltip(menu, label, overlappingEvents)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\tthis.hoverRequestId++\n\t\t\t\t\t\tmenu.clear()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tg.append('path')\n\t\t\t\t\t.attr('class', 'chord-tick')\n\t\t\t\t\t.datum(label.line.points)\n\t\t\t\t\t.style('stroke', label.color)\n\t\t\t\t\t.style('fill', 'none')\n\t\t\t\t\t.attr('d', lineFunction)\n\t\t\t})\n\n\t\tlabelsG.selectAll('.group').each((label: Label, i: number, nodes: HTMLDivElement[]) => {\n\t\t\tconst collision = collisions ? collisions.find(l => l.text === label.text) : undefined\n\t\t\tif (collision) {\n\t\t\t\tconst g = select(nodes[i])\n\t\t\t\tg.selectAll('.chord-text')\n\t\t\t\t\t.datum(collision)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(this.animationDuration)\n\t\t\t\t\t.attr('transform', collision.transform)\n\t\t\t\t\t.style('text-anchor', collision.textAnchor)\n\n\t\t\t\tg.selectAll('.chord-tick')\n\t\t\t\t\t.datum(collision.line.points)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(this.animationDuration)\n\t\t\t\t\t.style('fill', 'none')\n\t\t\t\t\t.attr('d', lineFunction)\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate renderTooltip(menu: any, label: Label, intervalEvents = label.cnvTooltip) {\n\t\tmenu.clear()\n\t\tconst table = table2col({ holder: menu.d })\n\t\tthis.createTooltip(table, label, intervalEvents)\n\t}\n\n\tprivate async getGeneCoordinates(label: Label): Promise<GeneCoordinates | undefined> {\n\t\tif (!this.genomeName || !this.intervalEvents.length) return\n\n\t\tconst cacheKey = `${this.genomeName}:${label.text}:${label.chr}`\n\t\tlet lookup = this.geneCoordinatesCache.get(cacheKey)\n\t\tif (!lookup) {\n\t\t\tlookup = this.lookupGeneCoordinates(label)\n\t\t\tthis.geneCoordinatesCache.set(cacheKey, lookup)\n\t\t}\n\t\treturn await lookup\n\t}\n\n\tprivate async lookupGeneCoordinates(label: Label): Promise<GeneCoordinates | undefined> {\n\t\ttry {\n\t\t\tconst response = await this.geneLookup(label.text, this.genomeName!)\n\t\t\tif (response?.error || !Array.isArray(response?.gmlst)) return\n\n\t\t\tconst models = response.gmlst.filter(\n\t\t\t\tmodel =>\n\t\t\t\t\tthis.sameChromosome(model.chr, label.chr) && Number.isFinite(model.start) && Number.isFinite(model.stop)\n\t\t\t)\n\t\t\tif (!models.length) return\n\n\t\t\treturn {\n\t\t\t\tchr: models[0].chr,\n\t\t\t\tstart: Math.min(...models.map(model => model.start)),\n\t\t\t\tstop: Math.max(...models.map(model => model.stop))\n\t\t\t}\n\t\t} catch {\n\t\t\treturn\n\t\t}\n\t}\n\n\tprivate sameChromosome(a: string, b: string) {\n\t\treturn a?.replace(/^chr/i, '').toLowerCase() == b?.replace(/^chr/i, '').toLowerCase()\n\t}\n\n\tcreateTooltip(table: any, label: Label, intervalEvents = label.cnvTooltip) {\n\t\tif (label.mutationsTooltip) {\n\t\t\tconst [td1, td2] = table.addRow()\n\t\t\ttd1.text('Gene')\n\t\t\ttd2.append('span').style('margin-left', '5px').text(label.text)\n\n\t\t\tlabel.mutationsTooltip.forEach((mutation: MutationTooltip) => {\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\n\t\t\t\t\ttd1.text('Mutation')\n\t\t\t\t\ttd2\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.text(mutation.mname)\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', mutation.color)\n\t\t\t\t\t\t.text(`${mutation.dataClass}`)\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t\t\t.text(` ${mutation.chr}:${mutation.position}`)\n\t\t\t\t\tif (hasAnyValidVafEntry(mutation.vafs)) {\n\t\t\t\t\t\tappendVafBars(td2, mutation.vafs)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (label.fusionTooltip) {\n\t\t\tconst [td1, td2] = table.addRow()\n\n\t\t\ttd1.text('Data type')\n\t\t\ttd2.append('span').text('Fusion transcript')\n\t\t\tlabel.fusionTooltip.forEach((fusionTooltip: FusionTooltip) => {\n\t\t\t\tconst [td1, td2] = table.addRow()\n\n\t\t\t\ttd1.text('Position')\n\t\t\t\ttd2.append('span').text(\n\t\t\t\t\t` ${fusionTooltip.geneA ? fusionTooltip.geneA : '?'} ${fusionTooltip.chrA}:${fusionTooltip.posA}\n\t\t\t\t\t\t${fusionTooltip.strandA == '+' ? 'forward' : 'reverse'} > ` +\n\t\t\t\t\t\t`${fusionTooltip.geneB ? fusionTooltip.geneB : '?'} ${fusionTooltip.chrB}:${fusionTooltip.posB} ${\n\t\t\t\t\t\t\tfusionTooltip.strandB == '+' ? 'forward' : 'reverse'\n\t\t\t\t\t\t} `\n\t\t\t\t)\n\t\t\t})\n\t\t}\n\n\t\tif (intervalEvents) {\n\t\t\tintervalEvents.forEach((cnv: CnvTooltip) => {\n\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\ttd1.text(cnv.dt == dtitd ? 'ITD' : cnv.dt == dtloh ? 'LOH' : 'CNV')\n\t\t\t\ttd2.append('span').style('margin-left', '5px').style('background-color', cnv.color).html('&nbsp;&nbsp;')\n\n\t\t\t\tif (cnv.dt != dtitd && cnv.dt != dtloh) td2.append('span').style('margin-left', '7.5px').text(cnv.value)\n\t\t\t\ttd2\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('margin-left', '7.5px')\n\t\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t\t.text(`${cnv.chr}:${cnv.start}-${cnv.stop}`)\n\t\t\t})\n\t\t}\n\t}\n}\n", "import type Settings from './Settings'\nimport { copyMerge } from '#rx'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\n\nexport default function discoDefaults(overrides: any = {}, app?: any): Settings {\n\tconst hiddenChromosomes: string[] = []\n\t//TODO: Change skipChrM into Set to accept multiple chromosomes\n\tif (app?.vocabApi?.termdbConfig?.queries?.singleSampleMutation?.discoPlot?.skipChrM) {\n\t\thiddenChromosomes.push('chrM')\n\t}\n\n\tconst defaults = {\n\t\tdownloadImgName: 'disco.plot',\n\n\t\tDisco: {\n\t\t\tcenterText: null,\n\t\t\tcnvCapping: 5,\n\t\t\tisOpen: false,\n\t\t\tprioritizeGeneLabelsByGeneSets: false,\n\t\t\tshowPrioritizeGeneLabelsByGeneSets: false,\n\t\t\tshowGeneNames: true,\n\t\t\tmutationWaterfallPlot: false,\n\t\t\tmutationWaterfallColor: '#4d4d4d',\n\t\t\tminMutationFraction: 0,\n\t\t\tcnvRenderingType: CnvRenderingType.heatmap,\n\t\t\tcnvPercentile: 90, // 90th percentile for removing outliers\n\t\t\tcnvCutoffMode: 'percentile',\n\t\t\tautoRadius: true,\n\t\t\tradius: 300,\n\t\t\tfusionOpacity: 1,\n\t\t\thiddenChromosomes\n\t\t},\n\n\t\trings: {\n\t\t\tnonExonicRingWidth: 20,\n\t\t\tsnvRingWidth: 20,\n\t\t\tlohRingWidth: 20,\n\t\t\tcnvRingWidth: 30,\n\t\t\tmutationWaterfallRingWidth: 35,\n\n\t\t\tsnvRingFilters: ['exonic'],\n\n\t\t\tchromosomeInnerRadius: 190,\n\t\t\tchromosomeWidth: 20,\n\n\t\t\tlabelLinesInnerRadius: 210,\n\t\t\tlabelsToLinesDistance: 30,\n\t\t\tlabelsToLinesGap: 2,\n\n\t\t\tnonExonicRingEnabled: true,\n\t\t\tnonExonicFilterValues: ['non-exonic']\n\t\t},\n\n\t\tverticalPadding: 0,\n\t\thorizontalPadding: 50,\n\n\t\tlayerScaler: 1,\n\t\tpadAngle: 0.002, //0.01, //0.04,\n\n\t\tlabel: {\n\t\t\tfontSize: 12,\n\t\t\tmaxDeltaAngle: 0.05,\n\t\t\tanimationDuration: 1000,\n\t\t\toverlapAngleFactor: 5 // 5 is set by testing, because label height is not known before rendering\n\t\t},\n\n\t\tcnv: {\n\t\t\tcapping: 5,\n\t\t\tpercentile: 80,\n\t\t\tampColor: '#D6683C',\n\t\t\tlossColor: '#67a9cf',\n\t\t\tcappedAmpColor: '#8B0000',\n\t\t\tcappedLossColor: '#00008B',\n\t\t\tunit: 'Unit'\n\t\t},\n\t\tsnv: {\n\t\t\tmaxMutationCount: 10000\n\t\t},\n\t\tlegend: {\n\t\t\tsnvTitle: 'Mutations',\n\t\t\tcnvTitle: 'CNV',\n\t\t\tlohTitle: 'LOH',\n\t\t\tfusionTitle: 'SV', // Structural Variants (color by co-location)\n\t\t\tlohLegendEnabled: true,\n\t\t\tfontSize: 12,\n\t\t\trowHeight: 48\n\t\t},\n\n\t\tmenu: {\n\t\t\tpadding: 5\n\t\t}\n\t}\n\n\tif (overrides?.Disco?.radius != null && (overrides.Disco.radius > 1000 || overrides.Disco.radius < 200)) {\n\t\tconsole.log(`${overrides?.Disco?.radius} is greater or lower than the min and max for the radius`)\n\t}\n\n\treturn copyMerge(defaults, overrides)\n}\n", "import type IRenderer from '#plots/disco/IRenderer.ts'\nimport * as d3 from 'd3'\nimport type SnvArc from './SnvArc.ts'\nimport type Arc from '#plots/disco/arc/Arc.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtsnvindel } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\nimport { appendVafBars, hasAnyValidVafEntry } from './vafTooltip.ts'\n\nexport default class NonExonicSnvRenderer implements IRenderer {\n\tprivate geneClickListener: (gene: string, mnames: Array<string>) => void\n\n\tconstructor(geneClickListener: (gene: string, mnames: Array<string>) => void) {\n\t\tthis.geneClickListener = geneClickListener\n\t}\n\n\trender(holder: any, elements: Array<Arc>) {\n\t\tconst arcGenerator = d3.arc<SnvArc>()\n\n\t\tconst arcs = holder.append('g')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: SnvArc) => arcGenerator(d))\n\t\t\t.attr('fill', (d: SnvArc) => d.color)\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst snv: any = structuredClone(arc)\n\t\t\t\tsnv.dt = dtsnvindel\n\t\t\t\tsnv.class = arc.dataClass\n\t\t\t\tsnv.gene = snv.text\n\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Consequence')\n\t\t\t\t\ttd2.append('span').text(snv.mname)\n\t\t\t\t\ttd2\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', snv.color)\n\t\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t\t.text(snv.dataClass)\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text(snv.ref && snv.alt ? 'Mutation' : 'Position')\n\t\t\t\t\ttd2.append('span').text(`${snv.chr}:${snv.pos + 1} ${snv.ref && snv.alt ? snv.ref + '>' + snv.alt : ''}`)\n\t\t\t\t}\n\n\t\t\t\tif (snv.gene) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Gene')\n\t\t\t\t\ttd2.text(snv.gene)\n\t\t\t\t}\n\n\t\t\t\tif (snv.occurrence > 1) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Occurrence')\n\t\t\t\t\ttd2.text(snv.occurrence)\n\t\t\t\t}\n\t\t\t\tif (hasAnyValidVafEntry(arc.vafs)) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Read count')\n\t\t\t\t\tappendVafBars(td2, arc.vafs)\n\t\t\t\t}\n\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t\t\t.on('click', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tthis.geneClickListener(arc.text, [arc.mname])\n\t\t\t})\n\t}\n}\n", "import * as d3 from 'd3'\nimport type SnvArc from './SnvArc.ts'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport FullArcRenderer from '#plots/disco/arc/FullArcRenderer.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtsnvindel } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\nimport { appendVafBars, hasAnyValidVafEntry } from './vafTooltip.ts'\n\nexport default class SnvRenderer implements IRenderer {\n\tprivate svnWidth: number\n\n\tprivate geneClickListener: (gene: string, mnames: Array<string>) => void\n\n\tconstructor(svnWidth: number, geneClickListener: (gene: string, mnames: Array<string>) => void) {\n\t\tthis.svnWidth = svnWidth\n\n\t\tthis.geneClickListener = geneClickListener\n\t}\n\n\trender(holder: any, elements: Array<SnvArc>) {\n\t\tif (elements.length > 0) {\n\t\t\tconst svnInnerRadius = elements[0].innerRadius\n\t\t\tconst fullArcRenderer = new FullArcRenderer(svnInnerRadius, this.svnWidth, '#6464641A')\n\t\t\tfullArcRenderer.render(holder)\n\t\t}\n\n\t\tconst arcGenerator = d3.arc<SnvArc>()\n\n\t\tconst arcs = holder.append('g')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: SnvArc) => arcGenerator(d))\n\t\t\t.attr('fill', (d: SnvArc) => d.color)\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst snv: any = structuredClone(arc)\n\t\t\t\tsnv.dt = dtsnvindel\n\t\t\t\tsnv.class = arc.dataClass\n\t\t\t\tsnv.gene = snv.text\n\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Consequence')\n\t\t\t\t\ttd2.append('span').text(snv.mname)\n\t\t\t\t\ttd2\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', snv.color)\n\t\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t\t.text(snv.dataClass)\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text(snv.ref && snv.alt ? 'Mutation' : 'Position')\n\t\t\t\t\ttd2.append('span').text(`${snv.chr}:${snv.pos + 1} ${snv.ref && snv.alt ? snv.ref + '>' + snv.alt : ''}`)\n\t\t\t\t}\n\n\t\t\t\tif (snv.gene) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Gene')\n\t\t\t\t\ttd2.text(snv.gene)\n\t\t\t\t}\n\n\t\t\t\tif (snv.occurrence > 1) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Occurrence')\n\t\t\t\t\ttd2.text(snv.occurrence)\n\t\t\t\t}\n\n\t\t\t\tif (hasAnyValidVafEntry(arc.vafs)) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Read count')\n\t\t\t\t\tappendVafBars(td2, arc.vafs)\n\t\t\t\t}\n\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t\t\t.on('click', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tthis.geneClickListener(arc.text, [arc.mname])\n\t\t\t})\n\t}\n}\n", "import * as d3 from 'd3'\nimport type LohArc from './LohArc.ts'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtloh } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\n\nexport default class LohRenderer implements IRenderer {\n\trender(holder: any, elements: Array<LohArc>) {\n\t\tconst arcGenerator = d3.arc<LohArc>()\n\n\t\tconst arcs = holder.append('g')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: LohArc) => arcGenerator(d))\n\t\t\t.attr('fill', (d: LohArc) => d.color)\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: LohArc) => {\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst loh: any = structuredClone(arc)\n\t\t\t\tloh.dt = dtloh\n\t\t\t\tloh.gene = loh.text\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Data type')\n\t\t\t\t\ttd2.append('span').style('margin-left', '5px').text('Loss of Heterozygosity')\n\t\t\t\t}\n\n\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\ttd1.text('Position')\n\t\t\t\ttd2.append('span').text(`${arc.chr}:${arc.start}-${arc.stop}`)\n\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n}\n", "import * as d3 from 'd3'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport type CnvArc from './CnvArc.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtcnv, dtitd } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\n\nexport default class CnvBarRenderer implements IRenderer {\n\trender(holder: any, elements: Array<CnvArc>) {\n\t\tconst arcGenerator = d3.arc<CnvArc>()\n\n\t\t// Create a group for the arcs (actual CNV bars)\n\t\tconst arcs = holder.append('g')\n\t\t// Create a group for overlays used to highlight hovered bars\n\t\tconst hoverOverlay = holder\n\t\t\t.append('g')\n\t\t\t.attr('class', 'hover-overlay')\n\t\t\t// prevent highlighht from blocking thin CNVs\n\t\t\t.style('pointer-events', 'none')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t// Generate arc path for each CNV\n\t\t\t.attr('d', (d: CnvArc) => arcGenerator(d))\n\t\t\t// Fill with the CNV's specified color\n\t\t\t.attr('fill', (d: CnvArc) => d.color)\n\t\t\t// Start of highlight + tooltip behavior\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: CnvArc) => {\n\t\t\t\t// Remove any existing overlay (e.g., from previous hover)\n\t\t\t\thoverOverlay.selectAll('*').remove()\n\t\t\t\t// Add a highlighted black stroke on top of the hovered arc\n\t\t\t\thoverOverlay\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.datum(arc)\n\t\t\t\t\t.attr('d', arcGenerator(arc))\n\t\t\t\t\t.attr('fill', 'none')\n\t\t\t\t\t.attr('stroke', 'black')\n\t\t\t\t\t.attr('stroke-width', 1)\n\n\t\t\t\t// Prepare the CNV data for tooltip display\n\t\t\t\tconst cnv: any = structuredClone(arc)\n\t\t\t\tcnv.dt = arc.dt\n\t\t\t\tcnv.samples = [{ sample_id: arc.sampleName }]\n\t\t\t\tcnv.gene = cnv.text\n\n\t\t\t\t// Create a two-column table in the tooltip\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\t// Add: Copy number change row\n\t\t\t\tif (arc.dt == dtcnv) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('CNV')\n\t\t\t\t\tc2.html(`<span style=\"background:${cnv.color}\">&nbsp;&nbsp;</span> ${cnv.value}`)\n\t\t\t\t}\n\t\t\t\tif (arc.dt == dtitd) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('ITD')\n\t\t\t\t\tc2.html(`<span style=\"background:${cnv.color}\">&nbsp;&nbsp;</span>`)\n\t\t\t\t}\n\t\t\t\t// Add: Position row\n\t\t\t\t{\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('Position')\n\t\t\t\t\tc2.text(cnv.chr + ':' + cnv.start + '-' + cnv.stop)\n\t\t\t\t}\n\t\t\t\t// Add: Unit value row\n\t\t\t\tif (arc.dt == dtcnv) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('Unit')\n\t\t\t\t\tc2.text(cnv.value)\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip near the cursor\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t// Remove highlight and tooltip when mouse leaves\n\t\t\t.on('mouseout', () => {\n\t\t\t\thoverOverlay.selectAll('*').remove()\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n}\n", "import type CnvArc from '#plots/disco/cnv/CnvArc.ts'\nimport * as d3 from 'd3'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { table2col } from '#dom/table2col'\nimport { scaleLinear } from 'd3-scale'\nimport { dtcnv, dtitd } from '#shared/common.js'\n\nexport class CnvHeatmapRenderer {\n\tprivate positivePercentile: number\n\tprivate negativePercentile: number\n\n\tconstructor(positivePercentile = 0, negativePercentile = 0) {\n\t\tthis.positivePercentile = positivePercentile\n\t\tthis.negativePercentile = negativePercentile\n\t}\n\n\trender(holder: any, elements: Array<CnvArc>) {\n\t\tconst arcGenerator = d3.arc<CnvArc>()\n\n\t\t// Group for actual heatmap CNV arcs\n\t\tconst arcs = holder.append('g')\n\n\t\t// Separate group for overlays on hover (not blocking interactions)\n\t\tconst hoverOverlay = holder.append('g').attr('class', 'hover-overlay').style('pointer-events', 'none')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t// Generate the arc shape for each CNV\n\t\t\t.attr('d', (d: CnvArc) => arcGenerator(d))\n\t\t\t// Fill using interpolated color based on CNV value and percentile range\n\t\t\t.attr('fill', (d: CnvArc) => this.getColor(d.color, d.value, d.dt))\n\n\t\t\t// Hover event: show highlight stroke and tooltip\n\t\t\t.on('mouseenter', (mouseEvent: MouseEvent, arc: CnvArc) => {\n\t\t\t\t// Add highlight stroke over the hovered arc\n\t\t\t\thoverOverlay\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.datum(arc)\n\t\t\t\t\t.attr('d', arcGenerator(arc))\n\t\t\t\t\t.attr('fill', 'none')\n\t\t\t\t\t.attr('stroke', 'black')\n\t\t\t\t\t.attr('stroke-width', 1)\n\n\t\t\t\t// Prepare data for tooltip\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst cnv: any = structuredClone(arc)\n\t\t\t\tcnv.dt = arc.dt\n\t\t\t\tcnv.samples = [{ sample_id: arc.sampleName }]\n\t\t\t\tcnv.gene = cnv.text\n\n\t\t\t\t// Row 1: Copy number change + colored square\n\t\t\t\tif (arc.dt == dtcnv) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('CNV')\n\t\t\t\t\t//Match the color shown in the tooltip to the heatmap\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`<span style=\"background:${this.getColor(\n\t\t\t\t\t\t\tcnv.color,\n\t\t\t\t\t\t\tcnv.value,\n\t\t\t\t\t\t\tcnv.dt\n\t\t\t\t\t\t)}; border:solid lightgrey 0.1px;\">&nbsp;&nbsp;</span> ${cnv.value}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (arc.dt == dtitd) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('ITD')\n\t\t\t\t\tc2.html(`<span style=\"background:${cnv.color}; border:solid lightgrey 0.1px;\">&nbsp;&nbsp;</span>`)\n\t\t\t\t}\n\t\t\t\t// Row 2: Position\n\t\t\t\t{\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('Position')\n\t\t\t\t\tc2.text(cnv.chr + ':' + cnv.start + '-' + cnv.stop)\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip near mouse\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\n\t\t\t// Cleanup on hover out: remove highlight and hide tooltip\n\t\t\t.on('mouseleave', () => {\n\t\t\t\thoverOverlay.selectAll('*').remove()\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n\n\t// Computes fill color using linear scale between -P80, 0, and +P80\n\tgetColor(color: string, value: number, dt = dtcnv) {\n\t\tif (dt == dtitd) return color\n\t\t//For cnv values, use a zero-centered symmetric scale rather than the absolute values\n\t\tconst maxValue = Math.max(this.positivePercentile, Math.abs(this.negativePercentile))\n\t\treturn scaleLinear(\n\t\t\t[-maxValue, 0, maxValue],\n\t\t\t[color, 'white', color] // transitions to white in the middle\n\t\t).clamp(true)(value)\n\t}\n}\n", "import type IRenderer from '#plots/disco/IRenderer.ts'\nimport type MutationWaterfallPoint from './MutationWaterfallPoint.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { table2col } from '#dom/table2col'\nimport { bplen } from '#shared/common.js'\nimport { ticks } from 'd3-array'\n\nexport default class MutationWaterfallRenderer implements IRenderer {\n\tprivate dotRadius: number\n\n\tconstructor(dotRadius = 1.5) {\n\t\tthis.dotRadius = dotRadius\n\t}\n\n\trender(holder: any, elements: Array<MutationWaterfallPoint>) {\n\t\tif (!elements.length) return\n\n\t\tconst ringGroup = holder.append('g').attr('data-testid', 'sjpp_mutation_waterfall_ring')\n\t\tconst menu = MenuProvider.create()\n\n\t\tringGroup\n\t\t\t.append('g')\n\t\t\t.selectAll('circle')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('circle')\n\t\t\t.attr('cx', d => Math.cos(d.startAngle - Math.PI / 2) * d.innerRadius)\n\t\t\t.attr('cy', d => Math.sin(d.startAngle - Math.PI / 2) * d.innerRadius)\n\t\t\t.attr('r', this.dotRadius)\n\t\t\t.attr('fill', d => d.color)\n\t\t\t.attr('opacity', 0.9)\n\t\t\t.on('mouseover', (event: MouseEvent, d: MutationWaterfallPoint) => {\n\t\t\t\tconst distance = Math.round(Math.pow(10, d.logDistance))\n\t\t\t\tmenu.clear()\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Intermutation distance')\n\t\t\t\t\ttd2.text(`${bplen(distance)}`)\n\t\t\t\t}\n\t\t\t\tmenu.show(event.x, event.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\n\t\tthis.renderAxis(ringGroup, elements[0])\n\t}\n\n\tprivate renderAxis(holder: any, referencePoint: MutationWaterfallPoint) {\n\t\tconst { ringInnerRadius, ringWidth, rangeMin, rangeMax } = referencePoint\n\t\tconst axisGroup = holder.append('g').attr('class', 'sjpp-waterfall-axis')\n\t\tconst topRadius = ringInnerRadius + ringWidth\n\n\t\taxisGroup\n\t\t\t.append('line')\n\t\t\t.attr('x1', 0)\n\t\t\t.attr('y1', -topRadius)\n\t\t\t.attr('x2', 0)\n\t\t\t.attr('y2', -ringInnerRadius)\n\t\t\t.attr('stroke', '#6e6e6e')\n\t\t\t.attr('stroke-width', 1)\n\n\t\tconst span = rangeMax - rangeMin || 1\n\t\tconst tickValues = rangeMax === rangeMin ? [rangeMin] : ticks(rangeMin, rangeMax, 4)\n\n\t\ttickValues.forEach(value => {\n\t\t\tconst ratio = (value - rangeMin) / span\n\t\t\tconst radius = ringInnerRadius + ringWidth * ratio\n\t\t\tconst y = -radius\n\t\t\taxisGroup.append('line').attr('x1', -4).attr('x2', 4).attr('y1', y).attr('y2', y).attr('stroke', '#6e6e6e')\n\n\t\t\tconst exponent = Math.round(value * 10) / 10\n\t\t\tconst formatted = Number.isInteger(exponent) ? `${exponent}` : exponent.toFixed(1)\n\t\t\taxisGroup\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', 6)\n\t\t\t\t.attr('y', y + 3)\n\t\t\t\t.style('font-size', '10px')\n\t\t\t\t.style('fill', '#4d4d4d')\n\t\t\t\t.text(`10^${formatted} bp`)\n\t\t})\n\t}\n}\n", "import { getCompInit, type RxComponent, type ComponentApi } from '#rx'\nimport { PlotBase } from '../PlotBase'\nimport { DiscoRenderer } from './DiscoRenderer.ts'\nimport { DiscoInteractions } from './interactions/DiscoInteractions.ts'\nimport { ViewModelMapper } from './viewmodel/ViewModelMapper.ts'\nimport LegendRenderer from './legend/LegendRenderer.ts'\nimport ChromosomesRenderer from './chromosome/ChromosomesRenderer.ts'\nimport LabelsRenderer from './label/LabelsRenderer.ts'\nimport discoDefaults from './defaults.ts'\nimport NonExonicSnvRenderer from './snv/NonExonicSnvRenderer.ts'\nimport SnvRenderer from './snv/SnvRenderer.ts'\nimport LohRenderer from './loh/LohRenderer.ts'\nimport CnvBarRenderer from './cnv/CnvBarRenderer.ts'\nimport type IRenderer from './IRenderer.ts'\nimport { RingType } from './ring/RingType.ts'\nimport type Settings from './Settings.ts'\nimport { multiInit } from '../../rx'\nimport { topBarInit } from '../controls.btns'\nimport { configUiInit } from '../controls.config'\nimport { CnvHeatmapRenderer } from '#plots/disco/cnv/CnvHeatmapRenderer.ts'\nimport type ViewModel from '#plots/disco/viewmodel/ViewModel.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\nimport { InvalidDataUI } from '#dom'\nimport { dtcnv, dtloh } from '#shared/common.js'\nimport MutationWaterfallRenderer from './waterfall/MutationWaterfallRenderer.ts'\n\nexport default class Disco extends PlotBase implements RxComponent {\n\tstatic type = 'Disco'\n\n\t// following attributes are required by rx\n\ttype: string\n\tstate: any\n\tprivate features: any\n\tprivate isOpen: boolean\n\tprivate discoInteractions: DiscoInteractions\n\n\tprivate stateViewModelMapper?: ViewModelMapper\n\tprivate viewModel?: ViewModel\n\tprivate recreateViewModel = false\n\tprivate errorDiv: any\n\tprivate svgDiv: any\n\n\tconstructor(opts: any, api: ComponentApi) {\n\t\tsuper(opts, api)\n\t\tthis.type = Disco.type\n\t\t// PlotBase.printError() renders into this.dom.errdiv; without it, errors would fall through\n\t\t// to app.printError() with a confusing '(also missing Disco.dom.holder)' suffix appended.\n\t\t// Kept separate from this.errorDiv, which main() reuses for the InvalidDataUI message,\n\t\t// since rx empties this.dom.errdiv at the start of every update.\n\t\tthis.dom.errdiv = opts.holder.append('div').attr('class', 'sja_errorbar').style('display', 'none')\n\t\tthis.isOpen = false\n\t\tthis.discoInteractions = new DiscoInteractions(this)\n\t}\n\n\tasync init() {\n\t\tconst state = this.app.getState()\n\t\tconst settings = state.plots.find(p => p.id === this.id).settings\n\n\t\tthis.stateViewModelMapper = new ViewModelMapper(settings, this.discoInteractions)\n\t\tthis.viewModel = this.stateViewModelMapper.map(state)\n\n\t\tconst holder = this.opts.holder\n\t\tconst controlsHolder = holder.append('div').style('display', 'inline-block').style('vertical-align', 'top') // on the left\n\t\tconst mainDiv = holder.append('div').style('display', 'inline-block') // on the right\n\n\t\tconst topbar = controlsHolder.append('div')\n\t\tconst config_div = controlsHolder.append('div')\n\t\tconst configInputsOptions = this.getConfigInputsOptions(this.viewModel)\n\n\t\tthis.features = await multiInit({\n\t\t\ttopbar: topBarInit({\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\t// TODO change the way svg is selected\n\t\t\t\tdownloadHandler: () =>\n\t\t\t\t\tthis.discoInteractions.downloadClickListener(holder.select('svg[id=\"sjpp_disco_plot\"]').node()),\n\t\t\t\tcallback: () => this.toggleVisibility(this.isOpen),\n\t\t\t\tisOpen: () => this.isOpen,\n\t\t\t\tholder: topbar\n\t\t\t}),\n\n\t\t\tconfig: configUiInit({\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\tholder: config_div,\n\t\t\t\tisOpen: () => this.isOpen,\n\t\t\t\tinputs: configInputsOptions\n\t\t\t})\n\t\t})\n\n\t\tthis.errorDiv = mainDiv.append('div').attr('data-testid', 'sjpp-disco-errorDiv')\n\t\tthis.svgDiv = mainDiv.append('div').attr('data-testid', 'sjpp-disco-svgDiv')\n\t}\n\n\tprivate getConfigInputsOptions(viewModel: ViewModel) {\n\t\tconst configInputsOptions: Array<any> = []\n\n\t\tif (viewModel.settings.Disco.showPrioritizeGeneLabelsByGeneSets) {\n\t\t\tconst filterMutationsGenesCheckbox = [\n\t\t\t\t{\n\t\t\t\t\tboxLabel: viewModel.genesetName,\n\t\t\t\t\tlabel: `Filter mutations`,\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'Disco',\n\t\t\t\t\tsettingsKey: 'prioritizeGeneLabelsByGeneSets',\n\t\t\t\t\ttitle: `Only show mutations for ${viewModel.genesetName} genes`\n\t\t\t\t}\n\t\t\t]\n\n\t\t\tconfigInputsOptions.push(...filterMutationsGenesCheckbox)\n\t\t}\n\n\t\tif (viewModel.cnvMaxValue !== 0 || viewModel.cnvMinValue !== 0) {\n\t\t\tconst cnvConfigInputOptions = [\n\t\t\t\t{\n\t\t\t\t\tboxLabel: '',\n\t\t\t\t\tlabel: 'CNV rendering type',\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'Disco',\n\t\t\t\t\tsettingsKey: 'cnvRenderingType',\n\t\t\t\t\ttitle: 'CNV rendering type',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'Heatmap', value: CnvRenderingType.heatmap },\n\t\t\t\t\t\t{ label: 'Bar', value: CnvRenderingType.bar }\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t\tconfigInputsOptions.push(...cnvConfigInputOptions)\n\t\t}\n\n\t\tif (viewModel.hasMutationFractionData) {\n\t\t\tconfigInputsOptions.push({\n\t\t\t\tboxLabel: '',\n\t\t\t\tlabel: 'Minimum mutation fraction',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'minMutationFraction',\n\t\t\t\ttitle: 'Only show SNV/indel mutations with at least one DNA/RNA mutation fraction at or above this value.',\n\t\t\t\tstep: 0.01,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tdebounceInterval: 500\n\t\t\t})\n\t\t}\n\n\t\tconfigInputsOptions.push({\n\t\t\tboxLabel: '',\n\t\t\tlabel: 'Show gene names',\n\t\t\ttype: 'checkbox',\n\t\t\tchartType: 'Disco',\n\t\t\tsettingsKey: 'showGeneNames',\n\t\t\ttitle: 'Show gene name labels on the outside of the plot'\n\t\t})\n\n\t\tconst genomeChr = this.app.opts.state.args.genome.majorchr\n\t\tconst chromosomeConfigOption = {\n\t\t\tlabel: 'Chromosomes',\n\t\t\ttitle: 'Chromosomes shown in the plot',\n\t\t\ttype: 'multiCheckbox',\n\t\t\tchartType: 'Disco',\n\t\t\tsettingsKey: 'hiddenChromosomes',\n\t\t\tstyle: {\n\t\t\t\tcolNum: 4\n\t\t\t},\n\t\t\toptions: Object.keys(genomeChr).map(c => ({ label: c, value: c })),\n\t\t\tprocessInput: (values: string[] = []) => {\n\t\t\t\t/** Show all chromosomes as checked by default but only\n\t\t\t\t * save to the state hidden (unchecked) chromosomes.\n\t\t\t\t * Allows for easier debugging, reduces user error when\n\t\t\t\t * embedding, and code clarity. */\n\t\t\t\tconst reverse = Object.keys(genomeChr).filter(c => !values.includes(c))\n\t\t\t\treturn reverse\n\t\t\t}\n\t\t}\n\n\t\tconfigInputsOptions.push(chromosomeConfigOption)\n\n\t\tconfigInputsOptions.push({\n\t\t\tboxLabel: '',\n\t\t\tlabel: 'Auto radius',\n\t\t\ttype: 'checkbox',\n\t\t\tchartType: 'Disco',\n\t\t\tsettingsKey: 'autoRadius',\n\t\t\ttitle: 'Automatically set the radius based on the number of data rings'\n\t\t})\n\n\t\tconst dimensionOptions = [\n\t\t\t{\n\t\t\t\tlabel: 'Radius',\n\t\t\t\ttitle: 'Set the radius of the entire plot, between 200 and 1000 pixels.',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'radius',\n\t\t\t\tdebounceInterval: 500,\n\t\t\t\tstep: 25,\n\t\t\t\tmin: 200,\n\t\t\t\tmax: 1000,\n\t\t\t\tgetDisplayStyle: (plot: any) => (plot.settings.Disco.autoRadius ? 'none' : 'table-row')\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fusion opacity',\n\t\t\t\ttitle: 'Adjust opacity of fusion arcs, between 0 and 1',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'fusionOpacity',\n\t\t\t\tstep: 0.01,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tdebounceInterval: 500\n\t\t\t}\n\t\t]\n\n\t\tconfigInputsOptions.push(...dimensionOptions)\n\t\tif (viewModel.canShowMutationWaterfallPlot && viewModel.snvDataLength > 0) {\n\t\t\tconfigInputsOptions.push({\n\t\t\t\tboxLabel: '',\n\t\t\t\tlabel: 'Mutation Waterfall Plot',\n\t\t\t\ttype: 'checkbox',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'mutationWaterfallPlot',\n\t\t\t\ttitle: 'Render log10 intermutation distance ring for SNV/indel data'\n\t\t\t})\n\t\t}\n\t\treturn configInputsOptions\n\t}\n\n\tasync main(): Promise<void> {\n\t\t// run this only when this.state{} is set; cannot do this step in constructor()\n\t\tconst settings: Settings = this.state.settings\n\n\t\tthis.isOpen = settings.Disco.isOpen\n\n\t\tif (this.recreateViewModel) {\n\t\t\tthis.stateViewModelMapper = new ViewModelMapper(settings, this.discoInteractions)\n\t\t\tthis.viewModel = this.stateViewModelMapper.map(this.app.getState())\n\t\t}\n\t\tthis.recreateViewModel = true\n\n\t\tif (this.viewModel) {\n\t\t\t// TODO calculate viewModel.filteredSnvDataLength always\n\t\t\tthis.svgDiv.selectAll('*').remove() // todo not to need this\n\t\t\tconst appState = this.app.getState()\n\t\t\tthis.viewModel.svgDiv = this.svgDiv\n\t\t\tthis.viewModel.appState = appState\n\n\t\t\tfor (const name in this.features) {\n\t\t\t\tthis.features[name].update({ state: this.state, appState })\n\t\t\t}\n\n\t\t\tconst legendRenderer = new LegendRenderer(this.viewModel.cappedCnvMaxAbsValue, settings.label.fontSize)\n\n\t\t\tconst discoRenderer = new DiscoRenderer(\n\t\t\t\tthis.getRingRenderers(this.viewModel.settings, this.viewModel, this.discoInteractions.geneClickListener),\n\t\t\t\tlegendRenderer,\n\t\t\t\tthis.app.opts.state.args.genome,\n\t\t\t\t{\n\t\t\t\t\tdslabel: this.app.opts.state.vocab.dslabel,\n\t\t\t\t\teventImages: this.app.opts.state.args.eventImages\n\t\t\t\t}\n\t\t\t)\n\n\t\t\tdiscoRenderer.render(this.svgDiv, this.viewModel, this.onCnvSourceSelect)\n\n\t\t\tif (this.viewModel.invalidDataInfo?.entries?.length) {\n\t\t\t\tInvalidDataUI.render(this.errorDiv, this.viewModel.invalidDataInfo)\n\t\t\t}\n\t\t}\n\t}\n\n\tgetState(appState: any) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) return config\n\t\t// include args.data so updates rerender when mutation list changes\n\t\treturn { ...config, mlst: appState.args.data }\n\t}\n\n\tgetRingRenderers(\n\t\tsettings: Settings,\n\t\tviewModel: ViewModel,\n\t\tgeneClickListener: (gene: string, mnames: Array<string>) => void\n\t) {\n\t\tconst chromosomesRenderer = new ChromosomesRenderer(\n\t\t\tsettings.padAngle,\n\t\t\tsettings.rings.chromosomeInnerRadius,\n\t\t\tsettings.rings.chromosomeInnerRadius + settings.rings.chromosomeWidth,\n\t\t\tsettings.label.fontSize\n\t\t)\n\t\tconst labelsRenderer = new LabelsRenderer(\n\t\t\tsettings.label.animationDuration,\n\t\t\tsettings.label.fontSize,\n\t\t\tgeneClickListener,\n\t\t\tthis.app.opts.state.args.genome.name,\n\t\t\t[\n\t\t\t\t...(viewModel.rings.cnvArcRing?.elements || []),\n\t\t\t\t...(viewModel.rings.lohArcRing?.elements || []).map(event => ({ ...event, dt: dtloh }))\n\t\t\t]\n\t\t)\n\t\tconst nonExonicSnvRenderer = new NonExonicSnvRenderer(geneClickListener)\n\t\tconst snvRenderer = new SnvRenderer(settings.rings.snvRingWidth, geneClickListener)\n\t\tconst cnvRenderer =\n\t\t\tsettings.Disco.cnvRenderingType === CnvRenderingType.heatmap\n\t\t\t\t? new CnvHeatmapRenderer(viewModel.positivePercentile, viewModel.negativePercentile)\n\t\t\t\t: new CnvBarRenderer()\n\t\tconst lohRenderer = new LohRenderer()\n\t\tconst mutationWaterfallRenderer = new MutationWaterfallRenderer()\n\n\t\tconst renderersMap: Map<RingType, IRenderer> = new Map()\n\t\trenderersMap.set(RingType.CHROMOSOME, chromosomesRenderer)\n\t\trenderersMap.set(RingType.LABEL, labelsRenderer)\n\t\trenderersMap.set(RingType.NONEXONICSNV, nonExonicSnvRenderer)\n\t\trenderersMap.set(RingType.SNV, snvRenderer)\n\t\trenderersMap.set(RingType.MUTATION_WATERFALL, mutationWaterfallRenderer)\n\t\trenderersMap.set(RingType.CNV, cnvRenderer)\n\t\trenderersMap.set(RingType.LOH, lohRenderer)\n\n\t\treturn renderersMap\n\t}\n\n\tprivate onCnvSourceSelect = (index: number) => {\n\t\tconst state = this.app.getState()\n\t\tconst args = state.args\n\t\tconst alt = args.alternativeDataByDt?.[dtcnv]\n\t\tif (!alt) return\n\t\tconst altClone = structuredClone(args.alternativeDataByDt)\n\t\taltClone[dtcnv].forEach((d, i) => (d.inuse = i === index))\n\t\tconst selected = altClone[dtcnv][index]\n\t\tselected.mlst.forEach((d: any) => (d.position = d.pos))\n\t\tconst baseData = args.data.filter((d: any) => d.dt != dtcnv && d.dt != dtloh)\n\t\tconst newData = baseData.concat(selected.mlst)\n\t\tthis.app.dispatch({\n\t\t\ttype: 'app_refresh',\n\t\t\tstate: { args: { ...args, data: newData, alternativeDataByDt: altClone } }\n\t\t})\n\t}\n\n\ttoggleVisibility(isOpen: boolean) {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.opts.id,\n\t\t\tconfig: {\n\t\t\t\tsettings: {\n\t\t\t\t\tDisco: { isOpen: !isOpen }\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n\nexport const discoInit = getCompInit(Disco)\n\nexport const componentInit = discoInit\n\nexport async function getPlotConfig(opts: any, app: any) {\n\treturn {\n\t\tchartType: 'Disco',\n\t\tsubfolder: 'disco',\n\t\textension: 'ts',\n\t\tsettings: discoDefaults(opts.overrides, app)\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAqB,kBAArB,MAAqC;AAAA,EAIpC,YAAY,QAAgB,OAAe,OAAe;AACzD,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACd;AAAA,EACA,OAAO,QAAa;AACnB,UAAM,iBAAoB,YAAS;AACnC,UAAM,MAAW;AAAA,MAChB,YAAY;AAAA,MACZ,UAAU,KAAK,KAAK;AAAA,MACpB,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK,SAAS,KAAK;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,MAAM;AAAA,IACP;AAEA,UAAM,QAAoB,CAAC;AAC3B,UAAM,KAAK,GAAG;AACd,UAAM,WAAW,OAAO,OAAO,GAAG;AAClC,aACE,UAAU,MAAM,EAChB,KAAK,KAAK,EACV,MAAM,EACN,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,MAAW,eAAe,CAAC,CAAC,EACvC,KAAK,QAAQ,CAAC,MAAW,EAAE,KAAK;AAAA,EACnC;AACD;;;AChCA,IAAqB,eAArB,MAAkC;AAAA,EACjC,OAAO,SAAe;AACrB,UAAM,OAAO,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;AACpC,SAAK,EAAE,MAAM,UAAU,gBAAgB,EAAE,MAAM,YAAY,UAAU,EAAE,MAAM,WAAW,IAAI;AAE5F,WAAO;AAAA,EACR;AACD;;;ACPA,IAAqB,sBAArB,MAAyC;AAAA,EACxC,OAAO,SAAS,MAAc,MAAc;AAC3C,QAAI,QAAQ,MAAM;AACjB,8CAAqC,QAAQ;AAAA,IAC9C,OAAO;AACN,8CAAqC,QAAQ;AAAA,IAC9C;AAAA,EACD;AACD;;;ACKA,IAAqB,iBAArB,MAAoC;AAAA,EAInC,YAAY,QAAsB,UAAyB,CAAC,GAAG;AAC9D,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,OAAO,QAAa,SAAwB,UAAU,GAAG;AACxD,QAAI,SAAS;AACb,UAAM,oBAAoB,QAAQ,OAAO,OAAK,EAAE,MAAM;AACtD,QAAI,kBAAkB,SAAS,GAAG;AACjC,eAAS,kBAAkB,CAAC,EAAE,OAAO;AACrC,YAAM,kBAAkB,IAAI,gBAAgB,QAAQ,GAAG,WAAW;AAClE,sBAAgB,OAAO,MAAM;AAAA,IAC9B,MAAO;AAEP,UAAM,SAAY,eAAO,EAAE,OAAO,MAAM;AACxC,UAAM,UAAU,OAAO,UAAU,QAAQ,EAAE,KAAK,OAAO;AAEvD,UAAM,OAAO,aAAa,OAAO;AACjC,UAAM,gBAAgB,KAAK,cAAc,KAAK,IAAI;AAClD,UAAM,aAAa,KAAK,WAAW,KAAK,IAAI;AAE5C,YACE,MAAM,EACN,OAAO,MAAM,EACb,KAAK,SAAS,OAAO,EACrB,KAAK,KAAK,MAAM,EAChB,KAAK,QAAQ,CAAC,WAAmB;AACjC,aAAO,oBAAoB;AAAA,QAC1B,OAAO,OAAO,qBAAqB;AAAA,QACnC,OAAO,OAAO,qBAAqB;AAAA,MACpC;AAAA,IACD,CAAC,EACA,MAAM,WAAW,OAAO,EACxB,KAAK,SAAqB,GAAW;AACrC,YAAM,OAAU,eAAO,IAAI;AAE3B,YAAM,MAAM,aAAa,OAAO;AAEhC,WAAK,GAAG,SAAS,SAAU,OAAmB;AAC7C,aAAK,MAAM,EAAE,KAAK;AAClB,YAAI,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,CAAC;AACjC,mBAAW,IAAI,EAAE,OAAO,KAAK,GAAG,sBAAsB,SAAS,CAAC,CAAC;AAAA,MAClE,CAAC;AAAA,IACF,CAAC,EACA,GAAG,aAAa,SAAU,YAAwB,QAAgB;AAClE,YAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC1C,oBAAc,OAAO,sBAAsB,SAAS,MAAM,CAAC;AAC3D,WAAK,KAAK,WAAW,GAAG,WAAW,CAAC;AAAA,IACrC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,OAAY,QAAkB;AAC3C;AACC,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,UAAI,KAAK,WAAW;AACpB,UAAI,OAAO,MAAM,EAAE,MAAM,eAAe,KAAK,EAAE,KAAK,mBAAmB;AAAA,IACxE;AACA,eAAW,UAAU,QAAQ;AAC5B,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,UAAI,KAAK,UAAU;AACnB,UAAI,OAAO,MAAM,EAAE,MAAM,eAAe,KAAK,EAAE,KAAK,WAAW,MAAM,CAAC;AAAA,IACvE;AAAA,EACD;AAAA,EAEA,WAAW,QAAa,QAAkB;AACzC,QAAI,OAAO,UAAU,EAAG,QAAO,KAAK,UAAU,QAAQ,OAAO,CAAC,CAAC;AAC/D,WAAO,UAAU,GAAG,EAAE,OAAO;AAC7B,WACE,OAAO,KAAK,EACZ,MAAM,WAAW,KAAK,EACtB,MAAM,aAAa,QAAQ,EAC3B,MAAM,WAAW,GAAG,EACpB,KAAK,GAAG,OAAO,MAAM,6BAA6B;AACpD,eAAW,UAAU,QAAQ;AAC5B,aACE,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,eAAe,0BAA0B,EAC9C,KAAK,WAAW,MAAM,CAAC,EACvB,GAAG,SAAS,MAAM,KAAK,UAAU,QAAQ,QAAQ,MAAM,KAAK,WAAW,QAAQ,MAAM,CAAC,CAAC;AAAA,IAC1F;AAAA,EACD;AAAA,EAEA,MAAM,UAAU,QAAa,QAAgB,MAAmB;AAC/D,WAAO,UAAU,GAAG,EAAE,OAAO;AAC7B,QAAI,MAAM;AACT,aACE,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,MAAM,WAAW,cAAc,EAC/B,KAAK,iBAAc,EACnB,GAAG,SAAS,IAAI;AAAA,IACnB;AACA,WAAO,OAAO,KAAK,EAAE,MAAM,WAAW,KAAK,EAAE,KAAK,WAAW,MAAM,CAAC;AACpE,UAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,QAAI,KAAK,QAAQ,eAAe,KAAK,QAAQ,WAAW,OAAO,YAAY;AAC1E,YAAM,UAAU,OAAO,OAAO,KAAK,EAAE,KAAK,eAAe,yBAAyB,EAAE,MAAM,UAAU,UAAU;AAC9G,cAAQ,OAAO,KAAK,EAAE,MAAM,eAAe,MAAM,EAAE,KAAK,KAAK,QAAQ,YAAa,KAAK;AAEvF,WAAK,gBAAgB,SAAS,MAAM;AAAA,IACrC;AACA,QAAI;AACH,YAAM,YAAY,QAAQ,OAAO,KAAK,MAAM;AAAA,IAC7C,SAAS,GAAQ;AAChB,YAAM,KAAK,aAAa,EAAE,WAAW,EAAE;AAAA,IACxC;AAAA,EACD;AAAA,EAEA,MAAc,gBAAgB,SAAc,QAAgB;AAC3D,UAAM,UAAU,QAAQ,OAAO,KAAK,EAAE,KAAK,YAAY;AACvD,QAAI;AACH,YAAM,OAAO,EAAE,QAAQ,KAAK,OAAO,MAAM,SAAS,KAAK,QAAQ,SAAS,YAAY,OAAO,WAAW;AACtG,YAAM,OAAO,MAAM,SAAS,0BAA0B,EAAE,KAAK,CAAC;AAC9D,UAAI,KAAK,MAAO,OAAM,KAAK;AAC3B,YAAM,SAAS,KAAK;AACpB,UAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,OAAM;AAClC,UAAI,CAAC,OAAO,OAAQ,QAAO,QAAQ,OAAO;AAC1C,wBAAkB,SAAS,MAAM;AAAA,IAClC,SAAS,GAAQ;AAChB,cAAQ,KAAK,aAAa,EAAE,WAAW,EAAE;AAAA,IAC1C;AAAA,EACD;AACD;AAEA,SAAS,WAAW,QAAgB;AACnC,SAAO,GAAG,SAAS,OAAO,MAAM,CAAC,MAAM,SAAS,OAAO,MAAM,CAAC;AAC/D;AAEA,SAAS,SAAS,MAAwB;AACzC,QAAM,IAAI,KAAK;AACf,SAAO,GAAG,KAAK,QAAQ,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,QAAQ,IAAI,KAAK,WAAW,MAAM,YAAY,SAAS;AACvG;AAGO,SAAS,sBAAsB,SAAmB,QAAgB;AACxE,MAAI,CAAC,OAAO,OAAQ,QAAO,CAAC,MAAM;AAClC,QAAM,WAAW,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE;AACzE,SAAO,QAAQ;AAAA,IACd,OACC,KAAK,UACJ,EAAE,WACA,SAAS,EAAE,QAAQ,OAAO,MAAM,KAAK,SAAS,EAAE,QAAQ,OAAO,MAAM,KACrE,SAAS,EAAE,QAAQ,OAAO,MAAM,KAAK,SAAS,EAAE,QAAQ,OAAO,MAAM;AAAA,EAC1E;AACD;AAEA,eAAe,YAAY,QAAgB,KAAU,QAAsB;AAC1E,QAAM,OAAO,IAAI,OAAO,KAAK,EAAE,KAAK,YAAY;AAChD,QAAM,SAAS;AAAA,IACd,GAAG;AAAA,MACF,KAAK,OAAO,OAAO,qBAAqB;AAAA,MACxC,UAAU,OAAO,OAAO,qBAAqB;AAAA,MAC7C,QAAQ,OAAO,OAAO;AAAA,IACvB;AAAA,IACA,GAAG;AAAA,MACF,KAAK,OAAO,OAAO,qBAAqB;AAAA,MACxC,UAAU,OAAO,OAAO,qBAAqB;AAAA,MAC7C,QAAQ,OAAO,OAAO;AAAA,IACvB;AAAA,EACD;AAEA,QAAM,MAAM,OAAO,GAAG,OAAO,MAAM,OAAO,OAAO,IAAI;AACrD,QAAM,MAAM,OAAO,GAAG,OAAO,MAAM,OAAO,OAAO,IAAI;AAErD,OAAK,OAAO;AAEZ,QAAM,IAAI,MAAM,OAAO,uBAAc;AACrC,IAAE,QAAQ;AAAA,IACT,SAAS,CAAC,MAAM;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,EACT,CAAC;AACF;AAEA,eAAe,MAAM,GAAQ,QAAgB,MAAc;AAC1D,QAAM,IAAI,MAAM,SAAS,kBAAkB;AAAA,IAC1C,MAAM,EAAE,QAAQ,KAAK,EAAE,KAAK,KAAK,EAAE,SAAS;AAAA,EAC7C,CAAC;AACD,MAAI,EAAE,MAAO,OAAM,EAAE;AACrB,QAAM,IAAI,EAAE,IAAI,KAAK,CAAC,MAAW,EAAE,aAAa,SAAS,EAAE,IAAI,KAAK,EAAE,IAAI,CAAC;AAC3E,MAAI,GAAG;AACN,MAAE,OAAO,EAAE;AACX,MAAE,KAAK,EAAE,SAAS,EAAE,QAAQ;AAAA,EAC7B;AACD;;;ACzMO,IAAM,gBAAN,MAAoB;AAAA,EAK1B,YACC,SACA,gBACA,QACA,gBAA+B,CAAC,GAC/B;AACD,SAAK,UAAU;AACf,SAAK,iBAAiB;AACtB,SAAK,iBAAiB,IAAI,eAAe,QAAQ,aAAa;AAAA,EAC/D;AAAA,EAEA,OAAO,QAAa,WAAsB,mBAA4C;AACrF,UAAM,SAAS,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,cAAc,EAAE,MAAM,eAAe,OAAO;AAEjG,UAAM,MAAM,OACV,OAAO,KAAK,EACZ,KAAK,MAAM,iBAAiB,EAC5B,KAAK,eAAe,iBAAiB,EACrC,KAAK,SAAS,UAAU,KAAK,EAC7B,KAAK,UAAU,UAAU,SAAS,UAAU,YAAY;AAE1D,UAAM,QAAQ,IACZ,OAAO,GAAG,EACV,KAAK,SAAS,OAAO,EACrB;AAAA,MACA;AAAA,MACA,aACC,UAAU,SAAS,MAAM,wBAAwB,UAAU,SAAS,MAAM,wBAAwB,GACnG,IAAI,UAAU,SAAS,CAAC;AAAA,IACzB;AAED,eAAW,CAAC,UAAU,QAAQ,KAAK,KAAK,SAAS;AAChD,YAAM,WAAW,UAAU,YAAY,QAAQ;AAC/C,YAAM,aAAa,UAAU,cAAc,QAAQ;AAEnD,eAAS,OAAO,OAAO,UAAU,UAAU;AAAA,IAC5C;AAEA,SAAK,eAAe,OAAO,OAAO,UAAU,SAAS,UAAU,SAAS,MAAM,aAAa;AAE3F,QAAI,UAAU,SAAS,MAAM,YAAY;AACxC,YAAM,cAAc,MAAM,OAAO,4CAA4C,EAAE,KAAK,EAAE,QAAQ;AAE9F,YAAM,OACL,UAAU,SAAS,MAAM,WAAW,SAAS,KAC1C,UAAU,SAAS,MAAM,WAAW,MAAM,GAAG,EAAE,IAAI,QACnD,UAAU,SAAS,MAAM;AAC7B,YAAM,WAAW,MAAM,OAAO,MAAM,EAAE,KAAK,SAAS,wBAAwB,EAAE,KAAK,IAAI;AACvF,YAAM,WAAW,SAAS,KAAK,EAAE,QAAQ;AACzC,eAAS,KAAK,aAAa,aAAa,YAAY,IAAI,YAAY,QAAQ,IAAI,SAAS,QAAQ,CAAC,KAAK;AAAA,IACxG;AAEA,SAAK,eAAe;AAAA,MACnB;AAAA,MACA,UAAU;AAAA,MACV,MAAM,UAAU,SAAS,MAAM,wBAAwB,UAAU,SAAS,MAAM,wBAAwB;AAAA,MACxG,UAAU;AAAA,MACV,UAAU,SAAS;AAAA,MACnB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;ACvEO,IAAM,oBAAN,MAAwB;AAAA,EAa9B,YAAY,UAAe;AAE1B,SAAK,WAAW;AAEhB,SAAK,wBAAwB,CAAC,QAAa;AAC1C,YAAM,kBAAkB,KAAK,SAAS,MAAM,SAAS,mBAAmB;AACxE,YAAM,IAAI,SAAS,cAAc,GAAG;AACpC,eAAS,KAAK,YAAY,CAAC;AAE3B,QAAE;AAAA,QACD;AAAA,QACA,MAAM;AAEL,gBAAM,aAAa,IAAI,cAAc;AACrC,gBAAM,WAAW,IAAI,KAAK,CAAC,WAAW,kBAAkB,GAAG,CAAC,GAAG;AAAA,YAC9D,MAAM;AAAA,UACP,CAAC;AACD,YAAE,WAAW,kBAAkB;AAC/B,YAAE,OAAO,IAAI,gBAAgB,QAAQ;AACrC,mBAAS,KAAK,YAAY,CAAC;AAAA,QAC5B;AAAA,QACA;AAAA,MACD;AACA,QAAE,MAAM;AAAA,IACT;AAEA,SAAK,oBAAoB,OAAO,MAAc,WAA0B;AACvE,YAAM,EAAE,QAAQ,QAAQ,IAAI,KAAK,SAAS,IAAI,SAAS,EAAE;AACzD,YAAM,MAAM;AAAA,QACX,QAAQ,KAAK,SAAS,IAAI,KAAK;AAAA,QAC/B,QAAQ,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK;AAAA,QAC1C,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,UACN;AAAA,YACC,MAAM;AAAA,YACN,SAAS,KAAK,SAAS,IAAI,KAAK,MAAM,MAAM;AAAA,YAC5C,YAAY,OAAO,KAAK,GAAG;AAAA,YAC3B;AAAA,YACA,WAAW,cAAc,MAAM;AAAA;AAAA,UAChC;AAAA,QACD;AAAA,MACD;AACA,YAAM,IAAI,MAAM,OAAO,0BAAiB;AACxC,YAAM,EAAE,QAAQ,GAAG;AAAA,IACpB;AAIA,SAAK,kCAAkC,OAAO,QAKxC;AACL,YAAM,kBAAkB,CAAC,aAAkC;AAC1D,aAAK,SAAS,IAAI,SAAS;AAAA,UAC1B,MAAM;AAAA,UACN,IAAI,KAAK,SAAS;AAAA,UAClB,QAAQ,EAAE,UAAU,EAAE,OAAO,OAAO,OAAO,EAAE,eAAe,IAAI,WAAW,GAAG,QAAQ,EAAE,EAAE;AAAA,QAC3F,CAAC;AAAA,MACF;AACA,UAAI,IAAI,cAAc,QAAQ;AAC7B,YAAI,IAAI,OAAO,QAAQ,IAAI,OAAO;AACjC,gBAAM,IAAI,MAAM,0DAA0D;AAC3E,wBAAgB;AAAA,UACf,YAAY,KAAK,SAAS,MAAM,SAAS,IAAI;AAAA,UAC7C,eAAe,KAAK,SAAS,MAAM,SAAS,IAAI;AAAA,QACjD,CAAC;AAAA,MACF,WAAW,IAAI,cAAc,SAAS;AACrC,YAAI,IAAI,OAAO,QAAQ,IAAI,OAAO;AACjC,gBAAM,IAAI,MAAM,2DAA2D;AAC5E,cAAM,YAAY,IAAI,QAAQ,KAAK,SAAS,MAAM,SAAS,IAAI,UAAU,IAAI,MAAM,KAAK,IAAI,IAAI,GAAG;AACnG,wBAAgB;AAAA,UACf,YAAY;AAAA,QACb,CAAC;AAAA,MACF,WAAW,IAAI,cAAc,aAAc,iBAAgB,EAAE,eAAe,IAAI,WAAW,CAAC;AAAA,UACvF,OAAM,IAAI,MAAM,kDAAkD;AAAA,IACxE;AAEA,SAAK,iCAAiC,CAAC,UAAkB;AACxD,WAAK,SAAS,IAAI,SAAS;AAAA,QAC1B,MAAM;AAAA,QACN,IAAI,KAAK,SAAS;AAAA,QAClB,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,MAAM,EAAE,EAAE;AAAA,MAClE,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;ACpGA,IAAqB,YAArB,MAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB9B,YACC,UACA,aACA,oBACC;AAvBF,uBAAiC,CAAC;AAClC,4BAAkC,CAAC;AAMnC,SAAQ,YAA2B,CAAC;AACpC,SAAQ,iBAAgC,CAAC;AACzC,SAAQ,gBAA+B,CAAC;AAevC,UAAM,WAAW,sBAAsB;AAEvC,SAAK,WAAW;AAEhB,SAAK,mBAAmB,CAAC;AACzB,QAAI,YAAY;AAChB,SAAK,gBAAgB,OAAO,KAAK,QAAQ,EAAE,SAAS,KAAK,SAAS;AAClE,SAAK,wBAAwB,IAAI,KAAK,KAAK,KAAK;AAEhD,eAAW,OAAO,UAAU;AAC3B,YAAM,MAAM,IAAI,MAAM,GAAG,CAAC,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI;AACvD,WAAK,iBAAiB,KAAK,GAAG;AAC9B,WAAK,UAAU,KAAK,GAAG;AACvB,WAAK,eAAe,KAAK,SAAS;AAClC,WAAK,cAAc,KAAK,SAAS,GAAG,CAAC;AAErC,mBAAa,SAAS,GAAG;AAAA,IAC1B;AAEA,SAAK,YAAY;AAEjB,QAAI,YAAY;AAEhB,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC/C,YAAM,kBAAkB,KAAK,yBAAyB,KAAK,cAAc,CAAC,IAAI;AAE9E,YAAM,aAAa,KAAK,IAAI,KAAK,SAAS,WAAW,IAAI,YAAY,KAAK,SAAS;AACnF,YAAM,WACL,KAAK,IAAI,KAAK,SAAS,WAAW,IAAI,kBAAkB,YAAY,KAAK,SAAS,WAAW;AAC9F,YAAM,aAAyB;AAAA,QAC9B,OAAO,KAAK,eAAe,CAAC;AAAA,QAC5B,MAAM,KAAK,cAAc,CAAC;AAAA,QAC1B,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ,aAAa,YAAY;AAAA,QACjC,aAAa,KAAK,SAAS,MAAM;AAAA,QACjC,aAAa,KAAK,SAAS,MAAM,wBAAwB,KAAK,SAAS,MAAM;AAAA,QAC7E,OAAO;AAAA,QACP,MAAM,KAAK,UAAU,CAAC;AAAA,MACvB;AAEA,WAAK,YAAY,KAAK,UAAU;AAEhC,UAAI,WAAW,YAAY,MAAM;AAChC,oBAAY,WAAW;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AACD;;;AC3EA,IAAqB,mBAArB,MAAsC;AAAA,EAIrC,YAAY,YAAoB,kBAAiC;AAChE,SAAK,aAAa;AAClB,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAEA,IAAI,SAAoB;AACvB,WAAO;AAAA,MACN,IAAI,QAAQ;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,KAAK,QAAQ;AAAA,MACb,KAAK,QAAQ;AAAA,MACb,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ,MAAM,QAAQ,MAAM,QAAQ;AAAA,MAC9C,QAAQ,QAAQ;AAAA,MAChB,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,MACf,SAAS,QAAQ;AAAA,MACjB,eAAe,KAAK,iBAAiB,KAAK,gBAAc,cAAc,QAAQ,IAAI;AAAA,MAClF,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,MACjB,YAAY,QAAQ;AAAA,IACrB;AAAA,EACD;AACD;;;ACzCO,IAAM,mBAAN,MAAuB;AAAA,EAC7B,IAAI,MAAqB,YAAoB;AAC5C,WAAO,KAAK,4CAA4C,MAAM,UAAU;AAAA,EACzE;AAAA,EAEQ,4CACP,MACA,YAIC;AAED,UAAM,YAAY,KAAK,OAAO,OAAK,IAAI,CAAC;AACxC,UAAM,YAAY,KAAK,OAAO,OAAK,IAAI,CAAC,EAAE,IAAI,OAAK,KAAK,CAAC;AAEzD,QAAI,WAAW;AACf,QAAI,WAAW;AAEf,QAAI,UAAU,SAAS,GAAG;AACzB,iBAAW,KAAK,oBAAoB,WAAW,UAAU;AAAA,IAC1D;AAEA,QAAI,UAAU,SAAS,GAAG;AACzB,iBAAW,KAAK,KAAK,oBAAoB,WAAW,UAAU;AAAA,IAC/D;AAEA,WAAO,EAAE,UAAoB,SAAmB;AAAA,EACjD;AAAA,EAEQ,oBAAoB,MAAqB,YAA4B;AAC5E,QAAI,KAAK,WAAW,GAAG;AACtB,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC3D;AAEA,UAAM,eAAe,KAAK,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAC9C,UAAM,QAAS,aAAa,OAAQ,aAAa,SAAS;AAE1D,UAAM,aAAa,KAAK,MAAM,KAAK;AACnC,UAAM,aAAa,KAAK,KAAK,KAAK;AAClC,UAAM,WAAW,QAAQ;AAEzB,QAAI,eAAe,YAAY;AAC9B,aAAO,aAAa,UAAU;AAAA,IAC/B;AAEA,WAAO,aAAa,UAAU,IAAI,YAAY,aAAa,UAAU,IAAI,aAAa,UAAU;AAAA,EACjG;AACD;;;ACvCO,SAAS,gBAAgB,GAAkC;AACjE,MAAI,OAAO,UAAU,CAAC,EAAG,QAAO;AAChC,MAAI,OAAO,KAAK,YAAY,UAAU,KAAK,CAAC,GAAG;AAC9C,UAAM,IAAI,OAAO,CAAC;AAClB,QAAI,OAAO,UAAU,CAAC,EAAG,QAAO;AAAA,EACjC;AACA,SAAO;AACR;AAEO,SAAS,cACf,eACA,eACA,iBACC;AACD,QAAM,WAAW,gBAAgB,aAAa;AAC9C,MAAI,YAAY,QAAQ,WAAW,EAAG,QAAO;AAE7C,QAAM,aAAa,gBAAgB,eAAe;AAClD,MAAI,cAAc,MAAM;AACvB,QAAI,cAAc,KAAK,aAAa,SAAU,QAAO;AACrD,WAAO,EAAE,UAAU,UAAU,aAAa,UAAU,WAAW;AAAA,EAChE;AAEA,QAAM,WAAW,gBAAgB,aAAa;AAC9C,MAAI,YAAY,QAAQ,WAAW,KAAK,WAAW,YAAY,EAAG,QAAO;AACzE,SAAO,EAAE,UAAU,UAAU,YAAY,WAAW,SAAS;AAC9D;AAEO,SAAS,mBACf,eACA,eACA,iBACU;AACV,SAAO,cAAc,eAAe,eAAe,eAAe,KAAK;AACxE;AAEO,SAAS,cAAc,MAAgC;AAC7D,QAAM,UAAsB,CAAC;AAC7B,MAAI,MAAM,QAAQ,IAAI,GAAG;AACxB,eAAW,OAAO,MAAM;AACvB,YAAM,QAAQ,KAAK,MAAM,KAAK;AAC9B,YAAM,WAAW,KAAK;AACtB,YAAM,aAAa,KAAK;AACxB,YAAM,WAAW,KAAK;AACtB,UAAI,CAAC,SAAS,YAAY,QAAS,YAAY,QAAQ,cAAc,KAAO;AAC5E,YAAM,QAAkB,EAAE,OAAO,SAAS;AAC1C,UAAI,YAAY,KAAM,OAAM,WAAW;AACvC,UAAI,cAAc,KAAM,OAAM,aAAa;AAC3C,cAAQ,KAAK,KAAK;AAAA,IACnB;AAAA,EACD;AACA,SAAO;AACR;AAEO,SAAS,mBAAmB,GAAkC;AACpE,MAAI,OAAO,KAAK,YAAY,OAAO,KAAK,SAAU,QAAO;AACzD,QAAM,IAAI,OAAO,CAAC;AAClB,SAAO,OAAO,SAAS,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI;AACrD;AAEO,SAAS,qBAAqB,MAA8B;AAClE,QAAM,YAAsB,CAAC;AAC7B,MAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO;AAEjC,aAAW,OAAO,MAAM;AACvB,UAAM,mBAAmB,mBAAmB,KAAK,YAAY,KAAK,gBAAgB;AAClF,QAAI,oBAAoB,MAAM;AAC7B,gBAAU,KAAK,gBAAgB;AAC/B;AAAA,IACD;AAEA,UAAM,SAAS,cAAc,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU;AAC1E,QAAI,CAAC,OAAQ;AACb,cAAU,KAAK,OAAO,WAAW,OAAO,UAAU;AAAA,EACnD;AACA,SAAO;AACR;AAEO,SAAS,uBAAuB,MAAmC;AACzE,QAAM,YAAY,qBAAqB,IAAI;AAC3C,SAAO,UAAU,SAAS,KAAK,IAAI,GAAG,SAAS,IAAI;AACpD;AAEO,SAAS,oBAAoB,MAA6B;AAChE,SAAO,cAAc,IAAI,EAAE,KAAK,SAAO,mBAAmB,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,CAAC;AACtG;AAEO,SAAS,aACf,KACA,eACA,eACA,QAAQ,OACR,iBACC;AACD,QAAM,SAAS,cAAc,eAAe,eAAe,eAAe;AAC1E,MAAI,CAAC,OAAQ;AAEb,QAAM,WAAW,OAAO,WAAW,OAAO;AAC1C,QAAM,MAAM,IACV,OAAO,KAAK,EACZ,MAAM,eAAe,KAAK,EAC1B,MAAM,cAAc,KAAK,EACzB,MAAM,WAAW,MAAM,EACvB,MAAM,eAAe,QAAQ,EAC7B,MAAM,OAAO,KAAK;AAEpB,MAAI,OAAO,MAAM,EAAE,MAAM,aAAa,OAAO,EAAE,MAAM,SAAS,MAAM,EAAE,KAAK,KAAK;AAChF,UAAQ,KAAK,EAAE,GAAG,UAAU,IAAI,OAAO,UAAU,IAAI,OAAO,WAAW,CAAC;AACzE;AAEO,SAAS,cAAc,KAAU,MAAoB;AAC3D,aAAW,OAAO,cAAc,IAAI,GAAG;AACtC,QAAI,CAAC,mBAAmB,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,EAAG;AACrE,iBAAa,KAAK,IAAI,UAAU,IAAI,UAAU,IAAI,OAAO,IAAI,UAAU;AAAA,EACxE;AACD;;;ACnHA,IAAqB,aAArB,MAAqB,YAAW;AAAA,EA8E/B,YAAY,UAAoB,WAAsB,QAAgB,mBAAkC,CAAC,GAAG;AA3E5G;AAAA,SAAQ,YAAyB,CAAC;AAElC,SAAQ,mBAAgC,CAAC;AACzC,SAAQ,uBAAuB;AAE/B,SAAQ,iBAA2C,oBAAI,IAAI;AAC3D,SAAQ,iBAAiB;AAEzB,SAAQ,UAAuB,CAAC;AAChC,SAAQ,MAAM;AACd,SAAQ,gBAAgB;AACxB,SAAQ,kBAA+B,CAAC;AACxC,SAAQ,wBAA6C,oBAAI,IAAI;AAE7D,SAAQ,UAAuB,CAAC;AAChC,SAAQ,iBAAiB;AAEzB,SAAQ,UAAuB,CAAC;AAChC,SAAQ,iBAAiB;AAEzB,SAAQ,aAA0B,CAAC;AACnC,SAAQ,eAAe;AAEvB,SAAQ,sBAAsB;AAC9B,SAAQ,iCAAiC;AAEzC,SAAQ,iBAAyD,CAAC;AAElE,SAAQ,kBAAkB;AAC1B,SAAQ,kBAAkB;AAI1B,SAAQ,qBAAqB;AAC7B,SAAQ,qBAAqB;AAC7B,SAAQ,sBAAsB;AAE9B,SAAQ,wBAAuD,CAAC;AAChE,SAAQ,0BAA0B;AAClC,SAAQ,+BAA+B;AACvC,SAAQ,4BAA4B;AACpC,SAAQ,4BAA4B;AAEpC,SAAQ,cAAuB;AAC/B,SAAQ,cAAuB;AAY/B,SAAQ,YAAY,CAAC,SAAe,KAAK,MAAM;AAC/C,SAAQ,eAAe,CAAC,SAAe,KAAK,MAAM,eAAe,KAAK,MAAM;AAE5E,SAAQ,YAAY,CAAC,SAAe,KAAK,MAAM,SAAS,KAAK,MAAM;AACnE,SAAQ,YAAY,CAAC,SAAe,KAAK,MAAM;AAE/C,SAAQ,cAAc,CAAC,GAAG,MAAM;AAC/B,YAAM,UAAU,KAAK,UAAU,iBAAiB,QAAQ,EAAE,GAAG,IAAI,KAAK,UAAU,iBAAiB,QAAQ,EAAE,GAAG;AAC9G,UAAI,WAAW,GAAG;AACjB,eAAO;AAAA,MACR;AAEA,YAAM,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;AAE/B,YAAM,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;AAE/B,aAAO,OAAO;AAAA,IACf;AAGC,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,sBAAsB,KAAK,SAAS,MAAM;AAC/C,SAAK,mBAAmB,KAAK,SAAS,MAAM;AAE5C,SAAK,aAAa,KAAK,SAAS,MAAM;AACtC,SAAK,aAAa,KAAK,KAAK,SAAS,MAAM;AAE3C,SAAK,kBAAkB,CAAC,SAAe;AACtC,UAAI,iBAAiB,SAAS,KAAK,KAAK,SAAS,MAAM,gCAAgC;AACtF,eACC,iBAAiB,SAAS,KAAK,IAAI,KACnC,SAAS,MAAM,sBAAsB,SAAS,gBAAgB,cAAc,KAAK,MAAM,CAAC;AAAA,MAE1F,OAAO;AACN,eAAO,SAAS,MAAM,sBAAsB,SAAS,gBAAgB,cAAc,KAAK,MAAM,CAAC;AAAA,MAChG;AAAA,IACD;AAEA,SAAK,gBAAgB,CAAC,SAAe;AACpC,UAAI,iBAAiB,SAAS,KAAK,KAAK,SAAS,MAAM,gCAAgC;AACtF,eACC,iBAAiB,SAAS,KAAK,IAAI,KACnC,SAAS,MAAM,eAAe,SAAS,gBAAgB,cAAc,KAAK,MAAM,CAAC;AAAA,MAEnF,OAAO;AACN,eAAO,SAAS,MAAM,eAAe,SAAS,gBAAgB,cAAc,KAAK,MAAM,CAAC;AAAA,MACzF;AAAA,IACD;AAEA,SAAK,mBAAmB,IAAI,iBAAiB,QAAQ,gBAAgB;AAAA,EACtE;AAAA,EAEA,IAAI,MAAW;AACd,UAAM,YAAyB,CAAC;AAEhC,SAAK,sBAAsB,MAAM;AACjC,SAAK,iCAAiC;AACtC,SAAK,wBAAwB,CAAC;AAC9B,SAAK,+BAA+B;AACpC,SAAK,4BAA4B;AACjC,SAAK,4BAA4B;AACjC,SAAK,0BAA0B;AAE/B,SAAK,QAAQ,aAAW;AACvB,UAAI,QAAQ,MAAM,cAAc,uBAAuB,QAAQ,IAAI,KAAK,MAAM;AAC7E,aAAK,0BAA0B;AAAA,MAChC;AACA,YAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,QAAQ,GAAG;AACjE,YAAM,SAAS,KAAK,UAAU,iBAAiB,QAAQ,QAAQ,IAAI;AACnE,YAAM,SAAS,KAAK,UAAU,iBAAiB,QAAQ,QAAQ,IAAI;AAEnE,UAAI,QAAQ,MAAM,YAAY;AAC7B,YAAI,SAAS,MAAM,KAAK,QAAQ,SAAS,KAAK,SAAS,IAAI,kBAAkB;AAC5E,gBAAM,MAAM,QAAQ,OAAO,QAAQ;AACnC,gBAAM,UAAU,KAAK,UAAU,YAAY,KAAK,EAAE;AAElD,cAAI,OAAO,SAAS,GAAG,KAAK,OAAO,KAAK,OAAO,SAAS;AACvD,iBAAK,QAAQ,SAAS,SAAS;AAAA,UAChC,OAAO;AACN,iBAAK,eAAe,KAAK,EAAE,UAAU,OAAO,QAAQ,YAAY,GAAG,eAAe,QAAQ,GAAG,GAAG,CAAC;AAAA,UAClG;AAAA,QACD,WAAW,SAAS,IAAI;AACvB,cAAI,CAAC,KAAK,oBAAoB,SAAS,QAAQ,GAAG,GAAG;AACpD,iBAAK,eAAe,KAAK,EAAE,UAAU,OAAO,QAAQ,eAAe,QAAQ,GAAG,GAAG,CAAC;AAAA,UACnF;AAAA,QACD;AAAA,MACD,WAAW,QAAQ,MAAM,eAAe,QAAQ,MAAM,MAAM;AAC3D,YAAI,UAAU,MAAM,UAAU,IAAI;AAEjC,gBAAM,OAAO,QAAQ;AACrB,gBAAM,OAAO,QAAQ;AACrB,gBAAM,WAAW,KAAK,UAAU,YAAY,MAAM,EAAE;AACpD,gBAAM,WAAW,KAAK,UAAU,YAAY,MAAM,EAAE;AAEpD,cACC,OAAO,SAAS,IAAI,KACpB,OAAO,SAAS,IAAI,KACpB,QAAQ,KACR,QAAQ,YACR,QAAQ,KACR,QAAQ,UACP;AACD,iBAAK,QAAQ,SAAS,SAAS;AAAA,UAChC,OAAO;AACN,kBAAM,cAAwB,CAAC;AAC/B,gBAAI,EAAE,OAAO,SAAS,IAAI,KAAK,QAAQ,KAAK,QAAQ;AACnD,0BAAY,KAAK,YAAY,IAAI,eAAe,QAAQ,IAAI,EAAE;AAC/D,gBAAI,EAAE,OAAO,SAAS,IAAI,KAAK,QAAQ,KAAK,QAAQ;AACnD,0BAAY,KAAK,YAAY,IAAI,eAAe,QAAQ,IAAI,EAAE;AAC/D,iBAAK,eAAe,KAAK,EAAE,UAAU,UAAU,QAAQ,YAAY,KAAK,IAAI,EAAE,CAAC;AAAA,UAChF;AAAA,QACD,OAAO;AACN,gBAAM,UAAoB,CAAC;AAC3B,cAAI,UAAU,MAAM,CAAC,KAAK,oBAAoB,SAAS,QAAQ,IAAI,EAAG,SAAQ,KAAK,QAAQ,IAAI;AAC/F,cAAI,UAAU,MAAM,CAAC,KAAK,oBAAoB,SAAS,QAAQ,IAAI,EAAG,SAAQ,KAAK,QAAQ,IAAI;AAC/F,cAAI,QAAQ,OAAQ,MAAK,eAAe,KAAK,EAAE,UAAU,UAAU,QAAQ,wBAAwB,CAAC;AAAA,QACrG;AAAA,MACD,WAAW,CAAC,OAAO,OAAO,KAAK,EAAE,SAAS,OAAO,QAAQ,EAAE,CAAC,GAAG;AAC9D,cAAM,MAAM,KAAK,UAAU,iBAAiB,QAAQ,QAAQ,GAAG;AAC/D,cAAM,WAAW,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,MAAM,QAAQ,QAAQ;AAC7E,YAAI,QAAQ,OAAO,OAAO,IAAI;AAC7B,gBAAM,UAAU,KAAK,UAAU,YAAY,GAAG,EAAE;AAChD,gBAAM,QAAQ,QAAQ;AACtB,gBAAM,OAAO,QAAQ;AAErB,cAAI,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,IAAI,KAAK,SAAS,KAAK,QAAQ,WAAW,SAAS,MAAM;AACtG,iBAAK,QAAQ,SAAS,SAAS;AAAA,UAChC,OAAO;AACN,iBAAK,eAAe,KAAK;AAAA,cACxB;AAAA,cACA,QAAQ,YAAY,KAAK,IAAI,IAAI,eAAe,QAAQ,GAAG;AAAA,YAC5D,CAAC;AAAA,UACF;AAAA,QACD,OAAO;AACN,cAAI,CAAC,KAAK,oBAAoB,SAAS,QAAQ,GAAG,GAAG;AACpD,iBAAK,eAAe,KAAK;AAAA,cACxB;AAAA,cACA,QAAQ,eAAe,QAAQ,GAAG;AAAA,YACnC,CAAC;AAAA,UACF;AAAA,QACD;AAAA,MACD,OAAO;AACN,cAAM,MAAM,wBAAwB;AAAA,MACrC;AAAA,IACD,CAAC;AAED,UAAM,aAAa,UAAU,KAAK,KAAK,WAAW;AAElD,QAAI,KAAK,SAAS,MAAM,sBAAsB;AAC7C,iBAAW,QAAQ,CAAAA,UAAQ;AAC1B,aAAK,uBAAuBA,KAAI;AAAA,MACjC,CAAC;AAAA,IACF;AAEA,QAAI,KAAK,iBAAiB,SAAS,GAAG;AACrC,WAAK,uBAAuB,KAAK,mBAAmB,KAAK,SAAS,MAAM;AACxE,WAAK,mBAAmB,KAAK;AAAA,IAC9B;AAEA,eAAW,QAAQ,CAAAA,UAAQ;AAC1B,WAAK,WAAWA,KAAI;AAAA,IACrB,CAAC;AAED,SAAK,iCAAiC,MAAM,KAAK,KAAK,sBAAsB,OAAO,CAAC,EAAE,KAAK,WAAS,SAAS,CAAC;AAE9G,QAAI,KAAK,SAAS,MAAM,yBAAyB,KAAK,gCAAgC;AACrF,WAAK,6BAA6B;AAAA,IACnC;AAEA,eAAW,QAAQ,CAAAA,UAAQ;AAC1B,WAAK,WAAWA,KAAI;AAAA,IACrB,CAAC;AAED,QAAI,KAAK,QAAQ,SAAS,GAAG;AAC5B,WAAK,iBAAiB,KAAK,mBAAmB,KAAK,SAAS,MAAM;AAClE,WAAK,mBAAmB,KAAK;AAAA,IAC9B;AAEA,eAAW,QAAQ,CAAAA,UAAQ;AAC1B,WAAK,WAAWA,KAAI;AAAA,IACrB,CAAC;AAED,QAAI,KAAK,QAAQ,SAAS,GAAG;AAC5B,WAAK,iBAAiB,KAAK,mBAAmB,KAAK,SAAS,MAAM;AAClE,WAAK,mBAAmB,KAAK;AAE7B,WAAK,uBAAuB,KAAK;AAAA,QAChC,KAAK,SAAS,MAAM;AAAA,QACpB,KAAK;AAAA,UACJ,KAAK,IAAI,YAAW,YAAY,KAAK,iBAAiB,KAAK,YAAY,KAAK,UAAU,CAAC;AAAA,UACvF,KAAK,IAAI,YAAW,YAAY,KAAK,iBAAiB,KAAK,YAAY,KAAK,UAAU,CAAC;AAAA,QACxF;AAAA,MACD;AAEA,YAAM,YAAY,KAAK,QAAQ,OAAO,CAAAA,UAAQA,MAAK,MAAM,KAAK,EAAE,IAAI,CAAAA,UAAQA,MAAK,KAAK;AACtF,UAAI,UAAU,QAAQ;AACrB,cAAM,iBAAiB,IAAI,iBAAiB,EAAE,IAAI,WAAW,KAAK,SAAS,MAAM,aAAa;AAC9F,aAAK,qBAAqB,YAAW,YAAY,eAAe,UAAU,KAAK,YAAY,KAAK,UAAU;AAC1G,aAAK,qBAAqB,YAAW,YAAY,eAAe,UAAU,KAAK,YAAY,KAAK,UAAU;AAE1G,aAAK,sBAAsB,KAAK;AAAA,UAC/B,KAAK,SAAS,MAAM;AAAA,UACpB,KAAK,IAAI,KAAK,oBAAoB,KAAK,IAAI,KAAK,kBAAkB,CAAC;AAAA,QACpE;AAAA,MACD;AAAA,IACD;AAEA,eAAW,QAAQ,CAAAA,UAAQ;AAC1B,WAAK,aAAaA,KAAI;AAAA,IACvB,CAAC;AAED,QAAI,KAAK,WAAW,SAAS,GAAG;AAC/B,WAAK,eAAe,KAAK;AAAA,IAC1B;AAEA,UAAM,aAAyB;AAAA,MAC9B,WAAW,KAAK;AAAA,MAChB,kBAAkB,KAAK;AAAA,MACvB,sBAAsB,KAAK;AAAA,MAC3B,gBAAgB,KAAK;AAAA,MACrB,gBAAgB,KAAK;AAAA,MAErB,SAAS,KAAK;AAAA,MACd,KAAK,KAAK;AAAA,MACV,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MAEtB,SAAS,KAAK;AAAA,MACd,gBAAgB,KAAK;AAAA,MAErB,SAAS,KAAK;AAAA,MACd,gBAAgB,KAAK;AAAA,MAErB,YAAY,KAAK;AAAA,MACjB,cAAc,KAAK;AAAA,MAEnB,qBAAqB,KAAK;AAAA,MAC1B,gCAAgC,KAAK;AAAA,MAErC,iBAAiB,KAAK;AAAA,MACtB,iBAAiB,KAAK;AAAA,MACtB,sBAAsB,KAAK;AAAA,MAC3B,oBAAoB,KAAK;AAAA,MACzB,oBAAoB,KAAK;AAAA,MACzB,qBAAqB,KAAK;AAAA,MAE1B,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAElB,yBAAyB,KAAK;AAAA,MAE9B,uBAAuB,KAAK;AAAA,MAC5B,8BAA8B,KAAK;AAAA,MACnC,2BAA2B,KAAK,sBAAsB,SACnD,EAAE,KAAK,KAAK,2BAA2B,KAAK,KAAK,0BAA0B,IAC3E;AAAA,MAEH,iBAAiB;AAAA,QAChB,SAAS,KAAK;AAAA,QACd,UAAU;AAAA,MACX;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,QAAQ,SAAS,WAAwB;AAChD,UAAM,WAAW,KAAK,iBAAiB,IAAI,OAAO;AAElD,QAAI,SAAS,eAAe;AAC3B,WAAK,sBAAsB;AAAA,IAC5B;AAEA,cAAU,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEQ,uBAAuB,MAAY;AAC1C,QAAI,KAAK,UAAU,IAAI,KAAK,KAAK,6BAA6B,IAAI,GAAG;AACpE,UAAI,KAAK,SAAS,MAAM,wBAAwB,KAAK,gBAAgB,IAAI,GAAG;AAC3E,aAAK,iBAAiB,KAAK,IAAI;AAAA,MAChC;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,WAAW,MAAY;AAC9B,QAAI,KAAK,UAAU,IAAI,GAAG;AACzB,WAAK,QAAQ,KAAK,IAAI;AAEtB,UAAI,KAAK,6BAA6B,IAAI,KAAK,KAAK,cAAc,IAAI,GAAG;AACxE,YAAI,KAAK,kBAAkB,GAAG;AAC7B,eAAK,iBAAiB,KAAK,mBAAmB,KAAK,SAAS,MAAM;AAClE,eAAK,mBAAmB,KAAK;AAI7B,eAAK,MAAM,KAAK,MAAM,KAAK,UAAU,aAAa,KAAK,UAAU,wBAAwB,KAAK,eAAe;AAC7G,eAAK,gBAAgB,IAAI,KAAK;AAAA,QAC/B;AAEA,aAAK,gBAAgB,KAAK,IAAI;AAC9B,aAAK,UAAU,KAAK,IAAI;AAExB,cAAM,eAAe,KAAK,sBAAsB,IAAI,KAAK,GAAG,KAAK;AACjE,aAAK,sBAAsB,IAAI,KAAK,KAAK,eAAe,CAAC;AAEzD,cAAM,WAAW,KAAK,kBAAkB,IAAI;AAC5C,YAAI,YAAY,KAAK,eAAe,IAAI,QAAQ;AAChD,YAAI,CAAC,WAAW;AACf,sBAAY,IAAI,MAAY;AAAA,QAC7B;AACA,kBAAU,KAAK,IAAI;AACnB,aAAK,eAAe,IAAI,UAAU,SAAS;AAAA,MAC5C;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,6BAA6B,MAAqB;AAEzD,QAAI,CAAC,KAAK,wBAAyB,QAAO;AAC1C,UAAM,sBAAsB,KAAK,SAAS,MAAM,uBAAuB;AACvE,QAAI,uBAAuB,EAAG,QAAO;AAErC,UAAM,WAAW,uBAAuB,KAAK,IAAI;AACjD,WAAO,YAAY,QAAQ,YAAY;AAAA,EACxC;AAAA,EAEQ,aAAa,MAAY;AAChC,QAAI,KAAK,aAAa,IAAI,GAAG;AAC5B,WAAK,gBAAgB;AACrB,WAAK,WAAW,KAAK,IAAI;AACzB,WAAK,UAAU,KAAK,IAAI;AAAA,IACzB;AAAA,EACD;AAAA,EAEQ,WAAW,MAAY;AAC9B,QAAI,KAAK,UAAU,IAAI,GAAG;AACzB,UAAI,KAAK,eAAe,UAAa,KAAK,cAAc,KAAK,OAAO;AACnE,aAAK,cAAc,KAAK;AAAA,MACzB;AAEA,UAAI,KAAK,eAAe,UAAa,KAAK,cAAc,KAAK,OAAO;AACnE,aAAK,cAAc,KAAK;AAAA,MACzB;AAEA,WAAK,QAAQ,KAAK,IAAI;AAAA,IACvB;AAAA,EACD;AAAA,EAEQ,WAAW,MAAY;AAC9B,QAAI,KAAK,UAAU,IAAI,GAAG;AACzB,UAAI,CAAC,KAAK,OAAO,KAAK,UAAU,iBAAiB,QAAQ,KAAK,GAAG,KAAK,IAAI;AAEzE;AAAA,MACD;AAGA,UAAI,KAAK,MAAM,OAAO;AACrB,YAAI,KAAK,mBAAmB,UAAa,KAAK,kBAAkB,KAAK,OAAO;AAC3E,eAAK,kBAAkB,KAAK;AAAA,QAC7B;AAEA,YAAI,KAAK,mBAAmB,UAAa,KAAK,kBAAkB,KAAK,OAAO;AAC3E,eAAK,kBAAkB,KAAK;AAAA,QAC7B;AAAA,MACD;AACA,WAAK,QAAQ,KAAK,IAAI;AAAA,IACvB;AAAA,EACD;AAAA,EAEQ,+BAA+B;AACtC,SAAK,+BAA+B,KAAK,mBAAmB,KAAK,SAAS,MAAM;AAChF,SAAK,mBAAmB,KAAK;AAE7B,UAAM,cAAwC,oBAAI,IAAI;AACtD,UAAM,qBAA+C,CAAC;AACtD,eAAW,OAAO,KAAK,iBAAiB;AACvC,YAAM,OAAO,YAAY,IAAI,IAAI,GAAG,KAAK,CAAC;AAC1C,WAAK,KAAK,GAAG;AACb,kBAAY,IAAI,IAAI,KAAK,IAAI;AAAA,IAC9B;AAEA,eAAW,CAAC,EAAE,IAAI,KAAK,aAAa;AACnC,UAAI,KAAK,SAAS,EAAG;AACrB,WAAK,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AAC3C,yBAAmB,KAAK;AAAA,QACvB,KAAK,KAAK,CAAC,EAAE;AAAA,QACb,UAAU,KAAK,CAAC,EAAE;AAAA,QAClB,aAAa;AAAA;AAAA,MACd,CAAC;AACD,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,cAAM,OAAO,KAAK,IAAI,CAAC;AACvB,cAAM,OAAO,KAAK,CAAC;AACnB,cAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,WAAW,KAAK,QAAQ,CAAC;AACpE,cAAM,cAAc,KAAK,MAAM,QAAQ;AACvC,aAAK,sBAAsB,KAAK;AAAA,UAC/B,KAAK,KAAK;AAAA,UACV,UAAU,KAAK;AAAA,UACf;AAAA,QACD,CAAC;AACD,YAAI,cAAc,KAAK,2BAA2B;AACjD,eAAK,4BAA4B;AAAA,QAClC;AACA,YAAI,cAAc,KAAK,2BAA2B;AACjD,eAAK,4BAA4B;AAAA,QAClC;AAAA,MACD;AAAA,IACD;AAEA,QAAI,CAAC,KAAK,sBAAsB,QAAQ;AACvC,WAAK,4BAA4B;AACjC,WAAK,4BAA4B;AAAA,IAClC;AAEA,UAAM,iBAAiB,KAAK;AAC5B,eAAW,SAAS,oBAAoB;AACvC,WAAK,sBAAsB,KAAK;AAAA,QAC/B,GAAG;AAAA,QACH,aAAa;AAAA,MACd,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEQ,kBAAkB,MAAY;AACrC,UAAM,oBACL,KAAK,UAAU,YACd,KAAK,UAAU,iBAAiB,UAAU,qBAAmB,KAAK,OAAO,eAAe,CACzF;AAED,UAAM,eAAe,KAAK,MAAM,KAAK,WAAW,KAAK,GAAG;AAExD,WAAO,kBAAkB,aAAa,eAAe,KAAK;AAAA,EAC3D;AAAA,EAEA,OAAO,YAAY,OAAe,YAAoB,YAAoB;AACzE,QAAI,SAAS,KAAK,KAAK,KAAK,KAAK,GAAG;AACnC,aAAO,QAAQ,aAAa,aAAa;AAAA,IAC1C;AAEA,QAAI,KAAK,KAAK,KAAK,KAAK,IAAI;AAC3B,aAAO,QAAQ,aAAa,aAAa;AAAA,IAC1C;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,OAAO,YAAY,OAAe,cAAc,GAAG;AAClD,QAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAC1B,aAAO,QAAQ,cAAc,QAAQ;AAAA,IACtC;AAEA,QAAI,KAAK,KAAK,KAAK,KAAK,IAAI;AAC3B,aAAO,QAAQ,KAAK,cAAc,QAAQ,KAAK;AAAA,IAChD;AAEA,WAAO;AAAA,EACR;AACD;;;AChgBA,IAAqB,SAArB,MAA4B;AAAA,EAsB3B,YACC,UACA,UACA,UACA,aACA,eACA,eACA,aACA,aACA,kBACA,cACA,mBACA,WACA,yBACA,qBAAyC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,GACpF,WAAW,GACV;AACD,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;AACrB,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,mBAAmB;AACxB,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,qBAAqB;AAC1B,SAAK,oBAAoB;AACzB,SAAK,0BAA0B;AAAA,EAChC;AAAA,EAEA,cAAsB;AACrB,UAAM,SAAS,KAAK,YAAY,eAAe;AAC/C,YACE,KAAK,YAAY,OAAO,IAAI,IAAI,MAChC,KAAK,WAAW,IAAI,IAAI,MACxB,SAAS,IAAI,MACb,KAAK,YAAY,IAAI,MACrB,KAAK,eAAe,IAAI,MACxB,KAAK,0BAA0B,IAAI;AAAA,EAEtC;AACD;;;AChFA,IAAqB,SAArB,MAA8C;AAAA,EAU7C,YACC,QACA,QACA,OACA,OACA,QACA,IACA,YACC;AACD,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,KAAK;AACV,SAAK,aAAa;AAAA,EACnB;AACD;;;AC3BA,IAAqB,iBAArB,MAA8D;AAAA,EAW7D,YACC,YACA,UACA,QACA,MACA,OACA,OACA,sBACA,QACC;AACD,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,uBAAuB;AAC5B,SAAK,SAAS;AAAA,EACf;AACD;;;AC5BA,IAAqB,eAArB,MAAkC;AAAA,EAKjC,YAAY,QAAgB,YAAoB,WAAsB;AACrE,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,YAAY;AAAA,EAClB;AAAA,EAEA,IAAI,YAAwC;AAC3C,UAAM,UAAyB,CAAC;AAEhC,eAAW,QAAQ,UAAQ;AAC1B,YAAM,QAAQ,oBAAI,IAAY;AAC9B,YAAM,IAAI,KAAK,KAAK;AACpB,YAAM,IAAI,KAAK,KAAK;AAGpB,YAAM,aAAa,KAAK,oBAAoB,KAAK,MAAM,KAAK,IAAI;AAChE,YAAM,WAAW,KAAK,kBAAkB,KAAK,MAAM,KAAK,IAAI;AAC5D,UAAI,eAAe,QAAQ,aAAa,KAAM;AAE9C,YAAM,SAAS,IAAI;AAAA,QAClB;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACC,YAAY,KAAK;AAAA,UACjB,UAAU,KAAK;AAAA,QAChB;AAAA,QACA,KAAK;AAAA,MACN;AAEA,UAAI;AACJ,UAAI,KAAK,QAAQ,KAAK,MAAM;AAE3B,cAAMC,cAAa,KAAK,oBAAoB,KAAK,MAAM,KAAK,IAAI;AAChE,cAAMC,YAAW,KAAK,kBAAkB,KAAK,MAAM,KAAK,IAAI;AAC5D,YAAID,gBAAe,QAAQC,cAAa,KAAM;AAC9C,iBAAS,IAAI;AAAA,UACZD;AAAA,UACAC;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL;AAAA,UACA;AAAA,YACC,YAAY,KAAK;AAAA,YACjB,UAAU,KAAK;AAAA,UAChB;AAAA,UACA,KAAK;AAAA,QACN;AAAA,MACD;AACA,YAAM,SAAS,IAAI,OAAO,QAAQ,QAAQ,SAAS,IAAI,aAAa,KAAK,IAAI,KAAK,UAAU;AAE5F,cAAQ,KAAK,MAAM;AAAA,IACpB,CAAC;AAED,WAAO;AAAA,EACR;AAAA,EAEA,oBAAoB,KAAa,KAAa;AAC7C,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,GAAG;AAEzD,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AAEnD,WACC,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,GAAG,IAAI,WAAW,QAAQ;AAAA,EAE5G;AAAA,EAEQ,kBAAkB,KAAa,KAAa;AACnD,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,GAAG;AAEzD,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AAEnD,WACC,OAAO,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,GAAG,IAAI,WAAW;AAAA,EAE3G;AACD;;;AC5FA,IAAqB,YAArB,MAA+B;AAAA,EAE9B,YAAY,OAAe;AAC1B,SAAK,QAAQ;AAAA,EACd;AACD;;;ACMA,IAAqB,YAArB,MAA+B;AAAA,EA2B9B,YACC,UACA,OACA,QACA,SACA,YACA,aAEA,kBACC;AACD,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,cAAc;AAEnB,UAAM,aAAa,eAAO,MAAM,EAAE,OAAO,KAAK,EAAE,MAAM,YAAY,UAAU,EAAE,MAAM,cAAc,QAAQ;AAC1G,UAAM,UAAU,WAAW,OAAO,KAAK;AACvC,UAAM,SAAS,MAAM,YAAY,mBAAmB,IAAI,OAAK,EAAE,IAAI,KAAK,CAAC;AACzE,UAAM,gBAAgB,iBAAiB,SAAgB,MAAM;AAC7D,eAAW,OAAO;AAGlB,SAAK,QACJ,KACC,KAAK,SAAS,oBACd,KAAK,SAAS,MAAM,wBACpB,KAAK,SAAS,MAAM,wBACpB;AACF,SAAK,SACJ,KACC,KAAK,SAAS,MAAM,wBACpB,KAAK,SAAS,MAAM,wBACpB,KAAK,SAAS,kBACd,KAAK,SAAS,MAAM,WAAW,IAC/B;AAEF,SAAK,eAAe,KAAK,sBAAsB,MAAM;AACrD,SAAK,gBAAgB,WAAW,QAAQ;AACxC,SAAK,wBAAwB,WAAW,gBAAgB;AACxD,SAAK,mBAAmB;AAExB,SAAK,cAAc,WAAW;AAC9B,SAAK,cAAc,WAAW;AAC9B,SAAK,uBAAuB,WAAW;AACvC,SAAK,qBAAqB,WAAW;AACrC,SAAK,qBAAqB,WAAW;AACrC,SAAK,kBAAkB,WAAW;AAClC,SAAK,+BAA+B,WAAW;AAC/C,SAAK,0BAA0B,WAAW;AAAA,EAC3C;AAAA,EAEA,YAAY,UAAgC;AAC3C,YAAQ,UAAU;AAAA,MACjB;AACC,eAAO,KAAK,MAAM,kBAAkB,KAAK,MAAM,gBAAgB,WAAW,CAAC;AAAA,MAC5E;AACC,eAAO,KAAK,MAAM,WAAW;AAAA,MAC9B;AACC,eAAO,KAAK,MAAM,mBAAmB,KAAK,MAAM,iBAAiB,WAAW,CAAC;AAAA,MAC9E;AACC,eAAO,KAAK,MAAM,aAAa,KAAK,MAAM,WAAW,WAAW,CAAC;AAAA,MAClE;AACC,eAAO,KAAK,MAAM,aAAa,KAAK,MAAM,WAAW,WAAW,CAAC;AAAA,MAClE;AACC,eAAO,KAAK,MAAM,aAAa,KAAK,MAAM,WAAW,WAAW,CAAC;AAAA,MAClE;AACC,eAAO,KAAK,MAAM,wBAAwB,KAAK,MAAM,sBAAsB,WAAW,CAAC;AAAA,MACxF;AACC,cAAM,IAAI,MAAM,YAAY,QAAQ,cAAc;AAAA,IACpD;AAAA,EACD;AAAA,EAEA,cAAc,UAA4C;AACzD,QAAI,2BAA4B;AAC/B,aAAO,KAAK,MAAM,WAAW;AAAA,IAC9B,OAAO;AACN,aAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEQ,sBAAsB,QAAwB;AACrD,UAAM,YAAY,KAAK,SAAS,OAAO;AACvC,WAAO,YAAY,OAAO,YAAY;AAAA,EACvC;AACD;;;ACzHA,IAAqB,OAArB,MAAyC;AAAA,EAQxC,YAAY,aAAqB,OAAe,UAAoB;AACnE,SAAK,cAAc;AACnB,SAAK,cAAc,cAAc;AACjC,SAAK,QAAQ;AACb,SAAK,WAAW;AAAA,EACjB;AACD;;;ACfA,IAAqB,SAArB,MAAqB,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnB,cAAc;AACrB,UAAM,SAAS,CAAC;AAChB,eAAW,OAAO,QAAQ;AACzB,aAAO,OAAO,GAAG,EAAE,KAAK,IAAI,OAAO,GAAG;AACtC,aAAO,GAAG,IAAI,OAAO,GAAG;AAAA,IACzB;AAEA,SAAK,SAAS;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAc,cAAsB;AACnC,QAAI,CAAC,QAAO,UAAU;AACrB,cAAO,WAAW,IAAI,QAAO;AAAA,IAC9B;AAEA,WAAO,QAAO;AAAA,EACf;AACD;;;AChCA,IAAqB,mBAArB,MAAsC;AAAA,EAKlC,YAAY,SAAiB,OAAe,OAAe;AACvD,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACjB;AACJ;;;ACJA,IAAqB,gBAArB,MAAmC;AAAA,EAWlC,YAAY,gBAAwB,UAAkB,YAAoB,WAAsB;AAVhG,uBAA6C,oBAAI,IAAI;AAWpD,SAAK,iBAAiB;AACtB,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,YAAY;AAGjB,SAAK,MAAM,KAAK,MAAM,KAAK,UAAU,aAAa,KAAK,UAAU,wBAAwB,eAAe;AACxG,SAAK,gBAAgB,IAAI;AAAA,EAC1B;AAAA,EAEA,IAAI,kBAA2D;AAC9D,UAAM,WAA0B,CAAC;AACjC,eAAW,SAAS,iBAAiB,KAAK,GAAG;AAC5C,YAAM,QAAQ,iBAAiB,IAAI,KAAK;AACxC,UAAI,OAAO;AACV,cAAM,YAAY,MAAM;AAExB,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,gBAAM,OAAO,MAAM,CAAC;AACpB,gBAAM,mBAAmB,KAAK,YAAY,IAAI,KAAK,MAAM;AACzD,cAAI,kBAAkB;AACrB,iBAAK,YAAY,IAAI,KAAK,QAAQ,KAAK,gBAAgB,KAAK,QAAQ,EAAE,iBAAiB,KAAK,CAAC;AAAA,UAC9F,OAAO;AACN,iBAAK,YAAY,IAAI,KAAK,QAAQ,KAAK,gBAAgB,KAAK,QAAQ,CAAC,CAAC;AAAA,UACvE;AAEA,gBAAM,aAAa;AACnB,gBAAM,WAAW,QAAQ,KAAK;AAE9B,gBAAM,SAAS,OAAO,YAAY,EAAE,SAAS,OAAO,YAAY,EAAE,OAAO,KAAK,MAAM,IAAI;AAExF,gBAAM,MAAc;AAAA,YACnB;AAAA,YACA;AAAA,YACA,aAAa,KAAK,iBAAkB,IAAI,KAAK,WAAY;AAAA,YACzD,aAAa,KAAK,kBAAmB,IAAI,KAAK,KAAK,WAAY;AAAA,YAC/D,OAAO,OAAO;AAAA,YACd,MAAM,KAAK;AAAA,YACX,WAAW,OAAO;AAAA,YAClB,OAAO,KAAK;AAAA,YACZ,KAAK,KAAK;AAAA,YACV,KAAK,KAAK;AAAA,YACV,MAAM,KAAK;AAAA,YACX,YAAY,CAAC,KAAK,UAAU;AAAA,UAC7B;AACA,mBAAS,KAAK,GAAG;AAAA,QAClB;AAAA,MACD;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEQ,gBAAgB,WAAmB,OAAe;AACzD,UAAM,SAAS,OAAO,YAAY,EAAE,OAAO,SAAS;AACpD,WAAO,IAAI,iBAAiB,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EAC9D;AACD;;;ACxEA,IAAqB,YAArB,MAA+B;AAAA,EAM9B,YAAY,MAAc,SAAkB,OAAe,OAAe;AACzE,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACd;AACD;;;ACXA,IAAqB,mBAArB,MAAsC;AAAA,EACrC,OAAO,SAAS,OAAe,UAAoB,sBAAsB,GAAG;AAC3E,UAAM,MAAM,SAAS;AACrB,UAAM,aACL,SAAS,MAAM,8CAA+C,SAAS,MAAM,aAAa;AAC3F,UAAM,aACL,SAAS,MAAM,8CACZ,KAAK,SAAS,MAAM,aACpB,KAAK;AACT,QAAI,QAAQ,YAAY;AACvB,aAAO,IAAI;AAAA,IACZ,WAAW,SAAS,cAAc,SAAS,GAAG;AAC7C,aAAO,IAAI;AAAA,IACZ,WAAW,QAAQ,KAAK,SAAS,YAAY;AAC5C,aAAO,IAAI;AAAA,IACZ,OAAO;AACN,aAAO,IAAI;AAAA,IACZ;AAAA,EACD;AACD;;;ACXA,IAAqB,gBAArB,MAAmC;AAAA,EAqBlC,YACC,gBACA,UACA,UACA,YACA,WACA,cAAc,GACd,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,UAAU,IACV,kBACC;AAhCF,uBAAuC,oBAAI,IAAI;AAiC9C,SAAK,iBAAiB;AACtB,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,iBAAiB;AACtB,SAAK,mBAAmB;AACxB,SAAK,UAAU;AACf,SAAK,mBAAmB;AAExB,SAAK,aAAa,KAAK,IAAI,kBAAkB,KAAK,SAAS,MAAM,UAAU;AAC3E,SAAK,aAAa,KAAK,KAAK,IAAI,kBAAkB,KAAK,SAAS,MAAM,UAAU;AAEhF,SAAK,WAAW,eAAe;AAC/B,SAAK,WAAW,eAAe;AAE/B,SAAK,gBAAgB,IAAI,KAAK;AAE9B,UAAM,OAAO,IAAI;AAAA,MAChB;AAAA,MACA,cAAc;AAAA,MACd,KAAK,SAAS,WAAW;AAAA,MACzB;AAAA,IACD;AACA,UAAM,OAAO,IAAI;AAAA,MAChB;AAAA,MACA,cAAc;AAAA,MACd,KAAK,SAAS,WAAW;AAAA,MACzB;AAAA,IACD;AACA,UAAM,MAAM,IAAI;AAAA,MACf;AAAA;AAAA,MAEA,KAAK,SAAS,cAAc,IAAI,cAAc,WAAW;AAAA,MACzD,KAAK,SAAS,MAAM;AAAA,IACrB;AAEA,SAAK,YAAY,kBAAkB,IAAI;AACvC,SAAK,YAAY,kBAAkB,IAAI;AACvC,SAAK,YAAY,iBAAiB,GAAG;AAAA,EACtC;AAAA,EAEA,IAAI,SAAqC;AACxC,UAAM,OAAsB,CAAC;AAC7B,QAAI,WAAW;AAEf,YAAQ,QAAQ,UAAQ;AACvB,UAAI,aAAa,KAAK,oBAAoB,IAAI;AAC9C,UAAI,WAAW,KAAK,kBAAkB,IAAI;AAE1C,UAAI,eAAe,QAAQ,aAAa,KAAM;AAE9C,UAAI,WAAW,aAAa,KAAK,eAAe;AAC/C,cAAM,YAAY,KAAK,iBAAiB,WAAW;AACnD,qBAAa,aAAa,YAAY;AACtC,mBAAW,WAAW,YAAY;AAAA,MACnC;AAEA,YAAM,QAAQ,KAAK,MAAM;AACzB,UAAI,MAAO;AACX,YAAM,QAAQ,QAAQ,OAAO,SAAS,EAAE,QAAQ,KAAK,SAAS,KAAK,KAAK;AACxE,YAAM,cAAc,QAAQ,KAAK,iBAAiB,KAAK,qBAAqB,IAAI;AAChF,YAAM,cAAc,QAAQ,KAAK,iBAAiB,KAAK,WAAW,KAAK,qBAAqB,IAAI;AAEhG,YAAM,MAAc;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,IAAI,KAAK;AAAA,QACT,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,YAAY,CAAC,KAAK,UAAU;AAAA,MAC7B;AAEA,WAAK,KAAK,GAAG;AAAA,IACd,CAAC;AACD,QAAI,UAAU;AACb,WAAK,YAAY,iBAAiB,IAAI,UAAU,oBAAoB,OAAO,SAAS,EAAE,OAAO,QAAQ,CAAC;AAAA,IACvG;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,oBAAoB,MAAY;AAC/B,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,KAAK,GAAG;AAC9D,QAAI,SAAS,GAAI,QAAO;AACxB,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AACnD,WACC,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,KAAK,KAAK,IAAI,WAAW;AAAA,EAE3G;AAAA,EAEQ,kBAAkB,MAAY;AACrC,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,KAAK,GAAG;AAC9D,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AACnD,WAAO,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,KAAK,IAAI,IAAI,WAAW;AAAA,EAChH;AAAA,EAEA,SAAS,OAAe;AACvB,WAAO,iBAAiB,SAAS,OAAO,KAAK,UAAU,KAAK,gBAAgB;AAAA,EAC7E;AAAA,EAEQ,qBAAqB,MAAY;AACxC,QAAI,KAAK,6CAA8C;AACtD,aAAO,KAAK;AAAA,IACb;AAEA,QAAI,KAAK,UAAU;AAClB,aAAO,KAAK;AAAA,IACb;AAEA,QAAI,KAAK,UAAU;AAClB,YAAM,cAAc,KAAK,iBAAiB,KAAK;AAE/C,aACC,cACA,WAAW;AAAA,QACT,KAAK,WAAW,WAAW,YAAY,KAAK,OAAO,KAAK,YAAY,KAAK,UAAU,IAAK,KAAK;AAAA,MAC/F;AAAA,IAEF;AAEA,UAAM,eAAe,KAAK,iBAAiB,KAAK,WAAW;AAE3D,QAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC/B,aAAO;AAAA,IACR;AAEA,QAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI;AAChC,aACC,eACA,WAAW;AAAA,QACT,WAAW,YAAY,KAAK,OAAO,KAAK,YAAY,KAAK,UAAU,IAAI,KAAK,oBAC3E,KAAK,WAAW;AAAA,MACnB;AAAA,IAEF;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,qBAAqB,MAAY;AACxC,UAAM,iBAAiB,KAAK,iBAAiB,KAAK;AAElD,QAAI,KAAK,6CAA8C;AACtD,aAAO;AAAA,IACR;AAEA,QAAI,KAAK,UAAU;AAClB,aACC,KAAK,iBACL,WAAW;AAAA,QACT,KAAK,WAAW,WAAW,YAAY,KAAK,OAAO,KAAK,YAAY,KAAK,UAAU,IAAK,KAAK;AAAA,MAC/F;AAAA,IAEF;AAEA,QAAI,KAAK,UAAU;AAClB,aAAO;AAAA,IACR;AAEA,UAAM,eAAe,KAAK,iBAAiB,KAAK,WAAW;AAE3D,QAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC/B,aACC,eACA,WAAW;AAAA,QACT,WAAW,YAAY,KAAK,OAAO,KAAK,YAAY,KAAK,UAAU,IAAI,KAAK,kBAC3E,KAAK,WAAW;AAAA,MACnB;AAAA,IAEF;AAEA,QAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI;AAChC,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR;AACD;;;ACtOA,IAAqB,OAArB,MAA0B;AAAA,EAIzB,YAAY,QAAsB,OAAe;AAFjD,kBAAS,IAAI,MAAa;AAGzB,SAAK,SAAS;AACd,SAAK,QAAQ;AAAA,EACd;AACD;;;ACJA,IAAqB,eAArB,MAAkC;AAAA,EACjC,OAAO,YACN,YACA,UACA,aACA,aACA,OACA,MACA,OACA,WACA,KACA,UACA,gBAAgB,OAChB,kBACA,iBACA,eACC;AACD,UAAM,SAAS,aAAa,YAAY;AACxC,UAAM,UAAU,QAAQ,KAAK,KAAK;AAClC,UAAM,YAAY,UAAW,QAAQ,MAAO,KAAK,KAAK,EAAE,eAAe,WAAW,IACjF,QAAQ,KAAK,KAAK,gBAAgB,EACnC;AACA,UAAM,aAAa,QAAQ,KAAK,KAAK,QAAQ;AAC7C,UAAM,KAAK;AACX,UAAM,KAAK,cAAc;AAEzB,UAAM,SAAuB,CAAC;AAC9B,UAAM,SAAgB;AAAA,MACrB,GAAG,KAAK,KAAK,IAAI,OAAO;AAAA,MACxB,GAAG,KAAK,KAAK,IAAI,OAAO;AAAA,IACzB;AACA,UAAM,SAAgB;AAAA,MACrB,GAAG,KAAK,KAAK,IAAI,OAAO;AAAA,MACxB,GAAG,KAAK,KAAK,IAAI,OAAO;AAAA,IACzB;AAEA,WAAO,KAAK,MAAM;AAClB,WAAO,KAAK,MAAM;AAElB,UAAM,OAAO,IAAI,KAAK,QAAQ,KAAK;AAEnC,UAAM,QAAe;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA,kBAAkB,kBAAkB,CAAC,eAAe,IAAI;AAAA,MACxD,eAAe,gBAAgB,CAAC,aAAa,IAAI;AAAA,IAClD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,OAAO,iBAAiB,SAAgB,SAAwB;AAC/D,UAAM,aAAa,QAAQ,aAAa;AACxC,UAAM,WAAW,QAAQ,WAAW;AAEpC,UAAM,SAAS,aAAa,YAAY;AACxC,UAAM,UAAU,QAAQ,KAAK,KAAK;AAElC,UAAM,KAAK,QAAQ;AACnB,UAAM,KAAK,QAAQ,cAAc;AACjC,UAAM,MAAM,KAAK,MAAM;AACvB,UAAM,OAAO,KAAK,IAAI,QAAQ,OAAO;AACrC,UAAM,OAAO,KAAK,IAAI,QAAQ,OAAO;AACrC,UAAM,OAAO,KAAK,IAAI,QAAQ,UAAU,OAAO;AAC/C,UAAM,OAAO,KAAK,IAAI,QAAQ,UAAU,OAAO;AAE/C,UAAM,SAAuB,CAAC;AAE9B,UAAM,SAAgB;AAAA,MACrB,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,IACT;AACA,UAAM,SAAgB;AAAA,MACrB,IAAI,KAAK,MAAM;AAAA,MACf,IAAI,KAAK,MAAM;AAAA,IAChB;AACA,UAAM,SAAgB;AAAA,MACrB,IAAI,KAAK,IAAI,MAAM;AAAA,MACnB,IAAI,KAAK,IAAI,MAAM;AAAA,IACpB;AAEA,UAAM,SAAgB;AAAA,MACrB,IAAI,KAAK,IAAI,MAAM;AAAA,MACnB,IAAI,KAAK,IAAI,MAAM;AAAA,IACpB;AAEA,WAAO,KAAK,MAAM;AAClB,WAAO,KAAK,MAAM;AAClB,WAAO,KAAK,MAAM;AAClB,WAAO,KAAK,MAAM;AAElB,UAAM,OAAO,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAE3C,UAAM,YACL,aACE,QAAQ,MAAO,KAAK,KAAK,MAC3B,gBAEA,QAAQ,cACR,OACC,QAAQ,KAAK,KAAK,gBAAgB;AAEpC,UAAM,aAAa,QAAQ,KAAK,KAAK,QAAQ;AAE7C,UAAM,QAAQ,QAAQ,mBACnB,QAAQ,iBAAiB,CAAC,EAAE,QAC5B,QAAQ,gBACR,QAAQ,cAAc,CAAC,EAAE,QACzB;AAEH,UAAM,QAAe;AAAA,MACpB;AAAA,MACA;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,aAAa,QAAQ;AAAA,MACrB;AAAA,MACA,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe,QAAQ;AAAA,MACvB,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd,KAAK,QAAQ;AAAA,MACb,kBAAkB,QAAQ;AAAA,MAC1B,eAAe,QAAQ;AAAA,MACvB,YAAY,QAAQ;AAAA,IACrB;AAEA,WAAO;AAAA,EACR;AACD;;;AC7IA,IAAqB,eAArB,MAAkC;AAAA,EAQjC,YAAY,UAAoB,YAAoB,WAAsB,sBAAsB,GAAG;AAHnG,SAAQ,WAA+B,oBAAI,IAAI;AAI9C,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,sBAAsB;AAAA,EAC5B;AAAA,EAEA,IAAI,MAAmB,UAAuB,CAAC,GAAiB;AAC/D,UAAM,cAAc,KAAK,SAAS,MAAM;AACxC,UAAM,cAAc,cAAc,KAAK,SAAS,MAAM;AAEtD,SAAK,QAAQ,CAAAC,UAAQ;AACpB,UAAIA,MAAK,MAAM,YAAY;AAC1B,cAAM,aAAa,KAAK,oBAAoBA,MAAK,KAAKA,MAAK,QAAQ;AACnE,cAAM,WAAW,KAAK,kBAAkBA,MAAK,KAAKA,MAAK,QAAQ;AAC/D,YAAI,eAAe,QAAQ,aAAa,KAAM;AAE9C,cAAM,SAAS,OAAO,YAAY,EAAE,SAAS,OAAO,YAAY,EAAE,OAAOA,MAAK,MAAM,IAAI;AAExF,aAAK;AAAA,UACJA;AAAA,UACAA,MAAK;AAAA,UACLA,MAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP,OAAO;AAAA,QACR;AAAA,MACD;AAEA,UAAIA,MAAK,MAAM,aAAa;AAC3B,cAAM,QAAQ,oBAAoB,SAASA,MAAK,MAAMA,MAAK,IAAI;AAC/D,YAAIA,MAAK,OAAO;AACf,gBAAM,mBAAmB,KAAK,oBAAoBA,MAAK,MAAMA,MAAK,IAAI;AACtE,gBAAM,iBAAiB,KAAK,kBAAkBA,MAAK,MAAMA,MAAK,IAAI;AAClE,cAAI,qBAAqB,QAAQ,mBAAmB,KAAM;AAE1D,eAAK;AAAA,YACJA;AAAA,YACAA,MAAK;AAAA,YACLA,MAAK;AAAA,YACLA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAEA,YAAIA,MAAK,SAASA,MAAK,SAASA,MAAK,OAAO;AAC3C,gBAAM,mBAAmB,KAAK,oBAAoBA,MAAK,MAAMA,MAAK,IAAI;AACtE,gBAAM,iBAAiB,KAAK,kBAAkBA,MAAK,MAAMA,MAAK,IAAI;AAElE,cAAI,oBAAoB,QAAQ,kBAAkB,KAAM;AAExD,eAAK;AAAA,YACJA;AAAA,YACAA,MAAK;AAAA,YACLA,MAAK;AAAA,YACLA,MAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAED,UAAM,cAAc,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC;AACrD,gBAAY,QAAQ,CAAC,UAAiB;AACrC,cAAQ,QAAQ,CAAC,QAAc;AAC9B,aACE,IAAI,MAAM,SAAS,IAAI,MAAM,UAC9B,MAAM,OAAO,IAAI,OACjB,MAAM,QAAQ,IAAI,SAClB,IAAI,QAAQ,MAAM,OACjB;AACD,gBAAM,WAAuB;AAAA,YAC5B,IAAI,IAAI;AAAA,YACR,OAAO,IAAI;AAAA,YACX,OACC,IAAI,MAAM,QACP,OAAO,SAAS,EAAE,QAClB,iBAAiB,SAAS,IAAI,OAAO,KAAK,UAAU,KAAK,mBAAmB;AAAA,YAChF,KAAK,IAAI;AAAA,YACT,OAAO,IAAI;AAAA,YACX,MAAM,IAAI;AAAA,UACX;AACA,cAAI,MAAM,YAAY;AACrB,kBAAM,WAAW,KAAK,QAAQ;AAAA,UAC/B,OAAO;AACN,kBAAM,aAAa,CAAC;AACpB,kBAAM,WAAW,KAAK,QAAQ;AAAA,UAC/B;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF,CAAC;AAED,WAAO,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC;AAAA,EACzC;AAAA,EAEQ,mBACP,MACA,MACA,OACA,YACA,UACA,aACA,aACA,OACA,WACC;AACD,UAAM,QAAQ,KAAK,SAAS,IAAI,IAAI;AACpC,UAAM,WAA4B;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,KAAK;AAAA,MACV,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,IACZ;AACA,QAAI,CAAC,OAAO;AACX,WAAK,SAAS;AAAA,QACb;AAAA,QACA,aAAa;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,SAAS,MAAM;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAAA,IACD,OAAO;AACN,UAAI,MAAM,kBAAkB;AAC3B,cAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,KAAK,QAAQ;AACjD,cAAM,OAAO,KAAK,IAAI,MAAM,MAAM,KAAK,QAAQ;AAC/C,cAAM,iBAAiB,KAAK,QAAQ;AAAA,MACrC,OAAO;AACN,cAAM,mBAAmB,CAAC;AAC1B,cAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,KAAK,QAAQ;AACjD,cAAM,OAAO,KAAK,IAAI,MAAM,MAAM,KAAK,QAAQ;AAC/C,cAAM,iBAAiB,KAAK,QAAQ;AAAA,MACrC;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,iBACP,MACA,MACA,UACA,KACA,YACA,UACA,aACA,aACA,OACC;AACD,UAAM,QAAQ,KAAK,SAAS,IAAI,IAAI;AACpC,UAAM,gBAA+B;AAAA,MACpC;AAAA,MACA,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,IACf;AACA,QAAI,CAAC,OAAO;AACX,WAAK,SAAS;AAAA,QACb;AAAA,QACA,aAAa;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK;AAAA,UACL,KAAK,SAAS,MAAM;AAAA,UACpB;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD,OAAO;AACN,UAAI,MAAM,eAAe;AACxB,cAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,QAAQ;AAC5C,cAAM,OAAO,KAAK,IAAI,MAAM,MAAM,QAAQ;AAC1C,cAAM,cAAc,KAAK,aAAa;AAAA,MACvC,OAAO;AACN,cAAM,gBAAgB,CAAC;AACvB,cAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,QAAQ;AAC5C,cAAM,OAAO,KAAK,IAAI,MAAM,MAAM,QAAQ;AAC1C,cAAM,cAAc,KAAK,aAAa;AAAA,MACvC;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,oBAAoB,KAAa,UAAkB;AAC1D,UAAM,QAAQ,KAAK,UAAU,iBAAiB,UAAU,aAAW,WAAW,GAAG;AACjF,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AAEnD,WAAO,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,QAAQ,IAAI,WAAW;AAAA,EAC/G;AAAA,EAEQ,kBAAkB,KAAa,UAAkB;AACxD,UAAM,QAAQ,KAAK,UAAU,iBAAiB,UAAU,aAAW,WAAW,GAAG;AACjF,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AAEnD,WAAO,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,QAAQ,IAAI,WAAW;AAAA,EAC/G;AACD;;;ACvPA,IAAqB,SAArB,cAAoC,KAAY;AAAA,EAQ/C,YAAY,UAAoB,UAAwB,qBAA8B;AACrF;AAAA,MACC,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,SAAS,KAAK,CAAC,GAAG,MAAM;AACvB,eAAO,EAAE,aAAa,EAAE,aAAa,KAAK,EAAE,aAAa,EAAE,aAAa,IAAI;AAAA,MAC7E,CAAC;AAAA,IACF;AAZD,6BAAkC,CAAC;AAclC,SAAK,WAAW;AAChB,SAAK,sBAAsB;AAE3B,UAAM,gBAAgB,IAAI,KAAK,MAAM,SAAS,MAAM,wBAAwB,SAAS,MAAM;AAC3F,SAAK,eAAgB,KAAK,SAAS,MAAM,qBAAqB,KAAK,SAAS,MAAM,WAAY;AAE9F,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEQ,sBAAsB;AAC7B,SAAK,aAAa,CAAC;AAEnB,QAAI,0BAAwC,CAAC;AAC7C,8BAA0B,KAAK,SAAS,OAAO,WAAS,MAAM,aAAa;AAE3E,QAAI,KAAK,SAAS,MAAM,gCAAgC;AACvD,WAAK,oBAAoB,KAAK,8BAA8B,uBAAuB;AAAA,IACpF,WAAW,KAAK,qBAAqB;AACpC,YAAM,uBAAuB,KAAK,SAAS,OAAO,WAAS,MAAM,aAAa;AAC9E,YAAM,+BAA+B,KAAK,8BAA8B,oBAAoB;AAE5F,YAAM,8BAA8B,KAAK,SAAS,OAAO,WAAS,CAAC,MAAM,aAAa;AAEtF,YAAM,wBAAwB,CAAC,GAAG,6BAA6B,GAAG,4BAA4B,EAAE;AAAA,QAC/F,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE;AAAA,MAC5B;AAEA,WAAK,oBAAoB,KAAK,aAAa,qBAAqB;AAAA,IACjE,OAAO;AACN,WAAK,oBAAoB,KAAK,8BAA8B,KAAK,QAAQ;AAAA,IAC1E;AAAA,EACD;AAAA,EAEQ,8BAA8B,WAAyB;AAC9D,UAAM,eAA6B,CAAC;AAEpC,QAAI,OAAO,EAAE,UAAU,EAAE;AACzB,cAAU,QAAQ,CAAC,SAAS,UAAU;AACrC,UAAI,SAAS,GAAG;AACf,qBAAa,KAAK,OAAO;AACzB,eAAO;AAAA,MACR,OAAO;AACN,cAAM,UAAU,KAAK,WAAW,QAAQ,aAAa,KAAK;AAE1D,YAAI,UAAU,KAAK,UAAU,KAAK,SAAS,MAAM,eAAe;AAC/D,gBAAM,YAAY,aAAa,iBAAiB,SAAS,OAAO;AAChE,wBAAc,KAAK,SAAS;AAC5B,iBAAO;AAAA,QACR;AAEA,YAAI,WAAW,GAAG;AACjB,uBAAa,KAAK,OAAO;AACzB,iBAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAC;AAED,WAAO;AAAA,EACR;AAAA,EAEQ,aAAa,WAAyB;AAC7C,UAAM,eAA6B,CAAC;AACpC,QAAI,OAAO,EAAE,UAAU,EAAE;AACzB,UAAM,kBAAkB,UAAU;AAClC,QAAI,2BAA2B;AAE/B,aAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;AACtD,YAAM,UAAU,UAAU,KAAK;AAC/B,UAAI,QAAQ,eAAe;AAC1B,qBAAa,KAAK,OAAO;AACzB,mCAA2B;AAC3B,eAAO;AACP;AAAA,MACD;AAEA,UAAI,SAAS,GAAG;AACf,YAAI,kBAAkB,GAAG;AACxB,cAAI,KAAK,mCAAmC,WAAW,0BAA0B,SAAS,CAAC,GAAG;AAC7F;AAAA,UACD;AACA,uBAAa,KAAK,OAAO;AACzB,iBAAO;AAAA,QACR;AACA;AAAA,MACD;AAEA,YAAM,cAAc,KAAK,WAAW,QAAQ,aAAa,KAAK;AAE9D,UAAI,cAAc,KAAK,cAAc,KAAK,SAAS,MAAM,eAAe;AACvE,YAAI,SAAS,SAAS,GAAG;AAExB,uBAAa,KAAK,OAAO;AACzB;AAAA,QACD;AAEA,YAAI,KAAK,mCAAmC,WAAW,0BAA0B,SAAS,WAAW,GAAG;AACvG;AAAA,QACD;AAEA,cAAM,YAAY,aAAa,iBAAiB,SAAS,WAAW;AACpE,aAAK,YAAY,KAAK,SAAS;AAC/B,qBAAa,KAAK,OAAO;AACzB,eAAO;AAAA,MACR;AAEA,UAAI,eAAe,GAAG;AACrB,YAAI,KAAK,mCAAmC,WAAW,0BAA0B,SAAS,CAAC,GAAG;AAC7F;AAAA,QACD;AAEA,qBAAa,KAAK,OAAO;AACzB,eAAO;AAAA,MACR;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEQ,mCACP,WACA,0BACA,SACA,aACC;AACD,UAAM,0BAA0B,KAAK,2BAA2B,WAAW,wBAAwB;AACnG,QAAI,yBAAyB;AAC5B,YAAM,cAAc,QAAQ,WAAW,cAAc,wBAAwB,aAAa,KAAK;AAC/F,UAAI,cAAc,GAAG;AAEpB,eAAO;AAAA,MACR;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,2BAA2B,WAAyB,0BAAkC;AAC7F,WAAO,UAAU,KAAK,CAAC,OAAO,UAAU,MAAM,iBAAiB,QAAQ,wBAAwB;AAAA,EAChG;AACD;;;AC3JA,IAAqB,yBAArB,MAA4C;AAAA,EAO3C,YAAY,sBAA8B,gBAAwB,YAAoB,WAAsB;AAC3G,SAAK,uBAAuB;AAC5B,SAAK,iBAAiB;AACtB,SAAK,aAAa;AAClB,SAAK,YAAY;AAEjB,SAAK,gBAAgB,IAAI;AAAA,EAC1B;AAAA,EAEA,IAAI,SAAqC;AACxC,UAAM,cAAc,KAAK;AACzB,UAAM,cAAc,cAAc,KAAK;AAEvC,UAAM,OAAsB,CAAC;AAE7B,YAAQ,QAAQ,UAAQ;AACvB,YAAM,SAAS,OAAO,YAAY,EAAE,SAAS,OAAO,YAAY,EAAE,OAAO,KAAK,MAAM,IAAI;AAExF,YAAM,aAAa,KAAK,oBAAoB,IAAI;AAChD,YAAM,WAAW,KAAK,kBAAkB,IAAI;AAC5C,UAAI,eAAe,QAAQ,aAAa,KAAM;AAE9C,YAAM,MAAc;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,OAAO;AAAA,QACd,MAAM,KAAK;AAAA,QACX,WAAW,OAAO;AAAA,QAClB,OAAO,KAAK;AAAA,QACZ,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,QACV,MAAM,KAAK;AAAA,QACX,YAAY,CAAC,KAAK,UAAU;AAAA,MAC7B;AAEA,WAAK,KAAK,GAAG;AAAA,IACd,CAAC;AAED,WAAO;AAAA,EACR;AAAA,EAEA,oBAAoB,MAAY;AAC/B,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,KAAK,GAAG;AAC9D,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AACnD,WACC,WAAW,cACV,WAAW,WAAW,WAAW,eAAe,OAAO,KAAK,QAAQ,IAAI,WAAW,QACpF,KAAK;AAAA,EAEP;AAAA,EAEQ,kBAAkB,MAAY;AACrC,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,KAAK,GAAG;AAC9D,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AACnD,WACC,KAAK,gBACL,WAAW,cACV,WAAW,WAAW,WAAW,eAAe,OAAO,KAAK,QAAQ,IAAI,WAAW;AAAA,EAEtF;AACD;;;AC3EA,IAAqB,wBAArB,MAA2C;AAAA,EACvC,OAAO,QAAQ,OAAuB;AAClC,UAAM,eAAe,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC;AAEnD,UAAM,aAAa,KAAK,MAAM,eAAe,GAAG;AAEhD,WAAO,OAAO,UAAU,KAAK,UAAU,KAAK,UAAU;AAAA,EAC1D;AACJ;;;ACHA,IAAqB,eAArB,MAAkC;AAAA,EAMjC,YAAY,gBAAwB,UAAkB,YAAoB,WAAsB;AAC/F,SAAK,iBAAiB;AACtB,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,YAAY;AAAA,EAClB;AAAA,EAEA,IAAI,SAAqC;AACxC,UAAM,OAAsB,CAAC;AAE7B,YAAQ,QAAQ,UAAQ;AACvB,YAAM,aAAa,KAAK,oBAAoB,IAAI;AAChD,YAAM,WAAW,KAAK,kBAAkB,IAAI;AAE5C,UAAI,eAAe,QAAQ,aAAa,KAAM;AAE9C,YAAM,cAAc,KAAK;AACzB,YAAM,cAAc,cAAc,KAAK;AACvC,YAAM,QAAQ,sBAAsB,QAAQ,KAAK,OAAO;AAExD,YAAM,MAAc;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,MACb;AAEA,WAAK,KAAK,GAAG;AAAA,IACd,CAAC;AAED,WAAO;AAAA,EACR;AAAA,EAEQ,oBAAoB,MAAY;AACvC,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,KAAK,GAAG;AAC9D,QAAI,UAAU,GAAI,QAAO;AACzB,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AACnD,WACC,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,KAAK,KAAK,IAAI,WAAW;AAAA,EAE3G;AAAA,EAEQ,kBAAkB,MAAY;AACrC,UAAM,QAAQ,KAAK,UAAU,iBAAiB,QAAQ,KAAK,GAAG;AAC9D,UAAM,aAAa,KAAK,UAAU,YAAY,KAAK;AACnD,WAAO,WAAW,cAAc,WAAW,WAAW,WAAW,eAAe,OAAO,KAAK,IAAI,IAAI,WAAW;AAAA,EAChH;AACD;;;ACxDA,IAAqB,QAArB,MAA2B;AAAA,EAS1B,YACC,YACA,iBACA,kBACA,YACA,YACA,YACA,uBACC;AACD,SAAK,aAAa;AAClB,SAAK,kBAAkB;AACvB,SAAK,mBAAmB;AACxB,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,wBAAwB;AAAA,EAC9B;AACD;;;AC9BA,IAAqB,0BAArB,MAA6C;AAAA,EAO5C,YACC,aACA,WACA,WACA,UACA,QAAQ,WACP;AACD,SAAK,cAAc;AACnB,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,WAAW;AAChB,SAAK,QAAQ;AAAA,EACd;AAAA,EAEA,IAAI,OAAsC,CAAC,GAAkC;AAC5E,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAC;AAE1B,UAAM,MAAM,KAAK,UAAU,OAAO;AAClC,UAAM,MAAM,KAAK,UAAU,OAAO,MAAM;AACxC,UAAM,OAAO,MAAM,OAAO;AAE1B,UAAM,SAAmC,CAAC;AAC1C,eAAW,SAAS,MAAM;AACzB,YAAM,WAAW,KAAK,UAAU,iBAAiB,QAAQ,MAAM,GAAG;AAClE,UAAI,aAAa,GAAI;AAErB,YAAM,aAAa,KAAK,UAAU,YAAY,QAAQ;AACtD,YAAM,eAAe,WAAW,WAAW,WAAW;AACtD,YAAM,SAAS,WAAW,OAAO,IAAI,MAAM,WAAW,WAAW,OAAO;AACxE,YAAM,QAAQ,WAAW,aAAa,eAAe;AAErD,YAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,cAAc,OAAO,IAAI,CAAC;AAC5E,YAAM,SAAS,KAAK,cAAc,KAAK,YAAY;AAEnD,aAAO,KAAK;AAAA,QACX,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,aAAa;AAAA,QACb,aAAa;AAAA,QACb,MAAM,WAAW;AAAA,QACjB,OAAO,KAAK;AAAA,QACZ,KAAK,MAAM;AAAA,QACX,UAAU,MAAM;AAAA,QAChB,aAAa,MAAM;AAAA,QACnB,iBAAiB,KAAK;AAAA,QACtB,WAAW,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,UAAU;AAAA,MACX,CAAC;AAAA,IACF;AAEA,WAAO;AAAA,EACR;AACD;;;ACzCA,IAAqB,oBAArB,MAAuC;AAAA,EAgBtC,YACC,UACA,YACA,WACA,YACA,aACA,mBACC;AAfF,SAAQ,mBAAkC;AAgBzC,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEA,IAAI,MAAkB;AACrB,UAAM,aAAa,KAAK,WAAW,IAAI,IAAI;AAE3C,QAAI;AACJ,QAAI,KAAK,SAAS,MAAM,eAAe;AACtC,YAAM,eAAe,IAAI;AAAA,QACxB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,WAAW;AAAA,MACZ;AAEA,YAAM,aAAa,aAAa,IAAI,WAAW,WAAW,WAAW,OAAO;AAC5E,mBAAa,IAAI,OAAO,KAAK,UAAU,YAAY,WAAW,mBAAmB;AAAA,IAClF,OAAO;AACN,mBAAa,IAAI,OAAO,KAAK,UAAU,CAAC,GAAG,KAAK;AAAA,IACjD;AAEA,UAAM,kBAAkB,IAAI;AAAA,MAC3B,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK,UAAU;AAAA,IAChB;AAEA,UAAM,yBAAyB,IAAI;AAAA,MAClC,WAAW;AAAA,MACX,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAEA,UAAM,gBAAgB,uBAAuB,IAAI,WAAW,gBAAgB;AAE5E,QAAI,cAAc,SAAS,GAAG;AAC7B,WAAK,mBAAmB,IAAI;AAAA,QAC3B,WAAW;AAAA,QACX,KAAK,SAAS,MAAM;AAAA,QACpB;AAAA,MACD;AAAA,IACD;AAEA,SAAK,gBAAgB,IAAI;AAAA,MACxB,WAAW;AAAA,MACX,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AACA,UAAM,UAAU,KAAK,cAAc,IAAI,WAAW,cAAc;AAChE,QAAI,QAAQ,SAAS,GAAG;AACvB,WAAK,aAAa,IAAI,KAAK,WAAW,gBAAgB,KAAK,SAAS,MAAM,cAAc,OAAO;AAAA,IAChG;AAEA,UAAM,YAAY,IAAI;AAAA,MACrB,WAAW;AAAA,MACX,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AACA,UAAM,UAAU,UAAU,IAAI,WAAW,OAAO;AAChD,QAAI,QAAQ,SAAS,GAAG;AACvB,WAAK,aAAa,IAAI,KAAK,WAAW,gBAAgB,KAAK,SAAS,MAAM,cAAc,OAAO;AAAA,IAChG;AAEA,SAAK,gBAAgB,IAAI;AAAA,MACxB,WAAW;AAAA,MACX,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,MACX,KAAK,SAAS,IAAI;AAAA,MAClB,KAAK,SAAS,MAAM;AAAA,IACrB;AAEA,UAAM,UAAU,KAAK,cAAc,IAAI,WAAW,OAAO;AACzD,QAAI,QAAQ,SAAS,GAAG;AACvB,WAAK,aAAa,IAAI,KAAK,WAAW,gBAAgB,KAAK,SAAS,MAAM,cAAc,OAAO;AAAA,IAChG;AAEA,QACC,KAAK,SAAS,MAAM,yBACpB,WAAW,uBAAuB,UAClC,WAAW,iCAAiC;AAAA,KAE3C,WAAW,gCAAgC,KAAK,KACjD,WAAW,2BACV;AACD,YAAM,0BAA0B,IAAI;AAAA,QACnC,WAAW;AAAA,QACX,KAAK,SAAS,MAAM;AAAA,QACpB,KAAK;AAAA,QACL,WAAW;AAAA,QACX,KAAK,SAAS,MAAM,0BAA0B;AAAA,MAC/C;AAEA,YAAM,gBAAgB,wBAAwB,IAAI,WAAW,qBAAqB;AAClF,UAAI,cAAc,SAAS,GAAG;AAC7B,aAAK,wBAAwB,IAAI;AAAA,UAChC,WAAW;AAAA,UACX,KAAK,SAAS,MAAM;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,eAAe,IAAI,aAAa,WAAW,cAAc,KAAK,YAAY,KAAK,SAAS;AAE9F,UAAM,UAAU,aAAa,IAAI,WAAW,UAAU;AAEtD,QAAI;AAEJ,QAAI,KAAK,SAAS,OAAO,oBAAoB,WAAW,QAAQ,QAAQ;AACvE,kBAAY,IAAI,UAAU,WAAW,QAAQ,MAAM;AAAA,IACpD;AAEA,UAAM,qBAAqB,QAAQ;AAAA,MAClC,CAAC,QAAQ,WAAW;AACnB,YACC,OAAO,UACP,OAAO,OAAO,qBAAqB,cAAc,OAAO,OAAO,qBAAqB;AAEpF,iBAAO;AAAA,YACH,QAAO;AACZ,eAAO;AAAA,MACR;AAAA,MACA,EAAE,kBAAkB,GAAG,kBAAkB,EAAE;AAAA,IAC5C;AAEA,UAAM,SAAS,IAAI;AAAA,MAClB,KAAK,SAAS,OAAO;AAAA,MACrB,KAAK,SAAS,OAAO;AAAA,MACrB,KAAK,SAAS,OAAO;AAAA,MACrB,KAAK,SAAS,OAAO;AAAA,MACrB,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK,SAAS,MAAM;AAAA,MACpB,KAAK,gBAAgB,KAAK,cAAc,cAAc,oBAAI,IAAI;AAAA,MAC9D,KAAK,gBAAgB,KAAK,cAAc,cAAc,oBAAI,IAAI;AAAA,MAC9D,KAAK,SAAS,MAAM;AAAA,MACpB,QAAQ,SAAS;AAAA,MACjB,KAAK;AAAA,MACL;AAAA,MACA,KAAK,SAAS,MAAM,yBAAyB,KAAK,wBAC/C;AAAA,QACA,OAAO,KAAK,SAAS,MAAM,0BAA0B;AAAA,QACrD,eAAe,KAAK,kBAAkB;AAAA,MACtC,IACA;AAAA,MACH;AAAA,MACA,WAAW,QAAQ,OAAO,WAAS,MAAM,MAAM,KAAK,EAAE;AAAA,IACvD;AAEA,UAAM,QAAQ,IAAI;AAAA,MACjB;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAEA,WAAO,IAAI;AAAA,MACV,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,KAAK,OAAO,OAAK,EAAE,MAAM,UAAU,EAAE;AAAA,IACtC;AAAA,EACD;AACD;;;AC7NO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAC5B;AAAA,SAAO,gBAAgB;AAAA,MACtB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,MAAM;AAAA,MACN,MAAM;AAAA,MACN,iBAAiB;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,WAAW;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,GAAG;AAAA,MACH,WAAW;AAAA,IACZ;AAAA;AAAA,EAKA,YAAY,UAAoB,mBAAsC;AAGrE,SAAK,WAAW,KAAK,MAAM,KAAK,UAAU,QAAQ,CAAC;AACnD,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEQ,cAAc;AACrB,UAAM,SAAS,KAAK,SAAS,MAAM;AACnC,QAAI,CAAC,OAAQ;AAEb,UAAM,QAAQ,SAAS,KAAK,SAAS,MAAM;AAE3C,SAAK,SAAS,MAAM,yBAAyB;AAC7C,SAAK,SAAS,MAAM,yBAAyB;AAC7C,SAAK,SAAS,MAAM,yBAAyB;AAAA,EAC9C;AAAA,EAEA,OAAO,qBAAqB,MAA0B;AACrD,QAAI,YAAY;AAChB,QAAI,KAAK,KAAK,OAAK,EAAE,MAAM,UAAU,EAAG;AACxC,QAAI,KAAK,KAAK,OAAK,EAAE,MAAM,SAAS,EAAE,MAAM,KAAK,EAAG;AACpD,QAAI,KAAK,KAAK,OAAK,EAAE,MAAM,KAAK,EAAG;AAEnC,QAAI,aAAa,EAAG,QAAO;AAC3B,QAAI,aAAa,EAAG,QAAO;AAC3B,WAAO;AAAA,EACR;AAAA,EAEA,IAAI,MAAsB;AACzB,UAAM,WAAW,KAAK,KAAK,OAAO;AAGlC,UAAM,sBAAsB,CAAC;AAC7B,eAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACxC,UAAI,CAAC,KAAK,SAAS,MAAM,kBAAkB,SAAS,GAAG,GAAG;AACzD,4BAAoB,GAAG,IAAI,SAAS,GAAG;AAAA,MACxC;AAAA,IACD;AAEA,UAAM,aAAa,KAAK,KAAK;AAE7B,UAAM,SAAS,KAAK,KAAK;AAEzB,UAAM,mBAAmB,QAAQ,UAAU,CAAC,IAAI,OAAO,QAAQ,CAAC,EAAE,MAAM,CAAC;AAEzE,UAAM,cAAc,QAAQ,UAAU,CAAC,IAAI,OAAO,QAAQ,CAAC,EAAE,OAAO;AAEpE,UAAM,OAAmB,KAAK,KAAK;AAEnC,QAAI,KAAK,SAAS,MAAM,YAAY;AACnC,WAAK,SAAS,MAAM,SAAS,iBAAgB,qBAAqB,IAAI;AAAA,IACvE;AAEA,SAAK,YAAY;AAEjB,UAAM,YAAY,IAAI,UAAU,KAAK,UAAU,UAAU,mBAAmB;AAE5E,UAAM,aAAa,IAAI,WAAW,KAAK,UAAU,WAAW,YAAY,gBAAgB;AAExF,WAAO,IAAI;AAAA,MACV,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACN,EAAE,IAAI,IAAI;AAAA,EACX;AACD;;;ACjGA,IAAqB,mBAArB,MAAsC;AAAA,EAGrC,YAAY,sBAA8B;AACzC,SAAK,uBAAuB;AAAA,EAC7B;AAAA,EAEA,IAAI,QAAgB;AACnB,UAAM,aAAyB,CAAC;AAEhC,QAAI,QAAQ;AACZ,QAAI,OAAO,aAAa;AACvB,WAAK,OAAO,QAAQ,YAAY,OAAO;AAAA,IACxC;AAEA,QAAI,OAAO,WAAW,KAAK,OAAO,6CAA8C;AAC/E,WAAK,cAAc,QAAQ,YAAY,OAAO;AAAA,IAC/C,WAAW,OAAO,WAAW,KAAK,OAAO,qCAA0C;AAClF,UAAI,OAAO,aAAa;AACvB,aAAK,UAAU,QAAQ,YAAY,OAAO;AAAA,MAC3C;AAAA,IACD;AAEA,QAAI,OAAO,YAAY,eAAe,GAAG;AACxC,WAAK,OAAO,QAAQ,YAAY,OAAO;AAAA,IACxC;AAEA,QAAI,OAAO,WAAW;AACrB,WAAK,OAAO,QAAQ,YAAY,OAAO;AAAA,IACxC;AAEA,QAAI,OAAO,cAAc;AACxB,WAAK,UAAU,QAAQ,YAAY,OAAO;AAAA,IAC3C;AAEA,QAAI,OAAO,yBAAyB;AACnC,WAAK,qBAAqB,QAAQ,YAAY,OAAO;AAAA,IACtD;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,OAAO,QAAgB,YAAwB,OAAe;AACrE,UAAM,WAAuB,CAAC;AAE9B,QAAI,WAAW;AAEf,eAAW,CAAC,QAAQ,gBAAgB,KAAK,OAAO,aAAa;AAC5D,eAAS,KAAK;AAAA,QACb,QAAQ,OAAO;AAAA,QACf,KAAK;AAAA,QACL,MAAM,GAAG,iBAAiB,OAAO,KAAK,iBAAiB,KAAK;AAAA,QAC5D,OAAO,iBAAiB;AAAA,QACxB,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AAEA,eAAW,KAAK;AAAA,MACf,MAAM,OAAO;AAAA,MACb;AAAA,MACA,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AAAA,EAEQ,UAAU,QAAgB,YAAwB,OAAe;AACxE,QAAI,CAAC,OAAO,YAAa;AACzB,UAAM,OAAO,OAAO,YAAY,gBAAgB;AAChD,UAAM,OAAO,OAAO,YAAY,gBAAgB;AAChD,UAAM,MAAM,OAAO,YAAY,eAAe;AAE9C,QAAI,QAAQ,QAAQ,KAAK;AACxB,UAAI,WAAW;AACf,YAAM,WAAuB,CAAC;AAC9B,UAAI,KAAK,QAAQ,GAAG;AACnB,iBAAS,KAAK;AAAA,UACb,QAAQ,OAAO;AAAA,UACf;AAAA,UACA,MAAM,QAAQ,KAAK,KAAK;AAAA,UACxB,OAAO,KAAK;AAAA,UACZ,OAAO;AAAA,QACR,CAAC;AAAA,MACF;AAEA,UAAI,KAAK,QAAQ,GAAG;AACnB,iBAAS,KAAK;AAAA,UACb,QAAQ,OAAO;AAAA,UACf;AAAA,UACA,MAAM,QAAQ,KAAK,KAAK;AAAA,UACxB,OAAO,KAAK;AAAA,UACZ,OAAO;AAAA,QACR,CAAC;AAAA,MACF;AAEA,eAAS,KAAK;AAAA,QACb,QAAQ,OAAO;AAAA,QACf;AAAA,QACA,MAAM,YAAY,IAAI,KAAK;AAAA,QAC3B,OAAO,IAAI;AAAA,QACX,OAAO;AAAA;AAAA;AAAA,MAGR,CAAC;AACD,iBAAW,KAAK;AAAA,QACf,MAAM,OAAO;AAAA,QACb,IAAI;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEQ,cAAc,QAAgB,YAAwB,OAAe;AAC5E,QAAI,CAAC,OAAO,YAAa;AACzB,UAAM,OAAO,OAAO,YAAY,gBAAgB;AAChD,UAAM,OAAO,OAAO,YAAY,gBAAgB;AAChD,UAAM,MAAM,OAAO,YAAY,eAAe;AAE9C,QAAI,QAAQ,QAAQ,KAAK;AACxB,UAAI,WAAW;AAEf,YAAM,WAAuB,CAAC;AAC9B,YAAM,OAAO;AAAA,QACZ,QAAQ,OAAO;AAAA,QACf,OAAO;AAAA,QACP,OAAO;AAAA,QACP,cAAc;AAAA,QACd,IAAI;AAAA,MACL;AACA,UAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ,GAAG;AAIrC,cAAM,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,GAAG,KAAK,KAAK;AAC1D,cAAM,SAAS,CAAC,CAAC,UAAU,GAAG,QAAQ;AACtC,iBAAS;AAAA,UACR,OAAO;AAAA,YACN;AAAA,cACC;AAAA,cACA;AAAA,cACA,OAAO,OAAY,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,SAAS,KAAK,KAAK,CAAC;AAAA,cAChE,QAAQ,EAAE,MAAM,QAAQ,OAAO,OAAO;AAAA,cACtC,eAAe;AAAA,gBACd,YAAY,OAAO;AAAA,gBACnB,mBAAmB,OAAO;AAAA,gBAC1B,UAAU,SAAO,OAAO,kBAAkB,gCAAgC,GAAG;AAAA,cAC9E;AAAA,YACD;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD,OAAO;AACN,YAAI,KAAK,QAAQ,GAAG;AACnB,mBAAS;AAAA,YACR,OAAO;AAAA,cACN;AAAA,gBACC;AAAA,gBACA,MAAM;AAAA,gBACN,QAAQ,CAAC,GAAG,KAAK,KAAK;AAAA,gBACtB,OAAO,OAAY,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC;AAAA,cACjD;AAAA,cACA;AAAA,YACD;AAAA,UACD;AAAA,QACD;AACA,YAAI,KAAK,QAAQ,GAAG;AACnB,mBAAS;AAAA,YACR,OAAO;AAAA,cACN;AAAA,gBACC;AAAA,gBACA,MAAM;AAAA,gBACN,QAAQ,CAAC,KAAK,OAAO,CAAC;AAAA,gBACtB,OAAO,OAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,OAAO,CAAC;AAAA,cACjD;AAAA,cACA;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,iBAAW,KAAK;AAAA,QACf,MAAM,OAAO;AAAA,QACb;AAAA,QACA,IAAI;AAAA,QACJ,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEQ,OAAO,QAAgB,YAAwB,OAAe;AACrE,UAAM,MAAM,OAAO,YAAY,eAAe;AAC9C,QAAI,CAAC,IAAK;AACV,eAAW,KAAK;AAAA,MACf,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,QACN;AAAA,UACC,QAAQ;AAAA,UACR;AAAA,UACA,MAAM,QAAQ,IAAI,KAAK;AAAA,UACvB,OAAO,IAAI;AAAA,UACX,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEQ,OAAO,QAAgB,YAAwB,OAAe;AACrE,QAAI,CAAC,OAAO,UAAW;AAEvB,eAAW,KAAK;AAAA,MACf,MAAM,OAAO;AAAA,MACb;AAAA,MACA,OAAO;AAAA,QACN;AAAA,UACC,QAAQ,OAAO;AAAA,UACf,KAAK;AAAA,UACL,MAAM,QAAQ,OAAO,UAAU,KAAK;AAAA,UACpC,UAAU;AAAA,UACV,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEQ,UAAU,QAAgB,YAAwB,OAAe;AACxE,UAAM,cAA0B,CAAC;AAEjC,gBAAY,KAAK;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf;AAAA,MACA,MAAM,qBAAqB,OAAO,mBAAmB,gBAAgB;AAAA,MACrE,wCAAqC,QAAQ;AAAA,MAC7C,OAAO;AAAA,IACR,CAAC;AAED,gBAAY,KAAK;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf;AAAA,MACA,MAAM,qBAAqB,OAAO,mBAAmB,gBAAgB;AAAA,MACrE,wCAAqC,QAAQ;AAAA,MAC7C,OAAO;AAAA,IACR,CAAC;AAED,eAAW,KAAK;AAAA,MACf,MAAM,OAAO;AAAA,MACb;AAAA,MACA,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AAAA,EAEQ,qBAAqB,QAAgB,YAAwB,OAAe;AACnF,QAAI,CAAC,OAAO,wBAAyB;AAErC,UAAM,iBAA6B,CAAC;AAEpC,mBAAe,KAAK;AAAA,MACnB,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO,wBAAwB;AAAA,MACtC,OAAO;AAAA,MACP,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,eAAe,OAAO,wBAAwB;AAAA,IAC/C,CAAC;AAED,mBAAe,KAAK;AAAA,MACnB,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,IACR,CAAC;AAED,eAAW,KAAK;AAAA,MACf,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AACD;;;ACnRA,SAAS,cAAc,KAAwB,OAAe;AAC7D,MAAI,OAAO,IAAI,QAAQ,OAAO,QAAQ,CAAC;AACvC,MAAI;AACJ,MAAI,SAAS;AAEb,MAAI,IAAI,UAAU;AACjB,UAAM,SAAS,IAAI,UAAU;AAC7B,UAAM,MAAM,OAAO,gBAAgB,IAAI,UAAU,WAAW;AAC5D,UAAM,SAAS,IAAI,cAAc,GAAG;AACpC,QAAI,QAAQ;AACX,aAAO,OAAO,aAAa,MAAM,KAAK;AACtC,eAAS,OAAO,aAAa,QAAQ,KAAK;AAC1C,aAAO,OAAO,aAAa,KAAK,KAAK;AAAA,IACtC,OAAO;AACN,aAAO,IAAI,KAAK,aAAa,KAAK,KAAK;AAAA,IACxC;AAAA,EACD;AAEA,SAAO,EAAE,MAAM,MAAM,OAAO;AAC7B;AAYO,SAAS,sBACf,SACA,UACA,UACA,UACC;AACD,MAAI,CAAC,WAAW,QAAQ,MAAM,EAAG,OAAM,IAAI,MAAM,qBAAqB;AACtE,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,kCAAkC;AAE1F,UAAQ,OAAO,mBAAmB,EAAE,OAAO;AAE3C,QAAM,QAAQ,QAAQ,KAAK,EAAG,QAAQ;AACtC,QAAM,gBAAgB,QACpB,OAAO,GAAG,EACV,KAAK,SAAS,iBAAiB,EAC/B,KAAK,aAAa,aAAa,MAAM,KAAK,IAAI,MAAM,IAAI,QAAQ,GAAG;AAErE,QAAM,cAAc,KAAK,MAAM,WAAW,GAAG;AAC7C,QAAM,SAAS,KAAK,MAAM,WAAW,GAAG;AAExC,QAAM,aAAa,cACjB,OAAO,GAAG,EACV,KAAK,aAAa,aAAa,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,EACzD,MAAM,UAAU,SAAS,EACzB,GAAG,SAAS,SAAU,OAAmB;AACzC,UAAM,gBAAgB;AACtB,gBAAY,IAAI;AAAA,EACjB,CAAC;AAEF,QAAM,UAAU,WACd,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,SAAS,CAAC,EACpB,KAAK,aAAa,QAAQ,EAC1B,KAAK,eAAe,OAAO,EAC3B,KAAK,qBAAqB,QAAQ,EAClC,KAAK,uBAAkB,YAAY,CAAC;AAEtC,QAAM,QAAQ,QAAQ,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK,EAAG,QAAQ,EAAE,KAAK,IAAI;AAC5E,QAAM,SAAS,QAAQ,cAAc;AAErC,aACE,OAAO,QAAQ,cAAc,EAC7B,KAAK,SAAS,MAAM,EACpB,KAAK,UAAU,MAAM,EACrB,KAAK,MAAM,EAAE,EACb,KAAK,MAAM,EAAE,EACb,MAAM,QAAQ,SAAS;AAEzB,UAAQ,KAAK,KAAK,SAAS,CAAC,EAAE,KAAK,eAAe,QAAQ;AAE1D,QAAM,UAAU,IAAI,KAAK;AAAA,IACxB,QAAQ,MAAM;AACb,cAAQ,KAAK,uBAAkB,YAAY,CAAC;AAAA,IAC7C;AAAA,EACD,CAAC;AAED,WAAS,YAAY,KAAc;AAClC,YAAQ,KAAK,uBAAkB,YAAY,CAAC;AAC5C,YAAQ,MAAM,EAAE,UAAU,GAAG;AAE7B,YAAQ,EAAE,OAAO,KAAK,EAAE,KAAK,6BAA6B,EAAE,MAAM,UAAU,eAAe;AAE3F,UAAM,cAAc,QAAQ,EAAE,OAAO,KAAK,EAAE,MAAM,WAAW,KAAK;AAElE,UAAM,EAAE,SAAS,KAAK,IAAI,eAAe,QAAQ;AACjD,UAAM,CAAC,EAAE,WAAW,IAAI,iBAAiB,QAAQ;AAEjD,gBAAY;AAAA,MACX;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,MACX,cAAc,CAAC,WAAW;AAAA,MAC1B,QAAQ,EAAE,WAAW,MAAM;AAAA,MAC3B,kBAAkB,CAAC,UAAU,SAAS;AACrC,cAAM,aAAa,OAAO,MAAM,KAAK;AACrC,cAAM,gBAAgB,OAAO,MAAM,UAAU,IAAI,WAAW;AAC5D,YAAI,CAAC,OAAO,MAAM,aAAa,EAAG,UAAS,aAAa;AACxD,gBAAQ,KAAK;AAAA,MACd;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAEA,SAAS,iBAAiB,UAAU;AACnC,MAAI,eAAe,SAAS,UAAU,OAAK,EAAE,KAAK;AAClD,MAAI,gBAAgB,GAAI,gBAAe;AACvC,SAAO,CAAC,SAAS,YAAY,GAAG,YAAY;AAC7C;AAEA,SAAS,eAAe,UAAgF;AACvG,QAAM,WAAqB,CAAC;AAC5B,aAAW,OAAO,UAAU;AAC3B,QAAI,CAAC,IAAI,MAAO;AAChB,eAAW,OAAO,OAAO,KAAK,IAAI,KAAK,GAAG;AACzC,UAAI,CAAC,SAAS,SAAS,GAAG,EAAG,UAAS,KAAK,GAAG;AAAA,IAC/C;AAAA,EACD;AAEA,QAAM,UAAyB,CAAC,EAAE,OAAO,SAAS,CAAC;AACnD,aAAW,OAAO,SAAU,SAAQ,KAAK,EAAE,OAAO,IAAI,CAAC;AAEvD,QAAM,OAAsB,SAAS,IAAI,CAAC,KAAK,UAAU;AACxD,UAAM,aAAa,cAAc,KAAK,KAAK;AAC3C,UAAM,QAAqB,CAAC;AAE5B,QAAI,IAAI,SAAU,OAAM,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC;AAAA,aAC1C,WAAW,KAAM,OAAM,KAAK,EAAE,OAAO,WAAW,MAAM,KAAK,WAAW,KAAK,CAAC;AAAA,QAChF,OAAM,KAAK,EAAE,OAAO,WAAW,KAAK,CAAC;AAE1C,eAAW,OAAO,UAAU;AAC3B,YAAM,QAAQ,IAAI,QAAQ,GAAG;AAC7B,YAAM,KAAK,EAAE,OAAO,SAAS,GAAG,CAAC;AAAA,IAClC;AAEA,WAAO;AAAA,EACR,CAAC;AAED,SAAO,EAAE,SAAS,KAAK;AACxB;;;AC9JA,IAAqB,iBAArB,MAAoC;AAAA,EAInC,YAAY,uBAAuB,GAAG,UAAkB;AACvD,SAAK,WAAW;AAChB,SAAK,mBAAmB,IAAI,iBAAiB,oBAAoB;AAAA,EAClE;AAAA,EAEA,OACC,QACA,QACA,SACA,MACA,MACA,WACA,mBACC;AACD,UAAM,oBAAoB,UAAU;AAAA,MACnC,QAAQ,OAAO,OAAO,GAAG,EAAE,KAAK,eAAe,wBAAwB;AAAA,MACvE,aAAa,CAAAC,OAAKA,GAAE;AAAA,MACpB,YAAY;AAAA,IACb,CAAC;AACD,UAAM,OAAO,KAAK,iBAAiB,IAAI,MAAM;AAE7C,UAAM,eAAe,KAAK,IAAI,CAAAA,OAAKA,GAAE,KAAK,KAAK,CAAC;AAChD,UAAM,gBAAgB,iBAAiB,QAAQ,YAAY;AAE3D,UAAM,IAAI;AAAA,MACT,SAAS,gBAAgB;AAAA,IAC1B;AAEA,sBAAkB,MAAM;AAAA,MACvB,UAAU,OAAO;AAAA,QAChB,CAAC;AAAA,QACD;AAAA,UACC;AAAA,UACA;AAAA,UACA,YAAY;AAAA,UACZ,UAAU,KAAK;AAAA,QAChB;AAAA,MACD;AAAA,IACD,CAAC;AACD,UAAM,SAA8B,UAAU,SAAS,KAAK,sBAAsB,KAAK;AAEvF,QAAI,UAAU,OAAO,SAAS,GAAG;AAChC,YAAM,UAAU,OAAO,OAAO,yCAAyC;AACvE,YAAM,aAAa,QAAQ,OAAO,wBAAwB;AAE1D,UAAI,CAAC,QAAQ,MAAM,GAAG;AAGrB,cAAM,QAAQ,WAAW,MAAM,IAAI,UAAU;AAC7C,8BAAsB,OAAO,QAAQ,KAAK,UAAU,iBAAiB;AAAA,MACtE;AAAA,IACD;AAAA,EACD;AACD;;;AC1DA,IAAqB,sBAArB,MAA8D;AAAA,EAMvD,YACQ,UACA,aACA,aACA,UACN;AACM,SAAK,WAAW;AAChB,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,WAAW;AAAA,EACxB;AAAA,EAEN,OAAO,QAAa,UAA6B;AAChD,UAAM,MACJ,YAAgB,EAChB,SAAS,KAAK,QAAQ,EACtB,MAAM,OAAK,EAAE,IAAI,EACjB,KAAK,IAAI;AAEX,UAAM,UAAU,IAAI,QAAQ;AAE5B,UAAM,MAAS,YAA4B,EAAE,YAAY,KAAK,WAAW,EAAE,YAAY,KAAK,WAAW;AAEvG,UAAM,OAAO,OAAO,OAAO,GAAG,EAAE,KAAK,eAAe,4BAA4B;AAEhF,UAAM,OAAO,aAAa,OAAO;AAEjC,SACE,UAAU,MAAM,EAChB,KAAK,OAAO,EACZ,MAAM,EACN,OAAO,MAAM,EACb,KAAK,KAAK,GAAG,EACb,KAAK,QAAQ,OAAO,EACpB,GAAG,aAAa,CAAC,OAAmB,MAAkC;AAEtE,YAAM,CAAC,GAAG,CAAC,IAAO,gBAAQ,OAAO,KAAK,KAAK,CAAC;AAE5C,UAAI,QAAQ,KAAK,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK;AAEzC,UAAI,QAAQ,EAAG,UAAS,IAAI,KAAK;AAEjC,YAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,CAAC;AAEzG,YAAM,MAAM,KAAK,MAAM,OAAO,EAAE,KAAK,IAAI;AAEzC,WAAK,EAAE,KAAK,mCAAmC,EAAE,KAAK,IAAI,WAAW,MAAM,GAAG,CAAC,EAAE,EAAE,MAAM,WAAW,KAAK;AAEzG,WAAK,KAAK,MAAM,GAAG,MAAM,CAAC;AAAA,IAC3B,CAAC,EACA,GAAG,cAAc,CAAC,UAAsB;AAExC,MAAG,eAAO,MAAM,aAA2B,EACzC,KAAK,UAAU,QAAQ,EACvB,KAAK,gBAAgB,CAAC;AAAA,IACzB,CAAC,EACA,GAAG,cAAc,WAAS;AAE1B,MAAG,eAAO,MAAM,aAA2B,EACzC,KAAK,UAAU,IAAI,EACnB,KAAK,gBAAgB,IAAI;AAC3B,WAAK,KAAK;AAAA,IACX,CAAC;AAEF,SACE,UAAU,MAAM,EAChB,KAAK,OAAO,EACZ,MAAM,EACN,OAAO,MAAM,EAEb,KAAK,aAAa,CAAC,MAAkC;AACrD,aAAO,aAAa,IAAI,SAAc,CAAC,CAAC,YAAa,EAAE,KAAK,QAAQ,MAAO,KAAK,KAAK,EAAE,IACtF,EAAE,KAAK,QAAQ,KAAK,KAAK,gBAAgB,EAC1C;AAAA,IACD,CAAC,EACoB,KAAK,MAAM,QAAQ,EACnB,KAAK,eAAe,QAAQ,EAC5B,KAAK,CAAC,MAAkC,EAAE,KAAK,IAAI,EACnD,MAAM,QAAQ,OAAO,EACrB,MAAM,aAAa,GAAG,KAAK,QAAQ,IAAI,EACvC,MAAM,WAAW,OAAO,EAExB,MAAM,kBAAkB,MAAM,EAC9B,MAAM,WAAW,OAAO;AAAA,EAC/C;AACD;;;AC5EA,IAAqB,iBAArB,MAAyD;AAAA,EAUxD,YACC,mBACA,UACA,mBACA,YACA,iBAAoC,CAAC,GACrC,aAAyB,OAAO,MAAM,WACrC,MAAM,SAAS,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,MAAM,OAAO,EAAE,CAAC,GACvE;AAXF,SAAQ,uBAAuB,oBAAI,IAAkD;AACrF,SAAQ,iBAAiB;AAWxB,SAAK,oBAAoB;AACzB,SAAK,WAAW;AAChB,SAAK,oBAAoB;AACzB,SAAK,aAAa;AAClB,SAAK,iBAAiB;AACtB,SAAK,aAAa;AAAA,EACnB;AAAA,EAEA,OAAO,QAAa,UAAwB,YAA2B;AACtE,UAAM,UAAU,OAAO,OAAO,GAAG;AAEjC,UAAM,eAAe,aAA+B,EAClD,EAAE,WAAS,MAAM,CAAC,EAClB,EAAE,WAAS,MAAM,CAAC;AAEpB,UAAM,OAAO,aAAa,OAAO;AAEjC,YACE,UAAU,QAAQ,EAClB,KAAK,QAAQ,EACb,MAAM,EACN,OAAO,GAAG,EACV,KAAK,SAAS,OAAO,EACrB,KAAK,CAAC,OAAc,GAAW,UAA4B;AAC3D,YAAM,IAAI,eAAO,MAAM,CAAC,CAAC;AACzB,QAAE,OAAO,MAAM,EACb,KAAK,SAAS,YAAY,EAC1B,KAAK,eAAe,sBAAsB,EAC1C,KAAK,MAAM,OAAO,EAClB,KAAK,aAAa,MAAM,SAAS,EACjC,MAAM,eAAe,MAAM,UAAU,EACrC,MAAM,aAAa,GAAG,KAAK,QAAQ,IAAI,EACvC,MAAM,QAAQ,MAAM,KAAK,EACzB,MAAM,UAAU,SAAS,EACzB,KAAK,MAAM,IAAI,EACf,GAAG,SAAS,MAAM;AAClB,YAAI,MAAM,kBAAkB;AAC3B,eAAK;AAAA,YACJ,MAAM;AAAA,YACN,MAAM,iBAAiB,IAAI,WAAS,MAAM,KAAK;AAAA,UAChD;AAAA,QACD;AAAA,MACD,CAAC,EACA,GAAG,aAAa,OAAO,eAA2B;AAClD,cAAM,YAAY,EAAE,KAAK;AACzB,aAAK,cAAc,MAAM,KAAK;AAC9B,aAAK,KAAK,WAAW,GAAG,WAAW,CAAC;AAEpC,cAAM,cAAc,MAAM,KAAK,mBAAmB,KAAK;AACvD,YAAI,aAAa,KAAK,kBAAkB,CAAC,YAAa;AAEtD,cAAM,oBAAoB,KAAK,eAAe;AAAA,UAC7C,WACC,KAAK,eAAe,MAAM,KAAK,YAAY,GAAG,KAC9C,YAAY,QAAQ,MAAM,SAC1B,MAAM,QAAQ,YAAY;AAAA,QAC5B;AACA,aAAK,cAAc,MAAM,OAAO,iBAAiB;AAAA,MAClD,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAK;AACL,aAAK,MAAM;AACX,aAAK,KAAK;AAAA,MACX,CAAC;AAEF,QAAE,OAAO,MAAM,EACb,KAAK,SAAS,YAAY,EAC1B,MAAM,MAAM,KAAK,MAAM,EACvB,MAAM,UAAU,MAAM,KAAK,EAC3B,MAAM,QAAQ,MAAM,EACpB,KAAK,KAAK,YAAY;AAAA,IACzB,CAAC;AAEF,YAAQ,UAAU,QAAQ,EAAE,KAAK,CAAC,OAAc,GAAW,UAA4B;AACtF,YAAM,YAAY,aAAa,WAAW,KAAK,OAAK,EAAE,SAAS,MAAM,IAAI,IAAI;AAC7E,UAAI,WAAW;AACd,cAAM,IAAI,eAAO,MAAM,CAAC,CAAC;AACzB,UAAE,UAAU,aAAa,EACvB,MAAM,SAAS,EACf,WAAW,EACX,SAAS,KAAK,iBAAiB,EAC/B,KAAK,aAAa,UAAU,SAAS,EACrC,MAAM,eAAe,UAAU,UAAU;AAE3C,UAAE,UAAU,aAAa,EACvB,MAAM,UAAU,KAAK,MAAM,EAC3B,WAAW,EACX,SAAS,KAAK,iBAAiB,EAC/B,MAAM,QAAQ,MAAM,EACpB,KAAK,KAAK,YAAY;AAAA,MACzB;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEQ,cAAc,MAAW,OAAc,iBAAiB,MAAM,YAAY;AACjF,SAAK,MAAM;AACX,UAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC1C,SAAK,cAAc,OAAO,OAAO,cAAc;AAAA,EAChD;AAAA,EAEA,MAAc,mBAAmB,OAAoD;AACpF,QAAI,CAAC,KAAK,cAAc,CAAC,KAAK,eAAe,OAAQ;AAErD,UAAM,WAAW,GAAG,KAAK,UAAU,IAAI,MAAM,IAAI,IAAI,MAAM,GAAG;AAC9D,QAAI,SAAS,KAAK,qBAAqB,IAAI,QAAQ;AACnD,QAAI,CAAC,QAAQ;AACZ,eAAS,KAAK,sBAAsB,KAAK;AACzC,WAAK,qBAAqB,IAAI,UAAU,MAAM;AAAA,IAC/C;AACA,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAc,sBAAsB,OAAoD;AACvF,QAAI;AACH,YAAM,WAAW,MAAM,KAAK,WAAW,MAAM,MAAM,KAAK,UAAW;AACnE,UAAI,UAAU,SAAS,CAAC,MAAM,QAAQ,UAAU,KAAK,EAAG;AAExD,YAAM,SAAS,SAAS,MAAM;AAAA,QAC7B,WACC,KAAK,eAAe,MAAM,KAAK,MAAM,GAAG,KAAK,OAAO,SAAS,MAAM,KAAK,KAAK,OAAO,SAAS,MAAM,IAAI;AAAA,MACzG;AACA,UAAI,CAAC,OAAO,OAAQ;AAEpB,aAAO;AAAA,QACN,KAAK,OAAO,CAAC,EAAE;AAAA,QACf,OAAO,KAAK,IAAI,GAAG,OAAO,IAAI,WAAS,MAAM,KAAK,CAAC;AAAA,QACnD,MAAM,KAAK,IAAI,GAAG,OAAO,IAAI,WAAS,MAAM,IAAI,CAAC;AAAA,MAClD;AAAA,IACD,QAAQ;AACP;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,eAAe,GAAW,GAAW;AAC5C,WAAO,GAAG,QAAQ,SAAS,EAAE,EAAE,YAAY,KAAK,GAAG,QAAQ,SAAS,EAAE,EAAE,YAAY;AAAA,EACrF;AAAA,EAEA,cAAc,OAAY,OAAc,iBAAiB,MAAM,YAAY;AAC1E,QAAI,MAAM,kBAAkB;AAC3B,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,UAAI,KAAK,MAAM;AACf,UAAI,OAAO,MAAM,EAAE,MAAM,eAAe,KAAK,EAAE,KAAK,MAAM,IAAI;AAE9D,YAAM,iBAAiB,QAAQ,CAAC,aAA8B;AAC7D;AACC,gBAAM,CAACC,MAAKC,IAAG,IAAI,MAAM,OAAO;AAEhC,UAAAD,KAAI,KAAK,UAAU;AACnB,UAAAC,KACE,OAAO,MAAM,EACb,MAAM,eAAe,KAAK,EAC1B,KAAK,SAAS,KAAK,EACnB,OAAO,MAAM,EACb,MAAM,eAAe,KAAK,EAC1B,MAAM,SAAS,SAAS,KAAK,EAC7B,KAAK,GAAG,SAAS,SAAS,EAAE,EAC5B,OAAO,MAAM,EACb,MAAM,eAAe,KAAK,EAC1B,MAAM,SAAS,OAAO,EACtB,MAAM,aAAa,OAAO,EAC1B,KAAK,IAAI,SAAS,GAAG,IAAI,SAAS,QAAQ,EAAE;AAC9C,cAAI,oBAAoB,SAAS,IAAI,GAAG;AACvC,0BAAcA,MAAK,SAAS,IAAI;AAAA,UACjC;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF;AAEA,QAAI,MAAM,eAAe;AACxB,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAEhC,UAAI,KAAK,WAAW;AACpB,UAAI,OAAO,MAAM,EAAE,KAAK,mBAAmB;AAC3C,YAAM,cAAc,QAAQ,CAAC,kBAAiC;AAC7D,cAAM,CAACD,MAAKC,IAAG,IAAI,MAAM,OAAO;AAEhC,QAAAD,KAAI,KAAK,UAAU;AACnB,QAAAC,KAAI,OAAO,MAAM,EAAE;AAAA,UAClB,IAAI,cAAc,QAAQ,cAAc,QAAQ,GAAG,IAAI,cAAc,IAAI,IAAI,cAAc,IAAI;AAAA,QAC5F,cAAc,WAAW,MAAM,YAAY,SAAS,MACnD,cAAc,QAAQ,cAAc,QAAQ,GAAG,IAAI,cAAc,IAAI,IAAI,cAAc,IAAI,IAC7F,cAAc,WAAW,MAAM,YAAY,SAC5C;AAAA,QACF;AAAA,MACD,CAAC;AAAA,IACF;AAEA,QAAI,gBAAgB;AACnB,qBAAe,QAAQ,CAAC,QAAoB;AAC3C,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,IAAI,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,QAAQ,KAAK;AAClE,YAAI,OAAO,MAAM,EAAE,MAAM,eAAe,KAAK,EAAE,MAAM,oBAAoB,IAAI,KAAK,EAAE,KAAK,cAAc;AAEvG,YAAI,IAAI,MAAM,SAAS,IAAI,MAAM,MAAO,KAAI,OAAO,MAAM,EAAE,MAAM,eAAe,OAAO,EAAE,KAAK,IAAI,KAAK;AACvG,YACE,OAAO,MAAM,EACb,MAAM,eAAe,OAAO,EAC5B,MAAM,aAAa,OAAO,EAC1B,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE;AAAA,MAC7C,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;AC9Oe,SAAR,cAA+B,YAAiB,CAAC,GAAG,KAAqB;AAC/E,QAAM,oBAA8B,CAAC;AAErC,MAAI,KAAK,UAAU,cAAc,SAAS,sBAAsB,WAAW,UAAU;AACpF,sBAAkB,KAAK,MAAM;AAAA,EAC9B;AAEA,QAAM,WAAW;AAAA,IAChB,iBAAiB;AAAA,IAEjB,OAAO;AAAA,MACN,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,gCAAgC;AAAA,MAChC,oCAAoC;AAAA,MACpC,eAAe;AAAA,MACf,uBAAuB;AAAA,MACvB,wBAAwB;AAAA,MACxB,qBAAqB;AAAA,MACrB;AAAA,MACA,eAAe;AAAA;AAAA,MACf,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,eAAe;AAAA,MACf;AAAA,IACD;AAAA,IAEA,OAAO;AAAA,MACN,oBAAoB;AAAA,MACpB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,4BAA4B;AAAA,MAE5B,gBAAgB,CAAC,QAAQ;AAAA,MAEzB,uBAAuB;AAAA,MACvB,iBAAiB;AAAA,MAEjB,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,MACvB,kBAAkB;AAAA,MAElB,sBAAsB;AAAA,MACtB,uBAAuB,CAAC,YAAY;AAAA,IACrC;AAAA,IAEA,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IAEnB,aAAa;AAAA,IACb,UAAU;AAAA;AAAA,IAEV,OAAO;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,oBAAoB;AAAA;AAAA,IACrB;AAAA,IAEA,KAAK;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,MAAM;AAAA,IACP;AAAA,IACA,KAAK;AAAA,MACJ,kBAAkB;AAAA,IACnB;AAAA,IACA,QAAQ;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,aAAa;AAAA;AAAA,MACb,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,WAAW;AAAA,IACZ;AAAA,IAEA,MAAM;AAAA,MACL,SAAS;AAAA,IACV;AAAA,EACD;AAEA,MAAI,WAAW,OAAO,UAAU,SAAS,UAAU,MAAM,SAAS,OAAQ,UAAU,MAAM,SAAS,MAAM;AACxG,YAAQ,IAAI,GAAG,WAAW,OAAO,MAAM,0DAA0D;AAAA,EAClG;AAEA,SAAO,UAAU,UAAU,SAAS;AACrC;;;ACzFA,IAAqB,uBAArB,MAA+D;AAAA,EAG9D,YAAY,mBAAkE;AAC7E,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEA,OAAO,QAAa,UAAsB;AACzC,UAAM,eAAkB,YAAY;AAEpC,UAAM,OAAO,OAAO,OAAO,GAAG;AAE9B,UAAM,OAAO,aAAa,OAAO;AAEjC,SACE,UAAU,MAAM,EAChB,KAAK,QAAQ,EACb,MAAM,EACN,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,MAAc,aAAa,CAAC,CAAC,EACxC,KAAK,QAAQ,CAAC,MAAc,EAAE,KAAK,EACnC,GAAG,aAAa,CAAC,YAAwB,QAAgB;AACzD,YAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC1C,YAAM,MAAW,gBAAgB,GAAG;AACpC,UAAI,KAAK;AACT,UAAI,QAAQ,IAAI;AAChB,UAAI,OAAO,IAAI;AAEf;AACC,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,aAAa;AACtB,YAAI,OAAO,MAAM,EAAE,KAAK,IAAI,KAAK;AACjC,YACE,OAAO,MAAM,EACb,MAAM,eAAe,KAAK,EAC1B,MAAM,SAAS,IAAI,KAAK,EACxB,MAAM,aAAa,MAAM,EACzB,KAAK,IAAI,SAAS;AAAA,MACrB;AACA;AACC,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,IAAI,OAAO,IAAI,MAAM,aAAa,UAAU;AACrD,YAAI,OAAO,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,EAAE,EAAE;AAAA,MACzG;AAEA,UAAI,IAAI,MAAM;AACb,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,MAAM;AACf,YAAI,KAAK,IAAI,IAAI;AAAA,MAClB;AAEA,UAAI,IAAI,aAAa,GAAG;AACvB,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,YAAY;AACrB,YAAI,KAAK,IAAI,UAAU;AAAA,MACxB;AACA,UAAI,oBAAoB,IAAI,IAAI,GAAG;AAClC,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,YAAY;AACrB,sBAAc,KAAK,IAAI,IAAI;AAAA,MAC5B;AAEA,WAAK,KAAK,WAAW,GAAG,WAAW,CAAC;AAAA,IACrC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACX,CAAC,EACA,GAAG,SAAS,CAAC,YAAwB,QAAgB;AACrD,WAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;AAAA,IAC7C,CAAC;AAAA,EACH;AACD;;;ACxEA,IAAqB,cAArB,MAAsD;AAAA,EAKrD,YAAY,UAAkB,mBAAkE;AAC/F,SAAK,WAAW;AAEhB,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEA,OAAO,QAAa,UAAyB;AAC5C,QAAI,SAAS,SAAS,GAAG;AACxB,YAAM,iBAAiB,SAAS,CAAC,EAAE;AACnC,YAAM,kBAAkB,IAAI,gBAAgB,gBAAgB,KAAK,UAAU,WAAW;AACtF,sBAAgB,OAAO,MAAM;AAAA,IAC9B;AAEA,UAAM,eAAkB,YAAY;AAEpC,UAAM,OAAO,OAAO,OAAO,GAAG;AAE9B,UAAM,OAAO,aAAa,OAAO;AAEjC,SACE,UAAU,MAAM,EAChB,KAAK,QAAQ,EACb,MAAM,EACN,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,MAAc,aAAa,CAAC,CAAC,EACxC,KAAK,QAAQ,CAAC,MAAc,EAAE,KAAK,EACnC,GAAG,aAAa,CAAC,YAAwB,QAAgB;AACzD,YAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC1C,YAAM,MAAW,gBAAgB,GAAG;AACpC,UAAI,KAAK;AACT,UAAI,QAAQ,IAAI;AAChB,UAAI,OAAO,IAAI;AAEf;AACC,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,aAAa;AACtB,YAAI,OAAO,MAAM,EAAE,KAAK,IAAI,KAAK;AACjC,YACE,OAAO,MAAM,EACb,MAAM,eAAe,KAAK,EAC1B,MAAM,SAAS,IAAI,KAAK,EACxB,MAAM,aAAa,MAAM,EACzB,KAAK,IAAI,SAAS;AAAA,MACrB;AACA;AACC,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,IAAI,OAAO,IAAI,MAAM,aAAa,UAAU;AACrD,YAAI,OAAO,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,EAAE,EAAE;AAAA,MACzG;AAEA,UAAI,IAAI,MAAM;AACb,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,MAAM;AACf,YAAI,KAAK,IAAI,IAAI;AAAA,MAClB;AAEA,UAAI,IAAI,aAAa,GAAG;AACvB,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,YAAY;AACrB,YAAI,KAAK,IAAI,UAAU;AAAA,MACxB;AAEA,UAAI,oBAAoB,IAAI,IAAI,GAAG;AAClC,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,YAAY;AACrB,sBAAc,KAAK,IAAI,IAAI;AAAA,MAC5B;AAEA,WAAK,KAAK,WAAW,GAAG,WAAW,CAAC;AAAA,IACrC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACX,CAAC,EACA,GAAG,SAAS,CAAC,YAAwB,QAAgB;AACrD,WAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;AAAA,IAC7C,CAAC;AAAA,EACH;AACD;;;ACrFA,IAAqB,cAArB,MAAsD;AAAA,EACrD,OAAO,QAAa,UAAyB;AAC5C,UAAM,eAAkB,YAAY;AAEpC,UAAM,OAAO,OAAO,OAAO,GAAG;AAE9B,UAAM,OAAO,aAAa,OAAO;AAEjC,SACE,UAAU,MAAM,EAChB,KAAK,QAAQ,EACb,MAAM,EACN,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,MAAc,aAAa,CAAC,CAAC,EACxC,KAAK,QAAQ,CAAC,MAAc,EAAE,KAAK,EACnC,GAAG,aAAa,CAAC,YAAwB,QAAgB;AACzD,YAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC1C,YAAM,MAAW,gBAAgB,GAAG;AACpC,UAAI,KAAK;AACT,UAAI,OAAO,IAAI;AACf;AACC,cAAM,CAACC,MAAKC,IAAG,IAAI,MAAM,OAAO;AAChC,QAAAD,KAAI,KAAK,WAAW;AACpB,QAAAC,KAAI,OAAO,MAAM,EAAE,MAAM,eAAe,KAAK,EAAE,KAAK,wBAAwB;AAAA,MAC7E;AAEA,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,UAAI,KAAK,UAAU;AACnB,UAAI,OAAO,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE;AAE7D,WAAK,KAAK,WAAW,GAAG,WAAW,CAAC;AAAA,IACrC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACX,CAAC;AAAA,EACH;AACD;;;ACrCA,IAAqB,iBAArB,MAAyD;AAAA,EACxD,OAAO,QAAa,UAAyB;AAC5C,UAAM,eAAkB,YAAY;AAGpC,UAAM,OAAO,OAAO,OAAO,GAAG;AAE9B,UAAM,eAAe,OACnB,OAAO,GAAG,EACV,KAAK,SAAS,eAAe,EAE7B,MAAM,kBAAkB,MAAM;AAEhC,UAAM,OAAO,aAAa,OAAO;AAEjC,SACE,UAAU,MAAM,EAChB,KAAK,QAAQ,EACb,MAAM,EACN,OAAO,MAAM,EAEb,KAAK,KAAK,CAAC,MAAc,aAAa,CAAC,CAAC,EAExC,KAAK,QAAQ,CAAC,MAAc,EAAE,KAAK,EAEnC,GAAG,aAAa,CAAC,YAAwB,QAAgB;AAEzD,mBAAa,UAAU,GAAG,EAAE,OAAO;AAEnC,mBACE,OAAO,MAAM,EACb,MAAM,GAAG,EACT,KAAK,KAAK,aAAa,GAAG,CAAC,EAC3B,KAAK,QAAQ,MAAM,EACnB,KAAK,UAAU,OAAO,EACtB,KAAK,gBAAgB,CAAC;AAGxB,YAAM,MAAW,gBAAgB,GAAG;AACpC,UAAI,KAAK,IAAI;AACb,UAAI,UAAU,CAAC,EAAE,WAAW,IAAI,WAAW,CAAC;AAC5C,UAAI,OAAO,IAAI;AAGf,YAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAE1C,UAAI,IAAI,MAAM,OAAO;AACpB,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,KAAK;AACb,WAAG,KAAK,2BAA2B,IAAI,KAAK,yBAAyB,IAAI,KAAK,EAAE;AAAA,MACjF;AACA,UAAI,IAAI,MAAM,OAAO;AACpB,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,KAAK;AACb,WAAG,KAAK,2BAA2B,IAAI,KAAK,uBAAuB;AAAA,MACpE;AAEA;AACC,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,UAAU;AAClB,WAAG,KAAK,IAAI,MAAM,MAAM,IAAI,QAAQ,MAAM,IAAI,IAAI;AAAA,MACnD;AAEA,UAAI,IAAI,MAAM,OAAO;AACpB,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,MAAM;AACd,WAAG,KAAK,IAAI,KAAK;AAAA,MAClB;AAGA,WAAK,KAAK,WAAW,GAAG,WAAW,CAAC;AAAA,IACrC,CAAC,EAEA,GAAG,YAAY,MAAM;AACrB,mBAAa,UAAU,GAAG,EAAE,OAAO;AACnC,WAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACX,CAAC;AAAA,EACH;AACD;;;AC/EO,IAAM,qBAAN,MAAyB;AAAA,EAI/B,YAAY,qBAAqB,GAAG,qBAAqB,GAAG;AAC3D,SAAK,qBAAqB;AAC1B,SAAK,qBAAqB;AAAA,EAC3B;AAAA,EAEA,OAAO,QAAa,UAAyB;AAC5C,UAAM,eAAkB,YAAY;AAGpC,UAAM,OAAO,OAAO,OAAO,GAAG;AAG9B,UAAM,eAAe,OAAO,OAAO,GAAG,EAAE,KAAK,SAAS,eAAe,EAAE,MAAM,kBAAkB,MAAM;AAErG,UAAM,OAAO,aAAa,OAAO;AAEjC,SACE,UAAU,MAAM,EAChB,KAAK,QAAQ,EACb,MAAM,EACN,OAAO,MAAM,EAEb,KAAK,KAAK,CAAC,MAAc,aAAa,CAAC,CAAC,EAExC,KAAK,QAAQ,CAAC,MAAc,KAAK,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAGjE,GAAG,cAAc,CAAC,YAAwB,QAAgB;AAE1D,mBACE,OAAO,MAAM,EACb,MAAM,GAAG,EACT,KAAK,KAAK,aAAa,GAAG,CAAC,EAC3B,KAAK,QAAQ,MAAM,EACnB,KAAK,UAAU,OAAO,EACtB,KAAK,gBAAgB,CAAC;AAGxB,YAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC1C,YAAM,MAAW,gBAAgB,GAAG;AACpC,UAAI,KAAK,IAAI;AACb,UAAI,UAAU,CAAC,EAAE,WAAW,IAAI,WAAW,CAAC;AAC5C,UAAI,OAAO,IAAI;AAGf,UAAI,IAAI,MAAM,OAAO;AACpB,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,KAAK;AAEb,WAAG;AAAA,UACF,2BAA2B,KAAK;AAAA,YAC/B,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,IAAI;AAAA,UACL,CAAC,wDAAwD,IAAI,KAAK;AAAA,QACnE;AAAA,MACD;AACA,UAAI,IAAI,MAAM,OAAO;AACpB,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,KAAK;AACb,WAAG,KAAK,2BAA2B,IAAI,KAAK,sDAAsD;AAAA,MACnG;AAEA;AACC,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,UAAU;AAClB,WAAG,KAAK,IAAI,MAAM,MAAM,IAAI,QAAQ,MAAM,IAAI,IAAI;AAAA,MACnD;AAGA,WAAK,KAAK,WAAW,GAAG,WAAW,CAAC;AAAA,IACrC,CAAC,EAGA,GAAG,cAAc,MAAM;AACvB,mBAAa,UAAU,GAAG,EAAE,OAAO;AACnC,WAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,SAAS,OAAe,OAAe,KAAK,OAAO;AAClD,QAAI,MAAM,MAAO,QAAO;AAExB,UAAM,WAAW,KAAK,IAAI,KAAK,oBAAoB,KAAK,IAAI,KAAK,kBAAkB,CAAC;AACpF,WAAO;AAAA,MACN,CAAC,CAAC,UAAU,GAAG,QAAQ;AAAA,MACvB,CAAC,OAAO,SAAS,KAAK;AAAA;AAAA,IACvB,EAAE,MAAM,IAAI,EAAE,KAAK;AAAA,EACpB;AACD;;;AC/FA,IAAqB,4BAArB,MAAoE;AAAA,EAGnE,YAAY,YAAY,KAAK;AAC5B,SAAK,YAAY;AAAA,EAClB;AAAA,EAEA,OAAO,QAAa,UAAyC;AAC5D,QAAI,CAAC,SAAS,OAAQ;AAEtB,UAAM,YAAY,OAAO,OAAO,GAAG,EAAE,KAAK,eAAe,8BAA8B;AACvF,UAAM,OAAO,aAAa,OAAO;AAEjC,cACE,OAAO,GAAG,EACV,UAAU,QAAQ,EAClB,KAAK,QAAQ,EACb,MAAM,EACN,OAAO,QAAQ,EACf,KAAK,MAAM,OAAK,KAAK,IAAI,EAAE,aAAa,KAAK,KAAK,CAAC,IAAI,EAAE,WAAW,EACpE,KAAK,MAAM,OAAK,KAAK,IAAI,EAAE,aAAa,KAAK,KAAK,CAAC,IAAI,EAAE,WAAW,EACpE,KAAK,KAAK,KAAK,SAAS,EACxB,KAAK,QAAQ,OAAK,EAAE,KAAK,EACzB,KAAK,WAAW,GAAG,EACnB,GAAG,aAAa,CAAC,OAAmB,MAA8B;AAClE,YAAM,WAAW,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,WAAW,CAAC;AACvD,WAAK,MAAM;AACX,YAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC1C;AACC,cAAM,CAAC,KAAK,GAAG,IAAI,MAAM,OAAO;AAChC,YAAI,KAAK,wBAAwB;AACjC,YAAI,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE;AAAA,MAC9B;AACA,WAAK,KAAK,MAAM,GAAG,MAAM,CAAC;AAAA,IAC3B,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAK,MAAM;AACX,WAAK,KAAK;AAAA,IACX,CAAC;AAEF,SAAK,WAAW,WAAW,SAAS,CAAC,CAAC;AAAA,EACvC;AAAA,EAEQ,WAAW,QAAa,gBAAwC;AACvE,UAAM,EAAE,iBAAiB,WAAW,UAAU,SAAS,IAAI;AAC3D,UAAM,YAAY,OAAO,OAAO,GAAG,EAAE,KAAK,SAAS,qBAAqB;AACxE,UAAM,YAAY,kBAAkB;AAEpC,cACE,OAAO,MAAM,EACb,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,CAAC,SAAS,EACrB,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,CAAC,eAAe,EAC3B,KAAK,UAAU,SAAS,EACxB,KAAK,gBAAgB,CAAC;AAExB,UAAM,OAAO,WAAW,YAAY;AACpC,UAAM,aAAa,aAAa,WAAW,CAAC,QAAQ,IAAI,MAAM,UAAU,UAAU,CAAC;AAEnF,eAAW,QAAQ,WAAS;AAC3B,YAAM,SAAS,QAAQ,YAAY;AACnC,YAAM,SAAS,kBAAkB,YAAY;AAC7C,YAAM,IAAI,CAAC;AACX,gBAAU,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,UAAU,SAAS;AAE1G,YAAM,WAAW,KAAK,MAAM,QAAQ,EAAE,IAAI;AAC1C,YAAM,YAAY,OAAO,UAAU,QAAQ,IAAI,GAAG,QAAQ,KAAK,SAAS,QAAQ,CAAC;AACjF,gBACE,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,IAAI,CAAC,EACf,MAAM,aAAa,MAAM,EACzB,MAAM,QAAQ,SAAS,EACvB,KAAK,MAAM,SAAS,KAAK;AAAA,IAC5B,CAAC;AAAA,EACF;AACD;;;AC1DA,IAAqB,QAArB,MAAqB,eAAc,SAAgC;AAAA,EAgBlE,YAAY,MAAW,KAAmB;AACzC,UAAM,MAAM,GAAG;AALhB,SAAQ,oBAAoB;AAwR5B,SAAQ,oBAAoB,CAAC,UAAkB;AAC9C,YAAM,QAAQ,KAAK,IAAI,SAAS;AAChC,YAAM,OAAO,MAAM;AACnB,YAAM,MAAM,KAAK,sBAAsB,KAAK;AAC5C,UAAI,CAAC,IAAK;AACV,YAAM,WAAW,gBAAgB,KAAK,mBAAmB;AACzD,eAAS,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAO,EAAE,QAAQ,MAAM,KAAM;AACzD,YAAM,WAAW,SAAS,KAAK,EAAE,KAAK;AACtC,eAAS,KAAK,QAAQ,CAAC,MAAY,EAAE,WAAW,EAAE,GAAI;AACtD,YAAM,WAAW,KAAK,KAAK,OAAO,CAAC,MAAW,EAAE,MAAM,SAAS,EAAE,MAAM,KAAK;AAC5E,YAAM,UAAU,SAAS,OAAO,SAAS,IAAI;AAC7C,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,SAAS,qBAAqB,SAAS,EAAE;AAAA,MAC1E,CAAC;AAAA,IACF;AAjSC,SAAK,OAAO,OAAM;AAKlB,SAAK,IAAI,SAAS,KAAK,OAAO,OAAO,KAAK,EAAE,KAAK,SAAS,cAAc,EAAE,MAAM,WAAW,MAAM;AACjG,SAAK,SAAS;AACd,SAAK,oBAAoB,IAAI,kBAAkB,IAAI;AAAA,EACpD;AAAA,EAzBA;AAAA,SAAO,OAAO;AAAA;AAAA,EA2Bd,MAAM,OAAO;AACZ,UAAM,QAAQ,KAAK,IAAI,SAAS;AAChC,UAAM,WAAW,MAAM,MAAM,KAAK,OAAK,EAAE,OAAO,KAAK,EAAE,EAAE;AAEzD,SAAK,uBAAuB,IAAI,gBAAgB,UAAU,KAAK,iBAAiB;AAChF,SAAK,YAAY,KAAK,qBAAqB,IAAI,KAAK;AAEpD,UAAM,SAAS,KAAK,KAAK;AACzB,UAAM,iBAAiB,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,cAAc,EAAE,MAAM,kBAAkB,KAAK;AAC1G,UAAM,UAAU,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,cAAc;AAEpE,UAAM,SAAS,eAAe,OAAO,KAAK;AAC1C,UAAM,aAAa,eAAe,OAAO,KAAK;AAC9C,UAAM,sBAAsB,KAAK,uBAAuB,KAAK,SAAS;AAEtE,SAAK,WAAW,MAAM,UAAU;AAAA,MAC/B,QAAQ,WAAW;AAAA,QAClB,KAAK,KAAK;AAAA,QACV,IAAI,KAAK;AAAA;AAAA,QAET,iBAAiB,MAChB,KAAK,kBAAkB,sBAAsB,OAAO,OAAO,2BAA2B,EAAE,KAAK,CAAC;AAAA,QAC/F,UAAU,MAAM,KAAK,iBAAiB,KAAK,MAAM;AAAA,QACjD,QAAQ,MAAM,KAAK;AAAA,QACnB,QAAQ;AAAA,MACT,CAAC;AAAA,MAED,QAAQ,aAAa;AAAA,QACpB,KAAK,KAAK;AAAA,QACV,IAAI,KAAK;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ,MAAM,KAAK;AAAA,QACnB,QAAQ;AAAA,MACT,CAAC;AAAA,IACF,CAAC;AAED,SAAK,WAAW,QAAQ,OAAO,KAAK,EAAE,KAAK,eAAe,qBAAqB;AAC/E,SAAK,SAAS,QAAQ,OAAO,KAAK,EAAE,KAAK,eAAe,mBAAmB;AAAA,EAC5E;AAAA,EAEQ,uBAAuB,WAAsB;AACpD,UAAM,sBAAkC,CAAC;AAEzC,QAAI,UAAU,SAAS,MAAM,oCAAoC;AAChE,YAAM,+BAA+B;AAAA,QACpC;AAAA,UACC,UAAU,UAAU;AAAA,UACpB,OAAO;AAAA,UACP,MAAM;AAAA,UACN,WAAW;AAAA,UACX,aAAa;AAAA,UACb,OAAO,2BAA2B,UAAU,WAAW;AAAA,QACxD;AAAA,MACD;AAEA,0BAAoB,KAAK,GAAG,4BAA4B;AAAA,IACzD;AAEA,QAAI,UAAU,gBAAgB,KAAK,UAAU,gBAAgB,GAAG;AAC/D,YAAM,wBAAwB;AAAA,QAC7B;AAAA,UACC,UAAU;AAAA,UACV,OAAO;AAAA,UACP,MAAM;AAAA,UACN,WAAW;AAAA,UACX,aAAa;AAAA,UACb,OAAO;AAAA,UACP,SAAS;AAAA,YACR,EAAE,OAAO,WAAW,+BAAgC;AAAA,YACpD,EAAE,OAAO,OAAO,uBAA4B;AAAA,UAC7C;AAAA,QACD;AAAA,MACD;AACA,0BAAoB,KAAK,GAAG,qBAAqB;AAAA,IAClD;AAEA,QAAI,UAAU,yBAAyB;AACtC,0BAAoB,KAAK;AAAA,QACxB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,kBAAkB;AAAA,MACnB,CAAC;AAAA,IACF;AAEA,wBAAoB,KAAK;AAAA,MACxB,UAAU;AAAA,MACV,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,MACX,aAAa;AAAA,MACb,OAAO;AAAA,IACR,CAAC;AAED,UAAM,YAAY,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO;AAClD,UAAM,yBAAyB;AAAA,MAC9B,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,MACX,aAAa;AAAA,MACb,OAAO;AAAA,QACN,QAAQ;AAAA,MACT;AAAA,MACA,SAAS,OAAO,KAAK,SAAS,EAAE,IAAI,QAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE;AAAA,MACjE,cAAc,CAAC,SAAmB,CAAC,MAAM;AAKxC,cAAM,UAAU,OAAO,KAAK,SAAS,EAAE,OAAO,OAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AACtE,eAAO;AAAA,MACR;AAAA,IACD;AAEA,wBAAoB,KAAK,sBAAsB;AAE/C,wBAAoB,KAAK;AAAA,MACxB,UAAU;AAAA,MACV,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,MACX,aAAa;AAAA,MACb,OAAO;AAAA,IACR,CAAC;AAED,UAAM,mBAAmB;AAAA,MACxB;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,kBAAkB;AAAA,QAClB,MAAM;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,iBAAiB,CAAC,SAAe,KAAK,SAAS,MAAM,aAAa,SAAS;AAAA,MAC5E;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,MAAM;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,kBAAkB;AAAA,MACnB;AAAA,IACD;AAEA,wBAAoB,KAAK,GAAG,gBAAgB;AAC5C,QAAI,UAAU,gCAAgC,UAAU,gBAAgB,GAAG;AAC1E,0BAAoB,KAAK;AAAA,QACxB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,QACb,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,OAAsB;AAE3B,UAAM,WAAqB,KAAK,MAAM;AAEtC,SAAK,SAAS,SAAS,MAAM;AAE7B,QAAI,KAAK,mBAAmB;AAC3B,WAAK,uBAAuB,IAAI,gBAAgB,UAAU,KAAK,iBAAiB;AAChF,WAAK,YAAY,KAAK,qBAAqB,IAAI,KAAK,IAAI,SAAS,CAAC;AAAA,IACnE;AACA,SAAK,oBAAoB;AAEzB,QAAI,KAAK,WAAW;AAEnB,WAAK,OAAO,UAAU,GAAG,EAAE,OAAO;AAClC,YAAM,WAAW,KAAK,IAAI,SAAS;AACnC,WAAK,UAAU,SAAS,KAAK;AAC7B,WAAK,UAAU,WAAW;AAE1B,iBAAW,QAAQ,KAAK,UAAU;AACjC,aAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,SAAS,CAAC;AAAA,MAC3D;AAEA,YAAM,iBAAiB,IAAI,eAAe,KAAK,UAAU,sBAAsB,SAAS,MAAM,QAAQ;AAEtG,YAAM,gBAAgB,IAAI;AAAA,QACzB,KAAK,iBAAiB,KAAK,UAAU,UAAU,KAAK,WAAW,KAAK,kBAAkB,iBAAiB;AAAA,QACvG;AAAA,QACA,KAAK,IAAI,KAAK,MAAM,KAAK;AAAA,QACzB;AAAA,UACC,SAAS,KAAK,IAAI,KAAK,MAAM,MAAM;AAAA,UACnC,aAAa,KAAK,IAAI,KAAK,MAAM,KAAK;AAAA,QACvC;AAAA,MACD;AAEA,oBAAc,OAAO,KAAK,QAAQ,KAAK,WAAW,KAAK,iBAAiB;AAExE,UAAI,KAAK,UAAU,iBAAiB,SAAS,QAAQ;AACpD,sBAAc,OAAO,KAAK,UAAU,KAAK,UAAU,eAAe;AAAA,MACnE;AAAA,IACD;AAAA,EACD;AAAA,EAEA,SAAS,UAAe;AACvB,UAAM,SAAS,SAAS,MAAM,KAAK,OAAK,EAAE,OAAO,KAAK,EAAE;AACxD,QAAI,CAAC,OAAQ,QAAO;AAEpB,WAAO,EAAE,GAAG,QAAQ,MAAM,SAAS,KAAK,KAAK;AAAA,EAC9C;AAAA,EAEA,iBACC,UACA,WACA,mBACC;AACD,UAAM,sBAAsB,IAAI;AAAA,MAC/B,SAAS;AAAA,MACT,SAAS,MAAM;AAAA,MACf,SAAS,MAAM,wBAAwB,SAAS,MAAM;AAAA,MACtD,SAAS,MAAM;AAAA,IAChB;AACA,UAAM,iBAAiB,IAAI;AAAA,MAC1B,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf;AAAA,MACA,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO;AAAA,MAChC;AAAA,QACC,GAAI,UAAU,MAAM,YAAY,YAAY,CAAC;AAAA,QAC7C,IAAI,UAAU,MAAM,YAAY,YAAY,CAAC,GAAG,IAAI,YAAU,EAAE,GAAG,OAAO,IAAI,MAAM,EAAE;AAAA,MACvF;AAAA,IACD;AACA,UAAM,uBAAuB,IAAI,qBAAqB,iBAAiB;AACvE,UAAM,cAAc,IAAI,YAAY,SAAS,MAAM,cAAc,iBAAiB;AAClF,UAAM,cACL,SAAS,MAAM,+CACZ,IAAI,mBAAmB,UAAU,oBAAoB,UAAU,kBAAkB,IACjF,IAAI,eAAe;AACvB,UAAM,cAAc,IAAI,YAAY;AACpC,UAAM,4BAA4B,IAAI,0BAA0B;AAEhE,UAAM,eAAyC,oBAAI,IAAI;AACvD,iBAAa,wBAAyB,mBAAmB;AACzD,iBAAa,mBAAoB,cAAc;AAC/C,iBAAa,0BAA2B,oBAAoB;AAC5D,iBAAa,iBAAkB,WAAW;AAC1C,iBAAa,gCAAiC,yBAAyB;AACvE,iBAAa,iBAAkB,WAAW;AAC1C,iBAAa,iBAAkB,WAAW;AAE1C,WAAO;AAAA,EACR;AAAA,EAmBA,iBAAiB,QAAiB;AACjC,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,QAAQ;AAAA,QACP,UAAU;AAAA,UACT,OAAO,EAAE,QAAQ,CAAC,OAAO;AAAA,QAC1B;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAEO,IAAM,YAAY,YAAY,KAAK;AAEnC,IAAM,gBAAgB;AAE7B,eAAsB,cAAc,MAAW,KAAU;AACxD,SAAO;AAAA,IACN,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU,cAAc,KAAK,WAAW,GAAG;AAAA,EAC5C;AACD;",
6
+ "names": ["data", "startAngle", "endAngle", "data", "d", "td1", "td2", "td1", "td2"]
7
+ }