@sjcrh/proteinpaint-client 2.221.0 → 2.223.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2dmaf-POKWDZTU.js +1362 -0
- package/dist/AggMatrixInput-NIN3SHJR.js +402 -0
- package/dist/AggregateMatrix-SNXE2IMF.js +37 -0
- package/dist/AppHeader-AXIG4J42.js +826 -0
- package/dist/BoxPlot-EQHEGZAX.js +1229 -0
- package/dist/CorrelationVolcano-6QTXXW5F.js +613 -0
- package/dist/Cuminc-ZUG6FCOT.js +1217 -0
- package/dist/DE-24JMFZFG.js +85 -0
- package/dist/DEinput-I3EJWSOQ.js +479 -0
- package/dist/DM-FEEPIPNV.js +86 -0
- package/dist/DifferentialAnalysis-QZIHMN43.js +236 -0
- package/dist/Disco-DYEE57LX.js +3384 -0
- package/dist/Disco.UI-M7AQJEDW.js +239 -0
- package/dist/DmrPlot-4JPZAJCP.js +361 -0
- package/dist/GB-4DPUNCJG.js +1388 -0
- package/dist/GSEA-HZSZ23PR.js +870 -0
- package/dist/GeneExpInput-BBOMWGCJ.js +38 -0
- package/dist/Geomap-Z4NKGSXD.js +80 -0
- package/dist/HicApp-OO2EK4JA.js +2240 -0
- package/dist/IDCViewer-UCDVSZXN.js +10808 -0
- package/dist/NumBinaryEditor-WH5CGCRR.js +274 -0
- package/dist/NumBinaryEditor.unit.spec-GSMQ5KDY.js +308 -0
- package/dist/NumContEditor-U5PJEFJU.js +100 -0
- package/dist/NumContEditor.unit.spec-V2DKMR6V.js +160 -0
- package/dist/NumCustomBinEditor-CD5ZZMPS.js +29 -0
- package/dist/NumCustomBinEditor.unit.spec-CLLUZO3D.js +393 -0
- package/dist/NumDiscreteEditor-PRK3EBXB.js +165 -0
- package/dist/NumDiscreteEditor.unit.spec-7Q3VPQBY.js +229 -0
- package/dist/NumRegularBinEditor-6LUEZNMD.js +29 -0
- package/dist/NumRegularBinEditor.unit.spec-G75DBYIV.js +274 -0
- package/dist/NumSplineEditor-S5UMQH3W.js +205 -0
- package/dist/NumSplineEditor.unit.spec-IAFAMAWR.js +220 -0
- package/dist/NumericDensity-4VSTEQ7M.js +29 -0
- package/dist/NumericDensity.unit.spec-ECOENBRH.js +414 -0
- package/dist/NumericHandler-I7QUR75Z.js +30 -0
- package/dist/NumericHandler.unit.spec-G5OU3MK2.js +225 -0
- package/dist/ProteomeInput-UYRSZV6I.js +610 -0
- package/dist/Regression-MU3UJ242.js +1412 -0
- package/dist/RunChart2-SLP6DDBL.js +744 -0
- package/dist/SC-VSAMENAT.js +1290 -0
- package/dist/Violin-QKLXZBZW.js +1092 -0
- package/dist/Volcano-RWGO2QRK.js +2661 -0
- package/dist/Wsi-QYZERT3L.js +636 -0
- package/dist/aboutSunburst-7HC4ULZX.js +93 -0
- package/dist/aboutSunburst-7HC4ULZX.js.map +7 -0
- package/dist/adSandbox-XMTFXVQZ.js +29 -0
- package/dist/animatedBubbleChart-Y5QQYPCS.js +542 -0
- package/dist/app-IJOORVUT.js +38 -0
- package/dist/app-OBIQZWB6.js +28 -0
- package/dist/app.js +8 -8
- package/dist/bam-OCKP55BE.js +872 -0
- package/dist/barchart-6VJ5F7GM.js +38 -0
- package/dist/barchart2-LPGRRPKS.js +305 -0
- package/dist/block-MIBFGU6V.js +6203 -0
- package/dist/block.init-MPTACJCT.js +29 -0
- package/dist/block.mds.expressionrank-EZBNMSDP.js +350 -0
- package/dist/block.mds.geneboxplot-R6BS44BH.js +819 -0
- package/dist/block.mds.junction-I72SNE6D.js +1534 -0
- package/dist/block.mds.svcnv-EJXXAM7L.js +6325 -0
- package/dist/block.mds.svcnv-EJXXAM7L.js.map +7 -0
- package/dist/block.svg-7DQLMFUE.js +155 -0
- package/dist/block.tk.aicheck-MZQIZQ4R.js +274 -0
- package/dist/block.tk.bam-QKRX7QA7.js +1906 -0
- package/dist/block.tk.bigwig.ui-MREWAD2O.js +202 -0
- package/dist/block.tk.hicstraw-DO2D2XHN.js +814 -0
- package/dist/block.tk.junction-27DQ3HHI.js +2353 -0
- package/dist/block.tk.junction.textmatrixui-ODA2JU6X.js +190 -0
- package/dist/block.tk.ld-AG2T4DR6.js +90 -0
- package/dist/block.tk.menu-BIORXN3G.js +1050 -0
- package/dist/block.tk.pgv-FPGJ7HMX.js +934 -0
- package/dist/brainImaging-MDXNZ6EN.js +550 -0
- package/dist/brainRegions-SUFNAEWM.js +213 -0
- package/dist/bubbleHeatmap-JR42L4K6.js +374 -0
- package/dist/cellTypeBubbleHeatmap-36LK5SRE.js +274 -0
- package/dist/chunk-22DUWEXJ.js +2685 -0
- package/dist/chunk-22MQLGUB.js +82 -0
- package/dist/chunk-2CDIFQPW.js +299 -0
- package/dist/chunk-2JPHJFWZ.js +255 -0
- package/dist/chunk-3BXY7XEV.js +237 -0
- package/dist/chunk-4HCFRRDQ.js +243 -0
- package/dist/chunk-55SYHMGG.js +14 -0
- package/dist/chunk-5KMLFPP5.js +652 -0
- package/dist/chunk-5KMLFPP5.js.map +7 -0
- package/dist/chunk-63H45YA3.js +418 -0
- package/dist/chunk-65PBOLXP.js +468 -0
- package/dist/chunk-6HC6RVNT.js +56 -0
- package/dist/chunk-6IFQSS7D.js +35 -0
- package/dist/chunk-6QG7NWME.js +848 -0
- package/dist/chunk-754DVU6V.js +159 -0
- package/dist/chunk-7HOIT7TM.js +54 -0
- package/dist/chunk-7NYLCZY5.js +296 -0
- package/dist/chunk-7OYFMOGM.js +240 -0
- package/dist/chunk-AGM2IM3B.js +2799 -0
- package/dist/chunk-CHNPP3DV.js +466 -0
- package/dist/chunk-DJK3NKRK.js +96 -0
- package/dist/chunk-DKEH6FBC.js +123 -0
- package/dist/chunk-DRVH2UWP.js +2506 -0
- package/dist/chunk-DRVH2UWP.js.map +7 -0
- package/dist/chunk-DYBH3E6G.js +50 -0
- package/dist/chunk-EZGMD2WV.js +480 -0
- package/dist/chunk-FYBN6BAC.js +1219 -0
- package/dist/chunk-GKLDVEAQ.js +194 -0
- package/dist/chunk-GLGFZPWM.js +103 -0
- package/dist/chunk-HKXQA27S.js +305 -0
- package/dist/chunk-HKXQA27S.js.map +7 -0
- package/dist/chunk-IQX6FKY6.js +102 -0
- package/dist/chunk-IRAB3OI7.js +184 -0
- package/dist/chunk-IZPM6TWT.js +379 -0
- package/dist/chunk-J3LWRVN3.js +2334 -0
- package/dist/chunk-J6WTOB2A.js +2008 -0
- package/dist/chunk-JI75CBA6.js +70 -0
- package/dist/chunk-JP4IU7DO.js +26731 -0
- package/dist/chunk-JP4IU7DO.js.map +7 -0
- package/dist/chunk-KWY2WZAM.js +340 -0
- package/dist/chunk-LCUVGK27.js +54 -0
- package/dist/chunk-LMM4REJQ.js +626 -0
- package/dist/chunk-LVATT455.js +1253 -0
- package/dist/chunk-MU77WKSY.js +6375 -0
- package/dist/chunk-NGBO2LE3.js +4389 -0
- package/dist/chunk-OJ6IPUZC.js +56 -0
- package/dist/chunk-PMLMXEER.js +516 -0
- package/dist/chunk-Q5LG4WR3.js +2921 -0
- package/dist/chunk-Q5LG4WR3.js.map +7 -0
- package/dist/chunk-QABQ5AOR.js +134 -0
- package/dist/chunk-QHYS2QXV.js +55 -0
- package/dist/chunk-R64DV2IT.js +692 -0
- package/dist/chunk-RMLWQEWC.js +266 -0
- package/dist/chunk-RRMAUPEA.js +1339 -0
- package/dist/chunk-SFLKPHIF.js +257 -0
- package/dist/chunk-SZNEHG4C.js +5214 -0
- package/dist/chunk-TN4OMLKK.js +2102 -0
- package/dist/chunk-TYEHFGMJ.js +263 -0
- package/dist/chunk-UHFO6LHS.js +203 -0
- package/dist/chunk-UKKLAUYO.js +141 -0
- package/dist/chunk-UO5TVDSF.js +176 -0
- package/dist/chunk-VD4WX5ZG.js +550 -0
- package/dist/chunk-WAJ7U3KO.js +182 -0
- package/dist/chunk-Z4XRHSLY.js +102 -0
- package/dist/cohort-5KRENZ4T.js +66 -0
- package/dist/cohortSunburst-IRKQINDZ.js +402 -0
- package/dist/condition-SS5WC4XL.js +323 -0
- package/dist/controls-PPG5IIVK.js +30 -0
- package/dist/controls.config-URUFQC4O.js +30 -0
- package/dist/correlation-KCKJHPW4.js +91 -0
- package/dist/customdata.inputui-HDWCVQR7.js +280 -0
- package/dist/dataDownload-7OSWACMN.js +326 -0
- package/dist/databrowser.ui-ILUFKRCK.js +421 -0
- package/dist/dictionary-5VCLRD7G.js +109 -0
- package/dist/dnaMethylation-RUP4SNBG.js +29 -0
- package/dist/dnaMethylation.integration.spec-JCE46MPP.js +194 -0
- package/dist/e2pca-RRSEDWZ3.js +340 -0
- package/dist/ep-BHYT5BNH.js +1247 -0
- package/dist/expclust.gdc.spec-GARTH4AC.js +298 -0
- package/dist/facet-44CMDEC5.js +556 -0
- package/dist/gb-JOJSFSTN.js +77 -0
- package/dist/geneExpClustering-47HSKEFL.js +240 -0
- package/dist/geneExpression-GIJPTHXW.js +29 -0
- package/dist/geneExpression.unit.spec-46RP3ZSW.js +151 -0
- package/dist/geneORA-VLFKS6SV.js +269 -0
- package/dist/geneRanking-EMZ4IIGG.js +544 -0
- package/dist/geneVariant-HTYLI76A.js +289 -0
- package/dist/geneVariant-RZUBFP3H.js +32 -0
- package/dist/geneVariant.integration.spec-JZOAK5NP.js +672 -0
- package/dist/genefusion.ui-6REPOIXI.js +299 -0
- package/dist/geneset-XCU3IWX3.js +199 -0
- package/dist/genomeBrowser.spec-BGHECXFY.js +272 -0
- package/dist/grin2-73EMJO2O.js +945 -0
- package/dist/grin2-BU5DLVNV.js +66 -0
- package/dist/hierCluster-FMF56N73.js +51 -0
- package/dist/hierCluster-M57DFUAE.js +55 -0
- package/dist/hierCluster.config-LD7RO2ZV.js +32 -0
- package/dist/hierCluster.integration.spec-NTIL7TK4.js +479 -0
- package/dist/hierCluster.interactivity-SBRGGCJW.js +45 -0
- package/dist/imagePlot-AWX6T7D3.js +152 -0
- package/dist/importPlot-XH2XECDM.js +8 -0
- package/dist/isoformExpression-TLFIRYGG.js +31 -0
- package/dist/isoformExpression.unit.spec-YVKKWS4R.js +233 -0
- package/dist/junction-47ZSGPLM.js +32 -0
- package/dist/junction.unit.spec-WNYGL5VN.js +178 -0
- package/dist/launch.adhoc-PBCBXVYY.js +33 -0
- package/dist/leftlabel.sample-QWIQDLOD.js +253 -0
- package/dist/lollipop-JOK75CBR.js +162 -0
- package/dist/maf-C7YTV3GF.js +451 -0
- package/dist/maftimeline-TDXLAIUN.js +583 -0
- package/dist/matrix-5KS2L3XU.js +55 -0
- package/dist/matrix-FW4IPOIL.js +50 -0
- package/dist/matrix.config-U7NDKIBJ.js +33 -0
- package/dist/matrix.integration.spec-T5TUAFQN.js +3156 -0
- package/dist/matrix.interactivity-OTRYV6BY.js +33 -0
- package/dist/matrix.layout-VMRJ35R6.js +35 -0
- package/dist/matrix.renderers-RH4VTHVN.js +30 -0
- package/dist/matrix.sort.unit.spec-Q4YLQOMY.js +464 -0
- package/dist/matrix.sorterUi.unit.spec-QHKHT4LM.js +334 -0
- package/dist/matrix.unit.spec-GAO2IEXL.js +146 -0
- package/dist/mavb-LZZIWOAK.js +726 -0
- package/dist/mds.samplescatterplot-MCBCP3IO.js +1545 -0
- package/dist/mds.survivalplot-JV2JSH74.js +472 -0
- package/dist/multivalue-XTMXS2BA.js +79 -0
- package/dist/oncomatrix-LIK4FIQT.js +286 -0
- package/dist/oncomatrix.spec-SLZKHQ3U.js +439 -0
- package/dist/plot.2dvaf-WFZ5RK55.js +368 -0
- package/dist/plot.app-ILSKE2MB.js +32 -0
- package/dist/plot.barplot-XZ5LEEUG.js +93 -0
- package/dist/plot.boxplot-CU4SFUDO.js +142 -0
- package/dist/plot.brainImaging-4HJH347S.js +51 -0
- package/dist/plot.disco-MB4A24B5.js +98 -0
- package/dist/plot.ssgq-NCVJWHKU.js +130 -0
- package/dist/plot.vaf2cov-MUOXXUXF.js +249 -0
- package/dist/polar2-GAMBO6HG.js +228 -0
- package/dist/profileForms-QOUV435D.js +937 -0
- package/dist/profilePlot-BNUUQRVB.js +45 -0
- package/dist/proteinView-W4HQM7PX.js +1346 -0
- package/dist/proteomeCohortCompare-7QIJAKDR.js +866 -0
- package/dist/pseudbulk.unit.spec-2NQYQMD2.js +82 -0
- package/dist/pseudobulk-FKIWXQAR.js +31 -0
- package/dist/qualitative-3TVNQ2IV.js +34 -0
- package/dist/qualitative-5V3DGURI.js +241 -0
- package/dist/radar2-QO5ZN7IW.js +323 -0
- package/dist/radarFacility2-HKP42M4V.js +331 -0
- package/dist/render-O6PPL3XT.js +29 -0
- package/dist/report-K3B2IYG2.js +213 -0
- package/dist/sampleView-GKGADBRJ.js +39 -0
- package/dist/samplelst-ECNFTH35.js +114 -0
- package/dist/samplematrix-KL6BNSQF.js +2188 -0
- package/dist/sc-MRK4D7Q3.js +77 -0
- package/dist/scatter-HBTW5CDD.js +84 -0
- package/dist/scatter-ITRK6CQK.js +919 -0
- package/dist/selectGenomeWithTklst-E6TV7BOQ.js +125 -0
- package/dist/singleCellCellType-CA4MPJFG.js +29 -0
- package/dist/singleCellCellType.unit.spec-NE34HWRM.js +150 -0
- package/dist/singleCellGeneExpression-A5C7TKTF.js +29 -0
- package/dist/singleCellGeneExpression.unit.spec-NX2JMJ5C.js +144 -0
- package/dist/singleCellNumericValue-4BEKA732.js +29 -0
- package/dist/singleCellNumericValue.unit.spec-LTIDSRTE.js +412 -0
- package/dist/singleCellPlot-S4ZWVY2Z.js +44 -0
- package/dist/singlecell-NLY4ICUP.js +1562 -0
- package/dist/singlecell-RYQRJ2AK.js +77 -0
- package/dist/snp-ZWR4J3PB.js +29 -0
- package/dist/snp.unit.spec-TO5ID66F.js +167 -0
- package/dist/snplocus-GDBABG4H.js +200 -0
- package/dist/snplst-5GO3G3ZH.js +36 -0
- package/dist/spliceevent.a53ss.diagram-PVHMNV6G.js +142 -0
- package/dist/spliceevent.exonskip.diagram-ALYZWQMD.js +274 -0
- package/dist/spliceevent.noeventdiagram-XI3FRO7G.js +451 -0
- package/dist/ssGSEA-TYDOQEAB.js +29 -0
- package/dist/ssGSEA.unit.spec-WC6QAJJR.js +79 -0
- package/dist/stattable-SBWH4KGE.js +112 -0
- package/dist/studyCatalog-MXOHUMJW.js +457 -0
- package/dist/summarizeCnvGeneexp-LZ3EW4NA.js +154 -0
- package/dist/summarizeGeneexpSurvival-QLW5IZHS.js +101 -0
- package/dist/summarizeMutationCnv-L3JWXSEN.js +155 -0
- package/dist/summarizeMutationDiagnosis-K66PJUFI.js +31 -0
- package/dist/summarizeMutationSurvival-KKZU2FKQ.js +95 -0
- package/dist/summary-IHMI5H5Q.js +40 -0
- package/dist/summary.integration.spec-IWBDVJT2.js +405 -0
- package/dist/summaryInput-VC3AIG36.js +238 -0
- package/dist/sunburst-3PKTRXCA.js +274 -0
- package/dist/sunburst-VNKHAUEA.js +34 -0
- package/dist/survival-4LEJDVBC.js +1248 -0
- package/dist/survival-TYOJ55WB.js +49 -0
- package/dist/survival.integration.spec-3LXM6EOA.js +609 -0
- package/dist/svgraph-774K6DAH.js +1377 -0
- package/dist/svmr-25I2V6AN.js +3834 -0
- package/dist/swimmer-QO3Z4ZWN.js +993 -0
- package/dist/table-M64VATFA.js +192 -0
- package/dist/termCollection-E6Q2FDM3.js +247 -0
- package/dist/termCollection-OFE4KKJT.js +29 -0
- package/dist/termCollection.unit.spec-G4HGOR7B.js +295 -0
- package/dist/termCollectionFractionSelection-F2VKGR2D.js +38 -0
- package/dist/termCollectionFractionSelection.unit.spec-46XS3WMX.js +184 -0
- package/dist/tk-JBLKYKKI.js +37 -0
- package/dist/tk-UHDGIDTK.js +1193 -0
- package/dist/tp.ui-X2BJWXKN.js +1453 -0
- package/dist/tvs.categorical-ZTFJDJQU.js +28 -0
- package/dist/tvs.condition-DCDNI627.js +160 -0
- package/dist/tvs.dt-X6DES76X.js +34 -0
- package/dist/tvs.dtcnv.categorical-UPRTUO7A.js +31 -0
- package/dist/tvs.dtcnv.continuous-K3J5KKZD.js +72 -0
- package/dist/tvs.dtfusion-XV3UM2QG.js +31 -0
- package/dist/tvs.dtitd-LKYJG4XK.js +31 -0
- package/dist/tvs.dtsnvindel-KFAQGI4H.js +31 -0
- package/dist/tvs.dtsv-4NV4DRWC.js +31 -0
- package/dist/tvs.multivalue-WSSBQ7K4.js +84 -0
- package/dist/tvs.numeric-OFA6L2TA.js +32 -0
- package/dist/tvs.samplelst-W6QKXHGF.js +95 -0
- package/dist/tvs.survival-ESWYE4QM.js +110 -0
- package/dist/tvs.termCollection-3GOKKMKB.js +118 -0
- package/dist/vocabulary-6S6F2UAA.js +32 -0
- package/dist/wsi.direct-ZAOVMG5X.js +11514 -0
- package/package.json +2 -2
- package/dist/2dmaf-7YU3SNKL.js +0 -1362
- package/dist/AggMatrixInput-73CDR5FS.js +0 -402
- package/dist/AggregateMatrix-NNULVFBM.js +0 -37
- package/dist/AppHeader-EZDDLLXU.js +0 -826
- package/dist/BoxPlot-463E7CRY.js +0 -1229
- package/dist/CorrelationVolcano-LHIIMBPP.js +0 -613
- package/dist/Cuminc-UL2TCIKV.js +0 -1217
- package/dist/DE-VRFSKFDW.js +0 -85
- package/dist/DEinput-FZTQRWVC.js +0 -479
- package/dist/DM-PO7CQZNT.js +0 -86
- package/dist/DifferentialAnalysis-WK6HE3YH.js +0 -236
- package/dist/Disco-YBNQJQFG.js +0 -3384
- package/dist/Disco.UI-HC5XYBFV.js +0 -239
- package/dist/DmrPlot-7VJ5C66D.js +0 -361
- package/dist/GB-VPFQRDRO.js +0 -1388
- package/dist/GSEA-ZEJB3QZQ.js +0 -870
- package/dist/GeneExpInput-SBDDIY6G.js +0 -38
- package/dist/Geomap-23AHGP2V.js +0 -80
- package/dist/HicApp-7AQQE4CM.js +0 -2240
- package/dist/IDCViewer-NO5Q6VOB.js +0 -10808
- package/dist/NumBinaryEditor-DSRP4OOU.js +0 -274
- package/dist/NumBinaryEditor.unit.spec-TT666YL4.js +0 -308
- package/dist/NumContEditor-6CURFOCH.js +0 -100
- package/dist/NumContEditor.unit.spec-MNVCFCMP.js +0 -160
- package/dist/NumCustomBinEditor-SQRR5EFL.js +0 -29
- package/dist/NumCustomBinEditor.unit.spec-F7BZWGGT.js +0 -393
- package/dist/NumDiscreteEditor-U7Z2QNYP.js +0 -165
- package/dist/NumDiscreteEditor.unit.spec-EIEBUZCX.js +0 -229
- package/dist/NumRegularBinEditor-CVZSWN6Y.js +0 -29
- package/dist/NumRegularBinEditor.unit.spec-ZMAJOIHL.js +0 -274
- package/dist/NumSplineEditor-U43D5NBJ.js +0 -205
- package/dist/NumSplineEditor.unit.spec-C52AADTS.js +0 -220
- package/dist/NumericDensity-PUKDZOVI.js +0 -29
- package/dist/NumericDensity.unit.spec-2347S76D.js +0 -414
- package/dist/NumericHandler-3RT32PTR.js +0 -30
- package/dist/NumericHandler.unit.spec-4PADL4KZ.js +0 -225
- package/dist/ProteomeInput-NFV4FW4U.js +0 -610
- package/dist/Regression-N7M7N6G4.js +0 -1412
- package/dist/RunChart2-UPQ7C6QE.js +0 -744
- package/dist/SC-KBW2NHUV.js +0 -1290
- package/dist/Violin-GWCOP3ZF.js +0 -1092
- package/dist/Volcano-X3HT32GQ.js +0 -2661
- package/dist/Wsi-NXAEOYIS.js +0 -636
- package/dist/aboutSunburst-5EKXZV2A.js +0 -86
- package/dist/aboutSunburst-5EKXZV2A.js.map +0 -7
- package/dist/adSandbox-RPEWEEW7.js +0 -29
- package/dist/animatedBubbleChart-ILDMZRBX.js +0 -542
- package/dist/app-LOUC4J47.js +0 -28
- package/dist/app-MRKXZ6AZ.js +0 -38
- package/dist/bam-SQWPHCZZ.js +0 -872
- package/dist/barchart-CJR37234.js +0 -38
- package/dist/barchart2-QQYLTHWR.js +0 -305
- package/dist/block-GLF6QNKY.js +0 -6203
- package/dist/block.init-YJQTJIDO.js +0 -29
- package/dist/block.mds.expressionrank-GBMEI5KQ.js +0 -350
- package/dist/block.mds.geneboxplot-XWE3E5IW.js +0 -819
- package/dist/block.mds.junction-QLEHFVPE.js +0 -1534
- package/dist/block.mds.svcnv-53DTOPBC.js +0 -6413
- package/dist/block.mds.svcnv-53DTOPBC.js.map +0 -7
- package/dist/block.svg-57T37ABS.js +0 -155
- package/dist/block.tk.aicheck-6DXJTS3H.js +0 -274
- package/dist/block.tk.bam-CJFFQDNX.js +0 -1906
- package/dist/block.tk.bigwig.ui-OYIVXE2L.js +0 -202
- package/dist/block.tk.hicstraw-UKTGEBWT.js +0 -814
- package/dist/block.tk.junction-ZU5KPFQ3.js +0 -2353
- package/dist/block.tk.junction.textmatrixui-P4WXTAZR.js +0 -190
- package/dist/block.tk.ld-3PQ4O2AE.js +0 -90
- package/dist/block.tk.menu-LLITB6UA.js +0 -1050
- package/dist/block.tk.pgv-Y3FBXUO3.js +0 -934
- package/dist/brainImaging-4B3WXLNP.js +0 -550
- package/dist/brainRegions-7VLONUWN.js +0 -213
- package/dist/bubbleHeatmap-DI6GJRR6.js +0 -374
- package/dist/cellTypeBubbleHeatmap-HJY53DB2.js +0 -274
- package/dist/chunk-226MNBZ2.js +0 -240
- package/dist/chunk-2CDFU4MQ.js +0 -536
- package/dist/chunk-2CDFU4MQ.js.map +0 -7
- package/dist/chunk-2CNFGVHU.js +0 -257
- package/dist/chunk-2MC3RNKA.js +0 -2685
- package/dist/chunk-2SL4QWUS.js +0 -50
- package/dist/chunk-3KGBC5MK.js +0 -692
- package/dist/chunk-3PCRAPUV.js +0 -56
- package/dist/chunk-4DBOMSKP.js +0 -102
- package/dist/chunk-57BS6KNI.js +0 -466
- package/dist/chunk-5AXS5G4A.js +0 -2334
- package/dist/chunk-5HJG6ECV.js +0 -237
- package/dist/chunk-5ZYANHGX.js +0 -550
- package/dist/chunk-75MRUW2K.js +0 -103
- package/dist/chunk-7J3W3KCN.js +0 -255
- package/dist/chunk-7VB2BKXW.js +0 -2507
- package/dist/chunk-7VB2BKXW.js.map +0 -7
- package/dist/chunk-AIZYAKIE.js +0 -182
- package/dist/chunk-AJNFI6GA.js +0 -2008
- package/dist/chunk-BJAWDZBL.js +0 -2799
- package/dist/chunk-C6PVZVIH.js +0 -379
- package/dist/chunk-C77X5ZUV.js +0 -176
- package/dist/chunk-CUCP2GMT.js +0 -102
- package/dist/chunk-DTGAMBRJ.js +0 -134
- package/dist/chunk-DXT7GDHY.js +0 -55
- package/dist/chunk-ENPMWVWG.js +0 -5214
- package/dist/chunk-FPMJJBLV.js +0 -4389
- package/dist/chunk-H7F6DMJA.js +0 -70
- package/dist/chunk-HH3NUAR2.js +0 -96
- package/dist/chunk-HRTPGNOG.js +0 -159
- package/dist/chunk-IFPRYTS7.js +0 -848
- package/dist/chunk-IJSFSUI4.js +0 -302
- package/dist/chunk-IJSFSUI4.js.map +0 -7
- package/dist/chunk-IRQKX6DL.js +0 -263
- package/dist/chunk-JNZL7HKB.js +0 -1219
- package/dist/chunk-K3G56J5R.js +0 -299
- package/dist/chunk-KKUCG2QE.js +0 -516
- package/dist/chunk-KPXCXBNU.js +0 -626
- package/dist/chunk-LF5WBI27.js +0 -418
- package/dist/chunk-MSTYU3QO.js +0 -14
- package/dist/chunk-MWARRQT4.js +0 -141
- package/dist/chunk-MXKYPTZ7.js +0 -203
- package/dist/chunk-PRTLCJYF.js +0 -2941
- package/dist/chunk-PRTLCJYF.js.map +0 -7
- package/dist/chunk-QNCE6EOK.js +0 -82
- package/dist/chunk-RV335DF2.js +0 -266
- package/dist/chunk-SFPZUBPM.js +0 -2102
- package/dist/chunk-THAUD62Q.js +0 -1253
- package/dist/chunk-VBTBUXXX.js +0 -6375
- package/dist/chunk-VHWJK2MP.js +0 -56
- package/dist/chunk-VMK4RHV5.js +0 -54
- package/dist/chunk-WD7FZ5EE.js +0 -26536
- package/dist/chunk-WD7FZ5EE.js.map +0 -7
- package/dist/chunk-WKT7RF3C.js +0 -468
- package/dist/chunk-WXSMUSU7.js +0 -184
- package/dist/chunk-WXSX5OQJ.js +0 -296
- package/dist/chunk-WY3IORKG.js +0 -194
- package/dist/chunk-WYSOOKFJ.js +0 -480
- package/dist/chunk-XBBFFOLS.js +0 -123
- package/dist/chunk-XSRQGX5H.js +0 -340
- package/dist/chunk-YLL6CTBL.js +0 -54
- package/dist/chunk-YPBY37KD.js +0 -1339
- package/dist/chunk-YUNJBIK4.js +0 -243
- package/dist/chunk-ZAC34BZQ.js +0 -35
- package/dist/cohort-5WL6UJOS.js +0 -66
- package/dist/cohortSunburst-R3Z5KJQL.js +0 -402
- package/dist/condition-2IILUMVB.js +0 -323
- package/dist/controls-G3JITZF5.js +0 -30
- package/dist/controls.config-BO7KPPET.js +0 -30
- package/dist/correlation-CZILLVEM.js +0 -91
- package/dist/customdata.inputui-BXFQAMTR.js +0 -280
- package/dist/dataDownload-QTWR4IW7.js +0 -326
- package/dist/databrowser.ui-V2NJQF3U.js +0 -421
- package/dist/dictionary-OVAQX6R3.js +0 -109
- package/dist/dnaMethylation-DHPFRXB2.js +0 -29
- package/dist/dnaMethylation.integration.spec-PJLIRGN5.js +0 -194
- package/dist/e2pca-O7SNMJGB.js +0 -340
- package/dist/ep-NIVLKG4S.js +0 -1247
- package/dist/expclust.gdc.spec-LVCD6C43.js +0 -298
- package/dist/facet-LB4SCXE4.js +0 -556
- package/dist/gb-3IJ4NCPO.js +0 -77
- package/dist/geneExpClustering-SIAC7CMA.js +0 -240
- package/dist/geneExpression-P2TTZXN2.js +0 -29
- package/dist/geneExpression.unit.spec-Q5D6XHUF.js +0 -151
- package/dist/geneORA-PKUIJKTL.js +0 -269
- package/dist/geneRanking-ZGT5MHBV.js +0 -544
- package/dist/geneVariant-24YNANTT.js +0 -289
- package/dist/geneVariant-CDGENHWQ.js +0 -32
- package/dist/geneVariant.integration.spec-7QW4C2WO.js +0 -672
- package/dist/genefusion.ui-NVXGSBXD.js +0 -299
- package/dist/geneset-7STL6UDD.js +0 -199
- package/dist/genomeBrowser.spec-OE2CIP7I.js +0 -272
- package/dist/grin2-2HXUIY5O.js +0 -66
- package/dist/grin2-32IIJR5E.js +0 -945
- package/dist/hierCluster-MDZEI2KB.js +0 -51
- package/dist/hierCluster-T3PZUGBI.js +0 -55
- package/dist/hierCluster.config-7UN6AYGB.js +0 -32
- package/dist/hierCluster.integration.spec-DWOYVK6T.js +0 -479
- package/dist/hierCluster.interactivity-5OM6XNFG.js +0 -45
- package/dist/imagePlot-KBRXDV5G.js +0 -152
- package/dist/importPlot-DJMIC22L.js +0 -8
- package/dist/isoformExpression-SWDWADRC.js +0 -31
- package/dist/isoformExpression.unit.spec-2U5KCYBP.js +0 -233
- package/dist/junction-NMXVVGRG.js +0 -32
- package/dist/junction.unit.spec-JTGBPPN7.js +0 -178
- package/dist/launch.adhoc-YB5SKMNY.js +0 -33
- package/dist/leftlabel.sample-QKXIODCS.js +0 -253
- package/dist/lollipop-TSZ62PBH.js +0 -162
- package/dist/maf-4L5YN4CG.js +0 -451
- package/dist/maftimeline-VOYB3NY3.js +0 -583
- package/dist/matrix-IWJECVTF.js +0 -55
- package/dist/matrix-MMJAJZA7.js +0 -50
- package/dist/matrix.config-DZGOZWJS.js +0 -33
- package/dist/matrix.integration.spec-2N237E7T.js +0 -3156
- package/dist/matrix.interactivity-FL33UUKR.js +0 -33
- package/dist/matrix.layout-7SYHV3KJ.js +0 -35
- package/dist/matrix.renderers-3SIBT2RP.js +0 -30
- package/dist/matrix.sort.unit.spec-L3H44T6I.js +0 -464
- package/dist/matrix.sorterUi.unit.spec-2NRU5UFH.js +0 -334
- package/dist/matrix.unit.spec-HRZIJB6T.js +0 -146
- package/dist/mavb-ZVRQSDPS.js +0 -726
- package/dist/mds.fimo-ZKETTET7.js +0 -509
- package/dist/mds.fimo-ZKETTET7.js.map +0 -7
- package/dist/mds.samplescatterplot-ZV3UNRLP.js +0 -1545
- package/dist/mds.survivalplot-OVXZRTU4.js +0 -472
- package/dist/multivalue-6BE5IA4F.js +0 -79
- package/dist/oncomatrix-XK62NEOO.js +0 -286
- package/dist/oncomatrix.spec-YVTCHOPS.js +0 -439
- package/dist/plot.2dvaf-NUOBWMNX.js +0 -368
- package/dist/plot.app-G6IQWXTV.js +0 -32
- package/dist/plot.barplot-6QJ6HEJR.js +0 -93
- package/dist/plot.boxplot-XKQJSW2O.js +0 -142
- package/dist/plot.brainImaging-UTHFJFXU.js +0 -51
- package/dist/plot.disco-3MSCX7TM.js +0 -98
- package/dist/plot.ssgq-4KBVHF42.js +0 -130
- package/dist/plot.vaf2cov-OGUQSSDS.js +0 -249
- package/dist/polar2-V7M56GTZ.js +0 -228
- package/dist/profileForms-TS3BJLHH.js +0 -937
- package/dist/profilePlot-DP5272HR.js +0 -45
- package/dist/proteinView-K4K4SP3L.js +0 -1346
- package/dist/proteomeCohortCompare-SFWVGLFK.js +0 -866
- package/dist/pseudbulk.unit.spec-NFOA7J2C.js +0 -82
- package/dist/pseudobulk-XKZQEZ4I.js +0 -31
- package/dist/qualitative-7OSFNVI5.js +0 -241
- package/dist/qualitative-OIIN6E4Y.js +0 -34
- package/dist/radar2-AHZJKX7S.js +0 -323
- package/dist/radarFacility2-OUW6D5E7.js +0 -331
- package/dist/render-7UZSGX3Q.js +0 -29
- package/dist/report-J7HKTXZ2.js +0 -213
- package/dist/sampleView-6547OUIM.js +0 -39
- package/dist/samplelst-UHF23UEB.js +0 -114
- package/dist/samplematrix-OOKS3TMR.js +0 -2188
- package/dist/sc-WF2BLGNG.js +0 -77
- package/dist/scatter-ABCVFGRV.js +0 -84
- package/dist/scatter-WF7XM3IA.js +0 -919
- package/dist/selectGenomeWithTklst-67HU5KRB.js +0 -125
- package/dist/singleCellCellType-3FZPJ25V.js +0 -29
- package/dist/singleCellCellType.unit.spec-TOMREHWK.js +0 -150
- package/dist/singleCellGeneExpression-NQTJ5KJQ.js +0 -29
- package/dist/singleCellGeneExpression.unit.spec-ZWUQTU2N.js +0 -144
- package/dist/singleCellNumericValue-VI7H722L.js +0 -29
- package/dist/singleCellNumericValue.unit.spec-QGLHES7H.js +0 -412
- package/dist/singleCellPlot-RU5T6SJK.js +0 -44
- package/dist/singlecell-C3CJVNXP.js +0 -1562
- package/dist/singlecell-NRQZ7KC6.js +0 -77
- package/dist/snp-X6XY65VS.js +0 -29
- package/dist/snp.unit.spec-6EENK7GQ.js +0 -167
- package/dist/snplocus-R4JA6TFT.js +0 -200
- package/dist/snplst-SOWVHSXH.js +0 -36
- package/dist/spliceevent.a53ss.diagram-IRLCCVQZ.js +0 -142
- package/dist/spliceevent.exonskip.diagram-4KG7LE5D.js +0 -274
- package/dist/spliceevent.noeventdiagram-OWXAJJX7.js +0 -451
- package/dist/ssGSEA-EMOKPLMP.js +0 -29
- package/dist/ssGSEA.unit.spec-KXQ7R5WH.js +0 -79
- package/dist/stattable-H2G7MOZG.js +0 -112
- package/dist/studyCatalog-3ITQXWFL.js +0 -457
- package/dist/summarizeCnvGeneexp-ZIPU6YDY.js +0 -154
- package/dist/summarizeGeneexpSurvival-3RYU226R.js +0 -101
- package/dist/summarizeMutationCnv-RGDBUB22.js +0 -155
- package/dist/summarizeMutationDiagnosis-Z4MZE6Y4.js +0 -31
- package/dist/summarizeMutationSurvival-Z5CNRH7E.js +0 -95
- package/dist/summary-6QQCNX3B.js +0 -40
- package/dist/summary.integration.spec-3ULXTZUP.js +0 -405
- package/dist/summaryInput-4QKR34QB.js +0 -238
- package/dist/sunburst-KB3BWC72.js +0 -34
- package/dist/sunburst-XTFBHZNH.js +0 -274
- package/dist/survival-7O6ZK63E.js +0 -49
- package/dist/survival-NNCY4K6C.js +0 -1248
- package/dist/survival.integration.spec-ZYZHZAXA.js +0 -609
- package/dist/svgraph-ZLSFFEAC.js +0 -1377
- package/dist/svmr-REBBDEYM.js +0 -3834
- package/dist/swimmer-NUBRIWLI.js +0 -993
- package/dist/table-CWIQQESJ.js +0 -192
- package/dist/termCollection-7TYJSQ45.js +0 -29
- package/dist/termCollection-7Z55QNL7.js +0 -247
- package/dist/termCollection.unit.spec-LQ5MIBDH.js +0 -295
- package/dist/termCollectionFractionSelection-24DZYVDU.js +0 -38
- package/dist/termCollectionFractionSelection.unit.spec-DCV2CFS5.js +0 -184
- package/dist/tk-2WZFPRCP.js +0 -37
- package/dist/tk-QTLEYIP7.js +0 -1193
- package/dist/tp.ui-HXQX2UH4.js +0 -1453
- package/dist/tvs.categorical-4D3JI2ER.js +0 -28
- package/dist/tvs.condition-62FXFHZ5.js +0 -160
- package/dist/tvs.dt-FZSVMJOO.js +0 -34
- package/dist/tvs.dtcnv.categorical-PPFQIC42.js +0 -31
- package/dist/tvs.dtcnv.continuous-TV2IGHY4.js +0 -72
- package/dist/tvs.dtfusion-ON4BA4XJ.js +0 -31
- package/dist/tvs.dtitd-VFNROOWQ.js +0 -31
- package/dist/tvs.dtsnvindel-ZXOP37T5.js +0 -31
- package/dist/tvs.dtsv-EUHPTW7J.js +0 -31
- package/dist/tvs.multivalue-NHVXZNDI.js +0 -84
- package/dist/tvs.numeric-FPWDPO3J.js +0 -32
- package/dist/tvs.samplelst-ZZHRNUP4.js +0 -95
- package/dist/tvs.survival-F3KSG3U6.js +0 -110
- package/dist/tvs.termCollection-B37DZLDY.js +0 -118
- package/dist/vocabulary-XNE5FFDK.js +0 -32
- package/dist/wsi.direct-3YH3QGQD.js +0 -11514
- /package/dist/{2dmaf-7YU3SNKL.js.map → 2dmaf-POKWDZTU.js.map} +0 -0
- /package/dist/{AggMatrixInput-73CDR5FS.js.map → AggMatrixInput-NIN3SHJR.js.map} +0 -0
- /package/dist/{AggregateMatrix-NNULVFBM.js.map → AggregateMatrix-SNXE2IMF.js.map} +0 -0
- /package/dist/{AppHeader-EZDDLLXU.js.map → AppHeader-AXIG4J42.js.map} +0 -0
- /package/dist/{BoxPlot-463E7CRY.js.map → BoxPlot-EQHEGZAX.js.map} +0 -0
- /package/dist/{CorrelationVolcano-LHIIMBPP.js.map → CorrelationVolcano-6QTXXW5F.js.map} +0 -0
- /package/dist/{Cuminc-UL2TCIKV.js.map → Cuminc-ZUG6FCOT.js.map} +0 -0
- /package/dist/{DE-VRFSKFDW.js.map → DE-24JMFZFG.js.map} +0 -0
- /package/dist/{DEinput-FZTQRWVC.js.map → DEinput-I3EJWSOQ.js.map} +0 -0
- /package/dist/{DM-PO7CQZNT.js.map → DM-FEEPIPNV.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-WK6HE3YH.js.map → DifferentialAnalysis-QZIHMN43.js.map} +0 -0
- /package/dist/{Disco-YBNQJQFG.js.map → Disco-DYEE57LX.js.map} +0 -0
- /package/dist/{Disco.UI-HC5XYBFV.js.map → Disco.UI-M7AQJEDW.js.map} +0 -0
- /package/dist/{DmrPlot-7VJ5C66D.js.map → DmrPlot-4JPZAJCP.js.map} +0 -0
- /package/dist/{GB-VPFQRDRO.js.map → GB-4DPUNCJG.js.map} +0 -0
- /package/dist/{GSEA-ZEJB3QZQ.js.map → GSEA-HZSZ23PR.js.map} +0 -0
- /package/dist/{GeneExpInput-SBDDIY6G.js.map → GeneExpInput-BBOMWGCJ.js.map} +0 -0
- /package/dist/{Geomap-23AHGP2V.js.map → Geomap-Z4NKGSXD.js.map} +0 -0
- /package/dist/{HicApp-7AQQE4CM.js.map → HicApp-OO2EK4JA.js.map} +0 -0
- /package/dist/{IDCViewer-NO5Q6VOB.js.map → IDCViewer-UCDVSZXN.js.map} +0 -0
- /package/dist/{NumBinaryEditor-DSRP4OOU.js.map → NumBinaryEditor-WH5CGCRR.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-TT666YL4.js.map → NumBinaryEditor.unit.spec-GSMQ5KDY.js.map} +0 -0
- /package/dist/{NumContEditor-6CURFOCH.js.map → NumContEditor-U5PJEFJU.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-MNVCFCMP.js.map → NumContEditor.unit.spec-V2DKMR6V.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-SQRR5EFL.js.map → NumCustomBinEditor-CD5ZZMPS.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-F7BZWGGT.js.map → NumCustomBinEditor.unit.spec-CLLUZO3D.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-U7Z2QNYP.js.map → NumDiscreteEditor-PRK3EBXB.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-EIEBUZCX.js.map → NumDiscreteEditor.unit.spec-7Q3VPQBY.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-CVZSWN6Y.js.map → NumRegularBinEditor-6LUEZNMD.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-ZMAJOIHL.js.map → NumRegularBinEditor.unit.spec-G75DBYIV.js.map} +0 -0
- /package/dist/{NumSplineEditor-U43D5NBJ.js.map → NumSplineEditor-S5UMQH3W.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-C52AADTS.js.map → NumSplineEditor.unit.spec-IAFAMAWR.js.map} +0 -0
- /package/dist/{NumericDensity-PUKDZOVI.js.map → NumericDensity-4VSTEQ7M.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-2347S76D.js.map → NumericDensity.unit.spec-ECOENBRH.js.map} +0 -0
- /package/dist/{NumericHandler-3RT32PTR.js.map → NumericHandler-I7QUR75Z.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-4PADL4KZ.js.map → NumericHandler.unit.spec-G5OU3MK2.js.map} +0 -0
- /package/dist/{ProteomeInput-NFV4FW4U.js.map → ProteomeInput-UYRSZV6I.js.map} +0 -0
- /package/dist/{Regression-N7M7N6G4.js.map → Regression-MU3UJ242.js.map} +0 -0
- /package/dist/{RunChart2-UPQ7C6QE.js.map → RunChart2-SLP6DDBL.js.map} +0 -0
- /package/dist/{SC-KBW2NHUV.js.map → SC-VSAMENAT.js.map} +0 -0
- /package/dist/{Violin-GWCOP3ZF.js.map → Violin-QKLXZBZW.js.map} +0 -0
- /package/dist/{Volcano-X3HT32GQ.js.map → Volcano-RWGO2QRK.js.map} +0 -0
- /package/dist/{Wsi-NXAEOYIS.js.map → Wsi-QYZERT3L.js.map} +0 -0
- /package/dist/{adSandbox-RPEWEEW7.js.map → adSandbox-XMTFXVQZ.js.map} +0 -0
- /package/dist/{animatedBubbleChart-ILDMZRBX.js.map → animatedBubbleChart-Y5QQYPCS.js.map} +0 -0
- /package/dist/{app-LOUC4J47.js.map → app-IJOORVUT.js.map} +0 -0
- /package/dist/{app-MRKXZ6AZ.js.map → app-OBIQZWB6.js.map} +0 -0
- /package/dist/{bam-SQWPHCZZ.js.map → bam-OCKP55BE.js.map} +0 -0
- /package/dist/{barchart-CJR37234.js.map → barchart-6VJ5F7GM.js.map} +0 -0
- /package/dist/{barchart2-QQYLTHWR.js.map → barchart2-LPGRRPKS.js.map} +0 -0
- /package/dist/{block-GLF6QNKY.js.map → block-MIBFGU6V.js.map} +0 -0
- /package/dist/{block.init-YJQTJIDO.js.map → block.init-MPTACJCT.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-GBMEI5KQ.js.map → block.mds.expressionrank-EZBNMSDP.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-XWE3E5IW.js.map → block.mds.geneboxplot-R6BS44BH.js.map} +0 -0
- /package/dist/{block.mds.junction-QLEHFVPE.js.map → block.mds.junction-I72SNE6D.js.map} +0 -0
- /package/dist/{block.svg-57T37ABS.js.map → block.svg-7DQLMFUE.js.map} +0 -0
- /package/dist/{block.tk.aicheck-6DXJTS3H.js.map → block.tk.aicheck-MZQIZQ4R.js.map} +0 -0
- /package/dist/{block.tk.bam-CJFFQDNX.js.map → block.tk.bam-QKRX7QA7.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-OYIVXE2L.js.map → block.tk.bigwig.ui-MREWAD2O.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-UKTGEBWT.js.map → block.tk.hicstraw-DO2D2XHN.js.map} +0 -0
- /package/dist/{block.tk.junction-ZU5KPFQ3.js.map → block.tk.junction-27DQ3HHI.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-P4WXTAZR.js.map → block.tk.junction.textmatrixui-ODA2JU6X.js.map} +0 -0
- /package/dist/{block.tk.ld-3PQ4O2AE.js.map → block.tk.ld-AG2T4DR6.js.map} +0 -0
- /package/dist/{block.tk.menu-LLITB6UA.js.map → block.tk.menu-BIORXN3G.js.map} +0 -0
- /package/dist/{block.tk.pgv-Y3FBXUO3.js.map → block.tk.pgv-FPGJ7HMX.js.map} +0 -0
- /package/dist/{brainImaging-4B3WXLNP.js.map → brainImaging-MDXNZ6EN.js.map} +0 -0
- /package/dist/{brainRegions-7VLONUWN.js.map → brainRegions-SUFNAEWM.js.map} +0 -0
- /package/dist/{bubbleHeatmap-DI6GJRR6.js.map → bubbleHeatmap-JR42L4K6.js.map} +0 -0
- /package/dist/{cellTypeBubbleHeatmap-HJY53DB2.js.map → cellTypeBubbleHeatmap-36LK5SRE.js.map} +0 -0
- /package/dist/{chunk-2MC3RNKA.js.map → chunk-22DUWEXJ.js.map} +0 -0
- /package/dist/{chunk-QNCE6EOK.js.map → chunk-22MQLGUB.js.map} +0 -0
- /package/dist/{chunk-K3G56J5R.js.map → chunk-2CDIFQPW.js.map} +0 -0
- /package/dist/{chunk-7J3W3KCN.js.map → chunk-2JPHJFWZ.js.map} +0 -0
- /package/dist/{chunk-5HJG6ECV.js.map → chunk-3BXY7XEV.js.map} +0 -0
- /package/dist/{chunk-YUNJBIK4.js.map → chunk-4HCFRRDQ.js.map} +0 -0
- /package/dist/{chunk-MSTYU3QO.js.map → chunk-55SYHMGG.js.map} +0 -0
- /package/dist/{chunk-LF5WBI27.js.map → chunk-63H45YA3.js.map} +0 -0
- /package/dist/{chunk-WKT7RF3C.js.map → chunk-65PBOLXP.js.map} +0 -0
- /package/dist/{chunk-3PCRAPUV.js.map → chunk-6HC6RVNT.js.map} +0 -0
- /package/dist/{chunk-ZAC34BZQ.js.map → chunk-6IFQSS7D.js.map} +0 -0
- /package/dist/{chunk-IFPRYTS7.js.map → chunk-6QG7NWME.js.map} +0 -0
- /package/dist/{chunk-HRTPGNOG.js.map → chunk-754DVU6V.js.map} +0 -0
- /package/dist/{chunk-VMK4RHV5.js.map → chunk-7HOIT7TM.js.map} +0 -0
- /package/dist/{chunk-WXSX5OQJ.js.map → chunk-7NYLCZY5.js.map} +0 -0
- /package/dist/{chunk-226MNBZ2.js.map → chunk-7OYFMOGM.js.map} +0 -0
- /package/dist/{chunk-BJAWDZBL.js.map → chunk-AGM2IM3B.js.map} +0 -0
- /package/dist/{chunk-57BS6KNI.js.map → chunk-CHNPP3DV.js.map} +0 -0
- /package/dist/{chunk-HH3NUAR2.js.map → chunk-DJK3NKRK.js.map} +0 -0
- /package/dist/{chunk-XBBFFOLS.js.map → chunk-DKEH6FBC.js.map} +0 -0
- /package/dist/{chunk-2SL4QWUS.js.map → chunk-DYBH3E6G.js.map} +0 -0
- /package/dist/{chunk-WYSOOKFJ.js.map → chunk-EZGMD2WV.js.map} +0 -0
- /package/dist/{chunk-JNZL7HKB.js.map → chunk-FYBN6BAC.js.map} +0 -0
- /package/dist/{chunk-WY3IORKG.js.map → chunk-GKLDVEAQ.js.map} +0 -0
- /package/dist/{chunk-75MRUW2K.js.map → chunk-GLGFZPWM.js.map} +0 -0
- /package/dist/{chunk-CUCP2GMT.js.map → chunk-IQX6FKY6.js.map} +0 -0
- /package/dist/{chunk-WXSMUSU7.js.map → chunk-IRAB3OI7.js.map} +0 -0
- /package/dist/{chunk-C6PVZVIH.js.map → chunk-IZPM6TWT.js.map} +0 -0
- /package/dist/{chunk-5AXS5G4A.js.map → chunk-J3LWRVN3.js.map} +0 -0
- /package/dist/{chunk-AJNFI6GA.js.map → chunk-J6WTOB2A.js.map} +0 -0
- /package/dist/{chunk-H7F6DMJA.js.map → chunk-JI75CBA6.js.map} +0 -0
- /package/dist/{chunk-XSRQGX5H.js.map → chunk-KWY2WZAM.js.map} +0 -0
- /package/dist/{chunk-YLL6CTBL.js.map → chunk-LCUVGK27.js.map} +0 -0
- /package/dist/{chunk-KPXCXBNU.js.map → chunk-LMM4REJQ.js.map} +0 -0
- /package/dist/{chunk-THAUD62Q.js.map → chunk-LVATT455.js.map} +0 -0
- /package/dist/{chunk-VBTBUXXX.js.map → chunk-MU77WKSY.js.map} +0 -0
- /package/dist/{chunk-FPMJJBLV.js.map → chunk-NGBO2LE3.js.map} +0 -0
- /package/dist/{chunk-VHWJK2MP.js.map → chunk-OJ6IPUZC.js.map} +0 -0
- /package/dist/{chunk-KKUCG2QE.js.map → chunk-PMLMXEER.js.map} +0 -0
- /package/dist/{chunk-DTGAMBRJ.js.map → chunk-QABQ5AOR.js.map} +0 -0
- /package/dist/{chunk-DXT7GDHY.js.map → chunk-QHYS2QXV.js.map} +0 -0
- /package/dist/{chunk-3KGBC5MK.js.map → chunk-R64DV2IT.js.map} +0 -0
- /package/dist/{chunk-RV335DF2.js.map → chunk-RMLWQEWC.js.map} +0 -0
- /package/dist/{chunk-YPBY37KD.js.map → chunk-RRMAUPEA.js.map} +0 -0
- /package/dist/{chunk-2CNFGVHU.js.map → chunk-SFLKPHIF.js.map} +0 -0
- /package/dist/{chunk-ENPMWVWG.js.map → chunk-SZNEHG4C.js.map} +0 -0
- /package/dist/{chunk-SFPZUBPM.js.map → chunk-TN4OMLKK.js.map} +0 -0
- /package/dist/{chunk-IRQKX6DL.js.map → chunk-TYEHFGMJ.js.map} +0 -0
- /package/dist/{chunk-MXKYPTZ7.js.map → chunk-UHFO6LHS.js.map} +0 -0
- /package/dist/{chunk-MWARRQT4.js.map → chunk-UKKLAUYO.js.map} +0 -0
- /package/dist/{chunk-C77X5ZUV.js.map → chunk-UO5TVDSF.js.map} +0 -0
- /package/dist/{chunk-5ZYANHGX.js.map → chunk-VD4WX5ZG.js.map} +0 -0
- /package/dist/{chunk-AIZYAKIE.js.map → chunk-WAJ7U3KO.js.map} +0 -0
- /package/dist/{chunk-4DBOMSKP.js.map → chunk-Z4XRHSLY.js.map} +0 -0
- /package/dist/{cohort-5WL6UJOS.js.map → cohort-5KRENZ4T.js.map} +0 -0
- /package/dist/{cohortSunburst-R3Z5KJQL.js.map → cohortSunburst-IRKQINDZ.js.map} +0 -0
- /package/dist/{condition-2IILUMVB.js.map → condition-SS5WC4XL.js.map} +0 -0
- /package/dist/{controls-G3JITZF5.js.map → controls-PPG5IIVK.js.map} +0 -0
- /package/dist/{controls.config-BO7KPPET.js.map → controls.config-URUFQC4O.js.map} +0 -0
- /package/dist/{correlation-CZILLVEM.js.map → correlation-KCKJHPW4.js.map} +0 -0
- /package/dist/{customdata.inputui-BXFQAMTR.js.map → customdata.inputui-HDWCVQR7.js.map} +0 -0
- /package/dist/{dataDownload-QTWR4IW7.js.map → dataDownload-7OSWACMN.js.map} +0 -0
- /package/dist/{databrowser.ui-V2NJQF3U.js.map → databrowser.ui-ILUFKRCK.js.map} +0 -0
- /package/dist/{dictionary-OVAQX6R3.js.map → dictionary-5VCLRD7G.js.map} +0 -0
- /package/dist/{dnaMethylation-DHPFRXB2.js.map → dnaMethylation-RUP4SNBG.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-PJLIRGN5.js.map → dnaMethylation.integration.spec-JCE46MPP.js.map} +0 -0
- /package/dist/{e2pca-O7SNMJGB.js.map → e2pca-RRSEDWZ3.js.map} +0 -0
- /package/dist/{ep-NIVLKG4S.js.map → ep-BHYT5BNH.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-LVCD6C43.js.map → expclust.gdc.spec-GARTH4AC.js.map} +0 -0
- /package/dist/{facet-LB4SCXE4.js.map → facet-44CMDEC5.js.map} +0 -0
- /package/dist/{gb-3IJ4NCPO.js.map → gb-JOJSFSTN.js.map} +0 -0
- /package/dist/{geneExpClustering-SIAC7CMA.js.map → geneExpClustering-47HSKEFL.js.map} +0 -0
- /package/dist/{geneExpression-P2TTZXN2.js.map → geneExpression-GIJPTHXW.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-Q5D6XHUF.js.map → geneExpression.unit.spec-46RP3ZSW.js.map} +0 -0
- /package/dist/{geneORA-PKUIJKTL.js.map → geneORA-VLFKS6SV.js.map} +0 -0
- /package/dist/{geneRanking-ZGT5MHBV.js.map → geneRanking-EMZ4IIGG.js.map} +0 -0
- /package/dist/{geneVariant-24YNANTT.js.map → geneVariant-HTYLI76A.js.map} +0 -0
- /package/dist/{geneVariant-CDGENHWQ.js.map → geneVariant-RZUBFP3H.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-7QW4C2WO.js.map → geneVariant.integration.spec-JZOAK5NP.js.map} +0 -0
- /package/dist/{genefusion.ui-NVXGSBXD.js.map → genefusion.ui-6REPOIXI.js.map} +0 -0
- /package/dist/{geneset-7STL6UDD.js.map → geneset-XCU3IWX3.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-OE2CIP7I.js.map → genomeBrowser.spec-BGHECXFY.js.map} +0 -0
- /package/dist/{grin2-32IIJR5E.js.map → grin2-73EMJO2O.js.map} +0 -0
- /package/dist/{grin2-2HXUIY5O.js.map → grin2-BU5DLVNV.js.map} +0 -0
- /package/dist/{hierCluster-MDZEI2KB.js.map → hierCluster-FMF56N73.js.map} +0 -0
- /package/dist/{hierCluster-T3PZUGBI.js.map → hierCluster-M57DFUAE.js.map} +0 -0
- /package/dist/{hierCluster.config-7UN6AYGB.js.map → hierCluster.config-LD7RO2ZV.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-DWOYVK6T.js.map → hierCluster.integration.spec-NTIL7TK4.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-5OM6XNFG.js.map → hierCluster.interactivity-SBRGGCJW.js.map} +0 -0
- /package/dist/{imagePlot-KBRXDV5G.js.map → imagePlot-AWX6T7D3.js.map} +0 -0
- /package/dist/{importPlot-DJMIC22L.js.map → importPlot-XH2XECDM.js.map} +0 -0
- /package/dist/{isoformExpression-SWDWADRC.js.map → isoformExpression-TLFIRYGG.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-2U5KCYBP.js.map → isoformExpression.unit.spec-YVKKWS4R.js.map} +0 -0
- /package/dist/{junction-NMXVVGRG.js.map → junction-47ZSGPLM.js.map} +0 -0
- /package/dist/{junction.unit.spec-JTGBPPN7.js.map → junction.unit.spec-WNYGL5VN.js.map} +0 -0
- /package/dist/{launch.adhoc-YB5SKMNY.js.map → launch.adhoc-PBCBXVYY.js.map} +0 -0
- /package/dist/{leftlabel.sample-QKXIODCS.js.map → leftlabel.sample-QWIQDLOD.js.map} +0 -0
- /package/dist/{lollipop-TSZ62PBH.js.map → lollipop-JOK75CBR.js.map} +0 -0
- /package/dist/{maf-4L5YN4CG.js.map → maf-C7YTV3GF.js.map} +0 -0
- /package/dist/{maftimeline-VOYB3NY3.js.map → maftimeline-TDXLAIUN.js.map} +0 -0
- /package/dist/{matrix-IWJECVTF.js.map → matrix-5KS2L3XU.js.map} +0 -0
- /package/dist/{matrix-MMJAJZA7.js.map → matrix-FW4IPOIL.js.map} +0 -0
- /package/dist/{matrix.config-DZGOZWJS.js.map → matrix.config-U7NDKIBJ.js.map} +0 -0
- /package/dist/{matrix.integration.spec-2N237E7T.js.map → matrix.integration.spec-T5TUAFQN.js.map} +0 -0
- /package/dist/{matrix.interactivity-FL33UUKR.js.map → matrix.interactivity-OTRYV6BY.js.map} +0 -0
- /package/dist/{matrix.layout-7SYHV3KJ.js.map → matrix.layout-VMRJ35R6.js.map} +0 -0
- /package/dist/{matrix.renderers-3SIBT2RP.js.map → matrix.renderers-RH4VTHVN.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-L3H44T6I.js.map → matrix.sort.unit.spec-Q4YLQOMY.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-2NRU5UFH.js.map → matrix.sorterUi.unit.spec-QHKHT4LM.js.map} +0 -0
- /package/dist/{matrix.unit.spec-HRZIJB6T.js.map → matrix.unit.spec-GAO2IEXL.js.map} +0 -0
- /package/dist/{mavb-ZVRQSDPS.js.map → mavb-LZZIWOAK.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-ZV3UNRLP.js.map → mds.samplescatterplot-MCBCP3IO.js.map} +0 -0
- /package/dist/{mds.survivalplot-OVXZRTU4.js.map → mds.survivalplot-JV2JSH74.js.map} +0 -0
- /package/dist/{multivalue-6BE5IA4F.js.map → multivalue-XTMXS2BA.js.map} +0 -0
- /package/dist/{oncomatrix-XK62NEOO.js.map → oncomatrix-LIK4FIQT.js.map} +0 -0
- /package/dist/{oncomatrix.spec-YVTCHOPS.js.map → oncomatrix.spec-SLZKHQ3U.js.map} +0 -0
- /package/dist/{plot.2dvaf-NUOBWMNX.js.map → plot.2dvaf-WFZ5RK55.js.map} +0 -0
- /package/dist/{plot.app-G6IQWXTV.js.map → plot.app-ILSKE2MB.js.map} +0 -0
- /package/dist/{plot.barplot-6QJ6HEJR.js.map → plot.barplot-XZ5LEEUG.js.map} +0 -0
- /package/dist/{plot.boxplot-XKQJSW2O.js.map → plot.boxplot-CU4SFUDO.js.map} +0 -0
- /package/dist/{plot.brainImaging-UTHFJFXU.js.map → plot.brainImaging-4HJH347S.js.map} +0 -0
- /package/dist/{plot.disco-3MSCX7TM.js.map → plot.disco-MB4A24B5.js.map} +0 -0
- /package/dist/{plot.ssgq-4KBVHF42.js.map → plot.ssgq-NCVJWHKU.js.map} +0 -0
- /package/dist/{plot.vaf2cov-OGUQSSDS.js.map → plot.vaf2cov-MUOXXUXF.js.map} +0 -0
- /package/dist/{polar2-V7M56GTZ.js.map → polar2-GAMBO6HG.js.map} +0 -0
- /package/dist/{profileForms-TS3BJLHH.js.map → profileForms-QOUV435D.js.map} +0 -0
- /package/dist/{profilePlot-DP5272HR.js.map → profilePlot-BNUUQRVB.js.map} +0 -0
- /package/dist/{proteinView-K4K4SP3L.js.map → proteinView-W4HQM7PX.js.map} +0 -0
- /package/dist/{proteomeCohortCompare-SFWVGLFK.js.map → proteomeCohortCompare-7QIJAKDR.js.map} +0 -0
- /package/dist/{pseudbulk.unit.spec-NFOA7J2C.js.map → pseudbulk.unit.spec-2NQYQMD2.js.map} +0 -0
- /package/dist/{pseudobulk-XKZQEZ4I.js.map → pseudobulk-FKIWXQAR.js.map} +0 -0
- /package/dist/{qualitative-OIIN6E4Y.js.map → qualitative-3TVNQ2IV.js.map} +0 -0
- /package/dist/{qualitative-7OSFNVI5.js.map → qualitative-5V3DGURI.js.map} +0 -0
- /package/dist/{radar2-AHZJKX7S.js.map → radar2-QO5ZN7IW.js.map} +0 -0
- /package/dist/{radarFacility2-OUW6D5E7.js.map → radarFacility2-HKP42M4V.js.map} +0 -0
- /package/dist/{render-7UZSGX3Q.js.map → render-O6PPL3XT.js.map} +0 -0
- /package/dist/{report-J7HKTXZ2.js.map → report-K3B2IYG2.js.map} +0 -0
- /package/dist/{sampleView-6547OUIM.js.map → sampleView-GKGADBRJ.js.map} +0 -0
- /package/dist/{samplelst-UHF23UEB.js.map → samplelst-ECNFTH35.js.map} +0 -0
- /package/dist/{samplematrix-OOKS3TMR.js.map → samplematrix-KL6BNSQF.js.map} +0 -0
- /package/dist/{sc-WF2BLGNG.js.map → sc-MRK4D7Q3.js.map} +0 -0
- /package/dist/{scatter-ABCVFGRV.js.map → scatter-HBTW5CDD.js.map} +0 -0
- /package/dist/{scatter-WF7XM3IA.js.map → scatter-ITRK6CQK.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-67HU5KRB.js.map → selectGenomeWithTklst-E6TV7BOQ.js.map} +0 -0
- /package/dist/{singleCellCellType-3FZPJ25V.js.map → singleCellCellType-CA4MPJFG.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-TOMREHWK.js.map → singleCellCellType.unit.spec-NE34HWRM.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-NQTJ5KJQ.js.map → singleCellGeneExpression-A5C7TKTF.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-ZWUQTU2N.js.map → singleCellGeneExpression.unit.spec-NX2JMJ5C.js.map} +0 -0
- /package/dist/{singleCellNumericValue-VI7H722L.js.map → singleCellNumericValue-4BEKA732.js.map} +0 -0
- /package/dist/{singleCellNumericValue.unit.spec-QGLHES7H.js.map → singleCellNumericValue.unit.spec-LTIDSRTE.js.map} +0 -0
- /package/dist/{singleCellPlot-RU5T6SJK.js.map → singleCellPlot-S4ZWVY2Z.js.map} +0 -0
- /package/dist/{singlecell-C3CJVNXP.js.map → singlecell-NLY4ICUP.js.map} +0 -0
- /package/dist/{singlecell-NRQZ7KC6.js.map → singlecell-RYQRJ2AK.js.map} +0 -0
- /package/dist/{snp-X6XY65VS.js.map → snp-ZWR4J3PB.js.map} +0 -0
- /package/dist/{snp.unit.spec-6EENK7GQ.js.map → snp.unit.spec-TO5ID66F.js.map} +0 -0
- /package/dist/{snplocus-R4JA6TFT.js.map → snplocus-GDBABG4H.js.map} +0 -0
- /package/dist/{snplst-SOWVHSXH.js.map → snplst-5GO3G3ZH.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-IRLCCVQZ.js.map → spliceevent.a53ss.diagram-PVHMNV6G.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-4KG7LE5D.js.map → spliceevent.exonskip.diagram-ALYZWQMD.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-OWXAJJX7.js.map → spliceevent.noeventdiagram-XI3FRO7G.js.map} +0 -0
- /package/dist/{ssGSEA-EMOKPLMP.js.map → ssGSEA-TYDOQEAB.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-KXQ7R5WH.js.map → ssGSEA.unit.spec-WC6QAJJR.js.map} +0 -0
- /package/dist/{stattable-H2G7MOZG.js.map → stattable-SBWH4KGE.js.map} +0 -0
- /package/dist/{studyCatalog-3ITQXWFL.js.map → studyCatalog-MXOHUMJW.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-ZIPU6YDY.js.map → summarizeCnvGeneexp-LZ3EW4NA.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-3RYU226R.js.map → summarizeGeneexpSurvival-QLW5IZHS.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-RGDBUB22.js.map → summarizeMutationCnv-L3JWXSEN.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-Z4MZE6Y4.js.map → summarizeMutationDiagnosis-K66PJUFI.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-Z5CNRH7E.js.map → summarizeMutationSurvival-KKZU2FKQ.js.map} +0 -0
- /package/dist/{summary-6QQCNX3B.js.map → summary-IHMI5H5Q.js.map} +0 -0
- /package/dist/{summary.integration.spec-3ULXTZUP.js.map → summary.integration.spec-IWBDVJT2.js.map} +0 -0
- /package/dist/{summaryInput-4QKR34QB.js.map → summaryInput-VC3AIG36.js.map} +0 -0
- /package/dist/{sunburst-XTFBHZNH.js.map → sunburst-3PKTRXCA.js.map} +0 -0
- /package/dist/{sunburst-KB3BWC72.js.map → sunburst-VNKHAUEA.js.map} +0 -0
- /package/dist/{survival-NNCY4K6C.js.map → survival-4LEJDVBC.js.map} +0 -0
- /package/dist/{survival-7O6ZK63E.js.map → survival-TYOJ55WB.js.map} +0 -0
- /package/dist/{survival.integration.spec-ZYZHZAXA.js.map → survival.integration.spec-3LXM6EOA.js.map} +0 -0
- /package/dist/{svgraph-ZLSFFEAC.js.map → svgraph-774K6DAH.js.map} +0 -0
- /package/dist/{svmr-REBBDEYM.js.map → svmr-25I2V6AN.js.map} +0 -0
- /package/dist/{swimmer-NUBRIWLI.js.map → swimmer-QO3Z4ZWN.js.map} +0 -0
- /package/dist/{table-CWIQQESJ.js.map → table-M64VATFA.js.map} +0 -0
- /package/dist/{termCollection-7Z55QNL7.js.map → termCollection-E6Q2FDM3.js.map} +0 -0
- /package/dist/{termCollection-7TYJSQ45.js.map → termCollection-OFE4KKJT.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-LQ5MIBDH.js.map → termCollection.unit.spec-G4HGOR7B.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection-24DZYVDU.js.map → termCollectionFractionSelection-F2VKGR2D.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection.unit.spec-DCV2CFS5.js.map → termCollectionFractionSelection.unit.spec-46XS3WMX.js.map} +0 -0
- /package/dist/{tk-2WZFPRCP.js.map → tk-JBLKYKKI.js.map} +0 -0
- /package/dist/{tk-QTLEYIP7.js.map → tk-UHDGIDTK.js.map} +0 -0
- /package/dist/{tp.ui-HXQX2UH4.js.map → tp.ui-X2BJWXKN.js.map} +0 -0
- /package/dist/{tvs.categorical-4D3JI2ER.js.map → tvs.categorical-ZTFJDJQU.js.map} +0 -0
- /package/dist/{tvs.condition-62FXFHZ5.js.map → tvs.condition-DCDNI627.js.map} +0 -0
- /package/dist/{tvs.dt-FZSVMJOO.js.map → tvs.dt-X6DES76X.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-PPFQIC42.js.map → tvs.dtcnv.categorical-UPRTUO7A.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-TV2IGHY4.js.map → tvs.dtcnv.continuous-K3J5KKZD.js.map} +0 -0
- /package/dist/{tvs.dtfusion-ON4BA4XJ.js.map → tvs.dtfusion-XV3UM2QG.js.map} +0 -0
- /package/dist/{tvs.dtitd-VFNROOWQ.js.map → tvs.dtitd-LKYJG4XK.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-ZXOP37T5.js.map → tvs.dtsnvindel-KFAQGI4H.js.map} +0 -0
- /package/dist/{tvs.dtsv-EUHPTW7J.js.map → tvs.dtsv-4NV4DRWC.js.map} +0 -0
- /package/dist/{tvs.multivalue-NHVXZNDI.js.map → tvs.multivalue-WSSBQ7K4.js.map} +0 -0
- /package/dist/{tvs.numeric-FPWDPO3J.js.map → tvs.numeric-OFA6L2TA.js.map} +0 -0
- /package/dist/{tvs.samplelst-ZZHRNUP4.js.map → tvs.samplelst-W6QKXHGF.js.map} +0 -0
- /package/dist/{tvs.survival-F3KSG3U6.js.map → tvs.survival-ESWYE4QM.js.map} +0 -0
- /package/dist/{tvs.termCollection-B37DZLDY.js.map → tvs.termCollection-3GOKKMKB.js.map} +0 -0
- /package/dist/{vocabulary-XNE5FFDK.js.map → vocabulary-6S6F2UAA.js.map} +0 -0
- /package/dist/{wsi.direct-3YH3QGQD.js.map → wsi.direct-ZAOVMG5X.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/block.mds.svcnv.samplematrix.js", "../src/block.mds.svcnv.clickitem.js", "../src/block.mds.svcnv.legend.js", "../src/block.mds.svcnv.single.js", "../src/block.mds.svcnv.addcolumn.js", "../src/block.mds.svcnv.js"],
|
|
4
|
-
"sourcesContent": ["import * as common from '#shared/common.js'\nimport * as client from './client'\nimport { escapeHtml } from '#dom'\nimport { string2pos, invalidcoord } from './coord'\nimport { getsjcharts } from './getsjcharts'\n\n/*\n\n********************** EXPORTED\nmay_show_samplematrix_button\ncreatebutton_addfeature\ncreatenewmatrix_withafeature\n\n********************** INTERNAL\naddnewfeature_nosamplefilter\n\n\ncreated smat is stored in tk.samplematrices[]\n\ncreatebutton_addfeature():\n\tlaunches smat by a mutation, creates a feature\n\tsubsequent selection of new mutations will add features to this same smat\n\teach feature is limited to that type of mutation\n\tdoes not restrict samples\n\tthere should only be one such matrix\n\nclicking Matrix view on sample group label\n\tlaunches a smat including all types of mutation\n\trestrict samples to the group\n\tone matrix can be created for each sample group\n\tofficial only\n\neach time creating either matrix, must find out if it has already existed in samplematrices[]\ncurrently a hardcoded method of telling that is through limitsamplebyeitherannotation\n\tif this attr exists, it belongs to one of sample group\n\totherwise, it is first type\n\n\n\nhardcoded keys to identify tracks in querykey2tracks of a custom dataset\nonly used to correlate feature.querykey to its track in smat.querykey2tracks\ntheir literal value won't be used in server\n\nthis requires that, in custom dataset,\n\t*** there can be only 1 track of each type ***\n\te.g. there cannot be two svcnv tracks...\n\n*/\n\nexport const customkey_svcnv = 'svcnv'\nexport const customkey_vcf = 'vcf'\nexport const customkey_expression = 'expression'\n\nexport function createbutton_addfeature(p) {\n\t/*\n\tcreate a button for adding feature to samplematrix\n\tthe feature is underlied by m (m.dt for datatype)\n\n\tno sample filter: this feature does not restrict samples to a group\n\t*/\n\n\tconst { m, tk, block, holder } = p\n\n\tif (!m) return\n\n\tif (m.dt == common.dtcnv || m.dt == common.dtloh) {\n\t\t/*\n\t\tserver has 10mb range limit hardcoded\n\t\tto avoid embarrassment, do not show button when out of limit\n\t\t*/\n\t\tif (m.stop - m.start >= 10000000) {\n\t\t\treturn\n\t\t}\n\t}\n\n\t// generate new feature beforehand\n\tlet nf\n\n\tswitch (m.dt) {\n\t\tcase common.dtcnv:\n\t\t\tnf = {\n\t\t\t\tiscnv: 1,\n\t\t\t\tlabel: m.chr + ' ' + common.bplen(m.stop - m.start) + ' CNV',\n\t\t\t\tquerykey: tk.iscustom ? customkey_svcnv : tk.querykey,\n\t\t\t\tchr: m.chr,\n\t\t\t\tstart: m.start,\n\t\t\t\tstop: m.stop,\n\t\t\t\tvaluecutoff: tk.valueCutoff,\n\t\t\t\tfocalsizelimit: tk.bplengthUpperLimit,\n\t\t\t\tcolorgain: tk.cnvcolor.gain.str,\n\t\t\t\tcolorloss: tk.cnvcolor.loss.str\n\t\t\t}\n\t\t\tbreak\n\t\tcase common.dtloh:\n\t\t\tnf = {\n\t\t\t\tisloh: 1,\n\t\t\t\tlabel: m.chr + ' ' + common.bplen(m.stop - m.start) + ' LOH',\n\t\t\t\tquerykey: tk.iscustom ? customkey_svcnv : tk.querykey,\n\t\t\t\tchr: m.chr,\n\t\t\t\tstart: m.start,\n\t\t\t\tstop: m.stop,\n\t\t\t\tvaluecutoff: tk.segmeanValueCutoff,\n\t\t\t\tfocalsizelimit: tk.lohLengthUpperLimit,\n\t\t\t\tcolor: tk.cnvcolor.loh.str\n\t\t\t}\n\t\t\tbreak\n\t\tcase common.dtgeneexpression:\n\t\t\tif (!tk.gene2coord) {\n\t\t\t\tholder.text('tk.gene2coord missing')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst tmp = tk.gene2coord[m.genename]\n\t\t\tif (!tmp) {\n\t\t\t\tholder.text('No position for ' + m.genename)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tnf = {\n\t\t\t\tisgenevalue: 1,\n\t\t\t\tquerykey: tk.iscustom ? customkey_expression : tk.checkexpressionrank.querykey,\n\t\t\t\tgenename: m.genename,\n\t\t\t\tlabel: m.genename + ' expression',\n\t\t\t\tchr: tmp.chr,\n\t\t\t\tstart: tmp.start,\n\t\t\t\tstop: tmp.stop\n\t\t\t}\n\t\t\tbreak\n\t\tcase common.dtsnvindel:\n\t\t\tnf = {\n\t\t\t\tisvcf: 1,\n\t\t\t\tquerykey: tk.iscustom ? customkey_vcf : tk.checkvcf.querykey,\n\t\t\t\tlabel: 'Mutation at ' + m.chr + ':' + m.pos,\n\t\t\t\tchr: m.chr,\n\t\t\t\tstart: m.pos,\n\t\t\t\tstop: m.pos\n\t\t\t}\n\t\t\tbreak\n\t\tcase common.dtitd:\n\t\t\tnf = {\n\t\t\t\tisitd: 1,\n\t\t\t\tquerykey: tk.iscustom ? customkey_svcnv : tk.querykey,\n\t\t\t\tlabel: 'ITD at ' + m.chr + ':' + (m.start + 1) + '-' + (m.stop + 1),\n\t\t\t\tchr: m.chr,\n\t\t\t\tstart: m.start,\n\t\t\t\tstop: m.stop\n\t\t\t}\n\t\t\tbreak\n\t\tcase common.dtsv:\n\t\tcase common.dtfusionrna:\n\t\t\t// TODO hardcoded range +/- 1k\n\t\t\tnf = {\n\t\t\t\tissvfusion: 1,\n\t\t\t\tquerykey: tk.iscustom ? customkey_svcnv : tk.querykey,\n\t\t\t\tlabel: 'SV/fusion around ' + m._chr + ':' + (m._pos + 1),\n\t\t\t\tchr: m._chr,\n\t\t\t\tstart: Math.max(0, m._pos - 1000),\n\t\t\t\tstop: m._pos + 1000\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tconsole.log('createbutton_addfeature: unknown dt')\n\t\t\treturn\n\t}\n\n\tconst button = holder\n\t\t.append('div')\n\t\t.style('display', 'inline-block')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Add feature: ' + nf.label)\n\t\t.on('click', () => {\n\t\t\tif (p.pane) {\n\t\t\t\t// close old pane\n\t\t\t\tp.pane.pane.remove()\n\t\t\t}\n\n\t\t\taddnewfeature_nosamplefilter(nf, tk, block)\n\t\t})\n}\n\nfunction addnewfeature_nosamplefilter(nf, tk, block) {\n\t/*\n\twill generate a matrix without sample filtering\n\tif the matrix does not exist, create it;\n\totherwise, add the new feature to it\n\n\t*/\n\n\tconst smat = tk.samplematrices.find(i => !i.limitsamplebyeitherannotation) // hardcoded to use this attribute to tell\n\n\tif (!smat) {\n\t\tcreatenewmatrix_withafeature({\n\t\t\tfeature: nf,\n\t\t\ttk: tk,\n\t\t\tblock: block\n\t\t})\n\t\treturn\n\t}\n\n\t// already exists\n\tif (smat._pane.pane.style('display') == 'none') {\n\t\t// show first\n\t\tclient.appear(smat._pane.pane)\n\t}\n\n\tsmat.addnewfeature_update(nf)\n}\n\nexport async function createnewmatrix_withafeature(_p) {\n\t// create new instance\n\tconst { feature, tk, block, limitsamplebyeitherannotation, limitbysamplesetgroup } = _p\n\n\tconst pane = client.newpane({\n\t\tx: 100,\n\t\ty: 100,\n\t\tclose: () => {\n\t\t\tclient.flyindi(pane.pane, tk.config_handle)\n\t\t\tpane.pane.style('display', 'none')\n\t\t}\n\t})\n\n\tif (limitsamplebyeitherannotation) {\n\t\t// from matrix view of a sample group\n\t\tconst a = limitsamplebyeitherannotation[0]\n\t\tif (a) {\n\t\t\tpane.header.html(\n\t\t\t\t'<span style=\"font-size:.8em;opacity:.5\">' + escapeHtml(tk.name) + '</span> ' + escapeHtml(a.value)\n\t\t\t)\n\t\t}\n\t} else if (limitbysamplesetgroup) {\n\t\tpane.header.html(\n\t\t\t'<span style=\"font-size:.8em;opacity:.5\">' +\n\t\t\t\tescapeHtml(tk.name) +\n\t\t\t\t'</span> ' +\n\t\t\t\tescapeHtml(limitbysamplesetgroup.name)\n\t\t)\n\t} else {\n\t\tpane.header.text(tk.name)\n\t}\n\n\tconst arg = {\n\t\tdebugmode: block.debugmode,\n\t\tgenome: block.genome,\n\t\tfeatures: [feature],\n\t\thostURL: block.hostURL,\n\t\tlimitsamplebyeitherannotation,\n\t\tlimitbysamplesetgroup,\n\t\tjwt: block.jwt,\n\t\tholder: pane.body.append('div').style('margin', '20px')\n\t}\n\n\tif (tk.iscustom) {\n\t\targ.iscustom = 1\n\t\targ.querykey2tracks = {}\n\t\targ.querykey2tracks[customkey_svcnv] = {\n\t\t\ttype: common.tkt.mdssvcnv,\n\t\t\tfile: tk.file,\n\t\t\turl: tk.url,\n\t\t\tindexURL: tk.indexURL\n\t\t}\n\t\tif (tk.checkexpressionrank) {\n\t\t\t/*\n\t\t\tgene expression track file \"type\" is only temporary,\n\t\t\tsince in mds.queries, this data is not regarded as a track, thus has no type\n\t\t\tadd type here so server code won't break\n\t\t\t*/\n\t\t\targ.querykey2tracks[customkey_expression] = {\n\t\t\t\ttype: common.tkt.mdsexpressionrank\n\t\t\t}\n\t\t\tfor (const k in tk.checkexpressionrank) {\n\t\t\t\targ.querykey2tracks[customkey_expression][k] = tk.checkexpressionrank[k]\n\t\t\t}\n\t\t}\n\t\tif (tk.checkvcf) {\n\t\t\t// hardcoded one single vcf file\n\t\t\targ.querykey2tracks[customkey_vcf] = {\n\t\t\t\ttype: common.tkt.mdsvcf\n\t\t\t}\n\t\t\tfor (const k in tk.checkvcf) {\n\t\t\t\tif (k == 'stringifiedObj') continue\n\t\t\t\targ.querykey2tracks[customkey_vcf][k] = tk.checkvcf[k]\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// official\n\t\targ.dslabel = tk.mds.label\n\t}\n\n\t// dynamic import works with static values, not expressions\n\tif (window.location.search.includes('smx=3')) {\n\t\targ.client = client\n\t\targ.common = common\n\t\targ.string2pos = string2pos\n\t\targ.invalidcoord = invalidcoord\n\t\targ.block = import('./block.js')\n\t\tconst sjcharts = await getsjcharts()\n\t\tsjcharts.dthm(arg).then(m => {\n\t\t\tm._pane = pane\n\t\t\ttk.samplematrices.push(m)\n\t\t})\n\t} else {\n\t\timport('./samplematrix').then(_ => {\n\t\t\tconst m = new _.Samplematrix(arg)\n\t\t\tm._pane = pane\n\t\t\ttk.samplematrices.push(m)\n\t\t})\n\t}\n}\n\nexport function may_show_samplematrix_button(tk, block) {\n\t/*\n\tif samplematrix is hidden, show button in config menu\n\t*/\n\tif (!tk.samplematrices || tk.samplematrices.length == 0) return\n\n\tconst table = tk.tkconfigtip.d.append('table').style('margin-bottom', '5px')\n\n\tfor (const m of tk.samplematrices) {\n\t\tconst tr = table.append('tr')\n\n\t\t{\n\t\t\t// name\n\n\t\t\tconst words = []\n\t\t\tif (m.limitsamplebyeitherannotation) {\n\t\t\t\t// by sample group\n\t\t\t\tconst a = m.limitsamplebyeitherannotation[0]\n\t\t\t\twords.push(a.value)\n\t\t\t} else if (m.limitbysamplesetgroup) {\n\t\t\t\twords.push(m.limitbysamplesetgroup.name)\n\t\t\t} else {\n\t\t\t\t// general\n\t\t\t\twords.push('Any sample')\n\t\t\t}\n\t\t\tconst c = m.features.length\n\t\t\twords.push(c + ' feature' + (c > 1 ? 's' : ''))\n\n\t\t\twords.push(m.samples.length + ' samples')\n\n\t\t\tconst div = tr\n\t\t\t\t.append('td')\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.style('border', 'solid 1px #ededed')\n\t\t\t\t.text(words.join(', '))\n\t\t\tif (m._pane.pane.style('display') == 'none') {\n\t\t\t\tdiv.style('border-color', 'black')\n\t\t\t}\n\t\t\tdiv.on('click', () => {\n\t\t\t\tif (m._pane.pane.style('display') == 'none') {\n\t\t\t\t\tclient.appear(m._pane.pane)\n\t\t\t\t\tclient.flyindi(div, m._pane.pane)\n\t\t\t\t\tdiv.style('border-color', '#ededed')\n\t\t\t\t} else {\n\t\t\t\t\tclient.flyindi(m._pane.pane, div)\n\t\t\t\t\tclient.disappear(m._pane.pane)\n\t\t\t\t\tdiv.style('border-color', 'black')\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t{\n\t\t\t// remove\n\t\t\ttr.append('td')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.html('×')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttr.remove()\n\t\t\t\t\tm._pane.pane.remove()\n\t\t\t\t\tfor (const [i, m2] of tk.samplematrices.entries()) {\n\t\t\t\t\t\tif (m.limitsamplebyeitherannotation) {\n\t\t\t\t\t\t\tif (m2.limitsamplebyeitherannotation) {\n\t\t\t\t\t\t\t\tconst a = m.limitsamplebyeitherannotation[0]\n\t\t\t\t\t\t\t\tconst b = m2.limitsamplebyeitherannotation[0]\n\t\t\t\t\t\t\t\tif (a.key == b.key && a.value == b.value) {\n\t\t\t\t\t\t\t\t\ttk.samplematrices.splice(i, 1)\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!m2.limitsamplebyeitherannotation) {\n\t\t\t\t\t\t\t\ttk.samplematrices.splice(i, 1)\n\t\t\t\t\t\t\t\treturn\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})\n\t\t}\n\t}\n}\n", "import { select as d3select } from 'd3-selection'\nimport { axisTop } from 'd3-axis'\nimport { scaleLinear } from 'd3-scale'\nimport * as client from './client'\nimport { escapeHtml } from '#dom'\nimport * as common from '#shared/common.js'\nimport {\n\tloadTk,\n\tfocus_singlesample,\n\tdedup_sv,\n\titemname_svfusion,\n\tmulti_sample_addhighlight,\n\tmulti_sample_removehighlight\n} from './block.mds.svcnv'\nimport {\n\tcreatebutton_addfeature,\n\tcreatenewmatrix_withafeature,\n\tcustomkey_svcnv,\n\tcustomkey_vcf\n} from './block.mds.svcnv.samplematrix'\nimport { getsjcharts } from './getsjcharts'\nimport { debounce } from 'debounce'\n\n/*\n\n********************** EXPORTED\nclick_multi_singleitem\ntooltip_singleitem\nclick_multi_vcfdense\ntooltip_multi_vcfdense\nclick_multi_svdense\ntooltip_multi_svdense\ntooltip_samplegroup\nclick_samplegroup_showmenu\nclick_samplegroup_showtable\nmay_add_sampleannotation\nsvchr2html\nsvcoord2html\ndetailtable_singlesample\nmake_svgraph\nmay_allow_samplesearch\n\n********************** INTERNAL\nprinter_snvindel\nmay_show_matrixbutton\nmay_createbutton_survival_grouplab\nmatrix_view()\n\n\n*/\n\nexport async function may_allow_samplesearch(tk, block) {\n\t/*\n\tfor official track, allow search for sample\n\n\tcreate a search box for finding samples\n\n\tsingle or multi\n\n\tmay query server to see if is allowed\n\t*/\n\tif (tk.iscustom) return\n\tif (tk.singlesample) return\n\n\tconst row = tk.tkconfigtip.d.append('div').style('margin-bottom', '15px')\n\tconst input = row.append('input').attr('size', 20).attr('placeholder', 'Find sample')\n\tconst showdiv = row.append('div').style('margin-top', '10px')\n\n\tinput.on('keyup', debounce(samplesearch, 300))\n\n\tasync function samplesearch() {\n\t\tshowdiv.selectAll('*').remove()\n\n\t\tconst str = input.property('value').trim()\n\t\tif (!str) return\n\n\t\tconst par = {\n\t\t\tgenome: block.genome.name,\n\t\t\tdslabel: tk.mds.label,\n\t\t\tquerykey: tk.querykey,\n\t\t\tfindsamplename: str\n\t\t}\n\t\ttry {\n\t\t\tconst data = await client.dofetch('mdssvcnv', par)\n\n\t\t\tif (data.error) throw data.error\n\t\t\tif (!data.result) return\n\t\t\tfor (const sample of data.result) {\n\t\t\t\tconst cell = showdiv.append('div')\n\t\t\t\tcell.append('span').text(sample.name)\n\n\t\t\t\tif (sample.grouplabel) {\n\t\t\t\t\tcell.append('span').style('margin-left', '10px').style('font-size', '.7em').text(sample.grouplabel)\n\t\t\t\t}\n\n\t\t\t\tif (sample.num_assay_tracks) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t\t\t.style('background', '#bbb')\n\t\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t\t\t.text(sample.num_assay_tracks + ' track' + (sample.num_assay_tracks > 1 ? 's' : ''))\n\t\t\t\t}\n\n\t\t\t\tif (sample.disco) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t\t\t.style('background', '#bbb')\n\t\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t\t\t.text('Genome view')\n\t\t\t\t}\n\t\t\t\tif (sample.mutation_signature) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t\t\t.style('background', '#bbb')\n\t\t\t\t\t\t.style('color', 'white')\n\t\t\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t\t\t.text('Mutation signature')\n\t\t\t\t}\n\n\t\t\t\tcell.attr('class', 'sja_menuoption').on('click', () => {\n\t\t\t\t\ttk.tkconfigtip.hide()\n\n\t\t\t\t\tconst tabs = []\n\n\t\t\t\t\taddtab_sampleview(tabs, {\n\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\tblock: block,\n\t\t\t\t\t\tsample: {\n\t\t\t\t\t\t\tsamplename: sample.name\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsamplegroup: { attributes: sample.attributes }\n\t\t\t\t\t})\n\n\t\t\t\t\tmayaddtab_disco(tabs, {\n\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\tblock: block,\n\t\t\t\t\t\tsample: {\n\t\t\t\t\t\t\tsamplename: sample.name\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//samplegroup: {attributes: sample.attributes}\n\t\t\t\t\t})\n\t\t\t\t\tmayaddtab_genome(tabs, {\n\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\tblock: block,\n\t\t\t\t\t\tsample: {\n\t\t\t\t\t\t\tsamplename: sample.name\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//samplegroup: {attributes: sample.attributes}\n\t\t\t\t\t})\n\t\t\t\t\tmayaddtab_mutationsignature(tabs, sample.name, tk, block)\n\n\t\t\t\t\tif (sample.attr && tk.sampleAttribute && tk.sampleAttribute.attributes) {\n\t\t\t\t\t\ttabs.push({\n\t\t\t\t\t\t\tlabel: 'Attributes',\n\t\t\t\t\t\t\tcallback: div => {\n\t\t\t\t\t\t\t\tfor (const attr of sample.attr) {\n\t\t\t\t\t\t\t\t\tconst a = tk.sampleAttribute.attributes[attr.k]\n\t\t\t\t\t\t\t\t\tif (a) attr.k = a.label\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclient.make_table_2col(div, sample.attr)\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\tconst pane = client.newpane({ x: 100, y: 100 })\n\t\t\t\t\tpane.header.text(sample.name)\n\t\t\t\t\tclient.tab2box(pane.body.style('padding-top', '10px'), tabs)\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tclient.sayerror(showdiv, err.message || err)\n\t\t\tif (err.stack) console.log(err.stack)\n\t\t}\n\t}\n}\n\nexport function click_samplegroup_showmenu(samplegroup, tk, block) {\n\t/*\n\tofficial only, multi-sample\n\tdense or full\n\tclick sample group label in track display to show menu\n\tthis group must already has been shown\n\t*/\n\n\tif (tk.sampleset) return sampleset_showgrpmenu(samplegroup, tk, block)\n\n\tif (tk.iscustom) return\n\n\tif (!samplegroup.attributes) {\n\t\t// no attributes[], maybe unannotated samples, do not show menu for the moment\n\t\treturn\n\t}\n\n\tconst printerror = msg => client.sayerror(tk.tip2.d, msg)\n\n\tif (!tk.sampleAttribute) return printerror('tk.sampleAttribute missing')\n\tif (!tk.sampleAttribute.attributes) return printerror('tk.sampleAttribute.attributes{} missing')\n\n\ttk.tip2.d.append('div').style('margin', '4px 10px').style('font-size', '.7em').text(samplegroup.name)\n\n\ttk.tip2.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Hide')\n\t\t.on('click', () => {\n\t\t\ttk.tip2.clear()\n\t\t\tconst err = samplegroup_setShowhide(samplegroup, tk, true)\n\t\t\tif (err) {\n\t\t\t\t//return printerror(err)\n\t\t\t}\n\t\t\ttk.tip2.hide()\n\t\t\tloadTk(tk, block)\n\t\t})\n\n\ttk.tip2.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Show only')\n\t\t.on('click', () => {\n\t\t\ttk.tip2.clear()\n\t\t\tfor (const g of tk._data) {\n\t\t\t\tconst err = samplegroup_setShowhide(g, tk, true)\n\t\t\t\tif (err) {\n\t\t\t\t\t//return printerror(err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tsamplegroup_setShowhide(samplegroup, tk, false)\n\t\t\ttk.tip2.hide()\n\t\t\tloadTk(tk, block)\n\t\t})\n\n\t{\n\t\t/*\n\t\tunder the same driver attribute, any other groups are hidden?\n\t\tif so, allow to show all\n\t\t*/\n\t\tconst [err, attr, attrR] = samplegroup_getdriverattribute(samplegroup, tk)\n\t\tif (err) {\n\t\t\t// do not abort -- unannotated group of sample won't have .attributes[]\n\t\t\t// return printerror(err)\n\t\t} else if (attrR.hiddenvalues.size > 0) {\n\t\t\t// has other hidden groups\n\t\t\ttk.tip2.d\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.text('Show all')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttk.tip2.hide()\n\t\t\t\t\tattrR.hiddenvalues.clear()\n\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t})\n\t\t}\n\t}\n\n\ttk.tip2.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Table view')\n\t\t.on('click', () => {\n\t\t\ttk.tip2.hide()\n\t\t\tclick_samplegroup_showtable(samplegroup, tk, block)\n\t\t})\n\n\ttk.tip2.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Matrix view')\n\t\t.on('click', () => {\n\t\t\ttk.tip2.hide()\n\t\t\tmatrix_view(tk, block, samplegroup)\n\t\t})\n\n\tmay_show_matrixbutton(samplegroup, tk, block)\n\n\tmay_createbutton_survival_grouplab({\n\t\ttk,\n\t\tblock,\n\t\tsamplegroup,\n\t\tholder: tk.tip2.d\n\t})\n\n\tmay_createbutton_assayAvailability(tk, block, tk.tip2.d, samplegroup)\n}\n\nfunction sampleset_showgrpmenu(grp, tk, block) {\n\t// display menu for a group of sampleset\n\t// for both official and custom tracks\n\ttk.tip2.d.append('div').style('margin', '4px 10px').style('font-size', '.7em').text(grp.name)\n\ttk.tip2.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Table view')\n\t\t.on('click', () => {\n\t\t\ttk.tip2.hide()\n\t\t\tclick_samplegroup_showtable(grp, tk, block)\n\t\t})\n\ttk.tip2.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Matrix view')\n\t\t.on('click', () => {\n\t\t\ttk.tip2.hide()\n\t\t\tmatrix_view(tk, block, grp)\n\t\t})\n}\n\nfunction matrix_view(tk, block, samplegroup) {\n\t/*\n\tin group-less track (custom or official lacking config)\n\tsamplegroup will not be given, use all samples\n\t*/\n\n\tconst r = block.rglst[block.startidx]\n\tconst feature = {\n\t\tismutation: 1,\n\t\twidth: 60,\n\t\tchr: r.chr,\n\t\tstart: r.start,\n\t\tstop: r.stop,\n\t\tcnv: {\n\t\t\tvaluecutoff: tk.valueCutoff,\n\t\t\tfocalsizelimit: tk.bplengthUpperLimit\n\t\t},\n\t\tloh: {\n\t\t\tvaluecutoff: tk.segmeanValueCutoff,\n\t\t\tfocalsizelimit: tk.lohLengthUpperLimit\n\t\t},\n\t\titd: {},\n\t\tsv: {},\n\t\tfusion: {},\n\t\tsnvindel: {\n\t\t\texcludeclasses: {}\n\t\t}\n\t}\n\n\tif (tk.legend_mclass && tk.legend_mclass.hiddenvalues) {\n\t\t// hidden class and dt\n\t\tfor (const v of tk.legend_mclass.hiddenvalues) {\n\t\t\tif (typeof v == 'string') {\n\t\t\t\tfeature.snvindel.excludeclasses[v] = 1\n\t\t\t} else {\n\t\t\t\tif (v == common.dtcnv) {\n\t\t\t\t\tfeature.cnv.hidden = 1\n\t\t\t\t} else if (v == common.dtloh) {\n\t\t\t\t\tfeature.loh.hidden = 1\n\t\t\t\t} else if (v == common.dtitd) {\n\t\t\t\t\tfeature.itd.hidden = 1\n\t\t\t\t} else if (v == common.dtsv) {\n\t\t\t\t\tfeature.sv.hidden = 1\n\t\t\t\t} else if (v == common.dtfusionrna) {\n\t\t\t\t\tfeature.fusion.hidden = 1\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unknown hidden dt?? ' + v)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// label, try to use expression gene name\n\tif (tk.showinggene) {\n\t\tfeature.label = tk.showinggene\n\t} else {\n\t\tfeature.label = r.chr + ':' + r.start + '-' + r.stop\n\t}\n\n\tconst smat_arg = { tk, block, feature }\n\n\tfeature.querykeylst = []\n\n\tif (tk.iscustom) {\n\t\tif (tk.file || tk.url) feature.querykeylst.push(customkey_svcnv)\n\t\tif (tk.checkvcf) feature.querykeylst.push(customkey_vcf)\n\t} else if (tk.querykey) {\n\t\tfeature.querykeylst.push(tk.querykey)\n\t\tif (tk.checkvcf) feature.querykeylst.push(tk.checkvcf.querykey)\n\t}\n\n\tif (tk.sampleset) {\n\t\t// the group is from sampleset\n\t\tfor (const m of tk.samplematrices) {\n\t\t\tif (m.limitbysamplesetgroup && m.limitbysamplesetgroup.name == samplegroup.name) {\n\t\t\t\tclient.appear(m._pane.pane)\n\t\t\t\tm.addnewfeature_update(feature)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tsmat_arg.limitbysamplesetgroup = {\n\t\t\tname: samplegroup.name,\n\t\t\tsamples: JSON.parse(JSON.stringify(tk.sampleset.find(i => i.name == samplegroup.name).samples))\n\t\t}\n\t} else if (samplegroup.attributes) {\n\t\t// attribute that defines this group of samples\n\t\tconst attr = samplegroup.attributes[samplegroup.attributes.length - 1]\n\t\tfor (const m of tk.samplematrices) {\n\t\t\tif (m.limitsamplebyeitherannotation) {\n\t\t\t\t// hardcoded to use first attr\n\t\t\t\tconst a = m.limitsamplebyeitherannotation[0]\n\t\t\t\tif (a && a.key == attr.k && a.value == attr.kvalue) {\n\t\t\t\t\t// found the smat of this sample group\n\t\t\t\t\tclient.appear(m._pane.pane)\n\t\t\t\t\tm.addnewfeature_update(feature)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsmat_arg.limitsamplebyeitherannotation = [\n\t\t\t{\n\t\t\t\tkey: attr.k,\n\t\t\t\tvalue: attr.kvalue\n\t\t\t}\n\t\t]\n\t}\n\n\t// create new smat\n\tcreatenewmatrix_withafeature(smat_arg)\n}\n\nfunction samplegroup_getdriverattribute(g, tk) {\n\tif (!g.attributes) return ['.attributes[] missing for group ' + g.name]\n\tif (g.attributes.length == 0) return ['.attributes[] zero length for group ' + g.name]\n\tconst attribute = g.attributes[g.attributes.length - 1]\n\t/*\n\t.k\n\t.kvalue\n\t.full\n\t.fullvalue\n\n\tuse this attribute to set this group to hidden in tk.sampleAttribute \n\t*/\n\tconst attrRegister = tk.sampleAttribute.attributes[attribute.k]\n\tif (!attrRegister) return ['\"' + attribute.k + '\" not registered in sampleAttribute for group ' + g.name]\n\treturn [null, attribute, attrRegister]\n}\n\nfunction samplegroup_setShowhide(g, tk, tohide) {\n\tconst [err, attr, attrR] = samplegroup_getdriverattribute(g, tk)\n\tif (err) return err\n\tif (tohide) {\n\t\tattrR.hiddenvalues.add(attr.kvalue)\n\t} else {\n\t\tattrR.hiddenvalues.delete(attr.kvalue)\n\t}\n\treturn null\n}\n\nexport function tooltip_samplegroup(g, tk) {\n\tconst d = tk.tktip.clear().d.append('div')\n\n\tif (g.attributes) {\n\t\t// official only\n\t\tfor (const a of g.attributes) {\n\t\t\td.append('div').html(\n\t\t\t\tescapeHtml(a.kvalue) +\n\t\t\t\t\t(a.fullvalue ? ' <span style=\"opacity:.5;font-size:.8em;\">' + escapeHtml(a.fullvalue) + '</span>' : '')\n\t\t\t)\n\t\t}\n\t} else if (g.name) {\n\t\td.append('div').text(g.name)\n\t}\n\n\tconst html = [g.samples.length + ' sample' + (g.samples.length > 1 ? 's' : '')]\n\tif (g.sampletotalnum)\n\t\thtml.push(g.sampletotalnum + ' samples total, ' + Math.ceil((100 * g.samples.length) / g.sampletotalnum) + '%')\n\tif (tk.sampleset) {\n\t\t// full list of samples registered in tk.sampleset\n\t\tconst s = tk.sampleset.find(i => i.name == g.name)\n\t\tif (s) {\n\t\t\thtml.push(s.samples.length + ' samples total, ' + Math.ceil((100 * g.samples.length) / s.samples.length) + '%')\n\t\t}\n\t}\n\ttk.tktip.d.append('div').style('margin-top', '10px').style('color', '#858585').html(html.join('<br>'))\n\n\ttk.tktip.show(event.clientX, event.clientY)\n}\n\nexport function click_samplegroup_showtable(samplegroup, tk, block) {\n\t/*\n\tshow a table\n\tmulti-sample\n\tonly for native track: no group for custom track for lack of annotation\n\t*/\n\tconst pane = client.newpane({ x: event.clientX + 100, y: Math.max(100, event.clientY - 100) })\n\tpane.header.html(escapeHtml(samplegroup.name) + ' <span style=\"font-size:.7em\">' + escapeHtml(tk.name) + '</span>')\n\n\tif (samplegroup.samples.length == 1) {\n\t\t// one sample\n\n\t\tconst sample = samplegroup.samples[0]\n\n\t\tconst table = pane.body.append('table').style('margin', '10px').style('border-spacing', '4px')\n\n\t\t{\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('Sample').style('opacity', 0.5)\n\t\t\ttr.append('td').text(sample.samplename)\n\t\t}\n\t\tif (sample.sampletype) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('Sample type').style('opacity', 0.5)\n\t\t\ttr.append('td').text(sample.sampletype)\n\t\t}\n\n\t\tconst [cnvlst, svlst, lohlst, itdlst, vcflst, cnvlst0, svlst0, lohlst0, itdlst0, vcflst0] =\n\t\t\tsortitemsbytype_onesample(sample.samplename, sample.items, tk)\n\n\t\tif (cnvlst.length) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('CNV').style('opacity', 0.5)\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let i = 0; i < cnvlst.length; i++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(cnvlst[i])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: cnvlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: cnvlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (svlst.length) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('SV').style('opacity', 0.5)\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let i = 0; i < svlst.length; i++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(svlst[i])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: svlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: svlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (lohlst.length) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('LOH').style('opacity', 0.5)\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let i = 0; i < lohlst.length; i++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(lohlst[i])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: lohlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: lohlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (itdlst.length) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('ITD').style('opacity', 0.5)\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let i = 0; i < itdlst.length; i++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(itdlst[i])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: itdlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: itdlst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (vcflst.length) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('SNV/indel').style('opacity', 0.5)\n\t\t\tconst td = tr.append('td')\n\n\t\t\tfor (let i = 0; i < vcflst.length; i++) {\n\t\t\t\tconst ms = vcflst0[i].sampledata.find(j => j.sampleobj.name == sample.samplename)\n\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(vcflst[i])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: vcflst0[i],\n\t\t\t\t\t\t\tm_sample: ms,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: vcflst0[i],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tm_sample: ms,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\t// multiple samples\n\tconst table = pane.body.append('table').style('border-spacing', '2px').style('margin', '20px')\n\n\tconst hassampletype = samplegroup.samples.find(i => i.sampletype)\n\n\t// header\n\tconst tr = table.append('tr')\n\ttr.append('td').text('Sample').style('opacity', 0.5)\n\tif (hassampletype) {\n\t\ttr.append('td').text('Sample type').style('opacity', 0.5)\n\t}\n\ttr.append('td').text('CNV').style('opacity', 0.5)\n\ttr.append('td').text('SV').style('opacity', 0.5)\n\ttr.append('td').text('LOH').style('opacity', 0.5)\n\ttr.append('td').text('ITD').style('opacity', 0.5)\n\n\tif (tk.data_vcf) {\n\t\ttr.append('td').text('SNV/indel').style('opacity', 0.5)\n\t}\n\n\tfor (const [i, sample] of samplegroup.samples.entries()) {\n\t\tconst tr = table.append('tr')\n\n\t\tif (!(i % 2)) {\n\t\t\ttr.style('background', '#f1f1f1')\n\t\t}\n\n\t\ttr.append('td').text(sample.samplename)\n\n\t\tif (hassampletype) {\n\t\t\ttr.append('td').text(sample.sampletype || '')\n\t\t}\n\n\t\tconst [cnvlst, svlst, lohlst, itdlst, vcflst, cnvlst0, svlst0, lohlst0, itdlst0, vcflst0] =\n\t\t\tsortitemsbytype_onesample(sample.samplename, sample.items, tk)\n\n\t\t{\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let j = 0; j < cnvlst.length; j++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(cnvlst[j])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: cnvlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: cnvlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let j = 0; j < svlst.length; j++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(svlst[j])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: svlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: svlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let j = 0; j < lohlst.length; j++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(lohlst[j])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: lohlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: lohlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let j = 0; j < itdlst.length; j++) {\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(itdlst[j])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: itdlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: itdlst0[j],\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (tk.data_vcf) {\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (let j = 0; j < vcflst.length; j++) {\n\t\t\t\tconst ms = vcflst0[j].sampledata.find(k => k.sampleobj.name == sample.samplename)\n\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.html(vcflst[j])\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: vcflst0[j],\n\t\t\t\t\t\t\tm_sample: ms,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: vcflst0[j],\n\t\t\t\t\t\t\tm_sample: ms,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function tooltip_multi_svdense(g, tk, block) {\n\t/*\n\tmulti-sample\n\tofficial or custom\n\tdense mode\n\tmouse over a dot\n\t*/\n\n\tif (g.items.length == 1) {\n\t\tconst sv = g.items[0]\n\t\ttooltip_singleitem({\n\t\t\titem: sv,\n\t\t\tsample: sv._sample,\n\t\t\tsamplegroup: sv._samplegroup,\n\t\t\ttk: tk,\n\t\t\tblock: block\n\t\t})\n\t\treturn\n\t}\n\n\ttk.tktip.clear()\n\n\tlet grouplabel = 'Group'\n\tif (tk.groupsamplebyattr && tk.groupsamplebyattr.attrlst) {\n\t\t// passed from mds.query\n\t\tgrouplabel = tk.groupsamplebyattr.attrlst[tk.groupsamplebyattr.attrlst.length - 1].label\n\t}\n\n\tconst lst = [\n\t\t{\n\t\t\tk: grouplabel,\n\t\t\tv: g.name\n\t\t}\n\t]\n\n\tlet svnum = 0,\n\t\tfusionnum = 0\n\tfor (const i of g.items) {\n\t\tif (i.dt == common.dtsv) svnum++\n\t\telse if (i.dt == common.dtfusionrna) fusionnum++\n\t}\n\n\tif (svnum) lst.push({ k: '# of SV', v: svnum })\n\tif (fusionnum) lst.push({ k: '# of fusion', v: fusionnum })\n\n\tclient.make_table_2col(tk.tktip.d, lst)\n\ttk.tktip.show(event.clientX, event.clientY)\n}\n\nexport function click_multi_svdense(g, tk, block) {\n\t/*\n\tmulti-sample\n\tnative/custom\n\tdense\n\tclicking on a ball representing density of sv breakend\n\t*/\n\tif (g.items.length == 1) {\n\t\tconst sv = g.items[0]\n\t\tclick_multi_singleitem({\n\t\t\titem: sv,\n\t\t\tsample: sv._sample,\n\t\t\tsamplegroup: sv._samplegroup,\n\t\t\ttk: tk,\n\t\t\tblock: block\n\t\t})\n\t\treturn\n\t}\n\n\tconst pane = client.newpane({ x: event.clientX, y: event.clientY })\n\tpane.header.html(escapeHtml(g.name) + ' <span style=\"font-size:.8em\">' + escapeHtml(tk.name) + '</span>')\n\n\tconst sample2lst = new Map()\n\tfor (const i of g.items) {\n\t\tif (!sample2lst.has(i.sample)) {\n\t\t\tsample2lst.set(i.sample, {\n\t\t\t\tsv: [],\n\t\t\t\tfusion: []\n\t\t\t})\n\t\t}\n\t\tif (i.dt == common.dtsv) {\n\t\t\tsample2lst.get(i.sample).sv.push(i)\n\t\t} else if (i.dt == common.dtfusionrna) {\n\t\t\tsample2lst.get(i.sample).fusion.push(i)\n\t\t}\n\t}\n\n\tconst table = pane.body.append('table').style('border-spacing', '2px').style('margin', '10px')\n\n\tconst tr = table.append('tr')\n\ttr.append('td').text('Sample').style('font-size', '.8em').style('opacity', 0.5)\n\ttr.append('td').text('SV').style('font-size', '.8em').style('opacity', 0.5)\n\ttr.append('td').text('RNA fusion').style('font-size', '.8em').style('opacity', 0.5)\n\n\tlet j = 0\n\tfor (const [sample, so] of sample2lst) {\n\t\tconst tr = table.append('tr')\n\t\tif (!(j++ % 2)) {\n\t\t\ttr.style('background', '#f1f1f1')\n\t\t}\n\n\t\ttr.append('td').text(sample)\n\n\t\tconst td1 = tr.append('td')\n\t\tfor (const i of so.sv) {\n\t\t\tconst breakpoint = svcoord2html(i, tk)\n\n\t\t\ttd1\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t.html(\n\t\t\t\t\ti.cytogeneticname\n\t\t\t\t\t\t? escapeHtml(i.cytogeneticname) + ' <span style=\"font-size:.7em\">' + breakpoint + '</span>'\n\t\t\t\t\t\t: breakpoint\n\t\t\t\t)\n\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\titem: i,\n\t\t\t\t\t\tsample: i._sample,\n\t\t\t\t\t\tsamplegroup: i._samplegroup,\n\t\t\t\t\t\ttk: tk\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\tmulti_sample_removehighlight(i._sample)\n\t\t\t\t})\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\titem: i,\n\t\t\t\t\t\tsample: i._sample,\n\t\t\t\t\t\tsamplegroup: i._samplegroup,\n\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\tblock: block\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t}\n\n\t\tconst td2 = tr.append('td')\n\t\tfor (const i of so.fusion) {\n\t\t\ttd2\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t.html(escapeHtml(itemname_svfusion(i)) + ' <span style=\"font-size:.7em\">' + svcoord2html(i, tk) + '</span>')\n\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\titem: i,\n\t\t\t\t\t\tsample: i._sample,\n\t\t\t\t\t\tsamplegroup: i._samplegroup,\n\t\t\t\t\t\ttk: tk\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\tmulti_sample_removehighlight(i._sample)\n\t\t\t\t})\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\titem: i,\n\t\t\t\t\t\tsample: i._sample,\n\t\t\t\t\t\tsamplegroup: i._samplegroup,\n\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\tblock: block\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t}\n\t}\n}\n\nexport function click_multi_vcfdense(g, tk, block) {\n\t/*\n\tmulti-sample\n\tnative/custom\n\tdense\n\tclick on a dot representing some snvindel or itd, of same type\n\tg is a list of variants of the same class, shown as a dot\n\t*/\n\n\tconst pane = client.newpane({ x: event.clientX, y: event.clientY })\n\tpane.header.text(tk.name)\n\n\tif (g.items.length == 1) {\n\t\t// only one variant\n\t\tconst m = g.items[0]\n\n\t\tconst butrow = pane.body.append('div').style('margin', '10px')\n\n\t\tif (m.dt == common.dtsnvindel) {\n\t\t\tif (m.sampledata.length == 1) {\n\t\t\t\t// in a single sample\n\t\t\t\tpane.pane.remove()\n\t\t\t\t// sample/group should always be found\n\t\t\t\tconst [sample, samplegroup] = findsamplegroup_byvcf({\n\t\t\t\t\tm: m,\n\t\t\t\t\tm_sample: m.sampledata[0],\n\t\t\t\t\ttk: tk\n\t\t\t\t})\n\t\t\t\tconst ms = m.sampledata[0]\n\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\titem: m,\n\t\t\t\t\tm_sample: m.sampledata[0],\n\t\t\t\t\tsample: sample,\n\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\ttk: tk,\n\t\t\t\t\tblock: block\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// one snv, in multiple samples\n\t\t\t/*\n\t\t\tcreatebutton_addfeature( {\n\t\t\t\tm:m,\n\t\t\t\tholder:butrow,\n\t\t\t\ttk:tk,\n\t\t\t\tblock:block,\n\t\t\t\tpane: pane\n\t\t\t})\n\n\t\t\tmay_createbutton_survival_onemutation({\n\t\t\t\tholder: butrow,\n\t\t\t\ttk: tk,\n\t\t\t\tblock: block,\n\t\t\t\tm: m,\n\t\t\t\tsample: {\n\t\t\t\t\tsamplename: m.sampledata[0].sampleobj.name\n\t\t\t\t}\n\t\t\t})\n\t\t\t*/\n\n\t\t\tconst lst = printer_snvindel(m, tk)\n\t\t\tconst table = client.make_table_2col(pane.body, lst)\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').text('Samples').style('opacity', 0.5).attr('colspan', 2)\n\n\t\t\tconst td = tr.append('td')\n\t\t\tfor (const sm of m.sampledata) {\n\t\t\t\tconst [sample, samplegroup] = findsamplegroup_byvcf({\n\t\t\t\t\tm: m,\n\t\t\t\t\tm_sample: sm,\n\t\t\t\t\ttk: tk\n\t\t\t\t})\n\n\t\t\t\ttd.append('div')\n\t\t\t\t\t.text(sm.sampleobj.name)\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: m,\n\t\t\t\t\t\t\tm_sample: sm,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: m,\n\t\t\t\t\t\t\tm_sample: sm,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t\tmay_findmatchingsnp_printintable(m, block, table)\n\t\t} else {\n\t\t\tthrow 'Unknown dt: ' + m.dt\n\t\t}\n\t\treturn\n\t}\n\n\t/* multiple variants\n\tlist samples for each variant\n\t*/\n\n\tconst table = pane.body.append('table').style('margin-top', '10px').style('border-spacing', '4px')\n\n\tfor (const m of g.items) {\n\t\tconst tr = table.append('tr')\n\n\t\t// col 1: mutation name\n\t\ttr.append('td')\n\t\t\t.text(m.mname)\n\t\t\t.style('color', common.mclass[m.class].color)\n\t\t\t.style('font-weight', 'bold')\n\t\t\t.style('vertical-align', 'top')\n\t\t// createbutton_addfeature\n\n\t\t// col 2\n\t\t{\n\t\t\tconst td = tr.append('td')\n\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\ttd.style('opacity', '.5')\n\t\t\t\t\t.text(m.ref + ' > ' + m.alt)\n\t\t\t\t\t.style('vertical-align', 'top')\n\t\t\t}\n\t\t}\n\n\t\t// col 3\n\t\t{\n\t\t\tconst td = tr.append('td')\n\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\t// show each sample\n\n\t\t\t\tfor (const m_sample of m.sampledata) {\n\t\t\t\t\tconst [s, sg] = findsamplegroup_byvcf({\n\t\t\t\t\t\tm: m,\n\t\t\t\t\t\tm_sample: m_sample,\n\t\t\t\t\t\ttk: tk\n\t\t\t\t\t})\n\t\t\t\t\ttd.append('div')\n\t\t\t\t\t\t.text(m_sample.sampleobj.name)\n\t\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\t\titem: m,\n\t\t\t\t\t\t\t\tm_sample: m_sample,\n\t\t\t\t\t\t\t\tsample: s,\n\t\t\t\t\t\t\t\tsamplegroup: sg,\n\t\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\tmulti_sample_removehighlight(s)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\t\titem: m,\n\t\t\t\t\t\t\t\tm_sample: m_sample,\n\t\t\t\t\t\t\t\tsample: s,\n\t\t\t\t\t\t\t\tsamplegroup: sg,\n\t\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error('unknown dt: ' + m.dt)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function tooltip_multi_vcfdense(g, tk, block) {\n\t/*\n\tmulti-sample\n\tofficial or custom\n\tdense mode\n\tmouseover a dot\n\t*/\n\ttk.tktip.clear()\n\n\tif (g.items.length == 1) {\n\t\t// single variant\n\t\tconst m = g.items[0]\n\n\t\tif (m.dt == common.dtsnvindel) {\n\t\t\tif (m.sampledata.length == 1) {\n\t\t\t\t// in just one sample\n\t\t\t\tconst [sample, samplegroup] = findsamplegroup_byvcf({\n\t\t\t\t\tm: m,\n\t\t\t\t\tm_sample: m.sampledata[0],\n\t\t\t\t\ttk: tk\n\t\t\t\t})\n\t\t\t\ttooltip_singleitem({\n\t\t\t\t\titem: m,\n\t\t\t\t\tm_sample: m.sampledata[0],\n\t\t\t\t\tsample: sample,\n\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\ttk: tk,\n\t\t\t\t\tblock: block\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// multiple samples have this variant\n\t\t\tconst lst = printer_snvindel(m, tk)\n\t\t\tlst.push({\n\t\t\t\tk: 'Samples',\n\t\t\t\tv:\n\t\t\t\t\tm.sampledata.length > 10\n\t\t\t\t\t\t? m.sampledata\n\t\t\t\t\t\t\t\t.slice(0, 6)\n\t\t\t\t\t\t\t\t.map(i => i.sampleobj.name)\n\t\t\t\t\t\t\t\t.join('<br>') +\n\t\t\t\t\t\t '<br><i>... and ' +\n\t\t\t\t\t\t (m.sampledata.length - 6) +\n\t\t\t\t\t\t ' more samples</i>'\n\t\t\t\t\t\t: m.sampledata.map(i => i.sampleobj.name).join('<br>')\n\t\t\t})\n\n\t\t\tconst table = client.make_table_2col(tk.tktip.d, lst)\n\n\t\t\t// mds may indicate whether to perform snp/clinvar checking\n\t\t\tmay_findmatchingsnp_printintable(m, block, table)\n\n\t\t\ttk.tktip.show(event.clientX, event.clientY)\n\t\t} else {\n\t\t\tthrow 'unknown dt: ' + m.dt\n\t\t}\n\t\treturn\n\t}\n\n\t// multiple variants, of same class\n\ttk.tktip.d\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('margin-bottom', '5px')\n\t\t.text(g.items.length + ' ' + common.mclass[g.items[0].class].label + ' mutations, ' + g.samplecount + ' samples')\n\tconst table = tk.tktip.d.append('table').style('border-spacing', '3px')\n\tfor (const m of g.items) {\n\t\tconst tr = table.append('tr')\n\t\ttr.append('td').style('color', common.mclass[m.class].color).style('font-weight', 'bold').text(m.mname)\n\n\t\ttr.append('td')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('opacity', '.5')\n\t\t\t.text(m.ref + ' > ' + m.alt)\n\n\t\tconst td = tr.append('td').style('font-size', '.7em')\n\n\t\tif (m.dt == common.dtsnvindel) {\n\t\t\ttd.text(m.sampledata.length == 1 ? m.sampledata[0].sampleobj.name : '(' + m.sampledata.length + ' samples)')\n\t\t} else {\n\t\t\ttd.text('unknown dt: ' + m.dt)\n\t\t}\n\t}\n\n\ttk.tktip.show(event.clientX, event.clientY)\n}\n\nexport async function click_multi_singleitem(p) {\n\t/*\n\tclick on a single item, of any type\n\tlaunch a panel to show details\n\tonly in multi-sample mode, not in single-sample\n\tfor official or custom tracks\n\n\n\tp {}\n\t.item\n\t.sample\n\t.samplegroup\n\t.tk\n\t.block\n\n\tif item is snvindel, will have:\n\t\t.m_sample\n\t*/\n\n\tconst pane = client.newpane({ x: event.clientX, y: event.clientY })\n\tpane.header.text(p.tk.name)\n\n\tconst tabs = []\n\ttabs.push({\n\t\tlabel: 'Details',\n\t\tcallback: div => {\n\t\t\tp.holder = div\n\t\t\tdetailtable_singlesample(p)\n\t\t}\n\t})\n\n\taddtab_sampleview(tabs, p)\n\tmayaddtab_svgraph(tabs, p)\n\tmayaddtab_disco(tabs, p)\n\tmayaddtab_genome(tabs, p)\n\t/*\n\tcreatebutton_addfeature( {\n\t\tm: p.item,\n\t\tholder:buttonrow,\n\t\ttk: p.tk,\n\t\tblock: p.block,\n\t\tpane: pane\n\t})\n\t*/\n\tmayaddtab_mutationsignature(tabs, p.sample.samplename, p.tk, p.block)\n\tmayaddtab_survival_onemutation(tabs, {\n\t\ttk: p.tk,\n\t\tblock: p.block,\n\t\tm: p.item,\n\t\tsample: p.sample\n\t})\n\tmayaddtab_fimo(tabs, {\n\t\ttk: p.tk,\n\t\tblock: p.block,\n\t\tm: p.item,\n\t\tsample: p.sample,\n\t\tsamplegroup: p.samplegroup\n\t})\n\n\tclient.tab2box(pane.body.style('padding-top', '10px'), tabs)\n}\n\nexport function tooltip_singleitem(p) {\n\t/*\n\tmulti-sample\n\tmouse over an item\n\t*/\n\n\tmulti_sample_addhighlight(p.sample)\n\n\tp.holder = p.tk.tktip.clear().d\n\n\tdetailtable_singlesample(p)\n\n\t// show tip after content is made\n\tp.tk.tktip.show(event.clientX, event.clientY)\n}\n\nexport function detailtable_singlesample(p) {\n\t/*\n\tmulti or single\n\ta table to indicate basic info about an item from a sample\n\n\t.item\n\t.sample {}\n\t\t.samplename\n\t.samplegroup {}\n\t\t.name\n\t.tk\n\t*/\n\tconst lst = []\n\n\tif (p.sample) {\n\t\tlst.push({\n\t\t\tk: 'Sample',\n\t\t\tv: p.sample.samplename\n\t\t})\n\n\t\tmay_add_sampleannotation(p.sample.samplename, p.tk, lst)\n\t} else {\n\t\t// if in single-sample mode, won't have p.sample\n\t}\n\n\tconst m = p.item\n\n\t// mutation-level attributes\n\tlet mattr\n\n\tif (m.dt == common.dtitd) {\n\t\tlst.push({\n\t\t\tk: 'ITD',\n\t\t\tv: m.chr + ':' + (m.start + 1) + '-' + (m.stop + 1)\n\t\t})\n\n\t\tif (m.gene || m.isoform) {\n\t\t\tconst t = []\n\t\t\tif (m.gene) t.push(m.gene)\n\t\t\tif (m.isoform) t.push(m.isoform)\n\t\t\tlst.push({ k: 'Gene', v: t.join(', ') })\n\t\t}\n\n\t\tif (m.rnaduplength) {\n\t\t\tlst.push({ k: 'RNA duplicated', v: m.rnaduplength + ' bp' })\n\t\t}\n\t\tif (m.aaduplength) {\n\t\t\tlst.push({ k: 'AA duplicated', v: m.aaduplength + ' aa' })\n\t\t}\n\n\t\tmattr = m.mattr\n\t} else if (m.dt == common.dtcnv || m.dt == common.dtloh) {\n\t\tif (m.dt == common.dtloh) {\n\t\t\tlst.push({\n\t\t\t\tk: 'LOH seg.mean',\n\t\t\t\tv: m.segmean.toFixed(2)\n\t\t\t})\n\t\t} else {\n\t\t\tlst.push({\n\t\t\t\tk: 'CNV log2(ratio)',\n\t\t\t\tv:\n\t\t\t\t\t'<span style=\"padding:0px 4px;background:' +\n\t\t\t\t\t(m.value > 0 ? p.tk.cnvcolor.gain.str : p.tk.cnvcolor.loss.str) +\n\t\t\t\t\t';color:white;\">' +\n\t\t\t\t\tm.value.toFixed(2) +\n\t\t\t\t\t'</span>'\n\t\t\t})\n\t\t\tlst.push({\n\t\t\t\tk: 'Copy number',\n\t\t\t\tv: (2 * Math.pow(2, m.value)).toFixed(2)\n\t\t\t})\n\t\t}\n\n\t\tlst.push({\n\t\t\tk: 'Position',\n\t\t\tv:\n\t\t\t\tm.chr +\n\t\t\t\t':' +\n\t\t\t\t(m.start + 1) +\n\t\t\t\t'-' +\n\t\t\t\t(m.stop + 1) +\n\t\t\t\t' <span style=\"font-size:.7em\">' +\n\t\t\t\tcommon.bplen(m.stop - m.start) +\n\t\t\t\t'</span>'\n\t\t})\n\n\t\tmattr = m.mattr\n\t} else if (m.dt == common.dtsv || m.dt == common.dtfusionrna) {\n\t\t{\n\t\t\tlst.push({\n\t\t\t\tk: m.dt == common.dtsv ? 'SV' : 'RNA fusion',\n\t\t\t\tv: escapeHtml(itemname_svfusion(m)) + ' <span style=\"font-size:.7em\">' + svcoord2html(m, p.tk) + '</span>'\n\t\t\t})\n\t\t}\n\n\t\tif (m.clipreadA || m.clipreadB) {\n\t\t\tlst.push({\n\t\t\t\tk: '# clip reads',\n\t\t\t\tv:\n\t\t\t\t\t'<span style=\"font-size:.7em;opacity:.7\">A CLIP / TOTAL</span> ' +\n\t\t\t\t\t(Number.isInteger(m.clipreadA) ? m.clipreadA : '?') +\n\t\t\t\t\t' / ' +\n\t\t\t\t\t(Number.isInteger(m.totalreadA) ? m.totalreadA : '?') +\n\t\t\t\t\t'<br>' +\n\t\t\t\t\t'<span style=\"font-size:.7em;opacity:.7\">B CLIP / TOTAL</span> ' +\n\t\t\t\t\t(Number.isInteger(m.clipreadB) ? m.clipreadB : '?') +\n\t\t\t\t\t' / ' +\n\t\t\t\t\t(Number.isInteger(m.totalreadB) ? m.totalreadB : '?')\n\t\t\t})\n\t\t}\n\n\t\tmattr = m.mattr\n\t} else if (m.dt == common.dtsnvindel) {\n\t\tconst tmp = printer_snvindel(m, p.tk)\n\t\tfor (const l of tmp) lst.push(l)\n\n\t\tif (p.m_sample) {\n\t\t\t/*\n\t\t\tm_sample as from m.sampledata[]\n\n\t\t\tin vcf item, mutation-level attributes are in Formats\n\t\t\tcollect them for showing later\n\t\t\t*/\n\t\t\tmattr = {}\n\n\t\t\tconst formats = p.tk.checkvcf ? p.tk.checkvcf.format : null // format registry\n\n\t\t\tfor (const formatfield in p.m_sample) {\n\t\t\t\tif (formatfield == 'sampleobj') {\n\t\t\t\t\t// skip hardcoded attribute\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\tif this format field could be mutation signature\n\t\t\t\t*/\n\t\t\t\tif (p.tk.mds && p.tk.mds.mutation_signature) {\n\t\t\t\t\tconst sigset = p.tk.mds.mutation_signature.sets[formatfield]\n\t\t\t\t\tif (sigset) {\n\t\t\t\t\t\t// this format field is a signature\n\t\t\t\t\t\tconst key = p.m_sample[formatfield]\n\t\t\t\t\t\tconst v = sigset.signatures[key]\n\t\t\t\t\t\t// quick fix that there may be \"nodata\" as the decoy for indel\n\t\t\t\t\t\tif (!v.nodata) {\n\t\t\t\t\t\t\tconst label = v ? v.name : 'Unknown (' + key + ')'\n\t\t\t\t\t\t\tconst color = v ? v.color : 'black'\n\t\t\t\t\t\t\tlst.push({\n\t\t\t\t\t\t\t\tk: sigset.name,\n\t\t\t\t\t\t\t\tv: '<span style=\"background:' + color + '\"> </span> ' + label\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (p.tk.mutationAttribute && p.tk.mutationAttribute.attributes) {\n\t\t\t\t\t// has it; test whether this format is actually attribute\n\t\t\t\t\tif (p.tk.mutationAttribute.attributes[formatfield]) {\n\t\t\t\t\t\tmattr[formatfield] = p.m_sample[formatfield]\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\tthis format field is not declared in mds.mutationAttribute\n\t\t\t\tconfusing here\n\t\t\t\te.g. allele count\n\t\t\t\t*/\n\n\t\t\t\tconst formatdesc = formats ? formats[formatfield] : null\n\n\t\t\t\tif (formatdesc) {\n\t\t\t\t\t// if the FORMAT has per-allele value, like AD in vcf 4.2+\n\t\t\t\t\tlet isperallelevalue = formatdesc.Number == 'R' || formatdesc.Number == 'A'\n\t\t\t\t\tif (!isperallelevalue) {\n\t\t\t\t\t\tif (formatfield == 'AD') {\n\t\t\t\t\t\t\t// vcf 4.1 has AD as '.'\n\t\t\t\t\t\t\tisperallelevalue = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isperallelevalue) {\n\t\t\t\t\t\t// per allele value\n\n\t\t\t\t\t\tconst alleles = []\n\t\t\t\t\t\tconst values = []\n\t\t\t\t\t\tlet altvalue\n\n\t\t\t\t\t\t// add alt first\n\t\t\t\t\t\tfor (const ale in p.m_sample[formatfield]) {\n\t\t\t\t\t\t\tif (ale == m.ref) continue\n\t\t\t\t\t\t\talleles.push(ale)\n\t\t\t\t\t\t\taltvalue = p.m_sample[formatfield][ale]\n\t\t\t\t\t\t\tvalues.push(altvalue)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// add ref after alt\n\t\t\t\t\t\tconst refvalue = p.m_sample[formatfield][m.ref]\n\t\t\t\t\t\tif (refvalue != undefined) {\n\t\t\t\t\t\t\talleles.push(m.ref)\n\t\t\t\t\t\t\tvalues.push(refvalue)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet barsvg\n\t\t\t\t\t\tif (refvalue + altvalue > 0) {\n\t\t\t\t\t\t\tbarsvg = client.fillbar(null, { f: altvalue / (altvalue + refvalue) })\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlst.push({\n\t\t\t\t\t\t\tk: formatfield,\n\t\t\t\t\t\t\tv:\n\t\t\t\t\t\t\t\t(barsvg ? barsvg + ' ' : '') +\n\t\t\t\t\t\t\t\t'<span style=\"font-size:.8em;opacity:.5\">' +\n\t\t\t\t\t\t\t\talleles.join(' / ') +\n\t\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t\tvalues.join(' / ') +\n\t\t\t\t\t\t\t\t(formatdesc.Description\n\t\t\t\t\t\t\t\t\t? ' <span style=\"font-size:.7em;opacity:.5\">' + formatdesc.Description + '</span>'\n\t\t\t\t\t\t\t\t\t: '')\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlst.push({\n\t\t\t\t\tk: formatfield,\n\t\t\t\t\tv: p.m_sample[formatfield]\n\t\t\t\t})\n\t\t\t}\n\t\t\t// mutation attributes are FORMAT in vcf, already shown above\n\t\t}\n\t} else {\n\t\tlst.push({ k: 'Unknown dt!!', v: m.dt })\n\t}\n\n\tif (mattr) {\n\t\t// show mutation-level attributes, won't do here for vcf stuff\n\t\tfor (const key in mattr) {\n\t\t\tconst attr = p.tk.mutationAttribute ? p.tk.mutationAttribute.attributes[key] : null\n\t\t\tconst vstr = mattr[key]\n\n\t\t\tif (attr) {\n\t\t\t\tif (attr.appendto_link) {\n\t\t\t\t\t// quick fix for pmid\n\n\t\t\t\t\tif (!vstr) {\n\t\t\t\t\t\t// no value\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tlst.push({\n\t\t\t\t\t\tk: attr.label,\n\t\t\t\t\t\tv: vstr\n\t\t\t\t\t\t\t.split(',')\n\t\t\t\t\t\t\t.map(id => '<a target=_blank href=' + attr.appendto_link + id + '>' + id + '</a>')\n\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (attr.values) {\n\t\t\t\t\t// values is optional\n\t\t\t\t\tconst vv = attr.values[vstr]\n\t\t\t\t\tif (vv) {\n\t\t\t\t\t\tlst.push({\n\t\t\t\t\t\t\tk: attr.label,\n\t\t\t\t\t\t\tv:\n\t\t\t\t\t\t\t\tescapeHtml(vv.name) +\n\t\t\t\t\t\t\t\t(vv.label ? ' <span style=\"font-size:.7em;opacity:.5\">' + escapeHtml(vv.label) + '</span>' : '')\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// no attr.values{} or unregistered value\n\t\t\t\tlst.push({\n\t\t\t\t\tk: attr.label,\n\t\t\t\t\tv: vstr\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tlst.push({\n\t\t\t\t\tk: key,\n\t\t\t\t\tv: vstr\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tmayaddexpressionrank(p, lst)\n\n\tconst table = client.make_table_2col(p.holder, lst)\n\n\tif (m.dt == common.dtsnvindel) {\n\t\tmay_findmatchingsnp_printintable(m, p.block, table)\n\t}\n}\n\nfunction mayaddexpressionrank(p, lines) {\n\tconst tk = p.tk\n\tif (!tk) return\n\tconst sample = p.sample\n\tif (!sample) return\n\tif (!sample.expressionrank) return\n\n\t// one gene per row\n\tconst rows = []\n\n\tfor (const genename in sample.expressionrank) {\n\t\tconst v = sample.expressionrank[genename]\n\t\tconst lst = [\n\t\t\t'<tr>' +\n\t\t\t\t'<td><b>' +\n\t\t\t\tgenename +\n\t\t\t\t'</b></td>' +\n\t\t\t\t'<td> <span style=\"font-size:.7em\">RANK</span> ' +\n\t\t\t\tclient.ranksays(v.rank) +\n\t\t\t\t'</td>' +\n\t\t\t\t'<td> <span style=\"font-size:.7em\">' +\n\t\t\t\ttk.gecfg.datatype +\n\t\t\t\t'</span> ' +\n\t\t\t\tv.value +\n\t\t\t\t'</td>' +\n\t\t\t\t'<td>'\n\t\t]\n\n\t\tif (v.estat) {\n\t\t\tif (v.estat.ase_uncertain) {\n\t\t\t\tlst.push(\n\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\ttk.gecfg.ase.color_uncertain +\n\t\t\t\t\t\t';color:white\">ASE uncertain</span>'\n\t\t\t\t)\n\t\t\t} else if (v.estat.ase_biallelic) {\n\t\t\t\tlst.push(\n\t\t\t\t\t'<span style=\"padding:0px 5px;background:' + tk.gecfg.ase.color_biallelic + ';color:white\">Bi-allelic</span>'\n\t\t\t\t)\n\t\t\t} else if (v.estat.ase_monoallelic) {\n\t\t\t\tlst.push(\n\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\ttk.gecfg.ase.color_monoallelic +\n\t\t\t\t\t\t';color:white\">Mono-allelic</span>'\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (v.estat.outlier) {\n\t\t\t\tlst.push(\n\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\ttk.gecfg.outlier.color_outlier +\n\t\t\t\t\t\t';color:white\">Outlier HIGH</span>'\n\t\t\t\t)\n\t\t\t} else if (v.estat.outlier_asehigh) {\n\t\t\t\tlst.push(\n\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\ttk.gecfg.outlier.color_outlier_asehigh +\n\t\t\t\t\t\t';color:white\">ASE HIGH</span>'\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tlst.push('</td></tr>')\n\t\trows.push(lst.join(''))\n\t}\n\n\tif (tk.gecfg && tk.gecfg.fixed) {\n\t\tfor (const fgene of tk.gecfg.fixed) {\n\t\t\tif (fgene.sample2rank && fgene.sample2rank[sample.samplename]) {\n\t\t\t\tconst v = fgene.sample2rank[sample.samplename]\n\t\t\t\tconst lst = [\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td><b>' +\n\t\t\t\t\t\tfgene.gene +\n\t\t\t\t\t\t'</b></td>' +\n\t\t\t\t\t\t'<td> <span style=\"font-size:.7em\">RANK</span> ' +\n\t\t\t\t\t\tclient.ranksays(v.rank) +\n\t\t\t\t\t\t'</td>' +\n\t\t\t\t\t\t'<td> <span style=\"font-size:.7em\">' +\n\t\t\t\t\t\ttk.gecfg.datatype +\n\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\tv.value +\n\t\t\t\t\t\t'</td>' +\n\t\t\t\t\t\t'<td>'\n\t\t\t\t]\n\n\t\t\t\tif (v.estat) {\n\t\t\t\t\tif (v.estat.ase_uncertain) {\n\t\t\t\t\t\tlst.push(\n\t\t\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\t\t\ttk.gecfg.ase.color_uncertain +\n\t\t\t\t\t\t\t\t';color:white\">ASE uncertain</span>'\n\t\t\t\t\t\t)\n\t\t\t\t\t} else if (v.estat.ase_biallelic) {\n\t\t\t\t\t\tlst.push(\n\t\t\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\t\t\ttk.gecfg.ase.color_biallelic +\n\t\t\t\t\t\t\t\t';color:white\">Bi-allelic</span>'\n\t\t\t\t\t\t)\n\t\t\t\t\t} else if (v.estat.ase_monoallelic) {\n\t\t\t\t\t\tlst.push(\n\t\t\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\t\t\ttk.gecfg.ase.color_monoallelic +\n\t\t\t\t\t\t\t\t';color:white\">Mono-allelic</span>'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tif (v.estat.outlier) {\n\t\t\t\t\t\tlst.push(\n\t\t\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\t\t\ttk.gecfg.outlier.color_outlier +\n\t\t\t\t\t\t\t\t';color:white\">Outlier HIGH</span>'\n\t\t\t\t\t\t)\n\t\t\t\t\t} else if (v.estat.outlier_asehigh) {\n\t\t\t\t\t\tlst.push(\n\t\t\t\t\t\t\t'<span style=\"padding:0px 5px;background:' +\n\t\t\t\t\t\t\t\ttk.gecfg.outlier.color_outlier_asehigh +\n\t\t\t\t\t\t\t\t';color:white\">ASE HIGH</span>'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlst.push('</td></tr>')\n\t\t\t\trows.push(lst.join(''))\n\t\t\t}\n\t\t}\n\t}\n\n\tif (rows.length) {\n\t\tlines.push({\n\t\t\tk: 'Expression',\n\t\t\tv: '<table style=\"font-size:.9em\">' + rows.join('') + '</table>'\n\t\t})\n\t}\n}\n\nfunction printer_snvindel(m, tk) {\n\t/*\n\tshow attributes for a single variant\n\tmay show INFO if they are used for filtering\n\t*/\n\n\tconst lst = []\n\n\t{\n\t\t// somehow mname may be abscent from vep annotation\n\t\tconst _c = common.mclass[m.class]\n\t\tlst.push({\n\t\t\tk: 'Mutation',\n\t\t\tv:\n\t\t\t\t(m.mname ? '<span style=\"color:' + _c.color + '\">' + m.mname + '</span>' : '') +\n\t\t\t\t' <span style=\"font-size:.7em\">' +\n\t\t\t\t_c.label +\n\t\t\t\t'</span>'\n\t\t})\n\t}\n\n\t{\n\t\tconst phrases = []\n\t\tif (m.gene) phrases.push(m.gene)\n\t\tif (m.isoform) phrases.push(m.isoform)\n\t\tif (phrases.length) {\n\t\t\tlst.push({\n\t\t\t\tk: 'Gene',\n\t\t\t\tv: phrases.join(' ')\n\t\t\t})\n\t\t}\n\t}\n\n\tlst.push({\n\t\tk: 'Position',\n\t\tv: m.chr + ':' + (m.pos + 1)\n\t})\n\tlst.push({\n\t\tk: 'Alleles',\n\t\tv: '<span style=\"font-size:.8em;opacity:.5\">REF/ALT</span> ' + m.ref + ' / ' + m.alt\n\t})\n\n\tif (tk && tk.alleleAttribute && tk.alleleAttribute.attributes) {\n\t\tfor (const key in tk.alleleAttribute.attributes) {\n\t\t\tconst attr = tk.alleleAttribute.attributes[key]\n\t\t\tlst.push({\n\t\t\t\tk: attr.label,\n\t\t\t\tv: m.altinfo ? m.altinfo[key] : ''\n\t\t\t})\n\t\t}\n\t}\n\n\tif (tk && tk.locusAttribute && tk.locusAttribute.attributes) {\n\t\tfor (const key in tk.locusAttribute.attributes) {\n\t\t\tconst attr = tk.locusAttribute.attributes[key]\n\n\t\t\tconst vstr = m.info ? m.info[key] : ''\n\n\t\t\t// locus attribute support adding hyper links\n\t\t\tif (attr.appendto_link) {\n\t\t\t\tif (!vstr) {\n\t\t\t\t\t// no value, do not add link\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlst.push({\n\t\t\t\t\tk: attr.label,\n\t\t\t\t\tv: vstr\n\t\t\t\t\t\t.split(',')\n\t\t\t\t\t\t.map(id => '<a target=_blank href=' + attr.appendto_link + id + '>' + id + '</a>')\n\t\t\t\t\t\t.join(' ')\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlst.push({\n\t\t\t\tk: attr.label,\n\t\t\t\tv: m.info ? m.info[key] : ''\n\t\t\t})\n\t\t}\n\t}\n\n\treturn lst\n}\n\nfunction findsamplegroup_byvcf(p) {\n\t/*\n\t.m\n\t.m_sample\n\tp.tk\n\t*/\n\n\tlet samplename\n\tif (p.m.dt == common.dtsnvindel) {\n\t\tif (!p.m_sample) throw 'm_sample missing'\n\t\tsamplename = p.m_sample.sampleobj.name\n\t} else {\n\t\tthrow 'unknown dt'\n\t}\n\n\tfor (const g of p.tk._data) {\n\t\tfor (const sample of g.samples) {\n\t\t\tif (sample.samplename == samplename) {\n\t\t\t\treturn [sample, g]\n\t\t\t}\n\t\t}\n\t}\n\treturn [-1, -1]\n}\n\nexport function svchr2html(chr, tk) {\n\t// only for multi-sample, full mode\n\tif (tk.legend_svchrcolor.interchrs.has(chr)) {\n\t\treturn (\n\t\t\t'<span style=\"background:' +\n\t\t\ttk.legend_svchrcolor.colorfunc(chr) +\n\t\t\t';font-weight:bold;padding:0px 5px;color:white\">' +\n\t\t\tescapeHtml(chr) +\n\t\t\t'</span>'\n\t\t)\n\t}\n\treturn escapeHtml(chr)\n}\n\nexport function svcoord2html(i, tk) {\n\treturn (\n\t\tsvchr2html(i.chrA, tk) +\n\t\t':' +\n\t\tescapeHtml(i.posA) +\n\t\t(i.strandA ? ':' + escapeHtml(i.strandA) : '') +\n\t\t' » ' +\n\t\tsvchr2html(i.chrB, tk) +\n\t\t':' +\n\t\tescapeHtml(i.posB) +\n\t\t(i.strandB ? ':' + escapeHtml(i.strandB) : '')\n\t)\n}\n\nfunction sortitemsbytype_onesample(samplename, lst, tk) {\n\t/*\n\tmulti-sample\n\tdense or full\n\tfor one sample, to show its mutation data in table, grouped by type\n\t*/\n\n\tconst cnvlst = [], // html\n\t\tsvlst = [],\n\t\tlohlst = [],\n\t\titdlst = [],\n\t\tvcflst = [],\n\t\tcnvlst0 = [], // actual objects\n\t\tsvlst0 = [],\n\t\tlohlst0 = [],\n\t\titdlst0 = [],\n\t\tvcflst0 = []\n\n\t{\n\t\t// treat sv/fusion first: dedup breakends\n\t\tconst breakends = lst.filter(i => i.dt == common.dtsv || i.dt == common.dtfusionrna)\n\t\tconst deduped = dedup_sv(breakends)\n\t\tfor (const i of deduped) {\n\t\t\tsvlst.push(\n\t\t\t\t'<div style=\"white-space:nowrap\">' +\n\t\t\t\t\tescapeHtml(itemname_svfusion(i)) +\n\t\t\t\t\t' <span style=\"font-size:.7em\">' +\n\t\t\t\t\tsvcoord2html(i, tk) +\n\t\t\t\t\t'</span>' +\n\t\t\t\t\t(i.dt == common.dtfusionrna ? ' <span style=\"font-size:.7em\">(RNA fusion)</span>' : '') +\n\t\t\t\t\t'</div>'\n\t\t\t)\n\t\t\tsvlst0.push(i)\n\t\t}\n\t}\n\n\tfor (const i of lst) {\n\t\tif (i.dt == common.dtsv || i.dt == common.dtfusionrna) continue\n\n\t\tif (i.dt == common.dtloh) {\n\t\t\tlohlst.push(\n\t\t\t\t'<div style=\"white-space:nowrap\">' +\n\t\t\t\t\tescapeHtml(i.chr) +\n\t\t\t\t\t':' +\n\t\t\t\t\t(i.start + 1) +\n\t\t\t\t\t'-' +\n\t\t\t\t\t(i.stop + 1) +\n\t\t\t\t\t' <span style=\"font-size:.8em\">' +\n\t\t\t\t\tcommon.bplen(i.stop - i.start) +\n\t\t\t\t\t' seg.mean: ' +\n\t\t\t\t\tescapeHtml(i.segmean) +\n\t\t\t\t\t'</span>'\n\t\t\t)\n\t\t\tlohlst0.push(i)\n\t\t} else if (i.dt == common.dtcnv) {\n\t\t\tcnvlst.push(\n\t\t\t\t'<div style=\"white-space:nowrap\">' +\n\t\t\t\t\tescapeHtml(i.chr) +\n\t\t\t\t\t':' +\n\t\t\t\t\t(i.start + 1) +\n\t\t\t\t\t'-' +\n\t\t\t\t\t(i.stop + 1) +\n\t\t\t\t\t' <span style=\"font-size:.8em\">' +\n\t\t\t\t\tcommon.bplen(i.stop - i.start) +\n\t\t\t\t\t'</span>' +\n\t\t\t\t\t' <span style=\"background:' +\n\t\t\t\t\t(i.value > 0 ? tk.cnvcolor.gain.str : tk.cnvcolor.loss.str) +\n\t\t\t\t\t';font-size:.8em;color:white\"> ' +\n\t\t\t\t\tescapeHtml(i.value) +\n\t\t\t\t\t' </span>' +\n\t\t\t\t\t'</div>'\n\t\t\t)\n\t\t\tcnvlst0.push(i)\n\t\t} else if (i.dt == common.dtitd) {\n\t\t\titdlst.push(\n\t\t\t\t'<div style=\"white-space:nowrap\">' +\n\t\t\t\t\tescapeHtml(i.chr) +\n\t\t\t\t\t':' +\n\t\t\t\t\t(i.start + 1) +\n\t\t\t\t\t'-' +\n\t\t\t\t\t(i.stop + 1) +\n\t\t\t\t\t(i.rnaduplength ? ', ' + escapeHtml(i.rnaduplength) + ' bp duplicated in RNA' : '') +\n\t\t\t\t\t(i.aaduplength ? ', ' + escapeHtml(i.aaduplength) + ' AA duplicated' : '') +\n\t\t\t\t\t'</div>'\n\t\t\t)\n\t\t\titdlst0.push(i)\n\t\t} else {\n\t\t\tthrow 'unknown dt: ' + i.dt\n\t\t}\n\t}\n\n\tif (tk.data_vcf) {\n\t\tfor (const m of tk.data_vcf) {\n\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\tif (m.sampledata.find(s => s.sampleobj.name == samplename)) {\n\t\t\t\t\tconst c = common.mclass[m.class]\n\t\t\t\t\tvcflst.push(\n\t\t\t\t\t\t'<div style=\"white-space:nowrap\">' +\n\t\t\t\t\t\t\t'<span style=\"color:' +\n\t\t\t\t\t\t\tc.color +\n\t\t\t\t\t\t\t';font-weight:bold\">' +\n\t\t\t\t\t\t\tescapeHtml(m.mname) +\n\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t'<span style=\"font-size:.7em\">' +\n\t\t\t\t\t\t\tc.label +\n\t\t\t\t\t\t\t'</span></div>'\n\t\t\t\t\t)\n\t\t\t\t\tvcflst0.push(m)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow 'unknown dt: ' + m.dt\n\t\t\t}\n\t\t}\n\t}\n\n\treturn [cnvlst, svlst, lohlst, itdlst, vcflst, cnvlst0, svlst0, lohlst0, itdlst0, vcflst0]\n}\n\nfunction may_show_matrixbutton(samplegroup, tk, block) {\n\t/*\n\tin sample group name menu, may add a button for showing pre-configured samplematrix for this group\n\tannotationsampleset2matrix has one key\n\t*/\n\tif (!tk.mds || !tk.mds.annotationsampleset2matrix) return\n\tif (!samplegroup.attributes) return\n\n\t// from attributes of this group, find one using that key\n\tconst attr = samplegroup.attributes.find(i => i.k == tk.mds.annotationsampleset2matrix.key)\n\tif (!attr) return\n\n\t// and the value of the attribute for this group should have corresponding item\n\tconst valueitem = tk.mds.annotationsampleset2matrix.groups[attr.kvalue]\n\tif (!valueitem) return\n\n\tif (!valueitem.groups) return // should not happen\n\n\t// this group will have 1 or more subgroups, each is one study group or subtype\n\tfor (const group of valueitem.groups) {\n\t\tif (!group.name || !group.matrixconfig) continue\n\n\t\ttk.tip2.d\n\t\t\t.append('div')\n\t\t\t.html(escapeHtml(group.name) + ' <span style=\"font-size:.8em;opacity:.5\">SUMMARY</span>')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.on('click', () => {\n\t\t\t\ttk.tip2.hide()\n\n\t\t\t\tconst pane = client.newpane({ x: 100, y: 100 })\n\t\t\t\tpane.header.text(group.name + ' summary')\n\n\t\t\t\tconst arg = {\n\t\t\t\t\tdslabel: tk.mds.label,\n\t\t\t\t\tdebugmode: block.debugmode,\n\t\t\t\t\tgenome: block.genome,\n\t\t\t\t\thostURL: block.hostURL,\n\t\t\t\t\tjwt: block.jwt,\n\t\t\t\t\tholder: pane.body.append('div').style('margin', '20px')\n\t\t\t\t}\n\n\t\t\t\tfor (const k in group.matrixconfig) {\n\t\t\t\t\targ[k] = group.matrixconfig[k]\n\t\t\t\t}\n\n\t\t\t\timport('./samplematrix').then(_ => {\n\t\t\t\t\tnew _.Samplematrix(arg)\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n\nexport function may_add_sampleannotation(samplename, tk, lst) {\n\tif (!tk.sampleAttribute) return\n\tif (!tk.sampleAttribute.attributes || !tk.sampleAttribute.samples) return\n\n\t// should only be available in multi-sample, official tk\n\n\tconst anno = tk.sampleAttribute.samples[samplename]\n\tif (!anno) return\n\n\t// show annotation for this sample\n\tfor (const key in anno) {\n\t\t// config about this key\n\t\tconst keycfg = tk.sampleAttribute.attributes[key] || {}\n\n\t\tconst value = anno[key]\n\n\t\tif (value == undefined) continue\n\n\t\tlet printvalue = value\n\t\tif (keycfg.values) {\n\t\t\tconst o = keycfg.values[value]\n\t\t\tif (o && o.name) {\n\t\t\t\tprintvalue = o.name\n\t\t\t}\n\t\t}\n\n\t\tlst.push({\n\t\t\tk: keycfg.label || key,\n\t\t\tv: printvalue\n\t\t})\n\t}\n}\n\nfunction mayaddtab_svgraph(tabs, p) {\n\tif (!p.item) return\n\tif (p.item.dt != common.dtsv && p.item.dt != common.dtfusionrna) return\n\ttabs.push({\n\t\tlabel: 'Fusion graph',\n\t\tcallback: async div => {\n\t\t\tconst wait = client.tab_wait(div)\n\t\t\tawait make_svgraph(p, div)\n\t\t\twait.remove()\n\t\t}\n\t})\n}\n\nexport async function make_svgraph(p, holder) {\n\tconst svpair = {\n\t\ta: {\n\t\t\tchr: p.item.chrA,\n\t\t\tposition: p.item.posA,\n\t\t\tstrand: p.item.strandA\n\t\t},\n\t\tb: {\n\t\t\tchr: p.item.chrB,\n\t\t\tposition: p.item.posB,\n\t\t\tstrand: p.item.strandB\n\t\t}\n\t}\n\n\tconst wait = holder.append('div')\n\n\ttry {\n\t\t// may use isoform supplied along with the data!!\n\n\t\t{\n\t\t\twait.text('Loading gene at ' + svpair.a.chr + ':' + svpair.a.position + ' ...')\n\t\t\tconst lst = await getisoform(p, svpair.a.chr, svpair.a.position)\n\t\t\tconst useone = lst.find(i => i.isdefault) || lst[0]\n\t\t\tif (useone) {\n\t\t\t\tsvpair.a.name = useone.name\n\t\t\t\tsvpair.a.gm = { isoform: useone.isoform }\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\twait.text('Loading gene at ' + svpair.b.chr + ':' + svpair.b.position + ' ...')\n\t\t\tconst lst = await getisoform(p, svpair.b.chr, svpair.b.position)\n\t\t\tconst useone = lst.find(i => i.isdefault) || lst[0]\n\t\t\tif (useone) {\n\t\t\t\tsvpair.b.name = useone.name\n\t\t\t\tsvpair.b.gm = { isoform: useone.isoform }\n\t\t\t}\n\t\t}\n\n\t\twait.remove()\n\n\t\tconst svarg = {\n\t\t\t//jwt: p.block.jwt,\n\t\t\t//hostURL: p.block.hostURL,\n\t\t\tpairlst: [svpair],\n\t\t\tgenome: p.block.genome,\n\t\t\tholder: holder\n\t\t}\n\t\timport('./svgraph').then(_ => {\n\t\t\t_.default(svarg)\n\t\t})\n\t} catch (e) {\n\t\tif (e.stack) console.log(e.stack)\n\t\twait.text('Error: ' + (e.message || e))\n\t}\n}\n\nfunction getisoform(p, chr, pos) {\n\treturn client.dofetch3(`isoformbycoord?genome=${p.block.genome.name}&chr=${chr}&pos=${pos}`).then(data => {\n\t\tif (data.error) throw data.error\n\t\treturn data.lst\n\t})\n}\n\nasync function may_findmatchingsnp_printintable(m, block, table) {\n\tif (!block || !block.genome || !block.genome.hasSNP) return\n\tconst tr = table.append('tr')\n\ttr.append('td').attr('colspan', 2).text('dbSNP').style('opacity', 0.4).style('padding', '3px')\n\tconst td = tr.append('td')\n\tconst wait = td.append('div').text('Loading...')\n\ttry {\n\t\tconst hits = await client.may_findmatchingsnp(m.chr, [m.pos], block.genome, [m.ref, m.altstr])\n\t\tif (!hits || hits.length == 0) {\n\t\t\twait.text('No match')\n\t\t\treturn\n\t\t}\n\t\twait.remove()\n\t\tfor (const s of hits) {\n\t\t\tconst row = td.append('div')\n\t\t\tclient.snp_printhtml(s, row)\n\t\t}\n\t} catch (e) {\n\t\twait.text(e.message || e)\n\t}\n}\n\nfunction createbutton_focus(buttonrow, div, p, defaultshow) {\n\t// click focus button to show block in holder\n\tlet blocknotshown = !defaultshow\n\tconst holder = div\n\t\t.append('div')\n\t\t.style('margin', '10px')\n\t\t.style('display', defaultshow ? 'block' : 'none')\n\n\t// focus button\n\tbuttonrow\n\t\t.append('div')\n\t\t.style('display', 'inline-block')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Focus')\n\t\t.on('click', () => {\n\t\t\tif (holder.style('display') == 'none') {\n\t\t\t\tclient.appear(holder)\n\t\t\t} else {\n\t\t\t\tclient.disappear(holder)\n\t\t\t}\n\n\t\t\tif (blocknotshown) {\n\t\t\t\tblocknotshown = false\n\t\t\t\tfocus_singlesample({\n\t\t\t\t\tholder: holder,\n\t\t\t\t\tm: p.item,\n\t\t\t\t\tsample: p.sample,\n\t\t\t\t\tsamplegroup: p.samplegroup,\n\t\t\t\t\ttk: p.tk,\n\t\t\t\t\tblock: p.block\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\tif (defaultshow) {\n\t\tfocus_singlesample({\n\t\t\tholder: holder,\n\t\t\tm: p.item,\n\t\t\tsample: p.sample,\n\t\t\tsamplegroup: p.samplegroup,\n\t\t\ttk: p.tk,\n\t\t\tblock: p.block\n\t\t})\n\t}\n}\n\nfunction addtab_sampleview(tabs, p) {\n\ttabs.push({\n\t\tlabel: 'Sample View',\n\t\tcallback: div => {\n\t\t\tfocus_singlesample({\n\t\t\t\tholder: div,\n\t\t\t\tm: p.item,\n\t\t\t\tsample: p.sample,\n\t\t\t\tsamplegroup: p.samplegroup,\n\t\t\t\ttk: p.tk,\n\t\t\t\tblock: p.block\n\t\t\t})\n\t\t}\n\t})\n}\n\nfunction mayaddtab_genome(tabs, p) {\n\t/*\nif the sample has a single vcf file\nwill allow genome view\nalso allow if there is no vcf query at all\nshow entirety of each chr, and the mds single sample track\n\nmay allow for custom track without vcf\n*/\n\tif (!p.tk.mds) return\n\ttabs.push({\n\t\tlabel: 'Genome',\n\t\tcallback: async div => {\n\t\t\tconst wait = client.tab_wait(div)\n\t\t\ttry {\n\t\t\t\tconst data = await client.dofetch('mdssvcnv', {\n\t\t\t\t\tgenome: p.block.genome.name,\n\t\t\t\t\tdslabel: p.tk.mds.label,\n\t\t\t\t\tquerykey: p.tk.mds.querykey,\n\t\t\t\t\tifsamplehasvcf: p.sample.samplename\n\t\t\t\t})\n\t\t\t\tif (data.no) return\n\t\t\t\t// has single-sample vcf\n\t\t\t\tlet maxbp = 0\n\t\t\t\tfor (const chr in p.block.genome.majorchr) {\n\t\t\t\t\tmaxbp = Math.max(maxbp, p.block.genome.majorchr[chr])\n\t\t\t\t}\n\n\t\t\t\tfor (const chr in p.block.genome.majorchr) {\n\t\t\t\t\tconst chrdiv = div.append('div').style('display', 'inline-block')\n\t\t\t\t\tconst t = {}\n\n\t\t\t\t\tif (p.tk.iscustom) {\n\t\t\t\t\t\t// TODO\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.fixname = chr.toUpperCase()\n\t\t\t\t\t\tt.mds = p.tk.mds\n\t\t\t\t\t\tt.querykey = p.tk.querykey\n\t\t\t\t\t\tt.singlesample = {\n\t\t\t\t\t\t\tname: p.sample.samplename,\n\t\t\t\t\t\t\twaterfall: { inuse: 1 }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const k in p.tk.mds.queries[p.tk.querykey]) {\n\t\t\t\t\t\t\tif (k == 'bplengthUpperLimit' || k == 'valueCutoff') {\n\t\t\t\t\t\t\t\t// do not use default\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tt[k] = p.tk.mds.queries[p.tk.querykey][k]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tp.block.newblock({\n\t\t\t\t\t\tfoldlegend: true,\n\t\t\t\t\t\thide_mdsHandleHolder: 1,\n\t\t\t\t\t\twidth: Math.ceil((900 * p.block.genome.majorchr[chr]) / maxbp),\n\t\t\t\t\t\tholder: chrdiv,\n\t\t\t\t\t\tblock: 1,\n\t\t\t\t\t\tchr: chr,\n\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t\tstop: p.block.genome.majorchr[chr],\n\t\t\t\t\t\ttklst: [t]\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\twait.remove()\n\t\t\t} catch (e) {\n\t\t\t\twait.text('Error: ' + (e.message || e))\n\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunction mayaddtab_disco(tabs, p) {\n\tif (!p.tk.mds || !p.tk.mds.singlesamplemutationjson) return\n\t/*\n\tis official dataset, and equipped with single-sample files\n\tclick button to retrieve all mutations and show in disco plot\n\t*/\n\ttabs.push({\n\t\tlabel: 'Disco plot',\n\t\tcallback: async div => {\n\t\t\tconst wait = client.tab_wait(div)\n\t\t\ttry {\n\t\t\t\tconst sjcharts = await getsjcharts()\n\n\t\t\t\tconst arg = {\n\t\t\t\t\tgenome: p.block.genome.name,\n\t\t\t\t\tdslabel: p.tk.mds.label,\n\t\t\t\t\tquerykey: p.tk.querykey,\n\t\t\t\t\tgetsample4disco: p.sample.samplename\n\t\t\t\t}\n\t\t\t\tconst data = await client.dofetch('/mdssvcnv', arg)\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\tif (!data.text) throw '.text missing'\n\n\t\t\t\tconst disco_arg = {\n\t\t\t\t\tsampleName: p.sample.samplename,\n\t\t\t\t\tdata: JSON.parse(data.text)\n\t\t\t\t}\n\n\t\t\t\tif (p.tk.mds.mutation_signature) {\n\t\t\t\t\tlet hassig = false\n\t\t\t\t\tfor (const k in p.tk.mds.mutation_signature.sets) {\n\t\t\t\t\t\tfor (const m of disco_arg.data) {\n\t\t\t\t\t\t\tif (m[k]) {\n\t\t\t\t\t\t\t\thassig = k\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (hassig) break\n\t\t\t\t\t}\n\t\t\t\t\tif (hassig) {\n\t\t\t\t\t\tconst o = p.tk.mds.mutation_signature.sets[hassig]\n\t\t\t\t\t\tdisco_arg.mutation_signature = {\n\t\t\t\t\t\t\tkey: hassig,\n\t\t\t\t\t\t\tname: o.name,\n\t\t\t\t\t\t\tsignatures: o.signatures\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst renderer = await sjcharts.dtDisco({\n\t\t\t\t\tchromosomeType: p.block.genome.name,\n\t\t\t\t\tmajorchr: p.block.genome.majorchr,\n\t\t\t\t\tholderSelector: div,\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tshowControls: false,\n\t\t\t\t\t\tselectedSamples: []\n\t\t\t\t\t},\n\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\tgeneLabelClick: {\n\t\t\t\t\t\t\ttype: 'genomepaint',\n\t\t\t\t\t\t\thostURL: p.block.hostURL,\n\t\t\t\t\t\t\tgenome: p.block.genome.name,\n\t\t\t\t\t\t\tdslabel: p.tk.mds.label,\n\t\t\t\t\t\t\tsample: p.sample.samplename\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\trenderer.main(disco_arg)\n\t\t\t\twait.remove()\n\t\t\t} catch (e) {\n\t\t\t\twait.text('Error: ' + (e.message || e))\n\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunction mayaddtab_mutationsignature(tabs, samplename, tk, block) {\n\tif (tk.iscustom || !tk.mds || !tk.mds.mutation_signature) return\n\ttabs.push({\n\t\tlabel: 'Mutation signature',\n\t\tcallback: async div => {\n\t\t\tconst wait = client.tab_wait(div)\n\t\t\ttry {\n\t\t\t\tconst data = await client.dofetch('mdssamplesignature', {\n\t\t\t\t\tsample: samplename,\n\t\t\t\t\tgenome: block.genome.name,\n\t\t\t\t\tdslabel: tk.mds.label\n\t\t\t\t})\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\tif (!data.lst) throw '.lst[] missing'\n\t\t\t\tif (data.lst.length == 0) {\n\t\t\t\t\twait.text('No mutation signature for this sample.')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tfor (const s of data.lst) {\n\t\t\t\t\tconst ss = tk.mds.mutation_signature.sets[s.key]\n\t\t\t\t\tconst d2 = div.append('div').style('margin-bottom', '20px')\n\t\t\t\t\td2.append('div').text(ss.name)\n\t\t\t\t\td2.append('div').text(s.valuename)\n\t\t\t\t\tconst svg = d2.append('svg')\n\t\t\t\t\tconst fontsize = 14,\n\t\t\t\t\t\trowh = 16,\n\t\t\t\t\t\tbarw = 250,\n\t\t\t\t\t\tpad = 20,\n\t\t\t\t\t\trowspace = 2,\n\t\t\t\t\t\tlabelspace = 6,\n\t\t\t\t\t\taxish = 5\n\t\t\t\t\tconst maxv = s.annotation[0].v\n\t\t\t\t\t//const minv = s.annotation[s.annotation.length-1].v\n\t\t\t\t\tconst minv = 0 // hardcode the #mutation per mb minimum value as 0\n\t\t\t\t\tconst scale = scaleLinear().domain([minv, maxv]).range([0, barw])\n\t\t\t\t\tlet labelw = 0\n\t\t\t\t\tfor (const i of s.annotation) {\n\t\t\t\t\t\tsvg\n\t\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t\t\t.attr('font-size', fontsize)\n\t\t\t\t\t\t\t.text(ss.signatures[i.k].name)\n\t\t\t\t\t\t\t.each(function () {\n\t\t\t\t\t\t\t\tlabelw = Math.max(labelw, this.getBBox().width)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.remove()\n\t\t\t\t\t}\n\t\t\t\t\tconst g = svg\n\t\t\t\t\t\t.append('g')\n\t\t\t\t\t\t.attr('transform', 'translate(' + (pad + labelw + labelspace) + ',' + (pad + axish + rowspace) + ')')\n\t\t\t\t\tfor (const [i, a] of s.annotation.entries()) {\n\t\t\t\t\t\tconst row = g.append('g').attr('transform', 'translate(0,' + (rowh + rowspace) * i + ')')\n\t\t\t\t\t\trow\n\t\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t\t\t.attr('font-size', fontsize)\n\t\t\t\t\t\t\t.attr('x', -labelspace)\n\t\t\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t\t\t.attr('y', rowh / 2)\n\t\t\t\t\t\t\t.text(ss.signatures[a.k].name)\n\t\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\trow\n\t\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t\t.attr('width', Math.max(1, scale(a.v)))\n\t\t\t\t\t\t\t.attr('height', rowh)\n\t\t\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\t\t\t.attr('fill', ss.signatures[a.k].color)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.axisstyle({\n\t\t\t\t\t\taxis: g\n\t\t\t\t\t\t\t.append('g')\n\t\t\t\t\t\t\t.attr('transform', 'translate(0,-' + rowspace + ')')\n\t\t\t\t\t\t\t.call(axisTop().scale(scale).ticks(4)),\n\t\t\t\t\t\tshowline: 1,\n\t\t\t\t\t\tfontsize: fontsize - 2\n\t\t\t\t\t})\n\n\t\t\t\t\tsvg\n\t\t\t\t\t\t.attr('width', pad + labelw + labelspace + barw + pad)\n\t\t\t\t\t\t.attr('height', pad + axish + rowspace + (rowh + rowspace) * s.annotation.length + pad)\n\t\t\t\t}\n\t\t\t\twait.remove()\n\t\t\t} catch (e) {\n\t\t\t\twait.text('Error: ' + (e.message || e))\n\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunction mayaddtab_fimo(tabs, arg) {\n\t/*\nmay create a tf motif find button for mutation\n*/\n\tif (!arg.tk || !arg.block || !arg.block.genome || !arg.block.genome.fimo_motif) return\n\tif (!arg.m || arg.m.dt != common.dtsnvindel) return\n\ttabs.push({\n\t\tlabel: 'TF motif',\n\t\tcallback: async div => {\n\t\t\tconst wait = client.tab_wait(div)\n\t\t\ttry {\n\t\t\t\t// generate fimo query param\n\t\t\t\tconst fimoarg = {\n\t\t\t\t\tgenome: arg.block.genome,\n\t\t\t\t\tdiv: div,\n\t\t\t\t\tm: {\n\t\t\t\t\t\tchr: arg.m.chr,\n\t\t\t\t\t\tpos: arg.m.pos + 1, // 1 based\n\t\t\t\t\t\tref: arg.m.ref,\n\t\t\t\t\t\talt: arg.m.alt\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// if fpkm is available and how to query\n\t\t\t\tif (arg.tk.iscustom) {\n\t\t\t\t\tif (arg.tk.checkexpressionrank) {\n\t\t\t\t\t\tfimoarg.factor_profiles = [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tisgenevalue: 1,\n\t\t\t\t\t\t\t\tname: 'Gene ' + arg.tk.gecfg.datatype,\n\t\t\t\t\t\t\t\tfile: arg.tk.checkexpressionrank.file,\n\t\t\t\t\t\t\t\turl: arg.tk.checkexpressionrank.url,\n\t\t\t\t\t\t\t\tindexURL: arg.tk.checkexpressionrank.indexURL\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\n\t\t\t\t\t\tif (arg.sample) {\n\t\t\t\t\t\t\tfimoarg.factor_profiles.push({\n\t\t\t\t\t\t\t\tisgenevalueonesample: 1,\n\t\t\t\t\t\t\t\tname: arg.sample.samplename + ' ' + arg.tk.gecfg.datatype,\n\t\t\t\t\t\t\t\tsamplename: arg.sample.samplename,\n\t\t\t\t\t\t\t\tfile: arg.tk.checkexpressionrank.file,\n\t\t\t\t\t\t\t\turl: arg.tk.checkexpressionrank.url,\n\t\t\t\t\t\t\t\tindexURL: arg.tk.checkexpressionrank.indexURL\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} else {\n\t\t\t\t\t// native\n\t\t\t\t\tif (arg.tk.checkexpressionrank) {\n\t\t\t\t\t\tconst fpro = {\n\t\t\t\t\t\t\tisgenevalue: 1,\n\t\t\t\t\t\t\tdatatype: arg.tk.checkexpressionrank.datatype,\n\t\t\t\t\t\t\tquerykey: arg.tk.checkexpressionrank.querykey,\n\t\t\t\t\t\t\tmdslabel: arg.tk.mds.label\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (arg.samplegroup) {\n\t\t\t\t\t\t\tif (arg.samplegroup.attributes) {\n\t\t\t\t\t\t\t\t// restrict expression to a group\n\t\t\t\t\t\t\t\tfpro.name = arg.samplegroup.name + ' ' + arg.tk.gecfg.datatype\n\t\t\t\t\t\t\t\tfpro.samplegroup_attrlst = arg.samplegroup.attributes\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!fpro.name) {\n\t\t\t\t\t\t\tfpro.name = 'Gene ' + arg.tk.gecfg.datatype\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfimoarg.factor_profiles = [fpro]\n\n\t\t\t\t\t\tif (arg.sample) {\n\t\t\t\t\t\t\tfimoarg.factor_profiles.push({\n\t\t\t\t\t\t\t\tisgenevalueonesample: 1,\n\t\t\t\t\t\t\t\tname: arg.sample.samplename + ' ' + arg.tk.gecfg.datatype,\n\t\t\t\t\t\t\t\tsamplename: arg.sample.samplename,\n\t\t\t\t\t\t\t\tdatatype: arg.tk.checkexpressionrank.datatype,\n\t\t\t\t\t\t\t\tquerykey: arg.tk.checkexpressionrank.querykey,\n\t\t\t\t\t\t\t\tmdslabel: arg.tk.mds.label\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}\n\t\t\t\tconst _ = await import('./mds.fimo')\n\t\t\t\tawait _.init(fimoarg)\n\t\t\t\twait.remove()\n\t\t\t} catch (e) {\n\t\t\t\twait.text('Error: ' + (e.message || e))\n\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunction mayaddtab_survival_onemutation(tabs, arg) {\n\t/*\nmay create a 'survival plot' button and use one mutation to divide samples\nholder\ntk\nblock\n*/\n\tif (!arg.tk.mds || !arg.tk.mds.survivalplot) return\n\ttabs.push({\n\t\tlabel: 'Survival',\n\t\tcallback: async div => {\n\t\t\tconst wait = client.tab_wait(div)\n\t\t\ttry {\n\t\t\t\tconst m = arg.m\n\t\t\t\t// sample dividing rules\n\t\t\t\tconst st = {\n\t\t\t\t\tmutation: 1\n\t\t\t\t}\n\n\t\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\t\t// default to use this specific mutation\n\t\t\t\t\tst.chr = m.chr\n\t\t\t\t\tst.start = m.pos\n\t\t\t\t\tst.stop = m.pos\n\t\t\t\t\tst.snvindel = {\n\t\t\t\t\t\tname: (m.gene ? m.gene + ' ' : '') + m.mname,\n\t\t\t\t\t\tref: m.ref,\n\t\t\t\t\t\talt: m.alt\n\t\t\t\t\t}\n\t\t\t\t} else if (m.dt == common.dtcnv) {\n\t\t\t\t\tst.chr = m.chr\n\t\t\t\t\tst.start = m.start\n\t\t\t\t\tst.stop = m.stop\n\t\t\t\t\tst.cnv = {\n\t\t\t\t\t\tfocalsizelimit: arg.tk.bplengthUpperLimit,\n\t\t\t\t\t\tvaluecutoff: arg.tk.valueCutoff\n\t\t\t\t\t}\n\t\t\t\t} else if (m.dt == common.dtloh) {\n\t\t\t\t\tst.chr = m.chr\n\t\t\t\t\tst.start = m.start\n\t\t\t\t\tst.stop = m.stop\n\t\t\t\t\tst.loh = {\n\t\t\t\t\t\tfocalsizelimit: arg.tk.lohLengthUpperLimit,\n\t\t\t\t\t\tvaluecutoff: arg.tk.segmeanValueCutoff\n\t\t\t\t\t}\n\t\t\t\t} else if (m.dt == common.dtsv) {\n\t\t\t\t\tst.chr = m._chr\n\t\t\t\t\tst.start = m._pos\n\t\t\t\t\tst.stop = m._pos\n\t\t\t\t\tst.sv = {}\n\t\t\t\t} else if (m.dt == common.dtfusionrna) {\n\t\t\t\t\tst.chr = m._chr\n\t\t\t\t\tst.start = m._pos\n\t\t\t\t\tst.stop = m._pos\n\t\t\t\t\tst.fusion = {}\n\t\t\t\t} else if (m.dt == common.dtitd) {\n\t\t\t\t\tst.chr = m.chr\n\t\t\t\t\tst.start = m.start\n\t\t\t\t\tst.stop = m.stop\n\t\t\t\t\tst.itd = {}\n\t\t\t\t}\n\n\t\t\t\tconst plot = {\n\t\t\t\t\trenderplot: 1, // instruct the plot to be rendered, no wait\n\t\t\t\t\tsamplerule: {\n\t\t\t\t\t\tfull: {},\n\t\t\t\t\t\tset: st\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (arg.tk.mds.survivalplot.samplegroupattrlst && arg.sample) {\n\t\t\t\t\t// the survivalplot has samplegrouping, and there is a single sample\n\t\t\t\t\t// will just use the first attribute\n\t\t\t\t\tconst attr = arg.tk.mds.survivalplot.samplegroupattrlst[0]\n\t\t\t\t\tconst sampleanno = arg.tk.sampleAttribute ? arg.tk.sampleAttribute.samples[arg.sample.samplename] : null\n\t\t\t\t\tif (sampleanno) {\n\t\t\t\t\t\tconst v = sampleanno[attr.key]\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tplot.samplerule.full.byattr = 1\n\t\t\t\t\t\t\tplot.samplerule.full.key = attr.key\n\t\t\t\t\t\t\tplot.samplerule.full.value = v\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// do not set rule for sample-full\n\t\t\t\t}\n\n\t\t\t\tconst _ = await import('./mds.survivalplot')\n\t\t\t\tawait _.init(\n\t\t\t\t\t{\n\t\t\t\t\t\tgenome: arg.block.genome,\n\t\t\t\t\t\tmds: arg.tk.mds,\n\t\t\t\t\t\tplotlist: [plot]\n\t\t\t\t\t},\n\t\t\t\t\tdiv,\n\t\t\t\t\targ.block.debugmode\n\t\t\t\t)\n\t\t\t\twait.remove()\n\t\t\t} catch (e) {\n\t\t\t\twait.text('Error: ' + (e.message || e))\n\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunction may_createbutton_survival_grouplab(arg) {\n\t/*\nin multi-sample mode, either dense or expanded\nclick on group label to show button\nuse current range for finding mutations\nobserve those in legend_mclass.hiddenvalues\n\nholder\ntk\nblock\nsamplegroup\n\t.attributes\n*/\n\tif (!arg.tk.mds || !arg.tk.mds.survivalplot) {\n\t\treturn\n\t}\n\n\targ.holder\n\t\t.append('div')\n\t\t.text('Survival plot')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.on('click', () => {\n\t\t\targ.tk.tip2.hide()\n\n\t\t\tconst m = arg.m\n\n\t\t\t// sample dividing rules\n\t\t\tconst st = {\n\t\t\t\tmutation: 1\n\t\t\t}\n\t\t\t// get look range\n\t\t\t{\n\t\t\t\tconst lst = arg.block.rglst\n\t\t\t\tst.chr = lst[arg.block.startidx].chr\n\t\t\t\tconst a = lst[arg.block.startidx].start\n\t\t\t\tconst b = lst[arg.block.stopidx].stop\n\t\t\t\tst.start = Math.min(a, b)\n\t\t\t\tst.stop = Math.max(a, b)\n\t\t\t}\n\n\t\t\tst.snvindel = {\n\t\t\t\thiddenclass: {}\n\t\t\t}\n\n\t\t\t// hiddenvalues is a mix of dt and mclass\n\t\t\t{\n\t\t\t\t// check mclass first\n\t\t\t\tlet hashiddensnv = false\n\t\t\t\tfor (const c of arg.tk.legend_mclass.hiddenvalues) {\n\t\t\t\t\tif (typeof c == 'string') {\n\t\t\t\t\t\tst.snvindel.hiddenclass[c] = 1\n\t\t\t\t\t\thashiddensnv = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!hashiddensnv) {\n\t\t\t\t\tdelete st.snvindel.hiddenclass\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!arg.tk.legend_mclass.hiddenvalues.has(common.dtcnv)) {\n\t\t\t\tst.cnv = {\n\t\t\t\t\tfocalsizelimit: arg.tk.bplengthUpperLimit,\n\t\t\t\t\tvaluecutoff: arg.tk.valueCutoff\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!arg.tk.legend_mclass.hiddenvalues.has(common.dtloh)) {\n\t\t\t\tst.loh = {\n\t\t\t\t\tfocalsizelimit: arg.tk.lohLengthUpperLimit,\n\t\t\t\t\tvaluecutoff: arg.tk.segmeanValueCutoff\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!arg.tk.legend_mclass.hiddenvalues.has(common.dtsv)) {\n\t\t\t\tst.sv = {}\n\t\t\t}\n\t\t\tif (!arg.tk.legend_mclass.hiddenvalues.has(common.dtfusionrna)) {\n\t\t\t\tst.fusion = {}\n\t\t\t}\n\t\t\tif (!arg.tk.legend_mclass.hiddenvalues.has(common.dtitd)) {\n\t\t\t\tst.itd = {}\n\t\t\t}\n\n\t\t\tconst plot = {\n\t\t\t\trenderplot: 1, // instruct the plot to be rendered, no wait\n\t\t\t\tsamplerule: {\n\t\t\t\t\tfull: {},\n\t\t\t\t\tset: st\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n\t\tsamplegroup.attributes[] can be more than 1\n\t\tbut samplerule.full only works for 1\n\t\t*/\n\t\t\tconst attr = arg.samplegroup.attributes[arg.samplegroup.attributes.length - 1]\n\t\t\tplot.samplerule.full = {\n\t\t\t\tbyattr: 1,\n\t\t\t\tkey: attr.k,\n\t\t\t\tvalue: attr.kvalue\n\t\t\t}\n\n\t\t\tconst pane = client.newpane({ x: 100, y: 100 })\n\t\t\tpane.header.text('Survival plot')\n\n\t\t\timport('./mds.survivalplot').then(_ => {\n\t\t\t\t_.init(\n\t\t\t\t\t{\n\t\t\t\t\t\tgenome: arg.block.genome,\n\t\t\t\t\t\tmds: arg.tk.mds,\n\t\t\t\t\t\tplotlist: [plot]\n\t\t\t\t\t},\n\t\t\t\t\tpane.body,\n\t\t\t\t\targ.block.debugmode\n\t\t\t\t)\n\t\t\t})\n\t\t})\n}\n\nfunction may_createbutton_assayAvailability(tk, block, holder, samplegroup) {\n\tif (!tk.mds || !tk.mds.assayAvailability) return\n\n\tholder\n\t\t.append('div')\n\t\t.text('Assay summary')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.on('click', async () => {\n\t\t\ttk.tip2.clear()\n\t\t\tconst wait = tk.tip2.d.append('div').style('margin', '10px').text('Loading...')\n\t\t\tconst par = {\n\t\t\t\tgenome: block.genome.name,\n\t\t\t\tdslabel: tk.mds.label,\n\t\t\t\tquerykey: tk.querykey,\n\t\t\t\tassaymap: 1\n\t\t\t}\n\t\t\tif (samplegroup.attributes) {\n\t\t\t\t// hardcoded to use the last item, to be replaced by termdb\n\t\t\t\tconst k = samplegroup.attributes[samplegroup.attributes.length - 1]\n\t\t\t\tpar.key = k.k\n\t\t\t\tpar.value = k.kvalue\n\t\t\t}\n\t\t\tconst data = await client.dofetch('mdssvcnv', par)\n\t\t\tif (data.error) {\n\t\t\t\twait.text('Error: ' + data.error)\n\t\t\t\treturn\n\t\t\t}\n\t\t\twait.remove()\n\t\t\tinitui_partition({\n\t\t\t\tdata,\n\t\t\t\tpar,\n\t\t\t\tdiv: tk.tip2.d.append('div').style('margin', '10px'),\n\t\t\t\tboxtip: tk.tktip,\n\t\t\t\theadlabel: samplegroup.name\n\t\t\t})\n\t\t\ttk.tip2.d\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.text('Drag and move a sequencing type label up/down to change order.')\n\t\t\tif (samplegroup.attributes) {\n\t\t\t\t// quick fix to show full labels\n\t\t\t\tconst d = tk.tip2.d.append('div').style('margin', '20px 10px 10px 10px').style('opacity', 0.7)\n\t\t\t\tfor (const a of samplegroup.attributes) {\n\t\t\t\t\td.append('div').text(a.kvalue + (a.fullvalue ? ': ' + a.fullvalue : ''))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n}\n\nfunction initui_partition(opts) {\n\t// quick fix\n\t// call when menu option is clicked, render map with all assay types, and checkboxes for each\n\n\tconst plot = {\n\t\theadlabel: opts.headlabel,\n\t\tpar: opts.par,\n\t\trows: [], // for moving rows\n\t\thidetermid: new Set(),\n\t\tsvg: opts.div.append('svg')\n\t}\n\n\tplot_partition(plot, opts.data)\n\n\t// make one checkbox for each term\n\tconst div = opts.div.append('div').append('div').style('display', 'inline')\n\tfor (const term of opts.data.terms) {\n\t\tconst cell = div\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('margin-right', '15px')\n\t\t\t.style('white-space', 'nowrap')\n\t\tconst label = cell.append('label')\n\t\tlabel\n\t\t\t.append('input')\n\t\t\t.attr('type', 'checkbox')\n\t\t\t.property('checked', true)\n\t\t\t.on('change', async event => {\n\t\t\t\tif (event.target.checked) {\n\t\t\t\t\tplot.hidetermid.delete(term.id)\n\t\t\t\t\tif (plot.par.termidorder && !plot.par.termidorder.includes(term.id)) {\n\t\t\t\t\t\tplot.par.termidorder.push(term.id)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tplot.hidetermid.add(term.id)\n\t\t\t\t}\n\t\t\t\tplot.par.skip_termids = [...plot.hidetermid]\n\t\t\t\tconst data = await client.dofetch('mdssvcnv', plot.par)\n\t\t\t\tplot_partition(plot, data)\n\t\t\t})\n\t\tlabel.append('span').text(term.name).style('padding-left', '5px')\n\t}\n}\n\nfunction plot_partition(plot, data) {\n\tconst toppad = 20, // leave enough space for header in graphg\n\t\tbottompad = 5,\n\t\thpad = 5,\n\t\trowheight = 25,\n\t\tfontsize = 16,\n\t\trowspace = 1,\n\t\tlabxspace = 10,\n\t\tsymbolpxwidth = 15\n\n\t// clear existing plot\n\tplot.rows = []\n\tplot.svg.selectAll('*').remove()\n\n\tlet maxsymbolcount = 0\n\tfor (const t of data.terms) {\n\t\tconst b = t.blocks[t.blocks.length - 1]\n\t\tmaxsymbolcount = Math.max(maxsymbolcount, b.x + b.symbolwidth)\n\t}\n\tconst termwidth = symbolpxwidth * maxsymbolcount\n\n\tconst graphg = plot.svg.append('g')\n\n\t// header\n\tgraphg\n\t\t.append('rect')\n\t\t.attr('width', termwidth)\n\t\t.attr('height', data.terms.length * (rowheight + rowspace) - rowspace)\n\t\t.attr('stroke', '#858585')\n\t\t.attr('fill', 'none')\n\t{\n\t\tlet headlabw\n\t\tconst text = graphg\n\t\t\t.append('text')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('font-size', fontsize - 2)\n\t\t\t.attr('y', -5)\n\t\t\t.text((plot.headlabel ? plot.headlabel + ', ' : '') + 'n=' + data.totalsample)\n\t\t\t.each(function () {\n\t\t\t\theadlabw = this.getBBox().width\n\t\t\t})\n\t\ttext.attr('x', termwidth / 2 - (headlabw > termwidth ? (headlabw - termwidth) / 2 : 0))\n\t}\n\n\tlet maxlabelw = 0\n\tlet y = 0\n\tfor (const term of data.terms) {\n\t\tconst rowg = graphg.append('g').attr('transform', 'translate(0,' + y + ')')\n\t\t// tick\n\t\trowg\n\t\t\t.append('line')\n\t\t\t.attr('stroke', '#858585')\n\t\t\t.attr('x1', -6)\n\t\t\t.attr('y1', rowheight / 2)\n\t\t\t.attr('y2', rowheight / 2)\n\t\tconst thisrow = {\n\t\t\tid: term.id,\n\t\t\ty,\n\t\t\trowg\n\t\t}\n\t\tplot.rows.push(thisrow)\n\t\tthisrow.svglabel = rowg\n\t\t\t.append('text')\n\t\t\t.text(term.name + ', n=' + term.samplecount)\n\t\t\t.attr('font-size', fontsize)\n\t\t\t.attr('x', -labxspace)\n\t\t\t.attr('y', rowheight / 2)\n\t\t\t.attr('dominant-baseline', 'middle')\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.each(function () {\n\t\t\t\tmaxlabelw = Math.max(maxlabelw, this.getBBox().width)\n\t\t\t})\n\t\t\t.on('mousedown', event => {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthisrow.moving = true\n\t\t\t\tconst b = d3select(document.body)\n\t\t\t\tlet my0 = event.clientY\n\t\t\t\tlet deltay\n\t\t\t\tlet nochange = true\n\t\t\t\tb.on('mousemove', event => {\n\t\t\t\t\tconst my = event.clientY\n\t\t\t\t\tdeltay = my - my0\n\t\t\t\t\tconst rowidx = plot.rows.findIndex(i => i.id == thisrow.id)\n\t\t\t\t\tif (deltay < 0) {\n\t\t\t\t\t\tif (rowidx > 0 && -deltay >= rowheight - 2) {\n\t\t\t\t\t\t\tplot.rows.splice(rowidx, 1)\n\t\t\t\t\t\t\tplot.rows.splice(rowidx - 1, 0, thisrow)\n\t\t\t\t\t\t\treorderRows()\n\t\t\t\t\t\t\tdeltay = 0\n\t\t\t\t\t\t\tmy0 = my\n\t\t\t\t\t\t\tnochange = false\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (rowidx < plot.rows.length - 1 && deltay >= rowheight - 2) {\n\t\t\t\t\t\t\tplot.rows.splice(rowidx, 1)\n\t\t\t\t\t\t\tplot.rows.splice(rowidx + 1, 0, thisrow)\n\t\t\t\t\t\t\treorderRows()\n\t\t\t\t\t\t\tdeltay = 0\n\t\t\t\t\t\t\tmy0 = my\n\t\t\t\t\t\t\tnochange = false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\trowg.attr('transform', 'translate(0,' + (thisrow.y + deltay) + ')')\n\t\t\t\t})\n\t\t\t\tb.on('mouseup', async () => {\n\t\t\t\t\tb.on('mousemove', null).on('mouseup', null)\n\t\t\t\t\tdelete thisrow.moving\n\t\t\t\t\treorderRows()\n\t\t\t\t\tif (nochange) return\n\t\t\t\t\tthisrow.svglabel.text('Loading...')\n\t\t\t\t\tplot.par.termidorder = plot.rows.map(i => i.id)\n\t\t\t\t\tplot.par.skip_termids = [...plot.hidetermid]\n\t\t\t\t\tconst data = await client.dofetch('mdssvcnv', plot.par)\n\t\t\t\t\tplot_partition(plot, data)\n\t\t\t\t})\n\t\t\t})\n\n\t\tlet x = 0\n\t\tfor (const b of term.blocks) {\n\t\t\tif (0) {\n\t\t\t\t// width to scale\n\t\t\t\tconst w = b.samplecount * sf\n\t\t\t\tif (b.value) {\n\t\t\t\t\t// this block is for samples annotated to this term\n\t\t\t\t\tconst box = rowg\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('fill', b.color)\n\t\t\t\t\t\t.attr('x', x)\n\t\t\t\t\t\t.attr('width', Math.max(1, w))\n\t\t\t\t\t\t.attr('height', rowheight)\n\t\t\t\t\tlet numwidth\n\t\t\t\t\tconst text = rowg\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(b.samplecount)\n\t\t\t\t\t\t.attr('font-size', fontsize - 2)\n\t\t\t\t\t\t.each(function () {\n\t\t\t\t\t\t\tnumwidth = this.getBBox().width\n\t\t\t\t\t\t})\n\t\t\t\t\tif (numwidth < w) {\n\t\t\t\t\t\ttext\n\t\t\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t\t\t.attr('x', x + w / 2)\n\t\t\t\t\t\t\t.attr('y', rowheight / 2)\n\t\t\t\t\t\t\t.attr('dominant-baseline', 'middle')\n\t\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// not enough width to print width\n\t\t\t\t\t\ttext.remove()\n\t\t\t\t\t\tbox\n\t\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\t\tbox.attr('fill', 'black')\n\t\t\t\t\t\t\t\topts.boxtip\n\t\t\t\t\t\t\t\t\t.clear()\n\t\t\t\t\t\t\t\t\t.showunder(event.target)\n\t\t\t\t\t\t\t\t\t.d.append('div')\n\t\t\t\t\t\t\t\t\t.html(b.samplecount + ' <span style=\"font-size:.7em\">' + escapeHtml(term.name) + '</span>')\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\t\tbox.attr('fill', b.color)\n\t\t\t\t\t\t\t\topts.boxtip.hide()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tx += w\n\t\t\t} else {\n\t\t\t\t// symbolic, print count\n\t\t\t\tconst w = b.symbolwidth * symbolpxwidth\n\t\t\t\tconst x = b.x * symbolpxwidth\n\t\t\t\tif (!b.isgap) {\n\t\t\t\t\tconst box = rowg.append('rect').attr('fill', b.color).attr('x', x).attr('width', w).attr('height', rowheight)\n\t\t\t\t\trowg\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(b.samplecount)\n\t\t\t\t\t\t.attr('font-size', fontsize - 2)\n\t\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t\t.attr('x', x + w / 2)\n\t\t\t\t\t\t.attr('y', rowheight / 2)\n\t\t\t\t\t\t.attr('dominant-baseline', 'middle')\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ty += rowheight + rowspace\n\t}\n\tgraphg.attr('transform', 'translate(' + (hpad + maxlabelw + labxspace) + ',' + toppad + ')')\n\tplot.svg\n\t\t.attr('width', hpad * 2 + maxlabelw + labxspace + termwidth)\n\t\t.attr('height', toppad + (rowheight + rowspace) * data.terms.length + bottompad)\n\n\tfunction reorderRows() {\n\t\tlet y = 0\n\t\tfor (const t of plot.rows) {\n\t\t\tif (!t.moving) t.rowg.transition().attr('transform', 'translate(0,' + y + ')')\n\t\t\tt.y = y\n\t\t\ty += rowheight + rowspace\n\t\t}\n\t}\n}\n", "import { scaleOrdinal } from 'd3-scale'\nimport { schemeCategory20 } from '#common/legacy-d3-polyfill'\nimport * as client from './client'\nimport { legend_newrow } from './block.legend'\nimport * as common from '#shared/common.js'\nimport { loadTk } from './block.mds.svcnv'\nimport { rgb as d3rgb } from 'd3-color'\n\n/*\n*********** exported:\n\nmakeTk_legend\nupdate_legend\nupdateLegend_singleSample\nupdateLegend_multiSample\n\n\n*********** internal:\nmay_legend_svchr\nmay_legend_mclass\nmay_legend_attribute\nmay_legend_signature_singlesample\n*/\n\nconst fontsize = 14\nconst xpad = 15\nconst barh = 20\n\nexport function makeTk_legend(block, tk) {\n\t/*\n\tonly run once, to initialize legend\n\tfor all cases:\n\t\tsingle- and multi-sample\n\t\tofficial and custom track\n\t*/\n\n\tconst [tr, td] = legend_newrow(block, tk.name)\n\ttk.tr_legend = tr\n\ttk.td_legend = td\n\n\tconst table = td.append('table').style('border-spacing', '5px')\n\n\ttk.legend_table = table\n\t// track hideable rows that are non-mutation attr\n\ttk.legend_hideable = []\n\n\tcreate_mclass(tk)\n\n\tif (!tk.nocnvlohsv) {\n\t\t// has svcnv file\n\t\tcreate_cnv(tk, block)\n\t\tcreate_loh(tk)\n\t\tcreate_svchrcolor(tk)\n\t}\n\n\tcreate_mutationsignature_single(tk)\n\n\tcreate_sampleAttribute(tk)\n\n\tcreate_mutationAttribute(tk)\n\n\tif (tk.alleleAttribute) create_vcfAttribute(tk.alleleAttribute, tk, block)\n\tif (tk.locusAttribute) create_vcfAttribute(tk.locusAttribute, tk, block)\n\n\ttk.legend_more_row = table.append('tr')\n\ttk.legend_more_label = tk.legend_more_row.append('td').style('text-align', 'right').append('span')\n\t// blank cell for now since hidden legend items\n\t// are displayed in pop-down menu, not in this row\n\ttk.legend_more_row.append('td')\n}\n\nexport function update_legend(tk, block) {\n\t/*\n\tfor all cases\n\t*/\n\tmay_legend_svchr(tk)\n\tmay_legend_mclass(tk, block)\n\tif (tk.singlesample) {\n\t\t// only do above for single sample case\n\t\tmay_legend_signature_singlesample(tk, block)\n\t\treturn\n\t}\n\t// is multi-sample: also do following\n\tmay_legend_attribute(tk, block)\n}\n\n// helpers\n\nfunction create_mclass(tk) {\n\t/*\n\tlist all mutation classes\n\tattribute may have already been created with customization\n\t*/\n\tif (!tk.legend_mclass) tk.legend_mclass = {}\n\tif (!tk.legend_mclass.hiddenvalues) tk.legend_mclass.hiddenvalues = new Set()\n\n\ttk.legend_mclass.hidden = false\n\n\ttk.legend_mclass.row = tk.legend_table.append('tr')\n\n\ttk.legend_mclass.row.append('td').style('text-align', 'right').style('opacity', 0.5).text('Mutation')\n\ttk.legend_mclass.holder = tk.legend_mclass.row.append('td')\n\ttk.legend_hideable.push(tk.legend_mclass)\n}\n\nfunction create_cnv(tk, block) {\n\t/*\n\tcnv log ratio color scale\n\n\t*/\n\n\tconst leftpad = 50\n\n\t//// cnv color scale\n\n\ttk.cnvcolor.cnvlegend = {\n\t\taxistickh: 4,\n\t\tbarw: 55\n\t}\n\n\ttk.cnvcolor.cnvlegend.row = tk.legend_table.append('tr')\n\ttk.cnvcolor.cnvlegend.row.append('td').style('text-align', 'right').style('opacity', 0.5).text('CNV log2(ratio)')\n\ttk.legend_hideable.push(tk.cnvcolor.cnvlegend)\n\n\tconst btn = tk.cnvcolor.cnvlegend.row\n\t\t.append('td')\n\t\t.append('div')\n\t\t.style('display', 'inline-block')\n\t\t.attr('class', 'sja_clb')\n\t\t.style('padding', '0px')\n\t\t.on('click', () => {\n\t\t\t// quick fix to allow to show only gain or loss\n\t\t\ttk.tkconfigtip.clear().showunder(btn.node())\n\t\t\t{\n\t\t\t\tconst lab = tk.tkconfigtip.d.append('div').append('label')\n\t\t\t\tlab\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t\t.property('checked', !tk.hide_cnvgain)\n\t\t\t\t\t.on('change', () => {\n\t\t\t\t\t\ttk.hide_cnvgain = !tk.hide_cnvgain\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t})\n\t\t\t\tlab.append('span').html(' Show copy number gain')\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst lab = tk.tkconfigtip.d.append('div').style('margin-top', '10px').append('label')\n\t\t\t\tlab\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t\t.property('checked', !tk.hide_cnvloss)\n\t\t\t\t\t.on('change', () => {\n\t\t\t\t\t\ttk.hide_cnvloss = !tk.hide_cnvloss\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t})\n\t\t\t\tlab.append('span').html(' Show copy number loss')\n\t\t\t}\n\t\t})\n\n\tconst svg = btn\n\t\t.append('svg')\n\t\t.attr('width', (leftpad + tk.cnvcolor.cnvlegend.barw) * 2)\n\t\t.attr('height', fontsize + tk.cnvcolor.cnvlegend.axistickh + barh)\n\n\ttk.cnvcolor.cnvlegend.svg = svg\n\n\ttk.cnvcolor.cnvlegend.nodatadiv = btn\n\t\t.append('div')\n\t\t.text('no data')\n\t\t.style('opacity', 0.3)\n\t\t.style('padding-left', '10px')\n\n\ttk.cnvcolor.cnvlegend.axisg = svg\n\t\t.append('g')\n\t\t.attr('transform', 'translate(' + leftpad + ',' + (fontsize + tk.cnvcolor.cnvlegend.axistickh) + ')')\n\n\tconst gain_id = Math.random().toString()\n\tconst loss_id = Math.random().toString()\n\n\tconst defs = svg.append('defs')\n\t{\n\t\t// loss\n\t\tconst grad = defs.append('linearGradient').attr('id', loss_id)\n\t\ttk.cnvcolor.cnvlegend.loss_stop = grad.append('stop').attr('offset', '0%').attr('stop-color', tk.cnvcolor.loss.str)\n\t\tgrad.append('stop').attr('offset', '100%').attr('stop-color', 'white')\n\t}\n\t{\n\t\t// gain\n\t\tconst grad = defs.append('linearGradient').attr('id', gain_id)\n\t\tgrad.append('stop').attr('offset', '0%').attr('stop-color', 'white')\n\t\ttk.cnvcolor.cnvlegend.gain_stop = grad\n\t\t\t.append('stop')\n\t\t\t.attr('offset', '100%')\n\t\t\t.attr('stop-color', tk.cnvcolor.gain.str)\n\t}\n\n\tsvg\n\t\t.append('rect')\n\t\t.attr('x', leftpad)\n\t\t.attr('y', fontsize + tk.cnvcolor.cnvlegend.axistickh)\n\t\t.attr('width', tk.cnvcolor.cnvlegend.barw)\n\t\t.attr('height', barh)\n\t\t.attr('fill', 'url(#' + loss_id + ')')\n\n\tsvg\n\t\t.append('rect')\n\t\t.attr('x', leftpad + tk.cnvcolor.cnvlegend.barw)\n\t\t.attr('y', fontsize + tk.cnvcolor.cnvlegend.axistickh)\n\t\t.attr('width', tk.cnvcolor.cnvlegend.barw)\n\t\t.attr('height', barh)\n\t\t.attr('fill', 'url(#' + gain_id + ')')\n\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', leftpad - 5)\n\t\t.attr('y', fontsize + tk.cnvcolor.cnvlegend.axistickh + barh / 2)\n\t\t.attr('font-family', client.font)\n\t\t.attr('font-size', fontsize)\n\t\t.attr('text-anchor', 'end')\n\t\t.attr('dominant-baseline', 'central')\n\t\t.attr('fill', 'black')\n\t\t.text('Loss')\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', leftpad + tk.cnvcolor.cnvlegend.barw * 2 + 5)\n\t\t.attr('y', fontsize + tk.cnvcolor.cnvlegend.axistickh + barh / 2)\n\t\t.attr('font-family', client.font)\n\t\t.attr('font-size', fontsize)\n\t\t.attr('dominant-baseline', 'central')\n\t\t.attr('fill', 'black')\n\t\t.text('Gain')\n}\n\nfunction create_loh(tk) {\n\tif (tk.mds && tk.mds.queries && tk.mds.queries[tk.querykey] && tk.mds.queries[tk.querykey].no_loh) {\n\t\t// quick dirty\n\t\treturn\n\t}\n\n\t//// loh color legend\n\n\tconst leftpad = 20\n\n\ttk.cnvcolor.lohlegend = {\n\t\taxistickh: 4,\n\t\tbarw: 55\n\t}\n\n\ttk.cnvcolor.lohlegend.row = tk.legend_table.append('tr')\n\ttk.cnvcolor.lohlegend.row.append('td').style('text-align', 'right').style('opacity', 0.5).text('LOH seg.mean')\n\ttk.legend_hideable.push(tk.cnvcolor.lohlegend)\n\n\tconst td = tk.cnvcolor.lohlegend.row.append('td')\n\n\tconst svg = td\n\t\t.append('svg')\n\t\t.attr('width', (leftpad + tk.cnvcolor.lohlegend.barw) * 2)\n\t\t.attr('height', fontsize + tk.cnvcolor.lohlegend.axistickh + barh)\n\n\ttk.cnvcolor.lohlegend.svg = svg\n\ttk.cnvcolor.lohlegend.nodatadiv = td.append('div').text('no data').style('opacity', 0.3).style('padding-left', '10px')\n\n\ttk.cnvcolor.lohlegend.axisg = svg\n\t\t.append('g')\n\t\t.attr('transform', 'translate(' + leftpad + ',' + (fontsize + tk.cnvcolor.lohlegend.axistickh) + ')')\n\n\tconst loh_id = Math.random().toString()\n\n\tconst defs = svg.append('defs')\n\t{\n\t\tconst grad = defs.append('linearGradient').attr('id', loh_id)\n\t\tgrad.append('stop').attr('offset', '0%').attr('stop-color', 'white')\n\t\ttk.cnvcolor.lohlegend.loh_stop = grad.append('stop').attr('offset', '100%').attr('stop-color', tk.cnvcolor.loh.str)\n\t}\n\n\tsvg\n\t\t.append('rect')\n\t\t.attr('x', leftpad)\n\t\t.attr('y', fontsize + tk.cnvcolor.lohlegend.axistickh)\n\t\t.attr('width', tk.cnvcolor.lohlegend.barw)\n\t\t.attr('height', barh)\n\t\t.attr('fill', 'url(#' + loh_id + ')')\n}\n\nfunction create_svchrcolor(tk) {\n\tconst row = tk.legend_table.append('tr').style('display', 'none') // default hide\n\n\ttk.legend_svchrcolor = {\n\t\trow: row,\n\t\tinterchrs: new Set(),\n\t\tcolorfunc: scaleOrdinal(schemeCategory20),\n\t\thidden: true\n\t}\n\trow.append('td').style('text-align', 'right').style('opacity', 0.5).text('SV chromosome')\n\ttk.legend_svchrcolor.holder = row.append('td')\n\ttk.legend_hideable.push(tk.legend_svchrcolor)\n}\n\nfunction create_sampleAttribute(tk) {\n\tif (tk.singlesample) return\n\tif (!tk.sampleAttribute) return\n\t/*\n\tofficial only\n\tsampleAttribute is copied over from mds.queries\n\tinitiate attributes used for filtering & legend display\n\t*/\n\tfor (const key in tk.sampleAttribute.attributes) {\n\t\tconst attr = tk.sampleAttribute.attributes[key]\n\t\tif (!attr.filter) {\n\t\t\t// not a filter\n\t\t\tcontinue\n\t\t}\n\n\t\t// do not override customization from embedding\n\t\tif (!attr.hiddenvalues || !(attr.hiddenvalues instanceof Set)) {\n\t\t\tattr.hiddenvalues = new Set()\n\t\t\t// k: key in mutationAttribute.attributes{}\n\t\t}\n\n\t\tattr.value2count = new Map()\n\t\t/*\n\t\tk: key\n\t\tv: {\n\t\t\ttotalitems: INT\n\t\t\tdt2count: Map( dt => count )\n\t\t}\n\t\t*/\n\n\t\tattr.legendrow = tk.legend_table.append('tr')\n\t\tattr.legendcell = attr.legendrow.append('td').style('text-align', 'right').style('opacity', 0.5).text(attr.label)\n\n\t\tattr.legendholder = attr.legendrow.append('td')\n\t}\n}\n\nfunction create_mutationsignature_single(tk) {\n\tif (!tk.singlesample) return\n\tif (!tk.mds || !tk.mds.mutation_signature) return\n\t/* dataset has mutation signature\n\twill create legend for this track\n\tbut does not know if this sample has signature or not\n\tso the legend <tr> remains hidden\n\tand only show if it has signature for data in view range\n\n\talso one sample could have mutation from more than one set of signature\n\tthus, one legend <tr> should be shown for each signature set\n\n\t*/\n\ttk.mutation_signature_legend = {\n\t\tsets: {}\n\t}\n\tfor (const k in tk.mds.mutation_signature.sets) {\n\t\tconst tr = tk.legend_table.append('tr').style('display', 'none')\n\n\t\ttr.append('td').text(tk.mds.mutation_signature.sets[k].name).style('text-align', 'right').style('opacity', 0.5)\n\n\t\tconst td = tr.append('td')\n\t\tconst table = td.append('table').style('border-spacing', '0px').style('margin', '10px')\n\n\t\ttk.mutation_signature_legend.sets[k] = {\n\t\t\ttr: tr,\n\t\t\ttd: td,\n\t\t\ttable: table\n\t\t}\n\t}\n}\n\nfunction create_mutationAttribute(tk) {\n\tif (tk.singlesample) return\n\tif (!tk.mutationAttribute) return\n\t/*\n\tofficial only\n\tmutationAttribute is copied over from mds.queries\n\tinitiate attributes used for filtering & legend display\n\t*/\n\tfor (const key in tk.mutationAttribute.attributes) {\n\t\tconst attr = tk.mutationAttribute.attributes[key]\n\t\tif (!attr.filter) {\n\t\t\t// not a filter\n\t\t\tcontinue\n\t\t}\n\t\tattr.hiddenvalues = new Set()\n\t\t// k: key in mutationAttribute.attributes{}\n\n\t\tattr.value2count = new Map()\n\t\t/*\n\t\tk: key\n\t\tv: {\n\t\t\ttotalitems: INT\n\t\t\tdt2count: Map( dt => count )\n\t\t}\n\t\t*/\n\n\t\tattr.legendrow = tk.legend_table.append('tr')\n\t\tattr.legendcell = attr.legendrow.append('td').style('text-align', 'right').style('opacity', 0.5).text(attr.label)\n\n\t\tattr.legendholder = attr.legendrow.append('td')\n\t}\n}\n\nfunction create_vcfAttribute(attrSet, tk, block) {\n\t// for both alleleAttribute and locusAttribute\n\t/*\n\tofficial only\n\talleleAttribute/locusAttribute is copied over from mds.queries\n\tinitiate attributes used for filtering & legend display\n\t*/\n\tfor (const key in attrSet.attributes) {\n\t\tconst attr = attrSet.attributes[key]\n\t\tif (!attr.filter) {\n\t\t\t// not a filter\n\t\t\tcontinue\n\t\t}\n\n\t\tattr.legendrow = tk.legend_table.append('tr')\n\t\tattr.legendcell = attr.legendrow.append('td').style('text-align', 'right').style('opacity', 0.5).text(attr.label)\n\n\t\tattr.legendholder = attr.legendrow.append('td')\n\n\t\tif (attr.isnumeric) {\n\t\t\t/*\n\t\t\tnumeric cutoff with options:\n\t\t\t<= no greater than\n\t\t\t>= no smaller than\n\t\t\tx do not use\n\t\t\t*/\n\n\t\t\tconst select = attr.legendholder\n\t\t\t\t.append('select')\n\t\t\t\t.style('margin', '0px 10px 0px 10px')\n\t\t\t\t.on('change', () => {\n\t\t\t\t\tconst value = select.property('value')\n\n\t\t\t\t\tif (value == 'x') {\n\t\t\t\t\t\tattr.disable = true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelete attr.disable\n\t\t\t\t\t\tattr.keeplowerthan = value == '<'\n\t\t\t\t\t}\n\n\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t})\n\n\t\t\tconst lowerthan = select.append('option').attr('value', '<').property('text', '\u2264')\n\n\t\t\tconst higherthan = select.append('option').attr('value', '>').property('text', '\u2265')\n\n\t\t\tconst disable = select.append('option').attr('value', 'x').property('text', 'X')\n\n\t\t\tif (attr.disable) {\n\t\t\t\tdisable.property('selected', 1)\n\t\t\t} else if (attr.keeplowerthan) {\n\t\t\t\tlowerthan.property('selected', 1)\n\t\t\t} else {\n\t\t\t\thigherthan.property('selected', 1)\n\t\t\t}\n\n\t\t\tattr.legendholder\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.style('width', '50px')\n\t\t\t\t.property('value', attr.cutoffvalue)\n\t\t\t\t.on('keyup', event => {\n\t\t\t\t\tif (event.key != 'Enter') return\n\t\t\t\t\tattr.cutoffvalue = event.target.valueAsNumber\n\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t})\n\t\t} else {\n\t\t\t// categorical\n\t\t\tattr.hiddenvalues = new Set()\n\t\t\t// k: key in mutationAttribute.attributes{}\n\n\t\t\tattr.value2count = new Map()\n\t\t\t/*\n\t\t\tk: key\n\t\t\tv: {\n\t\t\t\ttotalitems: INT\n\t\t\t\tdt2count: Map( dt => count )\n\t\t\t}\n\t\t\t*/\n\n\t\t\tattr.legendrow = tk.legend_table.append('tr')\n\t\t\tattr.legendcell = attr.legendrow.append('td').style('text-align', 'right').style('opacity', 0.5).text(attr.label)\n\n\t\t\tattr.legendholder = attr.legendrow.append('td')\n\t\t}\n\t}\n}\n\nfunction may_legend_svchr(tk) {\n\tif (!tk.legend_svchrcolor) {\n\t\t// not there when there is no svcnv file\n\t\treturn\n\t}\n\n\ttk.legend_svchrcolor.holder.selectAll('*').remove()\n\tif (tk.legend_svchrcolor.interchrs.size == 0) return\n\ttk.legend_svchrcolor.row.style('display', 'table-row')\n\tfor (const chr of tk.legend_svchrcolor.interchrs) {\n\t\tconst color = tk.legend_svchrcolor.colorfunc(chr)\n\t\tconst d = tk.legend_svchrcolor.holder\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('margin', '3px 10px 3px 0px')\n\t\td.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('border-radius', '10px')\n\t\t\t.style('padding', '0px 10px')\n\t\t\t.style('border', 'solid 1px ' + color)\n\t\t\t.style('color', color)\n\t\t\t.style('font-size', '.9em')\n\t\t\t.text(chr)\n\t}\n}\n\nfunction may_legend_mclass(tk, block) {\n\t/*\n\tfull or dense\n\tnative or custom\n\tsingle or multi-sample\n\talways shown! both snvindel class & dt included (cnv/loh/sv/fusion/itd)\n\t*/\n\n\tif (!tk.legend_mclass || !tk.legend_mclass.holder) return\n\n\ttk.legend_mclass.holder.selectAll('*').remove()\n\n\tconst classes = new Map()\n\t/*\n\tk: class\n\tv: {cname, count}\n\tif is snvindel class, key is class code e.g. \"M\"\n\tif not, key is dt\n\t*/\n\n\t// vcf classes\n\tif (tk.data_vcf) {\n\t\tfor (const m of tk.data_vcf) {\n\t\t\tif (!classes.has(m.class)) {\n\t\t\t\tclasses.set(m.class, {\n\t\t\t\t\tisvcf: 1,\n\t\t\t\t\tcname: m.class,\n\t\t\t\t\tcount: 0\n\t\t\t\t})\n\t\t\t}\n\t\t\tclasses.get(m.class).count++\n\t\t}\n\t}\n\t// non-vcf classes\n\tif (tk.singlesample) {\n\t\tif (tk.data) {\n\t\t\tfor (const i of tk.data) {\n\t\t\t\tif (!classes.has(i.dt)) {\n\t\t\t\t\tclasses.set(i.dt, {\n\t\t\t\t\t\tdt: i.dt,\n\t\t\t\t\t\tcount: 0\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tclasses.get(i.dt).count++\n\t\t\t}\n\t\t}\n\t} else if (tk._data) {\n\t\tfor (const g of tk._data) {\n\t\t\tfor (const s of g.samples) {\n\t\t\t\tfor (const i of s.items) {\n\t\t\t\t\tif (!classes.has(i.dt)) {\n\t\t\t\t\t\tclasses.set(i.dt, {\n\t\t\t\t\t\t\tdt: i.dt,\n\t\t\t\t\t\t\tcount: 0\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tclasses.get(i.dt).count++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst classlst = [...classes.values()]\n\tclasslst.sort((i, j) => j.count - i.count)\n\ttk.legend_mclass.total_count = classlst.reduce((a, b) => a + b.count, 0)\n\n\tfor (const c of classlst) {\n\t\tlet key,\n\t\t\tlabel,\n\t\t\tdesc,\n\t\t\tcolor = '#858585'\n\n\t\tif (c.dt) {\n\t\t\tkey = c.dt\n\t\t\tlabel = common.dt2label[c.dt]\n\t\t\tif (c.dt == common.dtcnv) desc = 'Copy number variation.'\n\t\t\telse if (c.dt == common.dtloh) desc = 'Loss of heterozygosity.'\n\t\t\telse if (c.dt == common.dtitd) {\n\t\t\t\tcolor = common.mclass[common.mclassitd].color\n\t\t\t\tdesc = 'Internal tandem duplication.'\n\t\t\t} else if (c.dt == common.dtsv) desc = 'Structural variation of DNA.'\n\t\t\telse if (c.dt == common.dtfusionrna) desc = 'Fusion gene from RNA-seq.'\n\t\t} else {\n\t\t\tkey = c.cname\n\t\t\tlabel = common.mclass[c.cname].label\n\t\t\tcolor = common.mclass[c.cname].color\n\t\t\tdesc = common.mclass[c.cname].desc\n\t\t}\n\n\t\tconst cell = tk.legend_mclass.holder\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_clb')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.on('click', () => {\n\t\t\t\ttk.tip2\n\t\t\t\t\t.clear()\n\t\t\t\t\t.d.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.text('Hide')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\ttk.legend_mclass.hiddenvalues.add(key)\n\t\t\t\t\t\tapplychange()\n\t\t\t\t\t})\n\n\t\t\t\ttk.tip2.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.text('Show only')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tfor (const c2 of classes.keys()) {\n\t\t\t\t\t\t\ttk.legend_mclass.hiddenvalues.add(c2)\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttk.legend_mclass.hiddenvalues.delete(key)\n\t\t\t\t\t\tapplychange()\n\t\t\t\t\t})\n\n\t\t\t\tif (tk.legend_mclass.hiddenvalues.size) {\n\t\t\t\t\ttk.tip2.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.text('Show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttk.legend_mclass.hiddenvalues.clear()\n\t\t\t\t\t\t\tapplychange()\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\ttk.tip2.d.append('div').style('padding', '10px').style('font-size', '.8em').style('width', '150px').text(desc)\n\n\t\t\t\ttk.tip2.showunder(cell.node())\n\t\t\t})\n\n\t\tcell\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t.style('background', color)\n\t\t\t.html(c.count > 1 ? c.count : ' ')\n\t\tcell\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('color', color)\n\t\t\t.html(' ' + label)\n\t}\n\n\t// hidden\n\tfor (const key of tk.legend_mclass.hiddenvalues) {\n\t\ttk.legend_mclass.holder\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.attr('class', 'sja_clb')\n\t\t\t.style('text-decoration', 'line-through')\n\t\t\t.text(Number.isInteger(key) ? common.dt2label[key] : common.mclass[key].label)\n\t\t\t.on('click', () => {\n\t\t\t\ttk.legend_mclass.hiddenvalues.delete(key)\n\t\t\t\tapplychange()\n\t\t\t})\n\t}\n\n\tif (tk.vcfrangelimit) {\n\t\t// range too big for vcf, no vcf data\n\t\ttk.legend_mclass.holder\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.text('Zoom in under ' + common.bplen(tk.vcfrangelimit) + ' to view SNV/indel data')\n\t\t\t.style('white-space', 'nowrap')\n\t\t\t.style('margin', '10px')\n\t}\n\n\tconst applychange = () => {\n\t\ttk.tip2.hide()\n\t\tloadTk(tk, block)\n\t}\n}\n\nfunction may_legend_signature_singlesample(tk, block) {\n\t/*\n\tonly for single sample\n\tif mds has signature\n\t*/\n\n\tif (!tk.mds || !tk.mds.mutation_signature) return\n\n\t// dataset is equipped with signature, but the sample may not have it, or there may not be any variants from view range\n\t// still need to clear legend\n\tfor (const k in tk.mutation_signature_legend.sets) {\n\t\ttk.mutation_signature_legend.sets[k].tr.style('display', 'none')\n\t}\n\n\tif (!tk.data_vcf) {\n\t\t// currently signature data all come from vcf\n\t\treturn\n\t}\n\n\tconst set2signatures = new Map()\n\n\tfor (const m of tk.data_vcf) {\n\t\tif (m.x == undefined) continue\n\t\tif (!m.sampledata || !m.sampledata[0]) continue\n\t\tfor (const k in tk.mds.mutation_signature.sets) {\n\t\t\tconst v = m.sampledata[0][k]\n\t\t\tif (v == undefined) continue\n\t\t\tconst obj = tk.mds.mutation_signature.sets[k].signatures[v]\n\t\t\tif (obj) {\n\t\t\t\t// has a valid signature for this set\n\t\t\t\t// but will not count the 'no data' placeholder\n\t\t\t\tif (obj.nodata) continue\n\t\t\t\tif (!set2signatures.has(k)) set2signatures.set(k, new Map())\n\t\t\t\tset2signatures.get(k).set(v, 1 + (set2signatures.get(k).get(v) || 0))\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const [k, o1] of set2signatures) {\n\t\tconst leg = tk.mutation_signature_legend.sets[k]\n\t\t// turn on this tr\n\t\tleg.tr.style('display', 'table-row')\n\t\tleg.table.selectAll('*').remove()\n\n\t\tconst lst = [...o1].sort((i, j) => j[1] - i[1])\n\t\tfor (const [v, count] of lst) {\n\t\t\tconst obj = tk.mds.mutation_signature.sets[k].signatures[v]\n\n\t\t\tconst tr = leg.table.append('tr')\n\t\t\ttr.append('td')\n\t\t\t\t.style('background', obj.color)\n\t\t\t\t.style('padding', '0px 4px')\n\t\t\t\t.style('color', 'white')\n\t\t\t\t.style('text-align', 'right')\n\t\t\t\t.html(count > 1 ? count : '')\n\t\t\tconst c = d3rgb(obj.color)\n\t\t\ttr.append('td')\n\t\t\t\t.html(' ' + obj.name)\n\t\t\t\t.style('background', 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',.2)')\n\t\t\t\t.style('opacity', 0.6)\n\t\t}\n\t}\n}\n\nfunction may_legend_attribute(tk, block) {\n\tif (tk.singlesample) {\n\t\t// multi-sample only\n\t\treturn\n\t}\n\n\t// collects attributes that are selected to be hidden\n\tconst hiddenAttributes = []\n\n\t/*\n\tofficial-only, multi-sample\n\tfiltering by mutation attribute is done on server\n\t*/\n\tfor (const attrGrp of ['sampleAttribute', 'mutationAttribute', 'locusAttribute']) {\n\t\tif (!tk[attrGrp]) continue\n\n\t\t// clear\n\t\tfor (const key in tk[attrGrp].attributes) {\n\t\t\tconst attr = tk[attrGrp].attributes[key]\n\t\t\tif (!attr.filter) continue\n\t\t\tattr.value2count.clear()\n\t\t}\n\n\t\t// count\n\t\tif (attrGrp == 'sampleAttribute') {\n\t\t\tfor (const key in tk.sampleAttribute.attributes) {\n\t\t\t\tfor (const sample in tk.sampleAttribute.samples) {\n\t\t\t\t\tcount_sampleAttribute(key, tk.sampleAttribute.attributes[key], tk.sampleAttribute.samples[sample])\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (tk._data) {\n\t\t\t\tfor (const g of tk._data) {\n\t\t\t\t\tfor (const s of g.samples) {\n\t\t\t\t\t\tfor (const i of s.items) {\n\t\t\t\t\t\t\t// won't count if i.mattr is undefined\n\t\t\t\t\t\t\tcount_mutationAttribute(i.mattr, tk, i.dt)\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\tif (tk.data_vcf) {\n\t\t\t\tfor (const m of tk.data_vcf) {\n\t\t\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\t\t\tif (m.sampledata) {\n\t\t\t\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\t\t\t\tcount_mutationAttribute(s, tk, m.dt)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.info) {\n\t\t\t\t\t\t\tcount_locusAttribute(tk, m)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// TODO altinfo may be supported in the same way?\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error('unknown dt: ' + m.dt)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// show legend\n\t\tfor (const key in tk[attrGrp].attributes) {\n\t\t\tconst attr = tk[attrGrp].attributes[key]\n\t\t\tif (!attr.filter) continue\n\n\t\t\tattr.legendcell.classed('sja_hideable_legend', true).on('click', () => {\n\t\t\t\ttk.tip2.hide()\n\t\t\t\tattr.hidden = 1\n\t\t\t\ttk.legend_more_row.style('display', 'table-row')\n\t\t\t\tclient.flyindi(attr.legendcell, tk.legend_more_label)\n\t\t\t\tattr.legendrow.transition().delay(500).style('display', 'none')\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tmay_legend_attribute(tk, block)\n\t\t\t\t}, 500)\n\t\t\t})\n\n\t\t\tif (attr.hidden) {\n\t\t\t\t// this attribute is hidden\n\t\t\t\tattr.legendrow.style('display', 'none')\n\t\t\t\thiddenAttributes.push(attr)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// this attribute is not hidden\n\n\t\t\tif (attr.value2count.size + attr.hiddenvalues.size == 0) {\n\t\t\t\t// no value after counting, no hidden value either: no data for this attribute\n\t\t\t\tattr.legendrow.style('display', 'none')\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// this attribute is shown\n\t\t\tattr.legendrow.style('display', 'table-row')\n\n\t\t\tattr.legendholder.selectAll('*').remove()\n\n\t\t\tconst lst = [...attr.value2count]\n\t\t\tlst.sort((i, j) => j[1].totalitems - i[1].totalitems)\n\n\t\t\tfor (const [valuestr, _o] of lst) {\n\t\t\t\tconst printstr = attr.values[valuestr] ? attr.values[valuestr].name : valuestr\n\n\t\t\t\tconst cell = attr.legendholder\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.attr('class', 'sja_clb')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\ttk.tip2.clear()\n\n\t\t\t\t\t\tif (attr.hiddenvalues.has(valuestr)) {\n\t\t\t\t\t\t\ttk.tip2.d\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t\t\t.text('Show')\n\t\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\t\ttk.tip2.hide()\n\t\t\t\t\t\t\t\t\tattr.hiddenvalues.delete(valuestr)\n\t\t\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttk.tip2.d\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t\t\t.text('Hide')\n\t\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\t\ttk.tip2.hide()\n\t\t\t\t\t\t\t\t\tattr.hiddenvalues.add(valuestr)\n\t\t\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttk.tip2.d\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t\t.text('Show only')\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\ttk.tip2.hide()\n\t\t\t\t\t\t\t\tfor (const [vstr, c] of lst) {\n\t\t\t\t\t\t\t\t\tattr.hiddenvalues.add(vstr)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tattr.hiddenvalues.delete(valuestr)\n\t\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\tif (attr.hiddenvalues.size) {\n\t\t\t\t\t\t\ttk.tip2.d\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t\t\t.text('Show all')\n\t\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\t\ttk.tip2.hide()\n\t\t\t\t\t\t\t\t\tattr.hiddenvalues.clear()\n\t\t\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// label for this value?\n\t\t\t\t\t\tif (attr.values[valuestr] && attr.values[valuestr].label) {\n\t\t\t\t\t\t\ttk.tip2.d\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.text(attr.values[valuestr].label)\n\t\t\t\t\t\t\t\t.style('opacity', 0.5)\n\t\t\t\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t\t\t\t.style('margin', '10px')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// show by-dt count\n\t\t\t\t\t\tif (_o.dt2count) {\n\t\t\t\t\t\t\tconst lst2 = [..._o.dt2count]\n\t\t\t\t\t\t\tlst2.sort((i, j) => j[1] - i[1])\n\n\t\t\t\t\t\t\tconst table = tk.tip2.d\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('margin', '5px')\n\t\t\t\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t\t\t\t.style('opacity', 0.8)\n\t\t\t\t\t\t\t\t.style('border-spacing', '4px')\n\t\t\t\t\t\t\tfor (const [dt, count] of lst2) {\n\t\t\t\t\t\t\t\tconst tr = table.append('tr')\n\t\t\t\t\t\t\t\ttr.append('td').text(common.dt2label[dt])\n\t\t\t\t\t\t\t\ttr.append('td').text(count)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttk.tip2.showunder(cell.node())\n\t\t\t\t\t})\n\n\t\t\t\tconst color =\n\t\t\t\t\tattrGrp == 'sampleAttribute' && tk.legend_samplegroups && tk.legend_samplegroups.color(valuestr)\n\t\t\t\t\t\t? tk.legend_samplegroups.color(valuestr)\n\t\t\t\t\t\t: '#858585'\n\n\t\t\t\tcell\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t\t\t.style('background', color)\n\t\t\t\t\t.text(_o.totalitems)\n\t\t\t\tcell.append('span').html(' ' + printstr)\n\t\t\t}\n\n\t\t\tif (attr.hiddenvalues.size) {\n\t\t\t\t// this attribute has hidden values, show with strike-through\n\t\t\t\tfor (const valuestr of attr.hiddenvalues) {\n\t\t\t\t\tconst printstr = attr.values[valuestr] && attr.values[valuestr].name ? attr.values[valuestr].name : valuestr\n\n\t\t\t\t\tattr.legendholder\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t\t.attr('class', 'sja_clb')\n\t\t\t\t\t\t.style('text-decoration', 'line-through')\n\t\t\t\t\t\t.text(printstr)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tattr.hiddenvalues.delete(valuestr)\n\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tmay_process_hideable_rows(tk, block, hiddenAttributes)\n}\n\nfunction may_process_hideable_rows(tk, block, hiddenAttributes) {\n\t// handle non-mutation attribute\n\tlet numHiddenRows = 0\n\tfor (const hideable of tk.legend_hideable) {\n\t\thideable.row\n\t\t\t.select('td')\n\t\t\t.classed('sja_hideable_legend', true)\n\t\t\t.on('click', () => {\n\t\t\t\ttk.tip2.hide()\n\t\t\t\thideable.hidden = 1\n\t\t\t\ttk.legend_more_row.style('display', 'table-row')\n\t\t\t\tclient.flyindi(hideable.row.select('td'), tk.legend_more_label)\n\t\t\t\thideable.row.transition().delay(500).style('display', 'none')\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tmay_legend_attribute(tk, block)\n\t\t\t\t}, 500)\n\t\t\t})\n\n\t\thideable.row.style('display', hideable.hidden ? 'none' : 'table-row')\n\t\tif (hideable.hidden) {\n\t\t\tnumHiddenRows++\n\t\t}\n\t}\n\n\tif (!hiddenAttributes.length && !numHiddenRows) {\n\t\ttk.legend_more_row.style('display', 'none')\n\t} else {\n\t\ttk.legend_more_row.style('display', 'table-row')\n\t\ttk.legend_more_label.selectAll('*').remove()\n\n\t\tconst btn = tk.legend_more_label\n\t\t\t.attr('class', 'sja_legend_more_btn')\n\t\t\t.html('MORE...')\n\t\t\t.on('click', () => {\n\t\t\t\ttk.tip2.clear()\n\n\t\t\t\tfor (const hideable of tk.legend_hideable) {\n\t\t\t\t\tif (!hideable.hidden) continue\n\t\t\t\t\tconst div = tk.tip2.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttk.tip2.hide()\n\t\t\t\t\t\t\thideable.hidden = 0\n\t\t\t\t\t\t\tmay_legend_attribute(tk, block)\n\t\t\t\t\t\t})\n\n\t\t\t\t\tif (hideable.hidden && hideable.total_count) {\n\t\t\t\t\t\tdiv\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t\t\t\t\t.style('background', '#858585')\n\t\t\t\t\t\t\t.text(hideable.total_count)\n\t\t\t\t\t}\n\n\t\t\t\t\tdiv.append('span').html(' ' + hideable.row.node().firstChild.innerHTML)\n\t\t\t\t}\n\n\t\t\t\tfor (const attr of hiddenAttributes) {\n\t\t\t\t\tif (!attr.hidden) continue\n\t\t\t\t\tconst total = [...attr.value2count.values()].reduce((a, b) => a + b.totalitems, 0)\n\t\t\t\t\tconst div = tk.tip2.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\ttk.tip2.hide()\n\t\t\t\t\t\t\tattr.hidden = 0\n\t\t\t\t\t\t\tmay_legend_attribute(tk, block)\n\t\t\t\t\t\t})\n\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t\t.attr('class', 'sja_mcdot')\n\t\t\t\t\t\t.style('background', '#858585')\n\t\t\t\t\t\t.text(total)\n\n\t\t\t\t\tdiv.append('span').html(' ' + attr.label)\n\t\t\t\t}\n\n\t\t\t\ttk.tip2.showunder(btn.node())\n\t\t\t})\n\t}\n}\n\nfunction count_sampleAttribute(key, attr, sample) {\n\tif (!(key in sample)) return\n\n\tif (!attr.filter) return // not a filter\n\n\tconst value = sample[key]\n\tif (!attr.value2count.has(value)) {\n\t\tattr.value2count.set(value, {\n\t\t\ttotalitems: 0\n\t\t})\n\t}\n\tattr.value2count.get(value).totalitems++\n\tif (!attr.values) {\n\t\tattr.values = {}\n\t}\n\tif (!attr.values[value]) {\n\t\tattr.values[value] = {\n\t\t\tname: value,\n\t\t\tlabel: value\n\t\t}\n\t}\n}\n\nfunction count_mutationAttribute(mattr, tk, itemdt) {\n\tif (!mattr) {\n\t\t// the item does not have mattr, do not count\n\t\treturn\n\t}\n\tif (!tk.mutationAttribute) return\n\n\tfor (const key in tk.mutationAttribute.attributes) {\n\t\tconst attr = tk.mutationAttribute.attributes[key]\n\t\tif (!attr.filter) continue\n\n\t\tconst value = mattr[key]\n\n\t\tif (value == undefined) {\n\t\t\t// not annotated, do not count\n\t\t\tcontinue\n\t\t}\n\n\t\t/*\n\t\tno longer acknowledge unannotated values\n\t\tif( value==undefined ) {\n\t\t\t// this item is not annotated, change its label to hardcoded\n\t\t\tvalue = common.not_annotated\n\t\t}\n\t\t*/\n\n\t\t// even if this value is not cataloged in attr.values{}, still record it for displaying\n\t\tif (!attr.value2count.has(value)) {\n\t\t\tattr.value2count.set(value, {\n\t\t\t\ttotalitems: 0,\n\t\t\t\tdt2count: new Map()\n\t\t\t})\n\t\t}\n\t\tattr.value2count.get(value).totalitems++\n\n\t\tif (!attr.value2count.get(value).dt2count.has(itemdt)) {\n\t\t\tattr.value2count.get(value).dt2count.set(itemdt, 0)\n\t\t}\n\n\t\tattr.value2count.get(value).dt2count.set(itemdt, attr.value2count.get(value).dt2count.get(itemdt) + 1)\n\t}\n}\n\nfunction count_locusAttribute(tk, m) {\n\tif (!tk.locusAttribute) return\n\n\tfor (const key in tk.locusAttribute.attributes) {\n\t\tconst attr = tk.locusAttribute.attributes[key]\n\t\tif (!attr.filter) continue\n\n\t\tconst _value = m.info[key]\n\n\t\tif (_value == undefined) continue // not annotated, do not count\n\n\t\t// quick fix! should refer to info field definition\n\t\tlet value\n\t\tif (Array.isArray(_value)) {\n\t\t\tvalue = _value[0]\n\t\t\tif (value == '.') continue\n\t\t} else {\n\t\t\tvalue = _value\n\t\t}\n\n\t\tif (attr.hiddenvalues.has(value)) continue\n\n\t\t// even if this value is not cataloged in attr.values{}, still record it for displaying\n\t\tif (!attr.value2count.has(value)) {\n\t\t\tattr.value2count.set(value, {\n\t\t\t\ttotalitems: 0,\n\t\t\t\tdt2count: new Map()\n\t\t\t})\n\t\t}\n\t\tattr.value2count.get(value).totalitems++\n\n\t\tif (!attr.value2count.get(value).dt2count.has(m.dt)) {\n\t\t\tattr.value2count.get(value).dt2count.set(m.dt, 0)\n\t\t}\n\n\t\tattr.value2count.get(value).dt2count.set(m.dt, attr.value2count.get(value).dt2count.get(m.dt) + 1)\n\t}\n}\n", "import * as client from './client'\nimport * as common from '#shared/common.js'\nimport { scaleLinear, scaleLog } from 'd3-scale'\nimport { axisRight } from 'd3-axis'\nimport { tooltip_singleitem, svcoord2html, make_svgraph, detailtable_singlesample } from './block.mds.svcnv.clickitem'\nimport {\n\tmap_cnv,\n\tlabelspace,\n\tdraw_colorscale_cnv,\n\tdraw_colorscale_loh,\n\tintrasvcolor,\n\ttrackclear,\n\titemname_svfusion,\n\tvcfvariantisgermline\n} from './block.mds.svcnv'\nimport { update_legend } from './block.mds.svcnv.legend'\n\nexport function render_singlesample(tk, block) {\n\t/*\n\tsingle-sample mode\n\tmay not have any data!\n\tsv/fusion with both feet in view range as legged\n\tcnv & loh & snvindel & itd as stack bars\n\t*/\n\n\ttrackclear(tk)\n\n\tconst svlst = []\n\tconst cnvlst = []\n\tconst lohlst = []\n\tconst itdlst = []\n\tconst id2sv = {} // must dedup sv, tell by breakpoint position\n\n\tconst usecopynumber = false // but not logratio\n\n\tlet gainmaxvalue = 0, // for cnv logratio\n\t\tlossmaxvalue = 0,\n\t\tcopynumbermax = 0, // for copy number converted from logratio, instead of logratio\n\t\tsegmeanmax = 0\n\n\tif (tk.data) {\n\t\t// divide cnv/loh/sv/itd data into holders\n\n\t\tfor (const item of tk.data) {\n\t\t\tif (item.dt == common.dtfusionrna || item.dt == common.dtsv) {\n\t\t\t\t// sv\n\n\t\t\t\tconst id = item.chrA + '.' + item.posA + '.' + item.chrB + '.' + item.posB + '.' + item.dt\n\n\t\t\t\tif (!id2sv[id]) {\n\t\t\t\t\tmap_sv(item, block)\n\t\t\t\t\tif (item.x0 || item.x1) {\n\t\t\t\t\t\tid2sv[id] = 1\n\t\t\t\t\t\tsvlst.push(item)\n\t\t\t\t\t\tif (item.chrA != item._chr) {\n\t\t\t\t\t\t\ttk.legend_svchrcolor.interchrs.add(item.chrA)\n\t\t\t\t\t\t\ttk.legend_svchrcolor.colorfunc(item.chrA)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (item.chrB != item._chr) {\n\t\t\t\t\t\t\ttk.legend_svchrcolor.interchrs.add(item.chrB)\n\t\t\t\t\t\t\ttk.legend_svchrcolor.colorfunc(item.chrB)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// cnv, loh, itd\n\n\t\t\tmap_cnv(item, tk, block)\n\t\t\tif (item.x1 == undefined || item.x2 == undefined) {\n\t\t\t\tconsole.log('unmappable: ' + item.chr + ' ' + item.start + ' ' + item.stop)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.dt == common.dtloh) {\n\t\t\t\t// loh\n\t\t\t\tsegmeanmax = Math.max(segmeanmax, item.segmean)\n\t\t\t\tlohlst.push(item)\n\t\t\t} else if (item.dt == common.dtcnv) {\n\t\t\t\t// cnv\n\t\t\t\tif (usecopynumber) {\n\t\t\t\t\tconst v = 2 * Math.pow(2, item.value)\n\t\t\t\t\tcopynumbermax = Math.max(copynumbermax, v)\n\t\t\t\t} else {\n\t\t\t\t\t// item.value is log2 ratio by default\n\t\t\t\t\tif (item.value > 0) {\n\t\t\t\t\t\tgainmaxvalue = Math.max(gainmaxvalue, item.value)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlossmaxvalue = Math.min(lossmaxvalue, item.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcnvlst.push(item)\n\t\t\t} else if (item.dt == common.dtitd) {\n\t\t\t\titdlst.push(item)\n\t\t\t}\n\t\t}\n\n\t\tif (cnvlst.length) {\n\t\t\ttk.cnvcolor.cnvmax = Math.max(gainmaxvalue, -lossmaxvalue)\n\t\t\tdraw_colorscale_cnv(tk)\n\t\t}\n\n\t\tif (lohlst.length) {\n\t\t\ttk.cnvcolor.segmeanmax = segmeanmax\n\t\t\tdraw_colorscale_loh(tk)\n\t\t}\n\t}\n\n\t// sv on top\n\tconst svheight = render_singlesample_sv(group_sv(svlst), tk, block)\n\n\t/*\n\tstack bar plot on bottom:\n\t\tcnv, itd, loh as bars\n\t\tsnvindel: show label\n\t*/\n\ttk.cnv_g.attr('transform', 'translate(0,' + svheight + ')')\n\n\ttk.waterfall.axisgg.attr('transform', 'translate(0,' + svheight + ')')\n\n\tconst items = [...cnvlst, ...lohlst, ...itdlst] // stack bar items\n\tif (tk.data_vcf) {\n\t\tfor (const m of tk.data_vcf) {\n\t\t\tif (m.x != undefined) {\n\t\t\t\titems.push(m)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst stackploth = render_singlesample_stack(items, tk, block)\n\n\ttk.height_main = tk.toppad + svheight + stackploth + tk.bottompad\n\n\tupdate_legend(tk, block)\n}\n\nfunction group_sv(lst) {\n\t/*\n\tsv/fusion will be merged\n\n\tfor group of sv with both ends mapped, their ends are close enough within a bin\n\n\tfor group of sv with only one mapped end, no matter which, that end for each is within a bin\n\n\n\tinput:\n\t.x0 .x1 could be undefined\n\t.chrA .chrB\n\t.posA .posB\n\n\toutput will add .lst[ {original} ]\n\t*/\n\tconst newlst = []\n\n\tconst pxbinsize = 8 // bin pixel size\n\n\tfor (let i = 0; i < lst.length; i++) {\n\t\tconst si = lst[i]\n\t\tif (si.__claimed) continue\n\n\t\tconst thisgroup = {\n\t\t\tx0: si.x0,\n\t\t\tx1: si.x1,\n\t\t\t_chr: si._chr,\n\t\t\tchrA: si.chrA,\n\t\t\tchrB: si.chrB,\n\t\t\tposA: si.posA,\n\t\t\tposB: si.posB,\n\t\t\tlst: [si]\n\t\t}\n\n\t\tfor (let j = i + 1; j < lst.length; j++) {\n\t\t\tconst sj = lst[j]\n\t\t\tif (sj.__claimed) continue\n\n\t\t\tconst isoneend = sj.x0 == undefined || sj.x1 == undefined\n\n\t\t\tif (si.x0 != undefined && si.x1 != undefined) {\n\t\t\t\t// two ends\n\n\t\t\t\tif (isoneend) continue\n\n\t\t\t\tif (Math.abs(sj.x0 - si.x0) <= pxbinsize && Math.abs(sj.x1 - si.x1) <= pxbinsize) {\n\t\t\t\t\tthisgroup.lst.push(sj)\n\t\t\t\t\tsj.__claimed = true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// one end\n\t\t\t\tif (!isoneend) continue\n\t\t\t\tconst end_i = si.x0 == undefined ? si.x1 : si.x0\n\t\t\t\tconst end_j = sj.x0 == undefined ? sj.x1 : sj.x0\n\t\t\t\tif (Math.abs(end_i - end_j) <= pxbinsize) {\n\t\t\t\t\tthisgroup.lst.push(sj)\n\t\t\t\t\tsj.__claimed = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tnewlst.push(thisgroup)\n\t}\n\n\tfor (const s of lst) delete s.__claimed\n\n\treturn newlst\n}\n\nfunction getcolor_snvindel(m, tk) {\n\tif (tk.mds && tk.mds.mutation_signature) {\n\t\tif (m.sampledata && m.sampledata[0]) {\n\t\t\t// which signature set this sample has\n\t\t\tfor (const setkey in tk.mds.mutation_signature.sets) {\n\t\t\t\tconst v = m.sampledata[0][setkey]\n\t\t\t\tif (v) {\n\t\t\t\t\treturn tk.mds.mutation_signature.sets[setkey].signatures[v].color\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn common.mclass[m.class].color\n}\n\nfunction render_singlesample_stack(items, tk, block, svheight) {\n\tif (items.length == 0) return 0\n\n\t/*\n\tstack for cnv/loh/snvindel/itd\n\tall in items[]\n\t*/\n\n\tconst stackheight = 12 // hardcoded\n\tconst stackspace = 1\n\n\tlet waterfall_shown = false\n\n\tif (tk.waterfall.inuse) {\n\t\t/* has waterfall, only show snvindel\n\t\tsegment items still in stack plot\n\t\t*/\n\t\tconst snvindels = items.filter(m => m.dt == common.dtsnvindel)\n\t\tif (snvindels.length > 1) {\n\t\t\tif (plot_waterfall(snvindels, tk, block)) {\n\t\t\t\twaterfall_shown = true\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!waterfall_shown) {\n\t\t/* no waterfall\n\t\tprep & pre-render snvindel\n\t\t*/\n\n\t\ttk.waterfall.axisg.selectAll('*').remove()\n\t\ttk.waterfall.lab1.text('')\n\t\ttk.waterfall.lab2.text('')\n\t\ttk.waterfall.lab3.text('')\n\n\t\tfor (const m of items) {\n\t\t\tif (m.dt != common.dtsnvindel) continue\n\n\t\t\tconst g = tk.cnv_g.append('g')\n\t\t\tm._p = {\n\t\t\t\tg: g\n\t\t\t}\n\t\t\t/* for later use:\n\t\t\tstackw\n\t\t\tstackx\n\t\t\tg_x\n\t\t\t*/\n\n\t\t\tconst color = getcolor_snvindel(m, tk)\n\n\t\t\t/////////////////////////////////// label is the same for snvindel/itd\n\t\t\t// mouseover event not on label but on cover box\n\t\t\tconst lab = g\n\t\t\t\t.append('text')\n\t\t\t\t.attr('font-size', stackheight)\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('fill', color)\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.text(m.mname)\n\n\t\t\tlet labelw\n\t\t\tlab.each(function () {\n\t\t\t\tlabelw = this.getBBox().width\n\t\t\t})\n\n\t\t\tconst bgbox = g\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', -stackheight / 2)\n\t\t\t\t.attr('y', -stackheight / 2)\n\t\t\t\t.attr('width', stackheight)\n\t\t\t\t.attr('height', stackheight)\n\t\t\t\t.attr('fill', color)\n\t\t\t\t.attr('fill-opacity', 0)\n\n\t\t\tlet fgline1, fgline2\n\n\t\t\tif (m.sampledata && vcfvariantisgermline(m.sampledata[0], tk)) {\n\t\t\t\tfgline1 = g\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('y1', 1 - stackheight / 2)\n\t\t\t\t\t.attr('y2', stackheight / 2 - 1)\n\t\t\t\tfgline2 = g\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('x1', 1 - stackheight / 2)\n\t\t\t\t\t.attr('x2', stackheight / 2 - 1)\n\t\t\t} else {\n\t\t\t\tfgline1 = g\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('x1', 1 - stackheight / 2)\n\t\t\t\t\t.attr('x2', stackheight / 2 - 1)\n\t\t\t\t\t.attr('y1', 1 - stackheight / 2)\n\t\t\t\t\t.attr('y2', stackheight / 2 - 1)\n\t\t\t\tfgline2 = g\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t\t.attr('x1', 1 - stackheight / 2)\n\t\t\t\t\t.attr('x2', stackheight / 2 - 1)\n\t\t\t\t\t.attr('y1', stackheight / 2 - 1)\n\t\t\t\t\t.attr('y2', 1 - stackheight / 2)\n\t\t\t}\n\n\t\t\t// to cover both cross & label, will be placed after deciding whether label is on left/right\n\t\t\tm._p.cover = g\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('y', -stackheight / 2)\n\t\t\t\t.attr('width', stackheight + labelspace + labelw)\n\t\t\t\t.attr('height', stackheight)\n\t\t\t\t.attr('fill', 'white')\n\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\tbgbox.attr('fill-opacity', 1)\n\t\t\t\t\tfgline1.attr('stroke', 'white')\n\t\t\t\t\tfgline2.attr('stroke', 'white')\n\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\titem: m,\n\t\t\t\t\t\tm_sample: m.sampledata[0],\n\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\tblock: block\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\tbgbox.attr('fill-opacity', 0)\n\t\t\t\t\tfgline1.attr('stroke', color)\n\t\t\t\t\tfgline2.attr('stroke', color)\n\t\t\t\t})\n\n\t\t\t//////////////////////////////// set position for text label & cover\n\n\t\t\tm._p.stackw = stackheight + 5 + labelw\n\n\t\t\tif (block.width - m.x > labelw + labelspace + stackheight / 2) {\n\t\t\t\t// label on right\n\t\t\t\tm._p.stackx = m.x - stackheight / 2\n\t\t\t\tm._p.g_x = stackheight / 2\n\t\t\t\tlab.attr('x', stackheight / 2 + labelspace)\n\t\t\t\tm._p.cover.attr('x', -stackheight / 2)\n\t\t\t} else {\n\t\t\t\t// label on left\n\t\t\t\tm._p.stackx = m.x - stackheight / 2 - labelspace - labelw\n\t\t\t\tm._p.g_x = stackheight / 2 + labelspace + labelw\n\t\t\t\tlab.attr('x', -stackheight / 2 - labelspace).attr('text-anchor', 'end')\n\t\t\t\tm._p.cover.attr('x', -labelw - labelspace - stackheight / 2)\n\t\t\t}\n\t\t}\n\t}\n\n\titems.sort((i, j) => {\n\t\tconst xi = i._p ? i._p.stackx : Math.min(i.x1, i.x2)\n\t\tconst xj = j._p ? j._p.stackx : Math.min(j.x1, j.x2)\n\t\treturn xi - xj\n\t})\n\n\tconst stacks = [0]\n\tfor (const item of items) {\n\t\tif (waterfall_shown && item.dt == common.dtsnvindel) continue\n\t\t/*\n\t\tmust delete\n\t\t*/\n\t\tdelete item.stack\n\n\t\tconst itemstart = item._p ? item._p.stackx : Math.min(item.x1, item.x2)\n\t\tconst itemwidth = item._p ? item._p.stackw : Math.abs(item.x1 - item.x2)\n\n\t\tfor (let i = 0; i < stacks.length; i++) {\n\t\t\tif (stacks[i] <= itemstart) {\n\t\t\t\tstacks[i] = itemstart + itemwidth\n\t\t\t\titem.stack = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (item.stack == undefined) {\n\t\t\titem.stack = stacks.length\n\t\t\tstacks.push(itemstart + itemwidth)\n\t\t}\n\t}\n\n\tconst yoff = waterfall_shown ? tk.waterfall.axisheight + tk.waterfall.bottompad : 0\n\n\tfor (const item of items) {\n\t\tif (item.dt == common.dtloh || item.dt == common.dtcnv || item.dt == common.dtitd) {\n\t\t\tlet color\n\n\t\t\tif (item.dt == common.dtloh) {\n\t\t\t\tcolor =\n\t\t\t\t\t'rgba(' +\n\t\t\t\t\ttk.cnvcolor.loh.r +\n\t\t\t\t\t',' +\n\t\t\t\t\ttk.cnvcolor.loh.g +\n\t\t\t\t\t',' +\n\t\t\t\t\ttk.cnvcolor.loh.b +\n\t\t\t\t\t',' +\n\t\t\t\t\titem.segmean / tk.cnvcolor.segmeanmax +\n\t\t\t\t\t')'\n\t\t\t} else if (item.dt == common.dtcnv) {\n\t\t\t\tif (item.value > 0) {\n\t\t\t\t\tcolor =\n\t\t\t\t\t\t'rgba(' +\n\t\t\t\t\t\ttk.cnvcolor.gain.r +\n\t\t\t\t\t\t',' +\n\t\t\t\t\t\ttk.cnvcolor.gain.g +\n\t\t\t\t\t\t',' +\n\t\t\t\t\t\ttk.cnvcolor.gain.b +\n\t\t\t\t\t\t',' +\n\t\t\t\t\t\titem.value / tk.cnvcolor.cnvmax +\n\t\t\t\t\t\t')'\n\t\t\t\t} else {\n\t\t\t\t\tcolor =\n\t\t\t\t\t\t'rgba(' +\n\t\t\t\t\t\ttk.cnvcolor.loss.r +\n\t\t\t\t\t\t',' +\n\t\t\t\t\t\ttk.cnvcolor.loss.g +\n\t\t\t\t\t\t',' +\n\t\t\t\t\t\ttk.cnvcolor.loss.b +\n\t\t\t\t\t\t',' +\n\t\t\t\t\t\t-item.value / tk.cnvcolor.cnvmax +\n\t\t\t\t\t\t')'\n\t\t\t\t}\n\t\t\t} else if (item.dt == common.dtitd) {\n\t\t\t\tcolor = common.mclass[common.mclassitd].color\n\t\t\t}\n\n\t\t\ttk.cnv_g\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', Math.min(item.x1, item.x2))\n\t\t\t\t.attr('y', yoff + (stackheight + stackspace) * item.stack)\n\t\t\t\t.attr('width', Math.max(1, Math.abs(item.x2 - item.x1)))\n\t\t\t\t.attr('height', stackheight)\n\t\t\t\t.attr('fill', color)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.attr('stroke', 'none')\n\t\t\t\t.attr('class', 'sja_aa_skkick')\n\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\titem: item,\n\t\t\t\t\t\ttk: tk\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tif (item.dt == common.dtsnvindel && !waterfall_shown) {\n\t\t\titem._p.g.attr(\n\t\t\t\t'transform',\n\t\t\t\t'translate(' +\n\t\t\t\t\t(item._p.stackx + item._p.g_x) +\n\t\t\t\t\t',' +\n\t\t\t\t\t(stackheight / 2 + (stackheight + stackspace) * item.stack) +\n\t\t\t\t\t')'\n\t\t\t)\n\t\t\tcontinue\n\t\t}\n\t}\n\n\treturn yoff + stacks.length * (stackheight + stackspace) - stackspace\n}\n\nfunction plot_waterfall(snvindels, tk, block) {\n\t/*\nwaterfall only plots snvindel, not breakpoint\nplot them in cnv_g, axis shown in .waterfall.axisgg{}\n*/\n\n\t// first item has no dist\n\tsnvindels[0].water = {\n\t\th: tk.waterfall.axisheight\n\t}\n\n\tlet maxdist = 0\n\tfor (let i = 1; i < snvindels.length; i++) {\n\t\tconst m = snvindels[i]\n\t\tif (m.chr != snvindels[i - 1].chr) {\n\t\t\t// saw a new chr; snv from subpanel could be in different chr\n\t\t\tm.water = {\n\t\t\t\th: tk.waterfall.axisheight\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tm.water = {\n\t\t\tbpdist: m.pos - snvindels[i - 1].pos\n\t\t}\n\t\tmaxdist = Math.max(maxdist, m.water.bpdist)\n\t}\n\n\tif (maxdist < 2) {\n\t\t// cannot draw\n\t\treturn false\n\t}\n\n\t// show axis\n\tclient.axisstyle({\n\t\taxis: tk.waterfall.axisg.call(\n\t\t\taxisRight()\n\t\t\t\t.ticks(3, '.0f')\n\t\t\t\t.scale(scaleLog().domain([1, maxdist]).range([tk.waterfall.axisheight, 0]))\n\t\t),\n\t\tcolor: 'black',\n\t\tshowline: 1\n\t})\n\ttk.waterfall.lab1.text('Log10').attr('y', tk.waterfall.axisheight / 2 - 14)\n\ttk.waterfall.lab2.text('intermutation').attr('y', tk.waterfall.axisheight / 2)\n\ttk.waterfall.lab3.text('distance').attr('y', tk.waterfall.axisheight / 2 + 14)\n\n\tfor (let i = 1; i < snvindels.length; i++) {\n\t\tconst m = snvindels[i]\n\t\tif (m.water.h) {\n\t\t\t// already set\n\t\t\tcontinue\n\t\t}\n\t\tif (m.water.bpdist == 0) {\n\t\t\tm.water.h = 0\n\t\t} else {\n\t\t\tm.water.h = (Math.log10(m.water.bpdist) * tk.waterfall.axisheight) / Math.log10(maxdist)\n\t\t}\n\t}\n\n\t// repetition of code\n\n\tconst stackheight = 12 // hardcoded\n\tconst stackspace = 1\n\tfor (const m of snvindels) {\n\t\tconst g = tk.cnv_g\n\t\t\t.append('g')\n\t\t\t.attr('transform', 'translate(' + m.x + ',' + (tk.waterfall.axisheight - m.water.h) + ')')\n\n\t\tconst color = getcolor_snvindel(m, tk)\n\n\t\tconst bgbox = g\n\t\t\t.append('rect')\n\t\t\t.attr('x', -stackheight / 2)\n\t\t\t.attr('y', -stackheight / 2)\n\t\t\t.attr('width', stackheight)\n\t\t\t.attr('height', stackheight)\n\t\t\t.attr('fill', color)\n\t\t\t.attr('fill-opacity', 0)\n\n\t\tlet fgline1, fgline2\n\n\t\tif (m.sampledata && vcfvariantisgermline(m.sampledata[0], tk)) {\n\t\t\tfgline1 = g\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t.attr('y1', 1 - stackheight / 2)\n\t\t\t\t.attr('y2', stackheight / 2 - 1)\n\t\t\tfgline2 = g\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t.attr('x1', 1 - stackheight / 2)\n\t\t\t\t.attr('x2', stackheight / 2 - 1)\n\t\t} else {\n\t\t\tfgline1 = g\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t.attr('x1', 1 - stackheight / 2)\n\t\t\t\t.attr('x2', stackheight / 2 - 1)\n\t\t\t\t.attr('y1', 1 - stackheight / 2)\n\t\t\t\t.attr('y2', stackheight / 2 - 1)\n\t\t\tfgline2 = g\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('stroke-width', 2)\n\t\t\t\t.attr('x1', 1 - stackheight / 2)\n\t\t\t\t.attr('x2', stackheight / 2 - 1)\n\t\t\t\t.attr('y1', stackheight / 2 - 1)\n\t\t\t\t.attr('y2', 1 - stackheight / 2)\n\t\t}\n\n\t\t// to cover both cross & label, will be placed after deciding whether label is on left/right\n\t\tg.append('rect')\n\t\t\t.attr('y', -stackheight / 2)\n\t\t\t.attr('x', -stackheight / 2)\n\t\t\t.attr('width', stackheight)\n\t\t\t.attr('height', stackheight)\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.on('mouseover', () => {\n\t\t\t\tbgbox.attr('fill-opacity', 1)\n\t\t\t\tfgline1.attr('stroke', 'white')\n\t\t\t\tfgline2.attr('stroke', 'white')\n\t\t\t\ttooltip_singleitem({\n\t\t\t\t\titem: m,\n\t\t\t\t\tm_sample: m.sampledata[0],\n\t\t\t\t\ttk: tk,\n\t\t\t\t\tblock: block\n\t\t\t\t})\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\ttk.tktip.hide()\n\t\t\t\tbgbox.attr('fill-opacity', 0)\n\t\t\t\tfgline1.attr('stroke', color)\n\t\t\t\tfgline2.attr('stroke', color)\n\t\t\t})\n\t\tdelete m.water\n\t}\n\treturn true // successfully drawn\n}\n\nfunction horiplace(lst, width) {\n\t/*\n\tj._x: ideal position\n\tj.x: shifted position\n\t*/\n\n\tlst.forEach(i => (i.tox = i._x))\n\tconst todo = lst\n\n\ttodo.sort((a, b) => {\n\t\treturn a.tox - b.tox\n\t})\n\n\t// push all to left\n\t// set initial x for all for shifting\n\tlet cumx = todo.length == 0 ? 0 : todo[0].radius\n\tfor (const i of todo) {\n\t\ti.x = cumx + i.radius\n\t\tcumx += i.radius * 2\n\t}\n\n\tfor (let i = 0; i < todo.length; i++) {\n\t\twhile (1) {\n\t\t\tlet currsum = 0,\n\t\t\t\tnewsum = 0\n\t\t\tfor (let j = i; j < todo.length; j++) {\n\t\t\t\tconst k = todo[j]\n\t\t\t\t// detect conditions to stop\n\t\t\t\tif (j > 0) {\n\t\t\t\t\tconst prev = todo[j - 1]\n\t\t\t\t\tif (prev.x + prev.radius <= k.x - k.radius) {\n\t\t\t\t\t\t// not overlapping with previous\n\t\t\t\t\t\tif (k.x >= k.tox) {\n\t\t\t\t\t\t\t// so it can stop\n\t\t\t\t\t\t\tbreak\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 (k.x >= k.tox) {\n\t\t\t\t\t\t// the first one, it can stop too\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst z = todo[todo.length - 1]\n\t\t\t\tif (z.x + z.radius >= width) {\n\t\t\t\t\t// last one out of range\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcurrsum += Math.abs(k.x - k.tox)\n\t\t\t\tk.x++\n\t\t\t\tnewsum += Math.abs(k.x - k.tox)\n\t\t\t}\n\t\t\tif (newsum < currsum) {\n\t\t\t} else {\n\t\t\t\t// reject\n\t\t\t\tfor (let j = i; j < todo.length; j++) {\n\t\t\t\t\ttodo[j].x--\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\ttodo.forEach(i => delete i.tox)\n}\n\nfunction render_singlesample_sv(svlst, tk, block) {\n\tif (svlst.length == 0) return 0\n\n\tlet sf_discradius\n\t{\n\t\tlet maxcount = 1\n\t\tfor (const j of svlst) maxcount = Math.max(maxcount, j.lst.length)\n\n\t\tlet mrd = 0 // max radius\n\t\tconst w = Math.pow(tk.discradius, 2) * Math.PI // unit area\n\n\t\t/*\n\t\tif(maxcount==1) {\n\t\t\tmrd=w\n\t\t} else if(maxcount<=2) {\n\t\t\tmrd=w * 1.4\n\t\t} else if(maxcount<=3) {\n\t\t\tmrd=w * 1.7\n\t\t} else if(maxcount<=5) {\n\t\t\tmrd=w * 2\n\t\t} else if(maxcount<=8) {\n\t\t\tmrd=w * 3\n\t\t} else {\n\t\t\tmrd=w * 4\n\t\t}\n\n\t\tsf_discradius=scaleLinear()\n\t\t\t.domain([1,\n\t\t\t\tmaxcount*.5+.1,\n\t\t\t\tmaxcount*.6+.1,\n\t\t\t\tmaxcount*.7+.1,\n\t\t\t\tmaxcount*.8+.1,\n\t\t\t\tmaxcount])\n\t\t\t.range([w,\n\t\t\t\tw+(mrd-w)*.8,\n\t\t\t\tw+(mrd-w)*.85,\n\t\t\t\tw+(mrd-w)*.9,\n\t\t\t\tw+(mrd-w)*.95,\n\t\t\t\tmrd])\n\t\t\t\t*/\n\n\t\tconst s = scaleLinear()\n\t\tif (maxcount == 1) {\n\t\t\ts.domain([1, 1]).range([w, w])\n\t\t} else if (maxcount == 2) {\n\t\t\ts.domain([1, 2]).range([w, w * 1.3])\n\t\t} else if (maxcount == 3) {\n\t\t\ts.domain([1, 3]).range([w, w * 1.6])\n\t\t} else if (maxcount == 4) {\n\t\t\ts.domain([1, 4]).range([w, w * 1.8])\n\t\t} else if (maxcount == 6) {\n\t\t\ts.domain([1, 6]).range([w, w * 2])\n\t\t} else if (maxcount == 10) {\n\t\t\ts.domain([1, 10]).range([w, w * 3])\n\t\t} else {\n\t\t\ts.domain([1, maxcount]).range([w, w * 4])\n\t\t}\n\t\tsf_discradius = s\n\t}\n\n\t// clean sv\n\n\tlet maxradius = 0\n\n\tfor (const i of svlst) {\n\t\ti.radius = Math.sqrt(sf_discradius(i.lst.length) / Math.PI)\n\t\tmaxradius = Math.max(i.radius, maxradius)\n\n\t\tif (i.x0 != undefined && i.x1 != undefined) {\n\t\t\tif (i.x0 > i.x1) {\n\t\t\t\t// x0 maybe bigger than x1\n\t\t\t\tconst a = i.x1\n\t\t\t\ti.x1 = i.x0\n\t\t\t\ti.x0 = a\n\t\t\t}\n\t\t\ti._x = (i.x0 + i.x1) / 2\n\t\t} else {\n\t\t\ti._x = i.x0 || i.x1\n\t\t}\n\t\ti.x = i._x\n\t}\n\n\t/*\n\tradius for all items have been set\n\tsum up height for subtrack\n\tif sv has both x0/x1 will show both legs, will be higher, else lower\n\t*/\n\tconst svheight =\n\t\tmaxradius * 2 + // ball diameter\n\t\tmaxradius * 2 + // raise height\n\t\t(svlst.find(s => s.x0 && s.x1) ? tk.legheight : 0)\n\n\ttk.svvcf_g.attr('transform', 'translate(0,' + (svheight - 0) + ')')\n\n\tconst entirewidth = block.width + block.subpanels.reduce((i, j) => i + j.leftpad + j.width, 0)\n\n\t//horiplace( svlst, entirewidth )\n\n\tfor (const sv of svlst) {\n\t\tconst doubleleg = sv.x0 && sv.x1\n\n\t\tconst thislegheight = tk.legheight * (doubleleg ? 1 : 0)\n\t\tconst raiseheight = sv.lst.length == 1 ? sv.radius : sv.radius * 2\n\n\t\tconst g = tk.svvcf_g.append('g').attr('transform', 'translate(' + sv.x + ',-' + (thislegheight + raiseheight) + ')')\n\n\t\tconst otherchr = sv.chrA == sv._chr ? sv.chrB : sv.chrA\n\t\tconst color = otherchr == sv._chr ? intrasvcolor : tk.legend_svchrcolor.colorfunc(otherchr)\n\n\t\tg.append('circle').attr('r', sv.radius).attr('cy', -sv.radius).attr('fill', color).attr('stroke', 'white')\n\n\t\tif (sv.lst.length > 1) {\n\t\t\tconst s = sv.radius * 1.5\n\t\t\tconst text = sv.lst.length.toString()\n\t\t\tconst fontsize = Math.min(s / (text.length * client.textlensf), s)\n\t\t\tg.append('text')\n\t\t\t\t.text(text)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('fill', 'white')\n\t\t\t\t.attr('y', -sv.radius)\n\t\t\t\t.attr('font-size', fontsize)\n\t\t\t\t.attr('font-family', client.font)\n\t\t}\n\n\t\t// cover\n\t\tg.append('circle')\n\t\t\t.attr('r', sv.radius)\n\t\t\t.attr('cy', -sv.radius)\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-opacity', 0)\n\t\t\t.attr('class', 'sja_aa_disckick')\n\t\t\t.on('mouseover', event => {\n\t\t\t\tif (sv.lst.length == 1) {\n\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\titem: sv.lst[0],\n\t\t\t\t\t\ttk: tk\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttooltip_multi_sv(sv.lst, tk, event)\n\t\t\t})\n\t\t\t.on('mouseout', () => tk.tktip.hide())\n\t\t\t.on('click', event => {\n\t\t\t\tif (sv.lst.length == 1) {\n\t\t\t\t\tconst m = sv.lst[0]\n\t\t\t\t\tconst pane = client.newpane({ x: event.clientX, y: event.clientY })\n\t\t\t\t\tpane.header.text(m.sample)\n\t\t\t\t\tpane.body.style('margin-top', '10px')\n\n\t\t\t\t\t// 1 - may split button\n\t\t\t\t\tconst [chr, otherpos] = get_split_coord(m, block)\n\t\t\t\t\tif (chr) {\n\t\t\t\t\t\t// will split\n\t\t\t\t\t\tconst row = pane.body.append('div').style('margin-bottom', '5px')\n\t\t\t\t\t\trow\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t\t\t.text('Add new panel at ' + chr.name + ':' + otherpos)\n\t\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\trow.remove()\n\t\t\t\t\t\t\t\tsplit_panel(chr, otherpos, block)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\t// 2 - svgraph\n\t\t\t\t\tmake_svgraph(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\titem: m,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t\t//tk: tk,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpane.body.append('div')\n\t\t\t\t\t)\n\n\t\t\t\t\t// 3 - detail table\n\t\t\t\t\tdetailtable_singlesample({\n\t\t\t\t\t\titem: m,\n\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\tholder: pane.body.append('div')\n\t\t\t\t\t})\n\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tpanel_multi_sv(sv.lst, tk, block, event)\n\t\t\t})\n\n\t\tif (doubleleg) {\n\t\t\tg.append('line').attr('stroke', color).attr('y2', raiseheight).attr('shape-rendering', 'crispEdges')\n\t\t\tg.append('line') // right leg\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('x2', (sv.x1 - sv.x0) / 2 - (sv.x - sv._x))\n\t\t\t\t.attr('y1', raiseheight)\n\t\t\t\t.attr('y2', raiseheight + thislegheight)\n\t\t\tg.append('line') // left leg\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('x2', -(sv.x1 - sv.x0) / 2 - (sv.x - sv._x))\n\t\t\t\t.attr('y1', raiseheight)\n\t\t\t\t.attr('y2', raiseheight + thislegheight)\n\t\t} else {\n\t\t\tg.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('y2', raiseheight + thislegheight)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t}\n\t}\n\treturn svheight\n}\n\nfunction get_split_coord(sv, block) {\n\tlet otherchr\n\tlet otherpos\n\tif (sv._chr != sv.chrA) {\n\t\totherchr = sv.chrA\n\t\totherpos = sv.posA\n\t} else if (sv._chr != sv.chrB) {\n\t\totherchr = sv.chrB\n\t\totherpos = sv.posB\n\t}\n\tif (!otherchr) return [null]\n\tconst chr = block.genome.chrlookup[otherchr.toUpperCase()]\n\tif (!chr) {\n\t\tblock.error('Invalid chr name: ' + otherchr)\n\t\treturn [null]\n\t}\n\n\t// see if this chr already exists...\n\tfor (const p of block.subpanels) {\n\t\tif (p.chr == otherchr) {\n\t\t\treturn [null]\n\t\t}\n\t}\n\treturn [chr, otherpos]\n}\n\nfunction split_panel(chr, otherpos, block) {\n\tconst span = 10000\n\tconst p = {\n\t\tchr: chr.name,\n\t\tstart: Math.max(0, otherpos - span),\n\t\tstop: Math.min(chr.len, otherpos + span),\n\t\twidth: 600,\n\t\tleftpad: 10,\n\t\tleftborder: 'rgba(50,50,50,.1)'\n\t}\n\tp.exonsf = p.width / (p.stop - p.start)\n\tblock.init_coord_subpanel(p)\n\tblock.subpanels.push(p)\n\tblock.ifbusy()\n}\n\nfunction map_sv(sv, block) {\n\tconst lst1 = block.seekcoord(sv.chrA, sv.posA)\n\tfor (const r of lst1) {\n\t\tif (r.ridx != undefined) {\n\t\t\t// in main, if outside won't show this end\n\t\t\tif (r.x > 0 && r.x < block.width) {\n\t\t\t\tsv.x0 = r.x\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else if (r.subpanelidx != undefined) {\n\t\t\tsv.x0 = r.x\n\t\t}\n\t}\n\tconst lst2 = block.seekcoord(sv.chrB, sv.posB)\n\tfor (const r of lst2) {\n\t\tif (r.ridx != undefined) {\n\t\t\t// in main, if outside won't show this end\n\t\t\tif (r.x > 0 && r.x < block.width) {\n\t\t\t\tsv.x1 = r.x\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else if (r.subpanelidx != undefined) {\n\t\t\tsv.x1 = r.x\n\t\t}\n\t}\n}\n\nfunction tooltip_multi_sv(lst, tk, event) {\n\ttk.tktip.clear()\n\tshowtable_multi_sv(lst, tk.tktip.d, tk)\n\ttk.tktip.show(event.clientX, event.clientY)\n}\n\nfunction panel_multi_sv(lst, tk, block, event) {\n\tconst pane = client.newpane({ x: event.clientX, y: event.clientY })\n\tshowtable_multi_sv(lst, pane.body, tk)\n}\n\nfunction showtable_multi_sv(lst, holder, tk) {\n\tconst table = holder.append('table')\n\tfor (const i of lst) {\n\t\tconst tr = table.append('tr')\n\n\t\ttr.append('td')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.text(i.dt == common.dtsv ? 'SV' : 'Fusion')\n\n\t\ttr.append('td').text(itemname_svfusion(i))\n\t\ttr.append('td').style('font-size', '.8em').html(svcoord2html(i, tk))\n\t}\n}\n", "import * as client from './client'\nimport { axisTop } from 'd3-axis'\nimport { scaleLinear } from 'd3-scale'\nimport * as common from '#shared/common.js'\nimport * as expressionstat from './block.mds.expressionstat'\nimport { may_add_sampleannotation } from './block.mds.svcnv.clickitem'\nimport { createbutton_addfeature } from './block.mds.svcnv.samplematrix'\nimport { gene_searchbox } from './gene'\nimport {\n\tfocus_singlesample,\n\tcoverbarcolor_silent,\n\tmulti_sample_addhighlight,\n\tmulti_sample_removehighlight,\n\tmulti_expressionstatus_ase_outlier\n} from './block.mds.svcnv'\n\n/*\n\n********************** EXPORTED\nrender_multi_genebar\n\tgenebarconfig_fixed\n\n********************** INTERNAL\nmulti_show_geneboxplot\ngenebar_printtooltip\naddcolumn_autogene\naddcolumn_fixedgene\n\tgenebarconfig_auto\n\t\tfindgene4fix\naddcolumn_attr\nmayadd_survivaloption\n\n\nadd columns\ncolumn could be gene expression rank and sample attribute\n\n*/\n\nexport function render_multi_genebar(tk, block) {\n\t/*\n\tmulti-sample\n\tnative or custom\n\tdense or full\n\n\t*/\n\n\t// it may have been cleared in trunk, but local func could still call to re-render\n\ttk.cnvrightg.selectAll('*').remove()\n\n\tconst attrlst = [] // list of sample attributes to show alongside expression\n\n\t// TODO support categorical attributes\n\n\tif (tk.sampleAttribute && tk.sampleAttribute.attributes && tk.sampleAttribute.samples) {\n\t\tfor (const attrkey in tk.sampleAttribute.attributes) {\n\t\t\tconst attr = tk.sampleAttribute.attributes[attrkey]\n\t\t\tif (!attr.showintrack) continue\n\n\t\t\tconst attrobj = {\n\t\t\t\tkey: attrkey,\n\t\t\t\tlabel: attr.label,\n\t\t\t\tmin: null,\n\t\t\t\tmax: null\n\t\t\t}\n\t\t\t// determine min/max\n\t\t\tfor (const g of tk.samplegroups) {\n\t\t\t\tfor (const s of g.samples) {\n\t\t\t\t\tconst v0 = tk.sampleAttribute.samples[s.samplename]\n\t\t\t\t\tif (!v0) continue\n\t\t\t\t\tconst v = v0[attrkey]\n\t\t\t\t\tif (Number.isNaN(v)) continue\n\t\t\t\t\tif (attrobj.min == null) {\n\t\t\t\t\t\tattrobj.min = attrobj.max = v\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattrobj.min = Math.min(attrobj.min, v)\n\t\t\t\t\t\tattrobj.max = Math.max(attrobj.max, v)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tattrlst.push(attrobj)\n\t\t}\n\t}\n\n\t/*\n\tthree types of columns\n\t1. auto gene, single, changes as you scroll\n\t2. fixed genes, 0-multi\n\t3. sample attr\n\t*/\n\n\tconst genes_auto = new Set() // names of auto gene, will choose one\n\n\tif (tk._data) {\n\t\tfor (const g of tk._data) {\n\t\t\tif (!g.samples) continue\n\t\t\tfor (const s of g.samples) {\n\t\t\t\tif (!s.expressionrank) continue\n\n\t\t\t\tfor (const gene in s.expressionrank) {\n\t\t\t\t\tgenes_auto.add(gene)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst genes_fixed = tk.gecfg ? tk.gecfg.fixed : []\n\n\tlet autogenename\n\tif (tk.selectedgene && genes_auto.has(tk.selectedgene)) {\n\t\tautogenename = tk.selectedgene\n\t} else {\n\t\tautogenename = [...genes_auto][0]\n\t}\n\n\tif (autogenename) {\n\t\t// has got one name, check if it is in fixed\n\t\tfor (const gf of genes_fixed) {\n\t\t\tif (autogenename == gf.gene) {\n\t\t\t\t// same, won't show auto\n\t\t\t\tautogenename = undefined\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\tquick fix\n\texpose the name of first showing gene to smat task in Matrix view\n\t*/\n\tif (autogenename) {\n\t\ttk.showinggene = autogenename\n\t} else if (genes_fixed[0]) {\n\t\ttk.showinggene = genes_fixed[0].name\n\t}\n\n\t// any gene has ase info? if so, tooltip will show 'no info' for those missing\n\t// otherwise won't indicate ase status\n\tlet anygenehasase = false\n\tfor (const g of tk.samplegroups) {\n\t\tfor (const s of g.samples) {\n\t\t\tif (s.expressionrank) {\n\t\t\t\tfor (const n in s.expressionrank) {\n\t\t\t\t\tif (s.expressionrank[n].ase) {\n\t\t\t\t\t\tanygenehasase = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// initiate columnbars holder\n\tfor (const g of tk.samplegroups) {\n\t\tfor (const s of g.samples) {\n\t\t\ts.columnbars = []\n\t\t}\n\t}\n\n\tlet column_xoff = 0\n\n\tcolumn_xoff += addcolumn_autogene(autogenename, genes_auto, tk, block)\n\n\tfor (const fixedgene of genes_fixed) {\n\t\t/***********\n\t\tone column for each fixed gene\n\t\t.gene str\n\t\t.sample2rank{}\n\t\t*/\n\n\t\tcolumn_xoff += addcolumn_fixedgene(fixedgene, tk, block, column_xoff)\n\t}\n\n\t// one column for each sample attribute\n\tfor (const attr of attrlst) {\n\t\tcolumn_xoff += addcolumn_attr(attr, tk, block, column_xoff)\n\t}\n\n\t/* sloppy\n\tshould await for data to be loaded for all fixed genes\n\t*/\n\tif (tk.gecfg && tk.gecfg.fixed_pend) {\n\t\tconst i = tk.gecfg.fixed_pend.shift()\n\t\tif (tk.gecfg.fixed_pend.length == 0) {\n\t\t\tdelete tk.gecfg.fixed_pend\n\t\t}\n\t\t// not using predefined position\n\t\tfindgene4fix(i.gene, tk, block)\n\t}\n\n\t// adjust block right width\n\ttk.rightheadw_tk = column_xoff\n\tblock.rightheadw = 0\n\tfor (const t of block.tklst) {\n\t\tblock.rightheadw = Math.max(block.rightheadw, t.rightheadw_tk)\n\t}\n\tblock.blocksetw()\n\n\tconst axispad = 0\n\tconst labelpad = 3\n\tconst ticksize = 5\n\tconst fontsize = 12\n\n\treturn fontsize + fontsize + labelpad + ticksize + axispad\n}\n\nfunction multi_show_geneboxplot(arg) {\n\t/*\n\tmulti-sample\n\tfor a given gene, show expression across all samples\n\tif the gecfg are configured to group samples by attribute, will show boxplot for each group\n\t*/\n\n\tconst { gene, samplename, value, tk, block } = arg\n\n\tconst pane = client.newpane({ x: window.innerWidth / 2, y: 100 })\n\tpane.header.text(gene + ' ' + tk.gecfg.datatype + ' from ' + tk.name)\n\tconst c = tk.gene2coord[gene]\n\tif (!c) {\n\t\tpane.body.text('No coordinate for ' + gene)\n\t\treturn\n\t}\n\n\tconst p = {\n\t\tgene: gene,\n\t\tchr: c.chr,\n\t\tstart: c.start,\n\t\tstop: c.stop,\n\t\tholder: pane.body,\n\t\tblock: block,\n\t\tgenome: block.genome,\n\t\t//jwt: block.jwt,\n\t\t//hostURL: block.hostURL,\n\t\tsample: samplename ? { name: samplename, value: value } : null,\n\t\t// if sampleset is defined for custom dataset, allow to show boxplot at exp panel\n\t\tsampleset: tk.sampleset\n\t}\n\n\t// expression\n\tif (tk.iscustom) {\n\t\tfor (const k in tk.checkexpressionrank) {\n\t\t\tp[k] = tk.checkexpressionrank[k]\n\t\t}\n\t} else {\n\t\tconst e = tk.mds.queries[tk.querykey].checkexpressionrank\n\t\tp.dslabel = tk.mds.label\n\t\tp.querykey = e.querykey\n\t\tp.boxplotgroupers = e.boxplotgroupers\n\t}\n\t// svcnv\n\tp.color = {\n\t\tcnvgain: tk.cnvcolor.gain.str,\n\t\tcnvloss: tk.cnvcolor.loss.str,\n\t\tsv: 'black'\n\t}\n\tif (tk.iscustom) {\n\t\tp.svcnv = {\n\t\t\tiscustom: 1,\n\t\t\tfile: tk.file,\n\t\t\turl: tk.url,\n\t\t\tindexURL: tk.indexURL\n\t\t}\n\t} else {\n\t\tp.svcnv = {\n\t\t\tdslabel: tk.mds.label,\n\t\t\tquerykey: tk.querykey\n\t\t}\n\t}\n\tp.svcnv.valueCutoff = tk.valueCutoff\n\tp.svcnv.bplengthUpperLimit = tk.bplengthUpperLimit\n\n\tp.clicksample = (thissample, group, plot) => {\n\t\t// click outlier sample to launch browser and show sv/cnv+expression rank for single sample\n\t\tconst sample = {\n\t\t\tsamplename: thissample.sample\n\t\t}\n\n\t\tlet samplegroup\n\t\tif (group) {\n\t\t\tsamplegroup = {\n\t\t\t\tattributes: group.attributes\n\t\t\t}\n\t\t}\n\n\t\tconst tk2 = {} // build a svcnv track\n\n\t\tfor (const k in plot.svcnv) {\n\t\t\ttk2[k] = plot.svcnv[k]\n\t\t}\n\n\t\tif (plot.svcnv.iscustom) {\n\t\t\ttk2.checkexpressionrank = {\n\t\t\t\tfile: plot.file,\n\t\t\t\turl: plot.url,\n\t\t\t\tindexURL: plot.indexURL,\n\t\t\t\tdatatype: plot.gecfg.datatype\n\t\t\t}\n\t\t} else {\n\t\t\ttk2.mds = plot.block.genome.datasets[plot.svcnv.dslabel]\n\t\t}\n\t\tfocus_singlesample({\n\t\t\tm: {\n\t\t\t\tdt: common.dtcnv,\n\t\t\t\tchr: plot.chr,\n\t\t\t\tstart: plot.start,\n\t\t\t\tstop: plot.stop\n\t\t\t},\n\t\t\tsample: sample,\n\t\t\tsamplegroup: samplegroup,\n\t\t\ttk: tk2,\n\t\t\tblock: plot.block\n\t\t})\n\t}\n\timport('./block.mds.geneboxplot').then(_ => {\n\t\t_.init(p)\n\t})\n}\n\nfunction addcolumn_autogene(autogenename, genes_auto, tk, block) {\n\t/*\n\treturn width of column to indicate whether a column is drawn or not\n\t*/\n\n\t// TODO enable column-specific width config\n\n\t// hardcoded bar width for expression rank\n\tconst expbarwidth = 80\n\t// hardcoded bar width for numeric attribute\n\tconst numattrbarwidth = 80\n\tconst xspace = 15\n\n\t// axis label\n\tconst axispad = 0\n\tconst labelpad = 3\n\tconst ticksize = 5\n\tconst fontsize = 12\n\n\t////// column 1 is for auto gene\n\tif (autogenename) {\n\t\tlet minvalue = 0\n\t\tlet maxvalue = 100 // hardcoded rank\n\n\t\tfor (const g of tk.samplegroups) {\n\t\t\tlet y = g.y\n\n\t\t\tfor (const s of g.samples) {\n\t\t\t\tconst row = tk.cnvrightg.append('g').attr('transform', 'translate(0,' + y + ')')\n\n\t\t\t\tif (s.expressionrank) {\n\t\t\t\t\tconst v = s.expressionrank[autogenename]\n\t\t\t\t\tif (v != undefined) {\n\t\t\t\t\t\tconst bar = row\n\t\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t\t.attr('fill', expressionstat.ase_color(v, tk.gecfg)) // bar color set by ase status\n\t\t\t\t\t\t\t.attr('width', (expbarwidth * v.rank) / maxvalue)\n\t\t\t\t\t\t\t.attr('height', s.height)\n\t\t\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\n\t\t\t\t\t\tif (0 && tk.isfull && v.estat) {\n\t\t\t\t\t\t\t// only show dots for outlier status in full, not dense\n\t\t\t\t\t\t\tif (v.estat.outlier) {\n\t\t\t\t\t\t\t\trow\n\t\t\t\t\t\t\t\t\t.append('circle')\n\t\t\t\t\t\t\t\t\t.attr('cx', expbarwidth)\n\t\t\t\t\t\t\t\t\t.attr('cy', s.height / 2)\n\t\t\t\t\t\t\t\t\t.attr('r', s.height / 2)\n\t\t\t\t\t\t\t\t\t.attr('fill', tk.gecfg.outlier.color_outlier)\n\t\t\t\t\t\t\t} else if (v.estat.outlier_asehigh) {\n\t\t\t\t\t\t\t\trow\n\t\t\t\t\t\t\t\t\t.append('circle')\n\t\t\t\t\t\t\t\t\t.attr('cx', expbarwidth)\n\t\t\t\t\t\t\t\t\t.attr('cy', s.height / 2)\n\t\t\t\t\t\t\t\t\t.attr('r', s.height / 2)\n\t\t\t\t\t\t\t\t\t.attr('fill', tk.gecfg.outlier.color_outlier_asehigh)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst cover = row\n\t\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t\t.attr('fill', coverbarcolor_silent)\n\t\t\t\t\t\t\t.attr('fill-opacity', 0.1)\n\t\t\t\t\t\t\t.attr('width', expbarwidth)\n\t\t\t\t\t\t\t.attr('height', s.height)\n\n\t\t\t\t\t\tif (tk.isfull) {\n\t\t\t\t\t\t\ts.columnbars.push(cover)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcover\n\t\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\t\ttk.tktip.clear()\n\n\t\t\t\t\t\t\t\tgenebar_printtooltip(autogenename, v, s, tk.tktip.d, tk)\n\n\t\t\t\t\t\t\t\ttk.tktip.show(event.clientX, event.clientY)\n\n\t\t\t\t\t\t\t\tmulti_sample_addhighlight(s)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\t\tmulti_sample_removehighlight(s)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\tmulti_show_geneboxplot({\n\t\t\t\t\t\t\t\t\tgene: autogenename,\n\t\t\t\t\t\t\t\t\tsamplename: s.samplename,\n\t\t\t\t\t\t\t\t\tvalue: v.value,\n\t\t\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// done this sample\n\t\t\t\ty += s.height + tk.rowspace\n\t\t\t}\n\n\t\t\t// done this group\n\t\t}\n\n\t\tconst headg = tk.cnvrightg.append('g').attr('transform', 'translate(0,-' + axispad + ')')\n\n\t\tclient.axisstyle({\n\t\t\taxis: headg.append('g').call(\n\t\t\t\taxisTop()\n\t\t\t\t\t.scale(scaleLinear().domain([minvalue, maxvalue]).range([0, expbarwidth]))\n\t\t\t\t\t.tickValues([0, maxvalue])\n\t\t\t\t\t.tickSize(ticksize)\n\t\t\t),\n\t\t\tfontsize: fontsize,\n\t\t\tshowline: 1\n\t\t})\n\n\t\theadg\n\t\t\t.append('text')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('x', expbarwidth / 2)\n\t\t\t.attr('y', -(fontsize + labelpad + ticksize + axispad))\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('font-size', fontsize)\n\t\t\t.text(autogenename + ' ' + 'rank')\n\t\t\t.attr('class', 'sja_clbtext2')\n\t\t\t.on('click', () => {\n\t\t\t\tgenebarconfig_auto(autogenename, genes_auto, tk, block)\n\t\t\t})\n\n\t\t// done column for auto gene\n\t\treturn expbarwidth + xspace\n\t}\n\n\t/* no auto gene name\n\t1. no expression track\n\t2. no gene in view range\n\t3. view range beyond limit\n\t*/\n\n\tif (tk.gecfg) {\n\t\t// indeed has expression track\n\t\t// here should show button for querying gene\n\n\t\tconst g = tk.cnvrightg\n\n\t\tg.append('text')\n\t\t\t.attr('class', 'sja_clbtext2')\n\t\t\t.attr('font-family', client.font)\n\t\t\t.attr('font-size', 14)\n\t\t\t.text('ADD GENE')\n\t\t\t.on('click', event => {\n\t\t\t\tfindgene4fix_searchui(tk.tkconfigtip.clear().d, tk, block)\n\t\t\t\ttk.tkconfigtip.showunder(event.target)\n\t\t\t})\n\n\t\tif (tk.expressionrangelimit) {\n\t\t\t// too big to do it\n\t\t\tconst h = 15\n\t\t\tlet y = 20\n\t\t\tg.append('text').text('Zoom in').attr('y', y).attr('font-size', 12)\n\t\t\ty += h\n\t\t\tg.append('text').text('under').attr('y', y).attr('font-size', 12)\n\t\t\ty += h\n\t\t\tg.append('text').text(common.bplen(tk.expressionrangelimit)).attr('y', y).attr('font-size', 12)\n\t\t\ty += h\n\t\t\tg.append('text').text('to show').attr('y', y).attr('font-size', 12)\n\t\t\ty += h\n\t\t\tg.append('text').text('gene exp').attr('y', y).attr('font-size', 12)\n\t\t\t/*\n\t\t\ty+=h\n\t\t\tg.append('text').text('automatically').attr('y',y).attr('font-size',12)\n\t\t\t*/\n\t\t}\n\n\t\treturn expbarwidth + xspace\n\t}\n\n\t// no expression track, won't draw column\n\treturn 0\n}\n\nfunction addcolumn_fixedgene(fixedgene, tk, block, column_xoff) {\n\t/*\n\t */\n\n\t// surely the coord of this fixed gene is not in cache\n\tif (!tk.gene2coord) tk.gene2coord = {}\n\ttk.gene2coord[fixedgene.gene] = {\n\t\tchr: fixedgene.chr,\n\t\tstart: fixedgene.start,\n\t\tstop: fixedgene.stop\n\t}\n\n\t// TODO enable column-specific width config\n\n\t// hardcoded bar width for expression rank\n\tconst expbarwidth = 80\n\t// hardcoded bar width for numeric attribute\n\tconst numattrbarwidth = 80\n\tconst xspace = 15\n\n\t// axis label\n\tconst axispad = 0\n\tconst labelpad = 3\n\tconst ticksize = 5\n\tconst fontsize = 12\n\n\tlet minvalue = 0,\n\t\tmaxvalue = 100 // still rank\n\n\tfor (const g of tk.samplegroups) {\n\t\tlet y = g.y\n\n\t\tfor (const s of g.samples) {\n\t\t\tconst row = tk.cnvrightg.append('g').attr('transform', 'translate(' + column_xoff + ',' + y + ')')\n\n\t\t\tconst v = fixedgene.sample2rank[s.samplename]\n\t\t\tif (v) {\n\t\t\t\tconst bar = row\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('fill', expressionstat.ase_color(v, tk.gecfg)) // bar color set by ase status\n\t\t\t\t\t.attr('width', (expbarwidth * v.rank) / maxvalue)\n\t\t\t\t\t.attr('height', s.height)\n\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\n\t\t\t\tif (tk.isfull && v.estat) {\n\t\t\t\t\t// only show dots for outlier status in full, not dense\n\t\t\t\t\tif (v.estat.outlier) {\n\t\t\t\t\t\trow\n\t\t\t\t\t\t\t.append('circle')\n\t\t\t\t\t\t\t.attr('cx', expbarwidth)\n\t\t\t\t\t\t\t.attr('cy', s.height / 2)\n\t\t\t\t\t\t\t.attr('r', s.height / 2)\n\t\t\t\t\t\t\t.attr('fill', tk.gecfg.outlier.color_outlier)\n\t\t\t\t\t} else if (v.estat.outlier_asehigh) {\n\t\t\t\t\t\trow\n\t\t\t\t\t\t\t.append('circle')\n\t\t\t\t\t\t\t.attr('cx', expbarwidth)\n\t\t\t\t\t\t\t.attr('cy', s.height / 2)\n\t\t\t\t\t\t\t.attr('r', s.height / 2)\n\t\t\t\t\t\t\t.attr('fill', tk.gecfg.outlier.color_outlier_asehigh)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst cover = row\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('fill', coverbarcolor_silent)\n\t\t\t\t\t.attr('fill-opacity', 0.1)\n\t\t\t\t\t.attr('width', expbarwidth)\n\t\t\t\t\t.attr('height', s.height)\n\n\t\t\t\tif (tk.isfull) {\n\t\t\t\t\ts.columnbars.push(cover)\n\t\t\t\t}\n\n\t\t\t\tcover\n\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\ttk.tktip.clear()\n\n\t\t\t\t\t\tconst lst = [{ k: 'Sample', v: s.samplename }]\n\t\t\t\t\t\tmay_add_sampleannotation(s.samplename, tk, lst)\n\n\t\t\t\t\t\tlst.push({\n\t\t\t\t\t\t\tk: fixedgene.gene + ' rank',\n\t\t\t\t\t\t\tv: client.ranksays(v.rank)\n\t\t\t\t\t\t})\n\t\t\t\t\t\tlst.push({\n\t\t\t\t\t\t\tk: fixedgene.gene + ' ' + tk.gecfg.datatype,\n\t\t\t\t\t\t\tv: v.value\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tconst table = client.make_table_2col(tk.tktip.d, lst)\n\n\t\t\t\t\t\texpressionstat.showsingleitem_table(v, tk.gecfg, table)\n\n\t\t\t\t\t\ttk.tktip.show(event.clientX, event.clientY)\n\n\t\t\t\t\t\tmulti_sample_addhighlight(s)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(s)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tmulti_show_geneboxplot({\n\t\t\t\t\t\t\tgene: fixedgene.gene,\n\t\t\t\t\t\t\tsamplename: s.samplename,\n\t\t\t\t\t\t\tvalue: v.value,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// done this sample\n\t\t\ty += s.height + tk.rowspace\n\t\t}\n\t\t// done this group\n\t}\n\n\tconst headg = tk.cnvrightg.append('g').attr('transform', 'translate(' + column_xoff + ',-' + axispad + ')')\n\n\tclient.axisstyle({\n\t\taxis: headg.append('g').call(\n\t\t\taxisTop()\n\t\t\t\t.scale(scaleLinear().domain([minvalue, maxvalue]).range([0, expbarwidth]))\n\t\t\t\t.tickValues([minvalue, maxvalue])\n\t\t\t\t.tickSize(ticksize)\n\t\t),\n\t\tfontsize: fontsize,\n\t\tshowline: 1\n\t})\n\n\t// special looking header compared to auto genes\n\n\theadg\n\t\t.append('text')\n\t\t.attr('text-anchor', 'middle')\n\t\t.attr('x', expbarwidth / 2)\n\t\t.attr('y', -(fontsize + labelpad + ticksize + axispad))\n\t\t.attr('font-family', client.font)\n\t\t.attr('font-size', fontsize)\n\t\t.attr('fill', 'black')\n\t\t.attr('class', 'sja_clbtext2')\n\t\t.text(fixedgene.gene + ' rank')\n\t\t.on('click', event => {\n\t\t\tgenebarconfig_fixed(fixedgene, tk, block)\n\t\t\ttk.tkconfigtip.showunder(event.target)\n\t\t})\n\n\treturn expbarwidth + xspace\n}\n\nfunction addcolumn_attr(attr, tk, block, column_xoff) {\n\t// TODO enable column-specific width config\n\n\t// hardcoded bar width for expression rank\n\tconst expbarwidth = 80\n\t// hardcoded bar width for numeric attribute\n\tconst numattrbarwidth = 80\n\tconst xspace = 15\n\n\t// axis label\n\tconst axispad = 0\n\tconst labelpad = 3\n\tconst ticksize = 5\n\tconst fontsize = 12\n\n\tfor (const g of tk.samplegroups) {\n\t\tlet y = g.y\n\n\t\tfor (const s of g.samples) {\n\t\t\tconst row = tk.cnvrightg.append('g').attr('transform', 'translate(' + column_xoff + ',' + y + ')')\n\n\t\t\t// TODO support categorical attr and detect type\n\n\t\t\tconst v0 = tk.sampleAttribute.samples[s.samplename]\n\t\t\tif (v0) {\n\t\t\t\tconst v = v0[attr.key]\n\t\t\t\tif (!Number.isNaN(v)) {\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('x', 0)\n\t\t\t\t\t\t.attr('width', Math.max(1, (numattrbarwidth * (v - attr.min)) / (attr.max - attr.min)))\n\t\t\t\t\t\t.attr('height', s.height)\n\t\t\t\t\t\t.attr('fill', '#858585')\n\t\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('x', 0)\n\t\t\t\t\t\t.attr('width', numattrbarwidth)\n\t\t\t\t\t\t.attr('height', s.height)\n\t\t\t\t\t\t.attr('fill', '#858585')\n\t\t\t\t\t\t.attr('fill-opacity', 0.1)\n\t\t\t\t\tconst cover = row\n\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t.attr('fill', coverbarcolor_silent)\n\t\t\t\t\t\t.attr('fill-opacity', 0.1)\n\t\t\t\t\t\t.attr('width', numattrbarwidth)\n\t\t\t\t\t\t.attr('height', s.height)\n\n\t\t\t\t\ts.columnbars.push(cover)\n\n\t\t\t\t\tcover\n\t\t\t\t\t\t.on('mouseover', event => {\n\t\t\t\t\t\t\ttk.tktip.clear()\n\n\t\t\t\t\t\t\tconst lst = [{ k: 'Sample', v: s.samplename }]\n\t\t\t\t\t\t\tmay_add_sampleannotation(s.samplename, tk, lst)\n\t\t\t\t\t\t\tclient.make_table_2col(tk.tktip.d, lst)\n\n\t\t\t\t\t\t\ttk.tktip.show(event.clientX, event.clientY)\n\n\t\t\t\t\t\t\tmulti_sample_addhighlight(s)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\tmulti_sample_removehighlight(s)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// done this sample\n\t\t\ty += s.height + tk.rowspace\n\t\t}\n\n\t\t// done this group\n\t}\n\n\tconst headg = tk.cnvrightg.append('g').attr('transform', 'translate(' + column_xoff + ',-' + axispad + ')')\n\n\t// if is numeric type\n\tclient.axisstyle({\n\t\taxis: headg\n\t\t\t.append('g')\n\t\t\t.attr('transform', 'translate(0,0)')\n\t\t\t.call(\n\t\t\t\taxisTop()\n\t\t\t\t\t.scale(scaleLinear().domain([attr.min, attr.max]).range([0, numattrbarwidth]))\n\t\t\t\t\t.ticks(3)\n\t\t\t),\n\t\tfontsize: fontsize,\n\t\tshowline: 1\n\t})\n\n\tconst text = headg\n\t\t.append('text')\n\t\t.attr('x', numattrbarwidth / 2)\n\t\t.attr('text-anchor', 'middle')\n\t\t.attr('y', -(fontsize + labelpad + ticksize + axispad))\n\t\t.attr('font-family', client.font)\n\t\t.attr('font-size', fontsize)\n\t\t.text(attr.label)\n\n\t// TODO click for menu\n\n\treturn expbarwidth + xspace\n}\n\nfunction genebarconfig_auto(usegene, genes, tk, block) {\n\t/*\n\tfor auto gene\n\tusegene: str\n\tgenes:\n\t*/\n\n\ttk.tkconfigtip.clear()\n\n\tconst holder = tk.tkconfigtip.d\n\t/*\n\tcreatebutton_addfeature({\n\t\tm: {\n\t\t\tdt: common.dtgeneexpression,\n\t\t\tgenename: usegene,\n\t\t},\n\t\tholder: holder.append('div').style('margin-bottom','10px'),\n\t\ttk: tk,\n\t\tblock: block\n\t})\n\t*/\n\n\tfindgene4fix_searchui(holder, tk, block)\n\n\tif (genes.size > 1) {\n\t\t// more than one gene\n\t\tconst scrollholder = holder.append('div').style('margin-bottom', '15px')\n\t\tif (genes.size > 8) {\n\t\t\tscrollholder\n\t\t\t\t.style('height', '200px')\n\t\t\t\t.style('padding', '15px')\n\t\t\t\t.style('overflow-y', 'scroll')\n\t\t\t\t.style('resize', 'vertical')\n\t\t}\n\t\tconst id0 = Math.random().toString()\n\t\tfor (const gene of genes) {\n\t\t\tconst row = scrollholder.append('div')\n\t\t\tconst id = Math.random().toString()\n\t\t\tconst r = row\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'radio')\n\t\t\t\t.attr('id', id)\n\t\t\t\t.attr('name', id0)\n\t\t\t\t.on('change', () => {\n\t\t\t\t\ttk.tkconfigtip.hide()\n\t\t\t\t\ttk.selectedgene = gene\n\t\t\t\t\trender_multi_genebar(tk, block)\n\t\t\t\t})\n\t\t\tif (gene == usegene) r.attr('checked', 1)\n\t\t\trow\n\t\t\t\t.append('label')\n\t\t\t\t.attr('for', id)\n\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t.html(' ' + gene)\n\t\t}\n\t}\n\n\tmayadd_boxplotbutton(holder, usegene, tk, block)\n\n\tif (tk.mds) {\n\t\t/*\n\t\tauto gene should be in tk.gene2coord\n\t\t*/\n\t\tmayadd_survivaloption(\n\t\t\tholder,\n\t\t\t{\n\t\t\t\tgene: usegene,\n\t\t\t\tchr: tk.gene2coord[usegene].chr,\n\t\t\t\tstart: tk.gene2coord[usegene].start,\n\t\t\t\tstop: tk.gene2coord[usegene].stop\n\t\t\t},\n\t\t\ttk,\n\t\t\tblock\n\t\t)\n\t}\n\n\tmayadd_aseohe(holder, tk, block)\n\n\ttk.tkconfigtip.showunder(event.target)\n}\n\nexport function genebarconfig_fixed(fixedgene, tk, block) {\n\ttk.tkconfigtip.clear()\n\n\tmayadd_boxplotbutton(tk.tkconfigtip.d, fixedgene.gene, tk, block)\n\n\tmayadd_survivaloption(tk.tkconfigtip.d, fixedgene, tk, block)\n\n\ttk.tkconfigtip.d\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('Remove')\n\t\t.on('click', () => {\n\t\t\ttk.tkconfigtip.hide()\n\n\t\t\tconst idx = tk.gecfg.fixed.findIndex(i => i.gene == fixedgene.gene)\n\t\t\tif (idx == -1) {\n\t\t\t\t/*\n\t\t\t\tthis gene is not found as a fixed gene\n\t\t\t\tremove function should not do anything\n\t\t\t\tthis because fixed gene config is hijacked by cases\n\t\t\t\tsuch as when there's no mutation data for a gene in view range\n\t\t\t\tstill allows to show this menu for that gene\n\t\t\t\t*/\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttk.gecfg.fixed.splice(idx, 1)\n\t\t\trender_multi_genebar(tk, block)\n\t\t})\n}\n\nfunction mayadd_aseohe(holder, tk, block) {\n\tif (!tk.gecfg || tk.gecfg.no_ase) return\n\tholder\n\t\t.append('div')\n\t\t.text('Customize ASE parameters')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.on('click', () => {\n\t\t\tholder.selectAll('*').remove()\n\t\t\texpressionstat.ui_config(holder, tk.gecfg, tk, () => {\n\t\t\t\ttk.tkconfigtip.hide()\n\t\t\t\tmulti_expressionstatus_ase_outlier(tk)\n\t\t\t\trender_multi_genebar(tk, block)\n\t\t\t})\n\t\t})\n}\n\nfunction mayadd_survivaloption(holder, gene, tk, block) {\n\tif (!tk.mds || !tk.mds.survivalplot) return\n\tholder\n\t\t.append('div')\n\t\t.text('Survival plot by ' + gene.gene + ' ' + tk.gecfg.datatype)\n\t\t.attr('class', 'sja_menuoption')\n\t\t.on('click', () => {\n\t\t\ttk.tkconfigtip.hide()\n\n\t\t\tconst pane = client.newpane({ x: 100, y: 100 })\n\t\t\tpane.header.text('Survival plot by ' + gene.gene + ' ' + tk.gecfg.datatype)\n\t\t\tconst arg = {\n\t\t\t\tgenome: block.genome,\n\t\t\t\tmds: tk.mds,\n\t\t\t\tplotlist: [\n\t\t\t\t\t{\n\t\t\t\t\t\trenderplot: 1,\n\t\t\t\t\t\tsamplerule: {\n\t\t\t\t\t\t\tset: {\n\t\t\t\t\t\t\t\tgeneexpression: 1,\n\t\t\t\t\t\t\t\tbymedian: 1,\n\t\t\t\t\t\t\t\tgene: gene.gene,\n\t\t\t\t\t\t\t\tchr: gene.chr,\n\t\t\t\t\t\t\t\tstart: gene.start,\n\t\t\t\t\t\t\t\tstop: gene.stop\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]\n\t\t\t}\n\n\t\t\timport('./mds.survivalplot').then(_ => {\n\t\t\t\t_.init(arg, pane.body, block.debugmode)\n\t\t\t})\n\t\t})\n}\n\n////////////// find a gene and use as fixed\n\nfunction findgene4fix_searchui(holder, tk, block) {\n\t// for auto gene column, show\n\tgene_searchbox({\n\t\tdiv: holder,\n\t\tgenome: block.genome.name,\n\t\ttip: tk.tip2,\n\t\tcallback: genename => {\n\t\t\tfindgene4fix(genename, tk, block)\n\t\t}\n\t})\n}\n\nasync function findgene4fix(name, tk, block, norender) {\n\ttk.tkconfigtip.clear()\n\n\tconst wait = tk.tkconfigtip.d.append('div').text('Searching for ' + name + ' ...')\n\n\ttry {\n\t\tconst data1 = await client.dofetch3('genelookup', { body: { genome: block.genome.name, input: name, deep: 1 } })\n\n\t\tif (data1.error) throw data1.error\n\t\tif (!data1.gmlst) throw '.gmlst[] missing'\n\n\t\t// simply use first gm for coordinate...\n\t\tconst gm = data1.gmlst[0]\n\n\t\twait.text('Loading ' + tk.gecfg.datatype + ' for ' + gm.name + ' ...')\n\n\t\tconst data2 = await findgene4fix_getsamplevalue(gm, tk, block)\n\n\t\tif (data2.error) throw data2.error\n\n\t\tconst fixedgene = {\n\t\t\tgene: name,\n\t\t\tchr: gm.chr,\n\t\t\tstart: gm.start,\n\t\t\tstop: gm.stop\n\t\t}\n\n\t\tif (!data2.sample2rank) throw '.sample2rank{} missing'\n\t\tfor (const sample in data2.sample2rank) {\n\t\t\texpressionstat.measure(data2.sample2rank[sample], tk.gecfg)\n\t\t}\n\t\tfixedgene.sample2rank = data2.sample2rank\n\n\t\ttk.gecfg.fixed.push(fixedgene)\n\n\t\ttk.tkconfigtip.hide()\n\n\t\tif (norender) {\n\t\t\t// upon init and add genes from custom param, won't render until exp data is loaded for each pending fixed gene then render just once\n\t\t} else {\n\t\t\trender_multi_genebar(tk, block)\n\t\t}\n\t} catch (err) {\n\t\tif (err.stack) console.log(err.stack)\n\t\twait.text('Error: ' + (err.message ? err.message : err))\n\t}\n}\n\nfunction findgene4fix_getsamplevalue(gm, tk, block) {\n\tconst arg = {\n\t\tgenome: block.genome.name,\n\t\tgetexpression4gene: {\n\t\t\tchr: gm.chr,\n\t\t\tstart: gm.start,\n\t\t\tstop: gm.stop,\n\t\t\tname: gm.name\n\t\t}\n\t}\n\n\tif (tk.iscustom) {\n\t\targ.iscustom = 1\n\t\tconst c = tk.checkexpressionrank\n\t\tif (c) {\n\t\t\targ.checkexpressionrank = {\n\t\t\t\tfile: c.file,\n\t\t\t\turl: c.url,\n\t\t\t\tindexURL: c.indexURL\n\t\t\t}\n\t\t}\n\n\t\tif (tk.checkvcf) {\n\t\t\targ.checkvcf = tk.checkvcf.stringifiedObj\n\t\t}\n\t} else {\n\t\targ.dslabel = tk.mds.label\n\t\targ.querykey = tk.querykey\n\t}\n\n\treturn client.dofetch('mdssvcnv', arg)\n}\n\nfunction genebar_printtooltip(genename, v, s, holder, tk) {\n\tconst lst = [{ k: 'Sample', v: s.samplename }]\n\tmay_add_sampleannotation(s.samplename, tk, lst)\n\n\tlst.push({\n\t\tk: genename + ' rank',\n\t\tv: client.ranksays(v.rank)\n\t})\n\tlst.push({\n\t\tk: genename + ' ' + tk.gecfg.datatype,\n\t\tv: v.value\n\t})\n\tconst table = client.make_table_2col(holder, lst)\n\texpressionstat.showsingleitem_table(v, tk.gecfg, table)\n}\n\nfunction mayadd_boxplotbutton(holder, usegene, tk, block) {\n\tholder\n\t\t.append('div')\n\t\t.text(usegene + ' ' + tk.gecfg.datatype + ' boxplot')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.on('click', () => {\n\t\t\ttk.tkconfigtip.hide()\n\t\t\tmulti_show_geneboxplot({\n\t\t\t\tgene: usegene,\n\t\t\t\ttk: tk,\n\t\t\t\tblock: block\n\t\t\t})\n\t\t})\n}\n", "import * as client from './client'\nimport { rgb as d3rgb } from 'd3-color'\nimport { axisTop, axisLeft, axisRight } from 'd3-axis'\nimport { scaleLinear } from 'd3-scale'\nimport * as common from '#shared/common.js'\nimport * as expressionstat from './block.mds.expressionstat'\nimport {\n\ttooltip_singleitem,\n\tclick_multi_singleitem,\n\ttooltip_multi_vcfdense,\n\tclick_multi_vcfdense,\n\ttooltip_multi_svdense,\n\tclick_multi_svdense,\n\ttooltip_samplegroup,\n\tclick_samplegroup_showtable,\n\tclick_samplegroup_showmenu,\n\tmay_add_sampleannotation,\n\tmay_allow_samplesearch\n} from './block.mds.svcnv.clickitem'\nimport { makeTk_legend, update_legend } from './block.mds.svcnv.legend'\nimport { render_singlesample } from './block.mds.svcnv.single'\nimport { createbutton_addfeature, may_show_samplematrix_button } from './block.mds.svcnv.samplematrix'\nimport { render_multi_genebar, genebarconfig_fixed } from './block.mds.svcnv.addcolumn'\nimport { vcfparsemeta } from '#shared/vcf.js'\n\n/*\nJUMP __multi __maketk __sm\n\nmakeTk\n\tapply_customization_oninit\nloadTk\n\tloadTk_do\n\t\taddLoadParameter\nmay_showgeneexp_nomutationdata\nrender_samplegroups\n\tprep_samplegroups\n\trender_multi_vcfdense\n\trender_multi_svdense\n\trender_multi_cnvloh\n\t\trender_multi_cnvloh_stackeachsample\n\t\t** focus_singlesample\nconfigPanel()\nmulti_sample_addhighlight\nmulti_sample_removehighlight\n\n\nmodes:\n\n\tdriven by svcnv file, sv-cnv-vcf-fpkm ranking\n\n\t\tmulti-sample:\n\t\t\tone row per sample\n\t\t\ttwo forms:\n\t\t\t\tdense\n\t\t\t\t\tsv breakpoint density in separate track\n\t\t\t\t\tcnv shown densily\n\t\t\t\tfull\n\t\t\t\t\tcnv & sv shown together at sample-level\n\n\t\tsampleset:\n\t\t\tcustom set of samples, in groups\n\n\t\tsingle-sample:\n\t\t\tshow cnv & sv data from a single sample\n\t\t\tindicated by tk.singlesample {name:\"samplename\"}\n\t\t\tspawn from sample group, mode won't mutate\n\t\t\tfpkm ranking shown as independent track\n\n\tase mode, driven by vcf file and supplemented by rna bam files\n\t\talways multi-sample\n\t\talways cohort\n\n\nsv/cnv/loh data mixed in same file, sv has _chr and _pos which are indexing fields, along with chrA/posA/chrB/posB\nfpkm data in one file, fpkm may contain Yu's results on ASE/outlier\n\ncustom vcf handling:\n\tmulti-sample\n\tsingle-sample\n\n!!!!!!!!!!!Task-specific temporary fixes!!!!!!!!!!!\nmaysortsamplesingroupbydt\n*/\n\nconst labyspace = 5\nexport const intrasvcolor = '#858585' // inter-chr sv color is defined on the fly\nconst cnvhighlightcolor = '#E8FFFF'\nexport const coverbarcolor_silent = '#222'\nexport const coverbarcolor_active = '#ED8600'\n\nconst minlabfontsize = 7\nconst minsvradius = 5\nconst svdensitynogroupcolor = '#aaa'\nconst leftlabelticksize = 5\n\nconst hardcode_cellline = 'CELLLINE'\nconst novalue_max_cnvloh = 0 // for max scale of log2ratio and segmean, if there is no cnv or loh data in view range\n\n// x space between label and box/circle\nexport const labelspace = 5 // when label is shown outside of box, the space between them\n\nconst stackheightscale = scaleLinear().domain([1, 3, 5, 10]).range([8, 4, 2, 1])\n\nexport function loadTk(tk, block) {\n\t/*\n\tworks for both multi- and single-sample modes\n\t*/\n\n\tblock.tkcloakon(tk)\n\tblock.block_setheight()\n\n\tif (tk.uninitialized) {\n\t\tmakeTk(tk, block)\n\t\tdelete tk.uninitialized\n\t}\n\n\tPromise.resolve()\n\t\t.then(() => {\n\t\t\treturn loadTk_mayinitiatecustomvcf(tk, block)\n\t\t})\n\t\t.then(() => {\n\t\t\t/*\n\t\tif error, throw error\n\t\tif no data, throw {nodata:1}\n\t\telse, set tk height and quiet\n\t\t*/\n\t\t\treturn loadTk_do(tk, block)\n\t\t})\n\t\t.catch(err => {\n\t\t\ttk.height_main = 50\n\n\t\t\tif (err.nodata) {\n\t\t\t\t/*\n\t\t\tcentral place to handle \"no data\", no mutation data in any sample\n\t\t\tfor both single/multi-sample\n\t\t\t*/\n\t\t\t\ttrackclear(tk)\n\t\t\t\t// remove old data so the legend can update properly\n\t\t\t\tdelete tk.data_vcf\n\t\t\t\tif (tk.singlesample) {\n\t\t\t\t\tdelete tk.data\n\t\t\t\t} else {\n\t\t\t\t\t// multi\n\t\t\t\t\tdelete tk._data\n\t\t\t\t\tdelete tk.samplegroups\n\t\t\t\t\tmay_showgeneexp_nomutationdata(tk, block)\n\t\t\t\t}\n\t\t\t\tupdate_legend(tk, block)\n\t\t\t\treturn { error: tk.name + ': no data in view range' }\n\t\t\t}\n\n\t\t\tif (err.stack) console.error(err.stack)\n\t\t\treturn { error: err.message }\n\t\t})\n\t\t.then(_final => {\n\t\t\tblock.tkcloakoff(tk, { error: _final.error })\n\t\t\tblock.block_setheight()\n\t\t\tblock.setllabel()\n\t\t})\n}\n\nfunction may_showgeneexp_nomutationdata(tk, block) {\n\t/*\n\tmulti-sample\n\tno mutation data in view range, thus no .samplegroup\n\tbut still may be genes with expression, as in .gene2coord\n\tneed to indicate them\n\t*/\n\tconst genenames = []\n\tif (tk.gene2coord) {\n\t\tfor (const gene in tk.gene2coord) genenames.push(gene)\n\t}\n\tif (genenames.length == 0) return\n\n\tif (!tk.gecfg) {\n\t\tconsole.error('but .gecfg is missing')\n\t\treturn\n\t}\n\n\t// must reset cnvrightg y pos since it will be shifted if there was data previously\n\ttk.cnvrightg.attr('transform', 'translate(0,' + (4 + tk.height_main / 2) + ')')\n\n\tconst text = tk.cnvrightg.append('text').attr('font-size', 12).attr('class', 'sja_clbtext2')\n\n\tif (genenames.length == 1) {\n\t\t/*\n\t\tjust one gene in view range\n\t\tpretend it to be fixed gene\n\t\tand show the menu option\n\t\t*/\n\n\t\ttext.text(genenames[0]).on('click', event => {\n\t\t\tconst c = tk.gene2coord[genenames[0]]\n\t\t\tgenebarconfig_fixed(\n\t\t\t\t{\n\t\t\t\t\tgene: genenames[0],\n\t\t\t\t\tchr: c.chr,\n\t\t\t\t\tstart: c.start,\n\t\t\t\t\tstop: c.stop\n\t\t\t\t},\n\t\t\t\ttk,\n\t\t\t\tblock\n\t\t\t)\n\t\t\ttk.tkconfigtip.showunder(event.target)\n\t\t})\n\t\treturn\n\t}\n\n\t/*\n\tmultiple genes in view range\n\tallow to select one gene and show menu like above\n\t*/\n\n\ttext.text('Select gene').on('click', () => {\n\t\ttk.tkconfigtip.clear().showunder(text.node())\n\t\tfor (const gene of genenames) {\n\t\t\ttk.tkconfigtip.d\n\t\t\t\t.append('div')\n\t\t\t\t.text(gene)\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst c = tk.gene2coord[gene]\n\t\t\t\t\tgenebarconfig_fixed(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgene: gene,\n\t\t\t\t\t\t\tchr: c.chr,\n\t\t\t\t\t\t\tstart: c.start,\n\t\t\t\t\t\t\tstop: c.stop\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttk,\n\t\t\t\t\t\tblock\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t}\n\t})\n}\n\nfunction loadTk_mayinitiatecustomvcf(tk, block) {\n\tif (!tk.iscustom) return\n\n\tif (tk.checkvcf && !tk.checkvcf.stringifiedObj) {\n\t\t// driven by svcnv file\n\t\t// load vcf meta keep on client for parsing vcf data\n\t\tconst arg = ['genome=' + block.genome.name]\n\t\tif (tk.checkvcf.file) {\n\t\t\targ.push('file=' + tk.checkvcf.file)\n\t\t} else {\n\t\t\targ.push('url=' + tk.checkvcf.url)\n\t\t\tif (tk.checkvcf.indexURL) arg.push('indexURL=' + tk.checkvcf.indexURL)\n\t\t}\n\t\treturn client.dofetch2('vcfheader?' + arg.join('&')).then(data => {\n\t\t\tif (!data) throw { message: 'server error!' }\n\t\t\tif (data.error) throw { message: data.error }\n\n\t\t\tconst [info, format, samples, errs] = vcfparsemeta(data.metastr.split('\\n'))\n\t\t\tif (errs) throw { message: 'Error parsing VCF meta lines: ' + errs.join('; ') }\n\t\t\ttk.checkvcf.info = info\n\t\t\ttk.checkvcf.format = format\n\t\t\ttk.checkvcf.samples = samples\n\t\t\ttk.checkvcf.nochr = data.nochr\n\t\t\ttk.checkvcf.stringifiedObj = JSON.stringify(tk.checkvcf)\n\t\t})\n\t}\n}\n\nfunction loadTk_do(tk, block) {\n\tconst par = {\n\t\t//jwt:block.jwt,\n\t\tgenome: block.genome.name,\n\t\trglst: block.tkarg_maygm(tk)\n\t}\n\n\tif (block.subpanels.length == tk.subpanels.length) {\n\t\t/*\n\t\tmust wait when subpanels are added to tk\n\t\tthis is only done when block finishes loading data for main tk\n\t\t*/\n\t\tfor (const [idx, r] of block.subpanels.entries()) {\n\t\t\tpar.rglst.push({\n\t\t\t\tchr: r.chr,\n\t\t\t\tstart: r.start,\n\t\t\t\tstop: r.stop,\n\t\t\t\twidth: r.width,\n\t\t\t\texonsf: r.exonsf,\n\t\t\t\tsubpanelidx: idx\n\t\t\t})\n\t\t}\n\t}\n\n\taddLoadParameter(par, tk)\n\n\treturn client.dofetch('/mdssvcnv', par).then(data => {\n\t\t// throw errors\n\n\t\tif (data.error) throw { message: data.error }\n\n\t\t/*\n\t\tmust keep the loaded \"raw\" data in _data_vcf, so it can later apply class filter without having to reload from server\n\t\ton serverside, the \"class\" won't be parsed out from csq, without gmmode/isoform info of the client\n\t\t*/\n\t\ttk._data_vcf = data.data_vcf\n\n\t\ttk.vcfrangelimit = data.vcfrangelimit // range too big\n\t\tvcfdata_prep(tk, block) // data for display is now in tk.data_vcf[]\n\n\t\tmay_map_vcf(tk, block)\n\n\t\tif (tk.singlesample) {\n\t\t\tif (!data.lst || data.lst.length == 0) {\n\t\t\t\t// no cnv/sv\n\t\t\t\tif (!tk.data_vcf || tk.data_vcf.length == 0) {\n\t\t\t\t\t// no vcf, nothing to show\n\t\t\t\t\tthrow { nodata: 1 }\n\t\t\t\t}\n\t\t\t}\n\t\t\ttk.data = data.lst\n\t\t} else {\n\t\t\t// multi-sample\n\n\t\t\t/*\n\t\t\tkeep gene expression info,\n\t\t\tso even if no sample with mutation in view range, still be able to indicate available of gene expression\n\t\t\t*/\n\t\t\ttk.gene2coord = data.gene2coord\n\t\t\ttk.expressionrangelimit = data.expressionrangelimit\n\n\t\t\t// now samplegroups contains samples with any data type (cnv, sv, vcf), no matter dense or full\n\t\t\tif (!data.samplegroups || data.samplegroups.length == 0) {\n\t\t\t\tthrow { nodata: 1 }\n\t\t\t}\n\t\t\ttk._data = data.samplegroups\n\n\t\t\tif (tk.sampleAttribute) {\n\t\t\t\tif (data.sampleannotation) {\n\t\t\t\t\ttk.sampleAttribute.samples = data.sampleannotation\n\t\t\t\t} else {\n\t\t\t\t\ttk.sampleAttribute.samples = {}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// preps common to both single and multi sample\n\t\tif (tk.legend_svchrcolor) {\n\t\t\ttk.legend_svchrcolor.interchrs.clear()\n\t\t\ttk.legend_svchrcolor.row.style('display', 'none')\n\t\t}\n\n\t\tif (tk.singlesample) {\n\t\t\trender_singlesample(tk, block)\n\t\t} else {\n\t\t\trender_samplegroups(tk, block)\n\t\t}\n\t\treturn {}\n\t})\n}\n\nexport function trackclear(tk) {\n\tif (tk.singlesample) {\n\t\ttk.waterfall.axisg.selectAll('*').remove()\n\t\ttk.waterfall.lab1.text('')\n\t\ttk.waterfall.lab2.text('')\n\t\ttk.waterfall.lab3.text('')\n\t\ttk.svvcf_g.selectAll('*').remove()\n\t\ttk.cnv_g.selectAll('*').remove()\n\t\tif (tk.cnvcolor.cnvlegend) tk.cnvcolor.cnvlegend.row.style('display', 'none')\n\t\tif (tk.cnvcolor.lohlegend) tk.cnvcolor.lohlegend.row.style('display', 'none')\n\t\treturn\n\t}\n\ttk.cnvleftg.selectAll('*').remove()\n\ttk.vcfdensitylabelg.selectAll('*').remove()\n\ttk.vcfdensityg.selectAll('*').remove()\n\ttk.svdensitylabelg.selectAll('*').remove()\n\ttk.svdensityg.selectAll('*').remove()\n\ttk.cnvmidg.selectAll('*').remove()\n\ttk.cnvrightg.selectAll('*').remove()\n\ttk.config_handle.transition().attr('text-anchor', 'start').attr('x', 0)\n}\n\nfunction addLoadParameter(par, tk) {\n\tif (tk.iscustom) {\n\t\tpar.iscustom = 1\n\t\tpar.file = tk.file\n\t\tpar.url = tk.url\n\t\tpar.indexURL = tk.indexURL\n\n\t\tif (tk.checkexpressionrank) {\n\t\t\tpar.checkexpressionrank = {}\n\t\t\tfor (const k in tk.checkexpressionrank) {\n\t\t\t\tpar.checkexpressionrank[k] = tk.checkexpressionrank[k]\n\t\t\t}\n\t\t}\n\n\t\tif (tk.checkvcf) {\n\t\t\tpar.checkvcf = tk.checkvcf.stringifiedObj\n\t\t}\n\t} else {\n\t\tpar.dslabel = tk.mds.label\n\t\tpar.querykey = tk.querykey\n\t}\n\n\tif (tk.getallsamples) {\n\t\tpar.getallsamples = true\n\t}\n\n\t// cnv\n\tif (tk.sampleset) par.sampleset = tk.sampleset\n\tif (tk.valueCutoff) par.valueCutoff = tk.valueCutoff\n\tif (Number.isInteger(tk.bplengthUpperLimit)) par.bplengthUpperLimit = tk.bplengthUpperLimit\n\tif (tk.showonlycnvwithsv) par.showonlycnvwithsv = 1\n\tpar.hide_cnvgain = tk.hide_cnvgain\n\tpar.hide_cnvloss = tk.hide_cnvloss\n\n\t// loh\n\tif (tk.segmeanValueCutoff) par.segmeanValueCutoff = tk.segmeanValueCutoff\n\tif (Number.isInteger(tk.lohLengthUpperLimit)) par.lohLengthUpperLimit = tk.lohLengthUpperLimit\n\n\tif (tk.singlesample) {\n\t\t// single sample\n\t\tpar.singlesample = tk.singlesample.name\n\t} else {\n\t\t// multi sample\n\t\t// here are things not to be applied to single sample\n\t\tif (tk.sampleAttribute) {\n\t\t\t// mutation attribute applicable to all data types\n\t\t\tconst key2value = {}\n\t\t\tlet hashidden = false\n\t\t\tfor (const key in tk.sampleAttribute.attributes) {\n\t\t\t\tconst attr = tk.sampleAttribute.attributes[key]\n\t\t\t\tif (attr.hiddenvalues && attr.hiddenvalues.size) {\n\t\t\t\t\tkey2value[key] = [...attr.hiddenvalues]\n\t\t\t\t\thashidden = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hashidden) {\n\t\t\t\tpar.hiddensampleattr = key2value\n\t\t\t}\n\t\t}\n\t}\n\n\tif (tk.mutationAttribute) {\n\t\t// mutation attribute applicable to all data types\n\t\tconst key2value = {}\n\t\tlet hashidden = false\n\t\tfor (const key in tk.mutationAttribute.attributes) {\n\t\t\tconst attr = tk.mutationAttribute.attributes[key]\n\t\t\tif (attr.hiddenvalues && attr.hiddenvalues.size) {\n\t\t\t\tkey2value[key] = [...attr.hiddenvalues]\n\t\t\t\thashidden = true\n\t\t\t}\n\t\t}\n\t\tif (hashidden) {\n\t\t\tpar.hiddenmattr = key2value\n\t\t}\n\t}\n\n\tif (tk.alleleAttribute) {\n\t\t// mutation attribute applicable to all data types\n\t\tconst key2value = {}\n\t\tlet hashidden = false\n\t\tfor (const key in tk.alleleAttribute.attributes) {\n\t\t\tconst attr = tk.alleleAttribute.attributes[key]\n\t\t\tif (attr.disable) continue\n\t\t\tif (attr.isnumeric) {\n\t\t\t\tif (Number.isFinite(attr.cutoffvalue)) {\n\t\t\t\t\tkey2value[key] = {\n\t\t\t\t\t\tcutoffvalue: attr.cutoffvalue,\n\t\t\t\t\t\tkeeplowerthan: attr.keeplowerthan\n\t\t\t\t\t}\n\t\t\t\t\thashidden = true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// categorical\n\t\t\t\tif (attr.hiddenvalues && attr.hiddenvalues.size) {\n\t\t\t\t\tkey2value[key] = [...attr.hiddenvalues]\n\t\t\t\t\thashidden = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (hashidden) {\n\t\t\tpar.filteralleleattr = key2value\n\t\t}\n\t}\n\tif (tk.locusAttribute) {\n\t\t// mutation attribute applicable to all data types\n\t\tconst key2value = {}\n\t\tlet hashidden = false\n\t\tfor (const key in tk.locusAttribute.attributes) {\n\t\t\tconst attr = tk.locusAttribute.attributes[key]\n\t\t\tif (attr.disable) continue\n\t\t\tif (attr.isnumeric) {\n\t\t\t\tif (Number.isFinite(attr.cutoffvalue)) {\n\t\t\t\t\tkey2value[key] = {\n\t\t\t\t\t\tcutoffvalue: attr.cutoffvalue,\n\t\t\t\t\t\tkeeplowerthan: attr.keeplowerthan\n\t\t\t\t\t}\n\t\t\t\t\thashidden = true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// categorical\n\t\t\t\tif (attr.hiddenvalues && attr.hiddenvalues.size) {\n\t\t\t\t\tkey2value[key] = [...attr.hiddenvalues]\n\t\t\t\t\thashidden = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (hashidden) {\n\t\t\tpar.filterlocusattr = key2value\n\t\t}\n\t}\n\n\t{\n\t\t// from mclass.hidden, only dt are used for filtering, vcf class currently filter on client\n\t\tconst hiddendt = []\n\t\tfor (const k of tk.legend_mclass.hiddenvalues) {\n\t\t\tif (Number.isInteger(k)) hiddendt.push(k)\n\t\t}\n\t\tif (hiddendt.length) {\n\t\t\tpar.hiddendt = hiddendt\n\t\t}\n\t}\n}\n\n/////////////////////// __multi\n\nfunction render_samplegroups(tk, block) {\n\t/*\n\tmulti-sample\n\tdense or full\n\n\ta sample should have 1 or more of cnv/sv/loh/itd/snvindel, cannot be empty\n\tsv that are fully in view range will be shown as 2 circles\n\tone sample per row, equal row height\n\tfor dense/full\n\n\tdraw stack items first (cnv/loh/itd); then sv; then vcf\n\n\tin dense mode, sv won't involve in tk.samplegroups\n\tneed sv in separate list for dense plot\n\t*/\n\n\ttrackclear(tk)\n\n\t// track labels will include both bold label and version label\n\tlet labelheight = block.labelfontsize\n\tif (tk.versionlabel) labelheight += block.labelfontsize\n\n\tconst [groups, svlst4dense] = prep_samplegroups(tk, block)\n\n\ttk.samplegroups = groups\n\n\t/*\n\tif dense, draw vcf density and return height; otherwise variants are dispersed among samplegroup and won't affect tk height\n\twhen view range is too big, won't draw but show a message\n\twhich will take vertical space, the height of which will also be returned\n\t*/\n\tconst vcfdensityheight = render_multi_vcfdense(tk, block)\n\n\t// likewise for sv\n\tconst svdensityheight = render_multi_svdense(svlst4dense, tk, block)\n\n\t// for each sample group, draw cnv bars, will draw sv and vcf if in full mode\n\tconst cnvheight = render_multi_cnvloh(tk, block)\n\n\tmulti_expressionstatus_ase_outlier(tk)\n\n\tconst genebaraxisheight = render_multi_genebar(tk, block)\n\n\t// padding between sv/vcf, if both drawn\n\tconst vcfsvpad = vcfdensityheight && svdensityheight ? 3 : 0\n\n\t// track top blank height\n\tlet hpad = Math.max(labelheight, vcfdensityheight + svdensityheight + vcfsvpad, genebaraxisheight)\n\n\t// may increase hpad: don't allow tk label to overlap with density plot label\n\tif (vcfdensityheight) {\n\t\thpad += Math.max(0, labelheight + 8 - (hpad - svdensityheight - vcfsvpad - vcfdensityheight / 2))\n\t} else if (svdensityheight) {\n\t\thpad += Math.max(0, labelheight + 8 - (hpad - svdensityheight / 2))\n\t}\n\n\t// adjust config handle position by top blank height\n\tif (genebaraxisheight == 0 || hpad > genebaraxisheight + 3 + block.labelfontsize) {\n\t\t// enough space for label to be in usual place\n\t\ttk.config_handle.transition().attr('text-anchor', 'start').attr('x', 0)\n\t} else {\n\t\ttk.config_handle.transition().attr('text-anchor', 'end').attr('x', -block.rpad)\n\t}\n\n\ttk.cnvleftg.transition().attr('transform', 'translate(0,' + hpad + ')')\n\ttk.cnvmidg.transition().attr('transform', 'translate(0,' + hpad + ')')\n\ttk.vcfdensityg.transition().attr('transform', 'translate(0,' + (hpad - svdensityheight - vcfsvpad) + ')')\n\ttk.svdensityg.transition().attr('transform', 'translate(0,' + hpad + ')')\n\ttk.cnvrightg.transition().attr('transform', 'translate(0,' + hpad + ')')\n\n\t{\n\t\t// if showing density plots, put labels on left of density track\n\t\tconst color = '#858585'\n\t\tif (vcfdensityheight && tk.data_vcf) {\n\t\t\tlet c_snvindel = 0\n\n\t\t\tfor (const m of tk.data_vcf) {\n\t\t\t\tif (m.x == undefined) continue\n\t\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\t\tc_snvindel += m.sampledata.length\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unknown dt from data_vcf')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst phrases = []\n\t\t\tif (c_snvindel) phrases.push(c_snvindel + ' SNV/indel' + (c_snvindel > 1 ? 's' : ''))\n\n\t\t\ttk.vcfdensitylabelg\n\t\t\t\t.attr('transform', 'translate(0,' + (hpad - vcfdensityheight - vcfsvpad - svdensityheight) + ')')\n\t\t\t\t.append('text')\n\t\t\t\t.text(phrases.join(', '))\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('x', block.tkleftlabel_xshift)\n\t\t\t\t.attr('y', vcfdensityheight / 2)\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('font-size', Math.min(block.labelfontsize, vcfdensityheight) - 1)\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('fill', color)\n\t\t\t\t.each(function () {\n\t\t\t\t\ttk.leftLabelMaxwidth = Math.max(tk.leftLabelMaxwidth, this.getBBox().width)\n\t\t\t\t})\n\n\t\t\ttk.vcfdensitylabelg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('y2', vcfdensityheight)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\ttk.vcfdensitylabelg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.attr('x1', -leftlabelticksize)\n\t\t\t\t.attr('y1', vcfdensityheight / 2)\n\t\t\t\t.attr('y2', vcfdensityheight / 2)\n\t\t\ttk.vcfdensitylabelg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('stroke-width', 1)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.attr('stroke-dasharray', '1,3')\n\t\t\t\t.attr('x2', block.width)\n\t\t\t\t.attr('y1', vcfdensityheight)\n\t\t\t\t.attr('y2', vcfdensityheight)\n\t\t}\n\n\t\tif (svdensityheight) {\n\t\t\ttk.svdensitylabelg\n\t\t\t\t.attr('transform', 'translate(0,' + (hpad - svdensityheight) + ')')\n\t\t\t\t.append('text')\n\t\t\t\t.text(svlst4dense.length + ' SV breakpoint' + (svlst4dense.length > 1 ? 's' : ''))\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('x', block.tkleftlabel_xshift)\n\t\t\t\t.attr('y', svdensityheight / 2)\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('font-size', Math.min(block.labelfontsize, svdensityheight) - 1)\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('fill', color)\n\t\t\t\t.each(function () {\n\t\t\t\t\ttk.leftLabelMaxwidth = Math.max(tk.leftLabelMaxwidth, this.getBBox().width)\n\t\t\t\t})\n\t\t\ttk.svdensitylabelg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('y2', svdensityheight)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\ttk.svdensitylabelg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.attr('x1', -leftlabelticksize)\n\t\t\t\t.attr('y1', svdensityheight / 2)\n\t\t\t\t.attr('y2', svdensityheight / 2)\n\t\t\ttk.svdensitylabelg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('stroke-width', 1)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.attr('stroke-dasharray', '1,3')\n\t\t\t\t.attr('x2', block.width)\n\t\t\t\t.attr('y1', svdensityheight)\n\t\t\t\t.attr('y2', svdensityheight)\n\t\t}\n\t}\n\n\ttk.height_main = tk.toppad + hpad + cnvheight + tk.bottompad\n\n\tupdate_legend(tk, block)\n}\n\nfunction render_multi_vcfdense(tk, block) {\n\t/*\n\tmulti-sample\n\tnative/custom\n\tdense\n\t*/\n\tif (tk.vcfrangelimit) {\n\t\ttk.vcfdensityg\n\t\t\t.append('text')\n\t\t\t.text('Zoom in under ' + common.bplen(tk.vcfrangelimit) + ' to show SNV/indel density')\n\t\t\t.attr('font-size', block.labelfontsize)\n\t\t\t.attr('font-family', client.font)\n\t\treturn block.labelfontsize\n\t}\n\tif (!tk.isdense) return 0\n\n\tif (!tk.data_vcf || tk.data_vcf.length == 0) return 0\n\n\tconst bins = render_multi_vcfdense_2bins(tk, block)\n\n\t// group m in each bin by class\n\tfor (const b of bins) {\n\t\tif (b.lst.length == 0) continue\n\t\tconst name2group = new Map()\n\t\t// k: mclass key\n\t\t// v: mlst[]\n\n\t\tfor (const m of b.lst) {\n\t\t\tif (!name2group.has(m.class)) {\n\t\t\t\tname2group.set(m.class, [])\n\t\t\t}\n\t\t\tname2group.get(m.class).push(m)\n\t\t}\n\n\t\tconst lst = []\n\t\tfor (const [classname, mlst] of name2group) {\n\t\t\tlet samplecount = 0 // total # of samples in this group\n\t\t\tfor (const m of mlst) {\n\t\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\t\tsamplecount += m.sampledata.length\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unknown dt')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlst.push({\n\t\t\t\tname: common.mclass[classname].label,\n\t\t\t\titems: mlst,\n\t\t\t\tcolor: common.mclass[classname].color,\n\t\t\t\tsamplecount: samplecount\n\t\t\t})\n\t\t}\n\t\tlst.sort((i, j) => j.samplecount - i.samplecount)\n\t\tb.groups = lst\n\t}\n\n\tlet maxcount = 0 // per group\n\tfor (const b of bins) {\n\t\tif (!b.groups) continue\n\t\tfor (const g of b.groups) {\n\t\t\tmaxcount = Math.max(maxcount, g.samplecount)\n\t\t}\n\t}\n\n\tlet maxheight = 0 // of all bins\n\t{\n\t\tconst radius = 4\n\t\tlet mrd = 0 // max radius\n\t\tconst w = Math.pow(radius, 2) * Math.PI // unit area\n\t\tif (maxcount <= 3) {\n\t\t\tmrd = w * maxcount * 0.9\n\t\t} else if (maxcount <= 10) {\n\t\t\tmrd = w * 5\n\t\t} else if (maxcount <= 100) {\n\t\t\tmrd = w * 7\n\t\t} else {\n\t\t\tmrd = w * 10\n\t\t}\n\t\tconst sf_discradius = scaleLinear()\n\t\t\t.domain([1, maxcount * 0.5 + 0.1, maxcount * 0.6 + 0.1, maxcount * 0.7 + 0.1, maxcount * 0.8 + 0.1, maxcount])\n\t\t\t.range([w, w + (mrd - w) * 0.8, w + (mrd - w) * 0.85, w + (mrd - w) * 0.9, w + (mrd - w) * 0.95, mrd])\n\n\t\t// note: must count # of samples in each mutation for radius & offset\n\t\tfor (const bin of bins) {\n\t\t\tif (!bin.groups) continue\n\n\t\t\tfor (const g of bin.groups) {\n\t\t\t\t// group dot radius determined by total number of samples in each mutation, not # of mutations\n\n\t\t\t\tg.radius = Math.sqrt(sf_discradius(g.samplecount) / Math.PI)\n\t\t\t}\n\n\t\t\t// offset of a bin determined by the total number of samples\n\t\t\t// count again for the bin\n\t\t\tconst totalnum = bin.groups.reduce((i, j) => j.samplecount + i, 0)\n\n\t\t\tbin.offset = Math.sqrt(sf_discradius(totalnum) / Math.PI)\n\n\t\t\tconst sumheight = bin.groups.reduce((i, j) => i + j.radius * 2, 0)\n\n\t\t\tmaxheight = Math.max(maxheight, bin.offset + sumheight)\n\t\t}\n\t}\n\n\tfor (const b of bins) {\n\t\tif (!b.groups) continue\n\n\t\tconst g = tk.vcfdensityg.append('g').attr('transform', 'translate(' + b.x + ',0)')\n\n\t\tlet y = b.offset\n\n\t\tfor (const grp of b.groups) {\n\t\t\t/*\n\t\t\tone dot for each group\n\n\t\t\t.name\n\t\t\t.items[]\n\t\t\t.radius\n\t\t\t.color\n\t\t\t.samplecount\n\t\t\t*/\n\n\t\t\ty += grp.radius\n\t\t\tg.append('circle').attr('cy', -y).attr('r', grp.radius).attr('fill', grp.color).attr('stroke', 'white')\n\n\t\t\tif (grp.radius >= 8) {\n\t\t\t\t// big enough dot, show # of items\n\t\t\t\tconst s = grp.radius * 1.5\n\t\t\t\tconst text = grp.samplecount.toString()\n\t\t\t\tconst fontsize = Math.min(s / (text.length * client.textlensf), s)\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.text(text)\n\t\t\t\t\t.attr('y', -y)\n\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('font-size', fontsize)\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.attr('fill', 'white')\n\t\t\t}\n\n\t\t\tg.append('circle')\n\t\t\t\t.attr('cy', -y)\n\t\t\t\t.attr('r', grp.radius)\n\t\t\t\t.attr('fill', 'white')\n\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t.attr('stroke', grp.color)\n\t\t\t\t.attr('stroke-opacity', 0)\n\t\t\t\t.attr('class', 'sja_aa_disckick')\n\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\ttooltip_multi_vcfdense(grp, tk, block)\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t})\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tclick_multi_vcfdense(grp, tk, block)\n\t\t\t\t})\n\t\t\ty += grp.radius\n\t\t}\n\t\tg.append('line').attr('y2', -b.offset).attr('stroke', b.groups[0].color)\n\t}\n\treturn maxheight\n}\n\nfunction render_multi_vcfdense_2bins(tk, block) {\n\tif (block.exonsf >= 3) {\n\t\t// group by basepairs\n\t\tconst bp2lst = new Map()\n\t\tfor (const m of tk.data_vcf) {\n\t\t\tif (m.x == undefined) continue\n\t\t\tif (!bp2lst.has(m.pos)) {\n\t\t\t\tbp2lst.set(m.pos, {\n\t\t\t\t\tx: m.x,\n\t\t\t\t\tlst: []\n\t\t\t\t})\n\t\t\t}\n\t\t\tbp2lst.get(m.pos).lst.push(m)\n\t\t}\n\t\tconst bins = []\n\t\tfor (const b of bp2lst.values()) {\n\t\t\tbins.push(b)\n\t\t}\n\t\treturn bins\n\t}\n\n\t// fixed pixel width\n\tconst binw = 10 // pixel\n\tconst bins = []\n\tlet x = 0\n\twhile (x < block.width) {\n\t\tbins.push({\n\t\t\tx1: x,\n\t\t\tx2: x + binw,\n\t\t\tx: x + binw / 2,\n\t\t\tlst: []\n\t\t})\n\t\tx += binw\n\t}\n\tx = block.width\n\tfor (const p of block.subpanels) {\n\t\tx += p.leftpad\n\t\tlet b = 0\n\t\twhile (b < p.width) {\n\t\t\tbins.push({\n\t\t\t\tx1: x + b,\n\t\t\t\tx2: x + b + binw,\n\t\t\t\tlst: []\n\t\t\t})\n\t\t\tb += binw\n\t\t}\n\t\tx += p.width\n\t}\n\n\t// m to bins\n\tfor (const m of tk.data_vcf) {\n\t\tif (m.x == undefined) {\n\t\t\t// unmapped\n\t\t\tcontinue\n\t\t}\n\t\tfor (const b of bins) {\n\t\t\tif (b.x1 <= m.x && b.x2 >= m.x) {\n\t\t\t\tb.lst.push(m)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn bins\n}\n\nfunction render_multi_svdense(svlst, tk, block) {\n\t/*\n\tmulti-sample\n\tnative/custom\n\tdense\n\tlist of sv provided\n\tTODO change disc color to sv type\n\t*/\n\tif (!tk.isdense || svlst.length == 0) return 0\n\n\tconst tmpbins = render_multi_svdense_2bins(svlst, tk, block)\n\n\t// since sv are breakends, one sv with both ends may be in the same bin, so much dedup\n\tconst bins = []\n\tfor (const b of tmpbins) {\n\t\tif (b.lst.length == 0) continue\n\t\tconst b2 = {}\n\t\tfor (const k in b) {\n\t\t\tb2[k] = b[k]\n\t\t}\n\n\t\tb2.lst = dedup_sv(b.lst)\n\n\t\tbins.push(b2)\n\t}\n\n\t// group items in each bin\n\tfor (const b of bins) {\n\t\tconst name2group = new Map()\n\t\tconst nonamelst = []\n\t\tfor (const i of b.lst) {\n\t\t\tif (i._samplegroup.name) {\n\t\t\t\tif (!name2group.has(i._samplegroup.name)) {\n\t\t\t\t\tname2group.set(i._samplegroup.name, [])\n\t\t\t\t}\n\t\t\t\tname2group.get(i._samplegroup.name).push(i)\n\t\t\t} else {\n\t\t\t\tnonamelst.push(i)\n\t\t\t}\n\t\t}\n\t\tconst lst = []\n\t\tif (nonamelst.length) {\n\t\t\tlst.push({\n\t\t\t\titems: nonamelst,\n\t\t\t\tcolor: svdensitynogroupcolor\n\t\t\t})\n\t\t}\n\t\tfor (const [name, items] of name2group) {\n\t\t\tlst.push({\n\t\t\t\tname: name,\n\t\t\t\titems: items,\n\t\t\t\tcolor: tk.legend_samplegroup ? tk.legend_samplegroup.color(name) : '#aaa'\n\t\t\t})\n\t\t}\n\t\tlst.sort((i, j) => j.items.length - i.items.length)\n\t\tb.groups = lst\n\t}\n\n\tlet maxcount = 0 // per group\n\tfor (const b of bins) {\n\t\tfor (const g of b.groups) {\n\t\t\tmaxcount = Math.max(maxcount, g.items.length)\n\t\t}\n\t}\n\n\tlet maxheight = 0 // of all bins\n\t{\n\t\tconst radius = 4\n\t\tlet mrd = 0 // max radius\n\t\tconst w = Math.pow(radius, 2) * Math.PI // unit area\n\t\tif (maxcount <= 3) {\n\t\t\tmrd = w * maxcount * 0.9\n\t\t} else if (maxcount <= 10) {\n\t\t\tmrd = w * 5\n\t\t} else if (maxcount <= 100) {\n\t\t\tmrd = w * 7\n\t\t} else {\n\t\t\tmrd = w * 10\n\t\t}\n\t\tconst sf_discradius = scaleLinear()\n\t\t\t.domain([1, maxcount * 0.5 + 0.1, maxcount * 0.6 + 0.1, maxcount * 0.7 + 0.1, maxcount * 0.8 + 0.1, maxcount])\n\t\t\t.range([w, w + (mrd - w) * 0.8, w + (mrd - w) * 0.85, w + (mrd - w) * 0.9, w + (mrd - w) * 0.95, mrd])\n\t\tfor (const b of bins) {\n\t\t\tif (!b.groups) continue\n\t\t\tfor (const g of b.groups) {\n\t\t\t\tg.radius = Math.sqrt(sf_discradius(g.items.length) / Math.PI)\n\t\t\t}\n\t\t\t// offset of a bin determined by the total number of items\n\t\t\tb.offset = Math.sqrt(sf_discradius(b.lst.length) / Math.PI)\n\t\t\tconst h = b.groups.reduce((i, j) => i + j.radius * 2, 0)\n\t\t\tmaxheight = Math.max(maxheight, b.offset + h)\n\t\t}\n\t}\n\n\tfor (const b of bins) {\n\t\tconst g = tk.svdensityg.append('g').attr('transform', 'translate(' + b.x + ',0)')\n\n\t\tlet y = b.offset\n\n\t\tfor (const grp of b.groups) {\n\t\t\t// one dot for each group\n\n\t\t\ty += grp.radius\n\t\t\tg.append('circle').attr('cy', -y).attr('r', grp.radius).attr('fill', grp.color).attr('stroke', 'white')\n\n\t\t\tif (grp.radius >= 8) {\n\t\t\t\t// big enough dot, show # of items\n\t\t\t\tconst s = grp.radius * 1.5\n\t\t\t\tconst text = grp.items.length.toString()\n\t\t\t\tconst fontsize = Math.min(s / (text.length * client.textlensf), s)\n\n\t\t\t\tg.append('text')\n\t\t\t\t\t.text(text)\n\t\t\t\t\t.attr('y', -y)\n\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('font-size', fontsize)\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.attr('fill', 'white')\n\t\t\t}\n\n\t\t\t// cover\n\t\t\tg.append('circle')\n\t\t\t\t.attr('cy', -y)\n\t\t\t\t.attr('r', grp.radius)\n\t\t\t\t.attr('fill', 'white')\n\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t.attr('stroke', grp.color)\n\t\t\t\t.attr('stroke-opacity', 0)\n\t\t\t\t.attr('class', 'sja_aa_disckick')\n\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\ttooltip_multi_svdense(grp, tk, block)\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t})\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tclick_multi_svdense(grp, tk, block)\n\t\t\t\t})\n\t\t\ty += grp.radius\n\t\t}\n\t\tg.append('line').attr('y2', -b.offset).attr('stroke', b.groups[0].color)\n\t}\n\treturn maxheight\n}\n\nfunction render_multi_svdense_2bins(svlst, tk, block) {\n\t// repetitive\n\tif (block.exonsf >= 3) {\n\t\t// group by basepairs\n\t\tconst bp2lst = new Map()\n\t\tfor (const m of svlst) {\n\t\t\tif (m.x == undefined) continue\n\t\t\tif (!bp2lst.has(m._pos)) {\n\t\t\t\tbp2lst.set(m._pos, {\n\t\t\t\t\tx: m.x,\n\t\t\t\t\tlst: []\n\t\t\t\t})\n\t\t\t}\n\t\t\tbp2lst.get(m._pos).lst.push(m)\n\t\t}\n\t\tconst bins = []\n\t\tfor (const b of bp2lst.values()) {\n\t\t\tbins.push(b)\n\t\t}\n\t\treturn bins\n\t}\n\n\t// list of bins\n\tconst binw = 10 // pixel\n\tconst tmpbins = []\n\tlet x = 0\n\twhile (x < block.width) {\n\t\ttmpbins.push({\n\t\t\tx1: x,\n\t\t\tx2: x + binw,\n\t\t\tx: x + binw / 2,\n\t\t\tlst: []\n\t\t})\n\t\tx += binw\n\t}\n\n\tx = block.width\n\tfor (const p of block.subpanels) {\n\t\tx += p.leftpad\n\t\tlet b = 0\n\t\twhile (b < p.width) {\n\t\t\ttmpbins.push({\n\t\t\t\tx1: x + b,\n\t\t\t\tx2: x + b + binw,\n\t\t\t\tlst: []\n\t\t\t})\n\t\t\tb += binw\n\t\t}\n\t\tx += p.width\n\t}\n\n\t// sv to bins\n\tfor (const sv of svlst) {\n\t\tfor (const b of tmpbins) {\n\t\t\tif (b.x1 <= sv.x && b.x2 >= sv.x) {\n\t\t\t\tb.lst.push(sv)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn tmpbins\n}\n\nfunction render_multi_cnvloh(tk, block) {\n\t/*\n\tdraws sample rows, each contain cnv & loh segments\n\tin full mode, include vcf data as well\n\n\tmulti-sample\n\tofficial or custom\n\tfull or dense\n\n\tin full mode:\n\t\tsample/group height determined on the fly\n\t\tfor each sample, gather all stackable items: cnv/loh/itd\n\t\tthen do stacking, generate item.stack_y and obtain height for this sample\n\t\tthen commence rendering\n\n\tin dense mode:\n\t\tall samples have equal height, 1 pixel hardcoded\n\t*/\n\n\t{\n\t\t// get value cutoff for varying color of cnv or loh segments\n\n\t\tconst gain = [], // log2ratio values\n\t\t\tloss = [],\n\t\t\tsegmean = [] // segmean values\n\n\t\tfor (const g of tk.samplegroups) {\n\t\t\tfor (const s of g.samples) {\n\t\t\t\tfor (const i of s.items) {\n\t\t\t\t\tif (i.dt == common.dtloh) {\n\t\t\t\t\t\tsegmean.push(i.segmean)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (i.dt == common.dtcnv) {\n\t\t\t\t\t\tif (i.value > 0) gain.push(i.value)\n\t\t\t\t\t\telse loss.push(-i.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst gainmaxvalue = common.getMax_byiqr(gain, novalue_max_cnvloh)\n\t\tconst lossmaxvalue = -common.getMax_byiqr(loss, novalue_max_cnvloh)\n\t\ttk.cnvcolor.cnvmax = Math.max(gainmaxvalue, -lossmaxvalue)\n\n\t\tif (segmean.length) {\n\t\t\ttk.cnvcolor.segmeanmax = Math.max(...segmean)\n\t\t} else {\n\t\t\ttk.cnvcolor.segmeanmax = novalue_max_cnvloh\n\t\t}\n\t}\n\n\tlet groupspace // vertical spacing between groups\n\tif (tk.isdense) {\n\t\ttk.rowspace = 0\n\t\tgroupspace = 4\n\t} else if (tk.isfull) {\n\t\ttk.rowspace = 1\n\t\tgroupspace = 10\n\t}\n\n\t// for width of background bar of each sample\n\tconst entirewidth = block.width + block.subpanels.reduce((i, j) => i + j.width + j.leftpad, 0)\n\n\trender_multi_cnvloh_stackeachsample(tk, block) // in each sample, process stackable items\n\n\t// sample height are set, but it doesn't set group height, because group height needs rowspace which is set above\n\tfor (const g of tk.samplegroups) {\n\t\tg.height = tk.rowspace * (g.samples.length - 1) + g.samples.reduce((i, j) => j.height + i, 0)\n\t}\n\n\tconst grouplabelfontsize = block.labelfontsize - (tk.isfull ? 0 : 1)\n\n\tlet yoff = groupspace\n\n\tfor (const [groupidx, samplegroup] of tk.samplegroups.entries()) {\n\t\t/*\n\t\tfor each group (custom track has just 1)\n\t\t*/\n\n\t\t// a group may have just 1 sample so height is smaller than label font size, need to have a ypad\n\t\tlet thisgroupypad = 0\n\t\tif (samplegroup.height < grouplabelfontsize) {\n\t\t\tthisgroupypad = (grouplabelfontsize - samplegroup.height) / 2\n\t\t}\n\n\t\tif (samplegroup.name) {\n\t\t\t// the group's got a name, show name and border lines\n\t\t\tconst color = tk.legend_samplegroup ? tk.legend_samplegroup.color(samplegroup.name) : '#0A7FA6'\n\n\t\t\tconst glabellst = [samplegroup.name + ' (' + samplegroup.samples.length]\n\t\t\tif (samplegroup.sampletotalnum)\n\t\t\t\tglabellst.push(', ' + Math.ceil((100 * samplegroup.samples.length) / samplegroup.sampletotalnum) + '%')\n\t\t\tif (tk.sampleset) {\n\t\t\t\tconst s = tk.sampleset.find(i => i.name == samplegroup.name)\n\t\t\t\tif (s) glabellst.push(', ' + Math.ceil((100 * samplegroup.samples.length) / s.samples.length) + '%')\n\t\t\t}\n\t\t\tglabellst.push(')')\n\n\t\t\ttk.cnvleftg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('font-size', grouplabelfontsize)\n\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t.attr('y', yoff + thisgroupypad + samplegroup.height / 2)\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('fill', color)\n\t\t\t\t.attr('x', block.tkleftlabel_xshift)\n\t\t\t\t.text(glabellst.join(''))\n\t\t\t\t.each(function () {\n\t\t\t\t\ttk.leftLabelMaxwidth = Math.max(tk.leftLabelMaxwidth, this.getBBox().width)\n\t\t\t\t})\n\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\ttooltip_samplegroup(samplegroup, tk)\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t})\n\t\t\t\t.on('click', event => {\n\t\t\t\t\ttk.tip2.clear()\n\t\t\t\t\tclick_samplegroup_showmenu(samplegroup, tk, block)\n\t\t\t\t\ttk.tip2.showunder(event.target)\n\t\t\t\t})\n\n\t\t\t// v span\n\t\t\ttk.cnvleftg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('y1', yoff + thisgroupypad)\n\t\t\t\t.attr('y2', yoff + thisgroupypad + samplegroup.height)\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\n\t\t\t// tick\n\t\t\ttk.cnvleftg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('y1', yoff + thisgroupypad + samplegroup.height / 2)\n\t\t\t\t.attr('y2', yoff + thisgroupypad + samplegroup.height / 2)\n\t\t\t\t.attr('x2', -leftlabelticksize)\n\t\t\t\t.attr('stroke', color)\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t}\n\n\t\tlet yoff1 = yoff + thisgroupypad\n\t\tsamplegroup.y = yoff1\n\n\t\tfor (const sample of samplegroup.samples) {\n\t\t\t/*\n\t\t\tfor each sample from this group\n\t\t\t*/\n\n\t\t\t// if to draw sample name\n\n\t\t\tif (!samplegroup.name && sample.samplename && sample.height >= minlabfontsize) {\n\t\t\t\t// show sample name there is no group name, and tall enough, no matter if custom/native/sampleset\n\t\t\t\tsample.svglabel = tk.cnvleftg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(sample.samplename)\n\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t.attr('x', -5)\n\t\t\t\t\t.attr('y', yoff1 + sample.height / 2)\n\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t.attr('font-size', Math.min(15, Math.max(minlabfontsize, sample.height + 1)))\n\t\t\t\t\t.each(function () {})\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\tmulti_sample_addhighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\ttk.leftLabelMaxwidth = Math.max(tk.leftLabelMaxwidth, sample.svglabel.node().getBBox().width)\n\t\t\t}\n\n\t\t\t// container for all the browser track elements\n\t\t\tconst g = tk.cnvmidg.append('g').attr('transform', 'translate(0,' + yoff1 + ')')\n\n\t\t\tif (tk.isfull) {\n\t\t\t\tsample.blockbg = g\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('width', entirewidth)\n\t\t\t\t\t.attr('height', sample.height)\n\t\t\t\t\t.attr('fill', coverbarcolor_active)\n\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\tmulti_sample_addhighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t/*\n\t\t\tjinghui nbl cell line mixed into st/nbl\n\t\t\t*/\n\t\t\tif (tk.isfull && sample.sampletype == hardcode_cellline) {\n\t\t\t\tg.append('rect')\n\t\t\t\t\t.attr('x', -5)\n\t\t\t\t\t.attr('y', 0)\n\t\t\t\t\t.attr('width', 5)\n\t\t\t\t\t.attr('height', sample.height)\n\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t}\n\n\t\t\t/*\n\t\t\tdraw cnv/loh/itd bars, before all others\n\t\t\t*/\n\t\t\tfor (const item of sample.items) {\n\t\t\t\tif (item.dt != common.dtcnv && item.dt != common.dtloh && item.dt != common.dtitd) continue\n\n\t\t\t\t// segment color set by numeric value against a cutoff\n\t\t\t\tlet color\n\t\t\t\tif (item.dt == common.dtloh) {\n\t\t\t\t\tif (item.segmean >= tk.cnvcolor.segmeanmax) {\n\t\t\t\t\t\tcolor = tk.cnvcolor.loh.str\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolor =\n\t\t\t\t\t\t\t'rgba(' +\n\t\t\t\t\t\t\ttk.cnvcolor.loh.r +\n\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\ttk.cnvcolor.loh.g +\n\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\ttk.cnvcolor.loh.b +\n\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\t(item.segmean / tk.cnvcolor.segmeanmax).toFixed(2) +\n\t\t\t\t\t\t\t')'\n\t\t\t\t\t}\n\t\t\t\t} else if (item.dt == common.dtcnv) {\n\t\t\t\t\t// cnv\n\t\t\t\t\tif (item.value > 0) {\n\t\t\t\t\t\tif (item.value >= tk.cnvcolor.cnvmax) {\n\t\t\t\t\t\t\tcolor = tk.cnvcolor.gain.str\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcolor =\n\t\t\t\t\t\t\t\t'rgba(' +\n\t\t\t\t\t\t\t\ttk.cnvcolor.gain.r +\n\t\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\t\ttk.cnvcolor.gain.g +\n\t\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\t\ttk.cnvcolor.gain.b +\n\t\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\t\t(item.value / tk.cnvcolor.cnvmax).toFixed(2) +\n\t\t\t\t\t\t\t\t')'\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (item.value <= -tk.cnvcolor.cnvmax) {\n\t\t\t\t\t\t\tcolor = tk.cnvcolor.loss.str\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcolor =\n\t\t\t\t\t\t\t\t'rgba(' +\n\t\t\t\t\t\t\t\ttk.cnvcolor.loss.r +\n\t\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\t\ttk.cnvcolor.loss.g +\n\t\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\t\ttk.cnvcolor.loss.b +\n\t\t\t\t\t\t\t\t',' +\n\t\t\t\t\t\t\t\t(-item.value / tk.cnvcolor.cnvmax).toFixed(2) +\n\t\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} else if (item.dt == common.dtitd) {\n\t\t\t\t\tcolor = common.mclass[common.mclassitd].color\n\t\t\t\t}\n\n\t\t\t\tg.append('rect')\n\t\t\t\t\t.attr('x', Math.min(item.x1, item.x2))\n\t\t\t\t\t.attr('y', item.stack_y)\n\t\t\t\t\t.attr('width', Math.max(1, Math.abs(item.x1 - item.x2)))\n\t\t\t\t\t.attr('height', item.stack_h)\n\t\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t\t.attr('stroke', 'none')\n\t\t\t\t\t.attr('class', 'sja_aa_skkick')\n\t\t\t\t\t.attr('fill', color)\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: item,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t// FIXME prevent click while dragging\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: item,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t/*\n\t\t\tdraw sv/fusion circles, appears here in full mode, not in dense\n\t\t\t*/\n\t\t\tfor (const item of sample.items) {\n\t\t\t\tif (item.dt != common.dtsv && item.dt != common.dtfusionrna) continue\n\n\t\t\t\tconst otherchr = item.chrA == item._chr ? item.chrB : item.chrA\n\n\t\t\t\tconst color = otherchr == item._chr ? intrasvcolor : tk.legend_svchrcolor.colorfunc(otherchr)\n\n\t\t\t\tconst m_g = g.append('g').attr('transform', 'translate(' + item.x + ',' + sample.height / 2 + ')')\n\n\t\t\t\tconst w = sample.crossboxw\n\t\t\t\tlet coverstart = -w / 2,\n\t\t\t\t\tcoverwidth = w\n\n\t\t\t\tconst circle = m_g\n\t\t\t\t\t.append('circle')\n\t\t\t\t\t.attr('r', Math.min(5, Math.max(minsvradius, 1 + sample.height / 2)))\n\t\t\t\t\t.attr('fill', color)\n\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t.attr('stroke', color)\n\n\t\t\t\t// whether to draw label is solely dependent on the flags\n\t\t\t\tif (item.labonleft) {\n\t\t\t\t\tm_g\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(itemname_svfusion(item))\n\t\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t\t.attr('font-size', w + 2)\n\t\t\t\t\t\t.attr('fill', color)\n\t\t\t\t\t\t.attr('x', -w / 2 - labelspace)\n\t\t\t\t\tcoverstart = -w / 2 - labelspace - item.labelwidth\n\t\t\t\t\tcoverwidth = w + labelspace + item.labelwidth\n\t\t\t\t} else if (item.labonright) {\n\t\t\t\t\tm_g\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(itemname_svfusion(item))\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t\t.attr('font-size', w + 2)\n\t\t\t\t\t\t.attr('fill', color)\n\t\t\t\t\t\t.attr('x', w / 2 + labelspace)\n\t\t\t\t\tcoverwidth = w + labelspace + item.labelwidth\n\t\t\t\t}\n\n\t\t\t\t// mouseover cover\n\t\t\t\tm_g\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('x', coverstart)\n\t\t\t\t\t.attr('y', -w / 2)\n\t\t\t\t\t.attr('width', coverwidth)\n\t\t\t\t\t.attr('height', w)\n\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\tcircle.attr('fill-opacity', 1)\n\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\titem: item,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\tcircle.attr('fill-opacity', 0)\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\titem: item,\n\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t/*\n\t\t\tif in full mode (not dense), draw crosses for snv/indel\n\t\t\t*/\n\t\t\tif (tk.isfull && tk.data_vcf) {\n\t\t\t\tfor (const m of tk.data_vcf) {\n\t\t\t\t\tif (m.dt != common.dtsnvindel) continue\n\t\t\t\t\tif (m.x == undefined) continue\n\t\t\t\t\tif (!m.sampledata) continue\n\n\t\t\t\t\tconst w = sample.crossboxw\n\n\t\t\t\t\t//const color = common.mclass[m.class].color\n\t\t\t\t\tconst color = multi_snvindelcolor(tk, m, sample)\n\n\t\t\t\t\tfor (const ms of m.sampledata) {\n\t\t\t\t\t\tif (ms.sampleobj.name != sample.samplename) continue\n\n\t\t\t\t\t\t// a variant from this sample\n\n\t\t\t\t\t\tconst m_g = g.append('g').attr('transform', 'translate(' + m.x + ',' + sample.height / 2 + ')')\n\n\t\t\t\t\t\tconst bgbox = m_g\n\t\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t\t.attr('x', -w / 2 - 1)\n\t\t\t\t\t\t\t.attr('y', -w / 2 - 1)\n\t\t\t\t\t\t\t.attr('width', w + 2)\n\t\t\t\t\t\t\t.attr('height', w + 2)\n\t\t\t\t\t\t\t.attr('fill', color)\n\t\t\t\t\t\t\t.attr('fill-opacity', 0)\n\n\t\t\t\t\t\tlet bgline1, bgline2, fgline1, fgline2\n\n\t\t\t\t\t\tif (vcfvariantisgermline(ms, tk)) {\n\t\t\t\t\t\t\t// germline: 1 | 2 --\n\t\t\t\t\t\t\tbgline1 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', 'white')\n\t\t\t\t\t\t\t\t.attr('stroke-width', 3)\n\t\t\t\t\t\t\t\t.attr('y1', -w / 2 - 1)\n\t\t\t\t\t\t\t\t.attr('y2', w / 2 + 1)\n\t\t\t\t\t\t\tbgline2 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', 'white')\n\t\t\t\t\t\t\t\t.attr('stroke-width', 3)\n\t\t\t\t\t\t\t\t.attr('x1', -w / 2 - 1)\n\t\t\t\t\t\t\t\t.attr('x2', w / 2 + 1)\n\t\t\t\t\t\t\tfgline1 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t\t\t\t.attr('stroke-width', 1.5)\n\t\t\t\t\t\t\t\t.attr('y1', -w / 2 - 1)\n\t\t\t\t\t\t\t\t.attr('y2', w / 2 + 1)\n\t\t\t\t\t\t\tfgline2 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t\t\t\t.attr('stroke-width', 1.5)\n\t\t\t\t\t\t\t\t.attr('x1', -w / 2 - 1)\n\t\t\t\t\t\t\t\t.attr('x2', w / 2 + 1)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// somatic or not specified: 1 \\ 2 /\n\t\t\t\t\t\t\tbgline1 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', 'white')\n\t\t\t\t\t\t\t\t.attr('stroke-width', 3)\n\t\t\t\t\t\t\t\t.attr('x1', -w / 2)\n\t\t\t\t\t\t\t\t.attr('x2', w / 2)\n\t\t\t\t\t\t\t\t.attr('y1', -w / 2)\n\t\t\t\t\t\t\t\t.attr('y2', w / 2)\n\t\t\t\t\t\t\tbgline2 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', 'white')\n\t\t\t\t\t\t\t\t.attr('stroke-width', 3)\n\t\t\t\t\t\t\t\t.attr('x1', -w / 2)\n\t\t\t\t\t\t\t\t.attr('x2', w / 2)\n\t\t\t\t\t\t\t\t.attr('y1', w / 2)\n\t\t\t\t\t\t\t\t.attr('y2', -w / 2)\n\t\t\t\t\t\t\tfgline1 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t\t\t\t.attr('stroke-width', 1.5)\n\t\t\t\t\t\t\t\t.attr('x1', -w / 2)\n\t\t\t\t\t\t\t\t.attr('x2', w / 2)\n\t\t\t\t\t\t\t\t.attr('y1', -w / 2)\n\t\t\t\t\t\t\t\t.attr('y2', w / 2)\n\t\t\t\t\t\t\tfgline2 = m_g\n\t\t\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t\t\t.attr('stroke', color)\n\t\t\t\t\t\t\t\t.attr('stroke-width', 1.5)\n\t\t\t\t\t\t\t\t.attr('x1', -w / 2)\n\t\t\t\t\t\t\t\t.attr('x2', w / 2)\n\t\t\t\t\t\t\t\t.attr('y1', w / 2)\n\t\t\t\t\t\t\t\t.attr('y2', -w / 2)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet coverstart = -w / 2,\n\t\t\t\t\t\t\tcoverwidth = w\n\n\t\t\t\t\t\tif (ms.sampleobj.labonleft) {\n\t\t\t\t\t\t\tm_g\n\t\t\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t\t\t.text(m.mname)\n\t\t\t\t\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t\t\t\t.attr('font-size', sample.crossboxw + 2)\n\t\t\t\t\t\t\t\t.attr('fill', color)\n\t\t\t\t\t\t\t\t.attr('x', -w / 2 - labelspace)\n\t\t\t\t\t\t\tcoverstart = -w / 2 - labelspace - ms.sampleobj.labelwidth\n\t\t\t\t\t\t\tcoverwidth = w + labelspace + ms.sampleobj.labelwidth\n\t\t\t\t\t\t} else if (ms.sampleobj.labonright) {\n\t\t\t\t\t\t\tm_g\n\t\t\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t\t\t.text(m.mname)\n\t\t\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t\t\t\t.attr('font-size', sample.crossboxw + 2)\n\t\t\t\t\t\t\t\t.attr('fill', color)\n\t\t\t\t\t\t\t\t.attr('x', w / 2 + labelspace)\n\t\t\t\t\t\t\tcoverwidth = w + labelspace + ms.sampleobj.labelwidth\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// mouseover cover\n\t\t\t\t\t\tm_g\n\t\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t\t.attr('x', coverstart)\n\t\t\t\t\t\t\t.attr('y', -w / 2)\n\t\t\t\t\t\t\t.attr('width', coverwidth)\n\t\t\t\t\t\t\t.attr('height', w)\n\t\t\t\t\t\t\t.attr('fill', 'white')\n\t\t\t\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t\t\t\t.on('mouseover', () => {\n\t\t\t\t\t\t\t\tbgbox.attr('fill-opacity', 1)\n\t\t\t\t\t\t\t\tbgline1.attr('stroke-opacity', 0)\n\t\t\t\t\t\t\t\tbgline2.attr('stroke-opacity', 0)\n\t\t\t\t\t\t\t\tfgline1.attr('stroke', 'white')\n\t\t\t\t\t\t\t\tfgline2.attr('stroke', 'white')\n\n\t\t\t\t\t\t\t\ttooltip_singleitem({\n\t\t\t\t\t\t\t\t\titem: m,\n\t\t\t\t\t\t\t\t\tm_sample: ms,\n\t\t\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t\t\t\tbgbox.attr('fill-opacity', 0)\n\t\t\t\t\t\t\t\tbgline1.attr('stroke-opacity', 1)\n\t\t\t\t\t\t\t\tbgline2.attr('stroke-opacity', 1)\n\t\t\t\t\t\t\t\tfgline1.attr('stroke', color)\n\t\t\t\t\t\t\t\tfgline2.attr('stroke', color)\n\t\t\t\t\t\t\t\tmulti_sample_removehighlight(sample)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\tclick_multi_singleitem({\n\t\t\t\t\t\t\t\t\titem: m,\n\t\t\t\t\t\t\t\t\tm_sample: ms,\n\t\t\t\t\t\t\t\t\tsample: sample,\n\t\t\t\t\t\t\t\t\tsamplegroup: samplegroup,\n\t\t\t\t\t\t\t\t\ttk: tk,\n\t\t\t\t\t\t\t\t\tblock: block\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*** done all items for this sample ***/\n\t\t\tyoff1 += sample.height + tk.rowspace\n\t\t}\n\n\t\t/*** done a group ***/\n\t\tyoff += samplegroup.height + thisgroupypad * 2 + groupspace\n\t}\n\n\tif (!tk.nocnvlohsv) {\n\t\tif (tk.cnvcolor.cnvmax == novalue_max_cnvloh) {\n\t\t\t// hide svg and show 'nodata'\n\t\t\ttk.cnvcolor.cnvlegend.svg.style('display', 'none')\n\t\t\ttk.cnvcolor.cnvlegend.nodatadiv.style('display', 'block')\n\t\t} else {\n\t\t\t// hide 'nodata' and show svg\n\t\t\ttk.cnvcolor.cnvlegend.svg.style('display', 'block')\n\t\t\ttk.cnvcolor.cnvlegend.nodatadiv.style('display', 'none')\n\t\t\tdraw_colorscale_cnv(tk)\n\t\t}\n\n\t\tif (tk.cnvcolor.segmeanmax == novalue_max_cnvloh) {\n\t\t\tif (tk.cnvcolor.lohlegend) {\n\t\t\t\t// hide svg and show 'nodata'\n\t\t\t\ttk.cnvcolor.lohlegend.svg.style('display', 'none')\n\t\t\t\ttk.cnvcolor.lohlegend.nodatadiv.style('display', 'block')\n\t\t\t}\n\t\t} else {\n\t\t\t// hide 'nodata' and show svg\n\t\t\ttk.cnvcolor.lohlegend.svg.style('display', 'block')\n\t\t\ttk.cnvcolor.lohlegend.nodatadiv.style('display', 'none')\n\t\t\tdraw_colorscale_loh(tk)\n\t\t}\n\t}\n\n\treturn yoff\n}\n\nfunction multi_snvindelcolor(tk, m, sample) {\n\t/*\nin multi-sample mode, snvindel drawn as x or +\ndecide the color\nm{}\nsample{}\n\t.samplename\n*/\n\treturn common.mclass[m.class].color\n}\n\nexport function multi_sample_addhighlight(sample) {\n\tif (!sample) return\n\t// one of tk.samplegroup[].sample[]\n\tif (sample.svglabel) sample.svglabel.attr('fill', coverbarcolor_active)\n\tif (sample.blockbg) sample.blockbg.attr('fill-opacity', 0.1)\n\tif (sample.columnbars) {\n\t\tfor (const b of sample.columnbars) {\n\t\t\tb.attr('fill', coverbarcolor_active)\n\t\t}\n\t}\n}\n\nexport function multi_sample_removehighlight(sample) {\n\tif (!sample) return\n\t// one of tk.samplegroup[].sample[]\n\tif (sample.svglabel) sample.svglabel.attr('fill', coverbarcolor_silent)\n\tif (sample.blockbg) sample.blockbg.attr('fill-opacity', 0)\n\tif (sample.columnbars) {\n\t\tfor (const b of sample.columnbars) {\n\t\t\tb.attr('fill', coverbarcolor_silent)\n\t\t}\n\t}\n}\n\nfunction render_multi_cnvloh_stackeachsample(tk, block) {\n\t/*\n\tcalled by render_multi_cnvloh()\n\tfor each sample, set .height\n\tfor each stackable item (cnv/loh/itd), set .stack_y, .stack_h\n\n\tfor vcf/fusion/sv, check if can show label for each\n\t*/\n\tif (!tk.samplegroups || tk.samplegroups.length == 0) return\n\n\tif (tk.isdense) {\n\t\t// no stacking in dense mode, itd won't go into .items[]\n\t\tfor (const g of tk.samplegroups) {\n\t\t\tfor (const s of g.samples) {\n\t\t\t\ts.height = 1 // hardcoded\n\t\t\t\tfor (const i of s.items) {\n\t\t\t\t\tif (i.dt == common.dtcnv || i.dt == common.dtloh || i.dt == common.dtitd) {\n\t\t\t\t\t\ti.stack_y = 0\n\t\t\t\t\t\ti.stack_h = 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\t/*\n\tbefore commencing, delete prior label-drawing flags from vcf sampleobj\n\tthis can happen when toggling label show/hide without reloading data\n\t*/\n\tfor (const g of tk.samplegroups) {\n\t\tfor (const s of g.samples) {\n\t\t\tfor (const i of s.items) {\n\t\t\t\tif (i.dt == common.dtsv || i.dt == common.dtfusionrna) {\n\t\t\t\t\tdelete i.labonleft\n\t\t\t\t\tdelete i.labonright\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (tk.data_vcf) {\n\t\tfor (const m of tk.data_vcf) {\n\t\t\tif (m.sampledata) {\n\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\tif (s.sampleobj) {\n\t\t\t\t\t\tdelete s.sampleobj.labonleft\n\t\t\t\t\t\tdelete s.sampleobj.labonright\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// full width\n\tconst blockwidth = block.width + block.subpanels.reduce((i, j) => i + j.leftpad + j.width, 0)\n\n\t// full mode\n\tfor (const g of tk.samplegroups) {\n\t\tfor (const s of g.samples) {\n\t\t\t// for this sample, gather stackable items\n\t\t\tconst items = []\n\t\t\tfor (const i of s.items) {\n\t\t\t\tif (i.dt == common.dtcnv || i.dt == common.dtloh || i.dt == common.dtitd) {\n\t\t\t\t\tif (i.x1 != undefined && i.x2 != undefined) {\n\t\t\t\t\t\ti._boxstart = Math.min(i.x1, i.x2)\n\t\t\t\t\t\ti._boxwidth = Math.abs(i.x2 - i.x1)\n\t\t\t\t\t\titems.push(i)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdostack(s, items)\n\n\t\t\ts.crossboxw = Math.min(8, s.height) // determines label font size\n\n\t\t\t// after stacking, decide if to draw label for pointy items\n\n\t\t\t/*\n\t\t\tcollect pointy items of this sample, sv/fusion/snv\n\t\t\tmust collect all, even if its name is hidden or doesn't have a name, in order for collision detection to work\n\t\t\t*/\n\t\t\tconst pointitems = []\n\n\t\t\tfor (const i of s.items) {\n\t\t\t\tif (i.dt == common.dtfusionrna) {\n\t\t\t\t\tif (i.x == undefined) continue\n\t\t\t\t\tconst item = {\n\t\t\t\t\t\tdt: i.dt,\n\t\t\t\t\t\tx: i.x,\n\t\t\t\t\t\tobj: i\n\t\t\t\t\t}\n\t\t\t\t\tif (tk.multihidelabel_fusion) {\n\t\t\t\t\t\t// no show\n\t\t\t\t\t} else {\n\t\t\t\t\t\titem.name = itemname_svfusion(i)\n\t\t\t\t\t}\n\t\t\t\t\tpointitems.push(item)\n\t\t\t\t} else if (i.dt == common.dtsv) {\n\t\t\t\t\tif (i.x == undefined) continue\n\t\t\t\t\tconst item = {\n\t\t\t\t\t\tdt: i.dt,\n\t\t\t\t\t\tx: i.x,\n\t\t\t\t\t\tobj: i\n\t\t\t\t\t}\n\t\t\t\t\tif (tk.multihidelabel_sv) {\n\t\t\t\t\t\t// no show\n\t\t\t\t\t} else {\n\t\t\t\t\t\titem.name = itemname_svfusion(i)\n\t\t\t\t\t}\n\t\t\t\t\tpointitems.push(item)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tk.data_vcf) {\n\t\t\t\t// collect vcf items for this sample\n\t\t\t\tfor (const m of tk.data_vcf) {\n\t\t\t\t\tif (m.dt != common.dtsnvindel || m.x == undefined || !m.sampledata) continue\n\t\t\t\t\tconst m_sample = m.sampledata.find(i => i.sampleobj.name == s.samplename)\n\t\t\t\t\tif (m_sample) {\n\t\t\t\t\t\tconst item = {\n\t\t\t\t\t\t\tdt: m.dt,\n\t\t\t\t\t\t\tx: m.x,\n\t\t\t\t\t\t\tobj: m_sample.sampleobj\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tk.multihidelabel_vcf) {\n\t\t\t\t\t\t\t// no show\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.name = m.mname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpointitems.push(item)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pointitems.length > 0) {\n\t\t\t\tpointitems.sort((i, j) => i.x - j.x)\n\n\t\t\t\tfor (let pidx = 0; pidx < pointitems.length; pidx++) {\n\t\t\t\t\t/*\n\t\t\t\t\tdt, x, name, obj\n\t\t\t\t\tfor each item, decide if/where to show label\n\t\t\t\t\t*/\n\n\t\t\t\t\tconst pi = pointitems[pidx]\n\n\t\t\t\t\tif (!pi.name) {\n\t\t\t\t\t\t// no name\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tlet labw\n\t\t\t\t\ttk.g\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(pi.name)\n\t\t\t\t\t\t.attr('font-size', s.crossboxw + 2)\n\t\t\t\t\t\t.attr('font-family', client.font)\n\t\t\t\t\t\t.each(function () {\n\t\t\t\t\t\t\tlabw = this.getBBox().width\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.remove()\n\n\t\t\t\t\tlabw += s.crossboxw / 2 + labelspace\n\n\t\t\t\t\tlet nleft = false,\n\t\t\t\t\t\tnright = false\n\n\t\t\t\t\tif (labw > pi.x) {\n\t\t\t\t\t\t// no space on left\n\t\t\t\t\t\tnleft = true\n\t\t\t\t\t} else if (labw > blockwidth - pi.x) {\n\t\t\t\t\t\t// no space on right\n\t\t\t\t\t\tnright = true\n\t\t\t\t\t}\n\n\t\t\t\t\t// test segment items\n\t\t\t\t\tfor (const i of s.items) {\n\t\t\t\t\t\tif (nleft && nright) break\n\n\t\t\t\t\t\tif (i.dt == common.dtcnv || i.dt == common.dtloh || i.dt == common.dtitd) {\n\t\t\t\t\t\t\tif (i.x1 == undefined || i.x2 == undefined) continue\n\t\t\t\t\t\t\tconst x1 = Math.min(i.x1, i.x2)\n\t\t\t\t\t\t\tconst x2 = Math.max(i.x1, i.x2)\n\n\t\t\t\t\t\t\tif (x1 < pi.x) {\n\t\t\t\t\t\t\t\tif (x2 < pi.x) {\n\t\t\t\t\t\t\t\t\tif (labw > pi.x - x2) {\n\t\t\t\t\t\t\t\t\t\tnleft = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnleft = true\n\t\t\t\t\t\t\t\t\tnright = true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (labw > x1 - pi.x) {\n\t\t\t\t\t\t\t\t\tnright = true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nleft && nright) {\n\t\t\t\t\t\t// cannot show label\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!nleft) {\n\t\t\t\t\t\t// check previous item for putting label on left\n\t\t\t\t\t\tfor (let pidx2 = pidx - 1; pidx2 >= 0; pidx2--) {\n\t\t\t\t\t\t\tconst pi0 = pointitems[pidx2]\n\t\t\t\t\t\t\tif (pi0.x == pi.x) {\n\t\t\t\t\t\t\t\t// possible, avoid label overlap\n\t\t\t\t\t\t\t\tif (pi0.obj.labonleft) {\n\t\t\t\t\t\t\t\t\tnleft = true\n\t\t\t\t\t\t\t\t} else if (pi0.obj.labonright) {\n\t\t\t\t\t\t\t\t\tnright = true\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// do not prohibit\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (labw > pi.x - pi0.x - (pi0.obj.labonright ? pi0.obj.labelwidth : 0)) {\n\t\t\t\t\t\t\t\t\tnleft = true\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// good space\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nleft && nright) continue\n\n\t\t\t\t\tif (!nright) {\n\t\t\t\t\t\t// check rest of items for putting label on right\n\t\t\t\t\t\tfor (let pidx2 = pidx + 1; pidx2 < pointitems.length; pidx2++) {\n\t\t\t\t\t\t\tconst pi2 = pointitems[pidx2]\n\n\t\t\t\t\t\t\tif (pi2.x == pi.x) {\n\t\t\t\t\t\t\t\t// do not prohibit\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (labw > pi2.x - pi.x) {\n\t\t\t\t\t\t\t\t\tnright = true\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// allow label on right\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nleft && nright) continue\n\n\t\t\t\t\tif (nleft) {\n\t\t\t\t\t\tif (!nright) {\n\t\t\t\t\t\t\tpi.obj.labonright = true\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (nright) {\n\t\t\t\t\t\t\tpi.obj.labonleft = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpi.obj.labonright = true // on right first\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (pi.obj.labonleft || pi.obj.labonright) {\n\t\t\t\t\t\tpi.obj.labelwidth = labw\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function itemname_svfusion(i) {\n\tif (i.cytogeneticname) return i.cytogeneticname\n\treturn (i.geneA || i.chrA) + ' > ' + (i.geneB || i.chrB)\n}\n\nfunction dostack(sample, items) {\n\t// set sample.height\n\n\tif (items.length == 0) {\n\t\t// this sample has no stackable item, but it must have other pointy items\n\t\t// still set height\n\t\tsample.height = 8\n\t\treturn\n\t}\n\n\t// stack\n\n\titems.sort((i, j) => i._boxstart - j._boxstart)\n\n\tconst stacks = []\n\tfor (const m of items) {\n\t\tfor (let i = 0; i < stacks.length; i++) {\n\t\t\tif (stacks[i] < m._boxstart) {\n\t\t\t\tm._stacki = i\n\t\t\t\tstacks[i] = m._boxstart + m._boxwidth\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (m._stacki == undefined) {\n\t\t\tm._stacki = stacks.length\n\t\t\tstacks.push(m._boxstart + m._boxwidth)\n\t\t}\n\t}\n\n\tlet stackheight = stackheightscale(stacks.length)\n\tif (stackheight < 1) {\n\t\t// simpleminded scaling can make it negative\n\t\tstackheight = 1\n\t}\n\n\t// no spacing between stacks!!\n\n\tfor (const i of items) {\n\t\ti.stack_y = i._stacki * stackheight\n\t\ti.stack_h = stackheight\n\t\tdelete i._stacki\n\t\tdelete i._boxstart\n\t\tdelete i._boxwidth\n\t}\n\n\tsample.height = stackheight * stacks.length\n}\n\nexport function multi_expressionstatus_ase_outlier(tk) {\n\t/*\n\tmulti-sample\n\tfor all genes\n\tcalculate expression status including ase and outlier, using Yu's data & method\n\tonly do this when getting new data, or changing cutoffs\n\n\tshould process _data, since in dense mode, .samplegroups[] will not contain sv-only samples\n\t*/\n\t//if(!tk.samplegroups) return\n\tif (!tk._data) return\n\tif (!tk.gecfg) return\n\tif (tk.gecfg.no_ase) return\n\tfor (const g of tk._data) {\n\t\tif (!g.samples) continue\n\t\tfor (const s of g.samples) {\n\t\t\tif (!s.expressionrank) continue\n\t\t\tfor (const gene in s.expressionrank) {\n\t\t\t\tconst v = s.expressionrank[gene]\n\t\t\t\texpressionstat.measure(v, tk.gecfg)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function draw_colorscale_cnv(tk) {\n\ttk.cnvcolor.cnvlegend.row.style('display', 'table-row')\n\tclient.axisstyle({\n\t\taxis: tk.cnvcolor.cnvlegend.axisg.call(\n\t\t\taxisTop()\n\t\t\t\t.scale(\n\t\t\t\t\tscaleLinear()\n\t\t\t\t\t\t.domain([-tk.cnvcolor.cnvmax, 0, tk.cnvcolor.cnvmax])\n\t\t\t\t\t\t.range([0, tk.cnvcolor.cnvlegend.barw, tk.cnvcolor.cnvlegend.barw * 2])\n\t\t\t\t)\n\t\t\t\t.tickValues([-tk.cnvcolor.cnvmax, 0, tk.cnvcolor.cnvmax])\n\t\t\t\t.tickSize(tk.cnvcolor.cnvlegend.axistickh)\n\t\t)\n\t})\n}\n\nexport function draw_colorscale_loh(tk) {\n\tif (!tk.cnvcolor.lohlegend) return\n\n\ttk.cnvcolor.lohlegend.row.style('display', 'table-row')\n\tclient.axisstyle({\n\t\taxis: tk.cnvcolor.lohlegend.axisg.call(\n\t\t\taxisTop()\n\t\t\t\t.scale(scaleLinear().domain([0, tk.cnvcolor.segmeanmax]).range([0, tk.cnvcolor.lohlegend.barw]))\n\t\t\t\t.tickValues([0, tk.cnvcolor.segmeanmax])\n\t\t\t\t.tickSize(tk.cnvcolor.lohlegend.axistickh)\n\t\t)\n\t})\n}\n\nexport async function focus_singlesample(p) {\n\t/*\n\tmulti-sample\n\tnative or custom\n\tlaunch a new block instance, show sv-cnv-vcf-expression track in single-sample mode,\n\tview range determined by cnv or sv\n\tif vcf, will use block view range\n\n\t.m\n\t.sample\n\t\t.samplename\n\t\t.sampletype\n\t.samplegroup\n\t\t.attributes[]\n\t.tk\n\t.block\n\t*/\n\n\tconst { m, sample, samplegroup, tk, block } = p\n\n\tlet holder\n\n\tif (p.holder) {\n\t\tholder = p.holder\n\t} else {\n\t\tconst pane = client.newpane({ x: 100, y: 100 })\n\t\tholder = pane.body\n\t}\n\n\tconst assaytkbuttondiv = holder.append('div')\n\n\t// for launching block\n\tconst arg = {\n\t\tstyle: {\n\t\t\tmargin: '0px'\n\t\t},\n\n\t\t// this is to hide green button in sub block\n\t\t//hide_mdsHandleHolder:1,\n\n\t\ttklst: [],\n\t\tholder,\n\t\tsubpanels: []\n\t}\n\n\tclient.first_genetrack_tolist(block.genome, arg.tklst)\n\n\t// should also root out error when showing that\n\n\t// expression rank\n\tif (tk.iscustom) {\n\t\tif (tk.checkexpressionrank) {\n\t\t\tconst et = {\n\t\t\t\ttype: client.tkt.mdsexpressionrank,\n\t\t\t\tname: sample.samplename + ' expression rank',\n\t\t\t\tsample: sample.samplename,\n\t\t\t\tiscustom: 1\n\t\t\t}\n\t\t\tfor (const k in tk.checkexpressionrank) {\n\t\t\t\tet[k] = tk.checkexpressionrank[k]\n\t\t\t}\n\t\t\targ.tklst.push(et)\n\t\t}\n\t\t// other assay tracks\n\t\tif (tk.sample2assaytrack && tk.sample2assaytrack[sample.samplename]) {\n\t\t\tfor (const t of tk.sample2assaytrack[sample.samplename]) {\n\t\t\t\targ.tklst.push(t)\n\t\t\t}\n\t\t}\n\t} else if (tk.mds && tk.mds.queries[tk.querykey].checkexpressionrank) {\n\t\t// official mds\n\n\t\tif (samplegroup) {\n\t\t\tconst et = {\n\t\t\t\ttype: client.tkt.mdsexpressionrank,\n\t\t\t\tname: sample.samplename + ' expression rank',\n\t\t\t\tdslabel: tk.mds.label,\n\t\t\t\tquerykey: tk.mds.queries[tk.querykey].checkexpressionrank.querykey,\n\t\t\t\tsample: sample.samplename,\n\t\t\t\tattributes: samplegroup.attributes\n\t\t\t}\n\t\t\targ.tklst.push(et)\n\t\t} else {\n\t\t\t// in dense mode, vcf samples may not have group\n\t\t}\n\t}\n\n\t// add sv-cnv-vcf track in single-sample mode\n\tconst t2 = {\n\t\tbplengthUpperLimit: 0, // sample view to show all cnvs by default, not just focal\n\t\tvalueCutoff: tk.valueCutoff,\n\t\tlohLengthUpperLimit: tk.lohLengthUpperLimit,\n\t\tsegmeanValueCutoff: tk.segmeanValueCutoff,\n\t\tsinglesample: {\n\t\t\tname: sample.samplename\n\t\t}\n\t}\n\tif (tk.iscustom) {\n\t\tt2.type = client.tkt.mdssvcnv\n\t\tt2.file = tk.file\n\t\tt2.url = tk.url\n\t\tt2.indexURL = tk.indexURL\n\t\tt2.iscustom = true\n\t\tt2.legend_vorigin = tk.legend_vorigin\n\t} else {\n\t\t// official\n\t\tt2.mds = tk.mds\n\t\tt2.querykey = tk.querykey\n\t\tfor (const k in tk.mds.queries[tk.querykey]) {\n\t\t\tif (k == 'bplengthUpperLimit' || k == 'valueCutoff') {\n\t\t\t\t// do not use default\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt2[k] = tk.mds.queries[tk.querykey][k]\n\t\t}\n\t}\n\n\t// custom vcf track to be declared in t2\n\tif (tk.iscustom && tk.checkvcf) {\n\t\tt2.checkvcf = tk.checkvcf\n\t}\n\n\targ.tklst.push(t2)\n\n\tif (m) {\n\t\tif (m.dt == common.dtcnv || m.dt == common.dtloh) {\n\t\t\tconst span = Math.ceil((m.stop - m.start) / 2)\n\t\t\targ.chr = m.chr\n\t\t\targ.start = Math.max(0, m.start - span)\n\t\t\targ.stop = Math.min(block.genome.chrlookup[m.chr.toUpperCase()].len, m.stop + span)\n\t\t} else if (m.dt == common.dtsv || m.dt == common.dtfusionrna) {\n\t\t\tif (m.chrA == m.chrB) {\n\t\t\t\tconst span = Math.ceil(Math.abs(m.posA - m.posB) / 4)\n\t\t\t\targ.chr = m.chrA\n\t\t\t\targ.start = Math.max(0, Math.min(m.posA, m.posB) - span)\n\t\t\t\targ.stop = Math.min(block.genome.chrlookup[m.chrA.toUpperCase()].len, Math.max(m.posA, m.posB) + span)\n\t\t\t} else {\n\t\t\t\tconst span = 10000\n\t\t\t\targ.chr = m.chrA\n\t\t\t\targ.start = Math.max(0, m.posA - span)\n\t\t\t\targ.stop = Math.min(block.genome.chrlookup[m.chrA.toUpperCase()].len, m.posA + span)\n\t\t\t\targ.subpanels.push({\n\t\t\t\t\tchr: m.chrB,\n\t\t\t\t\tstart: Math.max(0, m.posB - span),\n\t\t\t\t\tstop: Math.min(block.genome.chrlookup[m.chrB.toUpperCase()].len, m.posB + span),\n\t\t\t\t\twidth: 600,\n\t\t\t\t\tleftpad: 10,\n\t\t\t\t\tleftborder: 'rgba(50,50,50,.1)'\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!arg.chr) {\n\t\t// no view range set\n\t\tconst r = block.tkarg_maygm(tk)[0]\n\n\t\tif (m && m.dt == common.dtsnvindel) {\n\t\t\t// is snvindel\n\n\t\t\tconst span = 10000 // hardcoded\n\n\t\t\tif (span < r.stop - r.start) {\n\t\t\t\t// current view range is bigger than span, use span\n\t\t\t\targ.chr = m.chr\n\t\t\t\targ.start = Math.max(0, m.pos - span)\n\t\t\t\targ.stop = Math.min(block.genome.chrlookup[m.chr.toUpperCase()].len, m.pos + span)\n\t\t\t}\n\t\t}\n\n\t\tif (!arg.chr) {\n\t\t\t// is not snvindel\n\n\t\t\targ.chr = r.chr\n\t\t\targ.start = r.start\n\t\t\targ.stop = r.stop\n\t\t}\n\t}\n\n\tlet assaytklst\n\n\tif (!tk.iscustom) {\n\t\t// official track\n\t\t// get sample-level track from serverside dataset config\n\t\tconst data = await client.dofetch2('mdssvcnv', {\n\t\t\tmethod: 'POST',\n\t\t\tbody: JSON.stringify({\n\t\t\t\tgenome: block.genome.name,\n\t\t\t\tdslabel: tk.mds.label,\n\t\t\t\tquerykey: tk.querykey,\n\t\t\t\tgettrack4singlesample: sample.samplename\n\t\t\t})\n\t\t})\n\t\tif (data.error) throw data.error\n\t\tif (data.tracks) {\n\t\t\t// important: must duplicate as block init will erase the .hidden tag\n\t\t\tassaytklst = data.tracks\n\t\t\tfor (const t of data.tracks) {\n\t\t\t\targ.tklst.push(JSON.parse(JSON.stringify(t)))\n\t\t\t}\n\t\t}\n\t}\n\tconst bb = block.newblock(arg)\n\n\tif (m) {\n\t\tif (m.dt == common.dtcnv || m.dt == common.dtloh) {\n\t\t\tbb.addhlregion(m.chr, m.start, m.stop, cnvhighlightcolor)\n\t\t}\n\t}\n\tif (assaytklst) {\n\t\t// display buttons for toggling each assay track\n\t\tassaytkbuttondiv\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('margin', '0px 10px 20px 10px')\n\t\t\t.append('div')\n\t\t\t.style('margin-bottom', '3px')\n\t\t\t.text('Show/hide available assay tracks for ' + sample.samplename)\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('opacity', 0.5)\n\t\tconst d = assaytkbuttondiv.append('div').style('border', 'solid 1px #ccc').style('border-radius', '7px')\n\t\tfor (const t of assaytklst) {\n\t\t\tconst label = d\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('white-space', 'nowrap')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.append('label')\n\t\t\tlabel\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t.style('margin-right', '3px')\n\t\t\t\t.property('checked', !t.hidden)\n\t\t\t\t.on('change', event => {\n\t\t\t\t\tif (event.target.checked) {\n\t\t\t\t\t\tbb.turnOnTrack(t)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbb.turnOffTrack(t)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\tlabel.append('span').text(t.name)\n\t\t}\n\t}\n}\n\nfunction prep_samplegroups(tk, block) {\n\t/*\n\tmulti-sample\n\tfrom tk._data, prepare samplegroups for plotting\n\tmap sv/cnv/loh/itd to view range, exclude unmappable items\n\t*/\n\n\tif (!tk._data) {\n\t\t// could be that all dt are hidden\n\t\treturn [[], []]\n\t}\n\n\tconst svlst4dense = []\n\n\tlet plotgroups = []\n\n\tfor (const samplegroup of tk._data) {\n\t\tconst g2 = {}\n\t\tfor (const k in samplegroup) g2[k] = samplegroup[k]\n\t\tg2.samples = []\n\n\t\tfor (const sample of samplegroup.samples) {\n\t\t\tconst s2 = {}\n\t\t\tfor (const k in sample) s2[k] = sample[k]\n\t\t\ts2.items = []\n\n\t\t\tfor (const item of sample.items) {\n\t\t\t\tif (item.dt == common.dtsv || item.dt == common.dtfusionrna) {\n\t\t\t\t\t// sv\n\t\t\t\t\tmap_sv_2(item, block)\n\t\t\t\t\tif (item.x == undefined) {\n\t\t\t\t\t\tconsole.log('unmappable sv: ' + item._chr + ' ' + item._pos)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item.chrA != item._chr) {\n\t\t\t\t\t\ttk.legend_svchrcolor.interchrs.add(item.chrA)\n\t\t\t\t\t\ttk.legend_svchrcolor.colorfunc(item.chrA)\n\t\t\t\t\t}\n\t\t\t\t\tif (item.chrB != item._chr) {\n\t\t\t\t\t\ttk.legend_svchrcolor.interchrs.add(item.chrB)\n\t\t\t\t\t\ttk.legend_svchrcolor.colorfunc(item.chrB)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tk.isdense) {\n\t\t\t\t\t\tconst i = {\n\t\t\t\t\t\t\t_samplegroup: samplegroup,\n\t\t\t\t\t\t\t_sample: sample\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const k in item) {\n\t\t\t\t\t\t\ti[k] = item[k]\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsvlst4dense.push(i)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\t// not dense\n\t\t\t\t\ts2.items.push(item)\n\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// cnv, loh, itd\n\t\t\t\tmap_cnv(item, tk, block)\n\t\t\t\tif (item.x1 == undefined || item.x2 == undefined) {\n\t\t\t\t\tconsole.log('unmappable stack item: ', item)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ts2.items.push(item)\n\t\t\t}\n\n\t\t\tif (s2.items.length == 0) {\n\t\t\t\t/*\n\t\t\t\tno cnv/sv/loh for this sample, may drop it\n\t\t\t\thowever if vcf is in full mode, must check if this sample has vcf data\n\t\t\t\tsince vcf data is not bundled in items[]\n\t\t\t\t*/\n\t\t\t\tif (tk.isfull && tk.data_vcf) {\n\t\t\t\t\tlet samplehasvcf = false\n\n\t\t\t\t\tfor (const m of tk.data_vcf) {\n\t\t\t\t\t\tif (samplehasvcf) break\n\t\t\t\t\t\tif (m.x == undefined) continue\n\n\t\t\t\t\t\tif (m.dt == common.dtsnvindel) {\n\t\t\t\t\t\t\tif (!m.sampledata) continue\n\t\t\t\t\t\t\tfor (const s of m.sampledata) {\n\t\t\t\t\t\t\t\tif (s.sampleobj.name == sample.samplename) {\n\t\t\t\t\t\t\t\t\tsamplehasvcf = true\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!samplehasvcf) {\n\t\t\t\t\t\t// this sample has no vcf either\n\t\t\t\t\t\tif (if_getallsamples(tk)) {\n\t\t\t\t\t\t\t// QUICK FIX!!!!\n\t\t\t\t\t\t\t// when this is set, will keep samples with empty .items[]\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontinue\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 (if_getallsamples(tk)) {\n\t\t\t\t\t\t// QUICK FIX!!!!\n\t\t\t\t\t\t// when this is set, will keep samples with empty .items[]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tg2.samples.push(s2)\n\t\t}\n\t\tif (g2.samples.length == 0) continue\n\n\t\t// only for tal1 figure\n\t\t//maysortsamplesingroupbydt(g2)\n\n\t\tplotgroups.push(g2)\n\t}\n\n\tif (tk.groupsamplebyattr) {\n\t\tconst sortgroupby = tk.groupsamplebyattr.sortgroupby\n\t\tif (sortgroupby && sortgroupby.key && sortgroupby.order) {\n\t\t\t// sort groups, may be available for official track\n\t\t\tconst lst = []\n\t\t\tfor (const value of sortgroupby.order) {\n\t\t\t\tfor (const g of plotgroups) {\n\t\t\t\t\tif (!g.attributes) continue\n\t\t\t\t\tfor (const at of g.attributes) {\n\t\t\t\t\t\tif (at.k == sortgroupby.key && at.kvalue == value) {\n\t\t\t\t\t\t\t// is one\n\t\t\t\t\t\t\tg._sorted = 1\n\t\t\t\t\t\t\tlst.push(g)\n\t\t\t\t\t\t\tbreak\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\tfor (const g of plotgroups) {\n\t\t\t\tif (!g._sorted) lst.push(g)\n\t\t\t}\n\t\t\tfor (const g of lst) delete g._sorted\n\t\t\tplotgroups = lst\n\t\t}\n\t}\n\tif (tk.sampleset) {\n\t\t//sort plotgroups in same order as tk.sampleset\n\t\tconst sortOrder = tk.sampleset.map(i => i.name)\n\t\tplotgroups.sort((a, b) => {\n\t\t\tif (sortOrder.indexOf(a.name) > sortOrder.indexOf(b.name)) return 1\n\t\t\telse return -1\n\t\t})\n\t\t// for each group, sort samples by the order given\n\t\tfor (const sampleset of tk.sampleset) {\n\t\t\tconst plotgroup = plotgroups.find(pg => pg.name == sampleset.name)\n\t\t\tif (!plotgroup || !plotgroup.samples) continue\n\t\t\tconst foundsamples = []\n\t\t\tfor (const name of sampleset.samples) {\n\t\t\t\tconst s = plotgroup.samples.find(j => j.samplename == name)\n\t\t\t\tif (s) {\n\t\t\t\t\tfoundsamples.push(s)\n\t\t\t\t}\n\t\t\t}\n\t\t\tplotgroup.samples = foundsamples\n\t\t}\n\t}\n\treturn [plotgroups, svlst4dense]\n}\n\nfunction if_getallsamples(tk) {\n\t// QUICK FIX\n\tif (!tk.getallsamples) return false\n\tif (tk.iscustom) return true\n\tif (tk.mds && tk.mds.allow_getallsamples) return true\n\treturn false\n}\n\nfunction maysortsamplesingroupbydt(g) {\n\t/*\n\ttemporary, only for making tal1 figure\n\tby default samples are ordered by the first genomic position of their mutations\n\n\targ: a group with .samples[ {} ]\n\t*/\n\tconst cnv = []\n\tconst fusioninter = []\n\tconst fusionintra = []\n\tconst rest = []\n\tfor (const s of g.samples) {\n\t\tif (s.items.find(m => m.dt == common.dtcnv && m.start < 47720000 && m.stop > 47720000)) {\n\t\t\t// skip tiny cnvs not overlapping with stil promoter\n\t\t\tcnv.push(s)\n\t\t\tcontinue\n\t\t}\n\t\t{\n\t\t\tconst m = s.items.find(m => m.dt == common.dtfusionrna || m.dt == common.dtsv)\n\t\t\tif (m) {\n\t\t\t\tif (m.chrA == m.chrB) {\n\t\t\t\t\t// intra-chr\n\t\t\t\t\tif (m.posA < 48000000 && m.posB < 48000000) {\n\t\t\t\t\t\tcnv.push(s)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfusionintra.push(s)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// inter-chr\n\t\t\t\t\tfusioninter.push(s)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\trest.push(s)\n\t}\n\n\tg.samples = [...cnv, ...fusionintra, ...fusioninter, ...rest]\n}\n\n////////////////////// __multi ends\n\n///////////// __maketk\n\nfunction copy_attributes(from, to) {\n\t// from mds.mutationAttribute to tk.mutationAttribute\n\tfor (const k in from) {\n\t\tto[k] = from[k]\n\t}\n\tif (from.attributes) {\n\t\tto.attributes = {}\n\t\tfor (const m in from.attributes) {\n\t\t\tto.attributes[m] = {}\n\t\t\tfor (const n in from.attributes[m]) {\n\t\t\t\tto.attributes[m][n] = from.attributes[m][n]\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction makeTk(tk, block) {\n\t/*\nfor both multi- and single-sample\n*/\n\n\tif (tk.mds) {\n\t\t/*\n\t\tin ds.js, these attributes belong to mds, but not the svcnv query track,\n\t\tmeant to be applied to all tracks of this mds\n\t\tpreviously, on client, these two attributes were recorded on the svcnv track object\n\t\tnow they reside in the mds registry object of genome\n\t\thowever, they are still copied to tk object so that all the code will work!!\n\n\t\ttk.mutationAttribute = tk.mds.mutationAttribute\n\t\ttk.sampleAttribute = tk.mds.sampleAttribute\n\t\ttk.locusAttribute = tk.mds.locusAttribute\n\t\ttk.alleleAttribute = tk.mds.alleleAttribute\n\t\t*/\n\n\t\tif (tk.mds.mutationAttribute) {\n\t\t\ttk.mutationAttribute = {}\n\t\t\tcopy_attributes(tk.mds.mutationAttribute, tk.mutationAttribute)\n\t\t}\n\t\tif (tk.mds.sampleAttribute) {\n\t\t\ttk.sampleAttribute = {}\n\t\t\tcopy_attributes(tk.mds.sampleAttribute, tk.sampleAttribute)\n\t\t}\n\t\tif (tk.mds.locusAttribute) {\n\t\t\ttk.locusAttribute = {}\n\t\t\tcopy_attributes(tk.mds.locusAttribute, tk.locusAttribute)\n\t\t}\n\t\tif (tk.mds.alleleAttribute) {\n\t\t\ttk.alleleAttribute = {}\n\t\t\tcopy_attributes(tk.mds.alleleAttribute, tk.alleleAttribute)\n\t\t}\n\n\t\ttk.nocnvlohsv = true\n\t\ttk.isdense = true\n\t\ttk.isfull = false\n\t\tif (tk.mds.queries) {\n\t\t\tfor (const k in tk.mds.queries) {\n\t\t\t\tconst t = tk.mds.queries[k]\n\t\t\t\tif (t.type == common.tkt.mdssvcnv) {\n\t\t\t\t\t// mds has a svcnv track\n\t\t\t\t\tdelete tk.nocnvlohsv\n\t\t\t\t\tif (t.isfull) {\n\t\t\t\t\t\ttk.isfull = true\n\t\t\t\t\t\ttk.isdense = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (tk.iscustom) {\n\t\tif (!tk.file && !tk.url) {\n\t\t\t// custom track without svcnv file\n\t\t\t// do not show legend and config for cnv loh sv fusion\n\t\t\ttk.nocnvlohsv = true\n\t\t}\n\t}\n\n\t/*\n\tmust do this first\n\tit may set singlesample{} as is defined in datasetqueries of embedding call\n\t*/\n\tapply_customization_oninit(tk, block)\n\n\tif (tk.singlesample) {\n\t\t// single-sample\n\n\t\ttk.waterfall = {\n\t\t\tinuse: false,\n\t\t\taxisheight: 100,\n\t\t\tbottompad: 10,\n\t\t\taxisgg: tk.gleft.append('g')\n\t\t}\n\t\tif (tk.singlesample.waterfall) {\n\t\t\t// default setting sneaked in from embedding call\n\t\t\ttk.waterfall.inuse = tk.singlesample.waterfall.inuse\n\t\t}\n\n\t\ttk.waterfall.axisg = tk.waterfall.axisgg.append('g')\n\t\ttk.waterfall.lab1 = tk.waterfall.axisgg\n\t\t\t.append('text')\n\t\t\t.attr('font-size', 13)\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.attr('x', -10)\n\t\ttk.waterfall.lab2 = tk.waterfall.axisgg\n\t\t\t.append('text')\n\t\t\t.attr('font-size', 13)\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.attr('x', -10)\n\t\ttk.waterfall.lab3 = tk.waterfall.axisgg\n\t\t\t.append('text')\n\t\t\t.attr('font-size', 13)\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.attr('x', -10)\n\t} else {\n\t\t// in multi-sample\n\n\t\ttk.samplematrices = []\n\n\t\t// allow hidding some labels\n\t\t// do not override config from native dataset\n\t\tif (tk.multihidelabel_vcf == undefined) {\n\t\t\ttk.multihidelabel_vcf = true\n\t\t}\n\t\tif (tk.multihidelabel_fusion == undefined) {\n\t\t\ttk.multihidelabel_fusion = true\n\t\t}\n\t\tif (tk.multihidelabel_sv == undefined) {\n\t\t\ttk.multihidelabel_sv = true\n\t\t}\n\t}\n\n\t// if not set, will set default mode here\n\tif (!tk.singlesample && !tk.isdense && !tk.isfull) {\n\t\tif (tk.iscustom) {\n\t\t\ttk.isdense = false\n\t\t\ttk.isfull = true\n\t\t} else {\n\t\t\ttk.isdense = true\n\t\t\ttk.isfull = false\n\t\t\tif (tk.showfullmode) {\n\t\t\t\ttk.isdense = false\n\t\t\t\ttk.isfull = true\n\t\t\t}\n\t\t}\n\t}\n\n\ttk.tip2 = new client.Menu({ padding: '0px' })\n\n\tif (tk.singlesample) {\n\t\t// set default values\n\t\tif (!tk.midpad) tk.midpad = 3\n\t\tif (!tk.stem1) {\n\t\t\ttk.stem1 = 10\n\t\t\ttk.stem2 = 0\n\t\t\ttk.stem3 = 5\n\t\t}\n\t\tif (!tk.legheight) tk.legheight = 40\n\t\tif (!tk.discradius) tk.discradius = 8\n\t\tif (!tk.valueCutoff) tk.valueCutoff = 0.2\n\t\t// length limit could be 0\n\t\tif (!Number.isInteger(tk.bplengthUpperLimit)) tk.bplengthUpperLimit = 2000000\n\t\tif (!Number.isInteger(tk.lohLengthUpperLimit)) tk.lohLengthUpperLimit = 2000000\n\t\tif (!tk.segmeanValueCutoff) tk.segmeanValueCutoff = 0.1\n\n\t\tif (tk.fixname) {\n\t\t\ttk.name = tk.fixname\n\t\t\ttk.tklabel.text(tk.name)\n\t\t\tdelete tk.fixname\n\t\t} else {\n\t\t\ttk.tklabel.text((tk.name ? tk.name + ', ' : '') + tk.singlesample.name)\n\t\t}\n\n\t\t// tklabel name updated, must do below\n\t\ttk.leftLabelMaxwidth = tk.tklabel.node().getBBox().width\n\t\tblock.setllabel()\n\n\t\ttk.svvcf_g = tk.glider.append('g') // show sv as lollipops\n\t\ttk.cnv_g = tk.glider.append('g') // show cnv/loh as bed track\n\t} else {\n\t\t// multi-sample\n\t\tif (tk.mds && tk.mds.version && tk.mds.version.label) {\n\t\t\ttk.versionlabel = block.maketklefthandle(tk, block.labelfontsize).text(tk.mds.version.label)\n\t\t\tif (tk.mds.version.link) {\n\t\t\t\ttk.versionlabel.on('click', () => {\n\t\t\t\t\twindow.open(tk.mds.version.link)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\ttk.cnvleftg = tk.gleft.append('g')\n\t\ttk.vcfdensityg = tk.glider.append('g')\n\t\ttk.vcfdensitylabelg = tk.gleft.append('g')\n\t\ttk.svdensityg = tk.glider.append('g')\n\t\ttk.svdensitylabelg = tk.gleft.append('g')\n\t\ttk.cnvmidg = tk.glider.append('g')\n\t\ttk.cnvrightg = tk.gright.append('g')\n\t}\n\n\ttk.cnvcolor = {}\n\t{\n\t\tconst t = d3rgb(tk.gaincolor)\n\t\ttk.cnvcolor.gain = {\n\t\t\tstr: tk.gaincolor,\n\t\t\tr: t.r,\n\t\t\tg: t.g,\n\t\t\tb: t.b\n\t\t}\n\t\tdelete tk.gaincolor\n\t}\n\t{\n\t\tconst t = d3rgb(tk.losscolor)\n\t\ttk.cnvcolor.loss = {\n\t\t\tstr: tk.losscolor,\n\t\t\tr: t.r,\n\t\t\tg: t.g,\n\t\t\tb: t.b\n\t\t}\n\t\tdelete tk.losscolor\n\t}\n\t{\n\t\tconst t = d3rgb(tk.lohcolor)\n\t\ttk.cnvcolor.loh = {\n\t\t\tstr: tk.lohcolor,\n\t\t\tr: t.r,\n\t\t\tg: t.g,\n\t\t\tb: t.b\n\t\t}\n\t\tdelete tk.lohcolor\n\t}\n\n\tif (tk.iscustom) {\n\t\t// default value for naive custom track\n\t\tif (tk.valueCutoff == undefined) tk.valueCutoff = 0.2\n\t\tif (tk.bplengthUpperLimit == undefined) tk.bplengthUpperLimit = 2000000\n\t\tif (tk.segmeanValueCutoff == undefined) tk.segmeanValueCutoff = 0.1\n\t\tif (tk.lohLengthUpperLimit == undefined) tk.lohLengthUpperLimit = 2000000\n\t}\n\n\t// config\n\ttk.config_handle = block.maketkconfighandle(tk).on('click', () => {\n\t\tconfigPanel(tk, block)\n\t})\n\n\tmakeTk_legend(block, tk)\n\n\t// gene expression config\n\t// make sure do not overwrite gecfg from custom setting\n\n\tlet hasexpression = false\n\tif (tk.iscustom) {\n\t\t// custom\n\t\tif (tk.checkexpressionrank) {\n\t\t\thasexpression = true\n\t\t\tif (!tk.gecfg) tk.gecfg = {}\n\t\t\ttk.gecfg.datatype = tk.checkexpressionrank.datatype\n\t\t}\n\t} else {\n\t\t// official\n\t\tif (tk.mds.queries[tk.querykey].checkexpressionrank) {\n\t\t\thasexpression = true\n\t\t\tconst cp = tk.mds.queries[tk.mds.queries[tk.querykey].checkexpressionrank.querykey]\n\t\t\tif (tk.gecfg && tk.gecfg.fixed_pend) {\n\t\t\t\t// copy over custom settings\n\t\t\t\tcp.fixed_pend = tk.gecfg.fixed_pend\n\t\t\t}\n\t\t\ttk.gecfg = cp\n\t\t}\n\t}\n\tif (hasexpression) {\n\t\t/* inherit configs from official tk, if not, rebuild\n\t\tthis can make sure the same configurations are also available under the dataset.queries.genefpkm\n\t\tallowing it to be shared for boxplots etc.\n\t\t*/\n\t\tif (!tk.gecfg) tk.gecfg = {}\n\n\t\tif (!tk.gecfg.fixed) {\n\t\t\t/*\n\t\t\tupon initing multi-sample view, fixed[] is added\n\t\t\twhen launching a single-sample from multi, makeTk will be called again\n\t\t\tsince gecfg is referencing the original object but not a duplicate, must not overwrite fixed[]\n\t\t\tshould really be a duplicate object instead\n\t\t\t*/\n\t\t\ttk.gecfg.fixed = []\n\t\t}\n\n\t\tif (!tk.gecfg.no_ase) {\n\t\t\texpressionstat.init_config(tk.gecfg)\n\t\t}\n\t}\n\n\t// end of makeTk\n}\n\nfunction apply_customization_oninit(tk, block) {\n\t/*\n\tcustomization attr from embedding\n\teither native or custom track\n\tcopy them to attributes\n\twill override some previous settings\n\n\tfor filtering attributes, must do it before initiating legend\n\tbecause novel keys will be added anew\n\t*/\n\n\t// if is custom, the \"customization\" will be tk itself\n\n\tconst c = tk.iscustom ? tk : tk.customization\n\n\tif (!c) return\n\n\tif (c.singlesample) {\n\t\t/*\n\t\tthis method will pop up panel and show all associated tracks, not in use now\n\n\t\tconst s = c.singlesample\n\t\tfocus_singlesample({\n\t\t\tsample: { samplename: s.name },\n\t\t\tsamplegroup: { attributes: s.attributes },\n\t\t\ttk: tk,\n\t\t\tblock: block,\n\t\t})\n\t\t*/\n\n\t\t// for now, simply turn the mds track into single-sample mode\n\t\ttk.singlesample = c.singlesample\n\t} else if (c.sampleset) {\n\t\ttk.sampleset = c.sampleset\n\t}\n\n\t// rest are multi-sample\n\ttk.hide_cnvgain = c.hide_cnvgain\n\ttk.hide_cnvloss = c.hide_cnvloss\n\n\tif (c.isfull) {\n\t\ttk.isdense = false\n\t\ttk.isfull = true\n\t} else if (c.isdense) {\n\t\ttk.isdense = true\n\t\ttk.isfull = false\n\t}\n\n\tif (c.sampleAttribute) {\n\t\tif (!tk.sampleAttribute) tk.sampleAttribute = {}\n\t\tif (!tk.sampleAttribute.attributes) tk.sampleAttribute.attributes = {}\n\t\tfor (const k in c.sampleAttribute) {\n\t\t\tconst cust = c.sampleAttribute[k]\n\t\t\tif (!tk.sampleAttribute.attributes[k]) {\n\t\t\t\t// a customized attribute is not found in registry, allow it\n\t\t\t\ttk.sampleAttribute.attributes[k] = {\n\t\t\t\t\tlabel: k\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst attr = tk.sampleAttribute.attributes[k]\n\t\t\tif (!attr.hiddenvalues) attr.hiddenvalues = new Set()\n\t\t\tif (cust.hiddenvalues) {\n\t\t\t\tfor (const v of cust.hiddenvalues) attr.hiddenvalues.add(v)\n\t\t\t}\n\t\t}\n\t}\n\n\ttk.legend_mclass = {\n\t\thiddenvalues: new Set()\n\t}\n\tif (c.vcf) {\n\t\tif (c.vcf.hiddenclass) {\n\t\t\tfor (const m of c.vcf.hiddenclass) tk.legend_mclass.hiddenvalues.add(m)\n\t\t}\n\t}\n\tif (c.cnv) {\n\t\tif (c.cnv.hidden) tk.legend_mclass.hiddenvalues.add(common.dtcnv)\n\t\tif (Number.isInteger(c.cnv.upperlengthlimit)) tk.bplengthUpperLimit = c.cnv.upperlengthlimit\n\t}\n\tif (c.loh) {\n\t\tif (c.loh.hidden) tk.legend_mclass.hiddenvalues.add(common.dtloh)\n\t\tif (Number.isInteger(c.loh.upperlengthlimit)) tk.lohLengthUpperLimit = c.loh.upperlengthlimit\n\t}\n\tif (c.fusion) {\n\t\tif (c.fusion.hidden) tk.legend_mclass.hiddenvalues.add(common.dtfusionrna)\n\t}\n\tif (c.sv) {\n\t\tif (c.sv.hidden) tk.legend_mclass.hiddenvalues.add(common.dtsv)\n\t}\n\tif (c.itd) {\n\t\tif (c.itd.hidden) tk.legend_mclass.hiddenvalues.add(common.dtitd)\n\t}\n\tif (c.fixedgeneexpression) {\n\t\tif (!tk.gecfg) tk.gecfg = {}\n\t\ttk.gecfg.fixed_pend = c.fixedgeneexpression\n\t}\n}\n\nfunction multi_changemode(tk, block) {\n\ttk.tkconfigtip.hide()\n\tif (tk.mode_radio_1.property('checked')) {\n\t\ttk.isdense = true\n\t\ttk.isfull = false\n\t} else if (tk.mode_radio_2.property('checked')) {\n\t\ttk.isdense = false\n\t\ttk.isfull = true\n\t}\n\n\tif (!tk._data) {\n\t\t// no data\n\t\treturn\n\t}\n\n\trender_samplegroups(tk, block)\n\tblock.block_setheight()\n\tblock.setllabel()\n}\n\nfunction configPanel(tk, block) {\n\ttk.tkconfigtip.clear()\n\n\tmay_show_samplematrix_button(tk, block)\n\n\tmay_allow_modeswitch(tk, block)\n\n\tmay_allow_samplesearch(tk, block)\n\n\tmakeoption_sampleset(tk, block)\n\n\tmay_allow_showhidelabel_multi(tk, block)\n\n\tmay_allow_togglewaterfall_single(tk, block)\n\n\tconfigPanel_cnvloh(tk, block)\n\n\ttk.tkconfigtip.showunder(tk.config_handle.node())\n}\n\nfunction makeoption_sampleset(tk, block) {\n\tif (tk.singlesample) return\n\tconst row = tk.tkconfigtip.d.append('div').style('margin-bottom', '25px')\n\tif (tk.sampleset) {\n\t\trow\n\t\t\t.append('span')\n\t\t\t.style('opacity', 0.5)\n\t\t\t.style('padding-right', '10px')\n\t\t\t.text('Restricted to ' + tk.sampleset.reduce((i, j) => i + j.samples.length, 0) + ' samples')\n\t\trow\n\t\t\t.append('button')\n\t\t\t.text('Edit')\n\t\t\t.on('click', () => {\n\t\t\t\tshowinput_sampleset(tk, block)\n\t\t\t})\n\t\trow\n\t\t\t.append('button')\n\t\t\t.text('Remove')\n\t\t\t.on('click', () => {\n\t\t\t\ttk.tkconfigtip.hide()\n\t\t\t\tdelete tk.sampleset\n\t\t\t\tloadTk(tk, block)\n\t\t\t})\n\t\treturn\n\t}\n\t// allow to enter sampleset\n\trow\n\t\t.append('button')\n\t\t.text('Use a sample list')\n\t\t.on('click', () => {\n\t\t\tshowinput_sampleset(tk, block)\n\t\t})\n\n\t// QUICKFIX\n\t// ways to inhibit this button: when sampleset is in use; or if official dataset doesn't say this is allowed\n\t// while not using sampleset, check condition if to allow to show all samples\n\tif (tk.iscustom || (tk.mds && tk.mds.allow_getallsamples)) {\n\t\trow\n\t\t\t.append('button')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.text(tk.getallsamples ? 'Only show samples with variants' : 'Show all samples')\n\t\t\t.on('click', () => {\n\t\t\t\ttk.getallsamples = !tk.getallsamples\n\t\t\t\ttk.tkconfigtip.hide()\n\t\t\t\tloadTk(tk, block)\n\t\t\t})\n\t}\n}\n\nfunction showinput_sampleset(tk, block) {\n\t// for editing existing set or create new\n\ttk.tkconfigtip.clear()\n\tconst d = tk.tkconfigtip.d.append('div')\n\tconst ta = d\n\t\t.append('textarea')\n\t\t.attr('placeholder', 'One sample per row. Each row has sample and optional group name, joined by space or tab.')\n\tif (tk.sampleset) {\n\t\tconst lst = []\n\t\tfor (const l of tk.sampleset) {\n\t\t\tfor (const s of l.samples) {\n\t\t\t\tlst.push(s + ' ' + l.name)\n\t\t\t}\n\t\t}\n\t\tta.property('value', lst.join('\\n')).style('width', '250px').style('height', '200px')\n\t} else {\n\t\tta.style('width', '200px').style('height', '100px')\n\t}\n\td.append('button')\n\t\t.text('Submit')\n\t\t.style('display', 'block')\n\t\t.on('click', () => {\n\t\t\tconst lst = ta.property('value').trim().split('\\n')\n\t\t\tif (lst.length == 0) return\n\t\t\tconst g2l = new Map()\n\t\t\tconst samplesnogrp = []\n\t\t\tfor (const line of lst) {\n\t\t\t\tconst [sample, group] = line.split(/[\\s\\t]/)\n\t\t\t\tif (!sample) continue\n\t\t\t\tif (!group) {\n\t\t\t\t\tsamplesnogrp.push(sample)\n\t\t\t\t} else {\n\t\t\t\t\tif (!g2l.has(group)) g2l.set(group, [])\n\t\t\t\t\tg2l.get(group).push(sample)\n\t\t\t\t}\n\t\t\t}\n\t\t\ttk.sampleset = []\n\t\t\tfor (const [name, samples] of g2l) {\n\t\t\t\ttk.sampleset.push({ name, samples })\n\t\t\t}\n\t\t\tif (samplesnogrp.length) {\n\t\t\t\tconst g = { samples: samplesnogrp }\n\t\t\t\t// has samples without group name, if there are others with group name, use default, otherwise use none\n\t\t\t\tif (g2l.size) {\n\t\t\t\t\tg.name = 'Unnamed group'\n\t\t\t\t}\n\t\t\t\ttk.sampleset.push(g)\n\t\t\t}\n\t\t\ttk.tkconfigtip.hide()\n\t\t\tloadTk(tk, block)\n\t\t})\n}\n\nfunction may_allow_togglewaterfall_single(tk, block) {\n\t/*\nin single sample, when snvindel has more than 1, may show as waterfall\nthe cutoff \"1\" may be configurable\n*/\n\tif (!tk.singlesample) return\n\n\tconst row = tk.tkconfigtip.d.append('div').style('margin-bottom', '15px')\n\n\tif (!tk.data_vcf || tk.data_vcf.length < 2) {\n\t\t// not enough snvindel\n\t\trow.style('opacity', 0.5).text('No waterfall plot: not enough SNV/indels')\n\t\treturn\n\t}\n\n\tconst id = Math.random()\n\trow\n\t\t.append('input')\n\t\t.attr('type', 'checkbox')\n\t\t.attr('id', id)\n\t\t.property('checked', tk.waterfall.inuse)\n\t\t.on('change', event => {\n\t\t\ttk.waterfall.inuse = event.target.checked\n\t\t\trender_singlesample(tk, block)\n\t\t\tblock.block_setheight()\n\t\t})\n\trow.append('label').attr('for', id).html(' use Waterfall plot for SNV/indels')\n}\n\nfunction configPanel_cnvloh(tk, block) {\n\tif (tk.nocnvlohsv) return\n\n\tconst holder = tk.tkconfigtip.d\n\t/*\n\t// filter cnv with sv\n\t{\n\t\t// do not use!!! see notes on server\n\t\tconst row=holder.append('div').style('margin-bottom','15px')\n\t\tconst id = Math.random().toString()\n\t\trow.append('input')\n\t\t\t.attr('type','checkbox')\n\t\t\t.attr('id', id)\n\t\t\t.property( 'checked', tk.showonlycnvwithsv )\n\t\t\t.on('change',(event)=>{\n\t\t\t\ttk.showonlycnvwithsv = event.target.checked\n\t\t\t\tloadTk(tk, block)\n\t\t\t})\n\t\trow.append('label')\n\t\t\t.attr('for',id)\n\t\t\t.html(' Show only CNV with SV support')\n\t\trow.append('div')\n\t\t\t.style('font-size','.7em').style('color','#858585')\n\t\t\t.html('SV breakpoint must be inside a CNV or within its 1 Kb flanking.')\n\t}\n\t*/\n\n\t// cnv log2 ratio\n\t{\n\t\tconst row = holder.append('div').style('margin-bottom', '15px')\n\t\trow.append('span').html('CNV log2(ratio) cutoff ')\n\t\trow\n\t\t\t.append('input')\n\t\t\t.property('value', tk.valueCutoff || 0)\n\t\t\t.attr('type', 'number')\n\t\t\t.style('width', '50px')\n\t\t\t.on('keyup', event => {\n\t\t\t\tif (event.code != 'Enter' && event.code != 'NumpadEnter') return\n\t\t\t\tlet v = Number.parseFloat(event.target.value)\n\t\t\t\tif (!v || v < 0) {\n\t\t\t\t\t// invalid value, set to 0 to cancel\n\t\t\t\t\tv = 0\n\t\t\t\t}\n\t\t\t\tif (v == 0) {\n\t\t\t\t\tif (tk.valueCutoff) {\n\t\t\t\t\t\t// cutoff has been set, cancel and refetch data\n\t\t\t\t\t\ttk.valueCutoff = 0\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// cutoff has not been set, do nothing\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// set cutoff\n\t\t\t\tif (tk.valueCutoff) {\n\t\t\t\t\t// cutoff has been set\n\t\t\t\t\tif (tk.valueCutoff == v) {\n\t\t\t\t\t\t// same as current cutoff, do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// set new cutoff\n\t\t\t\t\t\ttk.valueCutoff = v\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// cutoff has not been set\n\t\t\t\t\ttk.valueCutoff = v\n\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t}\n\t\t\t})\n\t\trow\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#858585')\n\t\t\t.html(\n\t\t\t\t'Only show CNV with absolute log2(ratio) no less than cutoff.<br>Set to 0 to show all. Press ENTER to update.'\n\t\t\t)\n\t}\n\n\t// focal cnv\n\t{\n\t\tconst row = holder.append('div').style('margin-bottom', '15px')\n\t\trow.append('span').html('CNV segment size limit ')\n\t\trow\n\t\t\t.append('input')\n\t\t\t.property('value', tk.bplengthUpperLimit || 0)\n\t\t\t.attr('type', 'number')\n\t\t\t.style('width', '80px')\n\t\t\t.on('keyup', event => {\n\t\t\t\tif (event.code != 'Enter' && event.code != 'NumpadEnter') return\n\t\t\t\tlet v = Number.parseInt(event.target.value)\n\t\t\t\tif (!v || v < 0) {\n\t\t\t\t\t// invalid value, set to 0 to cancel\n\t\t\t\t\tv = 0\n\t\t\t\t}\n\t\t\t\tif (v == 0) {\n\t\t\t\t\tif (tk.bplengthUpperLimit) {\n\t\t\t\t\t\t// cutoff has been set, cancel and refetch data\n\t\t\t\t\t\ttk.bplengthUpperLimit = 0\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// cutoff has not been set, do nothing\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// set cutoff\n\t\t\t\tif (tk.bplengthUpperLimit) {\n\t\t\t\t\t// cutoff has been set\n\t\t\t\t\tif (tk.bplengthUpperLimit == v) {\n\t\t\t\t\t\t// same as current cutoff, do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// set new cutoff\n\t\t\t\t\t\ttk.bplengthUpperLimit = v\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// cutoff has not been set\n\t\t\t\t\ttk.bplengthUpperLimit = v\n\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t}\n\t\t\t})\n\t\trow.append('span').text('bp')\n\t\trow\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#858585')\n\t\t\t.html('Limit the CNV segment length to show only focal events.<br>Set to 0 to show all. Press ENTER to update.')\n\t}\n\n\t// cnv color\n\t{\n\t\tconst row = holder.append('div')\n\t\trow.append('span').html('Copy number gain ')\n\t\trow\n\t\t\t.append('input')\n\t\t\t.attr('type', 'color')\n\t\t\t.property('value', tk.cnvcolor.gain.str)\n\t\t\t.on('change', event => {\n\t\t\t\ttk.cnvcolor.gain.str = event.target.value\n\t\t\t\tconst c = d3rgb(tk.cnvcolor.gain.str)\n\t\t\t\ttk.cnvcolor.gain.r = c.r\n\t\t\t\ttk.cnvcolor.gain.g = c.g\n\t\t\t\ttk.cnvcolor.gain.b = c.b\n\t\t\t\ttk.cnvcolor.cnvlegend.gain_stop.attr('stop-color', tk.cnvcolor.gain.str)\n\t\t\t\tif (tk.singlesample) {\n\t\t\t\t\trender_singlesample(tk, block)\n\t\t\t\t} else {\n\t\t\t\t\trender_samplegroups(tk, block)\n\t\t\t\t}\n\t\t\t})\n\t\trow.append('span').html(' loss ')\n\t\trow\n\t\t\t.append('input')\n\t\t\t.attr('type', 'color')\n\t\t\t.property('value', tk.cnvcolor.loss.str)\n\t\t\t.on('change', event => {\n\t\t\t\ttk.cnvcolor.loss.str = event.target.value\n\t\t\t\tconst c = d3rgb(tk.cnvcolor.loss.str)\n\t\t\t\ttk.cnvcolor.loss.r = c.r\n\t\t\t\ttk.cnvcolor.loss.g = c.g\n\t\t\t\ttk.cnvcolor.loss.b = c.b\n\t\t\t\ttk.cnvcolor.cnvlegend.loss_stop.attr('stop-color', tk.cnvcolor.loss.str)\n\t\t\t\tif (tk.singlesample) {\n\t\t\t\t\trender_singlesample(tk, block)\n\t\t\t\t} else {\n\t\t\t\t\trender_samplegroups(tk, block)\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\tif (tk.cnvcolor.lohlegend) {\n\t\tholder.append('hr').style('margin', '20px')\n\n\t\t// loh segmean cutoff\n\t\t{\n\t\t\tconst row = holder.append('div').style('margin-bottom', '15px')\n\t\t\trow.append('span').html('LOH seg.mean cutoff ')\n\t\t\trow\n\t\t\t\t.append('input')\n\t\t\t\t.property('value', tk.segmeanValueCutoff || 0)\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.style('width', '50px')\n\t\t\t\t.on('keyup', event => {\n\t\t\t\t\tif (event.code != 'Enter' && event.code != 'NumpadEnter') return\n\t\t\t\t\tlet v = Number.parseFloat(event.target.value)\n\t\t\t\t\tif (!v || v < 0) {\n\t\t\t\t\t\t// invalid value, set to 0 to cancel\n\t\t\t\t\t\tv = 0\n\t\t\t\t\t}\n\t\t\t\t\tif (v == 0) {\n\t\t\t\t\t\tif (tk.segmeanValueCutoff) {\n\t\t\t\t\t\t\t// cutoff has been set, cancel and refetch data\n\t\t\t\t\t\t\ttk.segmeanValueCutoff = 0\n\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// cutoff has not been set, do nothing\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t// set cutoff\n\t\t\t\t\tif (tk.segmeanValueCutoff) {\n\t\t\t\t\t\t// cutoff has been set\n\t\t\t\t\t\tif (tk.segmeanValueCutoff == v) {\n\t\t\t\t\t\t\t// same as current cutoff, do nothing\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// set new cutoff\n\t\t\t\t\t\t\ttk.segmeanValueCutoff = v\n\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// cutoff has not been set\n\t\t\t\t\t\ttk.segmeanValueCutoff = v\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\trow\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t.style('color', '#858585')\n\t\t\t\t.html('Only show LOH with seg.mean no less than cutoff.<br>Set to 0 to show all. Press ENTER to update.')\n\t\t}\n\n\t\t// focal loh\n\t\t{\n\t\t\tconst row = holder.append('div').style('margin-bottom', '15px')\n\t\t\trow.append('span').html('LOH segment size limit ')\n\t\t\trow\n\t\t\t\t.append('input')\n\t\t\t\t.property('value', tk.lohLengthUpperLimit || 0)\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.style('width', '80px')\n\t\t\t\t.on('keyup', event => {\n\t\t\t\t\tif (event.code != 'Enter' && event.code != 'NumpadEnter') return\n\t\t\t\t\tlet v = Number.parseInt(event.target.value)\n\t\t\t\t\tif (!v || v < 0) {\n\t\t\t\t\t\t// invalid value, set to 0 to cancel\n\t\t\t\t\t\tv = 0\n\t\t\t\t\t}\n\t\t\t\t\tif (v == 0) {\n\t\t\t\t\t\tif (tk.lohLengthUpperLimit) {\n\t\t\t\t\t\t\t// cutoff has been set, cancel and refetch data\n\t\t\t\t\t\t\ttk.lohLengthUpperLimit = 0\n\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// cutoff has not been set, do nothing\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t// set cutoff\n\t\t\t\t\tif (tk.lohLengthUpperLimit) {\n\t\t\t\t\t\t// cutoff has been set\n\t\t\t\t\t\tif (tk.lohLengthUpperLimit == v) {\n\t\t\t\t\t\t\t// same as current cutoff, do nothing\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// set new cutoff\n\t\t\t\t\t\t\ttk.lohLengthUpperLimit = v\n\t\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// cutoff has not been set\n\t\t\t\t\t\ttk.lohLengthUpperLimit = v\n\t\t\t\t\t\tloadTk(tk, block)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\trow.append('span').text('bp')\n\t\t\trow\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t.style('color', '#858585')\n\t\t\t\t.html('Limit the LOH segment length to show only focal events.<br>Set to 0 to show all. Press ENTER to update.')\n\t\t}\n\n\t\t// loh color\n\t\t{\n\t\t\tconst row = holder.append('div').style('margin-bottom', '1px')\n\t\t\trow.append('span').html('LOH color ')\n\t\t\trow\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'color')\n\t\t\t\t.property('value', tk.cnvcolor.loh.str)\n\t\t\t\t.on('change', event => {\n\t\t\t\t\ttk.cnvcolor.loh.str = event.target.value\n\t\t\t\t\tconst c = d3rgb(tk.cnvcolor.loh.str)\n\t\t\t\t\ttk.cnvcolor.loh.r = c.r\n\t\t\t\t\ttk.cnvcolor.loh.g = c.g\n\t\t\t\t\ttk.cnvcolor.loh.b = c.b\n\t\t\t\t\ttk.cnvcolor.lohlegend.loh_stop.attr('stop-color', tk.cnvcolor.loh.str)\n\t\t\t\t\tif (tk.singlesample) {\n\t\t\t\t\t\trender_singlesample(tk, block)\n\t\t\t\t\t} else {\n\t\t\t\t\t\trender_samplegroups(tk, block)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\t// end of config\n}\n\nfunction may_allow_modeswitch(tk, block) {\n\t// only for multi-sample\n\tif (tk.singlesample) return\n\n\tconst div = tk.tkconfigtip.d\n\t\t.append('div')\n\t\t.style('background', '#FAF9DE')\n\t\t.style('margin-bottom', '20px')\n\t\t.style('padding', '15px')\n\n\tconst id1 = Math.random().toString()\n\tconst id2 = Math.random().toString()\n\tconst name = Math.random().toString()\n\tconst row1 = div.append('div').style('margin-bottom', '5px')\n\ttk.mode_radio_1 = row1\n\t\t.append('input')\n\t\t.attr('type', 'radio')\n\t\t.attr('id', id1)\n\t\t.attr('name', name)\n\t\t.property('checked', tk.isdense)\n\t\t.on('change', () => {\n\t\t\tmulti_changemode(tk, block)\n\t\t})\n\trow1\n\t\t.append('label')\n\t\t.attr('for', id1)\n\t\t.attr('class', 'sja_clbtext')\n\t\t.html(\n\t\t\t' Dense <span style=\"font-size:.7em;color:#858585;\">Showing densities of SV breakpoints and SNV/indels, over all samples</span>'\n\t\t)\n\n\tconst row2 = div.append('div')\n\ttk.mode_radio_2 = row2\n\t\t.append('input')\n\t\t.attr('type', 'radio')\n\t\t.attr('id', id2)\n\t\t.attr('name', name)\n\t\t.property('checked', tk.isfull)\n\t\t.on('change', () => {\n\t\t\tmulti_changemode(tk, block)\n\t\t})\n\trow2\n\t\t.append('label')\n\t\t.attr('for', id2)\n\t\t.attr('class', 'sja_clbtext')\n\t\t.html(' Expanded <span style=\"font-size:.7em;color:#858585;\">Showing SV/SNV/indel for each sample</span>')\n}\n\nfunction may_allow_showhidelabel_multi(tk, block) {\n\t// only for multi-sample\n\tif (tk.singlesample) return\n\ttk.tkconfigtip.d\n\t\t.append('div')\n\t\t.style('margin-bottom', '5px')\n\t\t.text('Show text labels in expanded mode')\n\t\t.style('opacity', 0.5)\n\n\tconst row = tk.tkconfigtip.d.append('div').style('margin-bottom', '20px')\n\t{\n\t\t// TODO if no vcf tk, do not show it\n\t\tconst id = Math.random().toString()\n\t\trow\n\t\t\t.append('input')\n\t\t\t.attr('type', 'checkbox')\n\t\t\t.attr('id', id)\n\t\t\t.property('checked', !tk.multihidelabel_vcf)\n\t\t\t.on('change', () => {\n\t\t\t\ttk.multihidelabel_vcf = !tk.multihidelabel_vcf\n\t\t\t\trender_samplegroups(tk, block)\n\t\t\t})\n\t\trow.append('label').attr('for', id).attr('class', 'sja_clbtext').html(' SNV/indel')\n\t}\n\n\tif (!tk.nocnvlohsv) {\n\t\t{\n\t\t\tconst id = Math.random().toString()\n\t\t\trow\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t.style('margin-left', '20px')\n\t\t\t\t.attr('id', id)\n\t\t\t\t.property('checked', !tk.multihidelabel_sv)\n\t\t\t\t.on('change', () => {\n\t\t\t\t\ttk.multihidelabel_sv = !tk.multihidelabel_sv\n\t\t\t\t\trender_samplegroups(tk, block)\n\t\t\t\t})\n\t\t\trow.append('label').attr('for', id).attr('class', 'sja_clbtext').html(' DNA SV')\n\t\t}\n\t\t{\n\t\t\tconst id = Math.random().toString()\n\t\t\trow\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t.style('margin-left', '20px')\n\t\t\t\t.attr('id', id)\n\t\t\t\t.property('checked', !tk.multihidelabel_fusion)\n\t\t\t\t.on('change', () => {\n\t\t\t\t\ttk.multihidelabel_fusion = !tk.multihidelabel_fusion\n\t\t\t\t\trender_samplegroups(tk, block)\n\t\t\t\t})\n\t\t\trow.append('label').attr('for', id).attr('class', 'sja_clbtext').html(' RNA fusion')\n\t\t}\n\t}\n}\n\n///////////// __maketk ENDS\n\nexport function map_cnv(item, tk, block) {\n\t/*\n\tcnv, loh, itd\n\t*/\n\tconst main = block.tkarg_maygm(tk)[0]\n\n\tif (item.chr == main.chr && Math.max(item.start, main.start) < Math.min(item.stop, main.stop)) {\n\t\titem.x1 = block.seekcoord(item.chr, Math.max(item.start, main.start))[0].x\n\t\t// in case item.stop is beyond chr length,\n\t\t// main.stop has to -1 to allow it to work with seekcoord\n\t\titem.x2 = block.seekcoord(item.chr, Math.min(item.stop, main.stop - 1))[0].x\n\t}\n\n\tlet x = block.width\n\tfor (const p of block.subpanels) {\n\t\tx += p.leftpad\n\t\tif (item.chr == p.chr && Math.max(item.start, p.start) < Math.min(item.stop, p.stop)) {\n\t\t\tconst x1 = x + (Math.max(item.start, p.start) - p.start) * p.exonsf\n\t\t\tconst x2 = x + (Math.min(item.stop, p.stop) - p.start) * p.exonsf\n\t\t\tif (item.x1 == undefined) {\n\t\t\t\titem.x1 = x1\n\t\t\t\titem.x2 = x2\n\t\t\t} else {\n\t\t\t\titem.x2 = x2\n\t\t\t}\n\t\t}\n\t\tx += p.width\n\t}\n\n\tif (item.x1 != undefined && block.gmmode && block.gmmode != common.gmmode.genomic) {\n\t\t// mapped item, in gmmode, may adjust\n\n\t\tconst pxw = block.width + block.subpanels.reduce((i, j) => j.width + j.leftpad, 0)\n\n\t\tif (item.x1 < item.x2) {\n\t\t\tif (item.x2 < 0 || item.x1 > pxw) {\n\t\t\t\t// out of range\n\t\t\t\titem.x1 = undefined\n\t\t\t\titem.x2 = undefined\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (item.x1 < 0) {\n\t\t\t\titem.x1 = 0\n\t\t\t}\n\t\t\tif (item.x2 > pxw) {\n\t\t\t\titem.x2 = pxw\n\t\t\t}\n\t\t} else if (item.x1 > item.x2) {\n\t\t\t// reversed\n\t\t\tif (item.x1 < 0 || item.x2 > pxw) {\n\t\t\t\t// out of range\n\t\t\t\titem.x1 = undefined\n\t\t\t\titem.x2 = undefined\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (item.x2 < 0) {\n\t\t\t\titem.x2 = 0\n\t\t\t}\n\t\t\tif (item.x1 > pxw) {\n\t\t\t\titem.x1 = pxw\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction map_sv_2(item, block) {\n\tconst lst = block.seekcoord(item._chr, item._pos)\n\tfor (const r of lst) {\n\t\tif (r.ridx != undefined) {\n\t\t\t// in main, if outside won't show this end\n\t\t\tif (r.x > 0 && r.x < block.width) {\n\t\t\t\titem.x = r.x\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else if (r.subpanelidx != undefined) {\n\t\t\titem.x = r.x\n\t\t}\n\t}\n}\n\nfunction may_map_vcf(tk, block) {\n\t// map to view range: snvindel, itd\n\tif (!tk.data_vcf) return\n\tfor (const m of tk.data_vcf) {\n\t\tif (m.dt == common.dtsnvindel) {\n\t\t\tm._chr = m.chr\n\t\t\tm._pos = m.pos\n\t\t\tmap_sv_2(m, block)\n\t\t\tif (m.x == undefined) {\n\t\t\t\tconsole.log('snvindel unmapped: ' + m.chr + ':' + m.pos)\n\t\t\t} else {\n\t\t\t\tdelete m._chr\n\t\t\t\tdelete m._pos\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error('may_map_vcf: unknown dt')\n\t\t}\n\t}\n}\n\nfunction vcfdata_prep(tk, block) {\n\t/*\n\t_data_vcf returned by server\n\twill be filtered to data_vcf for display\n\tchanging mclass filtering option won't call this, will reload all datatypes from server, sorry about the trouble\n\t*/\n\tif (!tk._data_vcf || tk._data_vcf.length == 0) {\n\t\ttk.data_vcf = null\n\t\treturn\n\t}\n\n\tconst mlst = tk._data_vcf\n\n\ttk.data_vcf = []\n\n\tfor (const m of mlst) {\n\t\tif (m.dt == common.dtsnvindel) {\n\t\t\tcommon.vcfcopymclass(m, block)\n\t\t} else {\n\t\t\tthrow 'unknown dt ' + m.dt\n\t\t}\n\t\tif (!tk.legend_mclass.hiddenvalues.has(m.class)) {\n\t\t\ttk.data_vcf.push(m)\n\t\t}\n\t}\n}\n\nexport function dedup_sv(lst) {\n\t/* sv are breakends\n\tdedup\n\t*/\n\tconst key2sv = new Map()\n\tfor (const i of lst) {\n\t\tkey2sv.set(\n\t\t\ti.sample + '.' + i.chrA + '.' + i.posA + '.' + i.strandA + '.' + i.chrB + '.' + i.posB + '.' + i.strandB,\n\t\t\ti\n\t\t)\n\t}\n\treturn [...key2sv.values()]\n}\n\nexport function vcfvariantisgermline(ms, tk) {\n\t/*\n\tharcode: either somatic or germline\n\tms as an item from tk.data_vcf[].sampledata[]\n\ttk\n\t*/\n\n\tif (!ms) return false\n\n\tif (tk.legend_vorigin && tk.legend_vorigin.key) {\n\t\tconst v = ms[tk.legend_vorigin.key]\n\t\tif (v) {\n\t\t\tif (v.toLowerCase() == tk.legend_vorigin.germline) return true\n\t\t}\n\t}\n\treturn false\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDO,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,uBAAuB;AA2JpC,eAAsB,6BAA6B,IAAI;AAEtD,QAAM,EAAE,SAAS,IAAI,OAAO,+BAA+B,sBAAsB,IAAI;AAErF,QAAM,OAAc,QAAQ;AAAA,IAC3B,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,MAAM;AACZ,MAAO,QAAQ,KAAK,MAAM,GAAG,aAAa;AAC1C,WAAK,KAAK,MAAM,WAAW,MAAM;AAAA,IAClC;AAAA,EACD,CAAC;AAED,MAAI,+BAA+B;AAElC,UAAM,IAAI,8BAA8B,CAAC;AACzC,QAAI,GAAG;AACN,WAAK,OAAO;AAAA,QACX,6CAA6C,WAAW,GAAG,IAAI,IAAI,aAAa,WAAW,EAAE,KAAK;AAAA,MACnG;AAAA,IACD;AAAA,EACD,WAAW,uBAAuB;AACjC,SAAK,OAAO;AAAA,MACX,6CACC,WAAW,GAAG,IAAI,IAClB,aACA,WAAW,sBAAsB,IAAI;AAAA,IACvC;AAAA,EACD,OAAO;AACN,SAAK,OAAO,KAAK,GAAG,IAAI;AAAA,EACzB;AAEA,QAAM,MAAM;AAAA,IACX,WAAW,MAAM;AAAA,IACjB,QAAQ,MAAM;AAAA,IACd,UAAU,CAAC,OAAO;AAAA,IAClB,SAAS,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA,KAAK,MAAM;AAAA,IACX,QAAQ,KAAK,KAAK,OAAO,KAAK,EAAE,MAAM,UAAU,MAAM;AAAA,EACvD;AAEA,MAAI,GAAG,UAAU;AAChB,QAAI,WAAW;AACf,QAAI,kBAAkB,CAAC;AACvB,QAAI,gBAAgB,eAAe,IAAI;AAAA,MACtC,MAAa,IAAI;AAAA,MACjB,MAAM,GAAG;AAAA,MACT,KAAK,GAAG;AAAA,MACR,UAAU,GAAG;AAAA,IACd;AACA,QAAI,GAAG,qBAAqB;AAM3B,UAAI,gBAAgB,oBAAoB,IAAI;AAAA,QAC3C,MAAa,IAAI;AAAA,MAClB;AACA,iBAAW,KAAK,GAAG,qBAAqB;AACvC,YAAI,gBAAgB,oBAAoB,EAAE,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAAA,MACxE;AAAA,IACD;AACA,QAAI,GAAG,UAAU;AAEhB,UAAI,gBAAgB,aAAa,IAAI;AAAA,QACpC,MAAa,IAAI;AAAA,MAClB;AACA,iBAAW,KAAK,GAAG,UAAU;AAC5B,YAAI,KAAK,iBAAkB;AAC3B,YAAI,gBAAgB,aAAa,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC;AAAA,MACtD;AAAA,IACD;AAAA,EACD,OAAO;AAEN,QAAI,UAAU,GAAG,IAAI;AAAA,EACtB;AAGA,MAAI,OAAO,SAAS,OAAO,SAAS,OAAO,GAAG;AAC7C,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,aAAa;AACjB,QAAI,eAAe;AACnB,QAAI,QAAQ,OAAO,qBAAY;AAC/B,UAAM,WAAW,MAAM,YAAY;AACnC,aAAS,KAAK,GAAG,EAAE,KAAK,OAAK;AAC5B,QAAE,QAAQ;AACV,SAAG,eAAe,KAAK,CAAC;AAAA,IACzB,CAAC;AAAA,EACF,OAAO;AACN,WAAO,4BAAgB,EAAE,KAAK,OAAK;AAClC,YAAM,IAAI,IAAI,EAAE,aAAa,GAAG;AAChC,QAAE,QAAQ;AACV,SAAG,eAAe,KAAK,CAAC;AAAA,IACzB,CAAC;AAAA,EACF;AACD;AAEO,SAAS,6BAA6B,IAAI,OAAO;AAIvD,MAAI,CAAC,GAAG,kBAAkB,GAAG,eAAe,UAAU,EAAG;AAEzD,QAAM,QAAQ,GAAG,YAAY,EAAE,OAAO,OAAO,EAAE,MAAM,iBAAiB,KAAK;AAE3E,aAAW,KAAK,GAAG,gBAAgB;AAClC,UAAM,KAAK,MAAM,OAAO,IAAI;AAE5B;AAGC,YAAM,QAAQ,CAAC;AACf,UAAI,EAAE,+BAA+B;AAEpC,cAAM,IAAI,EAAE,8BAA8B,CAAC;AAC3C,cAAM,KAAK,EAAE,KAAK;AAAA,MACnB,WAAW,EAAE,uBAAuB;AACnC,cAAM,KAAK,EAAE,sBAAsB,IAAI;AAAA,MACxC,OAAO;AAEN,cAAM,KAAK,YAAY;AAAA,MACxB;AACA,YAAM,IAAI,EAAE,SAAS;AACrB,YAAM,KAAK,IAAI,cAAc,IAAI,IAAI,MAAM,GAAG;AAE9C,YAAM,KAAK,EAAE,QAAQ,SAAS,UAAU;AAExC,YAAM,MAAM,GACV,OAAO,IAAI,EACX,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,MAAM,UAAU,mBAAmB,EACnC,KAAK,MAAM,KAAK,IAAI,CAAC;AACvB,UAAI,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ;AAC5C,YAAI,MAAM,gBAAgB,OAAO;AAAA,MAClC;AACA,UAAI,GAAG,SAAS,MAAM;AACrB,YAAI,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ;AAC5C,UAAO,OAAO,EAAE,MAAM,IAAI;AAC1B,UAAO,QAAQ,KAAK,EAAE,MAAM,IAAI;AAChC,cAAI,MAAM,gBAAgB,SAAS;AAAA,QACpC,OAAO;AACN,UAAO,QAAQ,EAAE,MAAM,MAAM,GAAG;AAChC,UAAO,UAAU,EAAE,MAAM,IAAI;AAC7B,cAAI,MAAM,gBAAgB,OAAO;AAAA,QAClC;AAAA,MACD,CAAC;AAAA,IACF;AAEA;AAEC,SAAG,OAAO,IAAI,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,SAAS,EACd,GAAG,SAAS,MAAM;AAClB,WAAG,OAAO;AACV,UAAE,MAAM,KAAK,OAAO;AACpB,mBAAW,CAAC,GAAG,EAAE,KAAK,GAAG,eAAe,QAAQ,GAAG;AAClD,cAAI,EAAE,+BAA+B;AACpC,gBAAI,GAAG,+BAA+B;AACrC,oBAAM,IAAI,EAAE,8BAA8B,CAAC;AAC3C,oBAAM,IAAI,GAAG,8BAA8B,CAAC;AAC5C,kBAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;AACzC,mBAAG,eAAe,OAAO,GAAG,CAAC;AAC7B;AAAA,cACD;AAAA,YACD;AAAA,UACD,OAAO;AACN,gBAAI,CAAC,GAAG,+BAA+B;AACtC,iBAAG,eAAe,OAAO,GAAG,CAAC;AAC7B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACH;AAAA,EACD;AACD;;;AC9WA,sBAAyB;AA8BzB,eAAsB,uBAAuB,IAAI,OAAO;AAUvD,MAAI,GAAG,SAAU;AACjB,MAAI,GAAG,aAAc;AAErB,QAAM,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AACxE,QAAM,QAAQ,IAAI,OAAO,OAAO,EAAE,KAAK,QAAQ,EAAE,EAAE,KAAK,eAAe,aAAa;AACpF,QAAM,UAAU,IAAI,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM;AAE5D,QAAM,GAAG,aAAS,0BAAS,cAAc,GAAG,CAAC;AAE7C,iBAAe,eAAe;AAC7B,YAAQ,UAAU,GAAG,EAAE,OAAO;AAE9B,UAAM,MAAM,MAAM,SAAS,OAAO,EAAE,KAAK;AACzC,QAAI,CAAC,IAAK;AAEV,UAAM,MAAM;AAAA,MACX,QAAQ,MAAM,OAAO;AAAA,MACrB,SAAS,GAAG,IAAI;AAAA,MAChB,UAAU,GAAG;AAAA,MACb,gBAAgB;AAAA,IACjB;AACA,QAAI;AACH,YAAM,OAAO,MAAa,QAAQ,YAAY,GAAG;AAEjD,UAAI,KAAK,MAAO,OAAM,KAAK;AAC3B,UAAI,CAAC,KAAK,OAAQ;AAClB,iBAAW,UAAU,KAAK,QAAQ;AACjC,cAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,aAAK,OAAO,MAAM,EAAE,KAAK,OAAO,IAAI;AAEpC,YAAI,OAAO,YAAY;AACtB,eAAK,OAAO,MAAM,EAAE,MAAM,eAAe,MAAM,EAAE,MAAM,aAAa,MAAM,EAAE,KAAK,OAAO,UAAU;AAAA,QACnG;AAEA,YAAI,OAAO,kBAAkB;AAC5B,eACE,OAAO,MAAM,EACb,MAAM,aAAa,MAAM,EACzB,MAAM,WAAW,SAAS,EAC1B,MAAM,eAAe,MAAM,EAC3B,MAAM,cAAc,MAAM,EAC1B,MAAM,SAAS,OAAO,EACtB,MAAM,iBAAiB,KAAK,EAC5B,KAAK,OAAO,mBAAmB,YAAY,OAAO,mBAAmB,IAAI,MAAM,GAAG;AAAA,QACrF;AAEA,YAAI,OAAO,OAAO;AACjB,eACE,OAAO,MAAM,EACb,MAAM,aAAa,MAAM,EACzB,MAAM,WAAW,SAAS,EAC1B,MAAM,eAAe,MAAM,EAC3B,MAAM,cAAc,MAAM,EAC1B,MAAM,SAAS,OAAO,EACtB,MAAM,iBAAiB,KAAK,EAC5B,KAAK,aAAa;AAAA,QACrB;AACA,YAAI,OAAO,oBAAoB;AAC9B,eACE,OAAO,MAAM,EACb,MAAM,aAAa,MAAM,EACzB,MAAM,WAAW,SAAS,EAC1B,MAAM,eAAe,MAAM,EAC3B,MAAM,cAAc,MAAM,EAC1B,MAAM,SAAS,OAAO,EACtB,MAAM,iBAAiB,KAAK,EAC5B,KAAK,oBAAoB;AAAA,QAC5B;AAEA,aAAK,KAAK,SAAS,gBAAgB,EAAE,GAAG,SAAS,MAAM;AACtD,aAAG,YAAY,KAAK;AAEpB,gBAAM,OAAO,CAAC;AAEd,4BAAkB,MAAM;AAAA,YACvB;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,cACP,YAAY,OAAO;AAAA,YACpB;AAAA,YACA,aAAa,EAAE,YAAY,OAAO,WAAW;AAAA,UAC9C,CAAC;AAED,0BAAgB,MAAM;AAAA,YACrB;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,cACP,YAAY,OAAO;AAAA,YACpB;AAAA;AAAA,UAED,CAAC;AACD,2BAAiB,MAAM;AAAA,YACtB;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,cACP,YAAY,OAAO;AAAA,YACpB;AAAA;AAAA,UAED,CAAC;AACD,sCAA4B,MAAM,OAAO,MAAM,IAAI,KAAK;AAExD,cAAI,OAAO,QAAQ,GAAG,mBAAmB,GAAG,gBAAgB,YAAY;AACvE,iBAAK,KAAK;AAAA,cACT,OAAO;AAAA,cACP,UAAU,SAAO;AAChB,2BAAW,QAAQ,OAAO,MAAM;AAC/B,wBAAM,IAAI,GAAG,gBAAgB,WAAW,KAAK,CAAC;AAC9C,sBAAI,EAAG,MAAK,IAAI,EAAE;AAAA,gBACnB;AACA,gBAAO,gBAAgB,KAAK,OAAO,IAAI;AAAA,cACxC;AAAA,YACD,CAAC;AAAA,UACF;AACA,gBAAM,OAAc,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC;AAC9C,eAAK,OAAO,KAAK,OAAO,IAAI;AAC5B,UAAO,QAAQ,KAAK,KAAK,MAAM,eAAe,MAAM,GAAG,IAAI;AAAA,QAC5D,CAAC;AAAA,MACF;AAAA,IACD,SAAS,GAAG;AACX,MAAO,SAAS,SAAS,IAAI,WAAW,GAAG;AAC3C,UAAI,IAAI,MAAO,SAAQ,IAAI,IAAI,KAAK;AAAA,IACrC;AAAA,EACD;AACD;AAEO,SAAS,2BAA2B,aAAa,IAAI,OAAO;AAQlE,MAAI,GAAG,UAAW,QAAO,sBAAsB,aAAa,IAAI,KAAK;AAErE,MAAI,GAAG,SAAU;AAEjB,MAAI,CAAC,YAAY,YAAY;AAE5B;AAAA,EACD;AAEA,QAAM,aAAa,SAAc,SAAS,GAAG,KAAK,GAAG,GAAG;AAExD,MAAI,CAAC,GAAG,gBAAiB,QAAO,WAAW,4BAA4B;AACvE,MAAI,CAAC,GAAG,gBAAgB,WAAY,QAAO,WAAW,yCAAyC;AAE/F,KAAG,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,UAAU,UAAU,EAAE,MAAM,aAAa,MAAM,EAAE,KAAK,YAAY,IAAI;AAEpG,KAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,MAAM,EACX,GAAG,SAAS,MAAM;AAClB,OAAG,KAAK,MAAM;AACd,UAAMA,OAAM,wBAAwB,aAAa,IAAI,IAAI;AACzD,QAAIA,MAAK;AAAA,IAET;AACA,OAAG,KAAK,KAAK;AACb,WAAO,IAAI,KAAK;AAAA,EACjB,CAAC;AAEF,KAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,WAAW,EAChB,GAAG,SAAS,MAAM;AAClB,OAAG,KAAK,MAAM;AACd,eAAW,KAAK,GAAG,OAAO;AACzB,YAAMA,OAAM,wBAAwB,GAAG,IAAI,IAAI;AAC/C,UAAIA,MAAK;AAAA,MAET;AAAA,IACD;AACA,4BAAwB,aAAa,IAAI,KAAK;AAC9C,OAAG,KAAK,KAAK;AACb,WAAO,IAAI,KAAK;AAAA,EACjB,CAAC;AAEF;AAKC,UAAM,CAACA,MAAK,MAAM,KAAK,IAAI,+BAA+B,aAAa,EAAE;AACzE,QAAIA,MAAK;AAAA,IAGT,WAAW,MAAM,aAAa,OAAO,GAAG;AAEvC,SAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,UAAU,EACf,GAAG,SAAS,MAAM;AAClB,WAAG,KAAK,KAAK;AACb,cAAM,aAAa,MAAM;AACzB,eAAO,IAAI,KAAK;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACD;AAEA,KAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,YAAY,EACjB,GAAG,SAAS,MAAM;AAClB,OAAG,KAAK,KAAK;AACb,gCAA4B,aAAa,IAAI,KAAK;AAAA,EACnD,CAAC;AAEF,KAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,aAAa,EAClB,GAAG,SAAS,MAAM;AAClB,OAAG,KAAK,KAAK;AACb,gBAAY,IAAI,OAAO,WAAW;AAAA,EACnC,CAAC;AAEF,wBAAsB,aAAa,IAAI,KAAK;AAE5C,qCAAmC;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,GAAG,KAAK;AAAA,EACjB,CAAC;AAED,qCAAmC,IAAI,OAAO,GAAG,KAAK,GAAG,WAAW;AACrE;AAEA,SAAS,sBAAsB,KAAK,IAAI,OAAO;AAG9C,KAAG,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,UAAU,UAAU,EAAE,MAAM,aAAa,MAAM,EAAE,KAAK,IAAI,IAAI;AAC5F,KAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,YAAY,EACjB,GAAG,SAAS,MAAM;AAClB,OAAG,KAAK,KAAK;AACb,gCAA4B,KAAK,IAAI,KAAK;AAAA,EAC3C,CAAC;AACF,KAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,aAAa,EAClB,GAAG,SAAS,MAAM;AAClB,OAAG,KAAK,KAAK;AACb,gBAAY,IAAI,OAAO,GAAG;AAAA,EAC3B,CAAC;AACH;AAEA,SAAS,YAAY,IAAI,OAAO,aAAa;AAM5C,QAAM,IAAI,MAAM,MAAM,MAAM,QAAQ;AACpC,QAAM,UAAU;AAAA,IACf,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,KAAK,EAAE;AAAA,IACP,OAAO,EAAE;AAAA,IACT,MAAM,EAAE;AAAA,IACR,KAAK;AAAA,MACJ,aAAa,GAAG;AAAA,MAChB,gBAAgB,GAAG;AAAA,IACpB;AAAA,IACA,KAAK;AAAA,MACJ,aAAa,GAAG;AAAA,MAChB,gBAAgB,GAAG;AAAA,IACpB;AAAA,IACA,KAAK,CAAC;AAAA,IACN,IAAI,CAAC;AAAA,IACL,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACT,gBAAgB,CAAC;AAAA,IAClB;AAAA,EACD;AAEA,MAAI,GAAG,iBAAiB,GAAG,cAAc,cAAc;AAEtD,eAAW,KAAK,GAAG,cAAc,cAAc;AAC9C,UAAI,OAAO,KAAK,UAAU;AACzB,gBAAQ,SAAS,eAAe,CAAC,IAAI;AAAA,MACtC,OAAO;AACN,YAAI,KAAY,OAAO;AACtB,kBAAQ,IAAI,SAAS;AAAA,QACtB,WAAW,KAAY,OAAO;AAC7B,kBAAQ,IAAI,SAAS;AAAA,QACtB,WAAW,KAAY,OAAO;AAC7B,kBAAQ,IAAI,SAAS;AAAA,QACtB,WAAW,KAAY,MAAM;AAC5B,kBAAQ,GAAG,SAAS;AAAA,QACrB,WAAW,KAAY,aAAa;AACnC,kBAAQ,OAAO,SAAS;AAAA,QACzB,OAAO;AACN,kBAAQ,MAAM,yBAAyB,CAAC;AAAA,QACzC;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAGA,MAAI,GAAG,aAAa;AACnB,YAAQ,QAAQ,GAAG;AAAA,EACpB,OAAO;AACN,YAAQ,QAAQ,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE;AAAA,EACjD;AAEA,QAAM,WAAW,EAAE,IAAI,OAAO,QAAQ;AAEtC,UAAQ,cAAc,CAAC;AAEvB,MAAI,GAAG,UAAU;AAChB,QAAI,GAAG,QAAQ,GAAG,IAAK,SAAQ,YAAY,KAAK,eAAe;AAC/D,QAAI,GAAG,SAAU,SAAQ,YAAY,KAAK,aAAa;AAAA,EACxD,WAAW,GAAG,UAAU;AACvB,YAAQ,YAAY,KAAK,GAAG,QAAQ;AACpC,QAAI,GAAG,SAAU,SAAQ,YAAY,KAAK,GAAG,SAAS,QAAQ;AAAA,EAC/D;AAEA,MAAI,GAAG,WAAW;AAEjB,eAAW,KAAK,GAAG,gBAAgB;AAClC,UAAI,EAAE,yBAAyB,EAAE,sBAAsB,QAAQ,YAAY,MAAM;AAChF,QAAO,OAAO,EAAE,MAAM,IAAI;AAC1B,UAAE,qBAAqB,OAAO;AAC9B;AAAA,MACD;AAAA,IACD;AACA,aAAS,wBAAwB;AAAA,MAChC,MAAM,YAAY;AAAA,MAClB,SAAS,KAAK,MAAM,KAAK,UAAU,GAAG,UAAU,KAAK,OAAK,EAAE,QAAQ,YAAY,IAAI,EAAE,OAAO,CAAC;AAAA,IAC/F;AAAA,EACD,WAAW,YAAY,YAAY;AAElC,UAAM,OAAO,YAAY,WAAW,YAAY,WAAW,SAAS,CAAC;AACrE,eAAW,KAAK,GAAG,gBAAgB;AAClC,UAAI,EAAE,+BAA+B;AAEpC,cAAM,IAAI,EAAE,8BAA8B,CAAC;AAC3C,YAAI,KAAK,EAAE,OAAO,KAAK,KAAK,EAAE,SAAS,KAAK,QAAQ;AAEnD,UAAO,OAAO,EAAE,MAAM,IAAI;AAC1B,YAAE,qBAAqB,OAAO;AAC9B;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,aAAS,gCAAgC;AAAA,MACxC;AAAA,QACC,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,MACb;AAAA,IACD;AAAA,EACD;AAGA,+BAA6B,QAAQ;AACtC;AAEA,SAAS,+BAA+B,GAAG,IAAI;AAC9C,MAAI,CAAC,EAAE,WAAY,QAAO,CAAC,qCAAqC,EAAE,IAAI;AACtE,MAAI,EAAE,WAAW,UAAU,EAAG,QAAO,CAAC,yCAAyC,EAAE,IAAI;AACrF,QAAM,YAAY,EAAE,WAAW,EAAE,WAAW,SAAS,CAAC;AAStD,QAAM,eAAe,GAAG,gBAAgB,WAAW,UAAU,CAAC;AAC9D,MAAI,CAAC,aAAc,QAAO,CAAC,MAAM,UAAU,IAAI,mDAAmD,EAAE,IAAI;AACxG,SAAO,CAAC,MAAM,WAAW,YAAY;AACtC;AAEA,SAAS,wBAAwB,GAAG,IAAI,QAAQ;AAC/C,QAAM,CAACA,MAAK,MAAM,KAAK,IAAI,+BAA+B,GAAG,EAAE;AAC/D,MAAIA,KAAK,QAAOA;AAChB,MAAI,QAAQ;AACX,UAAM,aAAa,IAAI,KAAK,MAAM;AAAA,EACnC,OAAO;AACN,UAAM,aAAa,OAAO,KAAK,MAAM;AAAA,EACtC;AACA,SAAO;AACR;AAEO,SAAS,oBAAoB,GAAG,IAAI;AAC1C,QAAM,IAAI,GAAG,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK;AAEzC,MAAI,EAAE,YAAY;AAEjB,eAAW,KAAK,EAAE,YAAY;AAC7B,QAAE,OAAO,KAAK,EAAE;AAAA,QACf,WAAW,EAAE,MAAM,KACjB,EAAE,YAAY,+CAA+C,WAAW,EAAE,SAAS,IAAI,YAAY;AAAA,MACtG;AAAA,IACD;AAAA,EACD,WAAW,EAAE,MAAM;AAClB,MAAE,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI;AAAA,EAC5B;AAEA,QAAM,OAAO,CAAC,EAAE,QAAQ,SAAS,aAAa,EAAE,QAAQ,SAAS,IAAI,MAAM,GAAG;AAC9E,MAAI,EAAE;AACL,SAAK,KAAK,EAAE,iBAAiB,qBAAqB,KAAK,KAAM,MAAM,EAAE,QAAQ,SAAU,EAAE,cAAc,IAAI,GAAG;AAC/G,MAAI,GAAG,WAAW;AAEjB,UAAM,IAAI,GAAG,UAAU,KAAK,OAAK,EAAE,QAAQ,EAAE,IAAI;AACjD,QAAI,GAAG;AACN,WAAK,KAAK,EAAE,QAAQ,SAAS,qBAAqB,KAAK,KAAM,MAAM,EAAE,QAAQ,SAAU,EAAE,QAAQ,MAAM,IAAI,GAAG;AAAA,IAC/G;AAAA,EACD;AACA,KAAG,MAAM,EAAE,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM,EAAE,MAAM,SAAS,SAAS,EAAE,KAAK,KAAK,KAAK,MAAM,CAAC;AAErG,KAAG,MAAM,KAAK,MAAM,SAAS,MAAM,OAAO;AAC3C;AAEO,SAAS,4BAA4B,aAAa,IAAI,OAAO;AAMnE,QAAM,OAAc,QAAQ,EAAE,GAAG,MAAM,UAAU,KAAK,GAAG,KAAK,IAAI,KAAK,MAAM,UAAU,GAAG,EAAE,CAAC;AAC7F,OAAK,OAAO,KAAK,WAAW,YAAY,IAAI,IAAI,mCAAmC,WAAW,GAAG,IAAI,IAAI,SAAS;AAElH,MAAI,YAAY,QAAQ,UAAU,GAAG;AAGpC,UAAM,SAAS,YAAY,QAAQ,CAAC;AAEpC,UAAMC,SAAQ,KAAK,KAAK,OAAO,OAAO,EAAE,MAAM,UAAU,MAAM,EAAE,MAAM,kBAAkB,KAAK;AAE7F;AACC,YAAMC,MAAKD,OAAM,OAAO,IAAI;AAC5B,MAAAC,IAAG,OAAO,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,GAAG;AACnD,MAAAA,IAAG,OAAO,IAAI,EAAE,KAAK,OAAO,UAAU;AAAA,IACvC;AACA,QAAI,OAAO,YAAY;AACtB,YAAMA,MAAKD,OAAM,OAAO,IAAI;AAC5B,MAAAC,IAAG,OAAO,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,GAAG;AACxD,MAAAA,IAAG,OAAO,IAAI,EAAE,KAAK,OAAO,UAAU;AAAA,IACvC;AAEA,UAAM,CAAC,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,SAAS,SAAS,OAAO,IACvF,0BAA0B,OAAO,YAAY,OAAO,OAAO,EAAE;AAE9D,QAAI,OAAO,QAAQ;AAClB,YAAMA,MAAKD,OAAM,OAAO,IAAI;AAC5B,MAAAC,IAAG,OAAO,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,GAAG;AAChD,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AACA,QAAI,MAAM,QAAQ;AACjB,YAAMA,MAAKD,OAAM,OAAO,IAAI;AAC5B,MAAAC,IAAG,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,GAAG;AAC/C,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,WAAG,OAAO,KAAK,EACb,KAAK,MAAM,CAAC,CAAC,EACb,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,OAAO,CAAC;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,OAAO,CAAC;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AACA,QAAI,OAAO,QAAQ;AAClB,YAAMA,MAAKD,OAAM,OAAO,IAAI;AAC5B,MAAAC,IAAG,OAAO,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,GAAG;AAChD,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AACA,QAAI,OAAO,QAAQ;AAClB,YAAMA,MAAKD,OAAM,OAAO,IAAI;AAC5B,MAAAC,IAAG,OAAO,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,GAAG;AAChD,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AACA,QAAI,OAAO,QAAQ;AAClB,YAAMA,MAAKD,OAAM,OAAO,IAAI;AAC5B,MAAAC,IAAG,OAAO,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,GAAG;AACtD,YAAM,KAAKA,IAAG,OAAO,IAAI;AAEzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,cAAM,KAAK,QAAQ,CAAC,EAAE,WAAW,KAAK,OAAK,EAAE,UAAU,QAAQ,OAAO,UAAU;AAEhF,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AACA;AAAA,EACD;AAGA,QAAM,QAAQ,KAAK,KAAK,OAAO,OAAO,EAAE,MAAM,kBAAkB,KAAK,EAAE,MAAM,UAAU,MAAM;AAE7F,QAAM,gBAAgB,YAAY,QAAQ,KAAK,OAAK,EAAE,UAAU;AAGhE,QAAM,KAAK,MAAM,OAAO,IAAI;AAC5B,KAAG,OAAO,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,GAAG;AACnD,MAAI,eAAe;AAClB,OAAG,OAAO,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,GAAG;AAAA,EACzD;AACA,KAAG,OAAO,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,GAAG;AAChD,KAAG,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,GAAG;AAC/C,KAAG,OAAO,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,GAAG;AAChD,KAAG,OAAO,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,GAAG;AAEhD,MAAI,GAAG,UAAU;AAChB,OAAG,OAAO,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,GAAG;AAAA,EACvD;AAEA,aAAW,CAAC,GAAG,MAAM,KAAK,YAAY,QAAQ,QAAQ,GAAG;AACxD,UAAMA,MAAK,MAAM,OAAO,IAAI;AAE5B,QAAI,EAAE,IAAI,IAAI;AACb,MAAAA,IAAG,MAAM,cAAc,SAAS;AAAA,IACjC;AAEA,IAAAA,IAAG,OAAO,IAAI,EAAE,KAAK,OAAO,UAAU;AAEtC,QAAI,eAAe;AAClB,MAAAA,IAAG,OAAO,IAAI,EAAE,KAAK,OAAO,cAAc,EAAE;AAAA,IAC7C;AAEA,UAAM,CAAC,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,SAAS,SAAS,OAAO,IACvF,0BAA0B,OAAO,YAAY,OAAO,OAAO,EAAE;AAE9D;AACC,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AACA;AACC,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,WAAG,OAAO,KAAK,EACb,KAAK,MAAM,CAAC,CAAC,EACb,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,OAAO,CAAC;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,OAAO,CAAC;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AACA;AACC,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AAEA;AACC,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AAEA,QAAI,GAAG,UAAU;AAChB,YAAM,KAAKA,IAAG,OAAO,IAAI;AACzB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,cAAM,KAAK,QAAQ,CAAC,EAAE,WAAW,KAAK,OAAK,EAAE,UAAU,QAAQ,OAAO,UAAU;AAEhF,WAAG,OAAO,KAAK,EACb,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM,QAAQ,CAAC;AAAA,YACf,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,QAAQ,CAAC;AAAA,YACf,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AAAA,EACD;AACD;AAEO,SAAS,sBAAsB,GAAG,IAAI,OAAO;AAQnD,MAAI,EAAE,MAAM,UAAU,GAAG;AACxB,UAAM,KAAK,EAAE,MAAM,CAAC;AACpB,uBAAmB;AAAA,MAClB,MAAM;AAAA,MACN,QAAQ,GAAG;AAAA,MACX,aAAa,GAAG;AAAA,MAChB;AAAA,MACA;AAAA,IACD,CAAC;AACD;AAAA,EACD;AAEA,KAAG,MAAM,MAAM;AAEf,MAAI,aAAa;AACjB,MAAI,GAAG,qBAAqB,GAAG,kBAAkB,SAAS;AAEzD,iBAAa,GAAG,kBAAkB,QAAQ,GAAG,kBAAkB,QAAQ,SAAS,CAAC,EAAE;AAAA,EACpF;AAEA,QAAM,MAAM;AAAA,IACX;AAAA,MACC,GAAG;AAAA,MACH,GAAG,EAAE;AAAA,IACN;AAAA,EACD;AAEA,MAAI,QAAQ,GACX,YAAY;AACb,aAAW,KAAK,EAAE,OAAO;AACxB,QAAI,EAAE,MAAa,KAAM;AAAA,aAChB,EAAE,MAAa,YAAa;AAAA,EACtC;AAEA,MAAI,MAAO,KAAI,KAAK,EAAE,GAAG,WAAW,GAAG,MAAM,CAAC;AAC9C,MAAI,UAAW,KAAI,KAAK,EAAE,GAAG,eAAe,GAAG,UAAU,CAAC;AAE1D,EAAO,gBAAgB,GAAG,MAAM,GAAG,GAAG;AACtC,KAAG,MAAM,KAAK,MAAM,SAAS,MAAM,OAAO;AAC3C;AAEO,SAAS,oBAAoB,GAAG,IAAI,OAAO;AAOjD,MAAI,EAAE,MAAM,UAAU,GAAG;AACxB,UAAM,KAAK,EAAE,MAAM,CAAC;AACpB,2BAAuB;AAAA,MACtB,MAAM;AAAA,MACN,QAAQ,GAAG;AAAA,MACX,aAAa,GAAG;AAAA,MAChB;AAAA,MACA;AAAA,IACD,CAAC;AACD;AAAA,EACD;AAEA,QAAM,OAAc,QAAQ,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AAClE,OAAK,OAAO,KAAK,WAAW,EAAE,IAAI,IAAI,mCAAmC,WAAW,GAAG,IAAI,IAAI,SAAS;AAExG,QAAM,aAAa,oBAAI,IAAI;AAC3B,aAAW,KAAK,EAAE,OAAO;AACxB,QAAI,CAAC,WAAW,IAAI,EAAE,MAAM,GAAG;AAC9B,iBAAW,IAAI,EAAE,QAAQ;AAAA,QACxB,IAAI,CAAC;AAAA,QACL,QAAQ,CAAC;AAAA,MACV,CAAC;AAAA,IACF;AACA,QAAI,EAAE,MAAa,MAAM;AACxB,iBAAW,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;AAAA,IACnC,WAAW,EAAE,MAAa,aAAa;AACtC,iBAAW,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,CAAC;AAAA,IACvC;AAAA,EACD;AAEA,QAAM,QAAQ,KAAK,KAAK,OAAO,OAAO,EAAE,MAAM,kBAAkB,KAAK,EAAE,MAAM,UAAU,MAAM;AAE7F,QAAM,KAAK,MAAM,OAAO,IAAI;AAC5B,KAAG,OAAO,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,MAAM,EAAE,MAAM,WAAW,GAAG;AAC9E,KAAG,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,MAAM,EAAE,MAAM,WAAW,GAAG;AAC1E,KAAG,OAAO,IAAI,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,MAAM,EAAE,MAAM,WAAW,GAAG;AAElF,MAAI,IAAI;AACR,aAAW,CAAC,QAAQ,EAAE,KAAK,YAAY;AACtC,UAAMA,MAAK,MAAM,OAAO,IAAI;AAC5B,QAAI,EAAE,MAAM,IAAI;AACf,MAAAA,IAAG,MAAM,cAAc,SAAS;AAAA,IACjC;AAEA,IAAAA,IAAG,OAAO,IAAI,EAAE,KAAK,MAAM;AAE3B,UAAM,MAAMA,IAAG,OAAO,IAAI;AAC1B,eAAW,KAAK,GAAG,IAAI;AACtB,YAAM,aAAa,aAAa,GAAG,EAAE;AAErC,UACE,OAAO,KAAK,EACZ,KAAK,SAAS,aAAa,EAC3B;AAAA,QACA,EAAE,kBACC,WAAW,EAAE,eAAe,IAAI,mCAAmC,aAAa,YAChF;AAAA,MACJ,EACC,GAAG,aAAa,MAAM;AACtB,2BAAmB;AAAA,UAClB,MAAM;AAAA,UACN,QAAQ,EAAE;AAAA,UACV,aAAa,EAAE;AAAA,UACf;AAAA,QACD,CAAC;AAAA,MACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAG,MAAM,KAAK;AACd,qCAA6B,EAAE,OAAO;AAAA,MACvC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,+BAAuB;AAAA,UACtB,MAAM;AAAA,UACN,QAAQ,EAAE;AAAA,UACV,aAAa,EAAE;AAAA,UACf;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,MAAMA,IAAG,OAAO,IAAI;AAC1B,eAAW,KAAK,GAAG,QAAQ;AAC1B,UACE,OAAO,KAAK,EACZ,KAAK,SAAS,aAAa,EAC3B,KAAK,WAAW,kBAAkB,CAAC,CAAC,IAAI,mCAAmC,aAAa,GAAG,EAAE,IAAI,SAAS,EAC1G,GAAG,aAAa,MAAM;AACtB,2BAAmB;AAAA,UAClB,MAAM;AAAA,UACN,QAAQ,EAAE;AAAA,UACV,aAAa,EAAE;AAAA,UACf;AAAA,QACD,CAAC;AAAA,MACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAG,MAAM,KAAK;AACd,qCAA6B,EAAE,OAAO;AAAA,MACvC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,+BAAuB;AAAA,UACtB,MAAM;AAAA,UACN,QAAQ,EAAE;AAAA,UACV,aAAa,EAAE;AAAA,UACf;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACD;AACD;AAEO,SAAS,qBAAqB,GAAG,IAAI,OAAO;AASlD,QAAM,OAAc,QAAQ,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AAClE,OAAK,OAAO,KAAK,GAAG,IAAI;AAExB,MAAI,EAAE,MAAM,UAAU,GAAG;AAExB,UAAM,IAAI,EAAE,MAAM,CAAC;AAEnB,UAAM,SAAS,KAAK,KAAK,OAAO,KAAK,EAAE,MAAM,UAAU,MAAM;AAE7D,QAAI,EAAE,MAAa,YAAY;AAC9B,UAAI,EAAE,WAAW,UAAU,GAAG;AAE7B,aAAK,KAAK,OAAO;AAEjB,cAAM,CAAC,QAAQ,WAAW,IAAI,sBAAsB;AAAA,UACnD;AAAA,UACA,UAAU,EAAE,WAAW,CAAC;AAAA,UACxB;AAAA,QACD,CAAC;AACD,cAAM,KAAK,EAAE,WAAW,CAAC;AACzB,+BAAuB;AAAA,UACtB,MAAM;AAAA,UACN,UAAU,EAAE,WAAW,CAAC;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,CAAC;AACD;AAAA,MACD;AAuBA,YAAM,MAAM,iBAAiB,GAAG,EAAE;AAClC,YAAMD,SAAe,gBAAgB,KAAK,MAAM,GAAG;AACnD,YAAM,KAAKA,OAAM,OAAO,IAAI;AAC5B,SAAG,OAAO,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,WAAW,CAAC;AAEvE,YAAM,KAAK,GAAG,OAAO,IAAI;AACzB,iBAAW,MAAM,EAAE,YAAY;AAC9B,cAAM,CAAC,QAAQ,WAAW,IAAI,sBAAsB;AAAA,UACnD;AAAA,UACA,UAAU;AAAA,UACV;AAAA,QACD,CAAC;AAED,WAAG,OAAO,KAAK,EACb,KAAK,GAAG,UAAU,IAAI,EACtB,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB,MAAM;AAAA,YACN,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM;AAAA,YACN,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AACA,uCAAiC,GAAG,OAAOA,MAAK;AAAA,IACjD,OAAO;AACN,YAAM,iBAAiB,EAAE;AAAA,IAC1B;AACA;AAAA,EACD;AAMA,QAAM,QAAQ,KAAK,KAAK,OAAO,OAAO,EAAE,MAAM,cAAc,MAAM,EAAE,MAAM,kBAAkB,KAAK;AAEjG,aAAW,KAAK,EAAE,OAAO;AACxB,UAAM,KAAK,MAAM,OAAO,IAAI;AAG5B,OAAG,OAAO,IAAI,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,SAAgB,OAAO,EAAE,KAAK,EAAE,KAAK,EAC3C,MAAM,eAAe,MAAM,EAC3B,MAAM,kBAAkB,KAAK;AAI/B;AACC,YAAM,KAAK,GAAG,OAAO,IAAI;AACzB,UAAI,EAAE,MAAa,YAAY;AAC9B,WAAG,MAAM,WAAW,IAAI,EACtB,KAAK,EAAE,MAAM,QAAQ,EAAE,GAAG,EAC1B,MAAM,kBAAkB,KAAK;AAAA,MAChC;AAAA,IACD;AAGA;AACC,YAAM,KAAK,GAAG,OAAO,IAAI;AACzB,UAAI,EAAE,MAAa,YAAY;AAG9B,mBAAW,YAAY,EAAE,YAAY;AACpC,gBAAM,CAAC,GAAG,EAAE,IAAI,sBAAsB;AAAA,YACrC;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AACD,aAAG,OAAO,KAAK,EACb,KAAK,SAAS,UAAU,IAAI,EAC5B,KAAK,SAAS,aAAa,EAC3B,GAAG,aAAa,MAAM;AACtB,+BAAmB;AAAA,cAClB,MAAM;AAAA,cACN;AAAA,cACA,QAAQ;AAAA,cACR,aAAa;AAAA,cACb;AAAA,cACA;AAAA,YACD,CAAC;AAAA,UACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,eAAG,MAAM,KAAK;AACd,yCAA6B,CAAC;AAAA,UAC/B,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,mCAAuB;AAAA,cACtB,MAAM;AAAA,cACN;AAAA,cACA,QAAQ;AAAA,cACR,aAAa;AAAA,cACb;AAAA,cACA;AAAA,YACD,CAAC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACD,OAAO;AACN,gBAAQ,MAAM,iBAAiB,EAAE,EAAE;AAAA,MACpC;AAAA,IACD;AAAA,EACD;AACD;AAEO,SAAS,uBAAuB,GAAG,IAAI,OAAO;AAOpD,KAAG,MAAM,MAAM;AAEf,MAAI,EAAE,MAAM,UAAU,GAAG;AAExB,UAAM,IAAI,EAAE,MAAM,CAAC;AAEnB,QAAI,EAAE,MAAa,YAAY;AAC9B,UAAI,EAAE,WAAW,UAAU,GAAG;AAE7B,cAAM,CAAC,QAAQ,WAAW,IAAI,sBAAsB;AAAA,UACnD;AAAA,UACA,UAAU,EAAE,WAAW,CAAC;AAAA,UACxB;AAAA,QACD,CAAC;AACD,2BAAmB;AAAA,UAClB,MAAM;AAAA,UACN,UAAU,EAAE,WAAW,CAAC;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,CAAC;AACD;AAAA,MACD;AAGA,YAAM,MAAM,iBAAiB,GAAG,EAAE;AAClC,UAAI,KAAK;AAAA,QACR,GAAG;AAAA,QACH,GACC,EAAE,WAAW,SAAS,KACnB,EAAE,WACD,MAAM,GAAG,CAAC,EACV,IAAI,OAAK,EAAE,UAAU,IAAI,EACzB,KAAK,MAAM,IACZ,qBACC,EAAE,WAAW,SAAS,KACvB,sBACA,EAAE,WAAW,IAAI,OAAK,EAAE,UAAU,IAAI,EAAE,KAAK,MAAM;AAAA,MACxD,CAAC;AAED,YAAMA,SAAe,gBAAgB,GAAG,MAAM,GAAG,GAAG;AAGpD,uCAAiC,GAAG,OAAOA,MAAK;AAEhD,SAAG,MAAM,KAAK,MAAM,SAAS,MAAM,OAAO;AAAA,IAC3C,OAAO;AACN,YAAM,iBAAiB,EAAE;AAAA,IAC1B;AACA;AAAA,EACD;AAGA,KAAG,MAAM,EACP,OAAO,KAAK,EACZ,MAAM,aAAa,MAAM,EACzB,MAAM,iBAAiB,KAAK,EAC5B,KAAK,EAAE,MAAM,SAAS,MAAa,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,iBAAiB,EAAE,cAAc,UAAU;AACjH,QAAM,QAAQ,GAAG,MAAM,EAAE,OAAO,OAAO,EAAE,MAAM,kBAAkB,KAAK;AACtE,aAAW,KAAK,EAAE,OAAO;AACxB,UAAM,KAAK,MAAM,OAAO,IAAI;AAC5B,OAAG,OAAO,IAAI,EAAE,MAAM,SAAgB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,MAAM,EAAE,KAAK,EAAE,KAAK;AAEtG,OAAG,OAAO,IAAI,EACZ,MAAM,aAAa,MAAM,EACzB,MAAM,WAAW,IAAI,EACrB,KAAK,EAAE,MAAM,QAAQ,EAAE,GAAG;AAE5B,UAAM,KAAK,GAAG,OAAO,IAAI,EAAE,MAAM,aAAa,MAAM;AAEpD,QAAI,EAAE,MAAa,YAAY;AAC9B,SAAG,KAAK,EAAE,WAAW,UAAU,IAAI,EAAE,WAAW,CAAC,EAAE,UAAU,OAAO,MAAM,EAAE,WAAW,SAAS,WAAW;AAAA,IAC5G,OAAO;AACN,SAAG,KAAK,iBAAiB,EAAE,EAAE;AAAA,IAC9B;AAAA,EACD;AAEA,KAAG,MAAM,KAAK,MAAM,SAAS,MAAM,OAAO;AAC3C;AAEA,eAAsB,uBAAuB,GAAG;AAmB/C,QAAM,OAAc,QAAQ,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AAClE,OAAK,OAAO,KAAK,EAAE,GAAG,IAAI;AAE1B,QAAM,OAAO,CAAC;AACd,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,SAAO;AAChB,QAAE,SAAS;AACX,+BAAyB,CAAC;AAAA,IAC3B;AAAA,EACD,CAAC;AAED,oBAAkB,MAAM,CAAC;AACzB,oBAAkB,MAAM,CAAC;AACzB,kBAAgB,MAAM,CAAC;AACvB,mBAAiB,MAAM,CAAC;AAUxB,8BAA4B,MAAM,EAAE,OAAO,YAAY,EAAE,IAAI,EAAE,KAAK;AACpE,iCAA+B,MAAM;AAAA,IACpC,IAAI,EAAE;AAAA,IACN,OAAO,EAAE;AAAA,IACT,GAAG,EAAE;AAAA,IACL,QAAQ,EAAE;AAAA,EACX,CAAC;AACD,iBAAe,MAAM;AAAA,IACpB,IAAI,EAAE;AAAA,IACN,OAAO,EAAE;AAAA,IACT,GAAG,EAAE;AAAA,IACL,QAAQ,EAAE;AAAA,IACV,aAAa,EAAE;AAAA,EAChB,CAAC;AAED,EAAO,QAAQ,KAAK,KAAK,MAAM,eAAe,MAAM,GAAG,IAAI;AAC5D;AAEO,SAAS,mBAAmB,GAAG;AAMrC,4BAA0B,EAAE,MAAM;AAElC,IAAE,SAAS,EAAE,GAAG,MAAM,MAAM,EAAE;AAE9B,2BAAyB,CAAC;AAG1B,IAAE,GAAG,MAAM,KAAK,MAAM,SAAS,MAAM,OAAO;AAC7C;AAEO,SAAS,yBAAyB,GAAG;AAY3C,QAAM,MAAM,CAAC;AAEb,MAAI,EAAE,QAAQ;AACb,QAAI,KAAK;AAAA,MACR,GAAG;AAAA,MACH,GAAG,EAAE,OAAO;AAAA,IACb,CAAC;AAED,6BAAyB,EAAE,OAAO,YAAY,EAAE,IAAI,GAAG;AAAA,EACxD,OAAO;AAAA,EAEP;AAEA,QAAM,IAAI,EAAE;AAGZ,MAAI;AAEJ,MAAI,EAAE,MAAa,OAAO;AACzB,QAAI,KAAK;AAAA,MACR,GAAG;AAAA,MACH,GAAG,EAAE,MAAM,OAAO,EAAE,QAAQ,KAAK,OAAO,EAAE,OAAO;AAAA,IAClD,CAAC;AAED,QAAI,EAAE,QAAQ,EAAE,SAAS;AACxB,YAAM,IAAI,CAAC;AACX,UAAI,EAAE,KAAM,GAAE,KAAK,EAAE,IAAI;AACzB,UAAI,EAAE,QAAS,GAAE,KAAK,EAAE,OAAO;AAC/B,UAAI,KAAK,EAAE,GAAG,QAAQ,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;AAAA,IACxC;AAEA,QAAI,EAAE,cAAc;AACnB,UAAI,KAAK,EAAE,GAAG,kBAAkB,GAAG,EAAE,eAAe,MAAM,CAAC;AAAA,IAC5D;AACA,QAAI,EAAE,aAAa;AAClB,UAAI,KAAK,EAAE,GAAG,iBAAiB,GAAG,EAAE,cAAc,MAAM,CAAC;AAAA,IAC1D;AAEA,YAAQ,EAAE;AAAA,EACX,WAAW,EAAE,MAAa,SAAS,EAAE,MAAa,OAAO;AACxD,QAAI,EAAE,MAAa,OAAO;AACzB,UAAI,KAAK;AAAA,QACR,GAAG;AAAA,QACH,GAAG,EAAE,QAAQ,QAAQ,CAAC;AAAA,MACvB,CAAC;AAAA,IACF,OAAO;AACN,UAAI,KAAK;AAAA,QACR,GAAG;AAAA,QACH,GACC,8CACC,EAAE,QAAQ,IAAI,EAAE,GAAG,SAAS,KAAK,MAAM,EAAE,GAAG,SAAS,KAAK,OAC3D,oBACA,EAAE,MAAM,QAAQ,CAAC,IACjB;AAAA,MACF,CAAC;AACD,UAAI,KAAK;AAAA,QACR,GAAG;AAAA,QACH,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,QAAQ,CAAC;AAAA,MACxC,CAAC;AAAA,IACF;AAEA,QAAI,KAAK;AAAA,MACR,GAAG;AAAA,MACH,GACC,EAAE,MACF,OACC,EAAE,QAAQ,KACX,OACC,EAAE,OAAO,KACV,mCACO,MAAM,EAAE,OAAO,EAAE,KAAK,IAC7B;AAAA,IACF,CAAC;AAED,YAAQ,EAAE;AAAA,EACX,WAAW,EAAE,MAAa,QAAQ,EAAE,MAAa,aAAa;AAC7D;AACC,UAAI,KAAK;AAAA,QACR,GAAG,EAAE,MAAa,OAAO,OAAO;AAAA,QAChC,GAAG,WAAW,kBAAkB,CAAC,CAAC,IAAI,mCAAmC,aAAa,GAAG,EAAE,EAAE,IAAI;AAAA,MAClG,CAAC;AAAA,IACF;AAEA,QAAI,EAAE,aAAa,EAAE,WAAW;AAC/B,UAAI,KAAK;AAAA,QACR,GAAG;AAAA,QACH,GACC,oEACC,OAAO,UAAU,EAAE,SAAS,IAAI,EAAE,YAAY,OAC/C,SACC,OAAO,UAAU,EAAE,UAAU,IAAI,EAAE,aAAa,OACjD,wEAEC,OAAO,UAAU,EAAE,SAAS,IAAI,EAAE,YAAY,OAC/C,SACC,OAAO,UAAU,EAAE,UAAU,IAAI,EAAE,aAAa;AAAA,MACnD,CAAC;AAAA,IACF;AAEA,YAAQ,EAAE;AAAA,EACX,WAAW,EAAE,MAAa,YAAY;AACrC,UAAM,MAAM,iBAAiB,GAAG,EAAE,EAAE;AACpC,eAAW,KAAK,IAAK,KAAI,KAAK,CAAC;AAE/B,QAAI,EAAE,UAAU;AAOf,cAAQ,CAAC;AAET,YAAM,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,SAAS;AAEvD,iBAAW,eAAe,EAAE,UAAU;AACrC,YAAI,eAAe,aAAa;AAE/B;AAAA,QACD;AAKA,YAAI,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,oBAAoB;AAC5C,gBAAM,SAAS,EAAE,GAAG,IAAI,mBAAmB,KAAK,WAAW;AAC3D,cAAI,QAAQ;AAEX,kBAAM,MAAM,EAAE,SAAS,WAAW;AAClC,kBAAM,IAAI,OAAO,WAAW,GAAG;AAE/B,gBAAI,CAAC,EAAE,QAAQ;AACd,oBAAM,QAAQ,IAAI,EAAE,OAAO,cAAc,MAAM;AAC/C,oBAAM,QAAQ,IAAI,EAAE,QAAQ;AAC5B,kBAAI,KAAK;AAAA,gBACR,GAAG,OAAO;AAAA,gBACV,GAAG,6BAA6B,QAAQ,iCAAiC;AAAA,cAC1E,CAAC;AAAA,YACF;AACA;AAAA,UACD;AAAA,QACD;AAEA,YAAI,EAAE,GAAG,qBAAqB,EAAE,GAAG,kBAAkB,YAAY;AAEhE,cAAI,EAAE,GAAG,kBAAkB,WAAW,WAAW,GAAG;AACnD,kBAAM,WAAW,IAAI,EAAE,SAAS,WAAW;AAC3C;AAAA,UACD;AAAA,QACD;AAQA,cAAM,aAAa,UAAU,QAAQ,WAAW,IAAI;AAEpD,YAAI,YAAY;AAEf,cAAI,mBAAmB,WAAW,UAAU,OAAO,WAAW,UAAU;AACxE,cAAI,CAAC,kBAAkB;AACtB,gBAAI,eAAe,MAAM;AAExB,iCAAmB;AAAA,YACpB;AAAA,UACD;AAEA,cAAI,kBAAkB;AAGrB,kBAAM,UAAU,CAAC;AACjB,kBAAM,SAAS,CAAC;AAChB,gBAAI;AAGJ,uBAAW,OAAO,EAAE,SAAS,WAAW,GAAG;AAC1C,kBAAI,OAAO,EAAE,IAAK;AAClB,sBAAQ,KAAK,GAAG;AAChB,yBAAW,EAAE,SAAS,WAAW,EAAE,GAAG;AACtC,qBAAO,KAAK,QAAQ;AAAA,YACrB;AAGA,kBAAM,WAAW,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG;AAC9C,gBAAI,YAAY,QAAW;AAC1B,sBAAQ,KAAK,EAAE,GAAG;AAClB,qBAAO,KAAK,QAAQ;AAAA,YACrB;AAEA,gBAAI;AACJ,gBAAI,WAAW,WAAW,GAAG;AAC5B,uBAAgB,QAAQ,MAAM,EAAE,GAAG,YAAY,WAAW,UAAU,CAAC;AAAA,YACtE;AAEA,gBAAI,KAAK;AAAA,cACR,GAAG;AAAA,cACH,IACE,SAAS,SAAS,MAAM,MACzB,6CACA,QAAQ,KAAK,KAAK,IAClB,aACA,OAAO,KAAK,KAAK,KAChB,WAAW,cACT,8CAA8C,WAAW,cAAc,YACvE;AAAA,YACL,CAAC;AACD;AAAA,UACD;AAAA,QACD;AAEA,YAAI,KAAK;AAAA,UACR,GAAG;AAAA,UACH,GAAG,EAAE,SAAS,WAAW;AAAA,QAC1B,CAAC;AAAA,MACF;AAAA,IAED;AAAA,EACD,OAAO;AACN,QAAI,KAAK,EAAE,GAAG,gBAAgB,GAAG,EAAE,GAAG,CAAC;AAAA,EACxC;AAEA,MAAI,OAAO;AAEV,eAAW,OAAO,OAAO;AACxB,YAAM,OAAO,EAAE,GAAG,oBAAoB,EAAE,GAAG,kBAAkB,WAAW,GAAG,IAAI;AAC/E,YAAM,OAAO,MAAM,GAAG;AAEtB,UAAI,MAAM;AACT,YAAI,KAAK,eAAe;AAGvB,cAAI,CAAC,MAAM;AAEV;AAAA,UACD;AAEA,cAAI,KAAK;AAAA,YACR,GAAG,KAAK;AAAA,YACR,GAAG,KACD,MAAM,GAAG,EACT,IAAI,QAAM,2BAA2B,KAAK,gBAAgB,KAAK,MAAM,KAAK,MAAM,EAChF,KAAK,GAAG;AAAA,UACX,CAAC;AACD;AAAA,QACD;AAEA,YAAI,KAAK,QAAQ;AAEhB,gBAAM,KAAK,KAAK,OAAO,IAAI;AAC3B,cAAI,IAAI;AACP,gBAAI,KAAK;AAAA,cACR,GAAG,KAAK;AAAA,cACR,GACC,WAAW,GAAG,IAAI,KACjB,GAAG,QAAQ,8CAA8C,WAAW,GAAG,KAAK,IAAI,YAAY;AAAA,YAC/F,CAAC;AACD;AAAA,UACD;AAAA,QACD;AAGA,YAAI,KAAK;AAAA,UACR,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,QACJ,CAAC;AAAA,MACF,OAAO;AACN,YAAI,KAAK;AAAA,UACR,GAAG;AAAA,UACH,GAAG;AAAA,QACJ,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAEA,uBAAqB,GAAG,GAAG;AAE3B,QAAM,QAAe,gBAAgB,EAAE,QAAQ,GAAG;AAElD,MAAI,EAAE,MAAa,YAAY;AAC9B,qCAAiC,GAAG,EAAE,OAAO,KAAK;AAAA,EACnD;AACD;AAEA,SAAS,qBAAqB,GAAG,OAAO;AACvC,QAAM,KAAK,EAAE;AACb,MAAI,CAAC,GAAI;AACT,QAAM,SAAS,EAAE;AACjB,MAAI,CAAC,OAAQ;AACb,MAAI,CAAC,OAAO,eAAgB;AAG5B,QAAM,OAAO,CAAC;AAEd,aAAW,YAAY,OAAO,gBAAgB;AAC7C,UAAM,IAAI,OAAO,eAAe,QAAQ;AACxC,UAAM,MAAM;AAAA,MACX,gBAEC,WACA,iEAEO,SAAS,EAAE,IAAI,IACtB,iDAEA,GAAG,MAAM,WACT,aACA,EAAE,QACF;AAAA,IAEF;AAEA,QAAI,EAAE,OAAO;AACZ,UAAI,EAAE,MAAM,eAAe;AAC1B,YAAI;AAAA,UACH,6CACC,GAAG,MAAM,IAAI,kBACb;AAAA,QACF;AAAA,MACD,WAAW,EAAE,MAAM,eAAe;AACjC,YAAI;AAAA,UACH,6CAA6C,GAAG,MAAM,IAAI,kBAAkB;AAAA,QAC7E;AAAA,MACD,WAAW,EAAE,MAAM,iBAAiB;AACnC,YAAI;AAAA,UACH,6CACC,GAAG,MAAM,IAAI,oBACb;AAAA,QACF;AAAA,MACD;AACA,UAAI,EAAE,MAAM,SAAS;AACpB,YAAI;AAAA,UACH,6CACC,GAAG,MAAM,QAAQ,gBACjB;AAAA,QACF;AAAA,MACD,WAAW,EAAE,MAAM,iBAAiB;AACnC,YAAI;AAAA,UACH,6CACC,GAAG,MAAM,QAAQ,wBACjB;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAEA,QAAI,KAAK,YAAY;AACrB,SAAK,KAAK,IAAI,KAAK,EAAE,CAAC;AAAA,EACvB;AAEA,MAAI,GAAG,SAAS,GAAG,MAAM,OAAO;AAC/B,eAAW,SAAS,GAAG,MAAM,OAAO;AACnC,UAAI,MAAM,eAAe,MAAM,YAAY,OAAO,UAAU,GAAG;AAC9D,cAAM,IAAI,MAAM,YAAY,OAAO,UAAU;AAC7C,cAAM,MAAM;AAAA,UACX,gBAEC,MAAM,OACN,iEAEO,SAAS,EAAE,IAAI,IACtB,iDAEA,GAAG,MAAM,WACT,aACA,EAAE,QACF;AAAA,QAEF;AAEA,YAAI,EAAE,OAAO;AACZ,cAAI,EAAE,MAAM,eAAe;AAC1B,gBAAI;AAAA,cACH,6CACC,GAAG,MAAM,IAAI,kBACb;AAAA,YACF;AAAA,UACD,WAAW,EAAE,MAAM,eAAe;AACjC,gBAAI;AAAA,cACH,6CACC,GAAG,MAAM,IAAI,kBACb;AAAA,YACF;AAAA,UACD,WAAW,EAAE,MAAM,iBAAiB;AACnC,gBAAI;AAAA,cACH,6CACC,GAAG,MAAM,IAAI,oBACb;AAAA,YACF;AAAA,UACD;AACA,cAAI,EAAE,MAAM,SAAS;AACpB,gBAAI;AAAA,cACH,6CACC,GAAG,MAAM,QAAQ,gBACjB;AAAA,YACF;AAAA,UACD,WAAW,EAAE,MAAM,iBAAiB;AACnC,gBAAI;AAAA,cACH,6CACC,GAAG,MAAM,QAAQ,wBACjB;AAAA,YACF;AAAA,UACD;AAAA,QACD;AAEA,YAAI,KAAK,YAAY;AACrB,aAAK,KAAK,IAAI,KAAK,EAAE,CAAC;AAAA,MACvB;AAAA,IACD;AAAA,EACD;AAEA,MAAI,KAAK,QAAQ;AAChB,UAAM,KAAK;AAAA,MACV,GAAG;AAAA,MACH,GAAG,mCAAmC,KAAK,KAAK,EAAE,IAAI;AAAA,IACvD,CAAC;AAAA,EACF;AACD;AAEA,SAAS,iBAAiB,GAAG,IAAI;AAMhC,QAAM,MAAM,CAAC;AAEb;AAEC,UAAM,KAAY,OAAO,EAAE,KAAK;AAChC,QAAI,KAAK;AAAA,MACR,GAAG;AAAA,MACH,IACE,EAAE,QAAQ,wBAAwB,GAAG,QAAQ,OAAO,EAAE,QAAQ,YAAY,MAC3E,mCACA,GAAG,QACH;AAAA,IACF,CAAC;AAAA,EACF;AAEA;AACC,UAAM,UAAU,CAAC;AACjB,QAAI,EAAE,KAAM,SAAQ,KAAK,EAAE,IAAI;AAC/B,QAAI,EAAE,QAAS,SAAQ,KAAK,EAAE,OAAO;AACrC,QAAI,QAAQ,QAAQ;AACnB,UAAI,KAAK;AAAA,QACR,GAAG;AAAA,QACH,GAAG,QAAQ,KAAK,GAAG;AAAA,MACpB,CAAC;AAAA,IACF;AAAA,EACD;AAEA,MAAI,KAAK;AAAA,IACR,GAAG;AAAA,IACH,GAAG,EAAE,MAAM,OAAO,EAAE,MAAM;AAAA,EAC3B,CAAC;AACD,MAAI,KAAK;AAAA,IACR,GAAG;AAAA,IACH,GAAG,4DAA4D,EAAE,MAAM,QAAQ,EAAE;AAAA,EAClF,CAAC;AAED,MAAI,MAAM,GAAG,mBAAmB,GAAG,gBAAgB,YAAY;AAC9D,eAAW,OAAO,GAAG,gBAAgB,YAAY;AAChD,YAAM,OAAO,GAAG,gBAAgB,WAAW,GAAG;AAC9C,UAAI,KAAK;AAAA,QACR,GAAG,KAAK;AAAA,QACR,GAAG,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI;AAAA,MACjC,CAAC;AAAA,IACF;AAAA,EACD;AAEA,MAAI,MAAM,GAAG,kBAAkB,GAAG,eAAe,YAAY;AAC5D,eAAW,OAAO,GAAG,eAAe,YAAY;AAC/C,YAAM,OAAO,GAAG,eAAe,WAAW,GAAG;AAE7C,YAAM,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI;AAGpC,UAAI,KAAK,eAAe;AACvB,YAAI,CAAC,MAAM;AAEV;AAAA,QACD;AAEA,YAAI,KAAK;AAAA,UACR,GAAG,KAAK;AAAA,UACR,GAAG,KACD,MAAM,GAAG,EACT,IAAI,QAAM,2BAA2B,KAAK,gBAAgB,KAAK,MAAM,KAAK,MAAM,EAChF,KAAK,GAAG;AAAA,QACX,CAAC;AACD;AAAA,MACD;AAEA,UAAI,KAAK;AAAA,QACR,GAAG,KAAK;AAAA,QACR,GAAG,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI;AAAA,MAC3B,CAAC;AAAA,IACF;AAAA,EACD;AAEA,SAAO;AACR;AAEA,SAAS,sBAAsB,GAAG;AAOjC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAa,YAAY;AAChC,QAAI,CAAC,EAAE,SAAU,OAAM;AACvB,iBAAa,EAAE,SAAS,UAAU;AAAA,EACnC,OAAO;AACN,UAAM;AAAA,EACP;AAEA,aAAW,KAAK,EAAE,GAAG,OAAO;AAC3B,eAAW,UAAU,EAAE,SAAS;AAC/B,UAAI,OAAO,cAAc,YAAY;AACpC,eAAO,CAAC,QAAQ,CAAC;AAAA,MAClB;AAAA,IACD;AAAA,EACD;AACA,SAAO,CAAC,IAAI,EAAE;AACf;AAEO,SAAS,WAAW,KAAK,IAAI;AAEnC,MAAI,GAAG,kBAAkB,UAAU,IAAI,GAAG,GAAG;AAC5C,WACC,6BACA,GAAG,kBAAkB,UAAU,GAAG,IAClC,oDACA,WAAW,GAAG,IACd;AAAA,EAEF;AACA,SAAO,WAAW,GAAG;AACtB;AAEO,SAAS,aAAa,GAAG,IAAI;AACnC,SACC,WAAW,EAAE,MAAM,EAAE,IACrB,MACA,WAAW,EAAE,IAAI,KAChB,EAAE,UAAU,MAAM,WAAW,EAAE,OAAO,IAAI,MAC3C,cACA,WAAW,EAAE,MAAM,EAAE,IACrB,MACA,WAAW,EAAE,IAAI,KAChB,EAAE,UAAU,MAAM,WAAW,EAAE,OAAO,IAAI;AAE7C;AAEA,SAAS,0BAA0B,YAAY,KAAK,IAAI;AAOvD,QAAM,SAAS,CAAC,GACf,QAAQ,CAAC,GACT,SAAS,CAAC,GACV,SAAS,CAAC,GACV,SAAS,CAAC,GACV,UAAU,CAAC,GACX,SAAS,CAAC,GACV,UAAU,CAAC,GACX,UAAU,CAAC,GACX,UAAU,CAAC;AAEZ;AAEC,UAAM,YAAY,IAAI,OAAO,OAAK,EAAE,MAAa,QAAQ,EAAE,MAAa,WAAW;AACnF,UAAM,UAAU,SAAS,SAAS;AAClC,eAAW,KAAK,SAAS;AACxB,YAAM;AAAA,QACL,qCACC,WAAW,kBAAkB,CAAC,CAAC,IAC/B,mCACA,aAAa,GAAG,EAAE,IAClB,aACC,EAAE,MAAa,cAAc,sDAAsD,MACpF;AAAA,MACF;AACA,aAAO,KAAK,CAAC;AAAA,IACd;AAAA,EACD;AAEA,aAAW,KAAK,KAAK;AACpB,QAAI,EAAE,MAAa,QAAQ,EAAE,MAAa,YAAa;AAEvD,QAAI,EAAE,MAAa,OAAO;AACzB,aAAO;AAAA,QACN,qCACC,WAAW,EAAE,GAAG,IAChB,OACC,EAAE,QAAQ,KACX,OACC,EAAE,OAAO,KACV,mCACO,MAAM,EAAE,OAAO,EAAE,KAAK,IAC7B,gBACA,WAAW,EAAE,OAAO,IACpB;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IACf,WAAW,EAAE,MAAa,OAAO;AAChC,aAAO;AAAA,QACN,qCACC,WAAW,EAAE,GAAG,IAChB,OACC,EAAE,QAAQ,KACX,OACC,EAAE,OAAO,KACV,mCACO,MAAM,EAAE,OAAO,EAAE,KAAK,IAC7B,sCAEC,EAAE,QAAQ,IAAI,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,KAAK,OACvD,wCACA,WAAW,EAAE,KAAK,IAClB;AAAA,MAEF;AACA,cAAQ,KAAK,CAAC;AAAA,IACf,WAAW,EAAE,MAAa,OAAO;AAChC,aAAO;AAAA,QACN,qCACC,WAAW,EAAE,GAAG,IAChB,OACC,EAAE,QAAQ,KACX,OACC,EAAE,OAAO,MACT,EAAE,eAAe,OAAO,WAAW,EAAE,YAAY,IAAI,0BAA0B,OAC/E,EAAE,cAAc,OAAO,WAAW,EAAE,WAAW,IAAI,mBAAmB,MACvE;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IACf,OAAO;AACN,YAAM,iBAAiB,EAAE;AAAA,IAC1B;AAAA,EACD;AAEA,MAAI,GAAG,UAAU;AAChB,eAAW,KAAK,GAAG,UAAU;AAC5B,UAAI,EAAE,MAAa,YAAY;AAC9B,YAAI,EAAE,WAAW,KAAK,OAAK,EAAE,UAAU,QAAQ,UAAU,GAAG;AAC3D,gBAAM,IAAW,OAAO,EAAE,KAAK;AAC/B,iBAAO;AAAA,YACN,wDAEC,EAAE,QACF,wBACA,WAAW,EAAE,KAAK,IAClB,0CAEA,EAAE,QACF;AAAA,UACF;AACA,kBAAQ,KAAK,CAAC;AAAA,QACf;AAAA,MACD,OAAO;AACN,cAAM,iBAAiB,EAAE;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAEA,SAAO,CAAC,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,SAAS,SAAS,OAAO;AAC1F;AAEA,SAAS,sBAAsB,aAAa,IAAI,OAAO;AAKtD,MAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,2BAA4B;AACnD,MAAI,CAAC,YAAY,WAAY;AAG7B,QAAM,OAAO,YAAY,WAAW,KAAK,OAAK,EAAE,KAAK,GAAG,IAAI,2BAA2B,GAAG;AAC1F,MAAI,CAAC,KAAM;AAGX,QAAM,YAAY,GAAG,IAAI,2BAA2B,OAAO,KAAK,MAAM;AACtE,MAAI,CAAC,UAAW;AAEhB,MAAI,CAAC,UAAU,OAAQ;AAGvB,aAAW,SAAS,UAAU,QAAQ;AACrC,QAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,aAAc;AAExC,OAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,WAAW,MAAM,IAAI,IAAI,yDAAyD,EACvF,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,SAAG,KAAK,KAAK;AAEb,YAAM,OAAc,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC;AAC9C,WAAK,OAAO,KAAK,MAAM,OAAO,UAAU;AAExC,YAAM,MAAM;AAAA,QACX,SAAS,GAAG,IAAI;AAAA,QAChB,WAAW,MAAM;AAAA,QACjB,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,KAAK,MAAM;AAAA,QACX,QAAQ,KAAK,KAAK,OAAO,KAAK,EAAE,MAAM,UAAU,MAAM;AAAA,MACvD;AAEA,iBAAW,KAAK,MAAM,cAAc;AACnC,YAAI,CAAC,IAAI,MAAM,aAAa,CAAC;AAAA,MAC9B;AAEA,aAAO,4BAAgB,EAAE,KAAK,OAAK;AAClC,YAAI,EAAE,aAAa,GAAG;AAAA,MACvB,CAAC;AAAA,IACF,CAAC;AAAA,EACH;AACD;AAEO,SAAS,yBAAyB,YAAY,IAAI,KAAK;AAC7D,MAAI,CAAC,GAAG,gBAAiB;AACzB,MAAI,CAAC,GAAG,gBAAgB,cAAc,CAAC,GAAG,gBAAgB,QAAS;AAInE,QAAM,OAAO,GAAG,gBAAgB,QAAQ,UAAU;AAClD,MAAI,CAAC,KAAM;AAGX,aAAW,OAAO,MAAM;AAEvB,UAAM,SAAS,GAAG,gBAAgB,WAAW,GAAG,KAAK,CAAC;AAEtD,UAAM,QAAQ,KAAK,GAAG;AAEtB,QAAI,SAAS,OAAW;AAExB,QAAI,aAAa;AACjB,QAAI,OAAO,QAAQ;AAClB,YAAM,IAAI,OAAO,OAAO,KAAK;AAC7B,UAAI,KAAK,EAAE,MAAM;AAChB,qBAAa,EAAE;AAAA,MAChB;AAAA,IACD;AAEA,QAAI,KAAK;AAAA,MACR,GAAG,OAAO,SAAS;AAAA,MACnB,GAAG;AAAA,IACJ,CAAC;AAAA,EACF;AACD;AAEA,SAAS,kBAAkB,MAAM,GAAG;AACnC,MAAI,CAAC,EAAE,KAAM;AACb,MAAI,EAAE,KAAK,MAAa,QAAQ,EAAE,KAAK,MAAa,YAAa;AACjE,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,OAAM,QAAO;AACtB,YAAM,OAAc,SAAS,GAAG;AAChC,YAAM,aAAa,GAAG,GAAG;AACzB,WAAK,OAAO;AAAA,IACb;AAAA,EACD,CAAC;AACF;AAEA,eAAsB,aAAa,GAAG,QAAQ;AAC7C,QAAM,SAAS;AAAA,IACd,GAAG;AAAA,MACF,KAAK,EAAE,KAAK;AAAA,MACZ,UAAU,EAAE,KAAK;AAAA,MACjB,QAAQ,EAAE,KAAK;AAAA,IAChB;AAAA,IACA,GAAG;AAAA,MACF,KAAK,EAAE,KAAK;AAAA,MACZ,UAAU,EAAE,KAAK;AAAA,MACjB,QAAQ,EAAE,KAAK;AAAA,IAChB;AAAA,EACD;AAEA,QAAM,OAAO,OAAO,OAAO,KAAK;AAEhC,MAAI;AAGH;AACC,WAAK,KAAK,qBAAqB,OAAO,EAAE,MAAM,MAAM,OAAO,EAAE,WAAW,MAAM;AAC9E,YAAM,MAAM,MAAM,WAAW,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ;AAC/D,YAAM,SAAS,IAAI,KAAK,OAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAClD,UAAI,QAAQ;AACX,eAAO,EAAE,OAAO,OAAO;AACvB,eAAO,EAAE,KAAK,EAAE,SAAS,OAAO,QAAQ;AAAA,MACzC;AAAA,IACD;AACA;AACC,WAAK,KAAK,qBAAqB,OAAO,EAAE,MAAM,MAAM,OAAO,EAAE,WAAW,MAAM;AAC9E,YAAM,MAAM,MAAM,WAAW,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ;AAC/D,YAAM,SAAS,IAAI,KAAK,OAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAClD,UAAI,QAAQ;AACX,eAAO,EAAE,OAAO,OAAO;AACvB,eAAO,EAAE,KAAK,EAAE,SAAS,OAAO,QAAQ;AAAA,MACzC;AAAA,IACD;AAEA,SAAK,OAAO;AAEZ,UAAM,QAAQ;AAAA;AAAA;AAAA,MAGb,SAAS,CAAC,MAAM;AAAA,MAChB,QAAQ,EAAE,MAAM;AAAA,MAChB;AAAA,IACD;AACA,WAAO,uBAAW,EAAE,KAAK,OAAK;AAC7B,QAAE,QAAQ,KAAK;AAAA,IAChB,CAAC;AAAA,EACF,SAAS,GAAG;AACX,QAAI,EAAE,MAAO,SAAQ,IAAI,EAAE,KAAK;AAChC,SAAK,KAAK,aAAa,EAAE,WAAW,EAAE;AAAA,EACvC;AACD;AAEA,SAAS,WAAW,GAAG,KAAK,KAAK;AAChC,SAAc,SAAS,yBAAyB,EAAE,MAAM,OAAO,IAAI,QAAQ,GAAG,QAAQ,GAAG,EAAE,EAAE,KAAK,UAAQ;AACzG,QAAI,KAAK,MAAO,OAAM,KAAK;AAC3B,WAAO,KAAK;AAAA,EACb,CAAC;AACF;AAEA,eAAe,iCAAiC,GAAG,OAAO,OAAO;AAChE,MAAI,CAAC,SAAS,CAAC,MAAM,UAAU,CAAC,MAAM,OAAO,OAAQ;AACrD,QAAM,KAAK,MAAM,OAAO,IAAI;AAC5B,KAAG,OAAO,IAAI,EAAE,KAAK,WAAW,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,MAAM,WAAW,KAAK;AAC7F,QAAM,KAAK,GAAG,OAAO,IAAI;AACzB,QAAM,OAAO,GAAG,OAAO,KAAK,EAAE,KAAK,YAAY;AAC/C,MAAI;AACH,UAAM,OAAO,MAAa,oBAAoB,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AAC7F,QAAI,CAAC,QAAQ,KAAK,UAAU,GAAG;AAC9B,WAAK,KAAK,UAAU;AACpB;AAAA,IACD;AACA,SAAK,OAAO;AACZ,eAAW,KAAK,MAAM;AACrB,YAAM,MAAM,GAAG,OAAO,KAAK;AAC3B,MAAO,cAAc,GAAG,GAAG;AAAA,IAC5B;AAAA,EACD,SAAS,GAAG;AACX,SAAK,KAAK,EAAE,WAAW,CAAC;AAAA,EACzB;AACD;AAgDA,SAAS,kBAAkB,MAAM,GAAG;AACnC,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,SAAO;AAChB,yBAAmB;AAAA,QAClB,QAAQ;AAAA,QACR,GAAG,EAAE;AAAA,QACL,QAAQ,EAAE;AAAA,QACV,aAAa,EAAE;AAAA,QACf,IAAI,EAAE;AAAA,QACN,OAAO,EAAE;AAAA,MACV,CAAC;AAAA,IACF;AAAA,EACD,CAAC;AACF;AAEA,SAAS,iBAAiB,MAAM,GAAG;AASlC,MAAI,CAAC,EAAE,GAAG,IAAK;AACf,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,OAAM,QAAO;AACtB,YAAM,OAAc,SAAS,GAAG;AAChC,UAAI;AACH,cAAM,OAAO,MAAa,QAAQ,YAAY;AAAA,UAC7C,QAAQ,EAAE,MAAM,OAAO;AAAA,UACvB,SAAS,EAAE,GAAG,IAAI;AAAA,UAClB,UAAU,EAAE,GAAG,IAAI;AAAA,UACnB,gBAAgB,EAAE,OAAO;AAAA,QAC1B,CAAC;AACD,YAAI,KAAK,GAAI;AAEb,YAAI,QAAQ;AACZ,mBAAW,OAAO,EAAE,MAAM,OAAO,UAAU;AAC1C,kBAAQ,KAAK,IAAI,OAAO,EAAE,MAAM,OAAO,SAAS,GAAG,CAAC;AAAA,QACrD;AAEA,mBAAW,OAAO,EAAE,MAAM,OAAO,UAAU;AAC1C,gBAAM,SAAS,IAAI,OAAO,KAAK,EAAE,MAAM,WAAW,cAAc;AAChE,gBAAM,IAAI,CAAC;AAEX,cAAI,EAAE,GAAG,UAAU;AAAA,UAEnB,OAAO;AACN,cAAE,UAAU,IAAI,YAAY;AAC5B,cAAE,MAAM,EAAE,GAAG;AACb,cAAE,WAAW,EAAE,GAAG;AAClB,cAAE,eAAe;AAAA,cAChB,MAAM,EAAE,OAAO;AAAA,cACf,WAAW,EAAE,OAAO,EAAE;AAAA,YACvB;AACA,uBAAW,KAAK,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG,QAAQ,GAAG;AAChD,kBAAI,KAAK,wBAAwB,KAAK,eAAe;AAEpD;AAAA,cACD;AACA,gBAAE,CAAC,IAAI,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;AAAA,YACzC;AAAA,UACD;AACA,YAAE,MAAM,SAAS;AAAA,YAChB,YAAY;AAAA,YACZ,sBAAsB;AAAA,YACtB,OAAO,KAAK,KAAM,MAAM,EAAE,MAAM,OAAO,SAAS,GAAG,IAAK,KAAK;AAAA,YAC7D,QAAQ;AAAA,YACR,OAAO;AAAA,YACP;AAAA,YACA,OAAO;AAAA,YACP,MAAM,EAAE,MAAM,OAAO,SAAS,GAAG;AAAA,YACjC,OAAO,CAAC,CAAC;AAAA,UACV,CAAC;AAAA,QACF;AACA,aAAK,OAAO;AAAA,MACb,SAAS,GAAG;AACX,aAAK,KAAK,aAAa,EAAE,WAAW,EAAE;AACtC,YAAI,EAAE,MAAO,SAAQ,IAAI,EAAE,KAAK;AAAA,MACjC;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAEA,SAAS,gBAAgB,MAAM,GAAG;AACjC,MAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,IAAI,yBAA0B;AAKrD,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,OAAM,QAAO;AACtB,YAAM,OAAc,SAAS,GAAG;AAChC,UAAI;AACH,cAAM,WAAW,MAAM,YAAY;AAEnC,cAAM,MAAM;AAAA,UACX,QAAQ,EAAE,MAAM,OAAO;AAAA,UACvB,SAAS,EAAE,GAAG,IAAI;AAAA,UAClB,UAAU,EAAE,GAAG;AAAA,UACf,iBAAiB,EAAE,OAAO;AAAA,QAC3B;AACA,cAAM,OAAO,MAAa,QAAQ,aAAa,GAAG;AAClD,YAAI,KAAK,MAAO,OAAM,KAAK;AAC3B,YAAI,CAAC,KAAK,KAAM,OAAM;AAEtB,cAAM,YAAY;AAAA,UACjB,YAAY,EAAE,OAAO;AAAA,UACrB,MAAM,KAAK,MAAM,KAAK,IAAI;AAAA,QAC3B;AAEA,YAAI,EAAE,GAAG,IAAI,oBAAoB;AAChC,cAAI,SAAS;AACb,qBAAW,KAAK,EAAE,GAAG,IAAI,mBAAmB,MAAM;AACjD,uBAAW,KAAK,UAAU,MAAM;AAC/B,kBAAI,EAAE,CAAC,GAAG;AACT,yBAAS;AACT;AAAA,cACD;AAAA,YACD;AACA,gBAAI,OAAQ;AAAA,UACb;AACA,cAAI,QAAQ;AACX,kBAAM,IAAI,EAAE,GAAG,IAAI,mBAAmB,KAAK,MAAM;AACjD,sBAAU,qBAAqB;AAAA,cAC9B,KAAK;AAAA,cACL,MAAM,EAAE;AAAA,cACR,YAAY,EAAE;AAAA,YACf;AAAA,UACD;AAAA,QACD;AAEA,cAAM,WAAW,MAAM,SAAS,QAAQ;AAAA,UACvC,gBAAgB,EAAE,MAAM,OAAO;AAAA,UAC/B,UAAU,EAAE,MAAM,OAAO;AAAA,UACzB,gBAAgB;AAAA,UAChB,UAAU;AAAA,YACT,cAAc;AAAA,YACd,iBAAiB,CAAC;AAAA,UACnB;AAAA,UACA,WAAW;AAAA,YACV,gBAAgB;AAAA,cACf,MAAM;AAAA,cACN,SAAS,EAAE,MAAM;AAAA,cACjB,QAAQ,EAAE,MAAM,OAAO;AAAA,cACvB,SAAS,EAAE,GAAG,IAAI;AAAA,cAClB,QAAQ,EAAE,OAAO;AAAA,YAClB;AAAA,UACD;AAAA,QACD,CAAC;AACD,iBAAS,KAAK,SAAS;AACvB,aAAK,OAAO;AAAA,MACb,SAAS,GAAG;AACX,aAAK,KAAK,aAAa,EAAE,WAAW,EAAE;AACtC,YAAI,EAAE,MAAO,SAAQ,IAAI,EAAE,KAAK;AAAA,MACjC;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAEA,SAAS,4BAA4B,MAAM,YAAY,IAAI,OAAO;AACjE,MAAI,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,mBAAoB;AAC1D,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,OAAM,QAAO;AACtB,YAAM,OAAc,SAAS,GAAG;AAChC,UAAI;AACH,cAAM,OAAO,MAAa,QAAQ,sBAAsB;AAAA,UACvD,QAAQ;AAAA,UACR,QAAQ,MAAM,OAAO;AAAA,UACrB,SAAS,GAAG,IAAI;AAAA,QACjB,CAAC;AACD,YAAI,KAAK,MAAO,OAAM,KAAK;AAC3B,YAAI,CAAC,KAAK,IAAK,OAAM;AACrB,YAAI,KAAK,IAAI,UAAU,GAAG;AACzB,eAAK,KAAK,wCAAwC;AAClD;AAAA,QACD;AACA,mBAAW,KAAK,KAAK,KAAK;AACzB,gBAAM,KAAK,GAAG,IAAI,mBAAmB,KAAK,EAAE,GAAG;AAC/C,gBAAM,KAAK,IAAI,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AAC1D,aAAG,OAAO,KAAK,EAAE,KAAK,GAAG,IAAI;AAC7B,aAAG,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS;AACjC,gBAAM,MAAM,GAAG,OAAO,KAAK;AAC3B,gBAAME,YAAW,IAChB,OAAO,IACP,OAAO,KACP,MAAM,IACN,WAAW,GACXC,cAAa,GACb,QAAQ;AACT,gBAAM,OAAO,EAAE,WAAW,CAAC,EAAE;AAE7B,gBAAM,OAAO;AACb,gBAAM,QAAQ,OAAY,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;AAChE,cAAI,SAAS;AACb,qBAAW,KAAK,EAAE,YAAY;AAC7B,gBACE,OAAO,MAAM,EACb,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAaD,SAAQ,EAC1B,KAAK,GAAG,WAAW,EAAE,CAAC,EAAE,IAAI,EAC5B,KAAK,WAAY;AACjB,uBAAS,KAAK,IAAI,QAAQ,KAAK,QAAQ,EAAE,KAAK;AAAA,YAC/C,CAAC,EACA,OAAO;AAAA,UACV;AACA,gBAAM,IAAI,IACR,OAAO,GAAG,EACV,KAAK,aAAa,gBAAgB,MAAM,SAASC,eAAc,OAAO,MAAM,QAAQ,YAAY,GAAG;AACrG,qBAAW,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,QAAQ,GAAG;AAC5C,kBAAM,MAAM,EAAE,OAAO,GAAG,EAAE,KAAK,aAAa,kBAAkB,OAAO,YAAY,IAAI,GAAG;AACxF,gBACE,OAAO,MAAM,EACb,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAaD,SAAQ,EAC1B,KAAK,KAAK,CAACC,WAAU,EACrB,KAAK,eAAe,KAAK,EACzB,KAAK,KAAK,OAAO,CAAC,EAClB,KAAK,GAAG,WAAW,EAAE,CAAC,EAAE,IAAI,EAC5B,KAAK,qBAAqB,SAAS;AACrC,gBACE,OAAO,MAAM,EACb,KAAK,SAAS,KAAK,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EACrC,KAAK,UAAU,IAAI,EACnB,KAAK,mBAAmB,YAAY,EACpC,KAAK,QAAQ,GAAG,WAAW,EAAE,CAAC,EAAE,KAAK;AAAA,UACxC;AAEA,UAAO,UAAU;AAAA,YAChB,MAAM,EACJ,OAAO,GAAG,EACV,KAAK,aAAa,kBAAkB,WAAW,GAAG,EAClD,KAAK,QAAQ,EAAE,MAAM,KAAK,EAAE,MAAM,CAAC,CAAC;AAAA,YACtC,UAAU;AAAA,YACV,UAAUD,YAAW;AAAA,UACtB,CAAC;AAED,cACE,KAAK,SAAS,MAAM,SAASC,cAAa,OAAO,GAAG,EACpD,KAAK,UAAU,MAAM,QAAQ,YAAY,OAAO,YAAY,EAAE,WAAW,SAAS,GAAG;AAAA,QACxF;AACA,aAAK,OAAO;AAAA,MACb,SAAS,GAAG;AACX,aAAK,KAAK,aAAa,EAAE,WAAW,EAAE;AACtC,YAAI,EAAE,MAAO,SAAQ,IAAI,EAAE,KAAK;AAAA,MACjC;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAEA,SAAS,eAAe,MAAM,KAAK;AAIlC,MAAI,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,MAAM,OAAO,WAAY;AAChF,MAAI,CAAC,IAAI,KAAK,IAAI,EAAE,MAAa,WAAY;AAC7C,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,OAAM,QAAO;AACtB,YAAM,OAAc,SAAS,GAAG;AAChC,UAAI;AAEH,cAAM,UAAU;AAAA,UACf,QAAQ,IAAI,MAAM;AAAA,UAClB;AAAA,UACA,GAAG;AAAA,YACF,KAAK,IAAI,EAAE;AAAA,YACX,KAAK,IAAI,EAAE,MAAM;AAAA;AAAA,YACjB,KAAK,IAAI,EAAE;AAAA,YACX,KAAK,IAAI,EAAE;AAAA,UACZ;AAAA,QACD;AAEA,YAAI,IAAI,GAAG,UAAU;AACpB,cAAI,IAAI,GAAG,qBAAqB;AAC/B,oBAAQ,kBAAkB;AAAA,cACzB;AAAA,gBACC,aAAa;AAAA,gBACb,MAAM,UAAU,IAAI,GAAG,MAAM;AAAA,gBAC7B,MAAM,IAAI,GAAG,oBAAoB;AAAA,gBACjC,KAAK,IAAI,GAAG,oBAAoB;AAAA,gBAChC,UAAU,IAAI,GAAG,oBAAoB;AAAA,cACtC;AAAA,YACD;AAEA,gBAAI,IAAI,QAAQ;AACf,sBAAQ,gBAAgB,KAAK;AAAA,gBAC5B,sBAAsB;AAAA,gBACtB,MAAM,IAAI,OAAO,aAAa,MAAM,IAAI,GAAG,MAAM;AAAA,gBACjD,YAAY,IAAI,OAAO;AAAA,gBACvB,MAAM,IAAI,GAAG,oBAAoB;AAAA,gBACjC,KAAK,IAAI,GAAG,oBAAoB;AAAA,gBAChC,UAAU,IAAI,GAAG,oBAAoB;AAAA,cACtC,CAAC;AAAA,YACF;AAAA,UACD;AAAA,QACD,OAAO;AAEN,cAAI,IAAI,GAAG,qBAAqB;AAC/B,kBAAM,OAAO;AAAA,cACZ,aAAa;AAAA,cACb,UAAU,IAAI,GAAG,oBAAoB;AAAA,cACrC,UAAU,IAAI,GAAG,oBAAoB;AAAA,cACrC,UAAU,IAAI,GAAG,IAAI;AAAA,YACtB;AACA,gBAAI,IAAI,aAAa;AACpB,kBAAI,IAAI,YAAY,YAAY;AAE/B,qBAAK,OAAO,IAAI,YAAY,OAAO,MAAM,IAAI,GAAG,MAAM;AACtD,qBAAK,sBAAsB,IAAI,YAAY;AAAA,cAC5C;AAAA,YACD;AACA,gBAAI,CAAC,KAAK,MAAM;AACf,mBAAK,OAAO,UAAU,IAAI,GAAG,MAAM;AAAA,YACpC;AACA,oBAAQ,kBAAkB,CAAC,IAAI;AAE/B,gBAAI,IAAI,QAAQ;AACf,sBAAQ,gBAAgB,KAAK;AAAA,gBAC5B,sBAAsB;AAAA,gBACtB,MAAM,IAAI,OAAO,aAAa,MAAM,IAAI,GAAG,MAAM;AAAA,gBACjD,YAAY,IAAI,OAAO;AAAA,gBACvB,UAAU,IAAI,GAAG,oBAAoB;AAAA,gBACrC,UAAU,IAAI,GAAG,oBAAoB;AAAA,gBACrC,UAAU,IAAI,GAAG,IAAI;AAAA,cACtB,CAAC;AAAA,YACF;AAAA,UACD;AAAA,QACD;AACA,cAAM,IAAI,MAAM,OAAO,wBAAY;AACnC,cAAM,EAAE,KAAK,OAAO;AACpB,aAAK,OAAO;AAAA,MACb,SAAS,GAAG;AACX,aAAK,KAAK,aAAa,EAAE,WAAW,EAAE;AACtC,YAAI,EAAE,MAAO,SAAQ,IAAI,EAAE,KAAK;AAAA,MACjC;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAEA,SAAS,+BAA+B,MAAM,KAAK;AAOlD,MAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,aAAc;AAC7C,OAAK,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU,OAAM,QAAO;AACtB,YAAM,OAAc,SAAS,GAAG;AAChC,UAAI;AACH,cAAM,IAAI,IAAI;AAEd,cAAM,KAAK;AAAA,UACV,UAAU;AAAA,QACX;AAEA,YAAI,EAAE,MAAa,YAAY;AAE9B,aAAG,MAAM,EAAE;AACX,aAAG,QAAQ,EAAE;AACb,aAAG,OAAO,EAAE;AACZ,aAAG,WAAW;AAAA,YACb,OAAO,EAAE,OAAO,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,YACvC,KAAK,EAAE;AAAA,YACP,KAAK,EAAE;AAAA,UACR;AAAA,QACD,WAAW,EAAE,MAAa,OAAO;AAChC,aAAG,MAAM,EAAE;AACX,aAAG,QAAQ,EAAE;AACb,aAAG,OAAO,EAAE;AACZ,aAAG,MAAM;AAAA,YACR,gBAAgB,IAAI,GAAG;AAAA,YACvB,aAAa,IAAI,GAAG;AAAA,UACrB;AAAA,QACD,WAAW,EAAE,MAAa,OAAO;AAChC,aAAG,MAAM,EAAE;AACX,aAAG,QAAQ,EAAE;AACb,aAAG,OAAO,EAAE;AACZ,aAAG,MAAM;AAAA,YACR,gBAAgB,IAAI,GAAG;AAAA,YACvB,aAAa,IAAI,GAAG;AAAA,UACrB;AAAA,QACD,WAAW,EAAE,MAAa,MAAM;AAC/B,aAAG,MAAM,EAAE;AACX,aAAG,QAAQ,EAAE;AACb,aAAG,OAAO,EAAE;AACZ,aAAG,KAAK,CAAC;AAAA,QACV,WAAW,EAAE,MAAa,aAAa;AACtC,aAAG,MAAM,EAAE;AACX,aAAG,QAAQ,EAAE;AACb,aAAG,OAAO,EAAE;AACZ,aAAG,SAAS,CAAC;AAAA,QACd,WAAW,EAAE,MAAa,OAAO;AAChC,aAAG,MAAM,EAAE;AACX,aAAG,QAAQ,EAAE;AACb,aAAG,OAAO,EAAE;AACZ,aAAG,MAAM,CAAC;AAAA,QACX;AAEA,cAAM,OAAO;AAAA,UACZ,YAAY;AAAA;AAAA,UACZ,YAAY;AAAA,YACX,MAAM,CAAC;AAAA,YACP,KAAK;AAAA,UACN;AAAA,QACD;AAEA,YAAI,IAAI,GAAG,IAAI,aAAa,sBAAsB,IAAI,QAAQ;AAG7D,gBAAM,OAAO,IAAI,GAAG,IAAI,aAAa,mBAAmB,CAAC;AACzD,gBAAM,aAAa,IAAI,GAAG,kBAAkB,IAAI,GAAG,gBAAgB,QAAQ,IAAI,OAAO,UAAU,IAAI;AACpG,cAAI,YAAY;AACf,kBAAM,IAAI,WAAW,KAAK,GAAG;AAC7B,gBAAI,GAAG;AACN,mBAAK,WAAW,KAAK,SAAS;AAC9B,mBAAK,WAAW,KAAK,MAAM,KAAK;AAChC,mBAAK,WAAW,KAAK,QAAQ;AAAA,YAC9B;AAAA,UACD;AAAA,QACD,OAAO;AAAA,QAEP;AAEA,cAAM,IAAI,MAAM,OAAO,gCAAoB;AAC3C,cAAM,EAAE;AAAA,UACP;AAAA,YACC,QAAQ,IAAI,MAAM;AAAA,YAClB,KAAK,IAAI,GAAG;AAAA,YACZ,UAAU,CAAC,IAAI;AAAA,UAChB;AAAA,UACA;AAAA,UACA,IAAI,MAAM;AAAA,QACX;AACA,aAAK,OAAO;AAAA,MACb,SAAS,GAAG;AACX,aAAK,KAAK,aAAa,EAAE,WAAW,EAAE;AACtC,YAAI,EAAE,MAAO,SAAQ,IAAI,EAAE,KAAK;AAAA,MACjC;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAEA,SAAS,mCAAmC,KAAK;AAahD,MAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,cAAc;AAC5C;AAAA,EACD;AAEA,MAAI,OACF,OAAO,KAAK,EACZ,KAAK,eAAe,EACpB,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,QAAI,GAAG,KAAK,KAAK;AAEjB,UAAM,IAAI,IAAI;AAGd,UAAM,KAAK;AAAA,MACV,UAAU;AAAA,IACX;AAEA;AACC,YAAM,MAAM,IAAI,MAAM;AACtB,SAAG,MAAM,IAAI,IAAI,MAAM,QAAQ,EAAE;AACjC,YAAM,IAAI,IAAI,IAAI,MAAM,QAAQ,EAAE;AAClC,YAAM,IAAI,IAAI,IAAI,MAAM,OAAO,EAAE;AACjC,SAAG,QAAQ,KAAK,IAAI,GAAG,CAAC;AACxB,SAAG,OAAO,KAAK,IAAI,GAAG,CAAC;AAAA,IACxB;AAEA,OAAG,WAAW;AAAA,MACb,aAAa,CAAC;AAAA,IACf;AAGA;AAEC,UAAI,eAAe;AACnB,iBAAW,KAAK,IAAI,GAAG,cAAc,cAAc;AAClD,YAAI,OAAO,KAAK,UAAU;AACzB,aAAG,SAAS,YAAY,CAAC,IAAI;AAC7B,yBAAe;AAAA,QAChB;AAAA,MACD;AACA,UAAI,CAAC,cAAc;AAClB,eAAO,GAAG,SAAS;AAAA,MACpB;AAAA,IACD;AAEA,QAAI,CAAC,IAAI,GAAG,cAAc,aAAa,IAAW,KAAK,GAAG;AACzD,SAAG,MAAM;AAAA,QACR,gBAAgB,IAAI,GAAG;AAAA,QACvB,aAAa,IAAI,GAAG;AAAA,MACrB;AAAA,IACD;AACA,QAAI,CAAC,IAAI,GAAG,cAAc,aAAa,IAAW,KAAK,GAAG;AACzD,SAAG,MAAM;AAAA,QACR,gBAAgB,IAAI,GAAG;AAAA,QACvB,aAAa,IAAI,GAAG;AAAA,MACrB;AAAA,IACD;AACA,QAAI,CAAC,IAAI,GAAG,cAAc,aAAa,IAAW,IAAI,GAAG;AACxD,SAAG,KAAK,CAAC;AAAA,IACV;AACA,QAAI,CAAC,IAAI,GAAG,cAAc,aAAa,IAAW,WAAW,GAAG;AAC/D,SAAG,SAAS,CAAC;AAAA,IACd;AACA,QAAI,CAAC,IAAI,GAAG,cAAc,aAAa,IAAW,KAAK,GAAG;AACzD,SAAG,MAAM,CAAC;AAAA,IACX;AAEA,UAAM,OAAO;AAAA,MACZ,YAAY;AAAA;AAAA,MACZ,YAAY;AAAA,QACX,MAAM,CAAC;AAAA,QACP,KAAK;AAAA,MACN;AAAA,IACD;AAMA,UAAM,OAAO,IAAI,YAAY,WAAW,IAAI,YAAY,WAAW,SAAS,CAAC;AAC7E,SAAK,WAAW,OAAO;AAAA,MACtB,QAAQ;AAAA,MACR,KAAK,KAAK;AAAA,MACV,OAAO,KAAK;AAAA,IACb;AAEA,UAAM,OAAc,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC;AAC9C,SAAK,OAAO,KAAK,eAAe;AAEhC,WAAO,gCAAoB,EAAE,KAAK,OAAK;AACtC,QAAE;AAAA,QACD;AAAA,UACC,QAAQ,IAAI,MAAM;AAAA,UAClB,KAAK,IAAI,GAAG;AAAA,UACZ,UAAU,CAAC,IAAI;AAAA,QAChB;AAAA,QACA,KAAK;AAAA,QACL,IAAI,MAAM;AAAA,MACX;AAAA,IACD,CAAC;AAAA,EACF,CAAC;AACH;AAEA,SAAS,mCAAmC,IAAI,OAAO,QAAQ,aAAa;AAC3E,MAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,kBAAmB;AAE1C,SACE,OAAO,KAAK,EACZ,KAAK,eAAe,EACpB,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,YAAY;AACxB,OAAG,KAAK,MAAM;AACd,UAAM,OAAO,GAAG,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,UAAU,MAAM,EAAE,KAAK,YAAY;AAC9E,UAAM,MAAM;AAAA,MACX,QAAQ,MAAM,OAAO;AAAA,MACrB,SAAS,GAAG,IAAI;AAAA,MAChB,UAAU,GAAG;AAAA,MACb,UAAU;AAAA,IACX;AACA,QAAI,YAAY,YAAY;AAE3B,YAAM,IAAI,YAAY,WAAW,YAAY,WAAW,SAAS,CAAC;AAClE,UAAI,MAAM,EAAE;AACZ,UAAI,QAAQ,EAAE;AAAA,IACf;AACA,UAAM,OAAO,MAAa,QAAQ,YAAY,GAAG;AACjD,QAAI,KAAK,OAAO;AACf,WAAK,KAAK,YAAY,KAAK,KAAK;AAChC;AAAA,IACD;AACA,SAAK,OAAO;AACZ,qBAAiB;AAAA,MAChB;AAAA,MACA;AAAA,MACA,KAAK,GAAG,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,UAAU,MAAM;AAAA,MACnD,QAAQ,GAAG;AAAA,MACX,WAAW,YAAY;AAAA,IACxB,CAAC;AACD,OAAG,KAAK,EACN,OAAO,KAAK,EACZ,MAAM,aAAa,MAAM,EACzB,MAAM,UAAU,MAAM,EACtB,KAAK,gEAAgE;AACvE,QAAI,YAAY,YAAY;AAE3B,YAAM,IAAI,GAAG,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,UAAU,qBAAqB,EAAE,MAAM,WAAW,GAAG;AAC7F,iBAAW,KAAK,YAAY,YAAY;AACvC,UAAE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,OAAO,EAAE,YAAY,GAAG;AAAA,MACxE;AAAA,IACD;AAAA,EACD,CAAC;AACH;AAEA,SAAS,iBAAiBC,OAAM;AAI/B,QAAM,OAAO;AAAA,IACZ,WAAWA,MAAK;AAAA,IAChB,KAAKA,MAAK;AAAA,IACV,MAAM,CAAC;AAAA;AAAA,IACP,YAAY,oBAAI,IAAI;AAAA,IACpB,KAAKA,MAAK,IAAI,OAAO,KAAK;AAAA,EAC3B;AAEA,iBAAe,MAAMA,MAAK,IAAI;AAG9B,QAAM,MAAMA,MAAK,IAAI,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,WAAW,QAAQ;AAC1E,aAAW,QAAQA,MAAK,KAAK,OAAO;AACnC,UAAM,OAAO,IACX,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,MAAM,gBAAgB,MAAM,EAC5B,MAAM,eAAe,QAAQ;AAC/B,UAAM,QAAQ,KAAK,OAAO,OAAO;AACjC,UACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,SAAS,WAAW,IAAI,EACxB,GAAG,UAAU,OAAMC,WAAS;AAC5B,UAAIA,OAAM,OAAO,SAAS;AACzB,aAAK,WAAW,OAAO,KAAK,EAAE;AAC9B,YAAI,KAAK,IAAI,eAAe,CAAC,KAAK,IAAI,YAAY,SAAS,KAAK,EAAE,GAAG;AACpE,eAAK,IAAI,YAAY,KAAK,KAAK,EAAE;AAAA,QAClC;AAAA,MACD,OAAO;AACN,aAAK,WAAW,IAAI,KAAK,EAAE;AAAA,MAC5B;AACA,WAAK,IAAI,eAAe,CAAC,GAAG,KAAK,UAAU;AAC3C,YAAM,OAAO,MAAa,QAAQ,YAAY,KAAK,GAAG;AACtD,qBAAe,MAAM,IAAI;AAAA,IAC1B,CAAC;AACF,UAAM,OAAO,MAAM,EAAE,KAAK,KAAK,IAAI,EAAE,MAAM,gBAAgB,KAAK;AAAA,EACjE;AACD;AAEA,SAAS,eAAe,MAAM,MAAM;AACnC,QAAM,SAAS,IACd,YAAY,GACZ,OAAO,GACP,YAAY,IACZH,YAAW,IACX,WAAW,GACX,YAAY,IACZ,gBAAgB;AAGjB,OAAK,OAAO,CAAC;AACb,OAAK,IAAI,UAAU,GAAG,EAAE,OAAO;AAE/B,MAAI,iBAAiB;AACrB,aAAW,KAAK,KAAK,OAAO;AAC3B,UAAM,IAAI,EAAE,OAAO,EAAE,OAAO,SAAS,CAAC;AACtC,qBAAiB,KAAK,IAAI,gBAAgB,EAAE,IAAI,EAAE,WAAW;AAAA,EAC9D;AACA,QAAM,YAAY,gBAAgB;AAElC,QAAM,SAAS,KAAK,IAAI,OAAO,GAAG;AAGlC,SACE,OAAO,MAAM,EACb,KAAK,SAAS,SAAS,EACvB,KAAK,UAAU,KAAK,MAAM,UAAU,YAAY,YAAY,QAAQ,EACpE,KAAK,UAAU,SAAS,EACxB,KAAK,QAAQ,MAAM;AACrB;AACC,QAAI;AACJ,UAAM,OAAO,OACX,OAAO,MAAM,EACb,KAAK,eAAe,QAAQ,EAC5B,KAAK,aAAaA,YAAW,CAAC,EAC9B,KAAK,KAAK,EAAE,EACZ,MAAM,KAAK,YAAY,KAAK,YAAY,OAAO,MAAM,OAAO,KAAK,WAAW,EAC5E,KAAK,WAAY;AACjB,iBAAW,KAAK,QAAQ,EAAE;AAAA,IAC3B,CAAC;AACF,SAAK,KAAK,KAAK,YAAY,KAAK,WAAW,aAAa,WAAW,aAAa,IAAI,EAAE;AAAA,EACvF;AAEA,MAAI,YAAY;AAChB,MAAI,IAAI;AACR,aAAW,QAAQ,KAAK,OAAO;AAC9B,UAAM,OAAO,OAAO,OAAO,GAAG,EAAE,KAAK,aAAa,iBAAiB,IAAI,GAAG;AAE1E,SACE,OAAO,MAAM,EACb,KAAK,UAAU,SAAS,EACxB,KAAK,MAAM,EAAE,EACb,KAAK,MAAM,YAAY,CAAC,EACxB,KAAK,MAAM,YAAY,CAAC;AAC1B,UAAM,UAAU;AAAA,MACf,IAAI,KAAK;AAAA,MACT;AAAA,MACA;AAAA,IACD;AACA,SAAK,KAAK,KAAK,OAAO;AACtB,YAAQ,WAAW,KACjB,OAAO,MAAM,EACb,KAAK,KAAK,OAAO,SAAS,KAAK,WAAW,EAC1C,KAAK,aAAaA,SAAQ,EAC1B,KAAK,KAAK,CAAC,SAAS,EACpB,KAAK,KAAK,YAAY,CAAC,EACvB,KAAK,qBAAqB,QAAQ,EAClC,KAAK,eAAe,KAAK,EACzB,KAAK,WAAY;AACjB,kBAAY,KAAK,IAAI,WAAW,KAAK,QAAQ,EAAE,KAAK;AAAA,IACrD,CAAC,EACA,GAAG,aAAa,CAAAG,WAAS;AACzB,MAAAA,OAAM,eAAe;AACrB,cAAQ,SAAS;AACjB,YAAM,IAAI,eAAS,SAAS,IAAI;AAChC,UAAI,MAAMA,OAAM;AAChB,UAAI;AACJ,UAAI,WAAW;AACf,QAAE,GAAG,aAAa,CAAAA,WAAS;AAC1B,cAAM,KAAKA,OAAM;AACjB,iBAAS,KAAK;AACd,cAAM,SAAS,KAAK,KAAK,UAAU,OAAK,EAAE,MAAM,QAAQ,EAAE;AAC1D,YAAI,SAAS,GAAG;AACf,cAAI,SAAS,KAAK,CAAC,UAAU,YAAY,GAAG;AAC3C,iBAAK,KAAK,OAAO,QAAQ,CAAC;AAC1B,iBAAK,KAAK,OAAO,SAAS,GAAG,GAAG,OAAO;AACvC,wBAAY;AACZ,qBAAS;AACT,kBAAM;AACN,uBAAW;AAAA,UACZ;AAAA,QACD,OAAO;AACN,cAAI,SAAS,KAAK,KAAK,SAAS,KAAK,UAAU,YAAY,GAAG;AAC7D,iBAAK,KAAK,OAAO,QAAQ,CAAC;AAC1B,iBAAK,KAAK,OAAO,SAAS,GAAG,GAAG,OAAO;AACvC,wBAAY;AACZ,qBAAS;AACT,kBAAM;AACN,uBAAW;AAAA,UACZ;AAAA,QACD;AACA,aAAK,KAAK,aAAa,kBAAkB,QAAQ,IAAI,UAAU,GAAG;AAAA,MACnE,CAAC;AACD,QAAE,GAAG,WAAW,YAAY;AAC3B,UAAE,GAAG,aAAa,IAAI,EAAE,GAAG,WAAW,IAAI;AAC1C,eAAO,QAAQ;AACf,oBAAY;AACZ,YAAI,SAAU;AACd,gBAAQ,SAAS,KAAK,YAAY;AAClC,aAAK,IAAI,cAAc,KAAK,KAAK,IAAI,OAAK,EAAE,EAAE;AAC9C,aAAK,IAAI,eAAe,CAAC,GAAG,KAAK,UAAU;AAC3C,cAAMC,QAAO,MAAa,QAAQ,YAAY,KAAK,GAAG;AACtD,uBAAe,MAAMA,KAAI;AAAA,MAC1B,CAAC;AAAA,IACF,CAAC;AAEF,QAAI,IAAI;AACR,eAAW,KAAK,KAAK,QAAQ;AAC5B,UAAI,GAAG;AAEN,cAAM,IAAI,EAAE,cAAc;AAC1B,YAAI,EAAE,OAAO;AAEZ,gBAAM,MAAM,KACV,OAAO,MAAM,EACb,KAAK,QAAQ,EAAE,KAAK,EACpB,KAAK,KAAK,CAAC,EACX,KAAK,SAAS,KAAK,IAAI,GAAG,CAAC,CAAC,EAC5B,KAAK,UAAU,SAAS;AAC1B,cAAI;AACJ,gBAAM,OAAO,KACX,OAAO,MAAM,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,aAAaJ,YAAW,CAAC,EAC9B,KAAK,WAAY;AACjB,uBAAW,KAAK,QAAQ,EAAE;AAAA,UAC3B,CAAC;AACF,cAAI,WAAW,GAAG;AACjB,iBACE,KAAK,QAAQ,OAAO,EACpB,KAAK,KAAK,IAAI,IAAI,CAAC,EACnB,KAAK,KAAK,YAAY,CAAC,EACvB,KAAK,qBAAqB,QAAQ,EAClC,KAAK,eAAe,QAAQ;AAAA,UAC/B,OAAO;AAEN,iBAAK,OAAO;AACZ,gBACE,GAAG,aAAa,CAAAG,WAAS;AACzB,kBAAI,KAAK,QAAQ,OAAO;AACxB,mBAAK,OACH,MAAM,EACN,UAAUA,OAAM,MAAM,EACtB,EAAE,OAAO,KAAK,EACd,KAAK,EAAE,cAAc,mCAAmC,WAAW,KAAK,IAAI,IAAI,SAAS;AAAA,YAC5F,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,kBAAI,KAAK,QAAQ,EAAE,KAAK;AACxB,mBAAK,OAAO,KAAK;AAAA,YAClB,CAAC;AAAA,UACH;AAAA,QACD;AACA,aAAK;AAAA,MACN,OAAO;AAEN,cAAM,IAAI,EAAE,cAAc;AAC1B,cAAME,KAAI,EAAE,IAAI;AAChB,YAAI,CAAC,EAAE,OAAO;AACb,gBAAM,MAAM,KAAK,OAAO,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE,KAAK,KAAKA,EAAC,EAAE,KAAK,SAAS,CAAC,EAAE,KAAK,UAAU,SAAS;AAC5G,eACE,OAAO,MAAM,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,aAAaL,YAAW,CAAC,EAC9B,KAAK,QAAQ,OAAO,EACpB,KAAK,KAAKK,KAAI,IAAI,CAAC,EACnB,KAAK,KAAK,YAAY,CAAC,EACvB,KAAK,qBAAqB,QAAQ,EAClC,KAAK,eAAe,QAAQ;AAAA,QAC/B;AAAA,MACD;AAAA,IACD;AACA,SAAK,YAAY;AAAA,EAClB;AACA,SAAO,KAAK,aAAa,gBAAgB,OAAO,YAAY,aAAa,MAAM,SAAS,GAAG;AAC3F,OAAK,IACH,KAAK,SAAS,OAAO,IAAI,YAAY,YAAY,SAAS,EAC1D,KAAK,UAAU,UAAU,YAAY,YAAY,KAAK,MAAM,SAAS,SAAS;AAEhF,WAAS,cAAc;AACtB,QAAIC,KAAI;AACR,eAAW,KAAK,KAAK,MAAM;AAC1B,UAAI,CAAC,EAAE,OAAQ,GAAE,KAAK,WAAW,EAAE,KAAK,aAAa,iBAAiBA,KAAI,GAAG;AAC7E,QAAE,IAAIA;AACN,MAAAA,MAAK,YAAY;AAAA,IAClB;AAAA,EACD;AACD;;;AChkGA,IAAM,WAAW;AAEjB,IAAM,OAAO;AAEN,SAAS,cAAc,OAAO,IAAI;AAQxC,QAAM,CAAC,IAAI,EAAE,IAAI,cAAc,OAAO,GAAG,IAAI;AAC7C,KAAG,YAAY;AACf,KAAG,YAAY;AAEf,QAAM,QAAQ,GAAG,OAAO,OAAO,EAAE,MAAM,kBAAkB,KAAK;AAE9D,KAAG,eAAe;AAElB,KAAG,kBAAkB,CAAC;AAEtB,gBAAc,EAAE;AAEhB,MAAI,CAAC,GAAG,YAAY;AAEnB,eAAW,IAAI,KAAK;AACpB,eAAW,EAAE;AACb,sBAAkB,EAAE;AAAA,EACrB;AAEA,kCAAgC,EAAE;AAElC,yBAAuB,EAAE;AAEzB,2BAAyB,EAAE;AAE3B,MAAI,GAAG,gBAAiB,qBAAoB,GAAG,iBAAiB,IAAI,KAAK;AACzE,MAAI,GAAG,eAAgB,qBAAoB,GAAG,gBAAgB,IAAI,KAAK;AAEvE,KAAG,kBAAkB,MAAM,OAAO,IAAI;AACtC,KAAG,oBAAoB,GAAG,gBAAgB,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,OAAO,MAAM;AAGjG,KAAG,gBAAgB,OAAO,IAAI;AAC/B;AAEO,SAAS,cAAc,IAAI,OAAO;AAIxC,mBAAiB,EAAE;AACnB,oBAAkB,IAAI,KAAK;AAC3B,MAAI,GAAG,cAAc;AAEpB,sCAAkC,IAAI,KAAK;AAC3C;AAAA,EACD;AAEA,uBAAqB,IAAI,KAAK;AAC/B;AAIA,SAAS,cAAc,IAAI;AAK1B,MAAI,CAAC,GAAG,cAAe,IAAG,gBAAgB,CAAC;AAC3C,MAAI,CAAC,GAAG,cAAc,aAAc,IAAG,cAAc,eAAe,oBAAI,IAAI;AAE5E,KAAG,cAAc,SAAS;AAE1B,KAAG,cAAc,MAAM,GAAG,aAAa,OAAO,IAAI;AAElD,KAAG,cAAc,IAAI,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,UAAU;AACpG,KAAG,cAAc,SAAS,GAAG,cAAc,IAAI,OAAO,IAAI;AAC1D,KAAG,gBAAgB,KAAK,GAAG,aAAa;AACzC;AAEA,SAAS,WAAW,IAAI,OAAO;AAM9B,QAAM,UAAU;AAIhB,KAAG,SAAS,YAAY;AAAA,IACvB,WAAW;AAAA,IACX,MAAM;AAAA,EACP;AAEA,KAAG,SAAS,UAAU,MAAM,GAAG,aAAa,OAAO,IAAI;AACvD,KAAG,SAAS,UAAU,IAAI,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,iBAAiB;AAChH,KAAG,gBAAgB,KAAK,GAAG,SAAS,SAAS;AAE7C,QAAM,MAAM,GAAG,SAAS,UAAU,IAChC,OAAO,IAAI,EACX,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,SAAS,EACvB,MAAM,WAAW,KAAK,EACtB,GAAG,SAAS,MAAM;AAElB,OAAG,YAAY,MAAM,EAAE,UAAU,IAAI,KAAK,CAAC;AAC3C;AACC,YAAM,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,EAAE,OAAO,OAAO;AACzD,UACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,SAAS,WAAW,CAAC,GAAG,YAAY,EACpC,GAAG,UAAU,MAAM;AACnB,WAAG,eAAe,CAAC,GAAG;AACtB,eAAO,IAAI,KAAK;AAAA,MACjB,CAAC;AACF,UAAI,OAAO,MAAM,EAAE,KAAK,6BAA6B;AAAA,IACtD;AACA;AACC,YAAM,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM,EAAE,OAAO,OAAO;AACrF,UACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,SAAS,WAAW,CAAC,GAAG,YAAY,EACpC,GAAG,UAAU,MAAM;AACnB,WAAG,eAAe,CAAC,GAAG;AACtB,eAAO,IAAI,KAAK;AAAA,MACjB,CAAC;AACF,UAAI,OAAO,MAAM,EAAE,KAAK,6BAA6B;AAAA,IACtD;AAAA,EACD,CAAC;AAEF,QAAM,MAAM,IACV,OAAO,KAAK,EACZ,KAAK,UAAU,UAAU,GAAG,SAAS,UAAU,QAAQ,CAAC,EACxD,KAAK,UAAU,WAAW,GAAG,SAAS,UAAU,YAAY,IAAI;AAElE,KAAG,SAAS,UAAU,MAAM;AAE5B,KAAG,SAAS,UAAU,YAAY,IAChC,OAAO,KAAK,EACZ,KAAK,SAAS,EACd,MAAM,WAAW,GAAG,EACpB,MAAM,gBAAgB,MAAM;AAE9B,KAAG,SAAS,UAAU,QAAQ,IAC5B,OAAO,GAAG,EACV,KAAK,aAAa,eAAe,UAAU,OAAO,WAAW,GAAG,SAAS,UAAU,aAAa,GAAG;AAErG,QAAM,UAAU,KAAK,OAAO,EAAE,SAAS;AACvC,QAAM,UAAU,KAAK,OAAO,EAAE,SAAS;AAEvC,QAAM,OAAO,IAAI,OAAO,MAAM;AAC9B;AAEC,UAAM,OAAO,KAAK,OAAO,gBAAgB,EAAE,KAAK,MAAM,OAAO;AAC7D,OAAG,SAAS,UAAU,YAAY,KAAK,OAAO,MAAM,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,cAAc,GAAG,SAAS,KAAK,GAAG;AAClH,SAAK,OAAO,MAAM,EAAE,KAAK,UAAU,MAAM,EAAE,KAAK,cAAc,OAAO;AAAA,EACtE;AACA;AAEC,UAAM,OAAO,KAAK,OAAO,gBAAgB,EAAE,KAAK,MAAM,OAAO;AAC7D,SAAK,OAAO,MAAM,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,cAAc,OAAO;AACnE,OAAG,SAAS,UAAU,YAAY,KAChC,OAAO,MAAM,EACb,KAAK,UAAU,MAAM,EACrB,KAAK,cAAc,GAAG,SAAS,KAAK,GAAG;AAAA,EAC1C;AAEA,MACE,OAAO,MAAM,EACb,KAAK,KAAK,OAAO,EACjB,KAAK,KAAK,WAAW,GAAG,SAAS,UAAU,SAAS,EACpD,KAAK,SAAS,GAAG,SAAS,UAAU,IAAI,EACxC,KAAK,UAAU,IAAI,EACnB,KAAK,QAAQ,UAAU,UAAU,GAAG;AAEtC,MACE,OAAO,MAAM,EACb,KAAK,KAAK,UAAU,GAAG,SAAS,UAAU,IAAI,EAC9C,KAAK,KAAK,WAAW,GAAG,SAAS,UAAU,SAAS,EACpD,KAAK,SAAS,GAAG,SAAS,UAAU,IAAI,EACxC,KAAK,UAAU,IAAI,EACnB,KAAK,QAAQ,UAAU,UAAU,GAAG;AAEtC,MACE,OAAO,MAAM,EACb,KAAK,KAAK,UAAU,CAAC,EACrB,KAAK,KAAK,WAAW,GAAG,SAAS,UAAU,YAAY,OAAO,CAAC,EAC/D,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,QAAQ,EAC1B,KAAK,eAAe,KAAK,EACzB,KAAK,qBAAqB,SAAS,EACnC,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM;AACb,MACE,OAAO,MAAM,EACb,KAAK,KAAK,UAAU,GAAG,SAAS,UAAU,OAAO,IAAI,CAAC,EACtD,KAAK,KAAK,WAAW,GAAG,SAAS,UAAU,YAAY,OAAO,CAAC,EAC/D,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,QAAQ,EAC1B,KAAK,qBAAqB,SAAS,EACnC,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM;AACd;AAEA,SAAS,WAAW,IAAI;AACvB,MAAI,GAAG,OAAO,GAAG,IAAI,WAAW,GAAG,IAAI,QAAQ,GAAG,QAAQ,KAAK,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,QAAQ;AAElG;AAAA,EACD;AAIA,QAAM,UAAU;AAEhB,KAAG,SAAS,YAAY;AAAA,IACvB,WAAW;AAAA,IACX,MAAM;AAAA,EACP;AAEA,KAAG,SAAS,UAAU,MAAM,GAAG,aAAa,OAAO,IAAI;AACvD,KAAG,SAAS,UAAU,IAAI,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,cAAc;AAC7G,KAAG,gBAAgB,KAAK,GAAG,SAAS,SAAS;AAE7C,QAAM,KAAK,GAAG,SAAS,UAAU,IAAI,OAAO,IAAI;AAEhD,QAAM,MAAM,GACV,OAAO,KAAK,EACZ,KAAK,UAAU,UAAU,GAAG,SAAS,UAAU,QAAQ,CAAC,EACxD,KAAK,UAAU,WAAW,GAAG,SAAS,UAAU,YAAY,IAAI;AAElE,KAAG,SAAS,UAAU,MAAM;AAC5B,KAAG,SAAS,UAAU,YAAY,GAAG,OAAO,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,GAAG,EAAE,MAAM,gBAAgB,MAAM;AAErH,KAAG,SAAS,UAAU,QAAQ,IAC5B,OAAO,GAAG,EACV,KAAK,aAAa,eAAe,UAAU,OAAO,WAAW,GAAG,SAAS,UAAU,aAAa,GAAG;AAErG,QAAM,SAAS,KAAK,OAAO,EAAE,SAAS;AAEtC,QAAM,OAAO,IAAI,OAAO,MAAM;AAC9B;AACC,UAAM,OAAO,KAAK,OAAO,gBAAgB,EAAE,KAAK,MAAM,MAAM;AAC5D,SAAK,OAAO,MAAM,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,cAAc,OAAO;AACnE,OAAG,SAAS,UAAU,WAAW,KAAK,OAAO,MAAM,EAAE,KAAK,UAAU,MAAM,EAAE,KAAK,cAAc,GAAG,SAAS,IAAI,GAAG;AAAA,EACnH;AAEA,MACE,OAAO,MAAM,EACb,KAAK,KAAK,OAAO,EACjB,KAAK,KAAK,WAAW,GAAG,SAAS,UAAU,SAAS,EACpD,KAAK,SAAS,GAAG,SAAS,UAAU,IAAI,EACxC,KAAK,UAAU,IAAI,EACnB,KAAK,QAAQ,UAAU,SAAS,GAAG;AACtC;AAEA,SAAS,kBAAkB,IAAI;AAC9B,QAAM,MAAM,GAAG,aAAa,OAAO,IAAI,EAAE,MAAM,WAAW,MAAM;AAEhE,KAAG,oBAAoB;AAAA,IACtB;AAAA,IACA,WAAW,oBAAI,IAAI;AAAA,IACnB,WAAW,QAAa,gBAAgB;AAAA,IACxC,QAAQ;AAAA,EACT;AACA,MAAI,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,eAAe;AACxF,KAAG,kBAAkB,SAAS,IAAI,OAAO,IAAI;AAC7C,KAAG,gBAAgB,KAAK,GAAG,iBAAiB;AAC7C;AAEA,SAAS,uBAAuB,IAAI;AACnC,MAAI,GAAG,aAAc;AACrB,MAAI,CAAC,GAAG,gBAAiB;AAMzB,aAAW,OAAO,GAAG,gBAAgB,YAAY;AAChD,UAAM,OAAO,GAAG,gBAAgB,WAAW,GAAG;AAC9C,QAAI,CAAC,KAAK,QAAQ;AAEjB;AAAA,IACD;AAGA,QAAI,CAAC,KAAK,gBAAgB,EAAE,KAAK,wBAAwB,MAAM;AAC9D,WAAK,eAAe,oBAAI,IAAI;AAAA,IAE7B;AAEA,SAAK,cAAc,oBAAI,IAAI;AAS3B,SAAK,YAAY,GAAG,aAAa,OAAO,IAAI;AAC5C,SAAK,aAAa,KAAK,UAAU,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,KAAK,KAAK;AAEhH,SAAK,eAAe,KAAK,UAAU,OAAO,IAAI;AAAA,EAC/C;AACD;AAEA,SAAS,gCAAgC,IAAI;AAC5C,MAAI,CAAC,GAAG,aAAc;AACtB,MAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,mBAAoB;AAW3C,KAAG,4BAA4B;AAAA,IAC9B,MAAM,CAAC;AAAA,EACR;AACA,aAAW,KAAK,GAAG,IAAI,mBAAmB,MAAM;AAC/C,UAAM,KAAK,GAAG,aAAa,OAAO,IAAI,EAAE,MAAM,WAAW,MAAM;AAE/D,OAAG,OAAO,IAAI,EAAE,KAAK,GAAG,IAAI,mBAAmB,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG;AAE9G,UAAM,KAAK,GAAG,OAAO,IAAI;AACzB,UAAM,QAAQ,GAAG,OAAO,OAAO,EAAE,MAAM,kBAAkB,KAAK,EAAE,MAAM,UAAU,MAAM;AAEtF,OAAG,0BAA0B,KAAK,CAAC,IAAI;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,yBAAyB,IAAI;AACrC,MAAI,GAAG,aAAc;AACrB,MAAI,CAAC,GAAG,kBAAmB;AAM3B,aAAW,OAAO,GAAG,kBAAkB,YAAY;AAClD,UAAM,OAAO,GAAG,kBAAkB,WAAW,GAAG;AAChD,QAAI,CAAC,KAAK,QAAQ;AAEjB;AAAA,IACD;AACA,SAAK,eAAe,oBAAI,IAAI;AAG5B,SAAK,cAAc,oBAAI,IAAI;AAS3B,SAAK,YAAY,GAAG,aAAa,OAAO,IAAI;AAC5C,SAAK,aAAa,KAAK,UAAU,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,KAAK,KAAK;AAEhH,SAAK,eAAe,KAAK,UAAU,OAAO,IAAI;AAAA,EAC/C;AACD;AAEA,SAAS,oBAAoB,SAAS,IAAI,OAAO;AAOhD,aAAW,OAAO,QAAQ,YAAY;AACrC,UAAM,OAAO,QAAQ,WAAW,GAAG;AACnC,QAAI,CAAC,KAAK,QAAQ;AAEjB;AAAA,IACD;AAEA,SAAK,YAAY,GAAG,aAAa,OAAO,IAAI;AAC5C,SAAK,aAAa,KAAK,UAAU,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,KAAK,KAAK;AAEhH,SAAK,eAAe,KAAK,UAAU,OAAO,IAAI;AAE9C,QAAI,KAAK,WAAW;AAQnB,YAAM,SAAS,KAAK,aAClB,OAAO,QAAQ,EACf,MAAM,UAAU,mBAAmB,EACnC,GAAG,UAAU,MAAM;AACnB,cAAM,QAAQ,OAAO,SAAS,OAAO;AAErC,YAAI,SAAS,KAAK;AACjB,eAAK,UAAU;AAAA,QAChB,OAAO;AACN,iBAAO,KAAK;AACZ,eAAK,gBAAgB,SAAS;AAAA,QAC/B;AAEA,eAAO,IAAI,KAAK;AAAA,MACjB,CAAC;AAEF,YAAM,YAAY,OAAO,OAAO,QAAQ,EAAE,KAAK,SAAS,GAAG,EAAE,SAAS,QAAQ,QAAG;AAEjF,YAAM,aAAa,OAAO,OAAO,QAAQ,EAAE,KAAK,SAAS,GAAG,EAAE,SAAS,QAAQ,QAAG;AAElF,YAAM,UAAU,OAAO,OAAO,QAAQ,EAAE,KAAK,SAAS,GAAG,EAAE,SAAS,QAAQ,GAAG;AAE/E,UAAI,KAAK,SAAS;AACjB,gBAAQ,SAAS,YAAY,CAAC;AAAA,MAC/B,WAAW,KAAK,eAAe;AAC9B,kBAAU,SAAS,YAAY,CAAC;AAAA,MACjC,OAAO;AACN,mBAAW,SAAS,YAAY,CAAC;AAAA,MAClC;AAEA,WAAK,aACH,OAAO,OAAO,EACd,KAAK,QAAQ,QAAQ,EACrB,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,KAAK,WAAW,EAClC,GAAG,SAAS,CAAAC,WAAS;AACrB,YAAIA,OAAM,OAAO,QAAS;AAC1B,aAAK,cAAcA,OAAM,OAAO;AAChC,eAAO,IAAI,KAAK;AAAA,MACjB,CAAC;AAAA,IACH,OAAO;AAEN,WAAK,eAAe,oBAAI,IAAI;AAG5B,WAAK,cAAc,oBAAI,IAAI;AAS3B,WAAK,YAAY,GAAG,aAAa,OAAO,IAAI;AAC5C,WAAK,aAAa,KAAK,UAAU,OAAO,IAAI,EAAE,MAAM,cAAc,OAAO,EAAE,MAAM,WAAW,GAAG,EAAE,KAAK,KAAK,KAAK;AAEhH,WAAK,eAAe,KAAK,UAAU,OAAO,IAAI;AAAA,IAC/C;AAAA,EACD;AACD;AAEA,SAAS,iBAAiB,IAAI;AAC7B,MAAI,CAAC,GAAG,mBAAmB;AAE1B;AAAA,EACD;AAEA,KAAG,kBAAkB,OAAO,UAAU,GAAG,EAAE,OAAO;AAClD,MAAI,GAAG,kBAAkB,UAAU,QAAQ,EAAG;AAC9C,KAAG,kBAAkB,IAAI,MAAM,WAAW,WAAW;AACrD,aAAW,OAAO,GAAG,kBAAkB,WAAW;AACjD,UAAM,QAAQ,GAAG,kBAAkB,UAAU,GAAG;AAChD,UAAM,IAAI,GAAG,kBAAkB,OAC7B,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,MAAM,UAAU,kBAAkB;AACpC,MAAE,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,MAAM,iBAAiB,MAAM,EAC7B,MAAM,WAAW,UAAU,EAC3B,MAAM,UAAU,eAAe,KAAK,EACpC,MAAM,SAAS,KAAK,EACpB,MAAM,aAAa,MAAM,EACzB,KAAK,GAAG;AAAA,EACX;AACD;AAEA,SAAS,kBAAkB,IAAI,OAAO;AAQrC,MAAI,CAAC,GAAG,iBAAiB,CAAC,GAAG,cAAc,OAAQ;AAEnD,KAAG,cAAc,OAAO,UAAU,GAAG,EAAE,OAAO;AAE9C,QAAM,UAAU,oBAAI,IAAI;AASxB,MAAI,GAAG,UAAU;AAChB,eAAW,KAAK,GAAG,UAAU;AAC5B,UAAI,CAAC,QAAQ,IAAI,EAAE,KAAK,GAAG;AAC1B,gBAAQ,IAAI,EAAE,OAAO;AAAA,UACpB,OAAO;AAAA,UACP,OAAO,EAAE;AAAA,UACT,OAAO;AAAA,QACR,CAAC;AAAA,MACF;AACA,cAAQ,IAAI,EAAE,KAAK,EAAE;AAAA,IACtB;AAAA,EACD;AAEA,MAAI,GAAG,cAAc;AACpB,QAAI,GAAG,MAAM;AACZ,iBAAW,KAAK,GAAG,MAAM;AACxB,YAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG;AACvB,kBAAQ,IAAI,EAAE,IAAI;AAAA,YACjB,IAAI,EAAE;AAAA,YACN,OAAO;AAAA,UACR,CAAC;AAAA,QACF;AACA,gBAAQ,IAAI,EAAE,EAAE,EAAE;AAAA,MACnB;AAAA,IACD;AAAA,EACD,WAAW,GAAG,OAAO;AACpB,eAAW,KAAK,GAAG,OAAO;AACzB,iBAAW,KAAK,EAAE,SAAS;AAC1B,mBAAW,KAAK,EAAE,OAAO;AACxB,cAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG;AACvB,oBAAQ,IAAI,EAAE,IAAI;AAAA,cACjB,IAAI,EAAE;AAAA,cACN,OAAO;AAAA,YACR,CAAC;AAAA,UACF;AACA,kBAAQ,IAAI,EAAE,EAAE,EAAE;AAAA,QACnB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,QAAM,WAAW,CAAC,GAAG,QAAQ,OAAO,CAAC;AACrC,WAAS,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACzC,KAAG,cAAc,cAAc,SAAS,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC;AAEvE,aAAW,KAAK,UAAU;AACzB,QAAI,KACH,OACA,MACA,QAAQ;AAET,QAAI,EAAE,IAAI;AACT,YAAM,EAAE;AACR,cAAe,SAAS,EAAE,EAAE;AAC5B,UAAI,EAAE,MAAa,MAAO,QAAO;AAAA,eACxB,EAAE,MAAa,MAAO,QAAO;AAAA,eAC7B,EAAE,MAAa,OAAO;AAC9B,gBAAe,OAAc,SAAS,EAAE;AACxC,eAAO;AAAA,MACR,WAAW,EAAE,MAAa,KAAM,QAAO;AAAA,eAC9B,EAAE,MAAa,YAAa,QAAO;AAAA,IAC7C,OAAO;AACN,YAAM,EAAE;AACR,cAAe,OAAO,EAAE,KAAK,EAAE;AAC/B,cAAe,OAAO,EAAE,KAAK,EAAE;AAC/B,aAAc,OAAO,EAAE,KAAK,EAAE;AAAA,IAC/B;AAEA,UAAM,OAAO,GAAG,cAAc,OAC5B,OAAO,KAAK,EACZ,KAAK,SAAS,SAAS,EACvB,MAAM,WAAW,cAAc,EAC/B,GAAG,SAAS,MAAM;AAClB,SAAG,KACD,MAAM,EACN,EAAE,OAAO,KAAK,EACd,KAAK,SAAS,gBAAgB,EAC9B,KAAK,MAAM,EACX,GAAG,SAAS,MAAM;AAClB,WAAG,cAAc,aAAa,IAAI,GAAG;AACrC,oBAAY;AAAA,MACb,CAAC;AAEF,SAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,WAAW,EAChB,GAAG,SAAS,MAAM;AAClB,mBAAW,MAAM,QAAQ,KAAK,GAAG;AAChC,aAAG,cAAc,aAAa,IAAI,EAAE;AAAA,QACrC;AACA,WAAG,cAAc,aAAa,OAAO,GAAG;AACxC,oBAAY;AAAA,MACb,CAAC;AAEF,UAAI,GAAG,cAAc,aAAa,MAAM;AACvC,WAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,UAAU,EACf,GAAG,SAAS,MAAM;AAClB,aAAG,cAAc,aAAa,MAAM;AACpC,sBAAY;AAAA,QACb,CAAC;AAAA,MACH;AAEA,SAAG,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,WAAW,MAAM,EAAE,MAAM,aAAa,MAAM,EAAE,MAAM,SAAS,OAAO,EAAE,KAAK,IAAI;AAE7G,SAAG,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,IAC9B,CAAC;AAEF,SACE,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,WAAW,EACzB,MAAM,cAAc,KAAK,EACzB,KAAK,EAAE,QAAQ,IAAI,EAAE,QAAQ,QAAQ;AACvC,SACE,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,MAAM,SAAS,KAAK,EACpB,KAAK,WAAW,KAAK;AAAA,EACxB;AAGA,aAAW,OAAO,GAAG,cAAc,cAAc;AAChD,OAAG,cAAc,OACf,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,SAAS,EACvB,MAAM,mBAAmB,cAAc,EACvC,KAAK,OAAO,UAAU,GAAG,IAAW,SAAS,GAAG,IAAW,OAAO,GAAG,EAAE,KAAK,EAC5E,GAAG,SAAS,MAAM;AAClB,SAAG,cAAc,aAAa,OAAO,GAAG;AACxC,kBAAY;AAAA,IACb,CAAC;AAAA,EACH;AAEA,MAAI,GAAG,eAAe;AAErB,OAAG,cAAc,OACf,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,mBAA0B,MAAM,GAAG,aAAa,IAAI,yBAAyB,EAClF,MAAM,eAAe,QAAQ,EAC7B,MAAM,UAAU,MAAM;AAAA,EACzB;AAEA,QAAM,cAAc,MAAM;AACzB,OAAG,KAAK,KAAK;AACb,WAAO,IAAI,KAAK;AAAA,EACjB;AACD;AAEA,SAAS,kCAAkC,IAAI,OAAO;AAMrD,MAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,mBAAoB;AAI3C,aAAW,KAAK,GAAG,0BAA0B,MAAM;AAClD,OAAG,0BAA0B,KAAK,CAAC,EAAE,GAAG,MAAM,WAAW,MAAM;AAAA,EAChE;AAEA,MAAI,CAAC,GAAG,UAAU;AAEjB;AAAA,EACD;AAEA,QAAM,iBAAiB,oBAAI,IAAI;AAE/B,aAAW,KAAK,GAAG,UAAU;AAC5B,QAAI,EAAE,KAAK,OAAW;AACtB,QAAI,CAAC,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,EAAG;AACvC,eAAW,KAAK,GAAG,IAAI,mBAAmB,MAAM;AAC/C,YAAM,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;AAC3B,UAAI,KAAK,OAAW;AACpB,YAAM,MAAM,GAAG,IAAI,mBAAmB,KAAK,CAAC,EAAE,WAAW,CAAC;AAC1D,UAAI,KAAK;AAGR,YAAI,IAAI,OAAQ;AAChB,YAAI,CAAC,eAAe,IAAI,CAAC,EAAG,gBAAe,IAAI,GAAG,oBAAI,IAAI,CAAC;AAC3D,uBAAe,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,eAAe,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE;AAAA,MACrE;AAAA,IACD;AAAA,EACD;AAEA,aAAW,CAAC,GAAG,EAAE,KAAK,gBAAgB;AACrC,UAAM,MAAM,GAAG,0BAA0B,KAAK,CAAC;AAE/C,QAAI,GAAG,MAAM,WAAW,WAAW;AACnC,QAAI,MAAM,UAAU,GAAG,EAAE,OAAO;AAEhC,UAAM,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,eAAW,CAAC,GAAG,KAAK,KAAK,KAAK;AAC7B,YAAM,MAAM,GAAG,IAAI,mBAAmB,KAAK,CAAC,EAAE,WAAW,CAAC;AAE1D,YAAM,KAAK,IAAI,MAAM,OAAO,IAAI;AAChC,SAAG,OAAO,IAAI,EACZ,MAAM,cAAc,IAAI,KAAK,EAC7B,MAAM,WAAW,SAAS,EAC1B,MAAM,SAAS,OAAO,EACtB,MAAM,cAAc,OAAO,EAC3B,KAAK,QAAQ,IAAI,QAAQ,EAAE;AAC7B,YAAM,IAAI,IAAM,IAAI,KAAK;AACzB,SAAG,OAAO,IAAI,EACZ,KAAK,WAAW,IAAI,IAAI,EACxB,MAAM,cAAc,UAAU,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,EAClE,MAAM,WAAW,GAAG;AAAA,IACvB;AAAA,EACD;AACD;AAEA,SAAS,qBAAqB,IAAI,OAAO;AACxC,MAAI,GAAG,cAAc;AAEpB;AAAA,EACD;AAGA,QAAM,mBAAmB,CAAC;AAM1B,aAAW,WAAW,CAAC,mBAAmB,qBAAqB,gBAAgB,GAAG;AACjF,QAAI,CAAC,GAAG,OAAO,EAAG;AAGlB,eAAW,OAAO,GAAG,OAAO,EAAE,YAAY;AACzC,YAAM,OAAO,GAAG,OAAO,EAAE,WAAW,GAAG;AACvC,UAAI,CAAC,KAAK,OAAQ;AAClB,WAAK,YAAY,MAAM;AAAA,IACxB;AAGA,QAAI,WAAW,mBAAmB;AACjC,iBAAW,OAAO,GAAG,gBAAgB,YAAY;AAChD,mBAAW,UAAU,GAAG,gBAAgB,SAAS;AAChD,gCAAsB,KAAK,GAAG,gBAAgB,WAAW,GAAG,GAAG,GAAG,gBAAgB,QAAQ,MAAM,CAAC;AAAA,QAClG;AAAA,MACD;AAAA,IACD,OAAO;AACN,UAAI,GAAG,OAAO;AACb,mBAAW,KAAK,GAAG,OAAO;AACzB,qBAAW,KAAK,EAAE,SAAS;AAC1B,uBAAW,KAAK,EAAE,OAAO;AAExB,sCAAwB,EAAE,OAAO,IAAI,EAAE,EAAE;AAAA,YAC1C;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,UAAI,GAAG,UAAU;AAChB,mBAAW,KAAK,GAAG,UAAU;AAC5B,cAAI,EAAE,MAAa,YAAY;AAC9B,gBAAI,EAAE,YAAY;AACjB,yBAAW,KAAK,EAAE,YAAY;AAC7B,wCAAwB,GAAG,IAAI,EAAE,EAAE;AAAA,cACpC;AAAA,YACD;AACA,gBAAI,EAAE,MAAM;AACX,mCAAqB,IAAI,CAAC;AAAA,YAC3B;AAAA,UAED,OAAO;AACN,oBAAQ,MAAM,iBAAiB,EAAE,EAAE;AAAA,UACpC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGA,eAAW,OAAO,GAAG,OAAO,EAAE,YAAY;AACzC,YAAM,OAAO,GAAG,OAAO,EAAE,WAAW,GAAG;AACvC,UAAI,CAAC,KAAK,OAAQ;AAElB,WAAK,WAAW,QAAQ,uBAAuB,IAAI,EAAE,GAAG,SAAS,MAAM;AACtE,WAAG,KAAK,KAAK;AACb,aAAK,SAAS;AACd,WAAG,gBAAgB,MAAM,WAAW,WAAW;AAC/C,QAAO,QAAQ,KAAK,YAAY,GAAG,iBAAiB;AACpD,aAAK,UAAU,WAAW,EAAE,MAAM,GAAG,EAAE,MAAM,WAAW,MAAM;AAC9D,mBAAW,MAAM;AAChB,+BAAqB,IAAI,KAAK;AAAA,QAC/B,GAAG,GAAG;AAAA,MACP,CAAC;AAED,UAAI,KAAK,QAAQ;AAEhB,aAAK,UAAU,MAAM,WAAW,MAAM;AACtC,yBAAiB,KAAK,IAAI;AAC1B;AAAA,MACD;AAIA,UAAI,KAAK,YAAY,OAAO,KAAK,aAAa,QAAQ,GAAG;AAExD,aAAK,UAAU,MAAM,WAAW,MAAM;AACtC;AAAA,MACD;AAGA,WAAK,UAAU,MAAM,WAAW,WAAW;AAE3C,WAAK,aAAa,UAAU,GAAG,EAAE,OAAO;AAExC,YAAM,MAAM,CAAC,GAAG,KAAK,WAAW;AAChC,UAAI,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU;AAEpD,iBAAW,CAAC,UAAU,EAAE,KAAK,KAAK;AACjC,cAAM,WAAW,KAAK,OAAO,QAAQ,IAAI,KAAK,OAAO,QAAQ,EAAE,OAAO;AAEtE,cAAM,OAAO,KAAK,aAChB,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,SAAS,EACvB,GAAG,SAAS,MAAM;AAClB,aAAG,KAAK,MAAM;AAEd,cAAI,KAAK,aAAa,IAAI,QAAQ,GAAG;AACpC,eAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,MAAM,EACX,GAAG,SAAS,MAAM;AAClB,iBAAG,KAAK,KAAK;AACb,mBAAK,aAAa,OAAO,QAAQ;AACjC,qBAAO,IAAI,KAAK;AAAA,YACjB,CAAC;AAAA,UACH,OAAO;AACN,eAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,MAAM,EACX,GAAG,SAAS,MAAM;AAClB,iBAAG,KAAK,KAAK;AACb,mBAAK,aAAa,IAAI,QAAQ;AAC9B,qBAAO,IAAI,KAAK;AAAA,YACjB,CAAC;AAAA,UACH;AACA,aAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,WAAW,EAChB,GAAG,SAAS,MAAM;AAClB,eAAG,KAAK,KAAK;AACb,uBAAW,CAAC,MAAM,CAAC,KAAK,KAAK;AAC5B,mBAAK,aAAa,IAAI,IAAI;AAAA,YAC3B;AACA,iBAAK,aAAa,OAAO,QAAQ;AACjC,mBAAO,IAAI,KAAK;AAAA,UACjB,CAAC;AACF,cAAI,KAAK,aAAa,MAAM;AAC3B,eAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,UAAU,EACf,GAAG,SAAS,MAAM;AAClB,iBAAG,KAAK,KAAK;AACb,mBAAK,aAAa,MAAM;AACxB,qBAAO,IAAI,KAAK;AAAA,YACjB,CAAC;AAAA,UACH;AAGA,cAAI,KAAK,OAAO,QAAQ,KAAK,KAAK,OAAO,QAAQ,EAAE,OAAO;AACzD,eAAG,KAAK,EACN,OAAO,KAAK,EACZ,KAAK,KAAK,OAAO,QAAQ,EAAE,KAAK,EAChC,MAAM,WAAW,GAAG,EACpB,MAAM,aAAa,MAAM,EACzB,MAAM,UAAU,MAAM;AAAA,UACzB;AAGA,cAAI,GAAG,UAAU;AAChB,kBAAM,OAAO,CAAC,GAAG,GAAG,QAAQ;AAC5B,iBAAK,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAE/B,kBAAM,QAAQ,GAAG,KAAK,EACpB,OAAO,KAAK,EACZ,MAAM,UAAU,KAAK,EACrB,MAAM,aAAa,MAAM,EACzB,MAAM,WAAW,GAAG,EACpB,MAAM,kBAAkB,KAAK;AAC/B,uBAAW,CAAC,IAAI,KAAK,KAAK,MAAM;AAC/B,oBAAM,KAAK,MAAM,OAAO,IAAI;AAC5B,iBAAG,OAAO,IAAI,EAAE,KAAY,SAAS,EAAE,CAAC;AACxC,iBAAG,OAAO,IAAI,EAAE,KAAK,KAAK;AAAA,YAC3B;AAAA,UACD;AACA,aAAG,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,QAC9B,CAAC;AAEF,cAAM,QACL,WAAW,qBAAqB,GAAG,uBAAuB,GAAG,oBAAoB,MAAM,QAAQ,IAC5F,GAAG,oBAAoB,MAAM,QAAQ,IACrC;AAEJ,aACE,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,WAAW,EACzB,MAAM,cAAc,KAAK,EACzB,KAAK,GAAG,UAAU;AACpB,aAAK,OAAO,MAAM,EAAE,KAAK,WAAW,QAAQ;AAAA,MAC7C;AAEA,UAAI,KAAK,aAAa,MAAM;AAE3B,mBAAW,YAAY,KAAK,cAAc;AACzC,gBAAM,WAAW,KAAK,OAAO,QAAQ,KAAK,KAAK,OAAO,QAAQ,EAAE,OAAO,KAAK,OAAO,QAAQ,EAAE,OAAO;AAEpG,eAAK,aACH,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,SAAS,EACvB,MAAM,mBAAmB,cAAc,EACvC,KAAK,QAAQ,EACb,GAAG,SAAS,MAAM;AAClB,iBAAK,aAAa,OAAO,QAAQ;AACjC,mBAAO,IAAI,KAAK;AAAA,UACjB,CAAC;AAAA,QACH;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,4BAA0B,IAAI,OAAO,gBAAgB;AACtD;AAEA,SAAS,0BAA0B,IAAI,OAAO,kBAAkB;AAE/D,MAAI,gBAAgB;AACpB,aAAW,YAAY,GAAG,iBAAiB;AAC1C,aAAS,IACP,OAAO,IAAI,EACX,QAAQ,uBAAuB,IAAI,EACnC,GAAG,SAAS,MAAM;AAClB,SAAG,KAAK,KAAK;AACb,eAAS,SAAS;AAClB,SAAG,gBAAgB,MAAM,WAAW,WAAW;AAC/C,MAAO,QAAQ,SAAS,IAAI,OAAO,IAAI,GAAG,GAAG,iBAAiB;AAC9D,eAAS,IAAI,WAAW,EAAE,MAAM,GAAG,EAAE,MAAM,WAAW,MAAM;AAC5D,iBAAW,MAAM;AAChB,6BAAqB,IAAI,KAAK;AAAA,MAC/B,GAAG,GAAG;AAAA,IACP,CAAC;AAEF,aAAS,IAAI,MAAM,WAAW,SAAS,SAAS,SAAS,WAAW;AACpE,QAAI,SAAS,QAAQ;AACpB;AAAA,IACD;AAAA,EACD;AAEA,MAAI,CAAC,iBAAiB,UAAU,CAAC,eAAe;AAC/C,OAAG,gBAAgB,MAAM,WAAW,MAAM;AAAA,EAC3C,OAAO;AACN,OAAG,gBAAgB,MAAM,WAAW,WAAW;AAC/C,OAAG,kBAAkB,UAAU,GAAG,EAAE,OAAO;AAE3C,UAAM,MAAM,GAAG,kBACb,KAAK,SAAS,qBAAqB,EACnC,KAAK,SAAS,EACd,GAAG,SAAS,MAAM;AAClB,SAAG,KAAK,MAAM;AAEd,iBAAW,YAAY,GAAG,iBAAiB;AAC1C,YAAI,CAAC,SAAS,OAAQ;AACtB,cAAM,MAAM,GAAG,KAAK,EAClB,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,aAAG,KAAK,KAAK;AACb,mBAAS,SAAS;AAClB,+BAAqB,IAAI,KAAK;AAAA,QAC/B,CAAC;AAEF,YAAI,SAAS,UAAU,SAAS,aAAa;AAC5C,cACE,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,WAAW,EACzB,MAAM,cAAc,SAAS,EAC7B,KAAK,SAAS,WAAW;AAAA,QAC5B;AAEA,YAAI,OAAO,MAAM,EAAE,KAAK,WAAW,SAAS,IAAI,KAAK,EAAE,WAAW,SAAS;AAAA,MAC5E;AAEA,iBAAW,QAAQ,kBAAkB;AACpC,YAAI,CAAC,KAAK,OAAQ;AAClB,cAAM,QAAQ,CAAC,GAAG,KAAK,YAAY,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,YAAY,CAAC;AACjF,cAAM,MAAM,GAAG,KAAK,EAClB,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,aAAG,KAAK,KAAK;AACb,eAAK,SAAS;AACd,+BAAqB,IAAI,KAAK;AAAA,QAC/B,CAAC;AAEF,YACE,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAS,WAAW,EACzB,MAAM,cAAc,SAAS,EAC7B,KAAK,KAAK;AAEZ,YAAI,OAAO,MAAM,EAAE,KAAK,WAAW,KAAK,KAAK;AAAA,MAC9C;AAEA,SAAG,KAAK,UAAU,IAAI,KAAK,CAAC;AAAA,IAC7B,CAAC;AAAA,EACH;AACD;AAEA,SAAS,sBAAsB,KAAK,MAAM,QAAQ;AACjD,MAAI,EAAE,OAAO,QAAS;AAEtB,MAAI,CAAC,KAAK,OAAQ;AAElB,QAAM,QAAQ,OAAO,GAAG;AACxB,MAAI,CAAC,KAAK,YAAY,IAAI,KAAK,GAAG;AACjC,SAAK,YAAY,IAAI,OAAO;AAAA,MAC3B,YAAY;AAAA,IACb,CAAC;AAAA,EACF;AACA,OAAK,YAAY,IAAI,KAAK,EAAE;AAC5B,MAAI,CAAC,KAAK,QAAQ;AACjB,SAAK,SAAS,CAAC;AAAA,EAChB;AACA,MAAI,CAAC,KAAK,OAAO,KAAK,GAAG;AACxB,SAAK,OAAO,KAAK,IAAI;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,IACR;AAAA,EACD;AACD;AAEA,SAAS,wBAAwB,OAAO,IAAI,QAAQ;AACnD,MAAI,CAAC,OAAO;AAEX;AAAA,EACD;AACA,MAAI,CAAC,GAAG,kBAAmB;AAE3B,aAAW,OAAO,GAAG,kBAAkB,YAAY;AAClD,UAAM,OAAO,GAAG,kBAAkB,WAAW,GAAG;AAChD,QAAI,CAAC,KAAK,OAAQ;AAElB,UAAM,QAAQ,MAAM,GAAG;AAEvB,QAAI,SAAS,QAAW;AAEvB;AAAA,IACD;AAWA,QAAI,CAAC,KAAK,YAAY,IAAI,KAAK,GAAG;AACjC,WAAK,YAAY,IAAI,OAAO;AAAA,QAC3B,YAAY;AAAA,QACZ,UAAU,oBAAI,IAAI;AAAA,MACnB,CAAC;AAAA,IACF;AACA,SAAK,YAAY,IAAI,KAAK,EAAE;AAE5B,QAAI,CAAC,KAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,MAAM,GAAG;AACtD,WAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,QAAQ,CAAC;AAAA,IACnD;AAEA,SAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,QAAQ,KAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,MAAM,IAAI,CAAC;AAAA,EACtG;AACD;AAEA,SAAS,qBAAqB,IAAI,GAAG;AACpC,MAAI,CAAC,GAAG,eAAgB;AAExB,aAAW,OAAO,GAAG,eAAe,YAAY;AAC/C,UAAM,OAAO,GAAG,eAAe,WAAW,GAAG;AAC7C,QAAI,CAAC,KAAK,OAAQ;AAElB,UAAM,SAAS,EAAE,KAAK,GAAG;AAEzB,QAAI,UAAU,OAAW;AAGzB,QAAI;AACJ,QAAI,MAAM,QAAQ,MAAM,GAAG;AAC1B,cAAQ,OAAO,CAAC;AAChB,UAAI,SAAS,IAAK;AAAA,IACnB,OAAO;AACN,cAAQ;AAAA,IACT;AAEA,QAAI,KAAK,aAAa,IAAI,KAAK,EAAG;AAGlC,QAAI,CAAC,KAAK,YAAY,IAAI,KAAK,GAAG;AACjC,WAAK,YAAY,IAAI,OAAO;AAAA,QAC3B,YAAY;AAAA,QACZ,UAAU,oBAAI,IAAI;AAAA,MACnB,CAAC;AAAA,IACF;AACA,SAAK,YAAY,IAAI,KAAK,EAAE;AAE5B,QAAI,CAAC,KAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,GAAG;AACpD,WAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,EAAE,IAAI,CAAC;AAAA,IACjD;AAEA,SAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,EAAE,IAAI,KAAK,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,CAAC;AAAA,EAClG;AACD;;;AC1nCO,SAAS,oBAAoB,IAAI,OAAO;AAQ9C,aAAW,EAAE;AAEb,QAAM,QAAQ,CAAC;AACf,QAAM,SAAS,CAAC;AAChB,QAAM,SAAS,CAAC;AAChB,QAAM,SAAS,CAAC;AAChB,QAAM,QAAQ,CAAC;AAEf,QAAM,gBAAgB;AAEtB,MAAI,eAAe,GAClB,eAAe,GACf,gBAAgB,GAChB,aAAa;AAEd,MAAI,GAAG,MAAM;AAGZ,eAAW,QAAQ,GAAG,MAAM;AAC3B,UAAI,KAAK,MAAa,eAAe,KAAK,MAAa,MAAM;AAG5D,cAAM,KAAK,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK;AAExF,YAAI,CAAC,MAAM,EAAE,GAAG;AACf,iBAAO,MAAM,KAAK;AAClB,cAAI,KAAK,MAAM,KAAK,IAAI;AACvB,kBAAM,EAAE,IAAI;AACZ,kBAAM,KAAK,IAAI;AACf,gBAAI,KAAK,QAAQ,KAAK,MAAM;AAC3B,iBAAG,kBAAkB,UAAU,IAAI,KAAK,IAAI;AAC5C,iBAAG,kBAAkB,UAAU,KAAK,IAAI;AAAA,YACzC;AACA,gBAAI,KAAK,QAAQ,KAAK,MAAM;AAC3B,iBAAG,kBAAkB,UAAU,IAAI,KAAK,IAAI;AAC5C,iBAAG,kBAAkB,UAAU,KAAK,IAAI;AAAA,YACzC;AAAA,UACD;AAAA,QACD;AACA;AAAA,MACD;AAIA,cAAQ,MAAM,IAAI,KAAK;AACvB,UAAI,KAAK,MAAM,UAAa,KAAK,MAAM,QAAW;AACjD,gBAAQ,IAAI,iBAAiB,KAAK,MAAM,MAAM,KAAK,QAAQ,MAAM,KAAK,IAAI;AAC1E;AAAA,MACD;AAEA,UAAI,KAAK,MAAa,OAAO;AAE5B,qBAAa,KAAK,IAAI,YAAY,KAAK,OAAO;AAC9C,eAAO,KAAK,IAAI;AAAA,MACjB,WAAW,KAAK,MAAa,OAAO;AAEnC,YAAI,eAAe;AAClB,gBAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK;AACpC,0BAAgB,KAAK,IAAI,eAAe,CAAC;AAAA,QAC1C,OAAO;AAEN,cAAI,KAAK,QAAQ,GAAG;AACnB,2BAAe,KAAK,IAAI,cAAc,KAAK,KAAK;AAAA,UACjD,OAAO;AACN,2BAAe,KAAK,IAAI,cAAc,KAAK,KAAK;AAAA,UACjD;AAAA,QACD;AAEA,eAAO,KAAK,IAAI;AAAA,MACjB,WAAW,KAAK,MAAa,OAAO;AACnC,eAAO,KAAK,IAAI;AAAA,MACjB;AAAA,IACD;AAEA,QAAI,OAAO,QAAQ;AAClB,SAAG,SAAS,SAAS,KAAK,IAAI,cAAc,CAAC,YAAY;AACzD,0BAAoB,EAAE;AAAA,IACvB;AAEA,QAAI,OAAO,QAAQ;AAClB,SAAG,SAAS,aAAa;AACzB,0BAAoB,EAAE;AAAA,IACvB;AAAA,EACD;AAGA,QAAM,WAAW,uBAAuB,SAAS,KAAK,GAAG,IAAI,KAAK;AAOlE,KAAG,MAAM,KAAK,aAAa,iBAAiB,WAAW,GAAG;AAE1D,KAAG,UAAU,OAAO,KAAK,aAAa,iBAAiB,WAAW,GAAG;AAErE,QAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM;AAC9C,MAAI,GAAG,UAAU;AAChB,eAAW,KAAK,GAAG,UAAU;AAC5B,UAAI,EAAE,KAAK,QAAW;AACrB,cAAM,KAAK,CAAC;AAAA,MACb;AAAA,IACD;AAAA,EACD;AAEA,QAAM,aAAa,0BAA0B,OAAO,IAAI,KAAK;AAE7D,KAAG,cAAc,GAAG,SAAS,WAAW,aAAa,GAAG;AAExD,gBAAc,IAAI,KAAK;AACxB;AAEA,SAAS,SAAS,KAAK;AAgBtB,QAAM,SAAS,CAAC;AAEhB,QAAM,YAAY;AAElB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACpC,UAAM,KAAK,IAAI,CAAC;AAChB,QAAI,GAAG,UAAW;AAElB,UAAM,YAAY;AAAA,MACjB,IAAI,GAAG;AAAA,MACP,IAAI,GAAG;AAAA,MACP,MAAM,GAAG;AAAA,MACT,MAAM,GAAG;AAAA,MACT,MAAM,GAAG;AAAA,MACT,MAAM,GAAG;AAAA,MACT,MAAM,GAAG;AAAA,MACT,KAAK,CAAC,EAAE;AAAA,IACT;AAEA,aAAS,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACxC,YAAM,KAAK,IAAI,CAAC;AAChB,UAAI,GAAG,UAAW;AAElB,YAAM,WAAW,GAAG,MAAM,UAAa,GAAG,MAAM;AAEhD,UAAI,GAAG,MAAM,UAAa,GAAG,MAAM,QAAW;AAG7C,YAAI,SAAU;AAEd,YAAI,KAAK,IAAI,GAAG,KAAK,GAAG,EAAE,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,GAAG,EAAE,KAAK,WAAW;AACjF,oBAAU,IAAI,KAAK,EAAE;AACrB,aAAG,YAAY;AAAA,QAChB;AAAA,MACD,OAAO;AAEN,YAAI,CAAC,SAAU;AACf,cAAM,QAAQ,GAAG,MAAM,SAAY,GAAG,KAAK,GAAG;AAC9C,cAAM,QAAQ,GAAG,MAAM,SAAY,GAAG,KAAK,GAAG;AAC9C,YAAI,KAAK,IAAI,QAAQ,KAAK,KAAK,WAAW;AACzC,oBAAU,IAAI,KAAK,EAAE;AACrB,aAAG,YAAY;AAAA,QAChB;AAAA,MACD;AAAA,IACD;AAEA,WAAO,KAAK,SAAS;AAAA,EACtB;AAEA,aAAW,KAAK,IAAK,QAAO,EAAE;AAE9B,SAAO;AACR;AAEA,SAAS,kBAAkB,GAAG,IAAI;AACjC,MAAI,GAAG,OAAO,GAAG,IAAI,oBAAoB;AACxC,QAAI,EAAE,cAAc,EAAE,WAAW,CAAC,GAAG;AAEpC,iBAAW,UAAU,GAAG,IAAI,mBAAmB,MAAM;AACpD,cAAM,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM;AAChC,YAAI,GAAG;AACN,iBAAO,GAAG,IAAI,mBAAmB,KAAK,MAAM,EAAE,WAAW,CAAC,EAAE;AAAA,QAC7D;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAc,OAAO,EAAE,KAAK,EAAE;AAC/B;AAEA,SAAS,0BAA0B,OAAO,IAAI,OAAO,UAAU;AAC9D,MAAI,MAAM,UAAU,EAAG,QAAO;AAO9B,QAAM,cAAc;AACpB,QAAM,aAAa;AAEnB,MAAI,kBAAkB;AAEtB,MAAI,GAAG,UAAU,OAAO;AAIvB,UAAM,YAAY,MAAM,OAAO,OAAK,EAAE,MAAa,UAAU;AAC7D,QAAI,UAAU,SAAS,GAAG;AACzB,UAAI,eAAe,WAAW,IAAI,KAAK,GAAG;AACzC,0BAAkB;AAAA,MACnB;AAAA,IACD;AAAA,EACD;AAEA,MAAI,CAAC,iBAAiB;AAKrB,OAAG,UAAU,MAAM,UAAU,GAAG,EAAE,OAAO;AACzC,OAAG,UAAU,KAAK,KAAK,EAAE;AACzB,OAAG,UAAU,KAAK,KAAK,EAAE;AACzB,OAAG,UAAU,KAAK,KAAK,EAAE;AAEzB,eAAW,KAAK,OAAO;AACtB,UAAI,EAAE,MAAa,WAAY;AAE/B,YAAM,IAAI,GAAG,MAAM,OAAO,GAAG;AAC7B,QAAE,KAAK;AAAA,QACN;AAAA,MACD;AAOA,YAAM,QAAQ,kBAAkB,GAAG,EAAE;AAIrC,YAAM,MAAM,EACV,OAAO,MAAM,EACb,KAAK,aAAa,WAAW,EAC7B,KAAK,eAAsB,IAAI,EAC/B,KAAK,QAAQ,KAAK,EAClB,KAAK,qBAAqB,SAAS,EACnC,KAAK,EAAE,KAAK;AAEd,UAAI;AACJ,UAAI,KAAK,WAAY;AACpB,iBAAS,KAAK,QAAQ,EAAE;AAAA,MACzB,CAAC;AAED,YAAM,QAAQ,EACZ,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,cAAc,CAAC,EAC1B,KAAK,KAAK,CAAC,cAAc,CAAC,EAC1B,KAAK,SAAS,WAAW,EACzB,KAAK,UAAU,WAAW,EAC1B,KAAK,QAAQ,KAAK,EAClB,KAAK,gBAAgB,CAAC;AAExB,UAAI,SAAS;AAEb,UAAI,EAAE,cAAc,qBAAqB,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG;AAC9D,kBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC;AAChC,kBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC;AAAA,MACjC,OAAO;AACN,kBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC,EAC9B,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC;AAChC,kBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC,EAC9B,KAAK,MAAM,IAAI,cAAc,CAAC;AAAA,MACjC;AAGA,QAAE,GAAG,QAAQ,EACX,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,cAAc,CAAC,EAC1B,KAAK,SAAS,cAAc,aAAa,MAAM,EAC/C,KAAK,UAAU,WAAW,EAC1B,KAAK,QAAQ,OAAO,EACpB,KAAK,gBAAgB,CAAC,EACtB,GAAG,aAAa,MAAM;AACtB,cAAM,KAAK,gBAAgB,CAAC;AAC5B,gBAAQ,KAAK,UAAU,OAAO;AAC9B,gBAAQ,KAAK,UAAU,OAAO;AAC9B,2BAAmB;AAAA,UAClB,MAAM;AAAA,UACN,UAAU,EAAE,WAAW,CAAC;AAAA,UACxB;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAG,MAAM,KAAK;AACd,cAAM,KAAK,gBAAgB,CAAC;AAC5B,gBAAQ,KAAK,UAAU,KAAK;AAC5B,gBAAQ,KAAK,UAAU,KAAK;AAAA,MAC7B,CAAC;AAIF,QAAE,GAAG,SAAS,cAAc,IAAI;AAEhC,UAAI,MAAM,QAAQ,EAAE,IAAI,SAAS,aAAa,cAAc,GAAG;AAE9D,UAAE,GAAG,SAAS,EAAE,IAAI,cAAc;AAClC,UAAE,GAAG,MAAM,cAAc;AACzB,YAAI,KAAK,KAAK,cAAc,IAAI,UAAU;AAC1C,UAAE,GAAG,MAAM,KAAK,KAAK,CAAC,cAAc,CAAC;AAAA,MACtC,OAAO;AAEN,UAAE,GAAG,SAAS,EAAE,IAAI,cAAc,IAAI,aAAa;AACnD,UAAE,GAAG,MAAM,cAAc,IAAI,aAAa;AAC1C,YAAI,KAAK,KAAK,CAAC,cAAc,IAAI,UAAU,EAAE,KAAK,eAAe,KAAK;AACtE,UAAE,GAAG,MAAM,KAAK,KAAK,CAAC,SAAS,aAAa,cAAc,CAAC;AAAA,MAC5D;AAAA,IACD;AAAA,EACD;AAEA,QAAM,KAAK,CAAC,GAAG,MAAM;AACpB,UAAM,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;AACnD,UAAM,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;AACnD,WAAO,KAAK;AAAA,EACb,CAAC;AAED,QAAM,SAAS,CAAC,CAAC;AACjB,aAAW,QAAQ,OAAO;AACzB,QAAI,mBAAmB,KAAK,MAAa,WAAY;AAIrD,WAAO,KAAK;AAEZ,UAAM,YAAY,KAAK,KAAK,KAAK,GAAG,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;AACtE,UAAM,YAAY,KAAK,KAAK,KAAK,GAAG,SAAS,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE;AAEvE,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,UAAI,OAAO,CAAC,KAAK,WAAW;AAC3B,eAAO,CAAC,IAAI,YAAY;AACxB,aAAK,QAAQ;AACb;AAAA,MACD;AAAA,IACD;AACA,QAAI,KAAK,SAAS,QAAW;AAC5B,WAAK,QAAQ,OAAO;AACpB,aAAO,KAAK,YAAY,SAAS;AAAA,IAClC;AAAA,EACD;AAEA,QAAM,OAAO,kBAAkB,GAAG,UAAU,aAAa,GAAG,UAAU,YAAY;AAElF,aAAW,QAAQ,OAAO;AACzB,QAAI,KAAK,MAAa,SAAS,KAAK,MAAa,SAAS,KAAK,MAAa,OAAO;AAClF,UAAI;AAEJ,UAAI,KAAK,MAAa,OAAO;AAC5B,gBACC,UACA,GAAG,SAAS,IAAI,IAChB,MACA,GAAG,SAAS,IAAI,IAChB,MACA,GAAG,SAAS,IAAI,IAChB,MACA,KAAK,UAAU,GAAG,SAAS,aAC3B;AAAA,MACF,WAAW,KAAK,MAAa,OAAO;AACnC,YAAI,KAAK,QAAQ,GAAG;AACnB,kBACC,UACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,MACA,KAAK,QAAQ,GAAG,SAAS,SACzB;AAAA,QACF,OAAO;AACN,kBACC,UACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,MACA,CAAC,KAAK,QAAQ,GAAG,SAAS,SAC1B;AAAA,QACF;AAAA,MACD,WAAW,KAAK,MAAa,OAAO;AACnC,gBAAe,OAAc,SAAS,EAAE;AAAA,MACzC;AAEA,SAAG,MACD,OAAO,MAAM,EACb,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,EACpC,KAAK,KAAK,QAAQ,cAAc,cAAc,KAAK,KAAK,EACxD,KAAK,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,EACtD,KAAK,UAAU,WAAW,EAC1B,KAAK,QAAQ,KAAK,EAClB,KAAK,mBAAmB,YAAY,EACpC,KAAK,UAAU,MAAM,EACrB,KAAK,SAAS,eAAe,EAC7B,GAAG,aAAa,MAAM;AACtB,2BAAmB;AAAA,UAClB;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAG,MAAM,KAAK;AAAA,MACf,CAAC;AACF;AAAA,IACD;AAEA,QAAI,KAAK,MAAa,cAAc,CAAC,iBAAiB;AACrD,WAAK,GAAG,EAAE;AAAA,QACT;AAAA,QACA,gBACE,KAAK,GAAG,SAAS,KAAK,GAAG,OAC1B,OACC,cAAc,KAAK,cAAc,cAAc,KAAK,SACrD;AAAA,MACF;AACA;AAAA,IACD;AAAA,EACD;AAEA,SAAO,OAAO,OAAO,UAAU,cAAc,cAAc;AAC5D;AAEA,SAAS,eAAe,WAAW,IAAI,OAAO;AAO7C,YAAU,CAAC,EAAE,QAAQ;AAAA,IACpB,GAAG,GAAG,UAAU;AAAA,EACjB;AAEA,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAC1C,UAAM,IAAI,UAAU,CAAC;AACrB,QAAI,EAAE,OAAO,UAAU,IAAI,CAAC,EAAE,KAAK;AAElC,QAAE,QAAQ;AAAA,QACT,GAAG,GAAG,UAAU;AAAA,MACjB;AACA;AAAA,IACD;AACA,MAAE,QAAQ;AAAA,MACT,QAAQ,EAAE,MAAM,UAAU,IAAI,CAAC,EAAE;AAAA,IAClC;AACA,cAAU,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM;AAAA,EAC3C;AAEA,MAAI,UAAU,GAAG;AAEhB,WAAO;AAAA,EACR;AAGA,EAAO,UAAU;AAAA,IAChB,MAAM,GAAG,UAAU,MAAM;AAAA,MACxB,UAAU,EACR,MAAM,GAAG,KAAK,EACd,MAAM,IAAS,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,UAAU,YAAY,CAAC,CAAC,CAAC;AAAA,IAC5E;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,EACX,CAAC;AACD,KAAG,UAAU,KAAK,KAAK,OAAO,EAAE,KAAK,KAAK,GAAG,UAAU,aAAa,IAAI,EAAE;AAC1E,KAAG,UAAU,KAAK,KAAK,eAAe,EAAE,KAAK,KAAK,GAAG,UAAU,aAAa,CAAC;AAC7E,KAAG,UAAU,KAAK,KAAK,UAAU,EAAE,KAAK,KAAK,GAAG,UAAU,aAAa,IAAI,EAAE;AAE7E,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAC1C,UAAM,IAAI,UAAU,CAAC;AACrB,QAAI,EAAE,MAAM,GAAG;AAEd;AAAA,IACD;AACA,QAAI,EAAE,MAAM,UAAU,GAAG;AACxB,QAAE,MAAM,IAAI;AAAA,IACb,OAAO;AACN,QAAE,MAAM,IAAK,KAAK,MAAM,EAAE,MAAM,MAAM,IAAI,GAAG,UAAU,aAAc,KAAK,MAAM,OAAO;AAAA,IACxF;AAAA,EACD;AAIA,QAAM,cAAc;AACpB,QAAM,aAAa;AACnB,aAAW,KAAK,WAAW;AAC1B,UAAM,IAAI,GAAG,MACX,OAAO,GAAG,EACV,KAAK,aAAa,eAAe,EAAE,IAAI,OAAO,GAAG,UAAU,aAAa,EAAE,MAAM,KAAK,GAAG;AAE1F,UAAM,QAAQ,kBAAkB,GAAG,EAAE;AAErC,UAAM,QAAQ,EACZ,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,cAAc,CAAC,EAC1B,KAAK,KAAK,CAAC,cAAc,CAAC,EAC1B,KAAK,SAAS,WAAW,EACzB,KAAK,UAAU,WAAW,EAC1B,KAAK,QAAQ,KAAK,EAClB,KAAK,gBAAgB,CAAC;AAExB,QAAI,SAAS;AAEb,QAAI,EAAE,cAAc,qBAAqB,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG;AAC9D,gBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC;AAChC,gBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC;AAAA,IACjC,OAAO;AACN,gBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC,EAC9B,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC;AAChC,gBAAU,EACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,IAAI,cAAc,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC,EAC9B,KAAK,MAAM,cAAc,IAAI,CAAC,EAC9B,KAAK,MAAM,IAAI,cAAc,CAAC;AAAA,IACjC;AAGA,MAAE,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,cAAc,CAAC,EAC1B,KAAK,KAAK,CAAC,cAAc,CAAC,EAC1B,KAAK,SAAS,WAAW,EACzB,KAAK,UAAU,WAAW,EAC1B,KAAK,QAAQ,OAAO,EACpB,KAAK,gBAAgB,CAAC,EACtB,GAAG,aAAa,MAAM;AACtB,YAAM,KAAK,gBAAgB,CAAC;AAC5B,cAAQ,KAAK,UAAU,OAAO;AAC9B,cAAQ,KAAK,UAAU,OAAO;AAC9B,yBAAmB;AAAA,QAClB,MAAM;AAAA,QACN,UAAU,EAAE,WAAW,CAAC;AAAA,QACxB;AAAA,QACA;AAAA,MACD,CAAC;AAAA,IACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,SAAG,MAAM,KAAK;AACd,YAAM,KAAK,gBAAgB,CAAC;AAC5B,cAAQ,KAAK,UAAU,KAAK;AAC5B,cAAQ,KAAK,UAAU,KAAK;AAAA,IAC7B,CAAC;AACF,WAAO,EAAE;AAAA,EACV;AACA,SAAO;AACR;AAmEA,SAAS,uBAAuB,OAAO,IAAI,OAAO;AACjD,MAAI,MAAM,UAAU,EAAG,QAAO;AAE9B,MAAI;AACJ;AACC,QAAI,WAAW;AACf,eAAW,KAAK,MAAO,YAAW,KAAK,IAAI,UAAU,EAAE,IAAI,MAAM;AAEjE,QAAI,MAAM;AACV,UAAM,IAAI,KAAK,IAAI,GAAG,YAAY,CAAC,IAAI,KAAK;AAgC5C,UAAM,IAAI,OAAY;AACtB,QAAI,YAAY,GAAG;AAClB,QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAC9B,WAAW,YAAY,GAAG;AACzB,QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC;AAAA,IACpC,WAAW,YAAY,GAAG;AACzB,QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC;AAAA,IACpC,WAAW,YAAY,GAAG;AACzB,QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC;AAAA,IACpC,WAAW,YAAY,GAAG;AACzB,QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,IAClC,WAAW,YAAY,IAAI;AAC1B,QAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,IACnC,OAAO;AACN,QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,IACzC;AACA,oBAAgB;AAAA,EACjB;AAIA,MAAI,YAAY;AAEhB,aAAW,KAAK,OAAO;AACtB,MAAE,SAAS,KAAK,KAAK,cAAc,EAAE,IAAI,MAAM,IAAI,KAAK,EAAE;AAC1D,gBAAY,KAAK,IAAI,EAAE,QAAQ,SAAS;AAExC,QAAI,EAAE,MAAM,UAAa,EAAE,MAAM,QAAW;AAC3C,UAAI,EAAE,KAAK,EAAE,IAAI;AAEhB,cAAM,IAAI,EAAE;AACZ,UAAE,KAAK,EAAE;AACT,UAAE,KAAK;AAAA,MACR;AACA,QAAE,MAAM,EAAE,KAAK,EAAE,MAAM;AAAA,IACxB,OAAO;AACN,QAAE,KAAK,EAAE,MAAM,EAAE;AAAA,IAClB;AACA,MAAE,IAAI,EAAE;AAAA,EACT;AAOA,QAAM,WACL,YAAY;AAAA,EACZ,YAAY;AAAA,GACX,MAAM,KAAK,OAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAG,YAAY;AAEjD,KAAG,QAAQ,KAAK,aAAa,kBAAkB,WAAW,KAAK,GAAG;AAElE,QAAM,cAAc,MAAM,QAAQ,MAAM,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;AAI7F,aAAW,MAAM,OAAO;AACvB,UAAM,YAAY,GAAG,MAAM,GAAG;AAE9B,UAAM,gBAAgB,GAAG,aAAa,YAAY,IAAI;AACtD,UAAM,cAAc,GAAG,IAAI,UAAU,IAAI,GAAG,SAAS,GAAG,SAAS;AAEjE,UAAM,IAAI,GAAG,QAAQ,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,GAAG,IAAI,QAAQ,gBAAgB,eAAe,GAAG;AAEnH,UAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG;AACnD,UAAM,QAAQ,YAAY,GAAG,OAAO,eAAe,GAAG,kBAAkB,UAAU,QAAQ;AAE1F,MAAE,OAAO,QAAQ,EAAE,KAAK,KAAK,GAAG,MAAM,EAAE,KAAK,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,QAAQ,KAAK,EAAE,KAAK,UAAU,OAAO;AAEzG,QAAI,GAAG,IAAI,SAAS,GAAG;AACtB,YAAM,IAAI,GAAG,SAAS;AACtB,YAAM,OAAO,GAAG,IAAI,OAAO,SAAS;AACpC,YAAMC,YAAW,KAAK,IAAI,KAAK,KAAK,SAAgB,YAAY,CAAC;AACjE,QAAE,OAAO,MAAM,EACb,KAAK,IAAI,EACT,KAAK,eAAe,QAAQ,EAC5B,KAAK,qBAAqB,SAAS,EACnC,KAAK,QAAQ,OAAO,EACpB,KAAK,KAAK,CAAC,GAAG,MAAM,EACpB,KAAK,aAAaA,SAAQ,EAC1B,KAAK,eAAsB,IAAI;AAAA,IAClC;AAGA,MAAE,OAAO,QAAQ,EACf,KAAK,KAAK,GAAG,MAAM,EACnB,KAAK,MAAM,CAAC,GAAG,MAAM,EACrB,KAAK,QAAQ,OAAO,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,UAAU,KAAK,EACpB,KAAK,kBAAkB,CAAC,EACxB,KAAK,SAAS,iBAAiB,EAC/B,GAAG,aAAa,CAAAC,WAAS;AACzB,UAAI,GAAG,IAAI,UAAU,GAAG;AACvB,2BAAmB;AAAA,UAClB,MAAM,GAAG,IAAI,CAAC;AAAA,UACd;AAAA,QACD,CAAC;AACD;AAAA,MACD;AACA,uBAAiB,GAAG,KAAK,IAAIA,MAAK;AAAA,IACnC,CAAC,EACA,GAAG,YAAY,MAAM,GAAG,MAAM,KAAK,CAAC,EACpC,GAAG,SAAS,CAAAA,WAAS;AACrB,UAAI,GAAG,IAAI,UAAU,GAAG;AACvB,cAAM,IAAI,GAAG,IAAI,CAAC;AAClB,cAAM,OAAc,QAAQ,EAAE,GAAGA,OAAM,SAAS,GAAGA,OAAM,QAAQ,CAAC;AAClE,aAAK,OAAO,KAAK,EAAE,MAAM;AACzB,aAAK,KAAK,MAAM,cAAc,MAAM;AAGpC,cAAM,CAAC,KAAK,QAAQ,IAAI,gBAAgB,GAAG,KAAK;AAChD,YAAI,KAAK;AAER,gBAAM,MAAM,KAAK,KAAK,OAAO,KAAK,EAAE,MAAM,iBAAiB,KAAK;AAChE,cACE,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,sBAAsB,IAAI,OAAO,MAAM,QAAQ,EACpD,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,gBAAI,OAAO;AACX,wBAAY,KAAK,UAAU,KAAK;AAAA,UACjC,CAAC;AAAA,QACH;AAGA;AAAA,UACC;AAAA,YACC,MAAM;AAAA,YACN;AAAA;AAAA,UAED;AAAA,UACA,KAAK,KAAK,OAAO,KAAK;AAAA,QACvB;AAGA,iCAAyB;AAAA,UACxB,MAAM;AAAA,UACN;AAAA,UACA,QAAQ,KAAK,KAAK,OAAO,KAAK;AAAA,QAC/B,CAAC;AAED;AAAA,MACD;AACA,qBAAe,GAAG,KAAK,IAAI,OAAOA,MAAK;AAAA,IACxC,CAAC;AAEF,QAAI,WAAW;AACd,QAAE,OAAO,MAAM,EAAE,KAAK,UAAU,KAAK,EAAE,KAAK,MAAM,WAAW,EAAE,KAAK,mBAAmB,YAAY;AACnG,QAAE,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,EAC/C,KAAK,MAAM,WAAW,EACtB,KAAK,MAAM,cAAc,aAAa;AACxC,QAAE,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,MAAM,EAAE,GAAG,KAAK,GAAG,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,EAChD,KAAK,MAAM,WAAW,EACtB,KAAK,MAAM,cAAc,aAAa;AAAA,IACzC,OAAO;AACN,QAAE,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,MAAM,cAAc,aAAa,EACtC,KAAK,mBAAmB,YAAY;AAAA,IACvC;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,gBAAgB,IAAI,OAAO;AACnC,MAAI;AACJ,MAAI;AACJ,MAAI,GAAG,QAAQ,GAAG,MAAM;AACvB,eAAW,GAAG;AACd,eAAW,GAAG;AAAA,EACf,WAAW,GAAG,QAAQ,GAAG,MAAM;AAC9B,eAAW,GAAG;AACd,eAAW,GAAG;AAAA,EACf;AACA,MAAI,CAAC,SAAU,QAAO,CAAC,IAAI;AAC3B,QAAM,MAAM,MAAM,OAAO,UAAU,SAAS,YAAY,CAAC;AACzD,MAAI,CAAC,KAAK;AACT,UAAM,MAAM,uBAAuB,QAAQ;AAC3C,WAAO,CAAC,IAAI;AAAA,EACb;AAGA,aAAW,KAAK,MAAM,WAAW;AAChC,QAAI,EAAE,OAAO,UAAU;AACtB,aAAO,CAAC,IAAI;AAAA,IACb;AAAA,EACD;AACA,SAAO,CAAC,KAAK,QAAQ;AACtB;AAEA,SAAS,YAAY,KAAK,UAAU,OAAO;AAC1C,QAAM,OAAO;AACb,QAAM,IAAI;AAAA,IACT,KAAK,IAAI;AAAA,IACT,OAAO,KAAK,IAAI,GAAG,WAAW,IAAI;AAAA,IAClC,MAAM,KAAK,IAAI,IAAI,KAAK,WAAW,IAAI;AAAA,IACvC,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AACA,IAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;AACjC,QAAM,oBAAoB,CAAC;AAC3B,QAAM,UAAU,KAAK,CAAC;AACtB,QAAM,OAAO;AACd;AAEA,SAAS,OAAO,IAAI,OAAO;AAC1B,QAAM,OAAO,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI;AAC7C,aAAW,KAAK,MAAM;AACrB,QAAI,EAAE,QAAQ,QAAW;AAExB,UAAI,EAAE,IAAI,KAAK,EAAE,IAAI,MAAM,OAAO;AACjC,WAAG,KAAK,EAAE;AACV;AAAA,MACD;AAAA,IACD,WAAW,EAAE,eAAe,QAAW;AACtC,SAAG,KAAK,EAAE;AAAA,IACX;AAAA,EACD;AACA,QAAM,OAAO,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI;AAC7C,aAAW,KAAK,MAAM;AACrB,QAAI,EAAE,QAAQ,QAAW;AAExB,UAAI,EAAE,IAAI,KAAK,EAAE,IAAI,MAAM,OAAO;AACjC,WAAG,KAAK,EAAE;AACV;AAAA,MACD;AAAA,IACD,WAAW,EAAE,eAAe,QAAW;AACtC,SAAG,KAAK,EAAE;AAAA,IACX;AAAA,EACD;AACD;AAEA,SAAS,iBAAiB,KAAK,IAAIA,QAAO;AACzC,KAAG,MAAM,MAAM;AACf,qBAAmB,KAAK,GAAG,MAAM,GAAG,EAAE;AACtC,KAAG,MAAM,KAAKA,OAAM,SAASA,OAAM,OAAO;AAC3C;AAEA,SAAS,eAAe,KAAK,IAAI,OAAOA,QAAO;AAC9C,QAAM,OAAc,QAAQ,EAAE,GAAGA,OAAM,SAAS,GAAGA,OAAM,QAAQ,CAAC;AAClE,qBAAmB,KAAK,KAAK,MAAM,EAAE;AACtC;AAEA,SAAS,mBAAmB,KAAK,QAAQ,IAAI;AAC5C,QAAM,QAAQ,OAAO,OAAO,OAAO;AACnC,aAAW,KAAK,KAAK;AACpB,UAAM,KAAK,MAAM,OAAO,IAAI;AAE5B,OAAG,OAAO,IAAI,EACZ,MAAM,aAAa,MAAM,EACzB,KAAK,EAAE,MAAa,OAAO,OAAO,QAAQ;AAE5C,OAAG,OAAO,IAAI,EAAE,KAAK,kBAAkB,CAAC,CAAC;AACzC,OAAG,OAAO,IAAI,EAAE,MAAM,aAAa,MAAM,EAAE,KAAK,aAAa,GAAG,EAAE,CAAC;AAAA,EACpE;AACD;;;ACp8BO,SAAS,qBAAqB,IAAI,OAAO;AAS/C,KAAG,UAAU,UAAU,GAAG,EAAE,OAAO;AAEnC,QAAM,UAAU,CAAC;AAIjB,MAAI,GAAG,mBAAmB,GAAG,gBAAgB,cAAc,GAAG,gBAAgB,SAAS;AACtF,eAAW,WAAW,GAAG,gBAAgB,YAAY;AACpD,YAAM,OAAO,GAAG,gBAAgB,WAAW,OAAO;AAClD,UAAI,CAAC,KAAK,YAAa;AAEvB,YAAM,UAAU;AAAA,QACf,KAAK;AAAA,QACL,OAAO,KAAK;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAEA,iBAAW,KAAK,GAAG,cAAc;AAChC,mBAAW,KAAK,EAAE,SAAS;AAC1B,gBAAM,KAAK,GAAG,gBAAgB,QAAQ,EAAE,UAAU;AAClD,cAAI,CAAC,GAAI;AACT,gBAAM,IAAI,GAAG,OAAO;AACpB,cAAI,OAAO,MAAM,CAAC,EAAG;AACrB,cAAI,QAAQ,OAAO,MAAM;AACxB,oBAAQ,MAAM,QAAQ,MAAM;AAAA,UAC7B,OAAO;AACN,oBAAQ,MAAM,KAAK,IAAI,QAAQ,KAAK,CAAC;AACrC,oBAAQ,MAAM,KAAK,IAAI,QAAQ,KAAK,CAAC;AAAA,UACtC;AAAA,QACD;AAAA,MACD;AACA,cAAQ,KAAK,OAAO;AAAA,IACrB;AAAA,EACD;AASA,QAAM,aAAa,oBAAI,IAAI;AAE3B,MAAI,GAAG,OAAO;AACb,eAAW,KAAK,GAAG,OAAO;AACzB,UAAI,CAAC,EAAE,QAAS;AAChB,iBAAW,KAAK,EAAE,SAAS;AAC1B,YAAI,CAAC,EAAE,eAAgB;AAEvB,mBAAW,QAAQ,EAAE,gBAAgB;AACpC,qBAAW,IAAI,IAAI;AAAA,QACpB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,QAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,QAAQ,CAAC;AAEjD,MAAI;AACJ,MAAI,GAAG,gBAAgB,WAAW,IAAI,GAAG,YAAY,GAAG;AACvD,mBAAe,GAAG;AAAA,EACnB,OAAO;AACN,mBAAe,CAAC,GAAG,UAAU,EAAE,CAAC;AAAA,EACjC;AAEA,MAAI,cAAc;AAEjB,eAAW,MAAM,aAAa;AAC7B,UAAI,gBAAgB,GAAG,MAAM;AAE5B,uBAAe;AACf;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAMA,MAAI,cAAc;AACjB,OAAG,cAAc;AAAA,EAClB,WAAW,YAAY,CAAC,GAAG;AAC1B,OAAG,cAAc,YAAY,CAAC,EAAE;AAAA,EACjC;AAIA,MAAI,gBAAgB;AACpB,aAAW,KAAK,GAAG,cAAc;AAChC,eAAW,KAAK,EAAE,SAAS;AAC1B,UAAI,EAAE,gBAAgB;AACrB,mBAAW,KAAK,EAAE,gBAAgB;AACjC,cAAI,EAAE,eAAe,CAAC,EAAE,KAAK;AAC5B,4BAAgB;AAAA,UACjB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAGA,aAAW,KAAK,GAAG,cAAc;AAChC,eAAW,KAAK,EAAE,SAAS;AAC1B,QAAE,aAAa,CAAC;AAAA,IACjB;AAAA,EACD;AAEA,MAAI,cAAc;AAElB,iBAAe,mBAAmB,cAAc,YAAY,IAAI,KAAK;AAErE,aAAW,aAAa,aAAa;AAOpC,mBAAe,oBAAoB,WAAW,IAAI,OAAO,WAAW;AAAA,EACrE;AAGA,aAAW,QAAQ,SAAS;AAC3B,mBAAe,eAAe,MAAM,IAAI,OAAO,WAAW;AAAA,EAC3D;AAKA,MAAI,GAAG,SAAS,GAAG,MAAM,YAAY;AACpC,UAAM,IAAI,GAAG,MAAM,WAAW,MAAM;AACpC,QAAI,GAAG,MAAM,WAAW,UAAU,GAAG;AACpC,aAAO,GAAG,MAAM;AAAA,IACjB;AAEA,iBAAa,EAAE,MAAM,IAAI,KAAK;AAAA,EAC/B;AAGA,KAAG,gBAAgB;AACnB,QAAM,aAAa;AACnB,aAAW,KAAK,MAAM,OAAO;AAC5B,UAAM,aAAa,KAAK,IAAI,MAAM,YAAY,EAAE,aAAa;AAAA,EAC9D;AACA,QAAM,UAAU;AAEhB,QAAM,UAAU;AAChB,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAMC,YAAW;AAEjB,SAAOA,YAAWA,YAAW,WAAW,WAAW;AACpD;AAEA,SAAS,uBAAuB,KAAK;AAOpC,QAAM,EAAE,MAAM,YAAY,OAAO,IAAI,MAAM,IAAI;AAE/C,QAAM,OAAc,QAAQ,EAAE,GAAG,OAAO,aAAa,GAAG,GAAG,IAAI,CAAC;AAChE,OAAK,OAAO,KAAK,OAAO,MAAM,GAAG,MAAM,WAAW,WAAW,GAAG,IAAI;AACpE,QAAM,IAAI,GAAG,WAAW,IAAI;AAC5B,MAAI,CAAC,GAAG;AACP,SAAK,KAAK,KAAK,uBAAuB,IAAI;AAC1C;AAAA,EACD;AAEA,QAAM,IAAI;AAAA,IACT;AAAA,IACA,KAAK,EAAE;AAAA,IACP,OAAO,EAAE;AAAA,IACT,MAAM,EAAE;AAAA,IACR,QAAQ,KAAK;AAAA,IACb;AAAA,IACA,QAAQ,MAAM;AAAA;AAAA;AAAA,IAGd,QAAQ,aAAa,EAAE,MAAM,YAAY,MAAa,IAAI;AAAA;AAAA,IAE1D,WAAW,GAAG;AAAA,EACf;AAGA,MAAI,GAAG,UAAU;AAChB,eAAW,KAAK,GAAG,qBAAqB;AACvC,QAAE,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAAA,IAChC;AAAA,EACD,OAAO;AACN,UAAM,IAAI,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE;AACtC,MAAE,UAAU,GAAG,IAAI;AACnB,MAAE,WAAW,EAAE;AACf,MAAE,kBAAkB,EAAE;AAAA,EACvB;AAEA,IAAE,QAAQ;AAAA,IACT,SAAS,GAAG,SAAS,KAAK;AAAA,IAC1B,SAAS,GAAG,SAAS,KAAK;AAAA,IAC1B,IAAI;AAAA,EACL;AACA,MAAI,GAAG,UAAU;AAChB,MAAE,QAAQ;AAAA,MACT,UAAU;AAAA,MACV,MAAM,GAAG;AAAA,MACT,KAAK,GAAG;AAAA,MACR,UAAU,GAAG;AAAA,IACd;AAAA,EACD,OAAO;AACN,MAAE,QAAQ;AAAA,MACT,SAAS,GAAG,IAAI;AAAA,MAChB,UAAU,GAAG;AAAA,IACd;AAAA,EACD;AACA,IAAE,MAAM,cAAc,GAAG;AACzB,IAAE,MAAM,qBAAqB,GAAG;AAEhC,IAAE,cAAc,CAAC,YAAY,OAAO,SAAS;AAE5C,UAAM,SAAS;AAAA,MACd,YAAY,WAAW;AAAA,IACxB;AAEA,QAAI;AACJ,QAAI,OAAO;AACV,oBAAc;AAAA,QACb,YAAY,MAAM;AAAA,MACnB;AAAA,IACD;AAEA,UAAM,MAAM,CAAC;AAEb,eAAW,KAAK,KAAK,OAAO;AAC3B,UAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAAA,IACtB;AAEA,QAAI,KAAK,MAAM,UAAU;AACxB,UAAI,sBAAsB;AAAA,QACzB,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,QACV,UAAU,KAAK;AAAA,QACf,UAAU,KAAK,MAAM;AAAA,MACtB;AAAA,IACD,OAAO;AACN,UAAI,MAAM,KAAK,MAAM,OAAO,SAAS,KAAK,MAAM,OAAO;AAAA,IACxD;AACA,uBAAmB;AAAA,MAClB,GAAG;AAAA,QACF,IAAW;AAAA,QACX,KAAK,KAAK;AAAA,QACV,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MACJ,OAAO,KAAK;AAAA,IACb,CAAC;AAAA,EACF;AACA,SAAO,qCAAyB,EAAE,KAAK,OAAK;AAC3C,MAAE,KAAK,CAAC;AAAA,EACT,CAAC;AACF;AAEA,SAAS,mBAAmB,cAAc,YAAY,IAAI,OAAO;AAQhE,QAAM,cAAc;AAEpB,QAAM,kBAAkB;AACxB,QAAM,SAAS;AAGf,QAAM,UAAU;AAChB,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAMA,YAAW;AAGjB,MAAI,cAAc;AACjB,QAAI,WAAW;AACf,QAAI,WAAW;AAEf,eAAW,KAAK,GAAG,cAAc;AAChC,UAAI,IAAI,EAAE;AAEV,iBAAW,KAAK,EAAE,SAAS;AAC1B,cAAM,MAAM,GAAG,UAAU,OAAO,GAAG,EAAE,KAAK,aAAa,iBAAiB,IAAI,GAAG;AAE/E,YAAI,EAAE,gBAAgB;AACrB,gBAAM,IAAI,EAAE,eAAe,YAAY;AACvC,cAAI,KAAK,QAAW;AACnB,kBAAM,MAAM,IACV,OAAO,MAAM,EACb,KAAK,QAAuB,UAAU,GAAG,GAAG,KAAK,CAAC,EAClD,KAAK,SAAU,cAAc,EAAE,OAAQ,QAAQ,EAC/C,KAAK,UAAU,EAAE,MAAM,EACvB,KAAK,mBAAmB,YAAY;AAEtC,gBAAI,GAA2B;AAE9B,kBAAI,EAAE,MAAM,SAAS;AACpB,oBACE,OAAO,QAAQ,EACf,KAAK,MAAM,WAAW,EACtB,KAAK,MAAM,EAAE,SAAS,CAAC,EACvB,KAAK,KAAK,EAAE,SAAS,CAAC,EACtB,KAAK,QAAQ,GAAG,MAAM,QAAQ,aAAa;AAAA,cAC9C,WAAW,EAAE,MAAM,iBAAiB;AACnC,oBACE,OAAO,QAAQ,EACf,KAAK,MAAM,WAAW,EACtB,KAAK,MAAM,EAAE,SAAS,CAAC,EACvB,KAAK,KAAK,EAAE,SAAS,CAAC,EACtB,KAAK,QAAQ,GAAG,MAAM,QAAQ,qBAAqB;AAAA,cACtD;AAAA,YACD;AAEA,kBAAM,QAAQ,IACZ,OAAO,MAAM,EACb,KAAK,QAAQ,oBAAoB,EACjC,KAAK,gBAAgB,GAAG,EACxB,KAAK,SAAS,WAAW,EACzB,KAAK,UAAU,EAAE,MAAM;AAEzB,gBAAI,GAAG,QAAQ;AACd,gBAAE,WAAW,KAAK,KAAK;AAAA,YACxB;AAEA,kBACE,GAAG,aAAa,CAAAC,WAAS;AACzB,iBAAG,MAAM,MAAM;AAEf,mCAAqB,cAAc,GAAG,GAAG,GAAG,MAAM,GAAG,EAAE;AAEvD,iBAAG,MAAM,KAAKA,OAAM,SAASA,OAAM,OAAO;AAE1C,wCAA0B,CAAC;AAAA,YAC5B,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,iBAAG,MAAM,KAAK;AACd,2CAA6B,CAAC;AAAA,YAC/B,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,qCAAuB;AAAA,gBACtB,MAAM;AAAA,gBACN,YAAY,EAAE;AAAA,gBACd,OAAO,EAAE;AAAA,gBACT;AAAA,gBACA;AAAA,cACD,CAAC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACD;AAGA,aAAK,EAAE,SAAS,GAAG;AAAA,MACpB;AAAA,IAGD;AAEA,UAAM,QAAQ,GAAG,UAAU,OAAO,GAAG,EAAE,KAAK,aAAa,kBAAkB,UAAU,GAAG;AAExF,IAAO,UAAU;AAAA,MAChB,MAAM,MAAM,OAAO,GAAG,EAAE;AAAA,QACvB,QAAQ,EACN,MAAM,OAAY,EAAE,OAAO,CAAC,UAAU,QAAQ,CAAC,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EACxE,WAAW,CAAC,GAAG,QAAQ,CAAC,EACxB,SAAS,QAAQ;AAAA,MACpB;AAAA,MACA,UAAUD;AAAA,MACV,UAAU;AAAA,IACX,CAAC;AAED,UACE,OAAO,MAAM,EACb,KAAK,eAAe,QAAQ,EAC5B,KAAK,KAAK,cAAc,CAAC,EACzB,KAAK,KAAK,EAAEA,YAAW,WAAW,WAAW,QAAQ,EACrD,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAaA,SAAQ,EAC1B,KAAK,eAAe,OAAY,EAChC,KAAK,SAAS,cAAc,EAC5B,GAAG,SAAS,MAAM;AAClB,yBAAmB,cAAc,YAAY,IAAI,KAAK;AAAA,IACvD,CAAC;AAGF,WAAO,cAAc;AAAA,EACtB;AAQA,MAAI,GAAG,OAAO;AAIb,UAAM,IAAI,GAAG;AAEb,MAAE,OAAO,MAAM,EACb,KAAK,SAAS,cAAc,EAC5B,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,EAAE,EACpB,KAAK,UAAU,EACf,GAAG,SAAS,CAAAC,WAAS;AACrB,4BAAsB,GAAG,YAAY,MAAM,EAAE,GAAG,IAAI,KAAK;AACzD,SAAG,YAAY,UAAUA,OAAM,MAAM;AAAA,IACtC,CAAC;AAEF,QAAI,GAAG,sBAAsB;AAE5B,YAAM,IAAI;AACV,UAAI,IAAI;AACR,QAAE,OAAO,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,aAAa,EAAE;AAClE,WAAK;AACL,QAAE,OAAO,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,aAAa,EAAE;AAChE,WAAK;AACL,QAAE,OAAO,MAAM,EAAE,KAAY,MAAM,GAAG,oBAAoB,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,aAAa,EAAE;AAC9F,WAAK;AACL,QAAE,OAAO,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,aAAa,EAAE;AAClE,WAAK;AACL,QAAE,OAAO,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,aAAa,EAAE;AAAA,IAKpE;AAEA,WAAO,cAAc;AAAA,EACtB;AAGA,SAAO;AACR;AAEA,SAAS,oBAAoB,WAAW,IAAI,OAAO,aAAa;AAK/D,MAAI,CAAC,GAAG,WAAY,IAAG,aAAa,CAAC;AACrC,KAAG,WAAW,UAAU,IAAI,IAAI;AAAA,IAC/B,KAAK,UAAU;AAAA,IACf,OAAO,UAAU;AAAA,IACjB,MAAM,UAAU;AAAA,EACjB;AAKA,QAAM,cAAc;AAEpB,QAAM,kBAAkB;AACxB,QAAM,SAAS;AAGf,QAAM,UAAU;AAChB,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAMD,YAAW;AAEjB,MAAI,WAAW,GACd,WAAW;AAEZ,aAAW,KAAK,GAAG,cAAc;AAChC,QAAI,IAAI,EAAE;AAEV,eAAW,KAAK,EAAE,SAAS;AAC1B,YAAM,MAAM,GAAG,UAAU,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,cAAc,MAAM,IAAI,GAAG;AAEjG,YAAM,IAAI,UAAU,YAAY,EAAE,UAAU;AAC5C,UAAI,GAAG;AACN,cAAM,MAAM,IACV,OAAO,MAAM,EACb,KAAK,QAAuB,UAAU,GAAG,GAAG,KAAK,CAAC,EAClD,KAAK,SAAU,cAAc,EAAE,OAAQ,QAAQ,EAC/C,KAAK,UAAU,EAAE,MAAM,EACvB,KAAK,mBAAmB,YAAY;AAEtC,YAAI,GAAG,UAAU,EAAE,OAAO;AAEzB,cAAI,EAAE,MAAM,SAAS;AACpB,gBACE,OAAO,QAAQ,EACf,KAAK,MAAM,WAAW,EACtB,KAAK,MAAM,EAAE,SAAS,CAAC,EACvB,KAAK,KAAK,EAAE,SAAS,CAAC,EACtB,KAAK,QAAQ,GAAG,MAAM,QAAQ,aAAa;AAAA,UAC9C,WAAW,EAAE,MAAM,iBAAiB;AACnC,gBACE,OAAO,QAAQ,EACf,KAAK,MAAM,WAAW,EACtB,KAAK,MAAM,EAAE,SAAS,CAAC,EACvB,KAAK,KAAK,EAAE,SAAS,CAAC,EACtB,KAAK,QAAQ,GAAG,MAAM,QAAQ,qBAAqB;AAAA,UACtD;AAAA,QACD;AAEA,cAAM,QAAQ,IACZ,OAAO,MAAM,EACb,KAAK,QAAQ,oBAAoB,EACjC,KAAK,gBAAgB,GAAG,EACxB,KAAK,SAAS,WAAW,EACzB,KAAK,UAAU,EAAE,MAAM;AAEzB,YAAI,GAAG,QAAQ;AACd,YAAE,WAAW,KAAK,KAAK;AAAA,QACxB;AAEA,cACE,GAAG,aAAa,CAAAC,WAAS;AACzB,aAAG,MAAM,MAAM;AAEf,gBAAM,MAAM,CAAC,EAAE,GAAG,UAAU,GAAG,EAAE,WAAW,CAAC;AAC7C,mCAAyB,EAAE,YAAY,IAAI,GAAG;AAE9C,cAAI,KAAK;AAAA,YACR,GAAG,UAAU,OAAO;AAAA,YACpB,GAAU,SAAS,EAAE,IAAI;AAAA,UAC1B,CAAC;AACD,cAAI,KAAK;AAAA,YACR,GAAG,UAAU,OAAO,MAAM,GAAG,MAAM;AAAA,YACnC,GAAG,EAAE;AAAA,UACN,CAAC;AAED,gBAAM,QAAe,gBAAgB,GAAG,MAAM,GAAG,GAAG;AAEpD,UAAe,qBAAqB,GAAG,GAAG,OAAO,KAAK;AAEtD,aAAG,MAAM,KAAKA,OAAM,SAASA,OAAM,OAAO;AAE1C,oCAA0B,CAAC;AAAA,QAC5B,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,CAAC;AAAA,QAC/B,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB,MAAM,UAAU;AAAA,YAChB,YAAY,EAAE;AAAA,YACd,OAAO,EAAE;AAAA,YACT;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAGA,WAAK,EAAE,SAAS,GAAG;AAAA,IACpB;AAAA,EAED;AAEA,QAAM,QAAQ,GAAG,UAAU,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,cAAc,OAAO,UAAU,GAAG;AAE1G,EAAO,UAAU;AAAA,IAChB,MAAM,MAAM,OAAO,GAAG,EAAE;AAAA,MACvB,QAAQ,EACN,MAAM,OAAY,EAAE,OAAO,CAAC,UAAU,QAAQ,CAAC,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EACxE,WAAW,CAAC,UAAU,QAAQ,CAAC,EAC/B,SAAS,QAAQ;AAAA,IACpB;AAAA,IACA,UAAUD;AAAA,IACV,UAAU;AAAA,EACX,CAAC;AAID,QACE,OAAO,MAAM,EACb,KAAK,eAAe,QAAQ,EAC5B,KAAK,KAAK,cAAc,CAAC,EACzB,KAAK,KAAK,EAAEA,YAAW,WAAW,WAAW,QAAQ,EACrD,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAaA,SAAQ,EAC1B,KAAK,QAAQ,OAAO,EACpB,KAAK,SAAS,cAAc,EAC5B,KAAK,UAAU,OAAO,OAAO,EAC7B,GAAG,SAAS,CAAAC,WAAS;AACrB,wBAAoB,WAAW,IAAI,KAAK;AACxC,OAAG,YAAY,UAAUA,OAAM,MAAM;AAAA,EACtC,CAAC;AAEF,SAAO,cAAc;AACtB;AAEA,SAAS,eAAe,MAAM,IAAI,OAAO,aAAa;AAIrD,QAAM,cAAc;AAEpB,QAAM,kBAAkB;AACxB,QAAM,SAAS;AAGf,QAAM,UAAU;AAChB,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAMD,YAAW;AAEjB,aAAW,KAAK,GAAG,cAAc;AAChC,QAAI,IAAI,EAAE;AAEV,eAAW,KAAK,EAAE,SAAS;AAC1B,YAAM,MAAM,GAAG,UAAU,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,cAAc,MAAM,IAAI,GAAG;AAIjG,YAAM,KAAK,GAAG,gBAAgB,QAAQ,EAAE,UAAU;AAClD,UAAI,IAAI;AACP,cAAM,IAAI,GAAG,KAAK,GAAG;AACrB,YAAI,CAAC,OAAO,MAAM,CAAC,GAAG;AACrB,cACE,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,EACX,KAAK,SAAS,KAAK,IAAI,GAAI,mBAAmB,IAAI,KAAK,QAAS,KAAK,MAAM,KAAK,IAAI,CAAC,EACrF,KAAK,UAAU,EAAE,MAAM,EACvB,KAAK,QAAQ,SAAS,EACtB,KAAK,mBAAmB,YAAY;AACtC,cACE,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,EACX,KAAK,SAAS,eAAe,EAC7B,KAAK,UAAU,EAAE,MAAM,EACvB,KAAK,QAAQ,SAAS,EACtB,KAAK,gBAAgB,GAAG;AAC1B,gBAAM,QAAQ,IACZ,OAAO,MAAM,EACb,KAAK,QAAQ,oBAAoB,EACjC,KAAK,gBAAgB,GAAG,EACxB,KAAK,SAAS,eAAe,EAC7B,KAAK,UAAU,EAAE,MAAM;AAEzB,YAAE,WAAW,KAAK,KAAK;AAEvB,gBACE,GAAG,aAAa,CAAAC,WAAS;AACzB,eAAG,MAAM,MAAM;AAEf,kBAAM,MAAM,CAAC,EAAE,GAAG,UAAU,GAAG,EAAE,WAAW,CAAC;AAC7C,qCAAyB,EAAE,YAAY,IAAI,GAAG;AAC9C,YAAO,gBAAgB,GAAG,MAAM,GAAG,GAAG;AAEtC,eAAG,MAAM,KAAKA,OAAM,SAASA,OAAM,OAAO;AAE1C,sCAA0B,CAAC;AAAA,UAC5B,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,eAAG,MAAM,KAAK;AACd,yCAA6B,CAAC;AAAA,UAC/B,CAAC;AAAA,QACH;AAAA,MACD;AAGA,WAAK,EAAE,SAAS,GAAG;AAAA,IACpB;AAAA,EAGD;AAEA,QAAM,QAAQ,GAAG,UAAU,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,cAAc,OAAO,UAAU,GAAG;AAG1G,EAAO,UAAU;AAAA,IAChB,MAAM,MACJ,OAAO,GAAG,EACV,KAAK,aAAa,gBAAgB,EAClC;AAAA,MACA,QAAQ,EACN,MAAM,OAAY,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAC5E,MAAM,CAAC;AAAA,IACV;AAAA,IACD,UAAUD;AAAA,IACV,UAAU;AAAA,EACX,CAAC;AAED,QAAM,OAAO,MACX,OAAO,MAAM,EACb,KAAK,KAAK,kBAAkB,CAAC,EAC7B,KAAK,eAAe,QAAQ,EAC5B,KAAK,KAAK,EAAEA,YAAW,WAAW,WAAW,QAAQ,EACrD,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAaA,SAAQ,EAC1B,KAAK,KAAK,KAAK;AAIjB,SAAO,cAAc;AACtB;AAEA,SAAS,mBAAmB,SAAS,OAAO,IAAI,OAAO;AAOtD,KAAG,YAAY,MAAM;AAErB,QAAM,SAAS,GAAG,YAAY;AAa9B,wBAAsB,QAAQ,IAAI,KAAK;AAEvC,MAAI,MAAM,OAAO,GAAG;AAEnB,UAAM,eAAe,OAAO,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AACvE,QAAI,MAAM,OAAO,GAAG;AACnB,mBACE,MAAM,UAAU,OAAO,EACvB,MAAM,WAAW,MAAM,EACvB,MAAM,cAAc,QAAQ,EAC5B,MAAM,UAAU,UAAU;AAAA,IAC7B;AACA,UAAM,MAAM,KAAK,OAAO,EAAE,SAAS;AACnC,eAAW,QAAQ,OAAO;AACzB,YAAM,MAAM,aAAa,OAAO,KAAK;AACrC,YAAM,KAAK,KAAK,OAAO,EAAE,SAAS;AAClC,YAAM,IAAI,IACR,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM,EAAE,EACb,KAAK,QAAQ,GAAG,EAChB,GAAG,UAAU,MAAM;AACnB,WAAG,YAAY,KAAK;AACpB,WAAG,eAAe;AAClB,6BAAqB,IAAI,KAAK;AAAA,MAC/B,CAAC;AACF,UAAI,QAAQ,QAAS,GAAE,KAAK,WAAW,CAAC;AACxC,UACE,OAAO,OAAO,EACd,KAAK,OAAO,EAAE,EACd,KAAK,SAAS,aAAa,EAC3B,KAAK,WAAW,IAAI;AAAA,IACvB;AAAA,EACD;AAEA,uBAAqB,QAAQ,SAAS,IAAI,KAAK;AAE/C,MAAI,GAAG,KAAK;AAIX;AAAA,MACC;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,KAAK,GAAG,WAAW,OAAO,EAAE;AAAA,QAC5B,OAAO,GAAG,WAAW,OAAO,EAAE;AAAA,QAC9B,MAAM,GAAG,WAAW,OAAO,EAAE;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,gBAAc,QAAQ,IAAI,KAAK;AAE/B,KAAG,YAAY,UAAU,MAAM,MAAM;AACtC;AAEO,SAAS,oBAAoB,WAAW,IAAI,OAAO;AACzD,KAAG,YAAY,MAAM;AAErB,uBAAqB,GAAG,YAAY,GAAG,UAAU,MAAM,IAAI,KAAK;AAEhE,wBAAsB,GAAG,YAAY,GAAG,WAAW,IAAI,KAAK;AAE5D,KAAG,YAAY,EACb,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,KAAK,QAAQ,EACb,GAAG,SAAS,MAAM;AAClB,OAAG,YAAY,KAAK;AAEpB,UAAM,MAAM,GAAG,MAAM,MAAM,UAAU,OAAK,EAAE,QAAQ,UAAU,IAAI;AAClE,QAAI,OAAO,IAAI;AAQd;AAAA,IACD;AACA,OAAG,MAAM,MAAM,OAAO,KAAK,CAAC;AAC5B,yBAAqB,IAAI,KAAK;AAAA,EAC/B,CAAC;AACH;AAEA,SAAS,cAAc,QAAQ,IAAI,OAAO;AACzC,MAAI,CAAC,GAAG,SAAS,GAAG,MAAM,OAAQ;AAClC,SACE,OAAO,KAAK,EACZ,KAAK,0BAA0B,EAC/B,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,WAAO,UAAU,GAAG,EAAE,OAAO;AAC7B,IAAe,UAAU,QAAQ,GAAG,OAAO,IAAI,MAAM;AACpD,SAAG,YAAY,KAAK;AACpB,yCAAmC,EAAE;AACrC,2BAAqB,IAAI,KAAK;AAAA,IAC/B,CAAC;AAAA,EACF,CAAC;AACH;AAEA,SAAS,sBAAsB,QAAQ,MAAM,IAAI,OAAO;AACvD,MAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,aAAc;AACrC,SACE,OAAO,KAAK,EACZ,KAAK,sBAAsB,KAAK,OAAO,MAAM,GAAG,MAAM,QAAQ,EAC9D,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,OAAG,YAAY,KAAK;AAEpB,UAAM,OAAc,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC;AAC9C,SAAK,OAAO,KAAK,sBAAsB,KAAK,OAAO,MAAM,GAAG,MAAM,QAAQ;AAC1E,UAAM,MAAM;AAAA,MACX,QAAQ,MAAM;AAAA,MACd,KAAK,GAAG;AAAA,MACR,UAAU;AAAA,QACT;AAAA,UACC,YAAY;AAAA,UACZ,YAAY;AAAA,YACX,KAAK;AAAA,cACJ,gBAAgB;AAAA,cAChB,UAAU;AAAA,cACV,MAAM,KAAK;AAAA,cACX,KAAK,KAAK;AAAA,cACV,OAAO,KAAK;AAAA,cACZ,MAAM,KAAK;AAAA,YACZ;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,gCAAoB,EAAE,KAAK,OAAK;AACtC,QAAE,KAAK,KAAK,KAAK,MAAM,MAAM,SAAS;AAAA,IACvC,CAAC;AAAA,EACF,CAAC;AACH;AAIA,SAAS,sBAAsB,QAAQ,IAAI,OAAO;AAEjD,iBAAe;AAAA,IACd,KAAK;AAAA,IACL,QAAQ,MAAM,OAAO;AAAA,IACrB,KAAK,GAAG;AAAA,IACR,UAAU,cAAY;AACrB,mBAAa,UAAU,IAAI,KAAK;AAAA,IACjC;AAAA,EACD,CAAC;AACF;AAEA,eAAe,aAAa,MAAM,IAAI,OAAO,UAAU;AACtD,KAAG,YAAY,MAAM;AAErB,QAAM,OAAO,GAAG,YAAY,EAAE,OAAO,KAAK,EAAE,KAAK,mBAAmB,OAAO,MAAM;AAEjF,MAAI;AACH,UAAM,QAAQ,MAAa,SAAS,cAAc,EAAE,MAAM,EAAE,QAAQ,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,EAAE,EAAE,CAAC;AAE/G,QAAI,MAAM,MAAO,OAAM,MAAM;AAC7B,QAAI,CAAC,MAAM,MAAO,OAAM;AAGxB,UAAM,KAAK,MAAM,MAAM,CAAC;AAExB,SAAK,KAAK,aAAa,GAAG,MAAM,WAAW,UAAU,GAAG,OAAO,MAAM;AAErE,UAAM,QAAQ,MAAM,4BAA4B,IAAI,IAAI,KAAK;AAE7D,QAAI,MAAM,MAAO,OAAM,MAAM;AAE7B,UAAM,YAAY;AAAA,MACjB,MAAM;AAAA,MACN,KAAK,GAAG;AAAA,MACR,OAAO,GAAG;AAAA,MACV,MAAM,GAAG;AAAA,IACV;AAEA,QAAI,CAAC,MAAM,YAAa,OAAM;AAC9B,eAAW,UAAU,MAAM,aAAa;AACvC,MAAe,QAAQ,MAAM,YAAY,MAAM,GAAG,GAAG,KAAK;AAAA,IAC3D;AACA,cAAU,cAAc,MAAM;AAE9B,OAAG,MAAM,MAAM,KAAK,SAAS;AAE7B,OAAG,YAAY,KAAK;AAEpB,QAAI,UAAU;AAAA,IAEd,OAAO;AACN,2BAAqB,IAAI,KAAK;AAAA,IAC/B;AAAA,EACD,SAASE,MAAK;AACb,QAAIA,KAAI,MAAO,SAAQ,IAAIA,KAAI,KAAK;AACpC,SAAK,KAAK,aAAaA,KAAI,UAAUA,KAAI,UAAUA,KAAI;AAAA,EACxD;AACD;AAEA,SAAS,4BAA4B,IAAI,IAAI,OAAO;AACnD,QAAM,MAAM;AAAA,IACX,QAAQ,MAAM,OAAO;AAAA,IACrB,oBAAoB;AAAA,MACnB,KAAK,GAAG;AAAA,MACR,OAAO,GAAG;AAAA,MACV,MAAM,GAAG;AAAA,MACT,MAAM,GAAG;AAAA,IACV;AAAA,EACD;AAEA,MAAI,GAAG,UAAU;AAChB,QAAI,WAAW;AACf,UAAM,IAAI,GAAG;AACb,QAAI,GAAG;AACN,UAAI,sBAAsB;AAAA,QACzB,MAAM,EAAE;AAAA,QACR,KAAK,EAAE;AAAA,QACP,UAAU,EAAE;AAAA,MACb;AAAA,IACD;AAEA,QAAI,GAAG,UAAU;AAChB,UAAI,WAAW,GAAG,SAAS;AAAA,IAC5B;AAAA,EACD,OAAO;AACN,QAAI,UAAU,GAAG,IAAI;AACrB,QAAI,WAAW,GAAG;AAAA,EACnB;AAEA,SAAc,QAAQ,YAAY,GAAG;AACtC;AAEA,SAAS,qBAAqB,UAAU,GAAG,GAAG,QAAQ,IAAI;AACzD,QAAM,MAAM,CAAC,EAAE,GAAG,UAAU,GAAG,EAAE,WAAW,CAAC;AAC7C,2BAAyB,EAAE,YAAY,IAAI,GAAG;AAE9C,MAAI,KAAK;AAAA,IACR,GAAG,WAAW;AAAA,IACd,GAAU,SAAS,EAAE,IAAI;AAAA,EAC1B,CAAC;AACD,MAAI,KAAK;AAAA,IACR,GAAG,WAAW,MAAM,GAAG,MAAM;AAAA,IAC7B,GAAG,EAAE;AAAA,EACN,CAAC;AACD,QAAM,QAAe,gBAAgB,QAAQ,GAAG;AAChD,EAAe,qBAAqB,GAAG,GAAG,OAAO,KAAK;AACvD;AAEA,SAAS,qBAAqB,QAAQ,SAAS,IAAI,OAAO;AACzD,SACE,OAAO,KAAK,EACZ,KAAK,UAAU,MAAM,GAAG,MAAM,WAAW,UAAU,EACnD,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,OAAG,YAAY,KAAK;AACpB,2BAAuB;AAAA,MACtB,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACD,CAAC;AAAA,EACF,CAAC;AACH;;;AC97BO,IAAM,eAAe;AAC5B,IAAM,oBAAoB;AACnB,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAEpC,IAAM,iBAAiB;AACvB,IAAM,cAAc;AACpB,IAAM,wBAAwB;AAC9B,IAAM,oBAAoB;AAE1B,IAAM,oBAAoB;AAC1B,IAAM,qBAAqB;AAGpB,IAAM,aAAa;AAE1B,IAAM,mBAAmB,OAAY,EAAE,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAExE,SAAS,OAAO,IAAI,OAAO;AAKjC,QAAM,UAAU,EAAE;AAClB,QAAM,gBAAgB;AAEtB,MAAI,GAAG,eAAe;AACrB,WAAO,IAAI,KAAK;AAChB,WAAO,GAAG;AAAA,EACX;AAEA,UAAQ,QAAQ,EACd,KAAK,MAAM;AACX,WAAO,4BAA4B,IAAI,KAAK;AAAA,EAC7C,CAAC,EACA,KAAK,MAAM;AAMX,WAAO,UAAU,IAAI,KAAK;AAAA,EAC3B,CAAC,EACA,MAAM,CAAAC,SAAO;AACb,OAAG,cAAc;AAEjB,QAAIA,KAAI,QAAQ;AAKf,iBAAW,EAAE;AAEb,aAAO,GAAG;AACV,UAAI,GAAG,cAAc;AACpB,eAAO,GAAG;AAAA,MACX,OAAO;AAEN,eAAO,GAAG;AACV,eAAO,GAAG;AACV,uCAA+B,IAAI,KAAK;AAAA,MACzC;AACA,oBAAc,IAAI,KAAK;AACvB,aAAO,EAAE,OAAO,GAAG,OAAO,0BAA0B;AAAA,IACrD;AAEA,QAAIA,KAAI,MAAO,SAAQ,MAAMA,KAAI,KAAK;AACtC,WAAO,EAAE,OAAOA,KAAI,QAAQ;AAAA,EAC7B,CAAC,EACA,KAAK,YAAU;AACf,UAAM,WAAW,IAAI,EAAE,OAAO,OAAO,MAAM,CAAC;AAC5C,UAAM,gBAAgB;AACtB,UAAM,UAAU;AAAA,EACjB,CAAC;AACH;AAEA,SAAS,+BAA+B,IAAI,OAAO;AAOlD,QAAM,YAAY,CAAC;AACnB,MAAI,GAAG,YAAY;AAClB,eAAW,QAAQ,GAAG,WAAY,WAAU,KAAK,IAAI;AAAA,EACtD;AACA,MAAI,UAAU,UAAU,EAAG;AAE3B,MAAI,CAAC,GAAG,OAAO;AACd,YAAQ,MAAM,uBAAuB;AACrC;AAAA,EACD;AAGA,KAAG,UAAU,KAAK,aAAa,kBAAkB,IAAI,GAAG,cAAc,KAAK,GAAG;AAE9E,QAAM,OAAO,GAAG,UAAU,OAAO,MAAM,EAAE,KAAK,aAAa,EAAE,EAAE,KAAK,SAAS,cAAc;AAE3F,MAAI,UAAU,UAAU,GAAG;AAO1B,SAAK,KAAK,UAAU,CAAC,CAAC,EAAE,GAAG,SAAS,CAAAC,WAAS;AAC5C,YAAM,IAAI,GAAG,WAAW,UAAU,CAAC,CAAC;AACpC;AAAA,QACC;AAAA,UACC,MAAM,UAAU,CAAC;AAAA,UACjB,KAAK,EAAE;AAAA,UACP,OAAO,EAAE;AAAA,UACT,MAAM,EAAE;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,SAAG,YAAY,UAAUA,OAAM,MAAM;AAAA,IACtC,CAAC;AACD;AAAA,EACD;AAOA,OAAK,KAAK,aAAa,EAAE,GAAG,SAAS,MAAM;AAC1C,OAAG,YAAY,MAAM,EAAE,UAAU,KAAK,KAAK,CAAC;AAC5C,eAAW,QAAQ,WAAW;AAC7B,SAAG,YAAY,EACb,OAAO,KAAK,EACZ,KAAK,IAAI,EACT,KAAK,SAAS,gBAAgB,EAC9B,GAAG,SAAS,MAAM;AAClB,cAAM,IAAI,GAAG,WAAW,IAAI;AAC5B;AAAA,UACC;AAAA,YACC;AAAA,YACA,KAAK,EAAE;AAAA,YACP,OAAO,EAAE;AAAA,YACT,MAAM,EAAE;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACH;AAAA,EACD,CAAC;AACF;AAEA,SAAS,4BAA4B,IAAI,OAAO;AAC/C,MAAI,CAAC,GAAG,SAAU;AAElB,MAAI,GAAG,YAAY,CAAC,GAAG,SAAS,gBAAgB;AAG/C,UAAM,MAAM,CAAC,YAAY,MAAM,OAAO,IAAI;AAC1C,QAAI,GAAG,SAAS,MAAM;AACrB,UAAI,KAAK,UAAU,GAAG,SAAS,IAAI;AAAA,IACpC,OAAO;AACN,UAAI,KAAK,SAAS,GAAG,SAAS,GAAG;AACjC,UAAI,GAAG,SAAS,SAAU,KAAI,KAAK,cAAc,GAAG,SAAS,QAAQ;AAAA,IACtE;AACA,WAAc,SAAS,eAAe,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,UAAQ;AACjE,UAAI,CAAC,KAAM,OAAM,EAAE,SAAS,gBAAgB;AAC5C,UAAI,KAAK,MAAO,OAAM,EAAE,SAAS,KAAK,MAAM;AAE5C,YAAM,CAAC,MAAM,QAAQ,SAAS,IAAI,IAAI,aAAa,KAAK,QAAQ,MAAM,IAAI,CAAC;AAC3E,UAAI,KAAM,OAAM,EAAE,SAAS,mCAAmC,KAAK,KAAK,IAAI,EAAE;AAC9E,SAAG,SAAS,OAAO;AACnB,SAAG,SAAS,SAAS;AACrB,SAAG,SAAS,UAAU;AACtB,SAAG,SAAS,QAAQ,KAAK;AACzB,SAAG,SAAS,iBAAiB,KAAK,UAAU,GAAG,QAAQ;AAAA,IACxD,CAAC;AAAA,EACF;AACD;AAEA,SAAS,UAAU,IAAI,OAAO;AAC7B,QAAM,MAAM;AAAA;AAAA,IAEX,QAAQ,MAAM,OAAO;AAAA,IACrB,OAAO,MAAM,YAAY,EAAE;AAAA,EAC5B;AAEA,MAAI,MAAM,UAAU,UAAU,GAAG,UAAU,QAAQ;AAKlD,eAAW,CAAC,KAAK,CAAC,KAAK,MAAM,UAAU,QAAQ,GAAG;AACjD,UAAI,MAAM,KAAK;AAAA,QACd,KAAK,EAAE;AAAA,QACP,OAAO,EAAE;AAAA,QACT,MAAM,EAAE;AAAA,QACR,OAAO,EAAE;AAAA,QACT,QAAQ,EAAE;AAAA,QACV,aAAa;AAAA,MACd,CAAC;AAAA,IACF;AAAA,EACD;AAEA,mBAAiB,KAAK,EAAE;AAExB,SAAc,QAAQ,aAAa,GAAG,EAAE,KAAK,UAAQ;AAGpD,QAAI,KAAK,MAAO,OAAM,EAAE,SAAS,KAAK,MAAM;AAM5C,OAAG,YAAY,KAAK;AAEpB,OAAG,gBAAgB,KAAK;AACxB,iBAAa,IAAI,KAAK;AAEtB,gBAAY,IAAI,KAAK;AAErB,QAAI,GAAG,cAAc;AACpB,UAAI,CAAC,KAAK,OAAO,KAAK,IAAI,UAAU,GAAG;AAEtC,YAAI,CAAC,GAAG,YAAY,GAAG,SAAS,UAAU,GAAG;AAE5C,gBAAM,EAAE,QAAQ,EAAE;AAAA,QACnB;AAAA,MACD;AACA,SAAG,OAAO,KAAK;AAAA,IAChB,OAAO;AAON,SAAG,aAAa,KAAK;AACrB,SAAG,uBAAuB,KAAK;AAG/B,UAAI,CAAC,KAAK,gBAAgB,KAAK,aAAa,UAAU,GAAG;AACxD,cAAM,EAAE,QAAQ,EAAE;AAAA,MACnB;AACA,SAAG,QAAQ,KAAK;AAEhB,UAAI,GAAG,iBAAiB;AACvB,YAAI,KAAK,kBAAkB;AAC1B,aAAG,gBAAgB,UAAU,KAAK;AAAA,QACnC,OAAO;AACN,aAAG,gBAAgB,UAAU,CAAC;AAAA,QAC/B;AAAA,MACD;AAAA,IACD;AAGA,QAAI,GAAG,mBAAmB;AACzB,SAAG,kBAAkB,UAAU,MAAM;AACrC,SAAG,kBAAkB,IAAI,MAAM,WAAW,MAAM;AAAA,IACjD;AAEA,QAAI,GAAG,cAAc;AACpB,0BAAoB,IAAI,KAAK;AAAA,IAC9B,OAAO;AACN,0BAAoB,IAAI,KAAK;AAAA,IAC9B;AACA,WAAO,CAAC;AAAA,EACT,CAAC;AACF;AAEO,SAAS,WAAW,IAAI;AAC9B,MAAI,GAAG,cAAc;AACpB,OAAG,UAAU,MAAM,UAAU,GAAG,EAAE,OAAO;AACzC,OAAG,UAAU,KAAK,KAAK,EAAE;AACzB,OAAG,UAAU,KAAK,KAAK,EAAE;AACzB,OAAG,UAAU,KAAK,KAAK,EAAE;AACzB,OAAG,QAAQ,UAAU,GAAG,EAAE,OAAO;AACjC,OAAG,MAAM,UAAU,GAAG,EAAE,OAAO;AAC/B,QAAI,GAAG,SAAS,UAAW,IAAG,SAAS,UAAU,IAAI,MAAM,WAAW,MAAM;AAC5E,QAAI,GAAG,SAAS,UAAW,IAAG,SAAS,UAAU,IAAI,MAAM,WAAW,MAAM;AAC5E;AAAA,EACD;AACA,KAAG,SAAS,UAAU,GAAG,EAAE,OAAO;AAClC,KAAG,iBAAiB,UAAU,GAAG,EAAE,OAAO;AAC1C,KAAG,YAAY,UAAU,GAAG,EAAE,OAAO;AACrC,KAAG,gBAAgB,UAAU,GAAG,EAAE,OAAO;AACzC,KAAG,WAAW,UAAU,GAAG,EAAE,OAAO;AACpC,KAAG,QAAQ,UAAU,GAAG,EAAE,OAAO;AACjC,KAAG,UAAU,UAAU,GAAG,EAAE,OAAO;AACnC,KAAG,cAAc,WAAW,EAAE,KAAK,eAAe,OAAO,EAAE,KAAK,KAAK,CAAC;AACvE;AAEA,SAAS,iBAAiB,KAAK,IAAI;AAClC,MAAI,GAAG,UAAU;AAChB,QAAI,WAAW;AACf,QAAI,OAAO,GAAG;AACd,QAAI,MAAM,GAAG;AACb,QAAI,WAAW,GAAG;AAElB,QAAI,GAAG,qBAAqB;AAC3B,UAAI,sBAAsB,CAAC;AAC3B,iBAAW,KAAK,GAAG,qBAAqB;AACvC,YAAI,oBAAoB,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAAA,MACtD;AAAA,IACD;AAEA,QAAI,GAAG,UAAU;AAChB,UAAI,WAAW,GAAG,SAAS;AAAA,IAC5B;AAAA,EACD,OAAO;AACN,QAAI,UAAU,GAAG,IAAI;AACrB,QAAI,WAAW,GAAG;AAAA,EACnB;AAEA,MAAI,GAAG,eAAe;AACrB,QAAI,gBAAgB;AAAA,EACrB;AAGA,MAAI,GAAG,UAAW,KAAI,YAAY,GAAG;AACrC,MAAI,GAAG,YAAa,KAAI,cAAc,GAAG;AACzC,MAAI,OAAO,UAAU,GAAG,kBAAkB,EAAG,KAAI,qBAAqB,GAAG;AACzE,MAAI,GAAG,kBAAmB,KAAI,oBAAoB;AAClD,MAAI,eAAe,GAAG;AACtB,MAAI,eAAe,GAAG;AAGtB,MAAI,GAAG,mBAAoB,KAAI,qBAAqB,GAAG;AACvD,MAAI,OAAO,UAAU,GAAG,mBAAmB,EAAG,KAAI,sBAAsB,GAAG;AAE3E,MAAI,GAAG,cAAc;AAEpB,QAAI,eAAe,GAAG,aAAa;AAAA,EACpC,OAAO;AAGN,QAAI,GAAG,iBAAiB;AAEvB,YAAM,YAAY,CAAC;AACnB,UAAI,YAAY;AAChB,iBAAW,OAAO,GAAG,gBAAgB,YAAY;AAChD,cAAM,OAAO,GAAG,gBAAgB,WAAW,GAAG;AAC9C,YAAI,KAAK,gBAAgB,KAAK,aAAa,MAAM;AAChD,oBAAU,GAAG,IAAI,CAAC,GAAG,KAAK,YAAY;AACtC,sBAAY;AAAA,QACb;AAAA,MACD;AACA,UAAI,WAAW;AACd,YAAI,mBAAmB;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AAEA,MAAI,GAAG,mBAAmB;AAEzB,UAAM,YAAY,CAAC;AACnB,QAAI,YAAY;AAChB,eAAW,OAAO,GAAG,kBAAkB,YAAY;AAClD,YAAM,OAAO,GAAG,kBAAkB,WAAW,GAAG;AAChD,UAAI,KAAK,gBAAgB,KAAK,aAAa,MAAM;AAChD,kBAAU,GAAG,IAAI,CAAC,GAAG,KAAK,YAAY;AACtC,oBAAY;AAAA,MACb;AAAA,IACD;AACA,QAAI,WAAW;AACd,UAAI,cAAc;AAAA,IACnB;AAAA,EACD;AAEA,MAAI,GAAG,iBAAiB;AAEvB,UAAM,YAAY,CAAC;AACnB,QAAI,YAAY;AAChB,eAAW,OAAO,GAAG,gBAAgB,YAAY;AAChD,YAAM,OAAO,GAAG,gBAAgB,WAAW,GAAG;AAC9C,UAAI,KAAK,QAAS;AAClB,UAAI,KAAK,WAAW;AACnB,YAAI,OAAO,SAAS,KAAK,WAAW,GAAG;AACtC,oBAAU,GAAG,IAAI;AAAA,YAChB,aAAa,KAAK;AAAA,YAClB,eAAe,KAAK;AAAA,UACrB;AACA,sBAAY;AAAA,QACb;AAAA,MACD,OAAO;AAEN,YAAI,KAAK,gBAAgB,KAAK,aAAa,MAAM;AAChD,oBAAU,GAAG,IAAI,CAAC,GAAG,KAAK,YAAY;AACtC,sBAAY;AAAA,QACb;AAAA,MACD;AAAA,IACD;AACA,QAAI,WAAW;AACd,UAAI,mBAAmB;AAAA,IACxB;AAAA,EACD;AACA,MAAI,GAAG,gBAAgB;AAEtB,UAAM,YAAY,CAAC;AACnB,QAAI,YAAY;AAChB,eAAW,OAAO,GAAG,eAAe,YAAY;AAC/C,YAAM,OAAO,GAAG,eAAe,WAAW,GAAG;AAC7C,UAAI,KAAK,QAAS;AAClB,UAAI,KAAK,WAAW;AACnB,YAAI,OAAO,SAAS,KAAK,WAAW,GAAG;AACtC,oBAAU,GAAG,IAAI;AAAA,YAChB,aAAa,KAAK;AAAA,YAClB,eAAe,KAAK;AAAA,UACrB;AACA,sBAAY;AAAA,QACb;AAAA,MACD,OAAO;AAEN,YAAI,KAAK,gBAAgB,KAAK,aAAa,MAAM;AAChD,oBAAU,GAAG,IAAI,CAAC,GAAG,KAAK,YAAY;AACtC,sBAAY;AAAA,QACb;AAAA,MACD;AAAA,IACD;AACA,QAAI,WAAW;AACd,UAAI,kBAAkB;AAAA,IACvB;AAAA,EACD;AAEA;AAEC,UAAM,WAAW,CAAC;AAClB,eAAW,KAAK,GAAG,cAAc,cAAc;AAC9C,UAAI,OAAO,UAAU,CAAC,EAAG,UAAS,KAAK,CAAC;AAAA,IACzC;AACA,QAAI,SAAS,QAAQ;AACpB,UAAI,WAAW;AAAA,IAChB;AAAA,EACD;AACD;AAIA,SAAS,oBAAoB,IAAI,OAAO;AAgBvC,aAAW,EAAE;AAGb,MAAI,cAAc,MAAM;AACxB,MAAI,GAAG,aAAc,gBAAe,MAAM;AAE1C,QAAM,CAAC,QAAQ,WAAW,IAAI,kBAAkB,IAAI,KAAK;AAEzD,KAAG,eAAe;AAOlB,QAAM,mBAAmB,sBAAsB,IAAI,KAAK;AAGxD,QAAM,kBAAkB,qBAAqB,aAAa,IAAI,KAAK;AAGnE,QAAM,YAAY,oBAAoB,IAAI,KAAK;AAE/C,qCAAmC,EAAE;AAErC,QAAM,oBAAoB,qBAAqB,IAAI,KAAK;AAGxD,QAAM,WAAW,oBAAoB,kBAAkB,IAAI;AAG3D,MAAI,OAAO,KAAK,IAAI,aAAa,mBAAmB,kBAAkB,UAAU,iBAAiB;AAGjG,MAAI,kBAAkB;AACrB,YAAQ,KAAK,IAAI,GAAG,cAAc,KAAK,OAAO,kBAAkB,WAAW,mBAAmB,EAAE;AAAA,EACjG,WAAW,iBAAiB;AAC3B,YAAQ,KAAK,IAAI,GAAG,cAAc,KAAK,OAAO,kBAAkB,EAAE;AAAA,EACnE;AAGA,MAAI,qBAAqB,KAAK,OAAO,oBAAoB,IAAI,MAAM,eAAe;AAEjF,OAAG,cAAc,WAAW,EAAE,KAAK,eAAe,OAAO,EAAE,KAAK,KAAK,CAAC;AAAA,EACvE,OAAO;AACN,OAAG,cAAc,WAAW,EAAE,KAAK,eAAe,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI;AAAA,EAC/E;AAEA,KAAG,SAAS,WAAW,EAAE,KAAK,aAAa,iBAAiB,OAAO,GAAG;AACtE,KAAG,QAAQ,WAAW,EAAE,KAAK,aAAa,iBAAiB,OAAO,GAAG;AACrE,KAAG,YAAY,WAAW,EAAE,KAAK,aAAa,kBAAkB,OAAO,kBAAkB,YAAY,GAAG;AACxG,KAAG,WAAW,WAAW,EAAE,KAAK,aAAa,iBAAiB,OAAO,GAAG;AACxE,KAAG,UAAU,WAAW,EAAE,KAAK,aAAa,iBAAiB,OAAO,GAAG;AAEvE;AAEC,UAAM,QAAQ;AACd,QAAI,oBAAoB,GAAG,UAAU;AACpC,UAAI,aAAa;AAEjB,iBAAW,KAAK,GAAG,UAAU;AAC5B,YAAI,EAAE,KAAK,OAAW;AACtB,YAAI,EAAE,MAAa,YAAY;AAC9B,wBAAc,EAAE,WAAW;AAAA,QAC5B,OAAO;AACN,kBAAQ,MAAM,0BAA0B;AAAA,QACzC;AAAA,MACD;AAEA,YAAM,UAAU,CAAC;AACjB,UAAI,WAAY,SAAQ,KAAK,aAAa,gBAAgB,aAAa,IAAI,MAAM,GAAG;AAEpF,SAAG,iBACD,KAAK,aAAa,kBAAkB,OAAO,mBAAmB,WAAW,mBAAmB,GAAG,EAC/F,OAAO,MAAM,EACb,KAAK,QAAQ,KAAK,IAAI,CAAC,EACvB,KAAK,eAAe,KAAK,EACzB,KAAK,KAAK,MAAM,kBAAkB,EAClC,KAAK,KAAK,mBAAmB,CAAC,EAC9B,KAAK,qBAAqB,SAAS,EACnC,KAAK,aAAa,KAAK,IAAI,MAAM,eAAe,gBAAgB,IAAI,CAAC,EACrE,KAAK,eAAsB,IAAI,EAC/B,KAAK,QAAQ,KAAK,EAClB,KAAK,WAAY;AACjB,WAAG,oBAAoB,KAAK,IAAI,GAAG,mBAAmB,KAAK,QAAQ,EAAE,KAAK;AAAA,MAC3E,CAAC;AAEF,SAAG,iBACD,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,MAAM,gBAAgB,EAC3B,KAAK,mBAAmB,YAAY;AACtC,SAAG,iBACD,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,mBAAmB,YAAY,EACpC,KAAK,MAAM,CAAC,iBAAiB,EAC7B,KAAK,MAAM,mBAAmB,CAAC,EAC/B,KAAK,MAAM,mBAAmB,CAAC;AACjC,SAAG,iBACD,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,mBAAmB,YAAY,EACpC,KAAK,oBAAoB,KAAK,EAC9B,KAAK,MAAM,MAAM,KAAK,EACtB,KAAK,MAAM,gBAAgB,EAC3B,KAAK,MAAM,gBAAgB;AAAA,IAC9B;AAEA,QAAI,iBAAiB;AACpB,SAAG,gBACD,KAAK,aAAa,kBAAkB,OAAO,mBAAmB,GAAG,EACjE,OAAO,MAAM,EACb,KAAK,YAAY,SAAS,oBAAoB,YAAY,SAAS,IAAI,MAAM,GAAG,EAChF,KAAK,eAAe,KAAK,EACzB,KAAK,KAAK,MAAM,kBAAkB,EAClC,KAAK,KAAK,kBAAkB,CAAC,EAC7B,KAAK,qBAAqB,SAAS,EACnC,KAAK,aAAa,KAAK,IAAI,MAAM,eAAe,eAAe,IAAI,CAAC,EACpE,KAAK,eAAsB,IAAI,EAC/B,KAAK,QAAQ,KAAK,EAClB,KAAK,WAAY;AACjB,WAAG,oBAAoB,KAAK,IAAI,GAAG,mBAAmB,KAAK,QAAQ,EAAE,KAAK;AAAA,MAC3E,CAAC;AACF,SAAG,gBACD,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,MAAM,eAAe,EAC1B,KAAK,mBAAmB,YAAY;AACtC,SAAG,gBACD,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,mBAAmB,YAAY,EACpC,KAAK,MAAM,CAAC,iBAAiB,EAC7B,KAAK,MAAM,kBAAkB,CAAC,EAC9B,KAAK,MAAM,kBAAkB,CAAC;AAChC,SAAG,gBACD,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,mBAAmB,YAAY,EACpC,KAAK,oBAAoB,KAAK,EAC9B,KAAK,MAAM,MAAM,KAAK,EACtB,KAAK,MAAM,eAAe,EAC1B,KAAK,MAAM,eAAe;AAAA,IAC7B;AAAA,EACD;AAEA,KAAG,cAAc,GAAG,SAAS,OAAO,YAAY,GAAG;AAEnD,gBAAc,IAAI,KAAK;AACxB;AAEA,SAAS,sBAAsB,IAAI,OAAO;AAMzC,MAAI,GAAG,eAAe;AACrB,OAAG,YACD,OAAO,MAAM,EACb,KAAK,mBAA0B,MAAM,GAAG,aAAa,IAAI,4BAA4B,EACrF,KAAK,aAAa,MAAM,aAAa,EACrC,KAAK,eAAsB,IAAI;AACjC,WAAO,MAAM;AAAA,EACd;AACA,MAAI,CAAC,GAAG,QAAS,QAAO;AAExB,MAAI,CAAC,GAAG,YAAY,GAAG,SAAS,UAAU,EAAG,QAAO;AAEpD,QAAM,OAAO,4BAA4B,IAAI,KAAK;AAGlD,aAAW,KAAK,MAAM;AACrB,QAAI,EAAE,IAAI,UAAU,EAAG;AACvB,UAAM,aAAa,oBAAI,IAAI;AAI3B,eAAW,KAAK,EAAE,KAAK;AACtB,UAAI,CAAC,WAAW,IAAI,EAAE,KAAK,GAAG;AAC7B,mBAAW,IAAI,EAAE,OAAO,CAAC,CAAC;AAAA,MAC3B;AACA,iBAAW,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;AAAA,IAC/B;AAEA,UAAM,MAAM,CAAC;AACb,eAAW,CAAC,WAAW,IAAI,KAAK,YAAY;AAC3C,UAAI,cAAc;AAClB,iBAAW,KAAK,MAAM;AACrB,YAAI,EAAE,MAAa,YAAY;AAC9B,yBAAe,EAAE,WAAW;AAAA,QAC7B,OAAO;AACN,kBAAQ,MAAM,YAAY;AAAA,QAC3B;AAAA,MACD;AAEA,UAAI,KAAK;AAAA,QACR,MAAa,OAAO,SAAS,EAAE;AAAA,QAC/B,OAAO;AAAA,QACP,OAAc,OAAO,SAAS,EAAE;AAAA,QAChC;AAAA,MACD,CAAC;AAAA,IACF;AACA,QAAI,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,EAAE,WAAW;AAChD,MAAE,SAAS;AAAA,EACZ;AAEA,MAAI,WAAW;AACf,aAAW,KAAK,MAAM;AACrB,QAAI,CAAC,EAAE,OAAQ;AACf,eAAW,KAAK,EAAE,QAAQ;AACzB,iBAAW,KAAK,IAAI,UAAU,EAAE,WAAW;AAAA,IAC5C;AAAA,EACD;AAEA,MAAI,YAAY;AAChB;AACC,UAAM,SAAS;AACf,QAAI,MAAM;AACV,UAAM,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK;AACrC,QAAI,YAAY,GAAG;AAClB,YAAM,IAAI,WAAW;AAAA,IACtB,WAAW,YAAY,IAAI;AAC1B,YAAM,IAAI;AAAA,IACX,WAAW,YAAY,KAAK;AAC3B,YAAM,IAAI;AAAA,IACX,OAAO;AACN,YAAM,IAAI;AAAA,IACX;AACA,UAAM,gBAAgB,OAAY,EAChC,OAAO,CAAC,GAAG,WAAW,MAAM,KAAK,WAAW,MAAM,KAAK,WAAW,MAAM,KAAK,WAAW,MAAM,KAAK,QAAQ,CAAC,EAC5G,MAAM,CAAC,GAAG,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC;AAGtG,eAAW,OAAO,MAAM;AACvB,UAAI,CAAC,IAAI,OAAQ;AAEjB,iBAAW,KAAK,IAAI,QAAQ;AAG3B,UAAE,SAAS,KAAK,KAAK,cAAc,EAAE,WAAW,IAAI,KAAK,EAAE;AAAA,MAC5D;AAIA,YAAM,WAAW,IAAI,OAAO,OAAO,CAAC,GAAG,MAAM,EAAE,cAAc,GAAG,CAAC;AAEjE,UAAI,SAAS,KAAK,KAAK,cAAc,QAAQ,IAAI,KAAK,EAAE;AAExD,YAAM,YAAY,IAAI,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,SAAS,GAAG,CAAC;AAEjE,kBAAY,KAAK,IAAI,WAAW,IAAI,SAAS,SAAS;AAAA,IACvD;AAAA,EACD;AAEA,aAAW,KAAK,MAAM;AACrB,QAAI,CAAC,EAAE,OAAQ;AAEf,UAAM,IAAI,GAAG,YAAY,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,EAAE,IAAI,KAAK;AAEjF,QAAI,IAAI,EAAE;AAEV,eAAW,OAAO,EAAE,QAAQ;AAW3B,WAAK,IAAI;AACT,QAAE,OAAO,QAAQ,EAAE,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,MAAM,EAAE,KAAK,QAAQ,IAAI,KAAK,EAAE,KAAK,UAAU,OAAO;AAEtG,UAAI,IAAI,UAAU,GAAG;AAEpB,cAAM,IAAI,IAAI,SAAS;AACvB,cAAM,OAAO,IAAI,YAAY,SAAS;AACtC,cAAMC,YAAW,KAAK,IAAI,KAAK,KAAK,SAAgB,YAAY,CAAC;AAEjE,UAAE,OAAO,MAAM,EACb,KAAK,IAAI,EACT,KAAK,KAAK,CAAC,CAAC,EACZ,KAAK,qBAAqB,SAAS,EACnC,KAAK,eAAe,QAAQ,EAC5B,KAAK,aAAaA,SAAQ,EAC1B,KAAK,eAAsB,IAAI,EAC/B,KAAK,QAAQ,OAAO;AAAA,MACvB;AAEA,QAAE,OAAO,QAAQ,EACf,KAAK,MAAM,CAAC,CAAC,EACb,KAAK,KAAK,IAAI,MAAM,EACpB,KAAK,QAAQ,OAAO,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,UAAU,IAAI,KAAK,EACxB,KAAK,kBAAkB,CAAC,EACxB,KAAK,SAAS,iBAAiB,EAC/B,GAAG,aAAa,MAAM;AACtB,+BAAuB,KAAK,IAAI,KAAK;AAAA,MACtC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAG,MAAM,KAAK;AAAA,MACf,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,6BAAqB,KAAK,IAAI,KAAK;AAAA,MACpC,CAAC;AACF,WAAK,IAAI;AAAA,IACV;AACA,MAAE,OAAO,MAAM,EAAE,KAAK,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,OAAO,CAAC,EAAE,KAAK;AAAA,EACxE;AACA,SAAO;AACR;AAEA,SAAS,4BAA4B,IAAI,OAAO;AAC/C,MAAI,MAAM,UAAU,GAAG;AAEtB,UAAM,SAAS,oBAAI,IAAI;AACvB,eAAW,KAAK,GAAG,UAAU;AAC5B,UAAI,EAAE,KAAK,OAAW;AACtB,UAAI,CAAC,OAAO,IAAI,EAAE,GAAG,GAAG;AACvB,eAAO,IAAI,EAAE,KAAK;AAAA,UACjB,GAAG,EAAE;AAAA,UACL,KAAK,CAAC;AAAA,QACP,CAAC;AAAA,MACF;AACA,aAAO,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC;AAAA,IAC7B;AACA,UAAMC,QAAO,CAAC;AACd,eAAW,KAAK,OAAO,OAAO,GAAG;AAChC,MAAAA,MAAK,KAAK,CAAC;AAAA,IACZ;AACA,WAAOA;AAAA,EACR;AAGA,QAAM,OAAO;AACb,QAAM,OAAO,CAAC;AACd,MAAI,IAAI;AACR,SAAO,IAAI,MAAM,OAAO;AACvB,SAAK,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,IAAI,IAAI;AAAA,MACR,GAAG,IAAI,OAAO;AAAA,MACd,KAAK,CAAC;AAAA,IACP,CAAC;AACD,SAAK;AAAA,EACN;AACA,MAAI,MAAM;AACV,aAAW,KAAK,MAAM,WAAW;AAChC,SAAK,EAAE;AACP,QAAI,IAAI;AACR,WAAO,IAAI,EAAE,OAAO;AACnB,WAAK,KAAK;AAAA,QACT,IAAI,IAAI;AAAA,QACR,IAAI,IAAI,IAAI;AAAA,QACZ,KAAK,CAAC;AAAA,MACP,CAAC;AACD,WAAK;AAAA,IACN;AACA,SAAK,EAAE;AAAA,EACR;AAGA,aAAW,KAAK,GAAG,UAAU;AAC5B,QAAI,EAAE,KAAK,QAAW;AAErB;AAAA,IACD;AACA,eAAW,KAAK,MAAM;AACrB,UAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;AAC/B,UAAE,IAAI,KAAK,CAAC;AACZ;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,qBAAqB,OAAO,IAAI,OAAO;AAQ/C,MAAI,CAAC,GAAG,WAAW,MAAM,UAAU,EAAG,QAAO;AAE7C,QAAM,UAAU,2BAA2B,OAAO,IAAI,KAAK;AAG3D,QAAM,OAAO,CAAC;AACd,aAAW,KAAK,SAAS;AACxB,QAAI,EAAE,IAAI,UAAU,EAAG;AACvB,UAAM,KAAK,CAAC;AACZ,eAAW,KAAK,GAAG;AAClB,SAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IACZ;AAEA,OAAG,MAAM,SAAS,EAAE,GAAG;AAEvB,SAAK,KAAK,EAAE;AAAA,EACb;AAGA,aAAW,KAAK,MAAM;AACrB,UAAM,aAAa,oBAAI,IAAI;AAC3B,UAAM,YAAY,CAAC;AACnB,eAAW,KAAK,EAAE,KAAK;AACtB,UAAI,EAAE,aAAa,MAAM;AACxB,YAAI,CAAC,WAAW,IAAI,EAAE,aAAa,IAAI,GAAG;AACzC,qBAAW,IAAI,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,QACvC;AACA,mBAAW,IAAI,EAAE,aAAa,IAAI,EAAE,KAAK,CAAC;AAAA,MAC3C,OAAO;AACN,kBAAU,KAAK,CAAC;AAAA,MACjB;AAAA,IACD;AACA,UAAM,MAAM,CAAC;AACb,QAAI,UAAU,QAAQ;AACrB,UAAI,KAAK;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,eAAW,CAAC,MAAM,KAAK,KAAK,YAAY;AACvC,UAAI,KAAK;AAAA,QACR;AAAA,QACA;AAAA,QACA,OAAO,GAAG,qBAAqB,GAAG,mBAAmB,MAAM,IAAI,IAAI;AAAA,MACpE,CAAC;AAAA,IACF;AACA,QAAI,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,SAAS,EAAE,MAAM,MAAM;AAClD,MAAE,SAAS;AAAA,EACZ;AAEA,MAAI,WAAW;AACf,aAAW,KAAK,MAAM;AACrB,eAAW,KAAK,EAAE,QAAQ;AACzB,iBAAW,KAAK,IAAI,UAAU,EAAE,MAAM,MAAM;AAAA,IAC7C;AAAA,EACD;AAEA,MAAI,YAAY;AAChB;AACC,UAAM,SAAS;AACf,QAAI,MAAM;AACV,UAAM,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK;AACrC,QAAI,YAAY,GAAG;AAClB,YAAM,IAAI,WAAW;AAAA,IACtB,WAAW,YAAY,IAAI;AAC1B,YAAM,IAAI;AAAA,IACX,WAAW,YAAY,KAAK;AAC3B,YAAM,IAAI;AAAA,IACX,OAAO;AACN,YAAM,IAAI;AAAA,IACX;AACA,UAAM,gBAAgB,OAAY,EAChC,OAAO,CAAC,GAAG,WAAW,MAAM,KAAK,WAAW,MAAM,KAAK,WAAW,MAAM,KAAK,WAAW,MAAM,KAAK,QAAQ,CAAC,EAC5G,MAAM,CAAC,GAAG,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC;AACtG,eAAW,KAAK,MAAM;AACrB,UAAI,CAAC,EAAE,OAAQ;AACf,iBAAW,KAAK,EAAE,QAAQ;AACzB,UAAE,SAAS,KAAK,KAAK,cAAc,EAAE,MAAM,MAAM,IAAI,KAAK,EAAE;AAAA,MAC7D;AAEA,QAAE,SAAS,KAAK,KAAK,cAAc,EAAE,IAAI,MAAM,IAAI,KAAK,EAAE;AAC1D,YAAM,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,SAAS,GAAG,CAAC;AACvD,kBAAY,KAAK,IAAI,WAAW,EAAE,SAAS,CAAC;AAAA,IAC7C;AAAA,EACD;AAEA,aAAW,KAAK,MAAM;AACrB,UAAM,IAAI,GAAG,WAAW,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,EAAE,IAAI,KAAK;AAEhF,QAAI,IAAI,EAAE;AAEV,eAAW,OAAO,EAAE,QAAQ;AAG3B,WAAK,IAAI;AACT,QAAE,OAAO,QAAQ,EAAE,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,MAAM,EAAE,KAAK,QAAQ,IAAI,KAAK,EAAE,KAAK,UAAU,OAAO;AAEtG,UAAI,IAAI,UAAU,GAAG;AAEpB,cAAM,IAAI,IAAI,SAAS;AACvB,cAAM,OAAO,IAAI,MAAM,OAAO,SAAS;AACvC,cAAMD,YAAW,KAAK,IAAI,KAAK,KAAK,SAAgB,YAAY,CAAC;AAEjE,UAAE,OAAO,MAAM,EACb,KAAK,IAAI,EACT,KAAK,KAAK,CAAC,CAAC,EACZ,KAAK,qBAAqB,SAAS,EACnC,KAAK,eAAe,QAAQ,EAC5B,KAAK,aAAaA,SAAQ,EAC1B,KAAK,eAAsB,IAAI,EAC/B,KAAK,QAAQ,OAAO;AAAA,MACvB;AAGA,QAAE,OAAO,QAAQ,EACf,KAAK,MAAM,CAAC,CAAC,EACb,KAAK,KAAK,IAAI,MAAM,EACpB,KAAK,QAAQ,OAAO,EACpB,KAAK,gBAAgB,CAAC,EACtB,KAAK,UAAU,IAAI,KAAK,EACxB,KAAK,kBAAkB,CAAC,EACxB,KAAK,SAAS,iBAAiB,EAC/B,GAAG,aAAa,MAAM;AACtB,8BAAsB,KAAK,IAAI,KAAK;AAAA,MACrC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAG,MAAM,KAAK;AAAA,MACf,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,4BAAoB,KAAK,IAAI,KAAK;AAAA,MACnC,CAAC;AACF,WAAK,IAAI;AAAA,IACV;AACA,MAAE,OAAO,MAAM,EAAE,KAAK,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,OAAO,CAAC,EAAE,KAAK;AAAA,EACxE;AACA,SAAO;AACR;AAEA,SAAS,2BAA2B,OAAO,IAAI,OAAO;AAErD,MAAI,MAAM,UAAU,GAAG;AAEtB,UAAM,SAAS,oBAAI,IAAI;AACvB,eAAW,KAAK,OAAO;AACtB,UAAI,EAAE,KAAK,OAAW;AACtB,UAAI,CAAC,OAAO,IAAI,EAAE,IAAI,GAAG;AACxB,eAAO,IAAI,EAAE,MAAM;AAAA,UAClB,GAAG,EAAE;AAAA,UACL,KAAK,CAAC;AAAA,QACP,CAAC;AAAA,MACF;AACA,aAAO,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC;AAAA,IAC9B;AACA,UAAM,OAAO,CAAC;AACd,eAAW,KAAK,OAAO,OAAO,GAAG;AAChC,WAAK,KAAK,CAAC;AAAA,IACZ;AACA,WAAO;AAAA,EACR;AAGA,QAAM,OAAO;AACb,QAAM,UAAU,CAAC;AACjB,MAAI,IAAI;AACR,SAAO,IAAI,MAAM,OAAO;AACvB,YAAQ,KAAK;AAAA,MACZ,IAAI;AAAA,MACJ,IAAI,IAAI;AAAA,MACR,GAAG,IAAI,OAAO;AAAA,MACd,KAAK,CAAC;AAAA,IACP,CAAC;AACD,SAAK;AAAA,EACN;AAEA,MAAI,MAAM;AACV,aAAW,KAAK,MAAM,WAAW;AAChC,SAAK,EAAE;AACP,QAAI,IAAI;AACR,WAAO,IAAI,EAAE,OAAO;AACnB,cAAQ,KAAK;AAAA,QACZ,IAAI,IAAI;AAAA,QACR,IAAI,IAAI,IAAI;AAAA,QACZ,KAAK,CAAC;AAAA,MACP,CAAC;AACD,WAAK;AAAA,IACN;AACA,SAAK,EAAE;AAAA,EACR;AAGA,aAAW,MAAM,OAAO;AACvB,eAAW,KAAK,SAAS;AACxB,UAAI,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,GAAG;AACjC,UAAE,IAAI,KAAK,EAAE;AACb;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,oBAAoB,IAAI,OAAO;AAmBvC;AAGC,UAAM,OAAO,CAAC,GACb,OAAO,CAAC,GACR,UAAU,CAAC;AAEZ,eAAW,KAAK,GAAG,cAAc;AAChC,iBAAW,KAAK,EAAE,SAAS;AAC1B,mBAAW,KAAK,EAAE,OAAO;AACxB,cAAI,EAAE,MAAa,OAAO;AACzB,oBAAQ,KAAK,EAAE,OAAO;AACtB;AAAA,UACD;AACA,cAAI,EAAE,MAAa,OAAO;AACzB,gBAAI,EAAE,QAAQ,EAAG,MAAK,KAAK,EAAE,KAAK;AAAA,gBAC7B,MAAK,KAAK,CAAC,EAAE,KAAK;AAAA,UACxB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,UAAM,eAAsB,aAAa,MAAM,kBAAkB;AACjE,UAAM,eAAe,CAAQ,aAAa,MAAM,kBAAkB;AAClE,OAAG,SAAS,SAAS,KAAK,IAAI,cAAc,CAAC,YAAY;AAEzD,QAAI,QAAQ,QAAQ;AACnB,SAAG,SAAS,aAAa,KAAK,IAAI,GAAG,OAAO;AAAA,IAC7C,OAAO;AACN,SAAG,SAAS,aAAa;AAAA,IAC1B;AAAA,EACD;AAEA,MAAI;AACJ,MAAI,GAAG,SAAS;AACf,OAAG,WAAW;AACd,iBAAa;AAAA,EACd,WAAW,GAAG,QAAQ;AACrB,OAAG,WAAW;AACd,iBAAa;AAAA,EACd;AAGA,QAAM,cAAc,MAAM,QAAQ,MAAM,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;AAE7F,sCAAoC,IAAI,KAAK;AAG7C,aAAW,KAAK,GAAG,cAAc;AAChC,MAAE,SAAS,GAAG,YAAY,EAAE,QAAQ,SAAS,KAAK,EAAE,QAAQ,OAAO,CAAC,GAAG,MAAM,EAAE,SAAS,GAAG,CAAC;AAAA,EAC7F;AAEA,QAAM,qBAAqB,MAAM,iBAAiB,GAAG,SAAS,IAAI;AAElE,MAAI,OAAO;AAEX,aAAW,CAAC,UAAU,WAAW,KAAK,GAAG,aAAa,QAAQ,GAAG;AAMhE,QAAI,gBAAgB;AACpB,QAAI,YAAY,SAAS,oBAAoB;AAC5C,uBAAiB,qBAAqB,YAAY,UAAU;AAAA,IAC7D;AAEA,QAAI,YAAY,MAAM;AAErB,YAAM,QAAQ,GAAG,qBAAqB,GAAG,mBAAmB,MAAM,YAAY,IAAI,IAAI;AAEtF,YAAM,YAAY,CAAC,YAAY,OAAO,OAAO,YAAY,QAAQ,MAAM;AACvE,UAAI,YAAY;AACf,kBAAU,KAAK,OAAO,KAAK,KAAM,MAAM,YAAY,QAAQ,SAAU,YAAY,cAAc,IAAI,GAAG;AACvG,UAAI,GAAG,WAAW;AACjB,cAAM,IAAI,GAAG,UAAU,KAAK,OAAK,EAAE,QAAQ,YAAY,IAAI;AAC3D,YAAI,EAAG,WAAU,KAAK,OAAO,KAAK,KAAM,MAAM,YAAY,QAAQ,SAAU,EAAE,QAAQ,MAAM,IAAI,GAAG;AAAA,MACpG;AACA,gBAAU,KAAK,GAAG;AAElB,SAAG,SACD,OAAO,MAAM,EACb,KAAK,aAAa,kBAAkB,EACpC,KAAK,eAAsB,IAAI,EAC/B,KAAK,KAAK,OAAO,gBAAgB,YAAY,SAAS,CAAC,EACvD,KAAK,eAAe,KAAK,EACzB,KAAK,qBAAqB,SAAS,EACnC,KAAK,QAAQ,KAAK,EAClB,KAAK,KAAK,MAAM,kBAAkB,EAClC,KAAK,UAAU,KAAK,EAAE,CAAC,EACvB,KAAK,WAAY;AACjB,WAAG,oBAAoB,KAAK,IAAI,GAAG,mBAAmB,KAAK,QAAQ,EAAE,KAAK;AAAA,MAC3E,CAAC,EACA,GAAG,aAAa,MAAM;AACtB,4BAAoB,aAAa,EAAE;AAAA,MACpC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,WAAG,MAAM,KAAK;AAAA,MACf,CAAC,EACA,GAAG,SAAS,CAAAD,WAAS;AACrB,WAAG,KAAK,MAAM;AACd,mCAA2B,aAAa,IAAI,KAAK;AACjD,WAAG,KAAK,UAAUA,OAAM,MAAM;AAAA,MAC/B,CAAC;AAGF,SAAG,SACD,OAAO,MAAM,EACb,KAAK,MAAM,OAAO,aAAa,EAC/B,KAAK,MAAM,OAAO,gBAAgB,YAAY,MAAM,EACpD,KAAK,UAAU,KAAK,EACpB,KAAK,mBAAmB,YAAY;AAGtC,SAAG,SACD,OAAO,MAAM,EACb,KAAK,MAAM,OAAO,gBAAgB,YAAY,SAAS,CAAC,EACxD,KAAK,MAAM,OAAO,gBAAgB,YAAY,SAAS,CAAC,EACxD,KAAK,MAAM,CAAC,iBAAiB,EAC7B,KAAK,UAAU,KAAK,EACpB,KAAK,mBAAmB,YAAY;AAAA,IACvC;AAEA,QAAI,QAAQ,OAAO;AACnB,gBAAY,IAAI;AAEhB,eAAW,UAAU,YAAY,SAAS;AAOzC,UAAI,CAAC,YAAY,QAAQ,OAAO,cAAc,OAAO,UAAU,gBAAgB;AAE9E,eAAO,WAAW,GAAG,SACnB,OAAO,MAAM,EACb,KAAK,OAAO,UAAU,EACtB,KAAK,eAAe,KAAK,EACzB,KAAK,qBAAqB,SAAS,EACnC,KAAK,QAAQ,OAAO,EACpB,KAAK,KAAK,EAAE,EACZ,KAAK,KAAK,QAAQ,OAAO,SAAS,CAAC,EACnC,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,gBAAgB,OAAO,SAAS,CAAC,CAAC,CAAC,EAC3E,KAAK,WAAY;AAAA,QAAC,CAAC,EACnB,GAAG,aAAa,MAAM;AACtB,oCAA0B,MAAM;AAAA,QACjC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,uCAA6B,MAAM;AAAA,QACpC,CAAC;AACF,WAAG,oBAAoB,KAAK,IAAI,GAAG,mBAAmB,OAAO,SAAS,KAAK,EAAE,QAAQ,EAAE,KAAK;AAAA,MAC7F;AAGA,YAAM,IAAI,GAAG,QAAQ,OAAO,GAAG,EAAE,KAAK,aAAa,iBAAiB,QAAQ,GAAG;AAE/E,UAAI,GAAG,QAAQ;AACd,eAAO,UAAU,EACf,OAAO,MAAM,EACb,KAAK,SAAS,WAAW,EACzB,KAAK,UAAU,OAAO,MAAM,EAC5B,KAAK,QAAQ,oBAAoB,EACjC,KAAK,gBAAgB,CAAC,EACtB,GAAG,aAAa,MAAM;AACtB,oCAA0B,MAAM;AAAA,QACjC,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,uCAA6B,MAAM;AAAA,QACpC,CAAC;AAAA,MACH;AAKA,UAAI,GAAG,UAAU,OAAO,cAAc,mBAAmB;AACxD,UAAE,OAAO,MAAM,EACb,KAAK,KAAK,EAAE,EACZ,KAAK,KAAK,CAAC,EACX,KAAK,SAAS,CAAC,EACf,KAAK,UAAU,OAAO,MAAM,EAC5B,KAAK,QAAQ,OAAO,EACpB,KAAK,mBAAmB,YAAY;AAAA,MACvC;AAKA,iBAAW,QAAQ,OAAO,OAAO;AAChC,YAAI,KAAK,MAAa,SAAS,KAAK,MAAa,SAAS,KAAK,MAAa,MAAO;AAGnF,YAAI;AACJ,YAAI,KAAK,MAAa,OAAO;AAC5B,cAAI,KAAK,WAAW,GAAG,SAAS,YAAY;AAC3C,oBAAQ,GAAG,SAAS,IAAI;AAAA,UACzB,OAAO;AACN,oBACC,UACA,GAAG,SAAS,IAAI,IAChB,MACA,GAAG,SAAS,IAAI,IAChB,MACA,GAAG,SAAS,IAAI,IAChB,OACC,KAAK,UAAU,GAAG,SAAS,YAAY,QAAQ,CAAC,IACjD;AAAA,UACF;AAAA,QACD,WAAW,KAAK,MAAa,OAAO;AAEnC,cAAI,KAAK,QAAQ,GAAG;AACnB,gBAAI,KAAK,SAAS,GAAG,SAAS,QAAQ;AACrC,sBAAQ,GAAG,SAAS,KAAK;AAAA,YAC1B,OAAO;AACN,sBACC,UACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,OACC,KAAK,QAAQ,GAAG,SAAS,QAAQ,QAAQ,CAAC,IAC3C;AAAA,YACF;AAAA,UACD,OAAO;AACN,gBAAI,KAAK,SAAS,CAAC,GAAG,SAAS,QAAQ;AACtC,sBAAQ,GAAG,SAAS,KAAK;AAAA,YAC1B,OAAO;AACN,sBACC,UACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,MACA,GAAG,SAAS,KAAK,IACjB,OACC,CAAC,KAAK,QAAQ,GAAG,SAAS,QAAQ,QAAQ,CAAC,IAC5C;AAAA,YACF;AAAA,UACD;AAAA,QACD,WAAW,KAAK,MAAa,OAAO;AACnC,kBAAe,OAAc,SAAS,EAAE;AAAA,QACzC;AAEA,UAAE,OAAO,MAAM,EACb,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,EACpC,KAAK,KAAK,KAAK,OAAO,EACtB,KAAK,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,EACtD,KAAK,UAAU,KAAK,OAAO,EAC3B,KAAK,mBAAmB,YAAY,EACpC,KAAK,UAAU,MAAM,EACrB,KAAK,SAAS,eAAe,EAC7B,KAAK,QAAQ,KAAK,EAClB,GAAG,aAAa,MAAM;AACtB,6BAAmB;AAAA,YAClB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAElB,iCAAuB;AAAA,YACtB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAKA,iBAAW,QAAQ,OAAO,OAAO;AAChC,YAAI,KAAK,MAAa,QAAQ,KAAK,MAAa,YAAa;AAE7D,cAAM,WAAW,KAAK,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK;AAE3D,cAAM,QAAQ,YAAY,KAAK,OAAO,eAAe,GAAG,kBAAkB,UAAU,QAAQ;AAE5F,cAAM,MAAM,EAAE,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,KAAK,IAAI,MAAM,OAAO,SAAS,IAAI,GAAG;AAEjG,cAAM,IAAI,OAAO;AACjB,YAAI,aAAa,CAAC,IAAI,GACrB,aAAa;AAEd,cAAM,SAAS,IACb,OAAO,QAAQ,EACf,KAAK,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,aAAa,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,EACnE,KAAK,QAAQ,KAAK,EAClB,KAAK,gBAAgB,CAAC,EACtB,KAAK,UAAU,KAAK;AAGtB,YAAI,KAAK,WAAW;AACnB,cACE,OAAO,MAAM,EACb,KAAK,kBAAkB,IAAI,CAAC,EAC5B,KAAK,eAAe,KAAK,EACzB,KAAK,qBAAqB,SAAS,EACnC,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,IAAI,CAAC,EACvB,KAAK,QAAQ,KAAK,EAClB,KAAK,KAAK,CAAC,IAAI,IAAI,UAAU;AAC/B,uBAAa,CAAC,IAAI,IAAI,aAAa,KAAK;AACxC,uBAAa,IAAI,aAAa,KAAK;AAAA,QACpC,WAAW,KAAK,YAAY;AAC3B,cACE,OAAO,MAAM,EACb,KAAK,kBAAkB,IAAI,CAAC,EAC5B,KAAK,qBAAqB,SAAS,EACnC,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,IAAI,CAAC,EACvB,KAAK,QAAQ,KAAK,EAClB,KAAK,KAAK,IAAI,IAAI,UAAU;AAC9B,uBAAa,IAAI,aAAa,KAAK;AAAA,QACpC;AAGA,YACE,OAAO,MAAM,EACb,KAAK,KAAK,UAAU,EACpB,KAAK,KAAK,CAAC,IAAI,CAAC,EAChB,KAAK,SAAS,UAAU,EACxB,KAAK,UAAU,CAAC,EAChB,KAAK,QAAQ,OAAO,EACpB,KAAK,gBAAgB,CAAC,EACtB,GAAG,aAAa,MAAM;AACtB,iBAAO,KAAK,gBAAgB,CAAC;AAC7B,6BAAmB;AAAA,YAClB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,iBAAO,KAAK,gBAAgB,CAAC;AAC7B,aAAG,MAAM,KAAK;AACd,uCAA6B,MAAM;AAAA,QACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,iCAAuB;AAAA,YACtB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAKA,UAAI,GAAG,UAAU,GAAG,UAAU;AAC7B,mBAAW,KAAK,GAAG,UAAU;AAC5B,cAAI,EAAE,MAAa,WAAY;AAC/B,cAAI,EAAE,KAAK,OAAW;AACtB,cAAI,CAAC,EAAE,WAAY;AAEnB,gBAAM,IAAI,OAAO;AAGjB,gBAAM,QAAQ,oBAAoB,IAAI,GAAG,MAAM;AAE/C,qBAAW,MAAM,EAAE,YAAY;AAC9B,gBAAI,GAAG,UAAU,QAAQ,OAAO,WAAY;AAI5C,kBAAM,MAAM,EAAE,OAAO,GAAG,EAAE,KAAK,aAAa,eAAe,EAAE,IAAI,MAAM,OAAO,SAAS,IAAI,GAAG;AAE9F,kBAAM,QAAQ,IACZ,OAAO,MAAM,EACb,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,EACpB,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,EACpB,KAAK,SAAS,IAAI,CAAC,EACnB,KAAK,UAAU,IAAI,CAAC,EACpB,KAAK,QAAQ,KAAK,EAClB,KAAK,gBAAgB,CAAC;AAExB,gBAAI,SAAS,SAAS,SAAS;AAE/B,gBAAI,qBAAqB,IAAI,EAAE,GAAG;AAEjC,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,OAAO,EACtB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EACrB,KAAK,MAAM,IAAI,IAAI,CAAC;AACtB,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,OAAO,EACtB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EACrB,KAAK,MAAM,IAAI,IAAI,CAAC;AACtB,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,GAAG,EACxB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EACrB,KAAK,MAAM,IAAI,IAAI,CAAC;AACtB,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,GAAG,EACxB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EACrB,KAAK,MAAM,IAAI,IAAI,CAAC;AAAA,YACvB,OAAO;AAEN,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,OAAO,EACtB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,CAAC,IAAI,CAAC,EACjB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,CAAC,IAAI,CAAC,EACjB,KAAK,MAAM,IAAI,CAAC;AAClB,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,OAAO,EACtB,KAAK,gBAAgB,CAAC,EACtB,KAAK,MAAM,CAAC,IAAI,CAAC,EACjB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,CAAC,IAAI,CAAC;AACnB,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,GAAG,EACxB,KAAK,MAAM,CAAC,IAAI,CAAC,EACjB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,CAAC,IAAI,CAAC,EACjB,KAAK,MAAM,IAAI,CAAC;AAClB,wBAAU,IACR,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,EACpB,KAAK,gBAAgB,GAAG,EACxB,KAAK,MAAM,CAAC,IAAI,CAAC,EACjB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,IAAI,CAAC,EAChB,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,YACpB;AAEA,gBAAI,aAAa,CAAC,IAAI,GACrB,aAAa;AAEd,gBAAI,GAAG,UAAU,WAAW;AAC3B,kBACE,OAAO,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,KAAK,eAAe,KAAK,EACzB,KAAK,qBAAqB,SAAS,EACnC,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,OAAO,YAAY,CAAC,EACtC,KAAK,QAAQ,KAAK,EAClB,KAAK,KAAK,CAAC,IAAI,IAAI,UAAU;AAC/B,2BAAa,CAAC,IAAI,IAAI,aAAa,GAAG,UAAU;AAChD,2BAAa,IAAI,aAAa,GAAG,UAAU;AAAA,YAC5C,WAAW,GAAG,UAAU,YAAY;AACnC,kBACE,OAAO,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,KAAK,qBAAqB,SAAS,EACnC,KAAK,eAAsB,IAAI,EAC/B,KAAK,aAAa,OAAO,YAAY,CAAC,EACtC,KAAK,QAAQ,KAAK,EAClB,KAAK,KAAK,IAAI,IAAI,UAAU;AAC9B,2BAAa,IAAI,aAAa,GAAG,UAAU;AAAA,YAC5C;AAGA,gBACE,OAAO,MAAM,EACb,KAAK,KAAK,UAAU,EACpB,KAAK,KAAK,CAAC,IAAI,CAAC,EAChB,KAAK,SAAS,UAAU,EACxB,KAAK,UAAU,CAAC,EAChB,KAAK,QAAQ,OAAO,EACpB,KAAK,gBAAgB,CAAC,EACtB,GAAG,aAAa,MAAM;AACtB,oBAAM,KAAK,gBAAgB,CAAC;AAC5B,sBAAQ,KAAK,kBAAkB,CAAC;AAChC,sBAAQ,KAAK,kBAAkB,CAAC;AAChC,sBAAQ,KAAK,UAAU,OAAO;AAC9B,sBAAQ,KAAK,UAAU,OAAO;AAE9B,iCAAmB;AAAA,gBAClB,MAAM;AAAA,gBACN,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACD,CAAC;AAAA,YACF,CAAC,EACA,GAAG,YAAY,MAAM;AACrB,iBAAG,MAAM,KAAK;AACd,oBAAM,KAAK,gBAAgB,CAAC;AAC5B,sBAAQ,KAAK,kBAAkB,CAAC;AAChC,sBAAQ,KAAK,kBAAkB,CAAC;AAChC,sBAAQ,KAAK,UAAU,KAAK;AAC5B,sBAAQ,KAAK,UAAU,KAAK;AAC5B,2CAA6B,MAAM;AAAA,YACpC,CAAC,EACA,GAAG,SAAS,MAAM;AAClB,qCAAuB;AAAA,gBACtB,MAAM;AAAA,gBACN,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACD,CAAC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACD;AAAA,MACD;AAGA,eAAS,OAAO,SAAS,GAAG;AAAA,IAC7B;AAGA,YAAQ,YAAY,SAAS,gBAAgB,IAAI;AAAA,EAClD;AAEA,MAAI,CAAC,GAAG,YAAY;AACnB,QAAI,GAAG,SAAS,UAAU,oBAAoB;AAE7C,SAAG,SAAS,UAAU,IAAI,MAAM,WAAW,MAAM;AACjD,SAAG,SAAS,UAAU,UAAU,MAAM,WAAW,OAAO;AAAA,IACzD,OAAO;AAEN,SAAG,SAAS,UAAU,IAAI,MAAM,WAAW,OAAO;AAClD,SAAG,SAAS,UAAU,UAAU,MAAM,WAAW,MAAM;AACvD,0BAAoB,EAAE;AAAA,IACvB;AAEA,QAAI,GAAG,SAAS,cAAc,oBAAoB;AACjD,UAAI,GAAG,SAAS,WAAW;AAE1B,WAAG,SAAS,UAAU,IAAI,MAAM,WAAW,MAAM;AACjD,WAAG,SAAS,UAAU,UAAU,MAAM,WAAW,OAAO;AAAA,MACzD;AAAA,IACD,OAAO;AAEN,SAAG,SAAS,UAAU,IAAI,MAAM,WAAW,OAAO;AAClD,SAAG,SAAS,UAAU,UAAU,MAAM,WAAW,MAAM;AACvD,0BAAoB,EAAE;AAAA,IACvB;AAAA,EACD;AAEA,SAAO;AACR;AAEA,SAAS,oBAAoB,IAAI,GAAG,QAAQ;AAQ3C,SAAc,OAAO,EAAE,KAAK,EAAE;AAC/B;AAEO,SAAS,0BAA0B,QAAQ;AACjD,MAAI,CAAC,OAAQ;AAEb,MAAI,OAAO,SAAU,QAAO,SAAS,KAAK,QAAQ,oBAAoB;AACtE,MAAI,OAAO,QAAS,QAAO,QAAQ,KAAK,gBAAgB,GAAG;AAC3D,MAAI,OAAO,YAAY;AACtB,eAAW,KAAK,OAAO,YAAY;AAClC,QAAE,KAAK,QAAQ,oBAAoB;AAAA,IACpC;AAAA,EACD;AACD;AAEO,SAAS,6BAA6B,QAAQ;AACpD,MAAI,CAAC,OAAQ;AAEb,MAAI,OAAO,SAAU,QAAO,SAAS,KAAK,QAAQ,oBAAoB;AACtE,MAAI,OAAO,QAAS,QAAO,QAAQ,KAAK,gBAAgB,CAAC;AACzD,MAAI,OAAO,YAAY;AACtB,eAAW,KAAK,OAAO,YAAY;AAClC,QAAE,KAAK,QAAQ,oBAAoB;AAAA,IACpC;AAAA,EACD;AACD;AAEA,SAAS,oCAAoC,IAAI,OAAO;AAQvD,MAAI,CAAC,GAAG,gBAAgB,GAAG,aAAa,UAAU,EAAG;AAErD,MAAI,GAAG,SAAS;AAEf,eAAW,KAAK,GAAG,cAAc;AAChC,iBAAW,KAAK,EAAE,SAAS;AAC1B,UAAE,SAAS;AACX,mBAAW,KAAK,EAAE,OAAO;AACxB,cAAI,EAAE,MAAa,SAAS,EAAE,MAAa,SAAS,EAAE,MAAa,OAAO;AACzE,cAAE,UAAU;AACZ,cAAE,UAAU;AAAA,UACb;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA;AAAA,EACD;AAMA,aAAW,KAAK,GAAG,cAAc;AAChC,eAAW,KAAK,EAAE,SAAS;AAC1B,iBAAW,KAAK,EAAE,OAAO;AACxB,YAAI,EAAE,MAAa,QAAQ,EAAE,MAAa,aAAa;AACtD,iBAAO,EAAE;AACT,iBAAO,EAAE;AAAA,QACV;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,MAAI,GAAG,UAAU;AAChB,eAAW,KAAK,GAAG,UAAU;AAC5B,UAAI,EAAE,YAAY;AACjB,mBAAW,KAAK,EAAE,YAAY;AAC7B,cAAI,EAAE,WAAW;AAChB,mBAAO,EAAE,UAAU;AACnB,mBAAO,EAAE,UAAU;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAGA,QAAM,aAAa,MAAM,QAAQ,MAAM,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;AAG5F,aAAW,KAAK,GAAG,cAAc;AAChC,eAAW,KAAK,EAAE,SAAS;AAE1B,YAAM,QAAQ,CAAC;AACf,iBAAW,KAAK,EAAE,OAAO;AACxB,YAAI,EAAE,MAAa,SAAS,EAAE,MAAa,SAAS,EAAE,MAAa,OAAO;AACzE,cAAI,EAAE,MAAM,UAAa,EAAE,MAAM,QAAW;AAC3C,cAAE,YAAY,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;AACjC,cAAE,YAAY,KAAK,IAAI,EAAE,KAAK,EAAE,EAAE;AAClC,kBAAM,KAAK,CAAC;AAAA,UACb;AAAA,QACD;AAAA,MACD;AAEA,cAAQ,GAAG,KAAK;AAEhB,QAAE,YAAY,KAAK,IAAI,GAAG,EAAE,MAAM;AAQlC,YAAM,aAAa,CAAC;AAEpB,iBAAW,KAAK,EAAE,OAAO;AACxB,YAAI,EAAE,MAAa,aAAa;AAC/B,cAAI,EAAE,KAAK,OAAW;AACtB,gBAAM,OAAO;AAAA,YACZ,IAAI,EAAE;AAAA,YACN,GAAG,EAAE;AAAA,YACL,KAAK;AAAA,UACN;AACA,cAAI,GAAG,uBAAuB;AAAA,UAE9B,OAAO;AACN,iBAAK,OAAO,kBAAkB,CAAC;AAAA,UAChC;AACA,qBAAW,KAAK,IAAI;AAAA,QACrB,WAAW,EAAE,MAAa,MAAM;AAC/B,cAAI,EAAE,KAAK,OAAW;AACtB,gBAAM,OAAO;AAAA,YACZ,IAAI,EAAE;AAAA,YACN,GAAG,EAAE;AAAA,YACL,KAAK;AAAA,UACN;AACA,cAAI,GAAG,mBAAmB;AAAA,UAE1B,OAAO;AACN,iBAAK,OAAO,kBAAkB,CAAC;AAAA,UAChC;AACA,qBAAW,KAAK,IAAI;AAAA,QACrB;AAAA,MACD;AAEA,UAAI,GAAG,UAAU;AAEhB,mBAAW,KAAK,GAAG,UAAU;AAC5B,cAAI,EAAE,MAAa,cAAc,EAAE,KAAK,UAAa,CAAC,EAAE,WAAY;AACpE,gBAAM,WAAW,EAAE,WAAW,KAAK,OAAK,EAAE,UAAU,QAAQ,EAAE,UAAU;AACxE,cAAI,UAAU;AACb,kBAAM,OAAO;AAAA,cACZ,IAAI,EAAE;AAAA,cACN,GAAG,EAAE;AAAA,cACL,KAAK,SAAS;AAAA,YACf;AACA,gBAAI,GAAG,oBAAoB;AAAA,YAE3B,OAAO;AACN,mBAAK,OAAO,EAAE;AAAA,YACf;AACA,uBAAW,KAAK,IAAI;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAEA,UAAI,WAAW,SAAS,GAAG;AAC1B,mBAAW,KAAK,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;AAEnC,iBAAS,OAAO,GAAG,OAAO,WAAW,QAAQ,QAAQ;AAMpD,gBAAM,KAAK,WAAW,IAAI;AAE1B,cAAI,CAAC,GAAG,MAAM;AAEb;AAAA,UACD;AAEA,cAAI;AACJ,aAAG,EACD,OAAO,MAAM,EACb,KAAK,GAAG,IAAI,EACZ,KAAK,aAAa,EAAE,YAAY,CAAC,EACjC,KAAK,eAAsB,IAAI,EAC/B,KAAK,WAAY;AACjB,mBAAO,KAAK,QAAQ,EAAE;AAAA,UACvB,CAAC,EACA,OAAO;AAET,kBAAQ,EAAE,YAAY,IAAI;AAE1B,cAAI,QAAQ,OACX,SAAS;AAEV,cAAI,OAAO,GAAG,GAAG;AAEhB,oBAAQ;AAAA,UACT,WAAW,OAAO,aAAa,GAAG,GAAG;AAEpC,qBAAS;AAAA,UACV;AAGA,qBAAW,KAAK,EAAE,OAAO;AACxB,gBAAI,SAAS,OAAQ;AAErB,gBAAI,EAAE,MAAa,SAAS,EAAE,MAAa,SAAS,EAAE,MAAa,OAAO;AACzE,kBAAI,EAAE,MAAM,UAAa,EAAE,MAAM,OAAW;AAC5C,oBAAM,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;AAC9B,oBAAM,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;AAE9B,kBAAI,KAAK,GAAG,GAAG;AACd,oBAAI,KAAK,GAAG,GAAG;AACd,sBAAI,OAAO,GAAG,IAAI,IAAI;AACrB,4BAAQ;AAAA,kBACT;AAAA,gBACD,OAAO;AACN,0BAAQ;AACR,2BAAS;AAAA,gBACV;AAAA,cACD,OAAO;AACN,oBAAI,OAAO,KAAK,GAAG,GAAG;AACrB,2BAAS;AAAA,gBACV;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,cAAI,SAAS,QAAQ;AAEpB;AAAA,UACD;AAEA,cAAI,CAAC,OAAO;AAEX,qBAAS,QAAQ,OAAO,GAAG,SAAS,GAAG,SAAS;AAC/C,oBAAM,MAAM,WAAW,KAAK;AAC5B,kBAAI,IAAI,KAAK,GAAG,GAAG;AAElB,oBAAI,IAAI,IAAI,WAAW;AACtB,0BAAQ;AAAA,gBACT,WAAW,IAAI,IAAI,YAAY;AAC9B,2BAAS;AAAA,gBACV,OAAO;AAAA,gBAEP;AAAA,cACD,OAAO;AACN,oBAAI,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa,IAAI,IAAI,aAAa,IAAI;AACxE,0BAAQ;AACR;AAAA,gBACD,OAAO;AAEN;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,cAAI,SAAS,OAAQ;AAErB,cAAI,CAAC,QAAQ;AAEZ,qBAAS,QAAQ,OAAO,GAAG,QAAQ,WAAW,QAAQ,SAAS;AAC9D,oBAAM,MAAM,WAAW,KAAK;AAE5B,kBAAI,IAAI,KAAK,GAAG,GAAG;AAAA,cAEnB,OAAO;AACN,oBAAI,OAAO,IAAI,IAAI,GAAG,GAAG;AACxB,2BAAS;AACT;AAAA,gBACD,OAAO;AAEN;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,cAAI,SAAS,OAAQ;AAErB,cAAI,OAAO;AACV,gBAAI,CAAC,QAAQ;AACZ,iBAAG,IAAI,aAAa;AAAA,YACrB;AAAA,UACD,OAAO;AACN,gBAAI,QAAQ;AACX,iBAAG,IAAI,YAAY;AAAA,YACpB,OAAO;AACN,iBAAG,IAAI,aAAa;AAAA,YACrB;AAAA,UACD;AAEA,cAAI,GAAG,IAAI,aAAa,GAAG,IAAI,YAAY;AAC1C,eAAG,IAAI,aAAa;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEO,SAAS,kBAAkB,GAAG;AACpC,MAAI,EAAE,gBAAiB,QAAO,EAAE;AAChC,UAAQ,EAAE,SAAS,EAAE,QAAQ,SAAS,EAAE,SAAS,EAAE;AACpD;AAEA,SAAS,QAAQ,QAAQ,OAAO;AAG/B,MAAI,MAAM,UAAU,GAAG;AAGtB,WAAO,SAAS;AAChB;AAAA,EACD;AAIA,QAAM,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AAE9C,QAAM,SAAS,CAAC;AAChB,aAAW,KAAK,OAAO;AACtB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACvC,UAAI,OAAO,CAAC,IAAI,EAAE,WAAW;AAC5B,UAAE,UAAU;AACZ,eAAO,CAAC,IAAI,EAAE,YAAY,EAAE;AAC5B;AAAA,MACD;AAAA,IACD;AACA,QAAI,EAAE,WAAW,QAAW;AAC3B,QAAE,UAAU,OAAO;AACnB,aAAO,KAAK,EAAE,YAAY,EAAE,SAAS;AAAA,IACtC;AAAA,EACD;AAEA,MAAI,cAAc,iBAAiB,OAAO,MAAM;AAChD,MAAI,cAAc,GAAG;AAEpB,kBAAc;AAAA,EACf;AAIA,aAAW,KAAK,OAAO;AACtB,MAAE,UAAU,EAAE,UAAU;AACxB,MAAE,UAAU;AACZ,WAAO,EAAE;AACT,WAAO,EAAE;AACT,WAAO,EAAE;AAAA,EACV;AAEA,SAAO,SAAS,cAAc,OAAO;AACtC;AAEO,SAAS,mCAAmC,IAAI;AAUtD,MAAI,CAAC,GAAG,MAAO;AACf,MAAI,CAAC,GAAG,MAAO;AACf,MAAI,GAAG,MAAM,OAAQ;AACrB,aAAW,KAAK,GAAG,OAAO;AACzB,QAAI,CAAC,EAAE,QAAS;AAChB,eAAW,KAAK,EAAE,SAAS;AAC1B,UAAI,CAAC,EAAE,eAAgB;AACvB,iBAAW,QAAQ,EAAE,gBAAgB;AACpC,cAAM,IAAI,EAAE,eAAe,IAAI;AAC/B,QAAe,QAAQ,GAAG,GAAG,KAAK;AAAA,MACnC;AAAA,IACD;AAAA,EACD;AACD;AAEO,SAAS,oBAAoB,IAAI;AACvC,KAAG,SAAS,UAAU,IAAI,MAAM,WAAW,WAAW;AACtD,EAAO,UAAU;AAAA,IAChB,MAAM,GAAG,SAAS,UAAU,MAAM;AAAA,MACjC,QAAQ,EACN;AAAA,QACA,OAAY,EACV,OAAO,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,GAAG,SAAS,MAAM,CAAC,EACnD,MAAM,CAAC,GAAG,GAAG,SAAS,UAAU,MAAM,GAAG,SAAS,UAAU,OAAO,CAAC,CAAC;AAAA,MACxE,EACC,WAAW,CAAC,CAAC,GAAG,SAAS,QAAQ,GAAG,GAAG,SAAS,MAAM,CAAC,EACvD,SAAS,GAAG,SAAS,UAAU,SAAS;AAAA,IAC3C;AAAA,EACD,CAAC;AACF;AAEO,SAAS,oBAAoB,IAAI;AACvC,MAAI,CAAC,GAAG,SAAS,UAAW;AAE5B,KAAG,SAAS,UAAU,IAAI,MAAM,WAAW,WAAW;AACtD,EAAO,UAAU;AAAA,IAChB,MAAM,GAAG,SAAS,UAAU,MAAM;AAAA,MACjC,QAAQ,EACN,MAAM,OAAY,EAAE,OAAO,CAAC,GAAG,GAAG,SAAS,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,SAAS,UAAU,IAAI,CAAC,CAAC,EAC9F,WAAW,CAAC,GAAG,GAAG,SAAS,UAAU,CAAC,EACtC,SAAS,GAAG,SAAS,UAAU,SAAS;AAAA,IAC3C;AAAA,EACD,CAAC;AACF;AAEA,eAAsB,mBAAmB,GAAG;AAkB3C,QAAM,EAAE,GAAG,QAAQ,aAAa,IAAI,MAAM,IAAI;AAE9C,MAAI;AAEJ,MAAI,EAAE,QAAQ;AACb,aAAS,EAAE;AAAA,EACZ,OAAO;AACN,UAAM,OAAc,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC;AAC9C,aAAS,KAAK;AAAA,EACf;AAEA,QAAM,mBAAmB,OAAO,OAAO,KAAK;AAG5C,QAAM,MAAM;AAAA,IACX,OAAO;AAAA,MACN,QAAQ;AAAA,IACT;AAAA;AAAA;AAAA,IAKA,OAAO,CAAC;AAAA,IACR;AAAA,IACA,WAAW,CAAC;AAAA,EACb;AAEA,EAAO,uBAAuB,MAAM,QAAQ,IAAI,KAAK;AAKrD,MAAI,GAAG,UAAU;AAChB,QAAI,GAAG,qBAAqB;AAC3B,YAAM,KAAK;AAAA,QACV,MAAaG,KAAI;AAAA,QACjB,MAAM,OAAO,aAAa;AAAA,QAC1B,QAAQ,OAAO;AAAA,QACf,UAAU;AAAA,MACX;AACA,iBAAW,KAAK,GAAG,qBAAqB;AACvC,WAAG,CAAC,IAAI,GAAG,oBAAoB,CAAC;AAAA,MACjC;AACA,UAAI,MAAM,KAAK,EAAE;AAAA,IAClB;AAEA,QAAI,GAAG,qBAAqB,GAAG,kBAAkB,OAAO,UAAU,GAAG;AACpE,iBAAW,KAAK,GAAG,kBAAkB,OAAO,UAAU,GAAG;AACxD,YAAI,MAAM,KAAK,CAAC;AAAA,MACjB;AAAA,IACD;AAAA,EACD,WAAW,GAAG,OAAO,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,qBAAqB;AAGrE,QAAI,aAAa;AAChB,YAAM,KAAK;AAAA,QACV,MAAaA,KAAI;AAAA,QACjB,MAAM,OAAO,aAAa;AAAA,QAC1B,SAAS,GAAG,IAAI;AAAA,QAChB,UAAU,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,oBAAoB;AAAA,QAC1D,QAAQ,OAAO;AAAA,QACf,YAAY,YAAY;AAAA,MACzB;AACA,UAAI,MAAM,KAAK,EAAE;AAAA,IAClB,OAAO;AAAA,IAEP;AAAA,EACD;AAGA,QAAM,KAAK;AAAA,IACV,oBAAoB;AAAA;AAAA,IACpB,aAAa,GAAG;AAAA,IAChB,qBAAqB,GAAG;AAAA,IACxB,oBAAoB,GAAG;AAAA,IACvB,cAAc;AAAA,MACb,MAAM,OAAO;AAAA,IACd;AAAA,EACD;AACA,MAAI,GAAG,UAAU;AAChB,OAAG,OAAcA,KAAI;AACrB,OAAG,OAAO,GAAG;AACb,OAAG,MAAM,GAAG;AACZ,OAAG,WAAW,GAAG;AACjB,OAAG,WAAW;AACd,OAAG,iBAAiB,GAAG;AAAA,EACxB,OAAO;AAEN,OAAG,MAAM,GAAG;AACZ,OAAG,WAAW,GAAG;AACjB,eAAW,KAAK,GAAG,IAAI,QAAQ,GAAG,QAAQ,GAAG;AAC5C,UAAI,KAAK,wBAAwB,KAAK,eAAe;AAEpD;AAAA,MACD;AACA,SAAG,CAAC,IAAI,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAAA,IACtC;AAAA,EACD;AAGA,MAAI,GAAG,YAAY,GAAG,UAAU;AAC/B,OAAG,WAAW,GAAG;AAAA,EAClB;AAEA,MAAI,MAAM,KAAK,EAAE;AAEjB,MAAI,GAAG;AACN,QAAI,EAAE,MAAa,SAAS,EAAE,MAAa,OAAO;AACjD,YAAM,OAAO,KAAK,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;AAC7C,UAAI,MAAM,EAAE;AACZ,UAAI,QAAQ,KAAK,IAAI,GAAG,EAAE,QAAQ,IAAI;AACtC,UAAI,OAAO,KAAK,IAAI,MAAM,OAAO,UAAU,EAAE,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI;AAAA,IACnF,WAAW,EAAE,MAAa,QAAQ,EAAE,MAAa,aAAa;AAC7D,UAAI,EAAE,QAAQ,EAAE,MAAM;AACrB,cAAM,OAAO,KAAK,KAAK,KAAK,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;AACpD,YAAI,MAAM,EAAE;AACZ,YAAI,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;AACvD,YAAI,OAAO,KAAK,IAAI,MAAM,OAAO,UAAU,EAAE,KAAK,YAAY,CAAC,EAAE,KAAK,KAAK,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;AAAA,MACtG,OAAO;AACN,cAAM,OAAO;AACb,YAAI,MAAM,EAAE;AACZ,YAAI,QAAQ,KAAK,IAAI,GAAG,EAAE,OAAO,IAAI;AACrC,YAAI,OAAO,KAAK,IAAI,MAAM,OAAO,UAAU,EAAE,KAAK,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI;AACnF,YAAI,UAAU,KAAK;AAAA,UAClB,KAAK,EAAE;AAAA,UACP,OAAO,KAAK,IAAI,GAAG,EAAE,OAAO,IAAI;AAAA,UAChC,MAAM,KAAK,IAAI,MAAM,OAAO,UAAU,EAAE,KAAK,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI;AAAA,UAC9E,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,QACb,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAEA,MAAI,CAAC,IAAI,KAAK;AAEb,UAAM,IAAI,MAAM,YAAY,EAAE,EAAE,CAAC;AAEjC,QAAI,KAAK,EAAE,MAAa,YAAY;AAGnC,YAAM,OAAO;AAEb,UAAI,OAAO,EAAE,OAAO,EAAE,OAAO;AAE5B,YAAI,MAAM,EAAE;AACZ,YAAI,QAAQ,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI;AACpC,YAAI,OAAO,KAAK,IAAI,MAAM,OAAO,UAAU,EAAE,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI;AAAA,MAClF;AAAA,IACD;AAEA,QAAI,CAAC,IAAI,KAAK;AAGb,UAAI,MAAM,EAAE;AACZ,UAAI,QAAQ,EAAE;AACd,UAAI,OAAO,EAAE;AAAA,IACd;AAAA,EACD;AAEA,MAAI;AAEJ,MAAI,CAAC,GAAG,UAAU;AAGjB,UAAM,OAAO,MAAa,SAAS,YAAY;AAAA,MAC9C,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACpB,QAAQ,MAAM,OAAO;AAAA,QACrB,SAAS,GAAG,IAAI;AAAA,QAChB,UAAU,GAAG;AAAA,QACb,uBAAuB,OAAO;AAAA,MAC/B,CAAC;AAAA,IACF,CAAC;AACD,QAAI,KAAK,MAAO,OAAM,KAAK;AAC3B,QAAI,KAAK,QAAQ;AAEhB,mBAAa,KAAK;AAClB,iBAAW,KAAK,KAAK,QAAQ;AAC5B,YAAI,MAAM,KAAK,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC;AAAA,MAC7C;AAAA,IACD;AAAA,EACD;AACA,QAAM,KAAK,MAAM,SAAS,GAAG;AAE7B,MAAI,GAAG;AACN,QAAI,EAAE,MAAa,SAAS,EAAE,MAAa,OAAO;AACjD,SAAG,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB;AAAA,IACzD;AAAA,EACD;AACA,MAAI,YAAY;AAEf,qBACE,MAAM,WAAW,cAAc,EAC/B,MAAM,UAAU,oBAAoB,EACpC,OAAO,KAAK,EACZ,MAAM,iBAAiB,KAAK,EAC5B,KAAK,0CAA0C,OAAO,UAAU,EAChE,MAAM,aAAa,MAAM,EACzB,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,iBAAiB,OAAO,KAAK,EAAE,MAAM,UAAU,gBAAgB,EAAE,MAAM,iBAAiB,KAAK;AACvG,eAAW,KAAK,YAAY;AAC3B,YAAM,QAAQ,EACZ,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,MAAM,eAAe,QAAQ,EAC7B,MAAM,UAAU,MAAM,EACtB,MAAM,aAAa,MAAM,EACzB,OAAO,OAAO;AAChB,YACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,MAAM,gBAAgB,KAAK,EAC3B,SAAS,WAAW,CAAC,EAAE,MAAM,EAC7B,GAAG,UAAU,CAAAH,WAAS;AACtB,YAAIA,OAAM,OAAO,SAAS;AACzB,aAAG,YAAY,CAAC;AAAA,QACjB,OAAO;AACN,aAAG,aAAa,CAAC;AAAA,QAClB;AAAA,MACD,CAAC;AACF,YAAM,OAAO,MAAM,EAAE,KAAK,EAAE,IAAI;AAAA,IACjC;AAAA,EACD;AACD;AAEA,SAAS,kBAAkB,IAAI,OAAO;AAOrC,MAAI,CAAC,GAAG,OAAO;AAEd,WAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,EACf;AAEA,QAAM,cAAc,CAAC;AAErB,MAAI,aAAa,CAAC;AAElB,aAAW,eAAe,GAAG,OAAO;AACnC,UAAM,KAAK,CAAC;AACZ,eAAW,KAAK,YAAa,IAAG,CAAC,IAAI,YAAY,CAAC;AAClD,OAAG,UAAU,CAAC;AAEd,eAAW,UAAU,YAAY,SAAS;AACzC,YAAM,KAAK,CAAC;AACZ,iBAAW,KAAK,OAAQ,IAAG,CAAC,IAAI,OAAO,CAAC;AACxC,SAAG,QAAQ,CAAC;AAEZ,iBAAW,QAAQ,OAAO,OAAO;AAChC,YAAI,KAAK,MAAa,QAAQ,KAAK,MAAa,aAAa;AAE5D,mBAAS,MAAM,KAAK;AACpB,cAAI,KAAK,KAAK,QAAW;AACxB,oBAAQ,IAAI,oBAAoB,KAAK,OAAO,MAAM,KAAK,IAAI;AAC3D;AAAA,UACD;AAEA,cAAI,KAAK,QAAQ,KAAK,MAAM;AAC3B,eAAG,kBAAkB,UAAU,IAAI,KAAK,IAAI;AAC5C,eAAG,kBAAkB,UAAU,KAAK,IAAI;AAAA,UACzC;AACA,cAAI,KAAK,QAAQ,KAAK,MAAM;AAC3B,eAAG,kBAAkB,UAAU,IAAI,KAAK,IAAI;AAC5C,eAAG,kBAAkB,UAAU,KAAK,IAAI;AAAA,UACzC;AAEA,cAAI,GAAG,SAAS;AACf,kBAAM,IAAI;AAAA,cACT,cAAc;AAAA,cACd,SAAS;AAAA,YACV;AACA,uBAAW,KAAK,MAAM;AACrB,gBAAE,CAAC,IAAI,KAAK,CAAC;AAAA,YACd;AACA,wBAAY,KAAK,CAAC;AAClB;AAAA,UACD;AAGA,aAAG,MAAM,KAAK,IAAI;AAElB;AAAA,QACD;AAGA,gBAAQ,MAAM,IAAI,KAAK;AACvB,YAAI,KAAK,MAAM,UAAa,KAAK,MAAM,QAAW;AACjD,kBAAQ,IAAI,2BAA2B,IAAI;AAC3C;AAAA,QACD;AACA,WAAG,MAAM,KAAK,IAAI;AAAA,MACnB;AAEA,UAAI,GAAG,MAAM,UAAU,GAAG;AAMzB,YAAI,GAAG,UAAU,GAAG,UAAU;AAC7B,cAAI,eAAe;AAEnB,qBAAW,KAAK,GAAG,UAAU;AAC5B,gBAAI,aAAc;AAClB,gBAAI,EAAE,KAAK,OAAW;AAEtB,gBAAI,EAAE,MAAa,YAAY;AAC9B,kBAAI,CAAC,EAAE,WAAY;AACnB,yBAAW,KAAK,EAAE,YAAY;AAC7B,oBAAI,EAAE,UAAU,QAAQ,OAAO,YAAY;AAC1C,iCAAe;AACf;AAAA,gBACD;AAAA,cACD;AACA;AAAA,YACD;AAAA,UACD;AAEA,cAAI,CAAC,cAAc;AAElB,gBAAI,iBAAiB,EAAE,GAAG;AAAA,YAG1B,OAAO;AACN;AAAA,YACD;AAAA,UACD;AAAA,QACD,OAAO;AACN,cAAI,iBAAiB,EAAE,GAAG;AAAA,UAG1B,OAAO;AACN;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,SAAG,QAAQ,KAAK,EAAE;AAAA,IACnB;AACA,QAAI,GAAG,QAAQ,UAAU,EAAG;AAK5B,eAAW,KAAK,EAAE;AAAA,EACnB;AAEA,MAAI,GAAG,mBAAmB;AACzB,UAAM,cAAc,GAAG,kBAAkB;AACzC,QAAI,eAAe,YAAY,OAAO,YAAY,OAAO;AAExD,YAAM,MAAM,CAAC;AACb,iBAAW,SAAS,YAAY,OAAO;AACtC,mBAAW,KAAK,YAAY;AAC3B,cAAI,CAAC,EAAE,WAAY;AACnB,qBAAW,MAAM,EAAE,YAAY;AAC9B,gBAAI,GAAG,KAAK,YAAY,OAAO,GAAG,UAAU,OAAO;AAElD,gBAAE,UAAU;AACZ,kBAAI,KAAK,CAAC;AACV;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,iBAAW,KAAK,YAAY;AAC3B,YAAI,CAAC,EAAE,QAAS,KAAI,KAAK,CAAC;AAAA,MAC3B;AACA,iBAAW,KAAK,IAAK,QAAO,EAAE;AAC9B,mBAAa;AAAA,IACd;AAAA,EACD;AACA,MAAI,GAAG,WAAW;AAEjB,UAAM,YAAY,GAAG,UAAU,IAAI,OAAK,EAAE,IAAI;AAC9C,eAAW,KAAK,CAAC,GAAG,MAAM;AACzB,UAAI,UAAU,QAAQ,EAAE,IAAI,IAAI,UAAU,QAAQ,EAAE,IAAI,EAAG,QAAO;AAAA,UAC7D,QAAO;AAAA,IACb,CAAC;AAED,eAAW,aAAa,GAAG,WAAW;AACrC,YAAM,YAAY,WAAW,KAAK,QAAM,GAAG,QAAQ,UAAU,IAAI;AACjE,UAAI,CAAC,aAAa,CAAC,UAAU,QAAS;AACtC,YAAM,eAAe,CAAC;AACtB,iBAAW,QAAQ,UAAU,SAAS;AACrC,cAAM,IAAI,UAAU,QAAQ,KAAK,OAAK,EAAE,cAAc,IAAI;AAC1D,YAAI,GAAG;AACN,uBAAa,KAAK,CAAC;AAAA,QACpB;AAAA,MACD;AACA,gBAAU,UAAU;AAAA,IACrB;AAAA,EACD;AACA,SAAO,CAAC,YAAY,WAAW;AAChC;AAEA,SAAS,iBAAiB,IAAI;AAE7B,MAAI,CAAC,GAAG,cAAe,QAAO;AAC9B,MAAI,GAAG,SAAU,QAAO;AACxB,MAAI,GAAG,OAAO,GAAG,IAAI,oBAAqB,QAAO;AACjD,SAAO;AACR;AA8CA,SAAS,gBAAgB,MAAM,IAAI;AAElC,aAAW,KAAK,MAAM;AACrB,OAAG,CAAC,IAAI,KAAK,CAAC;AAAA,EACf;AACA,MAAI,KAAK,YAAY;AACpB,OAAG,aAAa,CAAC;AACjB,eAAW,KAAK,KAAK,YAAY;AAChC,SAAG,WAAW,CAAC,IAAI,CAAC;AACpB,iBAAW,KAAK,KAAK,WAAW,CAAC,GAAG;AACnC,WAAG,WAAW,CAAC,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;AAAA,MAC3C;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,OAAO,IAAI,OAAO;AAK1B,MAAI,GAAG,KAAK;AAcX,QAAI,GAAG,IAAI,mBAAmB;AAC7B,SAAG,oBAAoB,CAAC;AACxB,sBAAgB,GAAG,IAAI,mBAAmB,GAAG,iBAAiB;AAAA,IAC/D;AACA,QAAI,GAAG,IAAI,iBAAiB;AAC3B,SAAG,kBAAkB,CAAC;AACtB,sBAAgB,GAAG,IAAI,iBAAiB,GAAG,eAAe;AAAA,IAC3D;AACA,QAAI,GAAG,IAAI,gBAAgB;AAC1B,SAAG,iBAAiB,CAAC;AACrB,sBAAgB,GAAG,IAAI,gBAAgB,GAAG,cAAc;AAAA,IACzD;AACA,QAAI,GAAG,IAAI,iBAAiB;AAC3B,SAAG,kBAAkB,CAAC;AACtB,sBAAgB,GAAG,IAAI,iBAAiB,GAAG,eAAe;AAAA,IAC3D;AAEA,OAAG,aAAa;AAChB,OAAG,UAAU;AACb,OAAG,SAAS;AACZ,QAAI,GAAG,IAAI,SAAS;AACnB,iBAAW,KAAK,GAAG,IAAI,SAAS;AAC/B,cAAM,IAAI,GAAG,IAAI,QAAQ,CAAC;AAC1B,YAAI,EAAE,QAAe,IAAI,UAAU;AAElC,iBAAO,GAAG;AACV,cAAI,EAAE,QAAQ;AACb,eAAG,SAAS;AACZ,eAAG,UAAU;AAAA,UACd;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD,WAAW,GAAG,UAAU;AACvB,QAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK;AAGxB,SAAG,aAAa;AAAA,IACjB;AAAA,EACD;AAMA,6BAA2B,IAAI,KAAK;AAEpC,MAAI,GAAG,cAAc;AAGpB,OAAG,YAAY;AAAA,MACd,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ,GAAG,MAAM,OAAO,GAAG;AAAA,IAC5B;AACA,QAAI,GAAG,aAAa,WAAW;AAE9B,SAAG,UAAU,QAAQ,GAAG,aAAa,UAAU;AAAA,IAChD;AAEA,OAAG,UAAU,QAAQ,GAAG,UAAU,OAAO,OAAO,GAAG;AACnD,OAAG,UAAU,OAAO,GAAG,UAAU,OAC/B,OAAO,MAAM,EACb,KAAK,aAAa,EAAE,EACpB,KAAK,eAAe,KAAK,EACzB,KAAK,KAAK,GAAG;AACf,OAAG,UAAU,OAAO,GAAG,UAAU,OAC/B,OAAO,MAAM,EACb,KAAK,aAAa,EAAE,EACpB,KAAK,eAAe,KAAK,EACzB,KAAK,KAAK,GAAG;AACf,OAAG,UAAU,OAAO,GAAG,UAAU,OAC/B,OAAO,MAAM,EACb,KAAK,aAAa,EAAE,EACpB,KAAK,eAAe,KAAK,EACzB,KAAK,KAAK,GAAG;AAAA,EAChB,OAAO;AAGN,OAAG,iBAAiB,CAAC;AAIrB,QAAI,GAAG,sBAAsB,QAAW;AACvC,SAAG,qBAAqB;AAAA,IACzB;AACA,QAAI,GAAG,yBAAyB,QAAW;AAC1C,SAAG,wBAAwB;AAAA,IAC5B;AACA,QAAI,GAAG,qBAAqB,QAAW;AACtC,SAAG,oBAAoB;AAAA,IACxB;AAAA,EACD;AAGA,MAAI,CAAC,GAAG,gBAAgB,CAAC,GAAG,WAAW,CAAC,GAAG,QAAQ;AAClD,QAAI,GAAG,UAAU;AAChB,SAAG,UAAU;AACb,SAAG,SAAS;AAAA,IACb,OAAO;AACN,SAAG,UAAU;AACb,SAAG,SAAS;AACZ,UAAI,GAAG,cAAc;AACpB,WAAG,UAAU;AACb,WAAG,SAAS;AAAA,MACb;AAAA,IACD;AAAA,EACD;AAEA,KAAG,OAAO,IAAW,KAAK,EAAE,SAAS,MAAM,CAAC;AAE5C,MAAI,GAAG,cAAc;AAEpB,QAAI,CAAC,GAAG,OAAQ,IAAG,SAAS;AAC5B,QAAI,CAAC,GAAG,OAAO;AACd,SAAG,QAAQ;AACX,SAAG,QAAQ;AACX,SAAG,QAAQ;AAAA,IACZ;AACA,QAAI,CAAC,GAAG,UAAW,IAAG,YAAY;AAClC,QAAI,CAAC,GAAG,WAAY,IAAG,aAAa;AACpC,QAAI,CAAC,GAAG,YAAa,IAAG,cAAc;AAEtC,QAAI,CAAC,OAAO,UAAU,GAAG,kBAAkB,EAAG,IAAG,qBAAqB;AACtE,QAAI,CAAC,OAAO,UAAU,GAAG,mBAAmB,EAAG,IAAG,sBAAsB;AACxE,QAAI,CAAC,GAAG,mBAAoB,IAAG,qBAAqB;AAEpD,QAAI,GAAG,SAAS;AACf,SAAG,OAAO,GAAG;AACb,SAAG,QAAQ,KAAK,GAAG,IAAI;AACvB,aAAO,GAAG;AAAA,IACX,OAAO;AACN,SAAG,QAAQ,MAAM,GAAG,OAAO,GAAG,OAAO,OAAO,MAAM,GAAG,aAAa,IAAI;AAAA,IACvE;AAGA,OAAG,oBAAoB,GAAG,QAAQ,KAAK,EAAE,QAAQ,EAAE;AACnD,UAAM,UAAU;AAEhB,OAAG,UAAU,GAAG,OAAO,OAAO,GAAG;AACjC,OAAG,QAAQ,GAAG,OAAO,OAAO,GAAG;AAAA,EAChC,OAAO;AAEN,QAAI,GAAG,OAAO,GAAG,IAAI,WAAW,GAAG,IAAI,QAAQ,OAAO;AACrD,SAAG,eAAe,MAAM,iBAAiB,IAAI,MAAM,aAAa,EAAE,KAAK,GAAG,IAAI,QAAQ,KAAK;AAC3F,UAAI,GAAG,IAAI,QAAQ,MAAM;AACxB,WAAG,aAAa,GAAG,SAAS,MAAM;AACjC,iBAAO,KAAK,GAAG,IAAI,QAAQ,IAAI;AAAA,QAChC,CAAC;AAAA,MACF;AAAA,IACD;AACA,OAAG,WAAW,GAAG,MAAM,OAAO,GAAG;AACjC,OAAG,cAAc,GAAG,OAAO,OAAO,GAAG;AACrC,OAAG,mBAAmB,GAAG,MAAM,OAAO,GAAG;AACzC,OAAG,aAAa,GAAG,OAAO,OAAO,GAAG;AACpC,OAAG,kBAAkB,GAAG,MAAM,OAAO,GAAG;AACxC,OAAG,UAAU,GAAG,OAAO,OAAO,GAAG;AACjC,OAAG,YAAY,GAAG,OAAO,OAAO,GAAG;AAAA,EACpC;AAEA,KAAG,WAAW,CAAC;AACf;AACC,UAAM,IAAI,IAAM,GAAG,SAAS;AAC5B,OAAG,SAAS,OAAO;AAAA,MAClB,KAAK,GAAG;AAAA,MACR,GAAG,EAAE;AAAA,MACL,GAAG,EAAE;AAAA,MACL,GAAG,EAAE;AAAA,IACN;AACA,WAAO,GAAG;AAAA,EACX;AACA;AACC,UAAM,IAAI,IAAM,GAAG,SAAS;AAC5B,OAAG,SAAS,OAAO;AAAA,MAClB,KAAK,GAAG;AAAA,MACR,GAAG,EAAE;AAAA,MACL,GAAG,EAAE;AAAA,MACL,GAAG,EAAE;AAAA,IACN;AACA,WAAO,GAAG;AAAA,EACX;AACA;AACC,UAAM,IAAI,IAAM,GAAG,QAAQ;AAC3B,OAAG,SAAS,MAAM;AAAA,MACjB,KAAK,GAAG;AAAA,MACR,GAAG,EAAE;AAAA,MACL,GAAG,EAAE;AAAA,MACL,GAAG,EAAE;AAAA,IACN;AACA,WAAO,GAAG;AAAA,EACX;AAEA,MAAI,GAAG,UAAU;AAEhB,QAAI,GAAG,eAAe,OAAW,IAAG,cAAc;AAClD,QAAI,GAAG,sBAAsB,OAAW,IAAG,qBAAqB;AAChE,QAAI,GAAG,sBAAsB,OAAW,IAAG,qBAAqB;AAChE,QAAI,GAAG,uBAAuB,OAAW,IAAG,sBAAsB;AAAA,EACnE;AAGA,KAAG,gBAAgB,MAAM,mBAAmB,EAAE,EAAE,GAAG,SAAS,MAAM;AACjE,gBAAY,IAAI,KAAK;AAAA,EACtB,CAAC;AAED,gBAAc,OAAO,EAAE;AAKvB,MAAI,gBAAgB;AACpB,MAAI,GAAG,UAAU;AAEhB,QAAI,GAAG,qBAAqB;AAC3B,sBAAgB;AAChB,UAAI,CAAC,GAAG,MAAO,IAAG,QAAQ,CAAC;AAC3B,SAAG,MAAM,WAAW,GAAG,oBAAoB;AAAA,IAC5C;AAAA,EACD,OAAO;AAEN,QAAI,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,qBAAqB;AACpD,sBAAgB;AAChB,YAAM,KAAK,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,QAAQ,EAAE,oBAAoB,QAAQ;AAClF,UAAI,GAAG,SAAS,GAAG,MAAM,YAAY;AAEpC,WAAG,aAAa,GAAG,MAAM;AAAA,MAC1B;AACA,SAAG,QAAQ;AAAA,IACZ;AAAA,EACD;AACA,MAAI,eAAe;AAKlB,QAAI,CAAC,GAAG,MAAO,IAAG,QAAQ,CAAC;AAE3B,QAAI,CAAC,GAAG,MAAM,OAAO;AAOpB,SAAG,MAAM,QAAQ,CAAC;AAAA,IACnB;AAEA,QAAI,CAAC,GAAG,MAAM,QAAQ;AACrB,MAAe,YAAY,GAAG,KAAK;AAAA,IACpC;AAAA,EACD;AAGD;AAEA,SAAS,2BAA2B,IAAI,OAAO;AAa9C,QAAM,IAAI,GAAG,WAAW,KAAK,GAAG;AAEhC,MAAI,CAAC,EAAG;AAER,MAAI,EAAE,cAAc;AAcnB,OAAG,eAAe,EAAE;AAAA,EACrB,WAAW,EAAE,WAAW;AACvB,OAAG,YAAY,EAAE;AAAA,EAClB;AAGA,KAAG,eAAe,EAAE;AACpB,KAAG,eAAe,EAAE;AAEpB,MAAI,EAAE,QAAQ;AACb,OAAG,UAAU;AACb,OAAG,SAAS;AAAA,EACb,WAAW,EAAE,SAAS;AACrB,OAAG,UAAU;AACb,OAAG,SAAS;AAAA,EACb;AAEA,MAAI,EAAE,iBAAiB;AACtB,QAAI,CAAC,GAAG,gBAAiB,IAAG,kBAAkB,CAAC;AAC/C,QAAI,CAAC,GAAG,gBAAgB,WAAY,IAAG,gBAAgB,aAAa,CAAC;AACrE,eAAW,KAAK,EAAE,iBAAiB;AAClC,YAAM,OAAO,EAAE,gBAAgB,CAAC;AAChC,UAAI,CAAC,GAAG,gBAAgB,WAAW,CAAC,GAAG;AAEtC,WAAG,gBAAgB,WAAW,CAAC,IAAI;AAAA,UAClC,OAAO;AAAA,QACR;AAAA,MACD;AACA,YAAM,OAAO,GAAG,gBAAgB,WAAW,CAAC;AAC5C,UAAI,CAAC,KAAK,aAAc,MAAK,eAAe,oBAAI,IAAI;AACpD,UAAI,KAAK,cAAc;AACtB,mBAAW,KAAK,KAAK,aAAc,MAAK,aAAa,IAAI,CAAC;AAAA,MAC3D;AAAA,IACD;AAAA,EACD;AAEA,KAAG,gBAAgB;AAAA,IAClB,cAAc,oBAAI,IAAI;AAAA,EACvB;AACA,MAAI,EAAE,KAAK;AACV,QAAI,EAAE,IAAI,aAAa;AACtB,iBAAW,KAAK,EAAE,IAAI,YAAa,IAAG,cAAc,aAAa,IAAI,CAAC;AAAA,IACvE;AAAA,EACD;AACA,MAAI,EAAE,KAAK;AACV,QAAI,EAAE,IAAI,OAAQ,IAAG,cAAc,aAAa,IAAW,KAAK;AAChE,QAAI,OAAO,UAAU,EAAE,IAAI,gBAAgB,EAAG,IAAG,qBAAqB,EAAE,IAAI;AAAA,EAC7E;AACA,MAAI,EAAE,KAAK;AACV,QAAI,EAAE,IAAI,OAAQ,IAAG,cAAc,aAAa,IAAW,KAAK;AAChE,QAAI,OAAO,UAAU,EAAE,IAAI,gBAAgB,EAAG,IAAG,sBAAsB,EAAE,IAAI;AAAA,EAC9E;AACA,MAAI,EAAE,QAAQ;AACb,QAAI,EAAE,OAAO,OAAQ,IAAG,cAAc,aAAa,IAAW,WAAW;AAAA,EAC1E;AACA,MAAI,EAAE,IAAI;AACT,QAAI,EAAE,GAAG,OAAQ,IAAG,cAAc,aAAa,IAAW,IAAI;AAAA,EAC/D;AACA,MAAI,EAAE,KAAK;AACV,QAAI,EAAE,IAAI,OAAQ,IAAG,cAAc,aAAa,IAAW,KAAK;AAAA,EACjE;AACA,MAAI,EAAE,qBAAqB;AAC1B,QAAI,CAAC,GAAG,MAAO,IAAG,QAAQ,CAAC;AAC3B,OAAG,MAAM,aAAa,EAAE;AAAA,EACzB;AACD;AAEA,SAAS,iBAAiB,IAAI,OAAO;AACpC,KAAG,YAAY,KAAK;AACpB,MAAI,GAAG,aAAa,SAAS,SAAS,GAAG;AACxC,OAAG,UAAU;AACb,OAAG,SAAS;AAAA,EACb,WAAW,GAAG,aAAa,SAAS,SAAS,GAAG;AAC/C,OAAG,UAAU;AACb,OAAG,SAAS;AAAA,EACb;AAEA,MAAI,CAAC,GAAG,OAAO;AAEd;AAAA,EACD;AAEA,sBAAoB,IAAI,KAAK;AAC7B,QAAM,gBAAgB;AACtB,QAAM,UAAU;AACjB;AAEA,SAAS,YAAY,IAAI,OAAO;AAC/B,KAAG,YAAY,MAAM;AAErB,+BAA6B,IAAI,KAAK;AAEtC,uBAAqB,IAAI,KAAK;AAE9B,yBAAuB,IAAI,KAAK;AAEhC,uBAAqB,IAAI,KAAK;AAE9B,gCAA8B,IAAI,KAAK;AAEvC,mCAAiC,IAAI,KAAK;AAE1C,qBAAmB,IAAI,KAAK;AAE5B,KAAG,YAAY,UAAU,GAAG,cAAc,KAAK,CAAC;AACjD;AAEA,SAAS,qBAAqB,IAAI,OAAO;AACxC,MAAI,GAAG,aAAc;AACrB,QAAM,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AACxE,MAAI,GAAG,WAAW;AACjB,QACE,OAAO,MAAM,EACb,MAAM,WAAW,GAAG,EACpB,MAAM,iBAAiB,MAAM,EAC7B,KAAK,mBAAmB,GAAG,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,QAAQ,QAAQ,CAAC,IAAI,UAAU;AAC7F,QACE,OAAO,QAAQ,EACf,KAAK,MAAM,EACX,GAAG,SAAS,MAAM;AAClB,0BAAoB,IAAI,KAAK;AAAA,IAC9B,CAAC;AACF,QACE,OAAO,QAAQ,EACf,KAAK,QAAQ,EACb,GAAG,SAAS,MAAM;AAClB,SAAG,YAAY,KAAK;AACpB,aAAO,GAAG;AACV,aAAO,IAAI,KAAK;AAAA,IACjB,CAAC;AACF;AAAA,EACD;AAEA,MACE,OAAO,QAAQ,EACf,KAAK,mBAAmB,EACxB,GAAG,SAAS,MAAM;AAClB,wBAAoB,IAAI,KAAK;AAAA,EAC9B,CAAC;AAKF,MAAI,GAAG,YAAa,GAAG,OAAO,GAAG,IAAI,qBAAsB;AAC1D,QACE,OAAO,QAAQ,EACf,MAAM,eAAe,MAAM,EAC3B,KAAK,GAAG,gBAAgB,oCAAoC,kBAAkB,EAC9E,GAAG,SAAS,MAAM;AAClB,SAAG,gBAAgB,CAAC,GAAG;AACvB,SAAG,YAAY,KAAK;AACpB,aAAO,IAAI,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AACD;AAEA,SAAS,oBAAoB,IAAI,OAAO;AAEvC,KAAG,YAAY,MAAM;AACrB,QAAM,IAAI,GAAG,YAAY,EAAE,OAAO,KAAK;AACvC,QAAM,KAAK,EACT,OAAO,UAAU,EACjB,KAAK,eAAe,0FAA0F;AAChH,MAAI,GAAG,WAAW;AACjB,UAAM,MAAM,CAAC;AACb,eAAW,KAAK,GAAG,WAAW;AAC7B,iBAAW,KAAK,EAAE,SAAS;AAC1B,YAAI,KAAK,IAAI,MAAM,EAAE,IAAI;AAAA,MAC1B;AAAA,IACD;AACA,OAAG,SAAS,SAAS,IAAI,KAAK,IAAI,CAAC,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,UAAU,OAAO;AAAA,EACrF,OAAO;AACN,OAAG,MAAM,SAAS,OAAO,EAAE,MAAM,UAAU,OAAO;AAAA,EACnD;AACA,IAAE,OAAO,QAAQ,EACf,KAAK,QAAQ,EACb,MAAM,WAAW,OAAO,EACxB,GAAG,SAAS,MAAM;AAClB,UAAM,MAAM,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI;AAClD,QAAI,IAAI,UAAU,EAAG;AACrB,UAAM,MAAM,oBAAI,IAAI;AACpB,UAAM,eAAe,CAAC;AACtB,eAAW,QAAQ,KAAK;AACvB,YAAM,CAAC,QAAQ,KAAK,IAAI,KAAK,MAAM,QAAQ;AAC3C,UAAI,CAAC,OAAQ;AACb,UAAI,CAAC,OAAO;AACX,qBAAa,KAAK,MAAM;AAAA,MACzB,OAAO;AACN,YAAI,CAAC,IAAI,IAAI,KAAK,EAAG,KAAI,IAAI,OAAO,CAAC,CAAC;AACtC,YAAI,IAAI,KAAK,EAAE,KAAK,MAAM;AAAA,MAC3B;AAAA,IACD;AACA,OAAG,YAAY,CAAC;AAChB,eAAW,CAAC,MAAM,OAAO,KAAK,KAAK;AAClC,SAAG,UAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,IACpC;AACA,QAAI,aAAa,QAAQ;AACxB,YAAM,IAAI,EAAE,SAAS,aAAa;AAElC,UAAI,IAAI,MAAM;AACb,UAAE,OAAO;AAAA,MACV;AACA,SAAG,UAAU,KAAK,CAAC;AAAA,IACpB;AACA,OAAG,YAAY,KAAK;AACpB,WAAO,IAAI,KAAK;AAAA,EACjB,CAAC;AACH;AAEA,SAAS,iCAAiC,IAAI,OAAO;AAKpD,MAAI,CAAC,GAAG,aAAc;AAEtB,QAAM,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AAExE,MAAI,CAAC,GAAG,YAAY,GAAG,SAAS,SAAS,GAAG;AAE3C,QAAI,MAAM,WAAW,GAAG,EAAE,KAAK,0CAA0C;AACzE;AAAA,EACD;AAEA,QAAM,KAAK,KAAK,OAAO;AACvB,MACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,KAAK,MAAM,EAAE,EACb,SAAS,WAAW,GAAG,UAAU,KAAK,EACtC,GAAG,UAAU,CAAAI,WAAS;AACtB,OAAG,UAAU,QAAQA,OAAM,OAAO;AAClC,wBAAoB,IAAI,KAAK;AAC7B,UAAM,gBAAgB;AAAA,EACvB,CAAC;AACF,MAAI,OAAO,OAAO,EAAE,KAAK,OAAO,EAAE,EAAE,KAAK,yCAAyC;AACnF;AAEA,SAAS,mBAAmB,IAAI,OAAO;AACtC,MAAI,GAAG,WAAY;AAEnB,QAAM,SAAS,GAAG,YAAY;AAyB9B;AACC,UAAM,MAAM,OAAO,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AAC9D,QAAI,OAAO,MAAM,EAAE,KAAK,8BAA8B;AACtD,QACE,OAAO,OAAO,EACd,SAAS,SAAS,GAAG,eAAe,CAAC,EACrC,KAAK,QAAQ,QAAQ,EACrB,MAAM,SAAS,MAAM,EACrB,GAAG,SAAS,CAAAA,WAAS;AACrB,UAAIA,OAAM,QAAQ,WAAWA,OAAM,QAAQ,cAAe;AAC1D,UAAI,IAAI,OAAO,WAAWA,OAAM,OAAO,KAAK;AAC5C,UAAI,CAAC,KAAK,IAAI,GAAG;AAEhB,YAAI;AAAA,MACL;AACA,UAAI,KAAK,GAAG;AACX,YAAI,GAAG,aAAa;AAEnB,aAAG,cAAc;AACjB,iBAAO,IAAI,KAAK;AAAA,QACjB,OAAO;AAAA,QAEP;AACA;AAAA,MACD;AAEA,UAAI,GAAG,aAAa;AAEnB,YAAI,GAAG,eAAe,GAAG;AAAA,QAEzB,OAAO;AAEN,aAAG,cAAc;AACjB,iBAAO,IAAI,KAAK;AAAA,QACjB;AAAA,MACD,OAAO;AAEN,WAAG,cAAc;AACjB,eAAO,IAAI,KAAK;AAAA,MACjB;AAAA,IACD,CAAC;AACF,QACE,OAAO,KAAK,EACZ,MAAM,aAAa,MAAM,EACzB,MAAM,SAAS,SAAS,EACxB;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAGA;AACC,UAAM,MAAM,OAAO,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AAC9D,QAAI,OAAO,MAAM,EAAE,KAAK,8BAA8B;AACtD,QACE,OAAO,OAAO,EACd,SAAS,SAAS,GAAG,sBAAsB,CAAC,EAC5C,KAAK,QAAQ,QAAQ,EACrB,MAAM,SAAS,MAAM,EACrB,GAAG,SAAS,CAAAA,WAAS;AACrB,UAAIA,OAAM,QAAQ,WAAWA,OAAM,QAAQ,cAAe;AAC1D,UAAI,IAAI,OAAO,SAASA,OAAM,OAAO,KAAK;AAC1C,UAAI,CAAC,KAAK,IAAI,GAAG;AAEhB,YAAI;AAAA,MACL;AACA,UAAI,KAAK,GAAG;AACX,YAAI,GAAG,oBAAoB;AAE1B,aAAG,qBAAqB;AACxB,iBAAO,IAAI,KAAK;AAAA,QACjB,OAAO;AAAA,QAEP;AACA;AAAA,MACD;AAEA,UAAI,GAAG,oBAAoB;AAE1B,YAAI,GAAG,sBAAsB,GAAG;AAAA,QAEhC,OAAO;AAEN,aAAG,qBAAqB;AACxB,iBAAO,IAAI,KAAK;AAAA,QACjB;AAAA,MACD,OAAO;AAEN,WAAG,qBAAqB;AACxB,eAAO,IAAI,KAAK;AAAA,MACjB;AAAA,IACD,CAAC;AACF,QAAI,OAAO,MAAM,EAAE,KAAK,IAAI;AAC5B,QACE,OAAO,KAAK,EACZ,MAAM,aAAa,MAAM,EACzB,MAAM,SAAS,SAAS,EACxB,KAAK,yGAAyG;AAAA,EACjH;AAGA;AACC,UAAM,MAAM,OAAO,OAAO,KAAK;AAC/B,QAAI,OAAO,MAAM,EAAE,KAAK,wBAAwB;AAChD,QACE,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,SAAS,SAAS,GAAG,SAAS,KAAK,GAAG,EACtC,GAAG,UAAU,CAAAA,WAAS;AACtB,SAAG,SAAS,KAAK,MAAMA,OAAM,OAAO;AACpC,YAAM,IAAI,IAAM,GAAG,SAAS,KAAK,GAAG;AACpC,SAAG,SAAS,KAAK,IAAI,EAAE;AACvB,SAAG,SAAS,KAAK,IAAI,EAAE;AACvB,SAAG,SAAS,KAAK,IAAI,EAAE;AACvB,SAAG,SAAS,UAAU,UAAU,KAAK,cAAc,GAAG,SAAS,KAAK,GAAG;AACvE,UAAI,GAAG,cAAc;AACpB,4BAAoB,IAAI,KAAK;AAAA,MAC9B,OAAO;AACN,4BAAoB,IAAI,KAAK;AAAA,MAC9B;AAAA,IACD,CAAC;AACF,QAAI,OAAO,MAAM,EAAE,KAAK,wBAAwB;AAChD,QACE,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,SAAS,SAAS,GAAG,SAAS,KAAK,GAAG,EACtC,GAAG,UAAU,CAAAA,WAAS;AACtB,SAAG,SAAS,KAAK,MAAMA,OAAM,OAAO;AACpC,YAAM,IAAI,IAAM,GAAG,SAAS,KAAK,GAAG;AACpC,SAAG,SAAS,KAAK,IAAI,EAAE;AACvB,SAAG,SAAS,KAAK,IAAI,EAAE;AACvB,SAAG,SAAS,KAAK,IAAI,EAAE;AACvB,SAAG,SAAS,UAAU,UAAU,KAAK,cAAc,GAAG,SAAS,KAAK,GAAG;AACvE,UAAI,GAAG,cAAc;AACpB,4BAAoB,IAAI,KAAK;AAAA,MAC9B,OAAO;AACN,4BAAoB,IAAI,KAAK;AAAA,MAC9B;AAAA,IACD,CAAC;AAAA,EACH;AAEA,MAAI,GAAG,SAAS,WAAW;AAC1B,WAAO,OAAO,IAAI,EAAE,MAAM,UAAU,MAAM;AAG1C;AACC,YAAM,MAAM,OAAO,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AAC9D,UAAI,OAAO,MAAM,EAAE,KAAK,2BAA2B;AACnD,UACE,OAAO,OAAO,EACd,SAAS,SAAS,GAAG,sBAAsB,CAAC,EAC5C,KAAK,QAAQ,QAAQ,EACrB,MAAM,SAAS,MAAM,EACrB,GAAG,SAAS,CAAAA,WAAS;AACrB,YAAIA,OAAM,QAAQ,WAAWA,OAAM,QAAQ,cAAe;AAC1D,YAAI,IAAI,OAAO,WAAWA,OAAM,OAAO,KAAK;AAC5C,YAAI,CAAC,KAAK,IAAI,GAAG;AAEhB,cAAI;AAAA,QACL;AACA,YAAI,KAAK,GAAG;AACX,cAAI,GAAG,oBAAoB;AAE1B,eAAG,qBAAqB;AACxB,mBAAO,IAAI,KAAK;AAAA,UACjB,OAAO;AAAA,UAEP;AACA;AAAA,QACD;AAEA,YAAI,GAAG,oBAAoB;AAE1B,cAAI,GAAG,sBAAsB,GAAG;AAAA,UAEhC,OAAO;AAEN,eAAG,qBAAqB;AACxB,mBAAO,IAAI,KAAK;AAAA,UACjB;AAAA,QACD,OAAO;AAEN,aAAG,qBAAqB;AACxB,iBAAO,IAAI,KAAK;AAAA,QACjB;AAAA,MACD,CAAC;AACF,UACE,OAAO,KAAK,EACZ,MAAM,aAAa,MAAM,EACzB,MAAM,SAAS,SAAS,EACxB,KAAK,kGAAkG;AAAA,IAC1G;AAGA;AACC,YAAM,MAAM,OAAO,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AAC9D,UAAI,OAAO,MAAM,EAAE,KAAK,8BAA8B;AACtD,UACE,OAAO,OAAO,EACd,SAAS,SAAS,GAAG,uBAAuB,CAAC,EAC7C,KAAK,QAAQ,QAAQ,EACrB,MAAM,SAAS,MAAM,EACrB,GAAG,SAAS,CAAAA,WAAS;AACrB,YAAIA,OAAM,QAAQ,WAAWA,OAAM,QAAQ,cAAe;AAC1D,YAAI,IAAI,OAAO,SAASA,OAAM,OAAO,KAAK;AAC1C,YAAI,CAAC,KAAK,IAAI,GAAG;AAEhB,cAAI;AAAA,QACL;AACA,YAAI,KAAK,GAAG;AACX,cAAI,GAAG,qBAAqB;AAE3B,eAAG,sBAAsB;AACzB,mBAAO,IAAI,KAAK;AAAA,UACjB,OAAO;AAAA,UAEP;AACA;AAAA,QACD;AAEA,YAAI,GAAG,qBAAqB;AAE3B,cAAI,GAAG,uBAAuB,GAAG;AAAA,UAEjC,OAAO;AAEN,eAAG,sBAAsB;AACzB,mBAAO,IAAI,KAAK;AAAA,UACjB;AAAA,QACD,OAAO;AAEN,aAAG,sBAAsB;AACzB,iBAAO,IAAI,KAAK;AAAA,QACjB;AAAA,MACD,CAAC;AACF,UAAI,OAAO,MAAM,EAAE,KAAK,IAAI;AAC5B,UACE,OAAO,KAAK,EACZ,MAAM,aAAa,MAAM,EACzB,MAAM,SAAS,SAAS,EACxB,KAAK,yGAAyG;AAAA,IACjH;AAGA;AACC,YAAM,MAAM,OAAO,OAAO,KAAK,EAAE,MAAM,iBAAiB,KAAK;AAC7D,UAAI,OAAO,MAAM,EAAE,KAAK,iBAAiB;AACzC,UACE,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,SAAS,SAAS,GAAG,SAAS,IAAI,GAAG,EACrC,GAAG,UAAU,CAAAA,WAAS;AACtB,WAAG,SAAS,IAAI,MAAMA,OAAM,OAAO;AACnC,cAAM,IAAI,IAAM,GAAG,SAAS,IAAI,GAAG;AACnC,WAAG,SAAS,IAAI,IAAI,EAAE;AACtB,WAAG,SAAS,IAAI,IAAI,EAAE;AACtB,WAAG,SAAS,IAAI,IAAI,EAAE;AACtB,WAAG,SAAS,UAAU,SAAS,KAAK,cAAc,GAAG,SAAS,IAAI,GAAG;AACrE,YAAI,GAAG,cAAc;AACpB,8BAAoB,IAAI,KAAK;AAAA,QAC9B,OAAO;AACN,8BAAoB,IAAI,KAAK;AAAA,QAC9B;AAAA,MACD,CAAC;AAAA,IACH;AAAA,EACD;AAGD;AAEA,SAAS,qBAAqB,IAAI,OAAO;AAExC,MAAI,GAAG,aAAc;AAErB,QAAM,MAAM,GAAG,YAAY,EACzB,OAAO,KAAK,EACZ,MAAM,cAAc,SAAS,EAC7B,MAAM,iBAAiB,MAAM,EAC7B,MAAM,WAAW,MAAM;AAEzB,QAAM,MAAM,KAAK,OAAO,EAAE,SAAS;AACnC,QAAM,MAAM,KAAK,OAAO,EAAE,SAAS;AACnC,QAAM,OAAO,KAAK,OAAO,EAAE,SAAS;AACpC,QAAM,OAAO,IAAI,OAAO,KAAK,EAAE,MAAM,iBAAiB,KAAK;AAC3D,KAAG,eAAe,KAChB,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM,GAAG,EACd,KAAK,QAAQ,IAAI,EACjB,SAAS,WAAW,GAAG,OAAO,EAC9B,GAAG,UAAU,MAAM;AACnB,qBAAiB,IAAI,KAAK;AAAA,EAC3B,CAAC;AACF,OACE,OAAO,OAAO,EACd,KAAK,OAAO,GAAG,EACf,KAAK,SAAS,aAAa,EAC3B;AAAA,IACA;AAAA,EACD;AAED,QAAM,OAAO,IAAI,OAAO,KAAK;AAC7B,KAAG,eAAe,KAChB,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM,GAAG,EACd,KAAK,QAAQ,IAAI,EACjB,SAAS,WAAW,GAAG,MAAM,EAC7B,GAAG,UAAU,MAAM;AACnB,qBAAiB,IAAI,KAAK;AAAA,EAC3B,CAAC;AACF,OACE,OAAO,OAAO,EACd,KAAK,OAAO,GAAG,EACf,KAAK,SAAS,aAAa,EAC3B,KAAK,wGAAwG;AAChH;AAEA,SAAS,8BAA8B,IAAI,OAAO;AAEjD,MAAI,GAAG,aAAc;AACrB,KAAG,YAAY,EACb,OAAO,KAAK,EACZ,MAAM,iBAAiB,KAAK,EAC5B,KAAK,mCAAmC,EACxC,MAAM,WAAW,GAAG;AAEtB,QAAM,MAAM,GAAG,YAAY,EAAE,OAAO,KAAK,EAAE,MAAM,iBAAiB,MAAM;AACxE;AAEC,UAAM,KAAK,KAAK,OAAO,EAAE,SAAS;AAClC,QACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,KAAK,MAAM,EAAE,EACb,SAAS,WAAW,CAAC,GAAG,kBAAkB,EAC1C,GAAG,UAAU,MAAM;AACnB,SAAG,qBAAqB,CAAC,GAAG;AAC5B,0BAAoB,IAAI,KAAK;AAAA,IAC9B,CAAC;AACF,QAAI,OAAO,OAAO,EAAE,KAAK,OAAO,EAAE,EAAE,KAAK,SAAS,aAAa,EAAE,KAAK,iBAAiB;AAAA,EACxF;AAEA,MAAI,CAAC,GAAG,YAAY;AACnB;AACC,YAAM,KAAK,KAAK,OAAO,EAAE,SAAS;AAClC,UACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,MAAM,eAAe,MAAM,EAC3B,KAAK,MAAM,EAAE,EACb,SAAS,WAAW,CAAC,GAAG,iBAAiB,EACzC,GAAG,UAAU,MAAM;AACnB,WAAG,oBAAoB,CAAC,GAAG;AAC3B,4BAAoB,IAAI,KAAK;AAAA,MAC9B,CAAC;AACF,UAAI,OAAO,OAAO,EAAE,KAAK,OAAO,EAAE,EAAE,KAAK,SAAS,aAAa,EAAE,KAAK,cAAc;AAAA,IACrF;AACA;AACC,YAAM,KAAK,KAAK,OAAO,EAAE,SAAS;AAClC,UACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,MAAM,eAAe,MAAM,EAC3B,KAAK,MAAM,EAAE,EACb,SAAS,WAAW,CAAC,GAAG,qBAAqB,EAC7C,GAAG,UAAU,MAAM;AACnB,WAAG,wBAAwB,CAAC,GAAG;AAC/B,4BAAoB,IAAI,KAAK;AAAA,MAC9B,CAAC;AACF,UAAI,OAAO,OAAO,EAAE,KAAK,OAAO,EAAE,EAAE,KAAK,SAAS,aAAa,EAAE,KAAK,kBAAkB;AAAA,IACzF;AAAA,EACD;AACD;AAIO,SAAS,QAAQ,MAAM,IAAI,OAAO;AAIxC,QAAM,OAAO,MAAM,YAAY,EAAE,EAAE,CAAC;AAEpC,MAAI,KAAK,OAAO,KAAK,OAAO,KAAK,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG;AAC9F,SAAK,KAAK,MAAM,UAAU,KAAK,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE;AAGzE,SAAK,KAAK,MAAM,UAAU,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE;AAAA,EAC5E;AAEA,MAAI,IAAI,MAAM;AACd,aAAW,KAAK,MAAM,WAAW;AAChC,SAAK,EAAE;AACP,QAAI,KAAK,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,GAAG;AACrF,YAAM,KAAK,KAAK,KAAK,IAAI,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,SAAS,EAAE;AAC7D,YAAM,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,SAAS,EAAE;AAC3D,UAAI,KAAK,MAAM,QAAW;AACzB,aAAK,KAAK;AACV,aAAK,KAAK;AAAA,MACX,OAAO;AACN,aAAK,KAAK;AAAA,MACX;AAAA,IACD;AACA,SAAK,EAAE;AAAA,EACR;AAEA,MAAI,KAAK,MAAM,UAAa,MAAM,UAAU,MAAM,UAAiB,OAAO,SAAS;AAGlF,UAAM,MAAM,MAAM,QAAQ,MAAM,UAAU,OAAO,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;AAEjF,QAAI,KAAK,KAAK,KAAK,IAAI;AACtB,UAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAEjC,aAAK,KAAK;AACV,aAAK,KAAK;AACV;AAAA,MACD;AACA,UAAI,KAAK,KAAK,GAAG;AAChB,aAAK,KAAK;AAAA,MACX;AACA,UAAI,KAAK,KAAK,KAAK;AAClB,aAAK,KAAK;AAAA,MACX;AAAA,IACD,WAAW,KAAK,KAAK,KAAK,IAAI;AAE7B,UAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAEjC,aAAK,KAAK;AACV,aAAK,KAAK;AACV;AAAA,MACD;AACA,UAAI,KAAK,KAAK,GAAG;AAChB,aAAK,KAAK;AAAA,MACX;AACA,UAAI,KAAK,KAAK,KAAK;AAClB,aAAK,KAAK;AAAA,MACX;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,SAAS,MAAM,OAAO;AAC9B,QAAM,MAAM,MAAM,UAAU,KAAK,MAAM,KAAK,IAAI;AAChD,aAAW,KAAK,KAAK;AACpB,QAAI,EAAE,QAAQ,QAAW;AAExB,UAAI,EAAE,IAAI,KAAK,EAAE,IAAI,MAAM,OAAO;AACjC,aAAK,IAAI,EAAE;AACX;AAAA,MACD;AAAA,IACD,WAAW,EAAE,eAAe,QAAW;AACtC,WAAK,IAAI,EAAE;AAAA,IACZ;AAAA,EACD;AACD;AAEA,SAAS,YAAY,IAAI,OAAO;AAE/B,MAAI,CAAC,GAAG,SAAU;AAClB,aAAW,KAAK,GAAG,UAAU;AAC5B,QAAI,EAAE,MAAa,YAAY;AAC9B,QAAE,OAAO,EAAE;AACX,QAAE,OAAO,EAAE;AACX,eAAS,GAAG,KAAK;AACjB,UAAI,EAAE,KAAK,QAAW;AACrB,gBAAQ,IAAI,wBAAwB,EAAE,MAAM,MAAM,EAAE,GAAG;AAAA,MACxD,OAAO;AACN,eAAO,EAAE;AACT,eAAO,EAAE;AAAA,MACV;AAAA,IACD,OAAO;AACN,cAAQ,MAAM,yBAAyB;AAAA,IACxC;AAAA,EACD;AACD;AAEA,SAAS,aAAa,IAAI,OAAO;AAMhC,MAAI,CAAC,GAAG,aAAa,GAAG,UAAU,UAAU,GAAG;AAC9C,OAAG,WAAW;AACd;AAAA,EACD;AAEA,QAAM,OAAO,GAAG;AAEhB,KAAG,WAAW,CAAC;AAEf,aAAW,KAAK,MAAM;AACrB,QAAI,EAAE,MAAa,YAAY;AAC9B,MAAO,cAAc,GAAG,KAAK;AAAA,IAC9B,OAAO;AACN,YAAM,gBAAgB,EAAE;AAAA,IACzB;AACA,QAAI,CAAC,GAAG,cAAc,aAAa,IAAI,EAAE,KAAK,GAAG;AAChD,SAAG,SAAS,KAAK,CAAC;AAAA,IACnB;AAAA,EACD;AACD;AAEO,SAAS,SAAS,KAAK;AAI7B,QAAM,SAAS,oBAAI,IAAI;AACvB,aAAW,KAAK,KAAK;AACpB,WAAO;AAAA,MACN,EAAE,SAAS,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,UAAU,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE;AAAA,MACjG;AAAA,IACD;AAAA,EACD;AACA,SAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAC3B;AAEO,SAAS,qBAAqB,IAAI,IAAI;AAO5C,MAAI,CAAC,GAAI,QAAO;AAEhB,MAAI,GAAG,kBAAkB,GAAG,eAAe,KAAK;AAC/C,UAAM,IAAI,GAAG,GAAG,eAAe,GAAG;AAClC,QAAI,GAAG;AACN,UAAI,EAAE,YAAY,KAAK,GAAG,eAAe,SAAU,QAAO;AAAA,IAC3D;AAAA,EACD;AACA,SAAO;AACR;",
|
|
6
|
-
"names": ["err", "table", "tr", "fontsize", "labelspace", "opts", "event", "data", "x", "y", "event", "fontsize", "event", "fontsize", "event", "err", "err", "event", "fontsize", "bins", "tkt", "event"]
|
|
7
|
-
}
|