jbrowse-plugin-graphgenomeviewer 4.0.26 → 4.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +1 -0
  2. package/dist/chunks/{AddTrackWorkflow-WYRVQYH2.js → AddTrackWorkflow-F6FBBEJM.js} +2 -2
  3. package/dist/chunks/GbzBaseSyntenyAdapter-FK6PVNBV.js +8 -0
  4. package/dist/chunks/GbzBaseSyntenyAdapter-FK6PVNBV.js.map +7 -0
  5. package/dist/chunks/{GraphGenomeView-CGV6NQQZ.js → GraphGenomeView-T2FW4BLC.js} +2 -2
  6. package/dist/chunks/{GraphTrackSettingsDialog-IK3Y3PW6.js → GraphTrackSettingsDialog-RQ4O7NUQ.js} +2 -2
  7. package/dist/chunks/{LinearGraphDisplay-ZM6IMPJE.js → LinearGraphDisplay-PIVJ7WE5.js} +2 -2
  8. package/dist/chunks/MinigraphBubbleAdapter-CK7AE4QT.js +2 -0
  9. package/dist/chunks/{MinigraphBubbleAdapter-NRDD66AK.js.map → MinigraphBubbleAdapter-CK7AE4QT.js.map} +1 -1
  10. package/dist/chunks/RgfaTabixAdapter-5MD2ZZ2F.js +3 -0
  11. package/dist/chunks/{RgfaTabixAdapter-NQEERXXI.js.map → RgfaTabixAdapter-5MD2ZZ2F.js.map} +2 -2
  12. package/dist/chunks/chunk-22N3NFQP.js +5 -0
  13. package/dist/chunks/chunk-22N3NFQP.js.map +7 -0
  14. package/dist/chunks/chunk-4T7DPQTR.js +2 -0
  15. package/dist/chunks/chunk-4T7DPQTR.js.map +7 -0
  16. package/dist/chunks/chunk-KDIBFGZM.js +2 -0
  17. package/dist/chunks/{chunk-JAQ2RQAE.js.map → chunk-KDIBFGZM.js.map} +4 -4
  18. package/dist/chunks/chunk-Q36VDIWB.js +2 -0
  19. package/dist/chunks/chunk-Q36VDIWB.js.map +7 -0
  20. package/dist/chunks/chunk-SGA5LPIL.js +2 -0
  21. package/dist/chunks/{chunk-MMGD6ESZ.js.map → chunk-SGA5LPIL.js.map} +1 -1
  22. package/dist/chunks/chunk-T6LGFR3R.js +3 -0
  23. package/dist/chunks/chunk-T6LGFR3R.js.map +7 -0
  24. package/dist/chunks/chunk-X2HKDCRG.js +2 -0
  25. package/dist/chunks/chunk-X2HKDCRG.js.map +7 -0
  26. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +6 -4
  27. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  28. package/package.json +3 -3
  29. package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.test.ts +50 -15
  30. package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.ts +13 -52
  31. package/src/GbzBaseSyntenyAdapter/companion.ts +4 -4
  32. package/src/GbzBaseSyntenyAdapter/configSchema.ts +4 -3
  33. package/src/GraphAddTrackWorkflow/buildTrackConfig.test.ts +60 -0
  34. package/src/GraphAddTrackWorkflow/buildTrackConfig.ts +19 -6
  35. package/src/GraphGenomeView/components/GraphCanvas.tsx +21 -23
  36. package/src/GraphGenomeView/components/ReferenceStripOverlay.tsx +8 -6
  37. package/src/GraphGenomeView/components/TubeMapOverlay.tsx +2 -0
  38. package/src/GraphGenomeView/components/legendStyles.ts +0 -3
  39. package/src/GraphGenomeView/model.test.ts +75 -39
  40. package/src/GraphGenomeView/model.ts +104 -76
  41. package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +34 -0
  42. package/src/LinearGraphDisplay/model.ts +20 -0
  43. package/src/RgfaTabixAdapter/rgfaBed.test.ts +8 -0
  44. package/src/RgfaTabixAdapter/rgfaBed.ts +3 -2
  45. package/src/gaf/gafFile.test.ts +20 -0
  46. package/src/gaf/gafFile.ts +15 -18
  47. package/src/graphTrackDefaults/graphTrackDefaults.test.ts +12 -0
  48. package/src/graphTrackDefaults/index.ts +1 -9
  49. package/src/hoverSync/graphViewHighlights.test.ts +23 -0
  50. package/src/hoverSync/graphViewHighlights.ts +4 -6
  51. package/src/hoverSync/lgvHover.ts +2 -4
  52. package/src/hoverSync/rowWalks.test.ts +58 -0
  53. package/src/hoverSync/rowWalks.ts +44 -0
  54. package/src/isRecord.ts +5 -0
  55. package/src/launchFromGraph/launchFromGraph.test.ts +3 -2
  56. package/src/launchFromGraph/launchFromGraph.ts +34 -8
  57. package/src/launchFromGraph/linearViewTarget.ts +2 -14
  58. package/src/launchFromGraph/syntenyTracks.test.ts +22 -0
  59. package/src/launchFromGraph/syntenyTracks.ts +7 -1
  60. package/src/version.ts +1 -1
  61. package/dist/chunks/GbzBaseSyntenyAdapter-LTKB3OX7.js +0 -8
  62. package/dist/chunks/GbzBaseSyntenyAdapter-LTKB3OX7.js.map +0 -7
  63. package/dist/chunks/MinigraphBubbleAdapter-NRDD66AK.js +0 -2
  64. package/dist/chunks/RgfaTabixAdapter-NQEERXXI.js +0 -3
  65. package/dist/chunks/chunk-33VHHB43.js +0 -2
  66. package/dist/chunks/chunk-33VHHB43.js.map +0 -7
  67. package/dist/chunks/chunk-BIZ6OLP5.js +0 -3
  68. package/dist/chunks/chunk-BIZ6OLP5.js.map +0 -7
  69. package/dist/chunks/chunk-JAQ2RQAE.js +0 -2
  70. package/dist/chunks/chunk-MMGD6ESZ.js +0 -2
  71. package/dist/chunks/chunk-NXI6CVEJ.js +0 -2
  72. package/dist/chunks/chunk-NXI6CVEJ.js.map +0 -7
  73. package/dist/chunks/chunk-QSH263Y6.js +0 -2
  74. package/dist/chunks/chunk-QSH263Y6.js.map +0 -7
  75. package/dist/chunks/chunk-WAW3QC3R.js +0 -2
  76. package/dist/chunks/chunk-WAW3QC3R.js.map +0 -7
  77. package/dist/chunks/chunk-XK7OPCRQ.js +0 -2
  78. package/dist/chunks/chunk-XK7OPCRQ.js.map +0 -7
  79. /package/dist/chunks/{AddTrackWorkflow-WYRVQYH2.js.map → AddTrackWorkflow-F6FBBEJM.js.map} +0 -0
  80. /package/dist/chunks/{GraphGenomeView-CGV6NQQZ.js.map → GraphGenomeView-T2FW4BLC.js.map} +0 -0
  81. /package/dist/chunks/{GraphTrackSettingsDialog-IK3Y3PW6.js.map → GraphTrackSettingsDialog-RQ4O7NUQ.js.map} +0 -0
  82. /package/dist/chunks/{LinearGraphDisplay-ZM6IMPJE.js.map → LinearGraphDisplay-PIVJ7WE5.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import{a as x}from"./chunk-BIZ6OLP5.js";import"./chunk-NXI6CVEJ.js";import"./chunk-UQEPPJEO.js";import"./chunk-SCMIJAAX.js";import"./chunk-FCWXYIFC.js";import"./chunk-MMGD6ESZ.js";import{C as L}from"./chunk-WAW3QC3R.js";import"./chunk-EFVAQ2KM.js";import"./chunk-KULNKXPT.js";import{a as s,b as g,c as v,d as G,e as B}from"./chunk-XEJ47DLD.js";import{b as a}from"./chunk-FY3BTKY4.js";var S=a(g(),1);var m=a(G(),1),n=a(v(),1),C=a(g(),1),P=a(L(),1),o=a(s(),1),I=(0,P.makeStyles)()({paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto",display:"flex",flexDirection:"column",gap:12},row:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8}}),b=(0,C.observer)(function({model:e}){let{classes:r}=I();return e.isLoading?(0,o.jsxs)(n.Paper,{className:r.paper,"data-testid":"graph-genome-loading",children:[(0,o.jsxs)("div",{className:r.row,children:[(0,o.jsx)(m.LoadingEllipses,{variant:"h6",message:e.statusMessage}),(0,o.jsx)(n.Button,{size:"small","data-testid":"graph-genome-cancel",onClick:()=>{e.cancelLoad()},children:"Cancel"})]}),(0,o.jsx)(n.LinearProgress,{variant:"indeterminate"})]}):e.error?(0,o.jsx)(n.Paper,{className:r.paper,children:(0,o.jsx)(m.ErrorBanner,{error:e.error,onReset:()=>{e.retryLoad()}})}):(0,o.jsx)(n.Paper,{className:r.paper,"data-testid":"graph-genome-load-canceled",children:(0,o.jsxs)("div",{className:r.row,children:[(0,o.jsx)(n.Typography,{variant:"h6",children:"Loading canceled"}),(0,o.jsx)(n.Button,{variant:"contained",size:"small","data-testid":"graph-genome-retry",onClick:()=>{e.retryLoad()},children:"Retry"})]})})}),h=b;var M=a(B(),1),N=a(G(),1),i=a(v(),1),w=a(g(),1),E=a(L(),1),t=a(s(),1),k=`H VN:Z:1.0
1
+ import{a as x}from"./chunk-T6LGFR3R.js";import"./chunk-X2HKDCRG.js";import"./chunk-UQEPPJEO.js";import"./chunk-SCMIJAAX.js";import"./chunk-FCWXYIFC.js";import"./chunk-SGA5LPIL.js";import{X as L}from"./chunk-Q36VDIWB.js";import"./chunk-EFVAQ2KM.js";import"./chunk-KULNKXPT.js";import{a as s,b as g,c as v,d as G,e as B}from"./chunk-XEJ47DLD.js";import{b as a}from"./chunk-FY3BTKY4.js";var S=a(g(),1);var m=a(G(),1),n=a(v(),1),C=a(g(),1),P=a(L(),1),o=a(s(),1),I=(0,P.makeStyles)()({paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto",display:"flex",flexDirection:"column",gap:12},row:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8}}),b=(0,C.observer)(function({model:e}){let{classes:r}=I();return e.isLoading?(0,o.jsxs)(n.Paper,{className:r.paper,"data-testid":"graph-genome-loading",children:[(0,o.jsxs)("div",{className:r.row,children:[(0,o.jsx)(m.LoadingEllipses,{variant:"h6",message:e.statusMessage}),(0,o.jsx)(n.Button,{size:"small","data-testid":"graph-genome-cancel",onClick:()=>{e.cancelLoad()},children:"Cancel"})]}),(0,o.jsx)(n.LinearProgress,{variant:"indeterminate"})]}):e.error?(0,o.jsx)(n.Paper,{className:r.paper,children:(0,o.jsx)(m.ErrorBanner,{error:e.error,onReset:()=>{e.retryLoad()}})}):(0,o.jsx)(n.Paper,{className:r.paper,"data-testid":"graph-genome-load-canceled",children:(0,o.jsxs)("div",{className:r.row,children:[(0,o.jsx)(n.Typography,{variant:"h6",children:"Loading canceled"}),(0,o.jsx)(n.Button,{variant:"contained",size:"small","data-testid":"graph-genome-retry",onClick:()=>{e.retryLoad()},children:"Retry"})]})})}),h=b;var M=a(B(),1),N=a(G(),1),i=a(v(),1),w=a(g(),1),E=a(L(),1),t=a(s(),1),k=`H VN:Z:1.0
2
2
  S 1 ACGT
3
3
  S 2 GGCC
4
4
  S 3 TTAA
@@ -7,4 +7,4 @@ L 1 + 2 + 0M
7
7
  L 1 + 3 + 0M
8
8
  L 2 + 4 + 0M
9
9
  L 3 + 4 + 0M`,z=(0,E.makeStyles)()({column:{display:"flex",flexDirection:"column",gap:8},rowEnd:{display:"flex",gap:8,alignItems:"flex-end"},rowCenter:{display:"flex",gap:8,alignItems:"center"},flex1:{flex:1},paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto"},header:{marginBottom:12},footer:{marginTop:12,display:"flex",justifyContent:"flex-end"}}),R=(0,w.observer)(function({model:e}){let{classes:r}=z(),[d,T]=(0,M.useState)("");function y(){d.trim()&&e.loadGFAFromLocation({uri:d,locationType:"UriLocation"})}function A(p){let c=p.target.files?.[0];c&&c.text().then(f=>e.loadGFA(f,c.name)).catch(f=>{e.setError(f)})}return(0,t.jsxs)(i.Paper,{className:r.paper,children:[(0,t.jsx)("div",{className:r.header,children:(0,t.jsx)(i.Typography,{variant:"h6",children:"Load a GFA graph"})}),(0,t.jsxs)("div",{className:r.column,children:[(0,t.jsxs)("div",{className:r.rowCenter,children:[(0,t.jsxs)(i.Button,{variant:"outlined",component:"label",size:"small",children:["Choose file",(0,t.jsx)("input",{type:"file",accept:".gfa,.gfa1,.gfa2",hidden:!0,onChange:p=>{A(p)}})]}),(0,t.jsx)(i.Typography,{variant:"caption",color:"text.secondary",children:"Whole-file GFA; best for small/medium graphs."})]}),(0,t.jsxs)("div",{className:r.rowEnd,children:[(0,t.jsx)(i.TextField,{size:"small",label:"URL",placeholder:"https://example.com/graph.gfa",value:d,onChange:p=>{T(p.target.value)},onKeyDown:p=>{p.key==="Enter"&&y()},className:r.flex1}),(0,t.jsx)(i.Button,{variant:"contained",onClick:()=>{y()},disabled:!d.trim(),children:"Open"})]})]}),(0,t.jsx)("div",{className:r.footer,children:(0,t.jsx)(i.Button,{size:"small",onClick:()=>{e.loadGFA(k,"Example graph")},children:"Load 4-node example"})}),e.error?(0,t.jsx)(N.ErrorBanner,{error:e.error}):null]})}),F=R;var l=a(s(),1),U=(0,S.observer)(function({model:e}){return e.hasGraph?(0,l.jsx)(x,{model:e}):e.canRetryLoad&&(e.error||e.loadCanceled)?(0,l.jsx)(h,{model:e}):(0,l.jsxs)(l.Fragment,{children:[e.isLoading?(0,l.jsx)(h,{model:e}):null,(0,l.jsx)("div",{hidden:e.isLoading,children:(0,l.jsx)(F,{model:e})})]})}),O=U;export{O as default};
10
- //# sourceMappingURL=GraphGenomeView-CGV6NQQZ.js.map
10
+ //# sourceMappingURL=GraphGenomeView-T2FW4BLC.js.map
@@ -1,4 +1,4 @@
1
- import{a as g}from"./chunk-MMGD6ESZ.js";import{C as f}from"./chunk-WAW3QC3R.js";import"./chunk-EFVAQ2KM.js";import"./chunk-KULNKXPT.js";import{a as l,b as m,c as y,e as x}from"./chunk-XEJ47DLD.js";import{b as o}from"./chunk-FY3BTKY4.js";var a=o(y(),1),b=o(m(),1),S=o(f(),1),n=o(l(),1),L=(0,S.makeStyles)()({section:{marginBottom:24},formControl:{minWidth:200}}),w=[{value:0,label:"None"},{value:1,label:"1 hop"},{value:2,label:"2 hops"}],k=(0,b.observer)(function({model:e}){let{classes:t}=L();return(0,n.jsxs)("div",{className:t.section,children:[(0,n.jsxs)(a.FormControl,{className:t.formControl,children:[(0,n.jsx)(a.InputLabel,{children:"Graph context"}),(0,n.jsx)(a.Select,{value:e.subgraphContext,label:"Graph context","data-testid":"graph-context-select",onChange:p=>{e.setSubgraphContext(p.target.value),e.cut()},children:w.map(({value:p,label:u})=>(0,n.jsx)(a.MenuItem,{value:p,children:u},p))})]}),(0,n.jsx)(a.Typography,{variant:"caption",color:"text.secondary",children:"How far the cut follows links out of the region, one hop by default. A detour that leaves the reference before the window and rejoins after it is indexed under its own sequence, so at none its middle is missing and the one bubble draws as two unrelated stubs. Each hop costs a query per off-reference segment already reached."})]})}),v=k;var C=o(x(),1),d=o(y(),1),c=o(m(),1),G=o(f(),1),i=o(l(),1),T=(0,G.makeStyles)()({section:{marginBottom:24}});function M(r){let e=r.split(/[\s,]+/).map(t=>t.trim()).filter(t=>t!=="");return e.length===0?void 0:e}var F=(0,c.observer)(function({model:e}){let[t,p]=(0,C.useState)(e.chosenHaplotypes?.join(", ")??""),u=()=>{let s=M(t)??[];s.join(`
1
+ import{a as g}from"./chunk-SGA5LPIL.js";import{X as f}from"./chunk-Q36VDIWB.js";import"./chunk-EFVAQ2KM.js";import"./chunk-KULNKXPT.js";import{a as l,b as m,c as y,e as x}from"./chunk-XEJ47DLD.js";import{b as o}from"./chunk-FY3BTKY4.js";var a=o(y(),1),b=o(m(),1),S=o(f(),1),n=o(l(),1),L=(0,S.makeStyles)()({section:{marginBottom:24},formControl:{minWidth:200}}),w=[{value:0,label:"None"},{value:1,label:"1 hop"},{value:2,label:"2 hops"}],k=(0,b.observer)(function({model:e}){let{classes:t}=L();return(0,n.jsxs)("div",{className:t.section,children:[(0,n.jsxs)(a.FormControl,{className:t.formControl,children:[(0,n.jsx)(a.InputLabel,{children:"Graph context"}),(0,n.jsx)(a.Select,{value:e.subgraphContext,label:"Graph context","data-testid":"graph-context-select",onChange:p=>{e.setSubgraphContext(p.target.value),e.cut()},children:w.map(({value:p,label:u})=>(0,n.jsx)(a.MenuItem,{value:p,children:u},p))})]}),(0,n.jsx)(a.Typography,{variant:"caption",color:"text.secondary",children:"How far the cut follows links out of the region, one hop by default. A detour that leaves the reference before the window and rejoins after it is indexed under its own sequence, so at none its middle is missing and the one bubble draws as two unrelated stubs. Each hop costs a query per off-reference segment already reached."})]})}),v=k;var C=o(x(),1),d=o(y(),1),c=o(m(),1),G=o(f(),1),i=o(l(),1),T=(0,G.makeStyles)()({section:{marginBottom:24}});function M(r){let e=r.split(/[\s,]+/).map(t=>t.trim()).filter(t=>t!=="");return e.length===0?void 0:e}var F=(0,c.observer)(function({model:e}){let[t,p]=(0,C.useState)(e.chosenHaplotypes?.join(", ")??""),u=()=>{let s=M(t)??[];s.join(`
2
2
  `)===(e.chosenHaplotypes??[]).join(`
3
3
  `)||(e.setSubgraphHaplotypes(s),e.cut())};return(0,i.jsx)(d.TextField,{fullWidth:!0,label:"Haplotypes",placeholder:"every haplotype",value:t,slotProps:{htmlInput:{"data-testid":"graph-haplotypes-field"}},onChange:s=>{p(s.target.value)},onBlur:()=>{u()},onKeyDown:s=>{s.key==="Enter"&&u()}})}),N=(0,c.observer)(function({model:e}){let{classes:t}=T();return e.adapterConfig.type==="GbzBaseSyntenyAdapter"?(0,i.jsxs)("div",{className:t.section,children:[(0,i.jsx)(F,{model:e},e.chosenHaplotypes?.join(",")??""),(0,i.jsx)(d.Typography,{variant:"caption",color:"text.secondary",children:"The haplotypes the cut is for, as lane assembly names or PanSN prefixes (HG002#1, or HG002 for both), separated by commas. The cut keeps their walks and the nodes those walks visit, with the reference. Empty is every haplotype."})]}):null}),H=N;var h=o(l(),1);function B({model:r,open:e,onClose:t}){return(0,h.jsxs)(g,{model:r,open:e,onClose:t,children:[(0,h.jsx)(v,{model:r}),(0,h.jsx)(H,{model:r})]})}export{B as default};
4
- //# sourceMappingURL=GraphTrackSettingsDialog-IK3Y3PW6.js.map
4
+ //# sourceMappingURL=GraphTrackSettingsDialog-RQ4O7NUQ.js.map
@@ -1,2 +1,2 @@
1
- import{a as i}from"./chunk-BIZ6OLP5.js";import"./chunk-NXI6CVEJ.js";import"./chunk-UQEPPJEO.js";import"./chunk-SCMIJAAX.js";import"./chunk-FCWXYIFC.js";import"./chunk-MMGD6ESZ.js";import"./chunk-WAW3QC3R.js";import"./chunk-EFVAQ2KM.js";import"./chunk-KULNKXPT.js";import{a as e,b as d}from"./chunk-XEJ47DLD.js";import{a as h,b as t}from"./chunk-FY3BTKY4.js";var p=h((l,o)=>{o.exports=JBrowseExports["@jbrowse/display-kit/DisplayChrome"]});var s=t(p(),1),n=t(d(),1);var r=t(e(),1),y=(0,n.observer)(function({model:a}){return(0,r.jsx)(s.DisplayStatusChrome,{model:a,phase:a.displayPhase,drawn:a.painted&&a.geometryPainted,testid:"linear-graph-display","data-layout":a.chosenLayoutMode,"data-cut-tier":a.cutTier,"data-recuts":a.recuts,"data-node-count":a.hasGraph?a.nodeCount:void 0,"data-loading":a.isLoading?"":void 0,style:{width:a.paneWidth,height:a.height,overflow:"hidden"},children:(0,r.jsx)(i,{model:a,ownChrome:!1})})}),c=y;export{c as default};
2
- //# sourceMappingURL=LinearGraphDisplay-ZM6IMPJE.js.map
1
+ import{a as i}from"./chunk-T6LGFR3R.js";import"./chunk-X2HKDCRG.js";import"./chunk-UQEPPJEO.js";import"./chunk-SCMIJAAX.js";import"./chunk-FCWXYIFC.js";import"./chunk-SGA5LPIL.js";import"./chunk-Q36VDIWB.js";import"./chunk-EFVAQ2KM.js";import"./chunk-KULNKXPT.js";import{a as e,b as d}from"./chunk-XEJ47DLD.js";import{a as h,b as t}from"./chunk-FY3BTKY4.js";var p=h((l,o)=>{o.exports=JBrowseExports["@jbrowse/display-kit/DisplayChrome"]});var s=t(p(),1),n=t(d(),1);var r=t(e(),1),y=(0,n.observer)(function({model:a}){return(0,r.jsx)(s.DisplayStatusChrome,{model:a,phase:a.displayPhase,drawn:a.painted&&a.geometryPainted,testid:"linear-graph-display","data-layout":a.chosenLayoutMode,"data-cut-tier":a.cutTier,"data-recuts":a.recuts,"data-node-count":a.hasGraph?a.nodeCount:void 0,"data-loading":a.isLoading?"":void 0,style:{width:a.paneWidth,height:a.height,overflow:"hidden"},children:(0,r.jsx)(i,{model:a,ownChrome:!1})})}),c=y;export{c as default};
2
+ //# sourceMappingURL=LinearGraphDisplay-PIVJ7WE5.js.map
@@ -0,0 +1,2 @@
1
+ import{a as N,b as C,d as b,e as p}from"./chunk-KDIBFGZM.js";import"./chunk-KWAXLUPQ.js";import{a as y}from"./chunk-J4OLMLS5.js";import{a as u,c as m,e as g}from"./chunk-UQEPPJEO.js";import"./chunk-KULNKXPT.js";import{b as n}from"./chunk-FY3BTKY4.js";var f=n(N(),1),r=n(y(),1),c=n(C(),1);var o=class extends f.BaseFeatureDataAdapter{static{this.capabilities=["getFeatures","getRefNames"]}constructor(t,a,s){super(t,a,s),this.bubbles=b(this,["bubblesLocation"],["index"]),this.refNames=new p(this.bubbles,this)}async getRefNames(t={}){return this.refNames.assemblyRefNames(t)}async hasDataForRefName(){return!0}getFeatures(t,a={}){let{signal:s,statusCallback:d}=a;return(0,c.ObservableCreate)(async i=>{let l=await this.refNames.resolve(t,a);l!==void 0&&await(0,r.updateStatus)("Downloading bubbles",d,()=>this.bubbles.getLines(l,t.start,t.end,{signal:s,lineCallback:(h,A)=>{let e=u(h);i.next(new r.SimpleFeature({uniqueId:`bubble-${A}`,refName:t.refName,start:e.start,end:e.end,name:m(e),description:g(e),type:"bubble",score:e.segmentCount,segmentCount:e.segmentCount,pathCount:e.pathCount,inversion:e.inversion,shortestAlleleLength:e.shortestAlleleLength,longestAlleleLength:e.longestAlleleLength,segments:e.segments,shortestAllele:e.shortestAllele,longestAllele:e.longestAllele}))}})),i.complete()},s)}};export{o as default};
2
+ //# sourceMappingURL=MinigraphBubbleAdapter-CK7AE4QT.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/MinigraphBubbleAdapter/MinigraphBubbleAdapter.ts"],
4
4
  "sourcesContent": ["import {\n bubbleDescription,\n bubbleLabel,\n parseBubbleLine,\n} from '@jbrowse/bandage-core/bubbles/bubbleLine'\nimport { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { SimpleFeature, updateStatus } from '@jbrowse/core/util'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\n\nimport { PanSNRefNames, openTabixSlot } from '../panSNTabix.ts'\n\nimport type { MinigraphBubbleAdapterConfig } from './configSchema.ts'\nimport type PluginManager from '@jbrowse/core/PluginManager'\nimport type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport type { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'\nimport type { Feature } from '@jbrowse/core/util'\nimport type { Region } from '@jbrowse/core/util/types'\n\nexport default class MinigraphBubbleAdapter extends BaseFeatureDataAdapter<MinigraphBubbleAdapterConfig> {\n public static capabilities = ['getFeatures', 'getRefNames']\n\n private readonly bubbles\n // `gfatools bubble` names each row after the graph's stable sequence, so a\n // Minigraph-Cactus graph produces PanSN rows (`GRCh38#0#chr6`) where a plain\n // minigraph graph produces bare ones (`chr6`). Same resolution the segment\n // adapter does, through the same `assemblyNameToPanSN` slot.\n private readonly refNames\n\n public constructor(\n config: MinigraphBubbleAdapterConfig,\n getSubAdapter?: getSubAdapterType,\n pluginManager?: PluginManager,\n ) {\n super(config, getSubAdapter, pluginManager)\n this.bubbles = openTabixSlot(this, ['bubblesLocation'], ['index'])\n this.refNames = new PanSNRefNames(this.bubbles, this)\n }\n\n async getRefNames(opts: BaseOptions = {}) {\n return this.refNames.assemblyRefNames(opts)\n }\n\n public async hasDataForRefName() {\n return true\n }\n\n getFeatures(query: Region, opts: BaseOptions = {}) {\n const { signal, statusCallback } = opts\n return ObservableCreate<Feature>(async observer => {\n const tabixRefName = await this.refNames.resolve(query, opts)\n if (tabixRefName !== undefined) {\n await updateStatus('Downloading bubbles', statusCallback, () =>\n this.bubbles.getLines(tabixRefName, query.start, query.end, {\n signal,\n lineCallback: (line, fileOffset) => {\n const bubble = parseBubbleLine(line)\n observer.next(\n new SimpleFeature({\n uniqueId: `bubble-${fileOffset}`,\n refName: query.refName,\n start: bubble.start,\n end: bubble.end,\n // How variable this spot is, in two words, since that is the\n // whole point of the track.\n name: bubbleLabel(bubble),\n description: bubbleDescription(bubble),\n type: 'bubble',\n score: bubble.segmentCount,\n segmentCount: bubble.segmentCount,\n pathCount: bubble.pathCount,\n inversion: bubble.inversion,\n shortestAlleleLength: bubble.shortestAlleleLength,\n longestAlleleLength: bubble.longestAlleleLength,\n segments: bubble.segments,\n shortestAllele: bubble.shortestAllele,\n longestAllele: bubble.longestAllele,\n }),\n )\n },\n }),\n )\n }\n observer.complete()\n }, signal)\n }\n}\n"],
5
- "mappings": "4RAKA,IAAAA,EAAuC,SACvCC,EAA4C,SAC5CC,EAAiC,SAWjC,IAAqBC,EAArB,cAAoD,wBAAqD,CACvG,YAAc,aAAe,CAAC,cAAe,aAAa,EASnD,YACLC,EACAC,EACAC,EACA,CACA,MAAMF,EAAQC,EAAeC,CAAa,EAC1C,KAAK,QAAUC,EAAc,KAAM,CAAC,iBAAiB,EAAG,CAAC,OAAO,CAAC,EACjE,KAAK,SAAW,IAAIC,EAAc,KAAK,QAAS,IAAI,CACtD,CAEA,MAAM,YAAYC,EAAoB,CAAC,EAAG,CACxC,OAAO,KAAK,SAAS,iBAAiBA,CAAI,CAC5C,CAEA,MAAa,mBAAoB,CAC/B,MAAO,EACT,CAEA,YAAYC,EAAeD,EAAoB,CAAC,EAAG,CACjD,GAAM,CAAE,OAAAE,EAAQ,eAAAC,CAAe,EAAIH,EACnC,SAAO,oBAA0B,MAAMI,GAAY,CACjD,IAAMC,EAAe,MAAM,KAAK,SAAS,QAAQJ,EAAOD,CAAI,EACxDK,IAAiB,QACnB,QAAM,gBAAa,sBAAuBF,EAAgB,IACxD,KAAK,QAAQ,SAASE,EAAcJ,EAAM,MAAOA,EAAM,IAAK,CAC1D,OAAAC,EACA,aAAc,CAACI,EAAMC,IAAe,CAClC,IAAMC,EAASC,EAAgBH,CAAI,EACnCF,EAAS,KACP,IAAI,gBAAc,CAChB,SAAU,UAAUG,CAAU,GAC9B,QAASN,EAAM,QACf,MAAOO,EAAO,MACd,IAAKA,EAAO,IAGZ,KAAME,EAAYF,CAAM,EACxB,YAAaG,EAAkBH,CAAM,EACrC,KAAM,SACN,MAAOA,EAAO,aACd,aAAcA,EAAO,aACrB,UAAWA,EAAO,UAClB,UAAWA,EAAO,UAClB,qBAAsBA,EAAO,qBAC7B,oBAAqBA,EAAO,oBAC5B,SAAUA,EAAO,SACjB,eAAgBA,EAAO,eACvB,cAAeA,EAAO,aACxB,CAAC,CACH,CACF,CACF,CAAC,CACH,EAEFJ,EAAS,SAAS,CACpB,EAAGF,CAAM,CACX,CACF",
5
+ "mappings": "2PAKA,IAAAA,EAAuC,SACvCC,EAA4C,SAC5CC,EAAiC,SAWjC,IAAqBC,EAArB,cAAoD,wBAAqD,CACvG,YAAc,aAAe,CAAC,cAAe,aAAa,EASnD,YACLC,EACAC,EACAC,EACA,CACA,MAAMF,EAAQC,EAAeC,CAAa,EAC1C,KAAK,QAAUC,EAAc,KAAM,CAAC,iBAAiB,EAAG,CAAC,OAAO,CAAC,EACjE,KAAK,SAAW,IAAIC,EAAc,KAAK,QAAS,IAAI,CACtD,CAEA,MAAM,YAAYC,EAAoB,CAAC,EAAG,CACxC,OAAO,KAAK,SAAS,iBAAiBA,CAAI,CAC5C,CAEA,MAAa,mBAAoB,CAC/B,MAAO,EACT,CAEA,YAAYC,EAAeD,EAAoB,CAAC,EAAG,CACjD,GAAM,CAAE,OAAAE,EAAQ,eAAAC,CAAe,EAAIH,EACnC,SAAO,oBAA0B,MAAMI,GAAY,CACjD,IAAMC,EAAe,MAAM,KAAK,SAAS,QAAQJ,EAAOD,CAAI,EACxDK,IAAiB,QACnB,QAAM,gBAAa,sBAAuBF,EAAgB,IACxD,KAAK,QAAQ,SAASE,EAAcJ,EAAM,MAAOA,EAAM,IAAK,CAC1D,OAAAC,EACA,aAAc,CAACI,EAAMC,IAAe,CAClC,IAAMC,EAASC,EAAgBH,CAAI,EACnCF,EAAS,KACP,IAAI,gBAAc,CAChB,SAAU,UAAUG,CAAU,GAC9B,QAASN,EAAM,QACf,MAAOO,EAAO,MACd,IAAKA,EAAO,IAGZ,KAAME,EAAYF,CAAM,EACxB,YAAaG,EAAkBH,CAAM,EACrC,KAAM,SACN,MAAOA,EAAO,aACd,aAAcA,EAAO,aACrB,UAAWA,EAAO,UAClB,UAAWA,EAAO,UAClB,qBAAsBA,EAAO,qBAC7B,oBAAqBA,EAAO,oBAC5B,SAAUA,EAAO,SACjB,eAAgBA,EAAO,eACvB,cAAeA,EAAO,aACxB,CAAC,CACH,CACF,CACF,CAAC,CACH,EAEFJ,EAAS,SAAS,CACpB,EAAGF,CAAM,CACX,CACF",
6
6
  "names": ["import_BaseAdapter", "import_util", "import_rxjs", "MinigraphBubbleAdapter", "config", "getSubAdapter", "pluginManager", "openTabixSlot", "PanSNRefNames", "opts", "query", "signal", "statusCallback", "observer", "tabixRefName", "line", "fileOffset", "bubble", "parseBubbleLine", "bubbleLabel", "bubbleDescription"]
7
7
  }
@@ -0,0 +1,3 @@
1
+ import{a as O,b as P,d as h,e as L}from"./chunk-KDIBFGZM.js";import"./chunk-KWAXLUPQ.js";import{a as B}from"./chunk-J4OLMLS5.js";import"./chunk-KULNKXPT.js";import{b as S}from"./chunk-FY3BTKY4.js";var C=S(O(),1),l=S(B(),1),M=S(P(),1);function x(t){let e=t.split(" ");return{refName:e[0],start:+e[1],end:+e[2],id:e[3],rank:+e[4],tags:e[5]??""}}function $(t){let e=t.tags.split(" ").find(a=>a.startsWith("SM:Z:"));if(e===void 0)return;let n=e.slice(5).split(",").map(a=>a.trim()).filter(Boolean);return n.length>0?n:void 0}function w(t){return{id:t.slice(0,-1),strand:t.slice(-1)}}function A(t){let e=t.split(" "),n=w(e[3]),a=w(e[4]);return{source:n.id,sourceStrand:n.strand,target:a.id,targetStrand:a.strand,sourceSegment:{id:n.id,refName:e[5],start:+e[6],end:+e[7],rank:+e[8],tags:e[13]??""},targetSegment:{id:a.id,refName:e[9],start:+e[10],end:+e[11],rank:+e[12],tags:e[14]??""}}}function I(t){return`${t.source}${t.sourceStrand}${t.target}${t.targetStrand}`}var j=/^[A-Za-z][A-Za-z0-9]:[AifZJHB]:/;function G(t){let{id:e,refName:n,start:a,end:r,rank:s,tags:m}=t,o=m.split(" ").filter(g=>j.test(g)),i=o.length===0?"":` ${o.join(" ")}`;return`S ${e} * LN:i:${r-a} SN:Z:${n} SO:i:${a} SR:i:${s}${i}`}function Z(t){let{source:e,sourceStrand:n,target:a,targetStrand:r}=t;return`L ${e} ${n} ${a} ${r} 0M`}function b(t,e){return t<e?-1:t>e?1:0}function T(t,e){let n=[...t.values()].sort((r,s)=>b(r.refName,s.refName)||r.start-s.start||b(r.id,s.id)),a=[...e.keys()].sort((r,s)=>b(r,s));return["H VN:Z:1.0",...n.map(r=>G(r)),...a.map(r=>Z(e.get(r)))].join(`
2
+ `)}function F(t){return t.filter(e=>e.rank>0)}var N=class extends C.BaseFeatureDataAdapter{static{this.capabilities=["getFeatures","getRefNames"]}constructor(e,n,a){super(e,n,a),this.fine=this.openIndex([])}openIndex(e){let n=h(this,[...e,"segmentsLocation"],[...e,"segmentsIndex"]);return{segments:n,links:h(this,[...e,"linksLocation"],[...e,"linksIndex"]),refNames:new L(n,this)}}index(e="fine"){return e==="fine"?this.fine:(this.coarse??=this.openIndex(["coarse"]),this.coarse)}async getRefNames(e={}){return this.fine.refNames.assemblyRefNames(e)}async hasDataForRefName(){return!0}getFeatures(e,n={}){let{signal:a,statusCallback:r}=n;return(0,M.ObservableCreate)(async s=>{let m=await this.fine.refNames.resolve(e,n);m!==void 0&&await(0,l.updateStatus)("Downloading segments",r,()=>this.fine.segments.getLines(m,e.start,e.end,{signal:a,lineCallback:o=>{let i=x(o),g=$(i);s.next(new l.SimpleFeature({uniqueId:i.id,refName:e.refName,start:i.start,end:i.end,name:i.id,type:"segment",rank:i.rank,stableName:i.refName,...g&&{samples:g,carriers:g.length}}))}})),s.complete()},a)}async getSubgraph(e,n={}){let{hops:a=0,signal:r,tier:s}=n,m=this.index(s),o=new Map,i=new Map,g=await m.refNames.resolve(e,{signal:r}),R=async(f,p,d)=>{let y=[];return await m.links.getLines(f,p,d,{signal:r,lineCallback:v=>{let c=A(v);i.set(I(c),c);for(let u of[c.sourceSegment,c.targetSegment])o.has(u.id)||(o.set(u.id,u),y.push(u))}}),y};if(g===void 0)throw new Error(`${e.assemblyName} ${e.refName} is not in this graph's index; a graph with PanSN names (GRCh38#0#chr1) needs ${e.assemblyName} mapped to its prefix in assemblyNameToPanSN`);await m.segments.getLines(g,e.start,e.end,{signal:r,lineCallback:f=>{let p=x(f);o.set(p.id,p)}});let k=F(await R(g,e.start,e.end));for(let f=0;f<a;f++){let p=await Promise.all(k.map(d=>R(d.refName,d.start,d.end)));k=F(p.flat())}return T(o,i)}};export{N as default};
3
+ //# sourceMappingURL=RgfaTabixAdapter-5MD2ZZ2F.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/RgfaTabixAdapter/RgfaTabixAdapter.ts", "../../src/RgfaTabixAdapter/rgfaBed.ts"],
4
- "sourcesContent": ["import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { SimpleFeature, updateStatus } from '@jbrowse/core/util'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\n\nimport { PanSNRefNames, openTabixSlot } from '../panSNTabix.ts'\nimport {\n formatSubgraph,\n linkKey,\n parseLinkLine,\n parseSegmentLine,\n segmentSamples,\n} from './rgfaBed.ts'\n\nimport type { RgfaTabixAdapterConfig } from './configSchema.ts'\nimport type { SubgraphAdapterOptions, SubgraphTier } from '../GetSubgraph.ts'\nimport type { RgfaLink, RgfaSegment } from './rgfaBed.ts'\nimport type { TabixIndexedFile } from '@gmod/tabix'\nimport type PluginManager from '@jbrowse/core/PluginManager'\nimport type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport type { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'\nimport type { Feature } from '@jbrowse/core/util'\nimport type { Region } from '@jbrowse/core/util/types'\n\n// What a hop follows: alleles, never the backbone. A rank-0 segment reached\n// through a link is flanking backbone, usually outside the window, so querying\n// its links walks the reference away from the region, brings back more backbone,\n// and closes nothing. Every segment that closes a bubble is an allele interior,\n// and an allele interior is rank > 0 in both index formats (rGFA's SR tag, and\n// pggb's rank 0-or-1 against the anchor path). Reached backbone still becomes a\n// node and its edge still draws; it is only not walked through.\n//\n// This is gfabase's rule, arrived at from the other end. `gfabase sub` expands\n// from a seed either to the whole connected component (`--connected`, which its\n// own README calls overkill) or with `--cutpoints 1`, which takes the biconnected\n// component by *stopping at cutpoints*, the segments every end-to-end walk of\n// the chromosome must traverse. In a reference-anchored pangenome the cutpoints\n// are the backbone, and rank is what the index already states about it, so\n// `rank > 0` is that stopping rule without a connectivity index to build. The\n// third tool is the same shape again: `gfatools view -R` maps the region onto its\n// precomputed bubble decomposition and returns whole overlapping bubbles\n// (gfa_query_by_reg), which is complete for the same reason. Bandage's own\n// `--distance` is a node-step radius, but Bandage holds the entire graph in\n// memory, so its scope is a drawing filter rather than a fetch strategy.\n//\n// Measured with this rule: the E. coli paa window converges at one hop (17\n// segments at 1 and at 2), so the cut closes and stays closed. HPRC's amylase\n// window keeps growing (63 at 0, 78 at 1, 92 at 2) because its alleles have\n// alleles, and wall-clock is flat across all three, since a hop's queries go out\n// together and the remote index dominates.\n//\n// The exact version, when a graph ships a bubble index beside its segments:\n// gfatools' bubble rows carry the member segment ids of every bubble, so the\n// bubbles overlapping the region state which segments a complete cut must\n// contain. That turns the hop count into a termination condition rather than a\n// setting, and MinigraphBubbleAdapter already parses those rows.\nfunction offReference(segments: RgfaSegment[]) {\n return segments.filter(segment => segment.rank > 0)\n}\n\ninterface GraphIndex {\n segments: TabixIndexedFile\n links: TabixIndexedFile\n refNames: PanSNRefNames\n}\n\nexport default class RgfaTabixAdapter extends BaseFeatureDataAdapter<RgfaTabixAdapterConfig> {\n public static capabilities = ['getFeatures', 'getRefNames']\n\n private readonly fine\n private coarse: GraphIndex | undefined\n\n public constructor(\n config: RgfaTabixAdapterConfig,\n getSubAdapter?: getSubAdapterType,\n pluginManager?: PluginManager,\n ) {\n super(config, getSubAdapter, pluginManager)\n this.fine = this.openIndex([])\n }\n\n // refNames off the SEGMENT index: it is the one that names every stable\n // sequence the graph is anchored to, where the link index only names those a\n // link touches.\n private openIndex(under: string[]): GraphIndex {\n const segments = openTabixSlot(\n this,\n [...under, 'segmentsLocation'],\n [...under, 'segmentsIndex'],\n )\n return {\n segments,\n links: openTabixSlot(\n this,\n [...under, 'linksLocation'],\n [...under, 'linksIndex'],\n ),\n refNames: new PanSNRefNames(segments, this),\n }\n }\n\n private index(tier: SubgraphTier = 'fine') {\n if (tier === 'fine') {\n return this.fine\n }\n this.coarse ??= this.openIndex(['coarse'])\n return this.coarse\n }\n\n async getRefNames(opts: BaseOptions = {}) {\n return this.fine.refNames.assemblyRefNames(opts)\n }\n\n public async hasDataForRefName() {\n return true\n }\n\n getFeatures(query: Region, opts: BaseOptions = {}) {\n const { signal, statusCallback } = opts\n return ObservableCreate<Feature>(async observer => {\n const tabixRefName = await this.fine.refNames.resolve(query, opts)\n if (tabixRefName !== undefined) {\n await updateStatus('Downloading segments', statusCallback, () =>\n this.fine.segments.getLines(tabixRefName, query.start, query.end, {\n signal,\n lineCallback: line => {\n const segment = parseSegmentLine(line)\n // `samples` is who, `carriers` is how many, and the second is not\n // just a convenience: a lane colored by carriage is a jexl\n // expression in a config, where counting a list means relying on\n // jexl resolving `.length` through a member access on an array.\n // The count is the axis the color reads, so the index states it.\n const samples = segmentSamples(segment)\n observer.next(\n new SimpleFeature({\n uniqueId: segment.id,\n refName: query.refName,\n start: segment.start,\n end: segment.end,\n name: segment.id,\n type: 'segment',\n rank: segment.rank,\n stableName: segment.refName,\n ...(samples && { samples, carriers: samples.length }),\n }),\n )\n },\n }),\n )\n }\n observer.complete()\n }, signal)\n }\n\n // Extract the graph around a region as GFA text, for GraphGenomeView. The\n // region's own segments come from segs.bed.gz; links.bed.gz supplies the edges\n // incident to them *and* the coordinates of the segments on the other end,\n // which typically sit on a different stable sequence (a rank>0 bubble) and so\n // are not reachable by any coordinate query on this region.\n //\n // `hops` is extra rounds of link-following past the region's own segments\n // and their immediate neighbours, each costing one tabix query per\n // off-reference segment newly reached. One round is what closes a bubble, so\n // it is the default the view asks for; see the frontier below. `signal` goes\n // to every one of those queries, so a cut the view has replaced stops.\n // `tier: 'coarse'` reads the `coarse` pair instead, the same way.\n async getSubgraph(region: Region, opts: SubgraphAdapterOptions = {}) {\n const { hops = 0, signal, tier } = opts\n const index = this.index(tier)\n const segments = new Map<string, RgfaSegment>()\n const links = new Map<string, RgfaLink>()\n const tabixRefName = await index.refNames.resolve(region, { signal })\n\n const addLinksOver = async (\n refName: string,\n start: number,\n end: number,\n ) => {\n const reached: RgfaSegment[] = []\n await index.links.getLines(refName, start, end, {\n signal,\n lineCallback: line => {\n const link = parseLinkLine(line)\n links.set(linkKey(link), link)\n for (const segment of [link.sourceSegment, link.targetSegment]) {\n if (!segments.has(segment.id)) {\n segments.set(segment.id, segment)\n reached.push(segment)\n }\n }\n },\n })\n return reached\n }\n\n if (tabixRefName === undefined) {\n throw new Error(\n `${region.assemblyName} ${region.refName} is not in this graph's index; a graph with PanSN names (GRCh38#0#chr1) needs ${region.assemblyName} mapped to its prefix in assemblyNameToPanSN`,\n )\n }\n await index.segments.getLines(tabixRefName, region.start, region.end, {\n signal,\n lineCallback: line => {\n const segment = parseSegmentLine(line)\n segments.set(segment.id, segment)\n },\n })\n let frontier = offReference(\n await addLinksOver(tabixRefName, region.start, region.end),\n )\n for (let hop = 0; hop < hops; hop++) {\n // One hop's queries are independent of each other, so they go out\n // together rather than one round-trip at a time. Their callbacks share\n // the segment and link maps, which is safe because only one of them runs\n // at a time, and the output is sorted at the end regardless of the order\n // they arrive in.\n const reached = await Promise.all(\n frontier.map(segment =>\n addLinksOver(segment.refName, segment.start, segment.end),\n ),\n )\n frontier = offReference(reached.flat())\n }\n\n return formatSubgraph(segments, links)\n }\n}\n", "// A segment as it appears in segs.bed.gz, and as it is repeated inside every\n// links.bed.gz row: `stableName start end segmentId rank [tags]`. The first\n// five are the SN/SO/SR tags rGFA already carries, projected to BED by\n// `gfatools gfa2bed -m`.\n//\n// `tags` is a space-separated list of GFA tags, written verbatim onto the\n// S-line formatSegment synthesizes, where the GFA parser reads them into\n// `GraphNode.tags` with no work here. It is the extension point for everything\n// the five columns cannot say: carriage on a path-derived graph (`SM:Z:`), the\n// collapse summary on a level-of-detail tier (`ct:Z:`, `cn:i:`, ...), a\n// precomputed layout position later. rGFA files have no sixth column at all,\n// so this is empty for them and nothing changes.\nexport interface RgfaSegment {\n refName: string\n start: number\n end: number\n id: string\n rank: number\n tags: string\n}\n\nexport interface RgfaLink {\n source: string\n sourceStrand: string\n target: string\n targetStrand: string\n sourceSegment: RgfaSegment\n targetSegment: RgfaSegment\n}\n\nexport function parseSegmentLine(line: string): RgfaSegment {\n const cols = line.split('\\t')\n return {\n refName: cols[0]!,\n start: +cols[1]!,\n end: +cols[2]!,\n id: cols[3]!,\n rank: +cols[4]!,\n tags: cols[5] ?? '',\n }\n}\n\n// Carriage as an ordinary feature attribute, for the linear track rather than\n// the graph. The tag column reaches the graph view through the synthesized\n// S-line (formatSegment below, then gfaConverter reads SM into\n// `GraphNode.samples`), and that route ends at the graph: `getFeatures` builds\n// its own features and had no way to say who carries a segment, so a lane\n// colored by carriage was not expressible.\n//\n// `SM:Z:` is its own grammar check here. build_pggb_tabix.sh wrote a bare\n// comma-separated list in this column before the tag column existed, and those\n// files are still hosted; a bare list has no prefix to match, so it is dropped\n// rather than read as one sample named `K12,Sakai,CFT073`.\n//\n// Undefined rather than [] when the tag is absent, matching gfaConverter: an\n// rGFA has no sixth column at all, so a segment that says nothing about\n// carriage stays distinguishable from one carried by nobody.\nexport function segmentSamples(segment: RgfaSegment) {\n const tag = segment.tags.split(' ').find(t => t.startsWith('SM:Z:'))\n if (tag === undefined) {\n return undefined\n }\n const samples = tag\n .slice('SM:Z:'.length)\n .split(',')\n .map(s => s.trim())\n .filter(Boolean)\n return samples.length > 0 ? samples : undefined\n}\n\n// `s322+` \u2014 the L-line's segment id with its orientation appended, mirroring\n// the GFA record it came from.\nfunction parseEndpoint(field: string) {\n return { id: field.slice(0, -1), strand: field.slice(-1) }\n}\n\nexport function parseLinkLine(line: string): RgfaLink {\n const cols = line.split('\\t')\n const source = parseEndpoint(cols[3]!)\n const target = parseEndpoint(cols[4]!)\n return {\n source: source.id,\n sourceStrand: source.strand,\n target: target.id,\n targetStrand: target.strand,\n sourceSegment: {\n id: source.id,\n refName: cols[5]!,\n start: +cols[6]!,\n end: +cols[7]!,\n rank: +cols[8]!,\n tags: cols[13] ?? '',\n },\n targetSegment: {\n id: target.id,\n refName: cols[9]!,\n start: +cols[10]!,\n end: +cols[11]!,\n rank: +cols[12]!,\n tags: cols[14] ?? '',\n },\n }\n}\n\nexport function linkKey(link: RgfaLink) {\n return `${link.source}${link.sourceStrand}${link.target}${link.targetStrand}`\n}\n\n// Both endpoints of a link are written into every row, so the same link is\n// indexed under each endpoint's stable sequence and arrives twice for a region\n// covering both. Callers dedupe on linkKey.\n\n// Segments carry no sequence here \u2014 the BED records only their span \u2014 so every\n// S-line is written with `*` and an LN tag, which is what the GFA spec asks for\n// and what packages/graph-core's parser reads back as the node length.\n// `NM:i:0`, `SM:Z:HG002.1,HG002.2` \u2014 the GFA tag grammar, checked rather than\n// trusted. Files built before the tag column existed put a bare comma-separated\n// sample list here, and passing that through would put a field that is not a\n// tag on an S-line, which is a malformed GFA rather than a missing annotation.\n// Dropping it degrades to the pre-tag behaviour instead.\nconst GFA_TAG = /^[A-Za-z][A-Za-z0-9]:[AifZJHB]:/\n\nfunction formatSegment(segment: RgfaSegment) {\n const { id, refName, start, end, rank, tags } = segment\n const valid = tags.split(' ').filter(t => GFA_TAG.test(t))\n const extra = valid.length === 0 ? '' : `\\t${valid.join('\\t')}`\n return `S\\t${id}\\t*\\tLN:i:${end - start}\\tSN:Z:${refName}\\tSO:i:${start}\\tSR:i:${rank}${extra}`\n}\n\nfunction formatLink(link: RgfaLink) {\n const { source, sourceStrand, target, targetStrand } = link\n return `L\\t${source}\\t${sourceStrand}\\t${target}\\t${targetStrand}\\t0M`\n}\n\n// Codepoint order, not localeCompare: the byte-identical-output guarantee below\n// has to hold across locales.\nfunction compare(a: string, b: string) {\n return a < b ? -1 : a > b ? 1 : 0\n}\n\n// Deterministic ordering: the same region always produces byte-identical GFA,\n// so a layout computed from it is reproducible.\nexport function formatSubgraph(\n segments: Map<string, RgfaSegment>,\n links: Map<string, RgfaLink>,\n) {\n const sortedSegments = [...segments.values()].sort((a, b) =>\n a.refName === b.refName ? a.start - b.start : compare(a.refName, b.refName),\n )\n const sortedLinks = [...links.keys()].sort((a, b) => compare(a, b))\n return [\n 'H\\tVN:Z:1.0',\n ...sortedSegments.map(s => formatSegment(s)),\n ...sortedLinks.map(k => formatLink(links.get(k)!)),\n ].join('\\n')\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { SimpleFeature, updateStatus } from '@jbrowse/core/util'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\n\nimport { PanSNRefNames, openTabixSlot } from '../panSNTabix.ts'\nimport {\n formatSubgraph,\n linkKey,\n parseLinkLine,\n parseSegmentLine,\n segmentSamples,\n} from './rgfaBed.ts'\n\nimport type { RgfaTabixAdapterConfig } from './configSchema.ts'\nimport type { SubgraphAdapterOptions, SubgraphTier } from '../GetSubgraph.ts'\nimport type { RgfaLink, RgfaSegment } from './rgfaBed.ts'\nimport type { TabixIndexedFile } from '@gmod/tabix'\nimport type PluginManager from '@jbrowse/core/PluginManager'\nimport type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter'\nimport type { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'\nimport type { Feature } from '@jbrowse/core/util'\nimport type { Region } from '@jbrowse/core/util/types'\n\n// What a hop follows: alleles, never the backbone. A rank-0 segment reached\n// through a link is flanking backbone, usually outside the window, so querying\n// its links walks the reference away from the region, brings back more backbone,\n// and closes nothing. Every segment that closes a bubble is an allele interior,\n// and an allele interior is rank > 0 in both index formats (rGFA's SR tag, and\n// pggb's rank 0-or-1 against the anchor path). Reached backbone still becomes a\n// node and its edge still draws; it is only not walked through.\n//\n// This is gfabase's rule, arrived at from the other end. `gfabase sub` expands\n// from a seed either to the whole connected component (`--connected`, which its\n// own README calls overkill) or with `--cutpoints 1`, which takes the biconnected\n// component by *stopping at cutpoints*, the segments every end-to-end walk of\n// the chromosome must traverse. In a reference-anchored pangenome the cutpoints\n// are the backbone, and rank is what the index already states about it, so\n// `rank > 0` is that stopping rule without a connectivity index to build. The\n// third tool is the same shape again: `gfatools view -R` maps the region onto its\n// precomputed bubble decomposition and returns whole overlapping bubbles\n// (gfa_query_by_reg), which is complete for the same reason. Bandage's own\n// `--distance` is a node-step radius, but Bandage holds the entire graph in\n// memory, so its scope is a drawing filter rather than a fetch strategy.\n//\n// Measured with this rule: the E. coli paa window converges at one hop (17\n// segments at 1 and at 2), so the cut closes and stays closed. HPRC's amylase\n// window keeps growing (63 at 0, 78 at 1, 92 at 2) because its alleles have\n// alleles, and wall-clock is flat across all three, since a hop's queries go out\n// together and the remote index dominates.\n//\n// The exact version, when a graph ships a bubble index beside its segments:\n// gfatools' bubble rows carry the member segment ids of every bubble, so the\n// bubbles overlapping the region state which segments a complete cut must\n// contain. That turns the hop count into a termination condition rather than a\n// setting, and MinigraphBubbleAdapter already parses those rows.\nfunction offReference(segments: RgfaSegment[]) {\n return segments.filter(segment => segment.rank > 0)\n}\n\ninterface GraphIndex {\n segments: TabixIndexedFile\n links: TabixIndexedFile\n refNames: PanSNRefNames\n}\n\nexport default class RgfaTabixAdapter extends BaseFeatureDataAdapter<RgfaTabixAdapterConfig> {\n public static capabilities = ['getFeatures', 'getRefNames']\n\n private readonly fine\n private coarse: GraphIndex | undefined\n\n public constructor(\n config: RgfaTabixAdapterConfig,\n getSubAdapter?: getSubAdapterType,\n pluginManager?: PluginManager,\n ) {\n super(config, getSubAdapter, pluginManager)\n this.fine = this.openIndex([])\n }\n\n // refNames off the SEGMENT index: it is the one that names every stable\n // sequence the graph is anchored to, where the link index only names those a\n // link touches.\n private openIndex(under: string[]): GraphIndex {\n const segments = openTabixSlot(\n this,\n [...under, 'segmentsLocation'],\n [...under, 'segmentsIndex'],\n )\n return {\n segments,\n links: openTabixSlot(\n this,\n [...under, 'linksLocation'],\n [...under, 'linksIndex'],\n ),\n refNames: new PanSNRefNames(segments, this),\n }\n }\n\n private index(tier: SubgraphTier = 'fine') {\n if (tier === 'fine') {\n return this.fine\n }\n this.coarse ??= this.openIndex(['coarse'])\n return this.coarse\n }\n\n async getRefNames(opts: BaseOptions = {}) {\n return this.fine.refNames.assemblyRefNames(opts)\n }\n\n public async hasDataForRefName() {\n return true\n }\n\n getFeatures(query: Region, opts: BaseOptions = {}) {\n const { signal, statusCallback } = opts\n return ObservableCreate<Feature>(async observer => {\n const tabixRefName = await this.fine.refNames.resolve(query, opts)\n if (tabixRefName !== undefined) {\n await updateStatus('Downloading segments', statusCallback, () =>\n this.fine.segments.getLines(tabixRefName, query.start, query.end, {\n signal,\n lineCallback: line => {\n const segment = parseSegmentLine(line)\n // `samples` is who, `carriers` is how many, and the second is not\n // just a convenience: a lane colored by carriage is a jexl\n // expression in a config, where counting a list means relying on\n // jexl resolving `.length` through a member access on an array.\n // The count is the axis the color reads, so the index states it.\n const samples = segmentSamples(segment)\n observer.next(\n new SimpleFeature({\n uniqueId: segment.id,\n refName: query.refName,\n start: segment.start,\n end: segment.end,\n name: segment.id,\n type: 'segment',\n rank: segment.rank,\n stableName: segment.refName,\n ...(samples && { samples, carriers: samples.length }),\n }),\n )\n },\n }),\n )\n }\n observer.complete()\n }, signal)\n }\n\n // Extract the graph around a region as GFA text, for GraphGenomeView. The\n // region's own segments come from segs.bed.gz; links.bed.gz supplies the edges\n // incident to them *and* the coordinates of the segments on the other end,\n // which typically sit on a different stable sequence (a rank>0 bubble) and so\n // are not reachable by any coordinate query on this region.\n //\n // `hops` is extra rounds of link-following past the region's own segments\n // and their immediate neighbours, each costing one tabix query per\n // off-reference segment newly reached. One round is what closes a bubble, so\n // it is the default the view asks for; see the frontier below. `signal` goes\n // to every one of those queries, so a cut the view has replaced stops.\n // `tier: 'coarse'` reads the `coarse` pair instead, the same way.\n async getSubgraph(region: Region, opts: SubgraphAdapterOptions = {}) {\n const { hops = 0, signal, tier } = opts\n const index = this.index(tier)\n const segments = new Map<string, RgfaSegment>()\n const links = new Map<string, RgfaLink>()\n const tabixRefName = await index.refNames.resolve(region, { signal })\n\n const addLinksOver = async (\n refName: string,\n start: number,\n end: number,\n ) => {\n const reached: RgfaSegment[] = []\n await index.links.getLines(refName, start, end, {\n signal,\n lineCallback: line => {\n const link = parseLinkLine(line)\n links.set(linkKey(link), link)\n for (const segment of [link.sourceSegment, link.targetSegment]) {\n if (!segments.has(segment.id)) {\n segments.set(segment.id, segment)\n reached.push(segment)\n }\n }\n },\n })\n return reached\n }\n\n if (tabixRefName === undefined) {\n throw new Error(\n `${region.assemblyName} ${region.refName} is not in this graph's index; a graph with PanSN names (GRCh38#0#chr1) needs ${region.assemblyName} mapped to its prefix in assemblyNameToPanSN`,\n )\n }\n await index.segments.getLines(tabixRefName, region.start, region.end, {\n signal,\n lineCallback: line => {\n const segment = parseSegmentLine(line)\n segments.set(segment.id, segment)\n },\n })\n let frontier = offReference(\n await addLinksOver(tabixRefName, region.start, region.end),\n )\n for (let hop = 0; hop < hops; hop++) {\n // One hop's queries are independent of each other, so they go out\n // together rather than one round-trip at a time. Their callbacks share\n // the segment and link maps, which is safe because only one of them runs\n // at a time, and the output is sorted at the end regardless of the order\n // they arrive in.\n const reached = await Promise.all(\n frontier.map(segment =>\n addLinksOver(segment.refName, segment.start, segment.end),\n ),\n )\n frontier = offReference(reached.flat())\n }\n\n return formatSubgraph(segments, links)\n }\n}\n", "// A segment as it appears in segs.bed.gz, and as it is repeated inside every\n// links.bed.gz row: `stableName start end segmentId rank [tags]`. The first\n// five are the SN/SO/SR tags rGFA already carries, projected to BED by\n// `gfatools gfa2bed -m`.\n//\n// `tags` is a space-separated list of GFA tags, written verbatim onto the\n// S-line formatSegment synthesizes, where the GFA parser reads them into\n// `GraphNode.tags` with no work here. It is the extension point for everything\n// the five columns cannot say: carriage on a path-derived graph (`SM:Z:`), the\n// collapse summary on a level-of-detail tier (`ct:Z:`, `cn:i:`, ...), a\n// precomputed layout position later. rGFA files have no sixth column at all,\n// so this is empty for them and nothing changes.\nexport interface RgfaSegment {\n refName: string\n start: number\n end: number\n id: string\n rank: number\n tags: string\n}\n\nexport interface RgfaLink {\n source: string\n sourceStrand: string\n target: string\n targetStrand: string\n sourceSegment: RgfaSegment\n targetSegment: RgfaSegment\n}\n\nexport function parseSegmentLine(line: string): RgfaSegment {\n const cols = line.split('\\t')\n return {\n refName: cols[0]!,\n start: +cols[1]!,\n end: +cols[2]!,\n id: cols[3]!,\n rank: +cols[4]!,\n tags: cols[5] ?? '',\n }\n}\n\n// Carriage as an ordinary feature attribute, for the linear track rather than\n// the graph. The tag column reaches the graph view through the synthesized\n// S-line (formatSegment below, then gfaConverter reads SM into\n// `GraphNode.samples`), and that route ends at the graph: `getFeatures` builds\n// its own features and had no way to say who carries a segment, so a lane\n// colored by carriage was not expressible.\n//\n// `SM:Z:` is its own grammar check here. build_pggb_tabix.sh wrote a bare\n// comma-separated list in this column before the tag column existed, and those\n// files are still hosted; a bare list has no prefix to match, so it is dropped\n// rather than read as one sample named `K12,Sakai,CFT073`.\n//\n// Undefined rather than [] when the tag is absent, matching gfaConverter: an\n// rGFA has no sixth column at all, so a segment that says nothing about\n// carriage stays distinguishable from one carried by nobody.\nexport function segmentSamples(segment: RgfaSegment) {\n const tag = segment.tags.split(' ').find(t => t.startsWith('SM:Z:'))\n if (tag === undefined) {\n return undefined\n }\n const samples = tag\n .slice('SM:Z:'.length)\n .split(',')\n .map(s => s.trim())\n .filter(Boolean)\n return samples.length > 0 ? samples : undefined\n}\n\n// `s322+` \u2014 the L-line's segment id with its orientation appended, mirroring\n// the GFA record it came from.\nfunction parseEndpoint(field: string) {\n return { id: field.slice(0, -1), strand: field.slice(-1) }\n}\n\nexport function parseLinkLine(line: string): RgfaLink {\n const cols = line.split('\\t')\n const source = parseEndpoint(cols[3]!)\n const target = parseEndpoint(cols[4]!)\n return {\n source: source.id,\n sourceStrand: source.strand,\n target: target.id,\n targetStrand: target.strand,\n sourceSegment: {\n id: source.id,\n refName: cols[5]!,\n start: +cols[6]!,\n end: +cols[7]!,\n rank: +cols[8]!,\n tags: cols[13] ?? '',\n },\n targetSegment: {\n id: target.id,\n refName: cols[9]!,\n start: +cols[10]!,\n end: +cols[11]!,\n rank: +cols[12]!,\n tags: cols[14] ?? '',\n },\n }\n}\n\nexport function linkKey(link: RgfaLink) {\n return `${link.source}${link.sourceStrand}${link.target}${link.targetStrand}`\n}\n\n// Both endpoints of a link are written into every row, so the same link is\n// indexed under each endpoint's stable sequence and arrives twice for a region\n// covering both. Callers dedupe on linkKey.\n\n// Segments carry no sequence here \u2014 the BED records only their span \u2014 so every\n// S-line is written with `*` and an LN tag, which is what the GFA spec asks for\n// and what packages/graph-core's parser reads back as the node length.\n// `NM:i:0`, `SM:Z:HG002.1,HG002.2` \u2014 the GFA tag grammar, checked rather than\n// trusted. Files built before the tag column existed put a bare comma-separated\n// sample list here, and passing that through would put a field that is not a\n// tag on an S-line, which is a malformed GFA rather than a missing annotation.\n// Dropping it degrades to the pre-tag behaviour instead.\nconst GFA_TAG = /^[A-Za-z][A-Za-z0-9]:[AifZJHB]:/\n\nfunction formatSegment(segment: RgfaSegment) {\n const { id, refName, start, end, rank, tags } = segment\n const valid = tags.split(' ').filter(t => GFA_TAG.test(t))\n const extra = valid.length === 0 ? '' : `\\t${valid.join('\\t')}`\n return `S\\t${id}\\t*\\tLN:i:${end - start}\\tSN:Z:${refName}\\tSO:i:${start}\\tSR:i:${rank}${extra}`\n}\n\nfunction formatLink(link: RgfaLink) {\n const { source, sourceStrand, target, targetStrand } = link\n return `L\\t${source}\\t${sourceStrand}\\t${target}\\t${targetStrand}\\t0M`\n}\n\n// Codepoint order, not localeCompare: the byte-identical-output guarantee below\n// has to hold across locales.\nfunction compare(a: string, b: string) {\n return a < b ? -1 : a > b ? 1 : 0\n}\n\n// Deterministic ordering: the same region always produces byte-identical GFA,\n// so a layout computed from it is reproducible.\nexport function formatSubgraph(\n segments: Map<string, RgfaSegment>,\n links: Map<string, RgfaLink>,\n) {\n const sortedSegments = [...segments.values()].sort(\n (a, b) =>\n compare(a.refName, b.refName) || a.start - b.start || compare(a.id, b.id),\n )\n const sortedLinks = [...links.keys()].sort((a, b) => compare(a, b))\n return [\n 'H\\tVN:Z:1.0',\n ...sortedSegments.map(s => formatSegment(s)),\n ...sortedLinks.map(k => formatLink(links.get(k)!)),\n ].join('\\n')\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_BaseAdapter", "import_util", "import_rxjs", "parseSegmentLine", "line", "cols", "segmentSamples", "segment", "tag", "t", "samples", "s", "parseEndpoint", "field", "parseLinkLine", "source", "target", "linkKey", "link", "GFA_TAG", "formatSegment", "id", "refName", "start", "end", "rank", "tags", "valid", "extra", "formatLink", "sourceStrand", "targetStrand", "compare", "a", "b", "formatSubgraph", "segments", "links", "sortedSegments", "sortedLinks", "k", "offReference", "segments", "segment", "RgfaTabixAdapter", "config", "getSubAdapter", "pluginManager", "under", "openTabixSlot", "PanSNRefNames", "tier", "opts", "query", "signal", "statusCallback", "observer", "tabixRefName", "line", "parseSegmentLine", "samples", "segmentSamples", "region", "hops", "index", "links", "addLinksOver", "refName", "start", "end", "reached", "link", "parseLinkLine", "linkKey", "frontier", "hop", "formatSubgraph"]
7
7
  }
@@ -0,0 +1,5 @@
1
+ import{b as w}from"./chunk-EFVAQ2KM.js";import{a as c,b as h,c as m,d as f,e as b}from"./chunk-KULNKXPT.js";var M=new Map([["hg38","GRCh38"],["hg19","GRCh37"],["hs1","CHM13"],["t2t-chm13","CHM13"],["chm13v2","CHM13"]]);function l(e){return M.get(e.toLowerCase())}function x(e){let s=e.includes("#")?c(e):void 0;return s===void 0||h(s)?void 0:s}function y(e){return m(e)??c(e)}function S(e){let s=new Set((e.anchorPaths??[]).map(t=>t.name));for(let t of e.nodes)t.stable&&s.add(t.stable.refName);let r=new Map;for(let t of s){let n=x(t);n!==void 0&&(r.get(n)??r.set(n,new Set).get(n)).add(y(t))}return r}function N(e,s){let r=new Set(e.map(p=>x(p.refName))),[t]=r;if(r.size!==1||t===void 0)return{contigs:e,prefixes:[],named:!1};let n=new Set(e.map(p=>y(p.refName))),i=[...s.get(t)??[]].every(p=>n.has(p)),o=new Set(e.map(p=>m(p.refName))),[a]=o;return{contigs:e,prefixes:[...i?[t]:[],...o.size===1&&a?[a]:[]],named:!0}}function z(e){let s=new Map;for(let t of e.nodes)if(w(t)){let{refName:n,start:i}=t.stable,o=i+t.length,a=s.get(n);a?(a.start=Math.min(a.start,i),a.end=Math.max(a.end,o)):s.set(n,{refName:n,contig:f(n),start:i,end:o})}let r=[...s.values()];return r.length?N(r,S(e)):void 0}function B(e,s){let r=o=>[o.name,...o.aliases??[]],t=o=>a=>r(a).some(p=>p.toLowerCase()===o.toLowerCase()),n=[...e?.prefixes??[]].reverse(),i=e?.prefixes.find(o=>!o.includes("#"))?.toLowerCase();for(let o of n){let a=s.find(t(o));if(a)return a}return i===void 0?void 0:s.find(o=>r(o).some(a=>l(a)?.toLowerCase()===i))}function A(e,s){let r=S(e);return e.anchorPaths?.find(t=>B(N([{refName:t.name,contig:f(t.name),start:t.start,end:t.start+t.length}],r),[s]))}function L(e){let s=e.replace(/^chr/i,""),r=s?/^(M|MT)$/i.test(s)?["M","MT"]:[s]:[];return[...new Set([e,...r.flatMap(t=>[t,`chr${t}`])])]}function P(e,s={}){let r=new Set(e),t=new Map;for(let n of r){let i=f(n),o=s[i];for(let a of new Set([...L(i),...o?[o]:[]]))t.set(a,t.has(a)?void 0:n)}return n=>r.has(n)?n:t.get(n)}function R(e,s,r){let t=P(s.contigs.map(n=>n.refName),r);return e.flatMap(n=>{let i=t(n.refName);return i===void 0?[]:[i===n.refName?n:{...n,refName:i}]})}var d=class extends Error{constructor(r,t){super(t.length===0?`the graph names no reference sample (gbwt_reference_samples) and the anchor "${r}" maps to none; set referenceSample`:`the anchor "${r}" is none of the graph's reference samples (${t.join(", ")}); set referenceSample or map it through assemblyNameToPanSN`);this.name="NoReferenceSampleError"}},u=class extends Error{constructor(r,t,n){super(`this ${t.toLocaleString()} bp window reads more than nodeLimit (${r.toLocaleString()}) graph nodes; zoom in to about ${n.toLocaleString()} bp or raise nodeLimit`);this.name="NodeLimitError"}};function C(e){return`${e.sample}#${e.haplotype}`}function H(e,s){let r=C(e);return s===void 0||s.some(t=>b(r,t))}async function Z(e){return(await e.tag("gbwt_reference_samples")??"").split(/\s+/).filter(s=>s!=="")}function k(e,s){let r=e.toLowerCase(),t=l(e)?.toLowerCase();return s.find(n=>n===e)??s.find(n=>n.toLowerCase()===r)??s.find(n=>n.toLowerCase()===t)}function F({configured:e,anchorPrefix:s,referenceSamples:r}){if(e!=="")return e;let t=k(c(s),r)??(r.length===1?r[0]:void 0);if(t===void 0)throw new d(s,r);return t}async function Q(e,s,r){let t=(await e.paths()).find(n=>n.isIndexed&&n.name.sample===s&&n.name.contig===r);return t?{sample:t.name.sample,contig:r,haplotype:t.name.haplotype}:void 0}function G(e,s,r){if(e instanceof Error&&(e.name==="SubgraphLimitError"||/^Subgraph size limit of \d+ nodes exceeded/.test(e.message))){let n=e.walkedBp,i=typeof n=="number"&&n>0?Math.floor(n*.8):Math.floor(r/2);return new u(s,r,Math.max(i,1))}else return}var j={context:1e3,snarls:"contained",limit:1e5};async function T(e,s,r,t){let n=(await e.paths()).filter(({isIndexed:o,name:a})=>o&&a.sample===s.sample&&a.haplotype===s.haplotype&&a.contig===s.contig&&a.fragment>r&&a.fragment<t).map(o=>o.name.fragment),i=[r,...[...new Set(n)].sort((o,a)=>o-a),t];return i.slice(1).map((o,a)=>({start:i[a],end:o}))}function O(e){let s=e.map(n=>n.split(`
2
+ `).filter(i=>i!=="")),r=(n,i)=>n.filter(o=>o.startsWith(i)),t=new Set([...r(s[0]??[],"H"),...s.flatMap(n=>r(n,"S")),...s.flatMap(n=>r(n,"L")),...s.flatMap(n=>r(n,"W").slice(0,1)),...s.flatMap(n=>r(n,"W").slice(1))]);return t.size===0?"":`${[...t].join(`
3
+ `)}
4
+ `}async function K(e,s,r,t,{keep:n,...i}){if(!s)return"";let o=await T(e,s,r,t),a=await Promise.all(o.map(p=>e.getSubgraphForRange(s,p.start,p.end,{...i,haplotypes:"all",...n===void 0?{}:{keep:n}}).catch(g=>{throw G(g,i.limit,t-r)??g})));return O(await Promise.all(a.flatMap(p=>p?[p.toGFA({names:"resolved"})]:[])))}export{z as a,B as b,A as c,R as d,d as e,u as f,C as g,H as h,Z as i,F as j,Q as k,G as l,j as m,T as n,K as o};
5
+ //# sourceMappingURL=chunk-22N3NFQP.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/core/src/reference.ts", "../../packages/core/src/gbzWindow.ts"],
4
+ "sourcesContent": ["import { isBackbone } from './anchoredNodes'\nimport {\n isGenericSample,\n panSNContig,\n panSNHaplotype,\n panSNSample,\n} from './pansn'\n\nimport type { Graph, PathOrigin } from './types'\n\n// A graph's backbone names the sample it lies on (`GRCh38#0#chr6`), not an\n// assembly, and a bare contig (`chr6`) is in every human assembly at once. A\n// backbone binds to an assembly where its PanSN prefix is that assembly's name,\n// one of its aliases, or its well-known sample. One that names no sample binds\n// only where the host knows the assembly otherwise, as a track's config does.\n\nexport interface BackboneContig {\n // as the graph names it, `GRCh38#0#chr6`\n refName: string\n // as an assembly names it, `chr6`\n contig: string\n start: number\n end: number\n}\n\nexport interface Backbone {\n contigs: BackboneContig[]\n // The PanSN prefixes that name the backbone, sample then haplotype:\n // `GRCh38`, `GRCh38#0`. The sample drops out where the graph walks another\n // haplotype of it, as a diploid's `HG002` names `HG002#1` and `HG002#2`.\n prefixes: string[]\n // Whether the contigs name one real sample: false where every contig is bare\n // (`chr6`) or generic (`_gbwt_ref#0#chr6`), or where the samples differ\n named: boolean\n}\n\nexport interface AssemblyNames {\n name: string\n aliases?: string[]\n}\n\n// The sample a reference assembly's graphs name it by, keyed by the assembly's\n// name in lower case: HPRC writes `CHM13` where UCSC's assembly is `hs1`.\nexport const WELL_KNOWN_SAMPLES: ReadonlyMap<string, string> = new Map([\n ['hg38', 'GRCh38'],\n ['hg19', 'GRCh37'],\n ['hs1', 'CHM13'],\n ['t2t-chm13', 'CHM13'],\n ['chm13v2', 'CHM13'],\n])\n\nexport function wellKnownSample(assemblyName: string) {\n return WELL_KNOWN_SAMPLES.get(assemblyName.toLowerCase())\n}\n\nfunction sampleOf(refName: string) {\n const sample = refName.includes('#') ? panSNSample(refName) : undefined\n return sample === undefined || isGenericSample(sample) ? undefined : sample\n}\n\n// `HG002#1`, or the sample of a two-part name, which states no haplotype\nfunction haplotypeOf(refName: string) {\n return panSNHaplotype(refName) ?? panSNSample(refName)\n}\n\n// Each sample's haplotypes among the graph's walks and node refNames\nfunction graphHaplotypes(graph: Graph) {\n const refNames = new Set((graph.anchorPaths ?? []).map(p => p.name))\n for (const node of graph.nodes) {\n if (node.stable) {\n refNames.add(node.stable.refName)\n }\n }\n const bySample = new Map<string, Set<string>>()\n for (const refName of refNames) {\n const sample = sampleOf(refName)\n if (sample !== undefined) {\n const haplotypes =\n bySample.get(sample) ?? bySample.set(sample, new Set()).get(sample)!\n haplotypes.add(haplotypeOf(refName))\n }\n }\n return bySample\n}\n\nfunction backboneFrom(\n contigs: BackboneContig[],\n haplotypes: Map<string, Set<string>>,\n): Backbone {\n const samples = new Set(contigs.map(c => sampleOf(c.refName)))\n const [sample] = samples\n if (samples.size !== 1 || sample === undefined) {\n return { contigs, prefixes: [], named: false }\n }\n const own = new Set(contigs.map(c => haplotypeOf(c.refName)))\n const unique = [...(haplotypes.get(sample) ?? [])].every(h => own.has(h))\n const shared = new Set(contigs.map(c => panSNHaplotype(c.refName)))\n const [haplotype] = shared\n return {\n contigs,\n prefixes: [\n ...(unique ? [sample] : []),\n ...(shared.size === 1 && haplotype ? [haplotype] : []),\n ],\n named: true,\n }\n}\n\n// The rank-0 nodes' refNames and the span each covers\nexport function graphBackbone(graph: Graph): Backbone | undefined {\n const spans = new Map<string, BackboneContig>()\n for (const node of graph.nodes) {\n if (isBackbone(node)) {\n const { refName, start } = node.stable\n const end = start + node.length\n const span = spans.get(refName)\n if (span) {\n span.start = Math.min(span.start, start)\n span.end = Math.max(span.end, end)\n } else {\n spans.set(refName, {\n refName,\n contig: panSNContig(refName),\n start,\n end,\n })\n }\n }\n }\n const contigs = [...spans.values()]\n return contigs.length\n ? backboneFrom(contigs, graphHaplotypes(graph))\n : undefined\n}\n\n// The assembly the backbone's haplotype names by its name or an alias, else\n// the one its sample names, else the one whose well-known sample it is. A\n// backbone with no prefix binds to none.\nexport function backboneAssembly<T extends AssemblyNames>(\n backbone: Backbone | undefined,\n assemblies: T[],\n): T | undefined {\n const names = (a: T) => [a.name, ...(a.aliases ?? [])]\n const naming = (prefix: string) => (a: T) =>\n names(a).some(n => n.toLowerCase() === prefix.toLowerCase())\n const prefixes = [...(backbone?.prefixes ?? [])].reverse()\n const sample = backbone?.prefixes.find(p => !p.includes('#'))?.toLowerCase()\n for (const prefix of prefixes) {\n const assembly = assemblies.find(naming(prefix))\n if (assembly) {\n return assembly\n }\n }\n return sample === undefined\n ? undefined\n : assemblies.find(a =>\n names(a).some(n => wellKnownSample(n)?.toLowerCase() === sample),\n )\n}\n\n// The first of the graph's walks that a backbone along it would bind to\n// `assembly`, for putting x on the assembly a cut was made for\nexport function assemblyWalk(\n graph: Graph,\n assembly: AssemblyNames,\n): PathOrigin | undefined {\n const haplotypes = graphHaplotypes(graph)\n return graph.anchorPaths?.find(walk =>\n backboneAssembly(\n backboneFrom(\n [\n {\n refName: walk.name,\n contig: panSNContig(walk.name),\n start: walk.start,\n end: walk.start + walk.length,\n },\n ],\n haplotypes,\n ),\n [assembly],\n ),\n )\n}\n\n// The names a file from outside the graph may give a contig: its own, and the\n// same with or without UCSC's `chr`, the mitochondrion as M or MT either way\nexport function contigNames(contig: string) {\n const bare = contig.replace(/^chr/i, '')\n const forms = !bare ? [] : /^(M|MT)$/i.test(bare) ? ['M', 'MT'] : [bare]\n return [...new Set([contig, ...forms.flatMap(f => [f, `chr${f}`])])]\n}\n\n// Which of `refNames` a feature's refName names: the one it equals, else the\n// only one whose contig it names, by any of contigNames or the name `aliases`\n// gives that contig (`{ chr6: 'NC_000006.12' }`). A name two refNames share\n// names neither.\nexport function refNameBinding(\n refNames: Iterable<string>,\n aliases: Record<string, string> = {},\n) {\n const exact = new Set(refNames)\n const byName = new Map<string, string | undefined>()\n for (const refName of exact) {\n const contig = panSNContig(refName)\n const alias = aliases[contig]\n for (const name of new Set([\n ...contigNames(contig),\n ...(alias ? [alias] : []),\n ])) {\n byName.set(name, byName.has(name) ? undefined : refName)\n }\n }\n return (name: string) => (exact.has(name) ? name : byName.get(name))\n}\n\n// An assembly's features on a backbone that binds to it, each renamed to the\n// backbone's refName for it, so the assembly's `chr6` becomes the graph's\n// `GRCh38#0#chr6`. genePins and tubeMapGenes take only the renamed.\nexport function featuresOnBackbone<T extends { refName: string }>(\n features: readonly T[],\n backbone: Backbone,\n aliases?: Record<string, string>,\n): T[] {\n const bind = refNameBinding(\n backbone.contigs.map(c => c.refName),\n aliases,\n )\n return features.flatMap(f => {\n const refName = bind(f.refName)\n return refName === undefined\n ? []\n : [refName === f.refName ? f : { ...f, refName }]\n })\n}\n", "import { panSNMatchesPrefix, panSNSample } from './pansn.ts'\nimport { wellKnownSample } from './reference.ts'\n\nimport type { GBZBase, PathName, PathQuery, RangeOptions } from '@gmod/gbz-base'\n\n// A window of a gbz-base graph cut to GFA, with no host in it: the adapter\n// and a standalone page open the database their own way and share this.\n\nexport class NoReferenceSampleError extends Error {\n override name = 'NoReferenceSampleError'\n\n constructor(anchor: string, referenceSamples: string[]) {\n super(\n referenceSamples.length === 0\n ? `the graph names no reference sample (gbwt_reference_samples) and the anchor \"${anchor}\" maps to none; set referenceSample`\n : `the anchor \"${anchor}\" is none of the graph's reference samples (${referenceSamples.join(', ')}); set referenceSample or map it through assemblyNameToPanSN`,\n )\n }\n}\n\nexport class NodeLimitError extends Error {\n override name = 'NodeLimitError'\n\n constructor(limit: number, windowBp: number, fitsBp: number) {\n super(\n `this ${windowBp.toLocaleString()} bp window reads more than nodeLimit (${limit.toLocaleString()}) graph nodes; zoom in to about ${fitsBp.toLocaleString()} bp or raise nodeLimit`,\n )\n }\n}\n\nexport function haplotypePrefix(name: Pick<PathName, 'sample' | 'haplotype'>) {\n return `${name.sample}#${name.haplotype}`\n}\n\n// Whether a walk is one of the haplotypes asked for, by PanSN prefix at sample\n// (`HG002`) or haplotype (`HG002#1`) depth; undefined wants every one.\nexport function haplotypeWanted(name: PathName, wanted: string[] | undefined) {\n const prefix = haplotypePrefix(name)\n return (\n wanted === undefined ||\n wanted.some(candidate => panSNMatchesPrefix(prefix, candidate))\n )\n}\n\nexport async function referenceSamplesOf(db: GBZBase) {\n return ((await db.tag('gbwt_reference_samples')) ?? '')\n .split(/\\s+/)\n .filter(sample => sample !== '')\n}\n\nfunction aliasedSample(anchorSample: string, referenceSamples: string[]) {\n const lower = anchorSample.toLowerCase()\n const alias = wellKnownSample(anchorSample)?.toLowerCase()\n return (\n referenceSamples.find(s => s === anchorSample) ??\n referenceSamples.find(s => s.toLowerCase() === lower) ??\n referenceSamples.find(s => s.toLowerCase() === alias)\n )\n}\n\nexport function resolveReferenceSample({\n configured,\n anchorPrefix,\n referenceSamples,\n}: {\n configured: string\n anchorPrefix: string\n referenceSamples: string[]\n}) {\n if (configured !== '') {\n return configured\n }\n const sample =\n aliasedSample(panSNSample(anchorPrefix), referenceSamples) ??\n (referenceSamples.length === 1 ? referenceSamples[0] : undefined)\n if (sample === undefined) {\n throw new NoReferenceSampleError(anchorPrefix, referenceSamples)\n }\n return sample\n}\n\n// The indexed reference path a window on `refName` resolves against, or\n// undefined when the reference sample has no indexed path by that contig.\nexport async function referencePathQuery(\n db: GBZBase,\n referenceSample: string,\n refName: string,\n): Promise<PathQuery | undefined> {\n const path = (await db.paths()).find(\n p =>\n p.isIndexed &&\n p.name.sample === referenceSample &&\n p.name.contig === refName,\n )\n return path\n ? {\n sample: path.name.sample,\n contig: refName,\n haplotype: path.name.haplotype,\n }\n : undefined\n}\n\n// gbz-base reports the node limit with how far along the reference the walk\n// had got when it tripped; a window that fits is that far, with a margin, or\n// half the window when the limit tripped while extending past the reference.\nexport function nodeLimitError(\n error: unknown,\n limit: number,\n windowBp: number,\n) {\n const isLimit =\n error instanceof Error &&\n (error.name === 'SubgraphLimitError' ||\n /^Subgraph size limit of \\d+ nodes exceeded/.test(error.message))\n if (!isLimit) {\n return undefined\n } else {\n const walked = (error as { walkedBp?: unknown }).walkedBp\n const fits =\n typeof walked === 'number' && walked > 0\n ? Math.floor(walked * 0.8)\n : Math.floor(windowBp / 2)\n return new NodeLimitError(limit, windowBp, Math.max(fits, 1))\n }\n}\n\nexport interface GbzWindowOptions {\n context: number\n snarls: RangeOptions['snarls']\n limit: number\n keep?: (name: PathName) => boolean\n signal?: AbortSignal\n}\n\n// A cut's context and snarls unless told otherwise, and the nodes past which a\n// window fails rather than read a whole chromosome: what a gbz-base track's\n// slots default to, so a page or a script cuts the window the viewer would.\n// gbz-base counts every node it walks, which runs well past the nodes a cut\n// keeps.\nexport const GBZ_CUT_DEFAULTS = {\n context: 1000,\n snarls: 'contained',\n limit: 100_000,\n} as const satisfies Pick<GbzWindowOptions, 'context' | 'snarls' | 'limit'>\n\n// The window split wherever the reference path starts another fragment, so\n// each piece lies inside one: getSubgraphForRange cuts the fragment its window\n// starts in alone, where getAlignmentsForRange walks them all\nexport async function referencePieces(\n db: GBZBase,\n query: PathQuery,\n start: number,\n end: number,\n) {\n const inside = (await db.paths())\n .filter(\n ({ isIndexed, name }) =>\n isIndexed &&\n name.sample === query.sample &&\n name.haplotype === query.haplotype &&\n name.contig === query.contig &&\n name.fragment > start &&\n name.fragment < end,\n )\n .map(path => path.name.fragment)\n const bounds = [start, ...[...new Set(inside)].sort((a, b) => a - b), end]\n return bounds.slice(1).map((pieceEnd, i) => ({\n start: bounds[i]!,\n end: pieceEnd,\n }))\n}\n\n// One GFA from a cut per fragment: each segment and link once, and every\n// cut's reference walk ahead of the haplotype walks\nfunction joinCuts(gfas: string[]) {\n const cuts = gfas.map(gfa => gfa.split('\\n').filter(line => line !== ''))\n const ofType = (cut: string[], type: string) =>\n cut.filter(line => line.startsWith(type))\n const lines = new Set([\n ...ofType(cuts[0] ?? [], 'H'),\n ...cuts.flatMap(cut => ofType(cut, 'S')),\n ...cuts.flatMap(cut => ofType(cut, 'L')),\n ...cuts.flatMap(cut => ofType(cut, 'W').slice(0, 1)),\n ...cuts.flatMap(cut => ofType(cut, 'W').slice(1)),\n ])\n return lines.size === 0 ? '' : `${[...lines].join('\\n')}\\n`\n}\n\n// The reference walk, the snarls in the window, and one W line per haplotype\n// walk (the reference walk first), PanSN-named when the database carries the\n// haplotype index. Empty when the query names no indexed path.\nexport async function cutWindowGFA(\n db: GBZBase,\n query: PathQuery | undefined,\n start: number,\n end: number,\n { keep, ...opts }: GbzWindowOptions,\n) {\n if (!query) {\n return ''\n }\n const pieces = await referencePieces(db, query, start, end)\n const subgraphs = await Promise.all(\n pieces.map(piece =>\n db\n .getSubgraphForRange(query, piece.start, piece.end, {\n ...opts,\n haplotypes: 'all',\n ...(keep === undefined ? {} : { keep }),\n })\n .catch((error: unknown) => {\n throw nodeLimitError(error, opts.limit, end - start) ?? error\n }),\n ),\n )\n return joinCuts(\n await Promise.all(\n subgraphs.flatMap(subgraph =>\n subgraph ? [subgraph.toGFA({ names: 'resolved' })] : [],\n ),\n ),\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["WELL_KNOWN_SAMPLES", "wellKnownSample", "assemblyName", "sampleOf", "refName", "sample", "panSNSample", "isGenericSample", "haplotypeOf", "panSNHaplotype", "graphHaplotypes", "graph", "refNames", "p", "node", "bySample", "backboneFrom", "contigs", "haplotypes", "samples", "c", "own", "unique", "h", "shared", "haplotype", "graphBackbone", "spans", "isBackbone", "start", "end", "span", "panSNContig", "backboneAssembly", "backbone", "assemblies", "names", "a", "naming", "prefix", "n", "prefixes", "assembly", "assemblyWalk", "walk", "contigNames", "contig", "bare", "forms", "f", "refNameBinding", "aliases", "exact", "byName", "alias", "name", "featuresOnBackbone", "features", "bind", "NoReferenceSampleError", "anchor", "referenceSamples", "NodeLimitError", "limit", "windowBp", "fitsBp", "haplotypePrefix", "name", "haplotypeWanted", "wanted", "prefix", "candidate", "panSNMatchesPrefix", "referenceSamplesOf", "db", "sample", "aliasedSample", "anchorSample", "lower", "alias", "wellKnownSample", "s", "resolveReferenceSample", "configured", "anchorPrefix", "panSNSample", "referencePathQuery", "referenceSample", "refName", "path", "p", "nodeLimitError", "error", "walked", "fits", "GBZ_CUT_DEFAULTS", "referencePieces", "query", "start", "end", "inside", "isIndexed", "bounds", "a", "b", "pieceEnd", "i", "joinCuts", "gfas", "cuts", "gfa", "line", "ofType", "cut", "type", "lines", "cutWindowGFA", "keep", "opts", "pieces", "subgraphs", "piece", "subgraph"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as f,b as m}from"./chunk-FY3BTKY4.js";var d=f((y,l)=>{l.exports=JBrowseExports["@jbrowse/core/util/tracks"]});var c=m(d(),1),I={RgfaTabixAdapter:"rGFA segments (tabix BED pair)",MinigraphBubbleAdapter:"Minigraph bubbles (tabix BED)"},A={RgfaTabixAdapter:"Path to segments BED (.segs.bed.gz from build_rgfa_tabix.sh; the .links.bed.gz and both .tbi are assumed beside it)",MinigraphBubbleAdapter:"Path to bubbles BED (.bed.gz from gfatools bubble; the .tbi is assumed beside it)"},o=".segs.bed.gz";function g(e){let i=e.search(/[?#]/);return i===-1?{name:e,query:""}:{name:e.slice(0,i),query:e.slice(i)}}function a(e){return"uri"in e?g(e.uri).name:"localPath"in e?e.localPath:e.name}function x(e){return"uri"in e||"localPath"in e}function h(e,i){if("uri"in e){let{name:n,query:t}=g(e.uri);return{...e,uri:i(n)+t}}else{if("localPath"in e)return{...e,localPath:i(e.localPath)};throw new Error(`${e.name} was picked in the browser, which reads no file beside it; open it by URL`)}}function s(e,i){return h(e,n=>n+i)}function B(e){return x(e)&&a(e).endsWith(o)}function F(e){if(!a(e).endsWith(o))throw new Error(`Expected a segments BED ending in ${o}, got ${a(e)}`);return h(e,i=>`${i.slice(0,-o.length)}.links.bed.gz`)}function p(e,i){return i?{location:i,indexType:(0,c.makeIndexType)(a(i),"CSI","TBI")}:{location:s(e,".tbi"),indexType:"TBI"}}function L(e,i){return i!==void 0&&(0,c.makeIndexType)(a(i),"CSI","TBI")==="CSI"?{location:s(e,".csi"),indexType:"CSI"}:{location:s(e,".tbi"),indexType:"TBI"}}function u(e,i){let n=i.trim();return n?{assemblyNameToPanSN:{[e]:n}}:{}}function T({choice:e,loc:i,indexLoc:n,assembly:t,sample:r}){if(e==="MinigraphBubbleAdapter")return{type:"MinigraphBubbleAdapter",bubblesLocation:i,index:p(i,n),...u(t,r)};let b=F(i);return{type:"RgfaTabixAdapter",segmentsLocation:i,segmentsIndex:p(i,n),linksLocation:b,linksIndex:L(b,n),...u(t,r)}}function E(e){let{choice:i,assembly:n,trackId:t,name:r}=e;return{type:i==="RgfaTabixAdapter"?"GraphTrack":"FeatureTrack",trackId:t,name:r,assemblyNames:[n],adapter:T(e),...i==="RgfaTabixAdapter"?{displayDefaults:{showLabels:"none"}}:{}}}export{d as a,I as b,A as c,a as d,x as e,h as f,B as g,T as h,E as i};
2
+ //# sourceMappingURL=chunk-4T7DPQTR.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["global-externals:@jbrowse/core/util/tracks", "../../src/GraphAddTrackWorkflow/buildTrackConfig.ts"],
4
+ "sourcesContent": ["module.exports = JBrowseExports[\"@jbrowse/core/util/tracks\"];", "import { makeIndexType } from '@jbrowse/core/util/tracks'\n\nimport type { FileLocation } from '@jbrowse/core/util'\n\nexport type GraphFileChoice = 'RgfaTabixAdapter' | 'MinigraphBubbleAdapter'\n\nexport const GRAPH_FILE_LABELS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter: 'rGFA segments (tabix BED pair)',\n MinigraphBubbleAdapter: 'Minigraph bubbles (tabix BED)',\n}\n\nexport const GRAPH_FILE_FIELDS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter:\n 'Path to segments BED (.segs.bed.gz from build_rgfa_tabix.sh; the .links.bed.gz and both .tbi are assumed beside it)',\n MinigraphBubbleAdapter:\n 'Path to bubbles BED (.bed.gz from gfatools bubble; the .tbi is assumed beside it)',\n}\n\nconst SEGMENTS_SUFFIX = '.segs.bed.gz'\n\n// A url's query string (a presigned signature, a token) follows the file name\nexport function splitUri(uri: string) {\n const end = uri.search(/[?#]/)\n return end === -1\n ? { name: uri, query: '' }\n : { name: uri.slice(0, end), query: uri.slice(end) }\n}\n\nexport function locationName(loc: FileLocation) {\n return 'uri' in loc\n ? splitUri(loc.uri).name\n : 'localPath' in loc\n ? loc.localPath\n : loc.name\n}\n\n// A file picked in the browser comes without the directory it sat in\nexport function readsSiblings(loc: FileLocation) {\n return 'uri' in loc || 'localPath' in loc\n}\n\nexport function renamed(loc: FileLocation, rename: (name: string) => string) {\n if ('uri' in loc) {\n const { name, query } = splitUri(loc.uri)\n return { ...loc, uri: rename(name) + query }\n } else if ('localPath' in loc) {\n return { ...loc, localPath: rename(loc.localPath) }\n } else {\n throw new Error(\n `${loc.name} was picked in the browser, which reads no file beside it; open it by URL`,\n )\n }\n}\n\nfunction sibling(loc: FileLocation, suffix: string) {\n return renamed(loc, name => name + suffix)\n}\n\n// A segments BED the links BED can be found beside\nexport function isSegmentsLocation(loc: FileLocation) {\n return readsSiblings(loc) && locationName(loc).endsWith(SEGMENTS_SUFFIX)\n}\n\nfunction linksLocation(loc: FileLocation) {\n if (!locationName(loc).endsWith(SEGMENTS_SUFFIX)) {\n throw new Error(\n `Expected a segments BED ending in ${SEGMENTS_SUFFIX}, got ${locationName(loc)}`,\n )\n }\n return renamed(\n loc,\n name => `${name.slice(0, -SEGMENTS_SUFFIX.length)}.links.bed.gz`,\n )\n}\n\nfunction tabixIndex(loc: FileLocation, indexLoc: FileLocation | undefined) {\n return indexLoc\n ? {\n location: indexLoc,\n indexType: makeIndexType(locationName(indexLoc), 'CSI', 'TBI'),\n }\n : { location: sibling(loc, '.tbi'), indexType: 'TBI' }\n}\n\n// The links file's index is assumed beside it, of the kind the segments' is.\nfunction siblingIndex(loc: FileLocation, indexLoc: FileLocation | undefined) {\n const csi =\n indexLoc !== undefined &&\n makeIndexType(locationName(indexLoc), 'CSI', 'TBI') === 'CSI'\n return csi\n ? { location: sibling(loc, '.csi'), indexType: 'CSI' }\n : { location: sibling(loc, '.tbi'), indexType: 'TBI' }\n}\n\nfunction panSN(assembly: string, sample: string) {\n const name = sample.trim()\n return name ? { assemblyNameToPanSN: { [assembly]: name } } : {}\n}\n\nexport function buildAdapterConfig({\n choice,\n loc,\n indexLoc,\n assembly,\n sample,\n}: {\n choice: GraphFileChoice\n loc: FileLocation\n indexLoc: FileLocation | undefined\n assembly: string\n sample: string\n}) {\n if (choice === 'MinigraphBubbleAdapter') {\n return {\n type: 'MinigraphBubbleAdapter',\n bubblesLocation: loc,\n index: tabixIndex(loc, indexLoc),\n ...panSN(assembly, sample),\n }\n }\n const links = linksLocation(loc)\n return {\n type: 'RgfaTabixAdapter',\n segmentsLocation: loc,\n segmentsIndex: tabixIndex(loc, indexLoc),\n linksLocation: links,\n linksIndex: siblingIndex(links, indexLoc),\n ...panSN(assembly, sample),\n }\n}\n\nexport function buildTrackConfig(args: {\n choice: GraphFileChoice\n loc: FileLocation\n indexLoc: FileLocation | undefined\n assembly: string\n sample: string\n trackId: string\n name: string\n}) {\n const { choice, assembly, trackId, name } = args\n return {\n type: choice === 'RgfaTabixAdapter' ? 'GraphTrack' : 'FeatureTrack',\n trackId,\n name,\n assemblyNames: [assembly],\n adapter: buildAdapterConfig(args),\n ...(choice === 'RgfaTabixAdapter'\n ? { displayDefaults: { showLabels: 'none' } }\n : {}),\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["require_tracks", "__commonJSMin", "exports", "module", "import_tracks", "GRAPH_FILE_LABELS", "GRAPH_FILE_FIELDS", "SEGMENTS_SUFFIX", "splitUri", "uri", "end", "locationName", "loc", "readsSiblings", "renamed", "rename", "name", "query", "sibling", "suffix", "isSegmentsLocation", "linksLocation", "tabixIndex", "indexLoc", "siblingIndex", "panSN", "assembly", "sample", "buildAdapterConfig", "choice", "links", "buildTrackConfig", "args", "trackId"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as Gi}from"./chunk-KWAXLUPQ.js";import{a as je,c as Ve,d as Qe,e as $e,f as re}from"./chunk-KULNKXPT.js";import{a as We,b as Pe}from"./chunk-FY3BTKY4.js";var et=We((qg,At)=>{At.exports=JBrowseExports["@jbrowse/core/data_adapters/BaseAdapter"]});var Ri=We((Tg,tt)=>{tt.exports=JBrowseExports["@jbrowse/core/util/rxjs"]});var ae=0;var Ce=2;var DA=4;var eA=0,NA=1,it=2;var gt=-5;function _i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function nt(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var A=e.shift();if(A){if(typeof A!="object")throw new TypeError(A+"must be non-object");for(var i in A)_i(A,i)&&(t[i]=A[i])}}return t}function LA(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)}var mA={arraySet:function(t,e,A,i,n){if(e.subarray&&t.subarray){t.set(e.subarray(A,A+i),n);return}for(var g=0;g<i;g++)t[n+g]=e[A+g]},flattenChunks:function(t){var e,A,i,n,g,r;for(i=0,e=0,A=t.length;e<A;e++)i+=t[e].length;for(r=new Uint8Array(i),n=0,e=0,A=t.length;e<A;e++)g=t[e],r.set(g,n),n+=g.length;return r},Buf8:function(t){return new Uint8Array(t)},Buf16:function(t){return new Uint16Array(t)},Buf32:function(t){return new Int32Array(t)}},yA={arraySet:function(t,e,A,i,n){for(var g=0;g<i;g++)t[n+g]=e[A+g]},flattenChunks:function(t){return[].concat.apply([],t)},Buf8:function(t){return new Array(t)},Buf16:function(t){return new Array(t)},Buf32:function(t){return new Array(t)}},fA=()=>{let t=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";return fA=()=>t,t},O=(t,e,A,i,n)=>(O=fA()?mA.arraySet:yA.arraySet,O(t,e,A,i,n)),vA=t=>(vA=fA()?mA.flattenChunks:yA.flattenChunks,vA(t)),P=t=>(P=fA()?mA.Buf8:yA.Buf8,P(t)),tA=t=>(tA=fA()?mA.Buf16:yA.Buf16,tA(t)),IA=t=>(IA=fA()?mA.Buf32:yA.Buf32,IA(t));var It=function(){let t=!0;try{String.fromCharCode.apply(null,[0])}catch{t=!1}return It=()=>t,t},ot=function(){let t=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{t=!1}return ot=()=>t,t},Be=function(t){for(var e=P(256),A=0;A<256;A++)e[A]=A>=252?6:A>=248?5:A>=240?4:A>=224?3:A>=192?2:1;return e[254]=e[254]=1,Be=i=>e[i],e[t]};function se(t){var e,A,i,n,g,r=t.length,Q=0;for(n=0;n<r;n++)A=t.charCodeAt(n),(A&64512)===55296&&n+1<r&&(i=t.charCodeAt(n+1),(i&64512)===56320&&(A=65536+(A-55296<<10)+(i-56320),n++)),Q+=A<128?1:A<2048?2:A<65536?3:4;for(e=new Uint8Array(Q),g=0,n=0;g<Q;n++)A=t.charCodeAt(n),(A&64512)===55296&&n+1<r&&(i=t.charCodeAt(n+1),(i&64512)===56320&&(A=65536+(A-55296<<10)+(i-56320),n++)),A<128?e[g++]=A:A<2048?(e[g++]=192|A>>>6,e[g++]=128|A&63):A<65536?(e[g++]=224|A>>>12,e[g++]=128|A>>>6&63,e[g++]=128|A&63):(e[g++]=240|A>>>18,e[g++]=128|A>>>12&63,e[g++]=128|A>>>6&63,e[g++]=128|A&63);return e}function vi(t,e){if(e<65534&&(t.subarray&&ot()||!t.subarray&&It()))return String.fromCharCode.apply(null,LA(t,e));for(var A="",i=0;i<e;i++)A+=String.fromCharCode(t[i]);return A}function Qt(t){for(var e=new Uint8Array(t.length),A=0,i=e.length;A<i;A++)e[A]=t.charCodeAt(A);return e}function rt(t,e){var A,i,n,g,r=e||t.length,Q=new Array(r*2);for(i=0,A=0;A<r;){if(n=t[A++],n<128){Q[i++]=n;continue}if(g=Be(n),g>4){Q[i++]=65533,A+=g-1;continue}for(n&=g===2?31:g===3?15:7;g>1&&A<r;)n=n<<6|t[A++]&63,g--;if(g>1){Q[i++]=65533;continue}n<65536?Q[i++]=n:(n-=65536,Q[i++]=55296|n>>10&1023,Q[i++]=56320|n&1023)}return vi(Q,i)}function at(t,e){var A;for(e=e||t.length,e>t.length&&(e=t.length),A=e-1;A>=0&&(t[A]&192)===128;)A--;return A<0||A===0?e:A+Be(t[A])>e?A:e}function Ee(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}function pA(t,e,A,i){for(var n=t&65535|0,g=t>>>16&65535|0,r=0;A!==0;){r=A>2e3?2e3:A,A-=r;do n=n+e[i++]|0,g=g+n|0;while(--r);n%=65521,g%=65521}return n|g<<16|0}function Li(){for(var t,e=[],A=0;A<256;A++){t=A;for(var i=0;i<8;i++)t=t&1?3988292384^t>>>1:t>>>1;e[A]=t}return e}var Ct=function(){let t=Li();return Ct=()=>t,t};function H(t,e,A,i){var n=Ct(),g=i+A;t^=-1;for(var r=i;r<g;r++)t=t>>>8^n[(t^e[r])&255];return t^-1}var MA=30,Mi=12;function ce(t,e){var A,i,n,g,r,Q,a,I,o,h,E,B,s,N,k,u,D,w,C,d,m,c,p,y,l;A=t.state,i=t.next_in,y=t.input,n=i+(t.avail_in-5),g=t.next_out,l=t.output,r=g-(e-t.avail_out),Q=g+(t.avail_out-257),a=A.dmax,I=A.wsize,o=A.whave,h=A.wnext,E=A.window,B=A.hold,s=A.bits,N=A.lencode,k=A.distcode,u=(1<<A.lenbits)-1,D=(1<<A.distbits)-1;A:do{s<15&&(B+=y[i++]<<s,s+=8,B+=y[i++]<<s,s+=8),w=N[B&u];e:for(;;){if(C=w>>>24,B>>>=C,s-=C,C=w>>>16&255,C===0)l[g++]=w&65535;else if(C&16){d=w&65535,C&=15,C&&(s<C&&(B+=y[i++]<<s,s+=8),d+=B&(1<<C)-1,B>>>=C,s-=C),s<15&&(B+=y[i++]<<s,s+=8,B+=y[i++]<<s,s+=8),w=k[B&D];t:for(;;){if(C=w>>>24,B>>>=C,s-=C,C=w>>>16&255,C&16){if(m=w&65535,C&=15,s<C&&(B+=y[i++]<<s,s+=8,s<C&&(B+=y[i++]<<s,s+=8)),m+=B&(1<<C)-1,m>a){t.msg="invalid distance too far back",A.mode=MA;break A}if(B>>>=C,s-=C,C=g-r,m>C){if(C=m-C,C>o&&A.sane){t.msg="invalid distance too far back",A.mode=MA;break A}if(c=0,p=E,h===0){if(c+=I-C,C<d){d-=C;do l[g++]=E[c++];while(--C);c=g-m,p=l}}else if(h<C){if(c+=I+h-C,C-=h,C<d){d-=C;do l[g++]=E[c++];while(--C);if(c=0,h<d){C=h,d-=C;do l[g++]=E[c++];while(--C);c=g-m,p=l}}}else if(c+=h-C,C<d){d-=C;do l[g++]=E[c++];while(--C);c=g-m,p=l}for(;d>2;)l[g++]=p[c++],l[g++]=p[c++],l[g++]=p[c++],d-=3;d&&(l[g++]=p[c++],d>1&&(l[g++]=p[c++]))}else{c=g-m;do l[g++]=l[c++],l[g++]=l[c++],l[g++]=l[c++],d-=3;while(d>2);d&&(l[g++]=l[c++],d>1&&(l[g++]=l[c++]))}}else if((C&64)===0){w=k[(w&65535)+(B&(1<<C)-1)];continue t}else{t.msg="invalid distance code",A.mode=MA;break A}break}}else if((C&64)===0){w=N[(w&65535)+(B&(1<<C)-1)];continue e}else if(C&32){A.mode=Mi;break A}else{t.msg="invalid literal/length code",A.mode=MA;break A}break}}while(i<n&&g<Q);d=s>>3,i-=d,s-=d<<3,B&=(1<<s)-1,t.next_in=i,t.next_out=g,t.avail_in=i<n?5+(n-i):5-(i-n),t.avail_out=g<Q?257+(Q-g):257-(g-Q),A.hold=B,A.bits=s}var hA=15,Bt=852,st=592,Et=0,fe=1,ct=2,Ui=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],Yi=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],Hi=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],Ki=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function oA(t,e,A,i,n,g,r,Q){var a=Q.bits,I=0,o=0,h=0,E=0,B=0,s=0,N=0,k=0,u=0,D=0,w,C,d,m,c,p=null,y=0,l,F=tA(hA+1),R=tA(hA+1),M=null,v=0,cA,z,L;for(I=0;I<=hA;I++)F[I]=0;for(o=0;o<i;o++)F[e[A+o]]++;for(B=a,E=hA;E>=1&&F[E]===0;E--);if(B>E&&(B=E),E===0)return n[g++]=1<<24|64<<16|0,n[g++]=1<<24|64<<16|0,Q.bits=1,0;for(h=1;h<E&&F[h]===0;h++);for(B<h&&(B=h),k=1,I=1;I<=hA;I++)if(k<<=1,k-=F[I],k<0)return-1;if(k>0&&(t===Et||E!==1))return-1;for(R[1]=0,I=1;I<hA;I++)R[I+1]=R[I]+F[I];for(o=0;o<i;o++)e[A+o]!==0&&(r[R[e[A+o]]++]=o);if(t===Et?(p=M=r,l=19):t===fe?(p=Ui,y-=257,M=Yi,v-=257,l=256):(p=Hi,M=Ki,l=-1),D=0,o=0,I=h,c=g,s=B,N=0,d=-1,u=1<<B,m=u-1,t===fe&&u>Bt||t===ct&&u>st)return 1;for(;;){cA=I-N,r[o]<l?(z=0,L=r[o]):r[o]>l?(z=M[v+r[o]],L=p[y+r[o]]):(z=96,L=0),w=1<<I-N,C=1<<s,h=C;do C-=w,n[c+(D>>N)+C]=cA<<24|z<<16|L|0;while(C!==0);for(w=1<<I-1;D&w;)w>>=1;if(w!==0?(D&=w-1,D+=w):D=0,o++,--F[I]===0){if(I===E)break;I=e[A+r[o]]}if(I>B&&(D&m)!==d){for(N===0&&(N=B),c+=h,s=I-N,k=1<<s;s+N<E&&(k-=F[s+N],!(k<=0));)s++,k<<=1;if(u+=1<<s,t===fe&&u>Bt||t===ct&&u>st)return 1;d=D&m,n[d]=B<<24|s<<16|c-g|0}}return D!==0&&(n[c+D]=I-N<<24|64<<16|0),Q.bits=B,0}var qi=0,Ht=1,Kt=2,ft=4,Ti=5,UA=6,QA=0,Zi=1,Xi=2,K=-2,qt=-3,ke=-4,zi=-5,ht=8,Tt=1,lt=2,dt=3,ut=4,wt=5,kt=6,Dt=7,Nt=8,mt=9,yt=10,KA=11,j=12,he=13,pt=14,le=15,Ft=16,xt=17,bt=18,Jt=19,YA=20,HA=21,St=22,Gt=23,Rt=24,_t=25,vt=26,de=27,Lt=28,Mt=29,S=30,De=31,Oi=32,Wi=852,Pi=592;function Ut(t){return(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24)}function ji(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=tA(320),this.work=tA(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Vi(t){var e;return!t||!t.state?K:(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=Tt,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=IA(Wi),e.distcode=e.distdyn=IA(Pi),e.sane=1,e.back=-1,QA)}function $i(t){var e;return!t||!t.state?K:(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,Vi(t))}function Ag(t,e){var A,i;return!t||!t.state||(i=t.state,e<0?(A=0,e=-e):(A=(e>>4)+1,e<48&&(e&=15)),e&&(e<8||e>15))?K:(i.window!==null&&i.wbits!==e&&(i.window=null),i.wrap=A,i.wbits=e,$i(t))}function Zt(t,e){var A,i;return t?(i=new ji,t.state=i,i.window=null,A=Ag(t,e),A!==QA&&(t.state=null),A):K}var Yt=!0,ue,we;function eg(t){if(Yt){var e;for(ue=IA(512),we=IA(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(oA(Ht,t.lens,0,288,ue,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;oA(Kt,t.lens,0,32,we,0,t.work,{bits:5}),Yt=!1}t.lencode=ue,t.lenbits=9,t.distcode=we,t.distbits=5}function Xt(t,e,A,i){var n,g=t.state;return g.window===null&&(g.wsize=1<<g.wbits,g.wnext=0,g.whave=0,g.window=P(g.wsize)),i>=g.wsize?(O(g.window,e,A-g.wsize,g.wsize,0),g.wnext=0,g.whave=g.wsize):(n=g.wsize-g.wnext,n>i&&(n=i),O(g.window,e,A-i,n,g.wnext),i-=n,i?(O(g.window,e,A-i,i,0),g.wnext=i,g.whave=g.wsize):(g.wnext+=n,g.wnext===g.wsize&&(g.wnext=0),g.whave<g.wsize&&(g.whave+=n))),0}function zt(t,e){var A,i,n,g,r,Q,a,I,o,h,E,B,s,N,k=0,u,D,w,C,d,m,c,p,y=P(4),l,F,R=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&t.avail_in!==0)return K;A=t.state,A.mode===j&&(A.mode=he),r=t.next_out,n=t.output,a=t.avail_out,g=t.next_in,i=t.input,Q=t.avail_in,I=A.hold,o=A.bits,h=Q,E=a,p=QA;A:for(;;)switch(A.mode){case Tt:if(A.wrap===0){A.mode=he;break}for(;o<16;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(A.wrap&2&&I===35615){A.check=0,y[0]=I&255,y[1]=I>>>8&255,A.check=H(A.check,y,2,0),I=0,o=0,A.mode=lt;break}if(A.flags=0,A.head&&(A.head.done=!1),!(A.wrap&1)||(((I&255)<<8)+(I>>8))%31){t.msg="incorrect header check",A.mode=S;break}if((I&15)!==ht){t.msg="unknown compression method",A.mode=S;break}if(I>>>=4,o-=4,c=(I&15)+8,A.wbits===0)A.wbits=c;else if(c>A.wbits){t.msg="invalid window size",A.mode=S;break}A.dmax=1<<c,t.adler=A.check=1,A.mode=I&512?yt:j,I=0,o=0;break;case lt:for(;o<16;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(A.flags=I,(A.flags&255)!==ht){t.msg="unknown compression method",A.mode=S;break}if(A.flags&57344){t.msg="unknown header flags set",A.mode=S;break}A.head&&(A.head.text=I>>8&1),A.flags&512&&(y[0]=I&255,y[1]=I>>>8&255,A.check=H(A.check,y,2,0)),I=0,o=0,A.mode=dt;case dt:for(;o<32;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}A.head&&(A.head.time=I),A.flags&512&&(y[0]=I&255,y[1]=I>>>8&255,y[2]=I>>>16&255,y[3]=I>>>24&255,A.check=H(A.check,y,4,0)),I=0,o=0,A.mode=ut;case ut:for(;o<16;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}A.head&&(A.head.xflags=I&255,A.head.os=I>>8),A.flags&512&&(y[0]=I&255,y[1]=I>>>8&255,A.check=H(A.check,y,2,0)),I=0,o=0,A.mode=wt;case wt:if(A.flags&1024){for(;o<16;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}A.length=I,A.head&&(A.head.extra_len=I),A.flags&512&&(y[0]=I&255,y[1]=I>>>8&255,A.check=H(A.check,y,2,0)),I=0,o=0}else A.head&&(A.head.extra=null);A.mode=kt;case kt:if(A.flags&1024&&(B=A.length,B>Q&&(B=Q),B&&(A.head&&(c=A.head.extra_len-A.length,A.head.extra||(A.head.extra=new Array(A.head.extra_len)),O(A.head.extra,i,g,B,c)),A.flags&512&&(A.check=H(A.check,i,B,g)),Q-=B,g+=B,A.length-=B),A.length))break A;A.length=0,A.mode=Dt;case Dt:if(A.flags&2048){if(Q===0)break A;B=0;do c=i[g+B++],A.head&&c&&A.length<65536&&(A.head.name+=String.fromCharCode(c));while(c&&B<Q);if(A.flags&512&&(A.check=H(A.check,i,B,g)),Q-=B,g+=B,c)break A}else A.head&&(A.head.name=null);A.length=0,A.mode=Nt;case Nt:if(A.flags&4096){if(Q===0)break A;B=0;do c=i[g+B++],A.head&&c&&A.length<65536&&(A.head.comment+=String.fromCharCode(c));while(c&&B<Q);if(A.flags&512&&(A.check=H(A.check,i,B,g)),Q-=B,g+=B,c)break A}else A.head&&(A.head.comment=null);A.mode=mt;case mt:if(A.flags&512){for(;o<16;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(I!==(A.check&65535)){t.msg="header crc mismatch",A.mode=S;break}I=0,o=0}A.head&&(A.head.hcrc=A.flags>>9&1,A.head.done=!0),t.adler=A.check=0,A.mode=j;break;case yt:for(;o<32;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}t.adler=A.check=Ut(I),I=0,o=0,A.mode=KA;case KA:if(A.havedict===0)return t.next_out=r,t.avail_out=a,t.next_in=g,t.avail_in=Q,A.hold=I,A.bits=o,Xi;t.adler=A.check=1,A.mode=j;case j:if(e===Ti||e===UA)break A;case he:if(A.last){I>>>=o&7,o-=o&7,A.mode=de;break}for(;o<3;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}switch(A.last=I&1,I>>>=1,o-=1,I&3){case 0:A.mode=pt;break;case 1:if(eg(A),A.mode=YA,e===UA){I>>>=2,o-=2;break A}break;case 2:A.mode=xt;break;case 3:t.msg="invalid block type",A.mode=S}I>>>=2,o-=2;break;case pt:for(I>>>=o&7,o-=o&7;o<32;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if((I&65535)!==(I>>>16^65535)){t.msg="invalid stored block lengths",A.mode=S;break}if(A.length=I&65535,I=0,o=0,A.mode=le,e===UA)break A;case le:A.mode=Ft;case Ft:if(B=A.length,B){if(B>Q&&(B=Q),B>a&&(B=a),B===0)break A;O(n,i,g,B,r),Q-=B,g+=B,a-=B,r+=B,A.length-=B;break}A.mode=j;break;case xt:for(;o<14;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(A.nlen=(I&31)+257,I>>>=5,o-=5,A.ndist=(I&31)+1,I>>>=5,o-=5,A.ncode=(I&15)+4,I>>>=4,o-=4,A.nlen>286||A.ndist>30){t.msg="too many length or distance symbols",A.mode=S;break}A.have=0,A.mode=bt;case bt:for(;A.have<A.ncode;){for(;o<3;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}A.lens[R[A.have++]]=I&7,I>>>=3,o-=3}for(;A.have<19;)A.lens[R[A.have++]]=0;if(A.lencode=A.lendyn,A.lenbits=7,l={bits:A.lenbits},p=oA(qi,A.lens,0,19,A.lencode,0,A.work,l),A.lenbits=l.bits,p){t.msg="invalid code lengths set",A.mode=S;break}A.have=0,A.mode=Jt;case Jt:for(;A.have<A.nlen+A.ndist;){for(;k=A.lencode[I&(1<<A.lenbits)-1],u=k>>>24,D=k>>>16&255,w=k&65535,!(u<=o);){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(w<16)I>>>=u,o-=u,A.lens[A.have++]=w;else{if(w===16){for(F=u+2;o<F;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(I>>>=u,o-=u,A.have===0){t.msg="invalid bit length repeat",A.mode=S;break}c=A.lens[A.have-1],B=3+(I&3),I>>>=2,o-=2}else if(w===17){for(F=u+3;o<F;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}I>>>=u,o-=u,c=0,B=3+(I&7),I>>>=3,o-=3}else{for(F=u+7;o<F;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}I>>>=u,o-=u,c=0,B=11+(I&127),I>>>=7,o-=7}if(A.have+B>A.nlen+A.ndist){t.msg="invalid bit length repeat",A.mode=S;break}for(;B--;)A.lens[A.have++]=c}}if(A.mode===S)break;if(A.lens[256]===0){t.msg="invalid code -- missing end-of-block",A.mode=S;break}if(A.lenbits=9,l={bits:A.lenbits},p=oA(Ht,A.lens,0,A.nlen,A.lencode,0,A.work,l),A.lenbits=l.bits,p){t.msg="invalid literal/lengths set",A.mode=S;break}if(A.distbits=6,A.distcode=A.distdyn,l={bits:A.distbits},p=oA(Kt,A.lens,A.nlen,A.ndist,A.distcode,0,A.work,l),A.distbits=l.bits,p){t.msg="invalid distances set",A.mode=S;break}if(A.mode=YA,e===UA)break A;case YA:A.mode=HA;case HA:if(Q>=6&&a>=258){t.next_out=r,t.avail_out=a,t.next_in=g,t.avail_in=Q,A.hold=I,A.bits=o,ce(t,E),r=t.next_out,n=t.output,a=t.avail_out,g=t.next_in,i=t.input,Q=t.avail_in,I=A.hold,o=A.bits,A.mode===j&&(A.back=-1);break}for(A.back=0;k=A.lencode[I&(1<<A.lenbits)-1],u=k>>>24,D=k>>>16&255,w=k&65535,!(u<=o);){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(D&&(D&240)===0){for(C=u,d=D,m=w;k=A.lencode[m+((I&(1<<C+d)-1)>>C)],u=k>>>24,D=k>>>16&255,w=k&65535,!(C+u<=o);){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}I>>>=C,o-=C,A.back+=C}if(I>>>=u,o-=u,A.back+=u,A.length=w,D===0){A.mode=vt;break}if(D&32){A.back=-1,A.mode=j;break}if(D&64){t.msg="invalid literal/length code",A.mode=S;break}A.extra=D&15,A.mode=St;case St:if(A.extra){for(F=A.extra;o<F;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}A.length+=I&(1<<A.extra)-1,I>>>=A.extra,o-=A.extra,A.back+=A.extra}A.was=A.length,A.mode=Gt;case Gt:for(;k=A.distcode[I&(1<<A.distbits)-1],u=k>>>24,D=k>>>16&255,w=k&65535,!(u<=o);){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if((D&240)===0){for(C=u,d=D,m=w;k=A.distcode[m+((I&(1<<C+d)-1)>>C)],u=k>>>24,D=k>>>16&255,w=k&65535,!(C+u<=o);){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}I>>>=C,o-=C,A.back+=C}if(I>>>=u,o-=u,A.back+=u,D&64){t.msg="invalid distance code",A.mode=S;break}A.offset=w,A.extra=D&15,A.mode=Rt;case Rt:if(A.extra){for(F=A.extra;o<F;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}A.offset+=I&(1<<A.extra)-1,I>>>=A.extra,o-=A.extra,A.back+=A.extra}if(A.offset>A.dmax){t.msg="invalid distance too far back",A.mode=S;break}A.mode=_t;case _t:if(a===0)break A;if(B=E-a,A.offset>B){if(B=A.offset-B,B>A.whave&&A.sane){t.msg="invalid distance too far back",A.mode=S;break}B>A.wnext?(B-=A.wnext,s=A.wsize-B):s=A.wnext-B,B>A.length&&(B=A.length),N=A.window}else N=n,s=r-A.offset,B=A.length;B>a&&(B=a),a-=B,A.length-=B;do n[r++]=N[s++];while(--B);A.length===0&&(A.mode=HA);break;case vt:if(a===0)break A;n[r++]=A.length,a--,A.mode=HA;break;case de:if(A.wrap){for(;o<32;){if(Q===0)break A;Q--,I|=i[g++]<<o,o+=8}if(E-=a,t.total_out+=E,A.total+=E,E&&(t.adler=A.check=A.flags?H(A.check,n,E,r-E):pA(A.check,n,E,r-E)),E=a,(A.flags?I:Ut(I))!==A.check){t.msg="incorrect data check",A.mode=S;break}I=0,o=0}A.mode=Lt;case Lt:if(A.wrap&&A.flags){for(;o<32;){if(Q===0)break A;Q--,I+=i[g++]<<o,o+=8}if(I!==(A.total&4294967295)){t.msg="incorrect length check",A.mode=S;break}I=0,o=0}A.mode=Mt;case Mt:p=Zi;break A;case S:p=qt;break A;case De:return ke;case Oi:default:return K}return t.next_out=r,t.avail_out=a,t.next_in=g,t.avail_in=Q,A.hold=I,A.bits=o,(A.wsize||E!==t.avail_out&&A.mode<S&&(A.mode<de||e!==ft))&&Xt(t,t.output,t.next_out,E-t.avail_out)?(A.mode=De,ke):(h-=t.avail_in,E-=t.avail_out,t.total_in+=h,t.total_out+=E,A.total+=E,A.wrap&&E&&(t.adler=A.check=A.flags?H(A.check,n,E,t.next_out-E):pA(A.check,n,E,t.next_out-E)),t.data_type=A.bits+(A.last?64:0)+(A.mode===j?128:0)+(A.mode===YA||A.mode===le?256:0),(h===0&&E===0||e===ft)&&p===QA&&(p=zi),p)}function Ot(t){if(!t||!t.state)return K;var e=t.state;return e.window&&(e.window=null),t.state=null,QA}function Wt(t,e){var A;return!t||!t.state||(A=t.state,(A.wrap&2)===0)?K:(A.head=e,e.done=!1,QA)}function Ne(t,e){var A=e.length,i,n,g;return!t||!t.state||(i=t.state,i.wrap!==0&&i.mode!==KA)?K:i.mode===KA&&(n=1,n=pA(n,e,A,0),n!==i.check)?qt:(g=Xt(t,e,A,A),g?(i.mode=De,ke):(i.havedict=1,QA))}var qA={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};function me(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var ye=Object.prototype.toString,pe=class t{constructor(e){if(!(this instanceof t))return new t(e);this.options=nt({chunkSize:16384,windowBits:0,to:""},e||{});var A=this.options;A.raw&&A.windowBits>=0&&A.windowBits<16&&(A.windowBits=-A.windowBits,A.windowBits===0&&(A.windowBits=-15)),A.windowBits>=0&&A.windowBits<16&&!(e&&e.windowBits)&&(A.windowBits+=32),A.windowBits>15&&A.windowBits<48&&(A.windowBits&15)===0&&(A.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new me,this.strm.avail_out=0;var i=Zt(this.strm,A.windowBits);if(i!==eA)throw new Error(qA[i]);if(this.header=new Ee,Wt(this.strm,this.header),A.dictionary&&(typeof A.dictionary=="string"?A.dictionary=se(A.dictionary):ye.call(A.dictionary)==="[object ArrayBuffer]"&&(A.dictionary=new Uint8Array(A.dictionary)),A.raw&&(i=Ne(this.strm,A.dictionary),i!==eA)))throw new Error(qA[i])}push(e,A){var i=this.strm,n=this.options.chunkSize,g=this.options.dictionary,r,Q,a,I,o,h,E=!1;if(this.ended)return!1;Q=A===~~A?A:A===!0?DA:ae,typeof e=="string"?i.input=Qt(e):ye.call(e)==="[object ArrayBuffer]"?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=P(n),i.next_out=0,i.avail_out=n),r=zt(i,ae),r===it&&g&&(typeof g=="string"?h=se(g):ye.call(g)==="[object ArrayBuffer]"?h=new Uint8Array(g):h=g,r=Ne(this.strm,h)),r===gt&&E===!0&&(r=eA,E=!1),r!==NA&&r!==eA)return this.onEnd(r),this.ended=!0,!1;i.next_out&&(i.avail_out===0||r===NA||i.avail_in===0&&(Q===DA||Q===Ce))&&(this.options.to==="string"?(a=at(i.output,i.next_out),I=i.next_out-a,o=rt(i.output,a),i.next_out=I,i.avail_out=n-I,I&&O(i.output,i.output,a,I,0),this.onData(o)):this.onData(LA(i.output,i.next_out))),i.avail_in===0&&i.avail_out===0&&(E=!0)}while((i.avail_in>0||i.avail_out===0)&&r!==NA);return r===NA&&(Q=DA),Q===DA?(r=Ot(this.strm),this.onEnd(r),this.ended=!0,r===eA):(Q===Ce&&(this.onEnd(eA),i.avail_out=0),!0)}onData(e){this.chunks.push(e)}onEnd(e){e===eA&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=vA(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg}};function tg(t,e){var A=new pe(e);if(A.push(t,!0),A.err)throw A.msg||qA[A.err];return A.result}var Pt=tg;function jt(t,e,A){let i=[],n=0,g=e;for(;n+26<=t.length&&!(t[n]!==31||t[n+1]!==139||t[n+2]!==8||t[n+3]!==4||t[n+10]!==6||t[n+12]!==66||t[n+13]!==67);){let r=(t[n+16]|t[n+17]<<8)+1;if(r<26||n+r>t.length)break;let Q=n+r-8,a=(t[Q+4]|t[Q+5]<<8|t[Q+6]<<16|t[Q+7]<<24)>>>0;if(i.push({inputOffset:n,compressedSize:r,decompressedSize:a,filePosition:g}),g>=A)break;n+=r,g+=r}return i}function Vt(t){let e=0;for(let n of t)e+=n.length;let A=new Uint8Array(e),i=0;for(let n of t)A.set(n,i),i+=n.length;return A}var iA={};iA.d=(t,e)=>{if(Array.isArray(e))for(var A=0;A<e.length;){var i=e[A++],n=e[A++];iA.o(t,i)?n===0&&A++:n===0?Object.defineProperty(t,i,{enumerable:!0,value:e[A++]}):Object.defineProperty(t,i,{enumerable:!0,get:n})}else for(var i in e)iA.o(e,i)&&!iA.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})};iA.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);iA.r=t=>{Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var be={};iA.r(be);iA.d(be,{ChunkSliceResult:()=>dA,__wbg_Error_92b29b0548f8b746:()=>gg,__wbg___wbindgen_throw_344f42d3211c4765:()=>ng,__wbg_set_wasm:()=>oi,decompress_all:()=>ei,decompress_chunk_slice:()=>ti});var ig="data:application/wasm;base64,AGFzbQEAAAABfRFgAABgAAF/YAF/AGABfwF/YAJ/fwBgAn9/AX9gA39/fwBgA39/fwF/YAR/f39/AGAEf39/fwF/YAV/f39/fwBgBX9/f39/AX9gBn9/f39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gCH9/f39/f39/AX9gB39/f3x8fHwAAm4CES4vYmd6Zl93YXNtX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfMzQ0ZjQyZDMyMTFjNDc2NQAEES4vYmd6Zl93YXNtX2JnLmpzHF9fd2JnX0Vycm9yXzkyYjI5YjA1NDhmOGI3NDYABQNsawMODxAFCQINBwYJBAUEBAgFBQQKEAYEBwUEBAcEDAwGCgYEAgICDAIGBwQDBQMEBgYFBQsEAgYCAgQEBQMCAgEEAgUCBAYGDQIEBAcJAgQFBQYEBwADBQUEAAAEBAQFBAUCAgICBAQFAAAABAUBcAEaGgUDAQARBhkDfwFBgIDAAAt/AEGkmsAAC38AQdSawAALB6wCDAZtZW1vcnkCABtfX3diZ19jaHVua3NsaWNlcmVzdWx0X2ZyZWUAFBxjaHVua3NsaWNlcmVzdWx0X3Rha2VfYnVmZmVyAB4gY2h1bmtzbGljZXJlc3VsdF90YWtlX2Nwb3NpdGlvbnMAGyBjaHVua3NsaWNlcmVzdWx0X3Rha2VfZHBvc2l0aW9ucwAcDmRlY29tcHJlc3NfYWxsABcWZGVjb21wcmVzc19jaHVua19zbGljZQAWD19fYWJvcnRfaGFuZGxlcgMBFV9faW5zdGFuY2VfdGVybWluYXRlZAMCH19fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIAVxFfX3diaW5kZ2VuX2V4cG9ydABIEl9fd2JpbmRnZW5fZXhwb3J0MgAzCR8BAEEBCxlsPkVnPSw8aEMrE1VRMFBePzQYJExLEmBSCp3GAWvNJAIJfwF+IwBBEGsiASQAAkACQAJAAkAgAEH1AUkNAAJAIABBzP97TQ0AQQAhAAwECyAAQQtqIgJBeHEhA0EAKAKYnkAiBEUNAkEfIQUgAEH1//8HTw0BIANBJiACQQh2ZyIAa3ZBAXEgAEEBdGtBPmohBQwBCwJAAkACQAJAAkACQEEAKAKUnkAiBkEQIABBC2pB+ANxIABBC0kbIgNBA3YiAnYiAEEDcUUNACAAQX9zQQFxIAJqIgdBA3QiA0GMnMAAaiIAIANBlJzAAGooAgAiAigCCCIIRg0BIAggADYCDCAAIAg2AggMAgsgA0EAKAKcnkBNDQYgAA0CQQAoApieQCIARQ0GIABoQQJ0QfyawABqKAIAIggoAgRBeHEgA2shAiAIIQYDQAJAIAgoAhAiAA0AIAgoAhQiAA0AIAYoAhghBQJAAkACQCAGKAIMIgAgBkcNACAGQRRBECAGKAIUIgAbaigCACIIDQFBACEADAILIAYoAggiCCAANgIMIAAgCDYCCAwBCyAGQRRqIAZBEGogABshBwNAIAchCSAIIgBBFGogAEEQaiAAKAIUIggbIQcgAEEUQRAgCBtqKAIAIggNAAsgCUEANgIACyAFRQ0GAkACQCAGIAYoAhxBAnRB/JrAAGoiCCgCAEYNAAJAIAUoAhAgBkYNACAFIAA2AhQgAA0CDAkLIAUgADYCECAADQEMCAsgCCAANgIAIABFDQYLIAAgBTYCGAJAIAYoAhAiCEUNACAAIAg2AhAgCCAANgIYCyAGKAIUIghFDQYgACAINgIUIAggADYCGAwGCyAAKAIEQXhxIANrIgggAiAIIAJJIggbIQIgACAGIAgbIQYgACEIDAALC0EAIAZBfiAHd3E2ApSeQAsgAkEIaiEAIAIgA0EDcjYCBCACIANqIgMgAygCBEEBcjYCBAwFCwJAAkAgACACdEECIAJ0IgBBACAAa3JxaCIJQQN0IgJBjJzAAGoiCCACQZScwABqKAIAIgAoAggiB0YNACAHIAg2AgwgCCAHNgIIDAELQQAgBkF+IAl3cTYClJ5ACyAAIANBA3I2AgQgACADaiIGIAIgA2siCEEBcjYCBCAAIAJqIAg2AgACQEEAKAKcnkAiAkUNAEEAKAKknkAhAwJAAkBBACgClJ5AIgdBASACQQN2dCIJcQ0AQQAgByAJcjYClJ5AIAJBeHFBjJzAAGoiAiEHDAELIAJBeHEiAkGMnMAAaiEHIAJBlJzAAGooAgAhAgsgByADNgIIIAIgAzYCDCADIAc2AgwgAyACNgIICyAAQQhqIQBBACAGNgKknkBBACAINgKcnkAMBAtBAEEAKAKYnkBBfiAGKAIcd3E2ApieQAsCQAJAAkAgAkEQSQ0AIAYgA0EDcjYCBCAGIANqIgggAkEBcjYCBCAIIAJqIAI2AgBBACgCnJ5AIgdFDQFBACgCpJ5AIQACQAJAQQAoApSeQCIJQQEgB0EDdnQiBXENAEEAIAkgBXI2ApSeQCAHQXhxQYycwABqIgchCQwBCyAHQXhxIgdBjJzAAGohCSAHQZScwABqKAIAIQcLIAkgADYCCCAHIAA2AgwgACAJNgIMIAAgBzYCCAwBCyAGIAIgA2oiAEEDcjYCBCAGIABqIgAgACgCBEEBcjYCBAwBC0EAIAg2AqSeQEEAIAI2ApyeQAsgBkEIaiIARQ0BDAILQQAgA2shAgJAAkACQAJAIAVBAnRB/JrAAGooAgAiBg0AQQAhCEEAIQAMAQtBACEIIANBAEEZIAVBAXZrIAVBH0YbdCEHQQAhAANAAkAgBiIGKAIEQXhxIgkgA0kNACAJIANrIgkgAk8NACAGIQggCSECIAkNAEEAIQIgBiEAIAYhCAwDCyAGKAIUIgkgACAJIAYgB0EddkEEcWooAhAiBkcbIAAgCRshACAHQQF0IQcgBg0ACwsCQCAAIAhyDQBBACEIQQIgBXQiAEEAIABrciAEcSIARQ0DIABoQQJ0QfyawABqKAIAIQALIABFDQELA0AgACgCBEF4cSIGIANrIgcgAiAHIAJJIgkbIQUgBiADSSEHIAAgCCAJGyEJAkAgACgCECIGDQAgACgCFCEGCyACIAUgBxshAiAIIAkgBxshCCAGIQAgBg0ACwsgCEUNAAJAQQAoApyeQCIAIANJDQAgAiAAIANrTw0BCyAIKAIYIQUCQAJAAkAgCCgCDCIAIAhHDQAgCEEUQRAgCCgCFCIAG2ooAgAiBg0BQQAhAAwCCyAIKAIIIgYgADYCDCAAIAY2AggMAQsgCEEUaiAIQRBqIAAbIQcDQCAHIQkgBiIAQRRqIABBEGogACgCFCIGGyEHIABBFEEQIAYbaigCACIGDQALIAlBADYCAAsCQCAFRQ0AAkACQAJAIAggCCgCHEECdEH8msAAaiIGKAIARg0AAkAgBSgCECAIRg0AIAUgADYCFCAADQIMBAsgBSAANgIQIAANAQwDCyAGIAA2AgAgAEUNAQsgACAFNgIYAkAgCCgCECIGRQ0AIAAgBjYCECAGIAA2AhgLIAgoAhQiBkUNASAAIAY2AhQgBiAANgIYDAELQQBBACgCmJ5AQX4gCCgCHHdxNgKYnkALAkACQCACQRBJDQAgCCADQQNyNgIEIAggA2oiACACQQFyNgIEIAAgAmogAjYCAAJAIAJBgAJJDQAgACACEBAMAgsCQAJAQQAoApSeQCIGQQEgAkEDdnQiB3ENAEEAIAYgB3I2ApSeQCACQfgBcUGMnMAAaiICIQYMAQsgAkH4AXEiAkGMnMAAaiEGIAJBlJzAAGooAgAhAgsgBiAANgIIIAIgADYCDCAAIAY2AgwgACACNgIIDAELIAggAiADaiIAQQNyNgIEIAggAGoiACAAKAIEQQFyNgIECyAIQQhqIgANAQsCQAJAAkACQAJAAkBBACgCnJ5AIgAgA08NAAJAQQAoAqCeQCIAIANLDQAgAUEEakHAnsAAIANBr4AEakGAgHxxECECQCABKAIEIgYNAEEAIQAMCAsgASgCDCEFQQBBACgCrJ5AIAEoAggiCWoiADYCrJ5AQQAgAEEAKAKwnkAiAiAAIAJLGzYCsJ5AAkACQAJAQQAoAqieQCICRQ0AQfybwAAhAANAIAYgACgCACIIIAAoAgQiB2pGDQIgACgCCCIADQAMAwsLAkACQEEAKAK4nkAiAEUNACAGIABPDQELQQAgBjYCuJ5AC0EAQf8fNgK8nkBBACAFNgKInEBBACAJNgKAnEBBACAGNgL8m0BBAEGMnMAANgKYnEBBAEGUnMAANgKgnEBBAEGMnMAANgKUnEBBAEGcnMAANgKonEBBAEGUnMAANgKcnEBBAEGknMAANgKwnEBBAEGcnMAANgKknEBBAEGsnMAANgK4nEBBAEGknMAANgKsnEBBAEG0nMAANgLAnEBBAEGsnMAANgK0nEBBAEG8nMAANgLInEBBAEG0nMAANgK8nEBBAEHEnMAANgLQnEBBAEG8nMAANgLEnEBBAEHMnMAANgLYnEBBAEHEnMAANgLMnEBBAEHMnMAANgLUnEBBAEHUnMAANgLgnEBBAEHUnMAANgLcnEBBAEHcnMAANgLonEBBAEHcnMAANgLknEBBAEHknMAANgLwnEBBAEHknMAANgLsnEBBAEHsnMAANgL4nEBBAEHsnMAANgL0nEBBAEH0nMAANgKAnUBBAEH0nMAANgL8nEBBAEH8nMAANgKInUBBAEH8nMAANgKEnUBBAEGEncAANgKQnUBBAEGEncAANgKMnUBBAEGMncAANgKYnUBBAEGUncAANgKgnUBBAEGMncAANgKUnUBBAEGcncAANgKonUBBAEGUncAANgKcnUBBAEGkncAANgKwnUBBAEGcncAANgKknUBBAEGsncAANgK4nUBBAEGkncAANgKsnUBBAEG0ncAANgLAnUBBAEGsncAANgK0nUBBAEG8ncAANgLInUBBAEG0ncAANgK8nUBBAEHEncAANgLQnUBBAEG8ncAANgLEnUBBAEHMncAANgLYnUBBAEHEncAANgLMnUBBAEHUncAANgLgnUBBAEHMncAANgLUnUBBAEHcncAANgLonUBBAEHUncAANgLcnUBBAEHkncAANgLwnUBBAEHcncAANgLknUBBAEHsncAANgL4nUBBAEHkncAANgLsnUBBAEH0ncAANgKAnkBBAEHsncAANgL0nUBBAEH8ncAANgKInkBBAEH0ncAANgL8nUBBAEGEnsAANgKQnkBBAEH8ncAANgKEnkBBACAGQQ9qQXhxIgBBeGoiAjYCqJ5AQQBBhJ7AADYCjJ5AQQAgBiAAayAJQVhqIgBqQQhqIgg2AqCeQCACIAhBAXI2AgQgBiAAakEoNgIEQQBBgICAATYCtJ5ADAgLIAIgBk8NACAIIAJLDQAgACgCDCIIQQFxDQAgCEEBdiAFRg0DC0EAQQAoArieQCIAIAYgACAGSRs2ArieQCAGIAlqIQhB/JvAACEAAkACQAJAA0AgACgCACIHIAhGDQEgACgCCCIADQAMAgsLIAAoAgwiCEEBcQ0AIAhBAXYgBUYNAQtB/JvAACEAAkADQAJAIAAoAgAiCCACSw0AIAIgCCAAKAIEaiIISQ0CCyAAKAIIIQAMAAsLQQAgBkEPakF4cSIAQXhqIgc2AqieQEEAIAYgAGsgCUFYaiIAakEIaiIENgKgnkAgByAEQQFyNgIEIAYgAGpBKDYCBEEAQYCAgAE2ArSeQCACIAhBYGpBeHFBeGoiACAAIAJBEGpJGyIHQRs2AgRBACkC/JtAIQogB0EQakEAKQKEnEA3AgAgB0EIaiIAIAo3AgBBACAFNgKInEBBACAJNgKAnEBBACAGNgL8m0BBACAANgKEnEAgB0EcaiEAA0AgAEEHNgIAIABBBGoiACAISQ0ACyAHIAJGDQcgByAHKAIEQX5xNgIEIAIgByACayIAQQFyNgIEIAcgADYCAAJAIABBgAJJDQAgAiAAEBAMCAsCQAJAQQAoApSeQCIIQQEgAEEDdnQiBnENAEEAIAggBnI2ApSeQCAAQfgBcUGMnMAAaiIAIQgMAQsgAEH4AXEiAEGMnMAAaiEIIABBlJzAAGooAgAhAAsgCCACNgIIIAAgAjYCDCACIAg2AgwgAiAANgIIDAcLIAAgBjYCACAAIAAoAgQgCWo2AgQgBkEPakF4cUF4aiIIIANBA3I2AgQgB0EPakF4cUF4aiICIAggA2oiAGshAyACQQAoAqieQEYNAyACQQAoAqSeQEYNBAJAIAIoAgQiBkEDcUEBRw0AIAIgBkF4cSIGEA8gBiADaiEDIAIgBmoiAigCBCEGCyACIAZBfnE2AgQgACADQQFyNgIEIAAgA2ogAzYCAAJAIANBgAJJDQAgACADEBAMBgsCQAJAQQAoApSeQCICQQEgA0EDdnQiBnENAEEAIAIgBnI2ApSeQCADQfgBcUGMnMAAaiIDIQIMAQsgA0H4AXEiA0GMnMAAaiECIANBlJzAAGooAgAhAwsgAiAANgIIIAMgADYCDCAAIAI2AgwgACADNgIIDAULQQAgACADayICNgKgnkBBAEEAKAKonkAiACADaiIINgKonkAgCCACQQFyNgIEIAAgA0EDcjYCBCAAQQhqIQAMBgtBACgCpJ5AIQICQAJAIAAgA2siCEEPSw0AQQBBADYCpJ5AQQBBADYCnJ5AIAIgAEEDcjYCBCACIABqIgAgACgCBEEBcjYCBAwBC0EAIAg2ApyeQEEAIAIgA2oiBjYCpJ5AIAYgCEEBcjYCBCACIABqIAg2AgAgAiADQQNyNgIECyACQQhqIQAMBQsgACAHIAlqNgIEQQBBACgCqJ5AIgBBD2pBeHEiAkF4aiIINgKonkBBACAAIAJrQQAoAqCeQCAJaiICakEIaiIGNgKgnkAgCCAGQQFyNgIEIAAgAmpBKDYCBEEAQYCAgAE2ArSeQAwDC0EAIAA2AqieQEEAQQAoAqCeQCADaiIDNgKgnkAgACADQQFyNgIEDAELQQAgADYCpJ5AQQBBACgCnJ5AIANqIgM2ApyeQCAAIANBAXI2AgQgACADaiADNgIACyAIQQhqIQAMAQtBACEAQQAoAqCeQCICIANNDQBBACACIANrIgI2AqCeQEEAQQAoAqieQCIAIANqIgg2AqieQCAIIAJBAXI2AgQgACADQQNyNgIEIABBCGohAAsgAUEQaiQAIAALwh0BFn8gASACaiIHIAJBESACQRFJG2shCCADIARqIgkgBEGXAiAEQZcCSRtrIQogAEGk2gBqIQsgAEGYyQBqIQwgAEHg1QBqIQ0gAEHMA2ohDkEAIQ9BACEQQQAhAiABIREgAyEEAkADQAJAAkAgByARa0EDSw0AIAIhEiAQQf8BcSICQRdLDQEDQAJAAkAgESAHRg0AIBEtAAAgAnQgEnIhEiARQQFqIREMAQtBASETIAchESAPQQFqIg9BBEsNBQsgEEEIaiIQQf8BcSICQRhJDQAMAgsLIBEoAAAgEEH/AXF0IAJyIRIgESAQQQN2QQdxa0EDaiERIBBBGHIhEAtBASETAkACQAJAAkACQAJAIBJBAXZBA3EOAwQBAAcLQQAhFCAAQQA6AKBaIBBBb2ohAiASQRF2IRUgEkENdiIWQQ9xIhdBBGohECASQQh2QR9xQQFqIRggEkEDdkEfcUGBAmohGQNAAkACQCACQf8BcSITQQJNDQAgAiEaDAELAkAgByARa0EDSw0AIAIhGgNAAkACQCARIAdGDQAgES0AACATdCAVciEVIBFBAWohEQwBC0EBIRMgByERIA9BAWoiD0EESw0LCyAaQQhqIhpB/wFxIhNBGEkNAAwCCwsgAkEYciEaIBEoAAAgE3QgFXIhFSARIAJBA3ZBB3FrQQNqIRELIAAgFEGQisAAai0AAGogFUEHcToAACAaQX1qIQIgFUEDdiEVIBRBAWoiFCAQRw0ACwJAIBdBD0YNAAJAIBZBf3NBA3EiFEUNAANAIAAgEEGQisAAai0AAGpBADoAACAQQQFqIRAgFEF/aiIUDQALCyAXQXRqQQNJDQADQCAAIBBBkIrAAGotAABqQQA6AAAgACAQQZGKwABqLQAAakEAOgAAIAAgEEGSisAAai0AAGpBADoAACAAIBBBk4rAAGotAABqQQA6AAAgEEEEaiIQQRNHDQALCwJAIA4gAEETQbCKwABBB0EHIA1BABAEDQBBAQ8LIBkgGGohF0EAIRADQAJAAkAgAkH/AXEiFEENTQ0AIAIhGgwBCwJAIAcgEWtBA0sNACACIRoDQAJAAkAgESAHRg0AIBEtAAAgFHQgFXIhFSARQQFqIREMAQtBASETIAchESAPQQFqIg9BBEsNCwsgGkEIaiIaQf8BcSIUQRhJDQAMAgsLIAJBGHIhGiARKAAAIBR0IBVyIRUgESACQQN2QQdxa0EDaiERCyAAIBVB/wBxQQJ0akHMA2ooAgAiFEEQdiETIBogFGshAiAVIBRB/wFxdiEVAkACQCAUQf//P0sNACAAIBBqIBM6AAAgEEEBaiEQDAELAkACQAJAAkAgE0Fwag4CAAECCwJAIBANAEEBDwsgACAQaiIUQQVqIBRBf2otAAAiGjoAACAUQQRqIBo6AAAgFEEDaiAaOgAAIBRBAmogGjoAACAUQQFqIBo6AAAgFCAaOgAAIAJBfmohAiAVQQNxQQNqIRQgFUECdiEVDAILIAAgEGoiFEIANwAAIBRBCGpBADsAACACQX1qIQIgFUEHcUEDaiEUIBVBA3YhFQwBCyAAIBBqQQAgFUH/AHFBC2oiFBAdGiACQXlqIQIgFUEHdiEVCyAUIBBqIRALIBAgF0kNAAsgECAXRg0BQQEPCyAQQX1qIQIgEkEDdiEVIAAtAKBaDQEgAEEBOgCgWkEAIRADQCAAIBBqIhRCiJCgwICBgoQINwAAIBRBCGpBCDoAACAQQQlqIhBBkAFHDQALQZB/IRADQCAAIBBqQYACakKJkqTIkKHChAk3AAAgEEEIaiIQDQALIABChYqUqNCgwYIFNwC4AiAAQoWKlKjQoMGCBTcAsAIgAEKFipSo0KDBggU3AKgCIABChYqUqNCgwYIFNwCgAiAAQoiQoMCAgYKECDcAmAIgAEKHjpy48ODBgwc3AJACIABCh46cuPDgwYMHNwCIAiAAQoeOnLjw4MGDBzcAgAJBICEYQaACIRkLAkAgDCAAIBlqIBhBgIvAAEEIQQ8gDUEAEAQNAEEBDwsgACAAIBlBgIzAAEELQQ8gDSALEAQNAEEBDwtBfyALKAIAdEF/cyEXAkACQCARIAhPDQAgBCAKTw0AIAJBGHIhECARIAJBA3ZBB3FrQQNqIRQgACARKAAAIAJB/wFxdCAVciIVIBdxQQJ0aigCACEYA0AgECAYayEQIBUgGEH/AXEiE3YhAgJAAkACQAJAIBhBAEgNAAJAIBhBgIACcQ0AIAIhEQwDCwJAIBhBgMAAcUUNACAUIREMCQsgECAAIAJBfyAYQQh2dEF/c3EgGEEQdmpBAnRqKAIAIhhrIRAgAiAYQf8BcSITdiERIBhBAE4NASARIQILIAQgGEEQdjoAACAEQQFqIQQgFCgAACAQQf8BcXQgAnIhFSAUIBBBA3ZBB3FrQQNqIRQgACACIBdxQQJ0aigCACEYDAILIAIhFSAYQYDAAHFFDQAgESECIBQhEQwGCyAQQRhyIRkgFCgAACAQQf8BcXQgEXIhGiAUIBBBA3ZBB3FrQQNqIRQCQCAAIBFB/wFxQQJ0akGYyQBqKAIAIhFBgIACcUUNACAUKAAAIBlBeGoiAkH3AXF0IBpBCHYiEHIhGiAAIBBBfyARQQh2QT9xdEF/c3EgEUEQdmpBAnRqQZjJAGooAgAhESACQRhyIRkgFCACQQN2QQZxa0EDaiEUCwJAIBpBfyARQf8BcSIWdEF/c3EgEUEIdkH/AXF2IhsgEUEQdiIcaiICIAQgA2tNDQBBAQ8LIBVBfyATdEF/c3EhEyAUKAAAIBkgEWsiEEH/AXF0IBogFnYiGXIhFSAEIBMgGEEIdkH/AXF2IBhBEHZqIhNqIREgBCACayEaIBQgEEEDdkEHcWtBA2ohFCAAIBkgF3FBAnRqKAIAIRgCQAJAIAJBBEkNACAEIBooAAA2AAAgBCAaKAAENgAEIAQgGigACDYACCAEIBooAAw2AAwgBCAaKAAQNgAQIBNBFUgNAUEAIAJrIRMDQCAEQRRqIhogBCATaiICQRRqKAAANgAAIARBGGogAkEYaigAADYAACAEQRxqIAJBHGooAAA2AAAgBEEgaiACQSBqKAAANgAAIARBJGogAkEkaigAADYAACAEQShqIQIgGiEEIAIgEUkNAAwCCwsCQCACQQFHDQAgBCAaLQAAQYGChAhsIho2AAwgBCAaNgAIIAQgGjYABCAEIBo2AAAgE0ERSA0BIARBEGohAgNAIAIgGjYAACACQQxqIBo2AAAgAkEIaiAaNgAAIAJBBGogGjYAACACQRBqIgIgEUkNAAwCCwsgBCAaKAAAIho2AAAgBCACaiAaNgAAIBtBAXQgHEEBdGohGiACQQNsIRYDQCAEIBpqIAQgAmoiEygAACIZNgAAIAQgFmogGTYAACATIAJqIgQgGmogEUkNAAsLIBEhBAsgEEEYciEQIBQgCE8NAiAEIApJDQAMAgsLIAIhECARIRQLA0ACQAJAIAcgFGtBA0sNACAQQf8BcSICQRdLDQEDQAJAAkAgFCAHRg0AIBQtAAAgAnQgFXIhFSAUQQFqIRQMAQtBASETIAchFCAPQQFqIg9BBEsNCAsgEEEIaiIQQf8BcSICQRhJDQAMAgsLIBQoAAAgEEH/AXF0IBVyIRUgFCAQQQN2QQdxa0EDaiEUIBBBGHIhEAsgECAAIBUgF3FBAnRqKAIAIgJrIRAgFSACQf8BcXYhEQJAAkAgAkGAgAFxDQAgFSEaIBEhFQwBCyAQIAAgEUF/IAJBCHZBP3F0QX9zcSACQRB2akECdGooAgAiAmshECARIAJB/wFxdiEVIBEhGgsgAkEQdiERAkAgAkF/Sg0AAkAgBCAJRw0AQQMPCyAEIBE6AAAgBEEBaiEEDAELAkAgAkGAwABxRQ0AIBUhAiAUIREMAwsCQCAaQX8gAkH/AXF0QX9zcSACQQh2Qd8BcXYgEWoiGiAJIARrTQ0AQQMPCwJAAkAgByAUa0EDSw0AIBBB/wFxIgJBF0sNAQNAAkACQCAUIAdGDQAgFC0AACACdCAVciEVIBRBAWohFAwBC0EBIRMgByEUIA9BAWoiD0EESw0ICyAQQQhqIhBB/wFxIgJBGEkNAAwCCwsgFCgAACAQQf8BcXQgFXIhFSAUIBBBA3ZBB3FrQQNqIRQgEEEYciEQCwJAIAAgFUH/AXFBAnRqQZjJAGooAgAiAkGAgAJxRQ0AIAAgFUEIdiIVQX8gAkEIdkE/cXRBf3NxIAJBEHZqQQJ0akGYyQBqKAIAIQIgEEF4aiERAkACQCAHIBRrQQNLDQAgEUH/AXEiE0EXTQ0BIBEhEAwCCyARQRhyIRAgFCgAACARQf8BcXQgFXIhFSAUIBFBA3ZBB3FrQQNqIRQMAQsDQAJAAkAgFCAHRg0AIBQtAAAgE3QgFXIhFSAUQQFqIRQMAQtBASETIAchFCAPQQFqIg9BBEsNBwsgEEH/AXEhEyAQQQhqIhEhECATQRhJDQALIBFBeGohEAsCQCAVQX8gAkH/AXEiE3RBf3NxIAJBCHZB/wFxdiACQRB2aiIRIAQgA2tNDQBBAQ8LIBAgAmshECAVIBN2IRUgBCAEIBFrIgItAAA6AAAgBCACLQABOgABIARBAmohAiAEIBpqIQRBACARayERA0AgAiACIBFqLQAAOgAAIAJBAWoiAiAESQ0ADAELCwsCQCAPIBBB/QFqQQN2QR9xIgJNDQBBAQ8LAkAgByARIA8gAmtqIhFrQQRODQBBAQ8LAkAgES8AAiARLwAAIgJzQf//A3FB//8DRg0AQQEPCwJAIAkgBGsgAk4NAEEDDwsCQCAHIBFBBGoiEWsgAk4NAEEBDwsgBCARIAIQGSACaiEEIBEgAmohEUEAIQ9BACEQQQAhAgsgEkEBcUUNAAtBASETIA8gEEEDdkEfcSICSw0AAkAgBUUNACAFIBEgDyACa2ogAWs2AgALAkACQCAGRQ0AIAYgBCADazYCAAwBC0ECIRMgBCAJRw0BC0EAIRMLIBMLjw8BD38jAEGAAWsiCCQAIAVBAWoiCUEHcSEKQQAhCwJAIAVBB0kNACAJQXhxIQxBACELIAhBwABqIQkDQCAJQgA3AwAgCUEYakIANwMAIAlBEGpCADcDACAJQQhqQgA3AwAgCUEgaiEJIAwgC0EIaiILRw0ACwsCQCAKRQ0AIAhBwABqIAtBAnRqIQkDQCAJQQA2AgAgCUEEaiEJIApBf2oiCg0ACwsCQCACRQ0AIAJBA3EhC0EAIQoCQCACQQRJDQAgAkF8cSENQQAhCgNAIAhBwABqIAEgCmoiCS0AAEECdGoiDCAMKAIAQQFqNgIAIAhBwABqIAlBAWotAABBAnRqIgwgDCgCAEEBajYCACAIQcAAaiAJQQJqLQAAQQJ0aiIMIAwoAgBBAWo2AgAgCEHAAGogCUEDai0AAEECdGoiCSAJKAIAQQFqNgIAIA0gCkEEaiIKRw0ACwsgC0UNACABIApqIQkDQCAIQcAAaiAJLQAAQQJ0aiIKIAooAgBBAWo2AgAgCUEBaiEJIAtBf2oiCw0ACwsCQAJAIAVBAk8NACAFIQ4MAQsgCEHAAGogBUECdGohCQNAAkAgCSgCAEUNACAFIQ4MAgsgCUF8aiEJQQEhDiAFQX9qIgVBAUsNAAsLAkAgB0UNACAHIA4gBCAOIARJGyIENgIAC0EAIQkgCEEANgIAIAggCCgCQCIFNgIEQQEhCgJAIA5BAkkNAEEBIQkgDkF/aiIKQQFxIQ8CQAJAIA5BAkcNAEEAIQsMAQsgCkF+cSEQIAhBwABqQQhyIQkgCEEMciEKQQAhC0EAIQwDQCAKQXxqIAlBfGooAgAiDSAFaiIFNgIAIAogCSgCACIHIAVqIgU2AgAgByALQQJ0IA1BAXRqaiELIAlBCGohCSAKQQhqIQogECAMQQJqIgxHDQALIAxBAWohCQsCQCAPRQ0AIAlBAnQiCSAIakEEaiAIQcAAaiAJaigCACIJIAVqNgIAIAkgC0EBdGohCwsgC0EBdCEJIA4hCgsgCEHAAGogCkECdGooAgAgCWohDQJAIAJFDQAgAkEBcSEHQQAhCQJAIAJBAUYNACACQX5xIQxBACEJA0AgBiAIIAEgCWoiCi0AAEECdGoiCygCACIFQQF0aiAJOwEAIAsgBUEBajYCACAIIApBAWotAABBAnRqIgogCigCACIKQQFqNgIAIAYgCkEBdGogCUEBajsBACAMIAlBAmoiCUcNAAsLIAdFDQAgCCABIAlqLQAAQQJ0aiIKIAooAgAiCkEBajYCACAGIApBAXRqIAk7AQALAkACQCANQQEgDnQiCU0NAEEAIQYMAQsgBiAIKAIAQQF0aiEQAkACQAJAIA0gCUkNACAIQcAAakEEciEJQQAhBwNAIAdBAWohByAJKAIAIQwgCUEEaiEJIAxFDQALQQAhESAHIARNDQFBACENDAILAkACQCANDQBBACEJDAELQQAhBiANQQEgDkF/anRHDQMgCCgCREEBRw0DIBAvAQAhCQsgAyAJQQJ0aigCAEGBAmohC0EBIQZBASEJA0AgACALNgIAIABBBGohACAJIAR2IQogCUEBaiEJIApFDQAMAwsLQQEgB3QhCiAIQcAAakEEciEBQQAhDQNAIApBf2ohCSAHQYECbCEGA0AgACANQQJ0aiAGIAMgEC8BAEECdGooAgBqNgIAAkAgDSAJRw0AQQEhBiAEIAdNDQRBASEGIAdBAWohCQJAIAQgB2tBAXFFDQAgACAKQQJ0IgtqIAAgCxAZGiAKQQF0IQogCSEHCyAEIAlGDQQgBCAHayELA0AgACAKQQJ0IglqIAAgCRAZGiAAIApBA3QiCmogACAKEBkaIAkhCiALQX5qIgsNAAwFCwtBgICAgHggCSANc2d2IgtBf2ogDXEgC3IhDSAQQQJqIRAgDEF/aiIMDQALIAEgB0ECdGohCQNAAkAgB0EBaiIHIARLDQAgACAKQQJ0IgtqIAAgCxAZGiAKQQF0IQoLIAkoAgAhDCAJQQRqIQkgDEUNAAsgByAETQ0ACwtBASAEdCICQX9qIRIgCEHAAGpBBHIhE0F/IQkDQCATIAdBAnRqIQ5BfyAHdEF/cyEUIAcgBGsiFUGBAmwhFkEBIBV0IgZBAnQhBQNAAkACQCANIBJxIg8gCUcNACACIQsgCSEPDAELIBUhCiAGIQECQCAMIAZPDQAgDiEJIBUhCiAMIQsDQCAJKAIAIQEgCUEEaiEJIAEgC0EBdGoiC0EBIApBAWoiCnQiAUkNAAsLIAAgD0ECdGogAkEQdCAKQQh0ciAEckGAgANyNgIAIAEgAmohCyACIRELIAAgESANIAR2aiIKQQJ0aiEJIBYgAyAQLwEAQQJ0aigCAGohAQNAIAkgATYCACAJIAVqIQkgCiAGaiIKIAtJDQALAkAgDSAURw0AQQEhBgwDC0GAgICAeCANIBRzZ3YiCUF/aiANcSAJciENIBBBAmohECALIQIgDyEJIAxBf2oiDA0ACwNAIAdBAWohByAOKAIAIQwgDkEEaiEOIAxFDQALIAshAiAPIQkMAAsLIAhBgAFqJAAgBguiCwERfyMAQdAAayIHJAACQAJAAkACQAJAAkACQCACQRpJDQAgAS0AAEEfRw0AIAEtAAFBiwFHDQAgAS0AAkEIRw0AIAEtAANBBEcNACABLQAKQQZHDQAgAS0ADEHCAEcNACABLQANQcMARw0AIAEvABAiCEEZSQ0AIAIgCE0NACABIAhqQX1qKAAAQYCABEsNABBqQYABQQgQWCIJRQ0BQQAhCiAHQQA2AgwgByAJNgIIIAdBEDYCBBBqQYABQQgQWCILRQ0CIAdBADYCGCAHIAs2AhQgB0EQNgIQIAEgAhAaIghBAEgNA0EBIQwCQCAIRQ0AEGpBASEKIAhBARBYIgxFDQQLIAcgDDYCICAHIAg2AhwgB0EANgIkAkBBAC0AtJpAQQFGDQBBABAnCwJAAkBBACgCrJpADQBBAEF/NgKsmkBBACgClJpADQYgBvwDIQxBAEF/NgKUmkACQEEAKAKgmkAiCEGAgARPDQAgCCEKAkBBgIAEIAhrIg1BACgCmJpAIAhrTQ0AQZiawAAgCCANECNBACgCoJpAIQoLQQAoApyaQCIOIApqIQ0CQCAIQf//A0YNAAJAQf//AyAIayIPRQ0AIA1BACAP/AsACyAOIAogCGtB//8DaiIKaiENCyANQQA6AABBACAKQQFqNgKgmkALIAT8AyEQIAxBAWohEUEAIQ9BACEOQQAhCgJAA0AgAiAKTQ0BIAIgCmsiDEEaSQ0BIAEgCmoiCC0AAEEfRw0BIAgtAAFBiwFHDQEgCC0AAkEIRw0BIAgtAANBBEcNASAILQAKQQZHDQEgCC0ADEHCAEcNASAILQANQcMARw0BIAgvABAiDUEZSQ0BIAwgDU0NASAIIA1qQX1qKAAAIgxBgIAESw0BIAxBACgCoJpAIhJLDQkgB0EoakGwmsAAIAhBEmogDUFnakEAKAKcmkAiEyAMECggBy0AKA0DIAMgCrigIQYCQCAOIAcoAgRHDQAgB0EEahApIAcoAgghCQsgCSAPaiAGOQMAIAcgDkEBaiIONgIMAkAgBygCGCIIIAcoAhBHDQAgB0EQahApCyAHKAIUIgsgCEEDdGogBDkDACAHIAhBAWoiFDYCGAJAIAwgESAMIBFJGyAMIAYgBWYiFRsiFkEAIBAgChsiEk0NAAJAIBYgEmsiFiAHKAIcIAcoAiQiF2tNDQAgB0EcaiAXIBYQIyAHKAIkIRcLAkAgFkUNACAHKAIgIBdqIBMgEmogFvwKAAALIAcgFyAWajYCJAsgBEEAIAwgEmsiEiASIAxLG7igIQQgD0EIaiEPIAogDWpBAWohCiAVRQ0ACyADIAq4oCEDAkAgBygCBCAORw0AIAdBBGoQKQsgBygCCCAPaiADOQMAIAcgDkEBajYCDAJAIBQgBygCEEcNACAHQRBqECkgBygCFCELCyALIBRBA3RqIAQ5AwAgByAIQQJqNgIYC0EAQQAoApSaQEEBajYClJpAQQBBACgCrJpAQQFqNgKsmkAgACAHKQIcNwIAIAAgBykCEDcCGCAAIAcoAhg2AiAgByAHKAIkNgIwIAcgBykCBDcCNCAAIAcpAzA3AgggByAHKAIMNgI8IAAgBykDODcCEAwIC0HohcAAEDcAC0EAQQAoApSaQEEBajYClJpAQQBBACgCrJpAQQFqNgKsmkBBuIbAAEEUEGIhAiAAQX82AgAgACACNgIEAkAgBygCHCIARQ0AIAcoAiAgAEEBEFMLAkAgBygCECIARQ0AIAsgAEEDdEEIEFMLIAcoAgQiAEUNBiAHKAIIIABBA3RBCBBTDAYLQcyGwABBExBiIQIgAEF/NgIAIAAgAjYCBAwFC0EIQYABEEYAC0EIQYABEEYACyAKIAgQRgALQYiGwAAQNwALQQAgDCASQfiFwAAQEQALIAdB0ABqJAAL6wYBCH8CQAJAIAEgAEEDakF8cSICIABrIgNJDQAgASADayIEQQJ2IgVFDQAgBEEDcSEGQQAhB0EAIQECQCACIABGDQBBACEIQQAhAQJAIAAgAmsiCUF8Sw0AQQAhCEEAIQEDQCABIAAgCGoiAiwAAEG/f0pqIAJBAWosAABBv39KaiACQQJqLAAAQb9/SmogAkEDaiwAAEG/f0pqIQEgCEEEaiIIDQALCyAAIAhqIQIDQCABIAIsAABBv39KaiEBIAJBAWohAiAJQQFqIgkNAAsLIAAgA2ohCQJAIAZFDQAgCSAEQfz///8HcWoiAiwAAEG/f0ohByAGQQFGDQAgByACLAABQb9/SmohByAGQQJGDQAgByACLAACQb9/SmohBwsgByABaiEIA0AgCSEDIAVFDQIgBUHAASAFQcABSRsiB0EDcSEGAkACQCAHQQJ0IgRB8AdxIgENAEEAIQIMAQsgAyABaiEAQQAhAiADIQEDQCABQQxqKAIAIglBf3NBB3YgCUEGdnJBgYKECHEgAUEIaigCACIJQX9zQQd2IAlBBnZyQYGChAhxIAFBBGooAgAiCUF/c0EHdiAJQQZ2ckGBgoQIcSABKAIAIglBf3NBB3YgCUEGdnJBgYKECHEgAmpqamohAiABQRBqIgEgAEcNAAsLIAUgB2shBSADIARqIQkgAkEIdkH/gfwHcSACQf+B/AdxakGBgARsQRB2IAhqIQggBkUNAAsgAyAHQfwBcUECdGoiAigCACIBQX9zQQd2IAFBBnZyQYGChAhxIQECQCAGQQFGDQAgAigCBCIJQX9zQQd2IAlBBnZyQYGChAhxIAFqIQEgBkECRg0AIAIoAggiAkF/c0EHdiACQQZ2ckGBgoQIcSABaiEBCyABQQh2Qf+BHHEgAUH/gfwHcWpBgYAEbEEQdiAIaiEIDAELAkAgAQ0AQQAPCyABQQNxIQJBACEJQQAhCAJAIAFBBEkNACABQXxxIQVBACEIQQAhCQNAIAggACAJaiIBLAAAQb9/SmogAUEBaiwAAEG/f0pqIAFBAmosAABBv39KaiABQQNqLAAAQb9/SmohCCAFIAlBBGoiCUcNAAsgAkUNAQsgACAJaiEBA0AgCCABLAAAQb9/SmohCCABQQFqIQEgAkF/aiICDQALCyAIC/UGAQZ/AkACQAJAAkACQAJAAkACQCAAQXxqIgQoAgAiBUF4cSIGQQRBCCAFQQNxIgcbIAFqSQ0AIAFBJ2ohCAJAIAdFDQAgBiAISw0CCwJAAkAgAkEJSQ0AIAIgAxAOIgINAUEADwtBACECIANBzP97Sw0IQRAgA0ELakF4cSADQQtJGyEBIABBeGohCAJAIAcNACABQYACSQ0HIAhFDQcgBiABTQ0HIAYgAWtBgIAISw0HIAAPCyAIIAZqIQcCQAJAIAYgAU8NACAHQQAoAqieQEYNAQJAIAdBACgCpJ5ARg0AIAcoAgQiBUECcQ0JIAVBeHEiCSAGaiIFIAFJDQkgByAJEA8CQCAFIAFrIgdBEEkNACAEIAEgBCgCAEEBcXJBAnI2AgAgCCABaiIBIAdBA3I2AgQgCCAFaiIFIAUoAgRBAXI2AgQgASAHEA0MCQsgBCAFIAQoAgBBAXFyQQJyNgIAIAggBWoiASABKAIEQQFyNgIEDAgLQQAoApyeQCAGaiIHIAFJDQgCQAJAIAcgAWsiBkEPSw0AIAQgBUEBcSAHckECcjYCACAIIAdqIgEgASgCBEEBcjYCBEEAIQZBACEBDAELIAQgASAFQQFxckECcjYCACAIIAFqIgEgBkEBcjYCBCAIIAdqIgcgBjYCACAHIAcoAgRBfnE2AgQLQQAgATYCpJ5AQQAgBjYCnJ5ADAcLIAYgAWsiBkEPTQ0GIAQgASAFQQFxckECcjYCACAIIAFqIgEgBkEDcjYCBCAHIAcoAgRBAXI2AgQgASAGEA0MBgtBACgCoJ5AIAZqIgcgAUsNBAwGCwJAIAMgASADIAFJGyIDRQ0AIAIgACAD/AoAAAsgBCgCACIDQXhxIgdBBEEIIANBA3EiAxsgAWpJDQIgA0UNBiAHIAhNDQZBzJbAAEEuQfyWwAAQRwALQYyWwABBLkG8lsAAEEcAC0HMlsAAQS5B/JbAABBHAAtBjJbAAEEuQbyWwAAQRwALIAQgASAFQQFxckECcjYCACAIIAFqIgUgByABayIBQQFyNgIEQQAgATYCoJ5AQQAgBTYCqJ5ACyAIRQ0AIAAPCyADEAIiAUUNAQJAIANBfEF4IAQoAgAiAkEDcRsgAkF4cWoiAiADIAJJGyIDRQ0AIAEgACAD/AoAAAsgASECCyAAEAgLIAILoAYBBH8gAEF4aiIBIABBfGooAgAiAkF4cSIAaiEDAkACQCACQQFxDQAgAkECcUUNASABKAIAIgIgAGohAAJAIAEgAmsiAUEAKAKknkBHDQAgAygCBEEDcUEDRw0BQQAgADYCnJ5AIAMgAygCBEF+cTYCBCABIABBAXI2AgQgAyAANgIADwsgASACEA8LAkACQAJAAkACQAJAAkACQCADKAIEIgJBAnENACADQQAoAqieQEYNAiADQQAoAqSeQEYNAyADIAJBeHEiAhAPIAEgAiAAaiIAQQFyNgIEIAEgAGogADYCACABQQAoAqSeQEcNAUEAIAA2ApyeQA8LIAMgAkF+cTYCBCABIABBAXI2AgQgASAAaiAANgIACyAAQYACSQ0EIAEgABAQQQBBACgCvJ5AQX9qIgE2AryeQCABDQZBACgChJxAIgANAkH/HyEBDAMLQQAgATYCqJ5AQQBBACgCoJ5AIABqIgA2AqCeQCABIABBAXI2AgQCQCABQQAoAqSeQEcNAEEAQQA2ApyeQEEAQQA2AqSeQAsgAEEAKAK0nkAiAk0NBUEAKAKonkAiAEUNBUEAKAKgnkAiBEEpSQ0EQfybwAAhAQNAAkAgASgCACIDIABLDQAgACADIAEoAgRqSQ0GCyABKAIIIQEMAAsLQQAgATYCpJ5AQQBBACgCnJ5AIABqIgA2ApyeQCABIABBAXI2AgQgASAAaiAANgIADwtBACEBA0AgAUEBaiEBIAAoAggiAA0ACyABQf8fIAFB/x9LGyEBC0EAIAE2AryeQA8LAkACQEEAKAKUnkAiA0EBIABBA3Z0IgJxDQBBACADIAJyNgKUnkAgAEH4AXFBjJzAAGoiACEDDAELIABB+AFxIgBBjJzAAGohAyAAQZScwABqKAIAIQALIAMgATYCCCAAIAE2AgwgASADNgIMIAEgADYCCA8LAkACQEEAKAKEnEAiAA0AQf8fIQEMAQtBACEBA0AgAUEBaiEBIAAoAggiAA0ACyABQf8fIAFB/x9LGyEBC0EAIAE2AryeQCAEIAJNDQBBAEF/NgK0nkALC9kFAgh/AX5BK0F/IAAoAggiBkGAgIABcSIHGyEIIAdBFXZBASABGyAFaiEJAkACQCAGQYCAgARxDQBBACECDAELAkACQCADQRBJDQAgAiADEAYhBwwBCwJAIAMNAEEAIQcMAQsgA0EDcSEKQQAhC0EAIQcCQCADQQRJDQAgA0EMcSEMQQAhC0EAIQcDQCAHIAIgC2oiDSwAAEG/f0pqIA1BAWosAABBv39KaiANQQJqLAAAQb9/SmogDUEDaiwAAEG/f0pqIQcgDCALQQRqIgtHDQALIApFDQELIAIgC2ohDQNAIAcgDSwAAEG/f0pqIQcgDUEBaiENIApBf2oiCg0ACwsgByAJaiEJCyAIQS0gARshDAJAAkAgCSAALwEMIgFPDQACQAJAAkAgBkGAgIAIcQ0AIAEgCWshCEEAIQdBACEBAkACQAJAIAZBHXZBA3EOBAIAAQACCyAIIQEMAQsgCEH+/wNxQQF2IQELIAZB////AHEhCSAAKAIEIQsgACgCACEKA0AgB0H//wNxIAFB//8DcU8NAkEBIQ0gB0EBaiEHIAogCSALKAIQEQUARQ0ADAULCyAAIAApAggiDqdBgICA/3lxQbCAgIACcjYCCEEBIQ0gACgCACIKIAAoAgQiCyAMIAIgAxA1DQNBACEHIAEgCWtB//8DcSECA0AgB0H//wNxIAJPDQJBASENIAdBAWohByAKQTAgCygCEBEFAEUNAAwECwtBASENIAogCyAMIAIgAxA1DQIgCiAEIAUgCygCDBEHAA0CQQAhByAIIAFrQf//A3EhAANAIAdB//8DcSICIABJIQ0gAiAATw0DIAdBAWohByAKIAkgCygCEBEFAEUNAAwDCwtBASENIAogBCAFIAsoAgwRBwANASAAIA43AghBAA8LQQEhDSAAKAIAIgcgACgCBCIKIAwgAiADEDUNACAHIAQgBSAKKAIMEQcAIQ0LIA0L+gQBB38CQAJAIAAoAggiA0GAgIDAAXFFDQACQAJAAkACQAJAIANBgICAgAFxRQ0AIAAvAQ4iBA0BQQAhAgwCCwJAIAJBEEkNACABIAIQBiEFDAQLAkAgAg0AQQAhBQwECyACQQNxIQZBACEHQQAhBQJAIAJBBEkNACACQQxxIQRBACEFQQAhBwNAIAUgASAHaiIILAAAQb9/SmogCEEBaiwAAEG/f0pqIAhBAmosAABBv39KaiAIQQNqLAAAQb9/SmohBSAEIAdBBGoiB0cNAAsgBkUNBAsgASAHaiEIA0AgBSAILAAAQb9/SmohBSAIQQFqIQggBkF/aiIGDQAMBAsLIAEgAmohB0EAIQIgASEIIAQhBgNAIAgiBSAHRg0CAkACQCAFLAAAIghBf0wNACAFQQFqIQgMAQsCQCAIQWBPDQAgBUECaiEIDAELIAVBBEEDIAhBb0sbaiEICyAIIAVrIAJqIQIgBkF/aiIGDQALC0EAIQYLIAQgBmshBQsgBSAALwEMIghPDQAgCCAFayEJQQAhBUEAIQQCQAJAAkAgA0EddkEDcQ4EAgABAgILIAkhBAwBCyAJQf7/A3FBAXYhBAsgA0H///8AcSEHIAAoAgQhBiAAKAIAIQACQANAIAVB//8DcSAEQf//A3FPDQFBASEIIAVBAWohBSAAIAcgBigCEBEFAA0DDAALC0EBIQggACABIAIgBigCDBEHAA0BQQAhBSAJIARrQf//A3EhAgNAIAVB//8DcSIEIAJJIQggBCACTw0CIAVBAWohBSAAIAcgBigCEBEFAA0CDAALCyAAKAIAIAEgAiAAKAIEKAIMEQcAIQgLIAgL7QQBCX8jAEEQayIDJAACQAJAAkACQAJAAkAgAkEaSQ0AIAEtAABBH0cNACABLQABQYsBRw0AIAEtAAJBCEcNACABLQADQQRHDQAgAS0ACkEGRw0AIAEtAAxBwgBHDQAgAS0ADUHDAEcNACABLwAQIgRBGUkNACACIARNDQAgASAEakF9aigAAEGAgARLDQBBACEEIAEgAhAaIgVBAEgNBEEBIQYCQCAFRQ0AEGpBASEEIAVBARBZIgZFDQULAkBBAC0AtJpAQQFGDQBBABAnCwJAQQAoAqyaQA0AQQAhB0EAQX82AqyaQEEAIQgDQCACIAhrIglBGkkNBCABIAhqIgQtAABBH0cNBCAELQABQYsBRw0EIAQtAAJBCEcNBCAELQADQQRHDQQgBC0ACkEGRw0EIAQtAAxBwgBHDQQgBC0ADUHDAEcNBCAELwAQIgpBGUkNBCAJIApNDQQgBCAKakF9aigAACIJQYCABEsNBCAJIAdqIgsgCUkNByALIAVLDQcgA0EIakGwmsAAIARBEmogCkFnaiAGIAdqIAkQKCADLQAIDQMgCyEHIAggCmpBAWoiCCACTQ0ACyAIIAIgAkGohsAAEBEAC0HohcAAEDcAC0HMhsAAQRMQYiECIABBfzYCACAAIAI2AgQMAgtBAEEAKAKsmkBBAWo2AqyaQEG4hsAAQRQQYiECIABBfzYCACAAIAI2AgQgBUUNASAGIAVBARBTDAELIAAgBTYCCCAAIAY2AgQgACAFNgIAQQBBACgCrJpAQQFqNgKsmkALIANBEGokAA8LIAQgBRBGAAsgByALIAVBmIbAABARAAvABAEIfyMAQRBrIgQkAAJAAkACQCADQQFxDQAgAi0AACIFDQFBACEFDAILIAAgAiADQQF2IAEoAgwRBwAhBQwBCyABKAIMIQZBACEHA0AgAkEBaiEIAkACQAJAAkACQCAFwEF/Sg0AIAVB/wFxIglBgAFGDQEgCUHAAUcNAyAEIAE2AgQgBCAANgIAIARCoICAgAY3AgggAyAHQQN0aiIFKAIAIAQgBSgCBBEFAEUNAkEBIQUMBgsCQCAAIAggBUH/AXEiBSAGEQcADQAgCCAFaiECDAQLQQEhBQwFCwJAIAAgAkEDaiIFIAIvAAEiAiAGEQcADQAgBSACaiECDAMLQQEhBQwECyAHQQFqIQcgCCECDAELQaCAgIAGIQoCQCAFQQFxRQ0AIAJBBWohCCACKAABIQoLQQAhCQJAAkAgBUECcQ0AQQAhCyAIIQIMAQsgCEECaiECIAgvAAAhCwsCQAJAIAVBBHENACACIQgMAQsgAkECaiEIIAIvAAAhCQsCQAJAIAVBCHENACAIIQIMAQsgCEECaiECIAgvAAAhBwsCQCAFQRBxRQ0AIAMgC0H//wNxQQN0ai8BBCELCwJAIAVBIHFFDQAgAyAJQf//A3FBA3RqLwEEIQkLIAQgCTsBDiAEIAs7AQwgBCAKNgIIIAQgATYCBCAEIAA2AgACQCADIAdBA3RqIgUoAgAgBCAFKAIEEQUARQ0AQQEhBQwDCyAHQQFqIQcLIAItAAAiBQ0AC0EAIQULIARBEGokACAFC4MEAQJ/IAAgAWohAgJAAkACQCAAKAIEIgNBAXENACADQQJxRQ0BIAAoAgAiAyABaiEBAkAgACADayIAQQAoAqSeQEcNACACKAIEQQNxQQNHDQFBACABNgKcnkAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCACIAE2AgAPCyAAIAMQDwsCQAJAAkAgAigCBCIDQQJxDQAgAkEAKAKonkBGDQIgAkEAKAKknkBGDQQgAiADQXhxIgMQDyAAIAMgAWoiAUEBcjYCBCAAIAFqIAE2AgAgAEEAKAKknkBHDQFBACABNgKcnkAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsCQCABQYACSQ0AIAAgARAQDwsCQAJAQQAoApSeQCICQQEgAUEDdnQiA3ENAEEAIAIgA3I2ApSeQCABQfgBcUGMnMAAaiIBIQIMAQsgAUH4AXEiAUGMnMAAaiECIAFBlJzAAGooAgAhAQsgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtBACAANgKonkBBAEEAKAKgnkAgAWoiATYCoJ5AIAAgAUEBcjYCBCAAQQAoAqSeQEcNAEEAQQA2ApyeQEEAQQA2AqSeQAsPC0EAIAA2AqSeQEEAQQAoApyeQCABaiIBNgKcnkAgACABQQFyNgIEIAAgAWogATYCAAvvAgEFf0EAIQICQCABQc3/eyAAQRAgAEEQSxsiAGtPDQAgAEEQIAFBC2pBeHEgAUELSRsiA2pBDGoQAiIBRQ0AIAFBeGohAgJAAkAgAEF/aiIEIAFxDQAgAiEADAELIAFBfGoiBSgCACIGQXhxIAQgAWpBACAAa3FBeGoiAUEAIAAgASACa0EQSxtqIgAgAmsiAWshBAJAIAZBA3FFDQAgACAEIAAoAgRBAXFyQQJyNgIEIAAgBGoiBCAEKAIEQQFyNgIEIAUgASAFKAIAQQFxckECcjYCACACIAFqIgQgBCgCBEEBcjYCBCACIAEQDQwBCyACKAIAIQIgACAENgIEIAAgAiABajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIANBEGpNDQAgACADIAFBAXFyQQJyNgIEIAAgA2oiASACIANrIgNBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASADEA0LIABBCGohAgsgAguJAwEEfyAAKAIMIQICQAJAAkACQCABQYACSQ0AIAAoAhghAwJAAkACQCACIABHDQAgAEEUQRAgACgCFCICG2ooAgAiAQ0BQQAhAgwCCyAAKAIIIgEgAjYCDCACIAE2AggMAQsgAEEUaiAAQRBqIAIbIQQDQCAEIQUgASICQRRqIAJBEGogAigCFCIBGyEEIAJBFEEQIAEbaigCACIBDQALIAVBADYCAAsgA0UNAgJAAkAgACAAKAIcQQJ0QfyawABqIgEoAgBGDQAgAygCECAARg0BIAMgAjYCFCACDQMMBAsgASACNgIAIAJFDQQMAgsgAyACNgIQIAINAQwCCwJAIAIgACgCCCIERg0AIAQgAjYCDCACIAQ2AggPC0EAQQAoApSeQEF+IAFBA3Z3cTYClJ5ADwsgAiADNgIYAkAgACgCECIBRQ0AIAIgATYCECABIAI2AhgLIAAoAhQiAUUNACACIAE2AhQgASACNgIYDwsPC0EAQQAoApieQEF+IAAoAhx3cTYCmJ5AC8cCAQR/QQAhAgJAIAFBCHYiA0UNAEEfIQIgAUGAgIAITw0AIAFBJiADZyICa3ZBAXEgAkEBdHJBPnMhAgsgAEIANwIQIAAgAjYCHCACQQJ0QfyawABqIQMCQEEAKAKYnkBBASACdCIEcQ0AIAMgADYCACAAIAM2AhggACAANgIMIAAgADYCCEEAQQAoApieQCAEcjYCmJ5ADwsCQAJAAkAgAygCACIEKAIEQXhxIAFHDQAgBCECDAELIAFBAEEZIAJBAXZrIAJBH0YbdCEDA0AgBCADQR12QQRxaiIFKAIQIgJFDQIgA0EBdCEDIAIhBCACKAIEQXhxIAFHDQALCyACKAIIIgMgADYCDCACIAA2AgggAEEANgIYIAAgAjYCDCAAIAM2AggPCyAFQRBqIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AggLpQICAX8BfiMAQSBrIgQkAAJAAkACQCAAIAJLDQAgASACSw0BQRetQiCGIQUgACABTQ0CIAQgADYCCCAEIAE2AgwgBCAFIARBDGqthDcDGCAEIAUgBEEIaq2ENwMQQb6AwAAgBEEQaiADEDEACyAEIAA2AgggBCACNgIMIARBF61CIIYiBSAEQQxqrYQ3AxggBCAFIARBCGqthDcDEEHmgMAAIARBEGogAxAxAAsgBCABNgIIIAQgAjYCDCAEQRetQiCGIgUgBEEMaq2ENwMYIAQgBSAEQQhqrYQ3AxBBn4HAACAEQRBqIAMQMQALIAQgATYCCCAEIAI2AgwgBCAFIARBDGqthDcDGCAEIAUgBEEIaq2ENwMQQZ+BwAAgBEEQaiADEDEAC6cCAQd/IwBBEGsiAiQAQQohAyAAKAIAIgQhBQJAIARB6AdJDQBBCiEDIAQhBQNAIAJBBmogA2oiBkF8aiAFIgAgAEGQzgBuIgVBkM4AbGsiB0H//wNxQeQAbiIIQQF0LwC0mEA7AAAgBkF+aiAHIAhB5ABsa0H//wNxQQF0LwC0mEA7AAAgA0F8aiEDIABB/6ziBEsNAAsLAkACQCAFQQlLDQAgBSEADAELIAJBBmogA0F+aiIDaiAFIAVB//8DcUHkAG4iAEHkAGxrQf//A3FBAXQvALSYQDsAAAsCQAJAIARFDQAgAEUNAQsgAkEGaiADQX9qIgNqIABBAXQtALWYQDoAAAsgAUEBQQFBACACQQZqIANqQQogA2sQCSEDIAJBEGokACADC5oCAQZ/IAAoAgghAgJAAkAgAUGAAU8NAEEBIQMMAQsCQCABQYAQTw0AQQIhAwwBC0EDQQQgAUGAgARJGyEDCwJAIAMgACgCACACa00NACAAIAIgA0EBQQEQIgsgACgCBCACaiEEAkACQCABQYABSQ0AIAFBP3FBgH9yIQUgAUEGdiEGAkAgAUGAEE8NACAEIAU6AAEgBCAGQcABcjoAAAwCCyABQQx2IQcgBkE/cUGAf3IhBgJAIAFB//8DSw0AIAQgBToAAiAEIAY6AAEgBCAHQeABcjoAAAwCCyAEIAU6AAMgBCAGOgACIAQgB0E/cUGAf3I6AAEgBCABQRJ2QXByOgAADAELIAQgAToAAAsgACADIAJqNgIIQQALggIBB38jAEEQayICJAACQAJAAkACQCABDQAgAEUNASAAQXhqIgEoAgBBAUcNAiAAKAIgIQMgACgCHCEEIAAoAhQhBSAAKAIQIQYgACgCCCEHIAAoAgQhCCABQQA2AgACQCABQX9GDQAgAEF8aiIAIAAoAgBBf2oiADYCACAADQAgAUEwQQQQUwsCQCAIRQ0AIAcgCEEBEFMLAkAgBkUNACAFIAZBA3RBCBBTCyAERQ0DIAMgBEEDdEEIEFMMAwsgAEUNACAAQXhqIgAgACgCAEF/aiIBNgIAIAIgADYCDCABDQIgAkEMahAlDAILEFsAC0HwhsAAQT8QWgALIAJBEGokAAuKAgEDfyMAQSBrIgUkAAJAAkACQAJAAkACQAJAAkBBARAvQf8BcQ4DBAEAAQtBACgC7JpAIgZBf0wNAyAGQQFqIgcgBkgNBEEAIAc2AuyaQEEAKALwmkBFDQEgBUEIaiAAIAEoAhQRBAAgBSAEOgAdIAUgAzoAHCAFIAI2AhggBSAFKQMINwIQQQAoAvCaQCAFQRBqQQAoAvSaQCgCFBEEAAwCCyAFIAAgASgCGBEEAAALQX8gBRBCC0EAQQAoAuyaQCIFQX9qNgLsmkAgBUEATA0CQQBBADoA5JpAIAMNAwsAC0GMl8AAQRxBqJfAABAyAAtB2JfAAEHNAEGAmMAAEDEACyAAIAEQVAAL2gEBAX8jAEEwayIHJAAgB0EMaiABIAIgAyAEIAUgBhAFAkAgAkUNACABIAJBARBTCwJAAkACQCAHKAIMQX9HDQBBASEBIAcoAhAhAgwBCxBqQTBBBBBYIgJFDQFBACEBIAJBADYCCCACQoGAgIAQNwIAIAIgBykCDDcCDCACIAcpAhQ3AhQgAiAHKQIcNwIcIAIgBykCJDcCJCACIAcoAiw2AiwgAkEIaiECCyAAIAE2AgggACACQQAgARs2AgQgAEEAIAIgARs2AgAgB0EwaiQADwtBBEEwEF8AC8gBAQN/IwBBEGsiAyQAIANBBGogASACEAsCQCACRQ0AIAEgAkEBEFMLAkACQAJAIAMoAgQiBEF/Rw0AQQEhBEEAIQEgAygCCCEFQQAhAgwBCyADKAIIIQUCQAJAIAQgAygCDCICSw0AIAUhAQwBCwJAIAINAEEBIQEgBSAEQQEQUwwBCyAFIARBASACEE4iAUUNAgtBACEFQQAhBAsgACAENgIMIAAgBTYCCCAAIAI2AgQgACABNgIAIANBEGokAA8LQQEgAhBGAAvnAQICfwF+IwBBIGsiAiQAAkAgASgCAEF/Rw0AIAEoAgwhAyACQQA2AhggAkKAgICAEDcCECACQRBqQZyVwAAgAygCACIDKAIAIAMoAgQQDBogAiACKAIYIgM2AgggAiACKQIQIgQ3AwAgASADNgIIIAEgBDcCAAsgASgCCCEDIAFBADYCCCABKQIAIQQgAUKAgICAEDcCACACIAM2AhggAiAENwMQEGoCQEEMQQQQWCIBDQBBBEEMEF8ACyABIAIoAhg2AgggASACKQMQNwIAIABByJfAADYCBCAAIAE2AgAgAkEgaiQAC7gBAQR/AkAgAkUNACACQQNxIQNBACEEAkAgAkEESQ0AIAJBfHEhBUEAIQQDQCAAIARqIgIgASAEaiIGLQAAOgAAIAJBAWogBkEBai0AADoAACACQQJqIAZBAmotAAA6AAAgAkEDaiAGQQNqLQAAOgAAIAUgBEEEaiIERw0ACwsgA0UNACABIARqIQIgACAEaiEEA0AgBCACLQAAOgAAIAJBAWohAiAEQQFqIQQgA0F/aiIDDQALCyAAC7kBAQV/QQAhAkEAIQMCQANAIAEgA2siBEEaSQ0BIAAgA2oiBS0AAEEfRw0BIAUtAAFBiwFHDQEgBS0AAkEIRw0BIAUtAANBBEcNASAFLQAKQQZHDQEgBS0ADEHCAEcNASAFLQANQcMARw0BIAUvABAiBkEZSQ0BIAQgBk0NASAFIAZqQX1qKAAAIgVBgIAESw0BIAUgAmohAiADIAZqQQFqIgMgAU0NAAsgAyABIAFB4IbAABARAAsgAgvFAQEFfwJAAkACQAJAIAFFDQAgAUF4aiICIAIoAgAiA0EBaiIENgIAIARFDQEgASgCAA0CIAEoAhghBCABQQA2AhggASgCFCEFIAEoAhAhBiABQoCAgICAATcCECACIAM2AgACQAJAIAYgBEsNACAFIQEMAQsgBkEDdCECAkAgBA0AQQghASAFIAJBCBBTDAELIAUgAkEIIARBA3QiBhBOIgFFDQQLIAAgBDYCBCAAIAE2AgAPCxBbCwALEFwAC0EIIAYQRgALxQEBBX8CQAJAAkACQCABRQ0AIAFBeGoiAiACKAIAIgNBAWoiBDYCACAERQ0BIAEoAgANAiABKAIkIQQgAUEANgIkIAEoAiAhBSABKAIcIQYgAUKAgICAgAE3AhwgAiADNgIAAkACQCAGIARLDQAgBSEBDAELIAZBA3QhAgJAIAQNAEEIIQEgBSACQQgQUwwBCyAFIAJBCCAEQQN0IgYQTiIBRQ0ECyAAIAQ2AgQgACABNgIADwsQWwsACxBcAAtBCCAGEEYAC7UBAQN/AkAgAkUNACACQQdxIQNBACEEAkAgAkEISQ0AIAJBeHEhBUEAIQQDQCAAIARqIgIgAToAACACQQdqIAE6AAAgAkEGaiABOgAAIAJBBWogAToAACACQQRqIAE6AAAgAkEDaiABOgAAIAJBAmogAToAACACQQFqIAE6AAAgBSAEQQhqIgRHDQALCyADRQ0AIAAgBGohAgNAIAIgAToAACACQQFqIQIgA0F/aiIDDQALCyAAC7gBAQV/AkACQAJAAkAgAUUNACABQXhqIgIgAigCACIDQQFqIgQ2AgAgBEUNASABKAIADQIgASgCDCEEIAFBADYCDCABKAIIIQUgASgCBCEGIAFCgICAgBA3AgQgAiADNgIAAkACQCAGIARLDQAgBSEBDAELAkAgBA0AQQEhASAFIAZBARBTDAELIAUgBkEBIAQQTiIBRQ0ECyAAIAQ2AgQgACABNgIADwsQWwsACxBcAAtBASAEEEYAC6oBAgJ/AX5BASEGQQQhBwJAAkAgBa0gA61+IghCIIinRQ0AQQAhAwwBCwJAIAinIgNBgICAgHggBGtNDQBBACEDDAELAkACQAJAAkAgAUUNACACIAUgAWwgBCADEE4hBwwBCwJAIAMNACAEIQcMAgsQaiADIAQQWCEHCyAHDQAgACAENgIEDAELIAAgBzYCBEEAIQYLQQghBwsgACAHaiADNgIAIAAgBjYCAAuqAQICfwF+QQEhBkEEIQcCQAJAIAWtIAOtfiIIQiCIp0UNAEEAIQMMAQsCQCAIpyIDQYCAgIB4IARrTQ0AQQAhAwwBCwJAAkACQAJAIAFFDQAgAiAFIAFsIAQgAxBOIQcMAQsCQCADDQAgBCEHDAILEGogAyAEEFghBwsgBw0AIAAgBDYCBAwBCyAAIAc2AgRBACEGC0EIIQcLIAAgB2ogAzYCACAAIAY2AgALtQEBAn8CQAJAIAJFDQBBAC0AwZ5AIQNBAEEBOgDBnkBB0J7AACEEQYCAxABB0J7AAE0NACACQYCAxABB0J7AAGtLDQAgA0H/AXENAEGAgMQAQdCewABrIQIMAQtBACEEAkAgAkEQdiACQf//A3FBAEdqIgJAACIDQX9HDQBBACECDAELIAJBEHQiAkFwaiACIANBEHQiBEEAIAJrRhshAgsgAEEANgIIIAAgAjYCBCAAIAQ2AgALlQEBAX8jAEEQayIFJAACQCACIAFqIgEgAk8NAEEAQQAQRgALIAVBBGogACgCACICIAAoAgQgASACQQF0IgIgASACSxsiAkEIQQQgBEEBRhsiASACIAFLGyICIAMgBBAgAkAgBSgCBEEBRw0AIAUoAgggBSgCDBBGAAsgBSgCCCEEIAAgAjYCACAAIAQ2AgQgBUEQaiQAC4sBAQF/IwBBEGsiAyQAAkAgAiABaiIBIAJPDQBBAEEAEEYACyADQQRqIAAoAgAiAiAAKAIEIAEgAkEBdCICIAEgAksbIgJBCCACQQhLGyICQQFBARAfAkAgAygCBEEBRw0AIAMoAgggAygCDBBGAAsgAygCCCEBIAAgAjYCACAAIAE2AgQgA0EQaiQAC48BAgJ/AX4jAEEgayICJAACQCABKAIAQX9HDQAgASgCDCEDIAJBADYCHCACQoCAgIAQNwIUIAJBFGpBnJXAACADKAIAIgMoAgAgAygCBBAMGiACIAIoAhwiAzYCECACIAIpAhQiBDcDCCABIAM2AgggASAENwIACyAAQciXwAA2AgQgACABNgIAIAJBIGokAAt8AQF/AkAgACgCACIAKAIMIgFFDQAgACgCECABQQEQUwsCQCAAKAIYIgFFDQAgACgCHCABQQN0QQgQUwsCQCAAKAIkIgFFDQAgACgCKCABQQN0QQgQUwsCQCAAQX9GDQAgACAAKAIEQX9qIgE2AgQgAQ0AIABBMEEEEFMLC4QBAQN/IwBBEGsiASQAAkAgACgCACICKAIEIgNBAXFFDQAgAigCACECIAEgA0EBdjYCBCABIAI2AgAgAUG0lcAAIAAoAgQgACgCCCIALQAIIAAtAAkQFQALIAFBfzYCACABIAA2AgwgAUHQlcAAIAAoAgQgACgCCCIALQAIIAAtAAkQFQALkAEBAX8CQAJAIABFDQAgACgCACEBIABBADYCACABQQFxRQ0AIAAoAgghASAAKAIEIQAMAQtBACEAEEEhAQsCQAJAAkBBAC0AtJpAQX9qDgIBAAILQYCAwABB/QBB2IXAABAxAAtBAEECOgC0mkBBsJrAABBjC0EAQQE6ALSaQEEAIAE2ArCaQEEAIAA2AqyaQAuEAQECfyMAQRBrIgYkAEEAIQcgBkEANgIMAkACQAJAAkACQCABKAIAIAIgAyAEIAUgBkEMahBJDgQBAgADAAtBvIjAAEHsAEGoicAAEDgACyAAIAYoAgw2AgQMAgsgAEEAOgABQQEhBwwBC0EBIQcgAEEBOgABCyAAIAc6AAAgBkEQaiQAC2sBA38jAEEQayIBJAAgAUEEaiAAKAIAIgIgACgCBCACQQF0IgJBBCACQQRLGyICQQhBCBAfAkAgASgCBEEBRw0AIAEoAgggASgCDBBGAAsgASgCCCEDIAAgAjYCACAAIAM2AgQgAUEQaiQAC2ABAn8CQAJAIABBfGooAgAiA0F4cSIEQQRBCCADQQNxIgMbIAFqSQ0AAkAgA0UNACAEIAFBJ2pLDQILIAAQCA8LQYyWwABBLkG8lsAAEEcAC0HMlsAAQS5B/JbAABBHAAtaAQF/AkACQAJAIAIgACgCACAAKAIIIgNrTQ0AIAAgAyACQQFBARAiIAAoAgghAwwBCyACRQ0BCyACRQ0AIAAoAgQgA2ogASAC/AoAAAsgACADIAJqNgIIQQALWQECfyABKAIAIQIgAUEANgIAAkACQCACRQ0AIAEoAgQhAxBqQQhBBBBYIgFFDQEgASADNgIEIAEgAjYCACAAQbiXwAA2AgQgACABNgIADwsAC0EEQQgQXwALXQECf0EAIQECQCAAKAIAQQxHDQBBACEBQazaACAAKAIEIgJBACgC2JpAIAIbEQMAIgJFDQAgAkEAQazaABAdIgEgACgCCCIAQQAoAtyaQCAAGzYCqFogASEBCyABC0UAAkACQCABQQlJDQAgASAAEA4hAQwBCyAAEAIhAQsCQCABRQ0AIAFBfGotAABBA3FFDQAgAEUNACABQQAgAPwLAAsgAQtSAQJ/QQAhAUEAQQAoAviaQCICQQFqNgL4mkACQCACQQBIDQBBASEBQQAtAOSaQA0AQQAgADoA5JpAQQBBACgC4JpAQQFqNgLgmkBBAiEBCyABC0cBAn8gASgCBCECIAEoAgAhAxBqAkBBCEEEEFgiAQ0AQQRBCBBfAAsgASACNgIEIAEgAzYCACAAQbiXwAA2AgQgACABNgIACzsBAX8jAEEgayIDJAAgAyABNgIQIAMgADYCDCADQQE7ARwgAyACNgIYIAMgA0EMajYCFCADQRRqEDoACzkBAX8jAEEQayIDJAAgAyABNgIEIAMgADYCACADQRmtQiCGIAOthDcDCEHUgcAAIANBCGogAhAxAAs0AAJAIAFpQQFHDQAgAEGAgICAeCABa0sNAAJAIABFDQAQaiAAIAEQWCIBRQ0BCyABDwsACzwAAkAgACgCAEF/Rg0AIAEgACgCBCAAKAIIEE0PCyABKAIAIAEoAgQgACgCDCgCACIAKAIAIAAoAgQQDAs2AAJAIAJBf0YNACAAIAIgASgCEBEFAEUNAEEBDwsCQCADDQBBAA8LIAAgAyAEIAEoAgwRBwALNQEBfwJAIABFDQACQCABKAIAIgJFDQAgACACEQIACyABKAIEIgJFDQAgACACIAEoAggQUwsLKwEBfyMAQRBrIgEkACABQRitQiCGIAFBD2qthDcDAEHUgcAAIAEgABAxAAsqAQF/IwBBEGsiAyQAIAMgAjYCDCADIAE2AgggAyAANgIEIANBBGoQZAALLQEBfyMAQRBrIgEkACABIAApAgA3AgggAUEIakGAlcAAIAAoAghBAUEAEBUACywCAX8BfiMAQRBrIgEkACAAKQIAIQIgASAANgIMIAEgAjcCBCABQQRqEGYACyMBAX8jAEEQayICJAAgAiABNgIMIAIgADYCCCACQQhqEGUACyAAAkAgASgCAEUNACAAQbiXwAA2AgQgACABNgIADwsACx4BAX8CQCAAKAIAIgJFDQAgASACIAAoAgQQTQ8LAAsbAQF/EGogAEEEakEEEFgiASAANgIAIAFBBGoLHgEBfwJAIAAoAgAiAUEBSA0AIAAoAgQgAUEBEFMLCx4AIAAoAgAgACgCBEEAKALomkAiAEEEIAAbEQQAAAsjAQF/AkBBhIrAABAtIgANAEG4icAAQTpB9InAABA4AAsgAAsXAAJAIABBf2pBfk8NACABIABBARBTCwscAQF/AkAgACgCACIBRQ0AIAAoAgQgAUEBEFMLCxcAAkAgAUEJSQ0AIAEgABAODwsgABACCxUAIABBfGoiACAAKAIAQQRqQQQQUwsUAAJAIABFDQAgACABEF8ACxBWAAsRACAAIAFBAXRBAXIgAhAxAAsSAAJAIAFFDQAgACABIAIQUwsLEgAgACABIAIgAyAEQQAgBRADCxUAAkAgAEUNACAAIAAoAqhaEQIACwsaACAAQQApAoSWQDcCCCAAQQApAvyVQDcCAAsaACAAQQApAvSVQDcCCCAAQQApAuyVQDcCAAsWACAAKAIAIAEgAiAAKAIEKAIMEQcACw0AIAAgASACIAMQBw8LFABBACAANgK8mkBBAEEBNgK4mkALEwAgAEG4l8AANgIEIAAgATYCAAsQACABIAAoAgAgACgCBBBNCxAAIAEgACgCACAAKAIEEAoLCwAgACABIAIQKg8LCgAgACABEGkaAAsPACAAQZyVwAAgASACEAwLEQBBkJjAAEEjQaSYwAAQMQALCwAgACMAaiQAIwALCQAgACABEEQPCwkAIAAgARAuDwsJACAAIAEQYQALDABBr4fAAEEbEFoACw0AQcqHwABBzwAQWgALCQAgASAAEDsACwwAIAAgASkCADcDAAsJACABIAAQXQALDQAgAUH8mcAAQRgQCgsIACAAIAEQAAsIACAAIAEQAQsJACAAKAIAEEoLBwAgABA5AAsHACAAEEAACwcAIAAQJgALCwBBAEEBOgDAnkALCQAgAEEANgIACwUAEGsACwMADwsDAAALAgALC74aAgBBgIDAAAuUGkF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkFnNsaWNlIGluZGV4IHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAABJyYW5nZSBzdGFydCBpbmRleCDAIiBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCDAABByYW5nZSBlbmQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAvcnVzdGMvNDhhMjI5Y2VhZWZkNDk4NWM1MDk5MGIxNDExNmI2ZDg1NmFmMDk4NS9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEyNi9zcmMvZXh0ZXJucmVmLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjEzL3NyYy9kbG1hbGxvYy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9saWJkZWZsYXRlci0xLjI1LjIvc3JjL2xpYi5ycwAA1gAQAF4AAABrAAAADQAAAMwCEAAKAAAAHAAAACQAAADMAhAACgAAAMIAAAApAAAAzAIQAAoAAAC2AAAAJwAAAMwCEAAKAAAAcQAAABwAAADMAhAACgAAAG0AAABBAAAAZGVjb21wcmVzc2lvbiBmYWlsZWRpbnZhbGlkIGJnemYgaGVhZGVyAMwCEAAKAAAATAAAAD0A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",dA=class t{static __wrap(e){let A=Object.create(t.prototype);return A.__wbg_ptr=e,$t.register(A,A.__wbg_ptr,A),A}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,$t.unregister(this),e}free(){let e=this.__destroy_into_raw();x.__wbg_chunksliceresult_free(e,0)}take_buffer(){try{let n=x.__wbindgen_add_to_stack_pointer(-16);x.chunksliceresult_take_buffer(n,this.__wbg_ptr);var e=Y().getInt32(n+0,!0),A=Y().getInt32(n+4,!0),i=ii(e,A).slice();return x.__wbindgen_export(e,A*1,1),i}finally{x.__wbindgen_add_to_stack_pointer(16)}}take_cpositions(){try{let n=x.__wbindgen_add_to_stack_pointer(-16);x.chunksliceresult_take_cpositions(n,this.__wbg_ptr);var e=Y().getInt32(n+0,!0),A=Y().getInt32(n+4,!0),i=Ai(e,A).slice();return x.__wbindgen_export(e,A*8,8),i}finally{x.__wbindgen_add_to_stack_pointer(16)}}take_dpositions(){try{let n=x.__wbindgen_add_to_stack_pointer(-16);x.chunksliceresult_take_dpositions(n,this.__wbg_ptr);var e=Y().getInt32(n+0,!0),A=Y().getInt32(n+4,!0),i=Ai(e,A).slice();return x.__wbindgen_export(e,A*8,8),i}finally{x.__wbindgen_add_to_stack_pointer(16)}}};Symbol.dispose&&(dA.prototype[Symbol.dispose]=dA.prototype.free);function ei(t){try{let r=x.__wbindgen_add_to_stack_pointer(-16),Q=ni(t,x.__wbindgen_export2),a=Se;x.decompress_all(r,Q,a);var e=Y().getInt32(r+0,!0),A=Y().getInt32(r+4,!0),i=Y().getInt32(r+8,!0),n=Y().getInt32(r+12,!0);if(n)throw Ii(i);var g=ii(e,A).slice();return x.__wbindgen_export(e,A*1,1),g}finally{x.__wbindgen_add_to_stack_pointer(16)}}function ti(t,e,A,i,n){try{let a=x.__wbindgen_add_to_stack_pointer(-16),I=ni(t,x.__wbindgen_export2),o=Se;x.decompress_chunk_slice(a,I,o,e,A,i,n);var g=Y().getInt32(a+0,!0),r=Y().getInt32(a+4,!0),Q=Y().getInt32(a+8,!0);if(Q)throw Ii(r);return dA.__wrap(g)}finally{x.__wbindgen_add_to_stack_pointer(16)}}function gg(t,e){let A=Error(gi(t,e));return Ig(A)}function ng(t,e){throw new Error(gi(t,e))}var $t=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(t=>x.__wbg_chunksliceresult_free(t,1));function Ig(t){FA===V.length&&V.push(V.length+1);let e=FA;return FA=V[e],V[e]=t,e}function og(t){t<1028||(V[t]=FA,FA=t)}function Ai(t,e){return t=t>>>0,Qg().subarray(t/8,t/8+e)}function ii(t,e){return t=t>>>0,Je().subarray(t/1,t/1+e)}var lA=null;function Y(){return(lA===null||lA.buffer.detached===!0||lA.buffer.detached===void 0&&lA.buffer!==x.memory.buffer)&&(lA=new DataView(x.memory.buffer)),lA}var TA=null;function Qg(){return(TA===null||TA.byteLength===0)&&(TA=new Float64Array(x.memory.buffer)),TA}function gi(t,e){return Cg(t>>>0,e)}var ZA=null;function Je(){return(ZA===null||ZA.byteLength===0)&&(ZA=new Uint8Array(x.memory.buffer)),ZA}function rg(t){return V[t]}var V=new Array(1024).fill(void 0);V.push(void 0,null,!0,!1);var FA=V.length;function ni(t,e){let A=e(t.length*1,1)>>>0;return Je().set(t,A/1),Se=t.length,A}function Ii(t){let e=rg(t);return og(t),e}var XA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});XA.decode();var ag=2146435072,Fe=0;function Cg(t,e){return Fe+=e,Fe>=ag&&(XA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),XA.decode(),Fe=e),XA.decode(Je().subarray(t,t+e).slice())}var Se=0,x;function oi(t){x=t}var rA=null,xe=null;async function Qi(){return rA||(xe||(xe=(async()=>{let e=await(await fetch(ig)).arrayBuffer(),{instance:A}=await WebAssembly.instantiate(e,{"./bgzf_wasm_bg.js":be});return rA=A.exports,oi(rA),rA})()),xe)}async function ri(t){return rA||await Qi(),ei(t)}async function ai(t,e,A,i,n){rA||await Qi();let g=ti(t,e,A,i,n),r=g.take_buffer(),Q=g.take_cpositions(),a=g.take_dpositions();return g.free(),{buffer:r,cpositions:Q,dpositions:a}}var Bg=26;function Bi(t){return t[0]===31&&t[1]===139}function sg(t){return t.length>=Bg&&Bi(t)&&t[2]===8&&t[3]===4&&t[10]===6&&t[12]===66&&t[13]===67}function si(t){return t instanceof Error?t.message:`${t}`}async function Ci(t){if(typeof DecompressionStream<"u"){let e=new Blob([t]).stream().pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(e).arrayBuffer())}else return Pt(t,void 0)}function Ei(t){return si(t).includes("invalid gzip header")?new Error("problem decompressing block: incorrect gzip header check",{cause:t}):t}async function xA(t){if(t.length===0)return new Uint8Array(0);if(!sg(t)){if(Bi(t))return Ci(t);throw new Error("problem decompressing block: not a valid bgzf or gzip block")}try{return await ri(t)}catch(e){if(si(e).includes("invalid bgzf header"))return Ci(t);throw Ei(e)}}function Eg(t,e,A,i){let n=[],g=[],r=[],Q=A.dataPosition;for(let a=0;a<t.length;a++){let I=t[a],o=e[a],h=o.filePosition>=i.blockPosition;n.push(o.filePosition),g.push(Q);let E=a===0?A.dataPosition:0,B=h?Math.min(i.dataPosition+1,I.length):I.length;if(E<B&&r.push(I.subarray(E,B)),Q+=I.length-E,h){n.push(o.filePosition+o.compressedSize),g.push(Q);break}}return{buffer:Vt(r),cpositions:Float64Array.from(n),dpositions:Float64Array.from(g)}}var ci=4e5;function cg(t){let e=0;for(let A of t)e+=A.decompressedSize;return e}async function Ge(t,e,A){let{minv:i,maxv:n}=e;if(A){let g=jt(t,i.blockPosition,n.blockPosition);if(cg(g)>=ci){let r=await A.decompressBlocks(t,g);return Eg(r.blocks,g,i,n)}}try{let g=await ai(t,i.blockPosition,i.dataPosition,n.blockPosition,n.dataPosition);return{buffer:g.buffer,cpositions:g.cpositions,dpositions:g.dpositions}}catch(g){throw Ei(g)}}function zA(t){if(t?.aborted)throw Re(t)}function Re(t){let e=t.reason;return e===void 0?new DOMException("This operation was aborted","AbortError"):e}function fg(t){typeof t=="object"&&t!==null&&"unref"in t&&typeof t.unref=="function"&&t.unref()}var gA=class{entries=new Map;total=0;settledCount=0;limit;budget;membership;fill;sizeOf;toCacheKey;evictionPolicy;pending=0;batch=0;idleTimeoutMs;sweepTimer;constructor({fill:e,maxSize:A=1/0,sizeOf:i=()=>1,cacheKey:n=a=>String(a),evictionPolicy:g="lru",idleTimeoutMs:r=0,budget:Q}={}){this.fill=e,this.evictionPolicy=g,this.limit=A,this.budget=Q,this.membership=Q?.register(this),this.sizeOf=i,this.toCacheKey=n,this.idleTimeoutMs=r>0?r:void 0}get size(){return this.entries.size}get totalSize(){return this.total}get maxSize(){return this.limit}set maxSize(e){this.limit=e,this.evict()}waiterCount(e){return this.entries.get(this.toCacheKey(e))?.signals.size??0}async get(e,A,i){zA(A);let n=this.toCacheKey(e),g=this.entries.get(n);g&&(this.isDoomed(g)?(this.deleteKey(n),g=void 0):this.touch(n,g)),g??=this.start(n,e,i),g.settled||this.join(g,A);try{let r=await this.settleFor(g,A);return zA(A),r}catch(r){throw zA(A),r}}settleFor(e,A){if(e.settled||A===void 0||typeof A.addEventListener!="function")return e.promise;let i=new AbortController;return Promise.race([e.promise,new Promise((n,g)=>{A.addEventListener("abort",()=>{g(Re(A))},{once:!0,signal:i.signal})})]).finally(()=>{i.abort()})}getIfCached(e){let A=this.toCacheKey(e),i=this.entries.get(A);if(i){if(this.isDoomed(i)){this.deleteKey(A);return}return this.touch(A,i),i.promise}}has(e){let A=this.entries.get(this.toCacheKey(e));return A!==void 0&&!this.isDoomed(A)}delete(e){this.deleteKey(this.toCacheKey(e))}clear(){for(let e of this.entries.values())this.detach(e);this.entries.clear(),this.charge(-this.total),this.total=0,this.settledCount=0,this.stopSweep()}touch(e,A){this.entries.delete(e),this.entries.set(e,A),A.batch=this.batch,A.lastTouched=Date.now(),A.seq=this.stamp()}stamp(){return this.budget?this.budget.nextSeq():0}isDoomed(e){return!e.settled&&e.controller.signal.aborted}sweepIdle(){let e=this.idleTimeoutMs;if(e===void 0)return;let A=Date.now()-e,i=0;for(let[n,g]of this.entries)g.settled&&(g.lastTouched<=A?this.deleteKey(n):i++);i===0&&this.stopSweep()}startSweep(){let e=this.idleTimeoutMs;if(e===void 0||this.sweepTimer!==void 0)return;let A=Math.max(1e3,Math.floor(e/4));this.sweepTimer=setInterval(()=>{this.sweepIdle()},A),fg(this.sweepTimer)}stopSweep(){this.sweepTimer!==void 0&&(clearInterval(this.sweepTimer),this.sweepTimer=void 0)}start(e,A,i){let n=i??(this.fill&&(a=>this.fill(A,a)));if(!n)throw new Error("SharedReadCache needs a fill, either on the cache or on the get() call");let g=new AbortController,r={promise:n(g.signal),signals:new Set,pinned:!1,controller:g,dispose:new AbortController,settled:!1,counted:!0,size:0,batch:this.batch,lastTouched:Date.now(),seq:this.stamp()};this.entries.set(e,r),this.pending++;let Q=()=>{r.settled=!0,this.detach(r),r.dispose.abort(),r.signals.clear()};return r.promise.then(a=>{if(Q(),this.entries.get(e)===r){let I=this.weigh(a);I===void 0?this.entries.delete(e):(r.lastTouched=Date.now(),this.settledCount++,r.size=I,this.total+=I,this.charge(I),this.startSweep())}this.maybeEvict()},()=>{this.entries.get(e)===r&&this.deleteKey(e),Q(),this.maybeEvict()}),r}weigh(e){try{let A=this.sizeOf(e);return Number.isFinite(A)&&A>=0?A:void 0}catch{return}}join(e,A){A===void 0?e.pinned=!0:A.aborted?!e.pinned&&e.signals.size===0&&e.controller.abort(A.reason):typeof A.addEventListener!="function"?e.pinned=!0:e.signals.has(A)||(e.signals.add(A),A.addEventListener("abort",()=>{e.signals.delete(A),!e.pinned&&e.signals.size===0&&(e.controller.abort(A.reason),this.detach(e))},{once:!0,signal:e.dispose.signal}))}deleteKey(e){let A=this.entries.get(e);A&&(this.entries.delete(e),this.detach(A),A.settled&&this.settledCount--,this.total-=A.size,this.charge(-A.size))}detach(e){e.counted&&(e.counted=!1,this.pending--)}charge(e){this.budget&&this.membership&&this.budget.charge(this.membership,e)}lruSpare(){if(!(this.settledCount<=1)){for(let[e,A]of this.entries)if(A.settled)return{cacheKey:e,seq:A.seq}}}release(e){this.deleteKey(e)}maybeEvict(){(this.evictionPolicy==="lru"||this.pending===0)&&(this.evict(),this.evictionPolicy==="batch"&&this.batch++,this.budget?.evict())}evict(){if(this.limit!==1/0){if(this.evictionPolicy==="batch"){for(let[e,A]of this.entries){if(this.total<=this.limit)break;A.batch!==this.batch&&A.settled&&this.deleteKey(e)}return}if(!(this.total<=this.limit))for(let[e,A]of this.entries){if(this.total<=this.limit||this.settledCount<=1)break;A.settled&&this.deleteKey(e)}}}};async function OA(t){return t.bytes?t.bytes():new Uint8Array(await t.arrayBuffer())}async function fi(t,e,A){if(e==="utf8"||e==="utf-8")return t.text();if(e)throw new Error(`unsupported encoding: ${e}`);return A&&"body"in t?_e(t,A):OA(t)}function hi(t){return typeof t=="string"?{encoding:t,opts:{}}:{encoding:t?.encoding,opts:t??{}}}function li(t){let e=/\/(\d+)$/.exec(t??"")?.[1];return e===void 0?void 0:parseInt(e,10)}function hg(t){let e=t.headers.get("content-length"),A=e===null?Number.NaN:Number(e);return Number.isSafeInteger(A)&&A>=0?A:void 0}var lg=50;async function _e(t,e){let A=hg(t),i=t.body;if(!i||A===void 0){let a=await OA(t);return e(a.byteLength,A??a.byteLength),a}let n=i.getReader(),g=new Uint8Array(A),r=0,Q=Date.now();e(0,A);for(let a=await n.read();!a.done;a=await n.read()){if(r+a.value.byteLength>g.length){let o=new Uint8Array(Math.max(r+a.value.byteLength,g.length*2));o.set(g.subarray(0,r)),g=o}g.set(a.value,r),r+=a.value.byteLength;let I=Date.now();I-Q>=lg&&(Q=I,e(r,A))}return e(r,A),r===g.length?g:g.slice(0,r)}function dg(t,e={}){let A=new Set(Object.keys(e).map(n=>n.toLowerCase())),i=Object.entries(t).filter(([n])=>!A.has(n.toLowerCase()));return{...Object.fromEntries(i),...e}}function di(t){return Number.isSafeInteger(t)&&t>=0}function ug(t){return(typeof t=="object"&&t!==null&&"message"in t&&typeof t.message=="string"?t.message:`${t}`).replace(/\.$/,"")}var $=class{url;get source(){return this.url}_stat;statProbe;fetchImplementation;baseHeaders;baseOverrides;baseSignal;constructor(e,A={}){this.url=e,this.baseHeaders=A.headers??{},this.baseOverrides=A.overrides??{},this.baseSignal=A.signal,this.fetchImplementation=A.fetch??globalThis.fetch.bind(globalThis)}buildRequest(e,A){let i=e.signal??this.baseSignal;return{method:"GET",redirect:"follow",mode:"cors",...this.baseOverrides,...e.overrides,headers:dg({...this.baseHeaders,...e.headers},A),...i?{signal:i}:{}}}async fetch(e,A){let i=g=>new Error(`${ug(g)} fetching ${e}`,{cause:g}),n;try{n=await this.fetchImplementation(e,A)}catch(g){if(`${g}`.includes("Failed to fetch")){console.warn(`generic-filehandle: refetching ${e} to attempt to work around chrome CORS header caching bug`);try{n=await this.fetchImplementation(e,{...A,cache:"reload"})}catch(r){throw i(r)}}else throw i(g)}return n}async read(e,A,i={}){if(e===0)return new Uint8Array(0);if(!di(e)||!di(A))throw new TypeError(`read() called with an invalid length or position (length=${e}, position=${A}). The index file may be corrupt.`);return this.fetchBytes(e,A,i)}async fetchBytes(e,A,i){let n=await this.fetch(this.url,this.buildRequest(i,{range:`bytes=${A}-${A+e-1}`}));if(n.status===416)return new Uint8Array(0);if(this.checkOk(n),n.status===200&&A===0||n.status===206){let g=li(n.headers.get("content-range"));g!==void 0&&(this._stat={size:g});let r=i.onProgress?await _e(n,i.onProgress):await OA(n);return!this._stat&&n.status===200&&(this._stat={size:r.byteLength}),r.byteLength<=e?r:r.slice(0,e)}throw new Error(n.status===200?`${this.url} fetch returned status 200, expected 206`:`HTTP ${n.status} fetching ${this.url}`)}checkOk(e){if(!e.ok)throw new Error(`HTTP ${e.status} fetching ${this.url}`)}async readFile(e){let{encoding:A,opts:i}=hi(e),n=await this.fetch(this.url,this.buildRequest(i));this.checkOk(n);let g=await fi(n,A,i.onProgress);return n.status===200&&typeof g!="string"&&(this._stat={size:g.byteLength}),g}async stat(){return this._stat||(this.statProbe??=this.read(10,0).finally(()=>{this.statProbe=void 0}),await this.statProbe),this._stat??{size:0}}close(){return Promise.resolve()}};var aA=class{source;constructor(e,A={}){this.source=e}unimplemented(){return Promise.reject(new Error(`LocalFile is unimplemented in the browser (${this.source})`))}readFile(e){return this.unimplemented()}read(e,A,i){return this.unimplemented()}stat(){return this.unimplemented()}close(){return this.unimplemented()}};var W=class{minv;maxv;bin;endPosition;constructor(e,A,i,n=A.blockPosition+65536){this.minv=e,this.maxv=A,this.bin=i,this.endPosition=n}toString(){return`${this.minv.toString()}..${this.maxv.toString()} (bin ${this.bin}, fetchedSize ${this.fetchedSize()})`}fetchedSize(){return this.endPosition-this.minv.blockPosition}};var _=function(t,e,A,i,n){if(i==="m")throw new TypeError("Private method is not writable");if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?t!==e||!n:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return i==="a"?n.call(t,A):n?n.value=A:e.set(t,A),A},f=function(t,e,A,i){if(A==="a"&&!i)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return A==="m"?i:A==="a"?i.call(t):i?i.value:e.get(t)},b,U,J,G,CA,bA,BA,WA,X,ui,ve,Le,Me,wi,PA,JA=class extends Map{constructor(e={}){if(super(),b.add(this),U.set(this,0),J.set(this,new Map),G.set(this,new Map),CA.set(this,void 0),bA.set(this,void 0),BA.set(this,void 0),!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");if(typeof e.maxAge=="number"&&e.maxAge===0)throw new TypeError("`maxAge` must be a number greater than 0");_(this,CA,e.maxSize,"f"),_(this,bA,e.maxAge||Number.POSITIVE_INFINITY,"f"),_(this,BA,e.onEviction,"f")}get __oldCache(){return f(this,G,"f")}get(e){if(f(this,J,"f").has(e)){let A=f(this,J,"f").get(e);return f(this,b,"m",ve).call(this,e,A)}if(f(this,G,"f").has(e)){let A=f(this,G,"f").get(e);if(!f(this,b,"m",X).call(this,e,A))return f(this,b,"m",wi).call(this,e,A),A.value}}set(e,A,{maxAge:i=f(this,bA,"f")}={}){let n=typeof i=="number"&&i!==Number.POSITIVE_INFINITY?Date.now()+i:void 0;return f(this,J,"f").has(e)?f(this,J,"f").set(e,{value:A,expiry:n}):f(this,b,"m",Me).call(this,e,{value:A,expiry:n}),this}has(e){return f(this,J,"f").has(e)?!f(this,b,"m",X).call(this,e,f(this,J,"f").get(e)):f(this,G,"f").has(e)?!f(this,b,"m",X).call(this,e,f(this,G,"f").get(e)):!1}peek(e){if(f(this,J,"f").has(e))return f(this,b,"m",Le).call(this,e,f(this,J,"f"));if(f(this,G,"f").has(e))return f(this,b,"m",Le).call(this,e,f(this,G,"f"))}expiresIn(e){let A=f(this,J,"f").get(e)??f(this,G,"f").get(e);if(A)return A.expiry?A.expiry-Date.now():Number.POSITIVE_INFINITY}delete(e){var A;let i=f(this,J,"f").delete(e);return i&&_(this,U,(A=f(this,U,"f"),A--,A),"f"),f(this,G,"f").delete(e)||i}clear(){f(this,J,"f").clear(),f(this,G,"f").clear(),_(this,U,0,"f")}resize(e){if(!(e&&e>0))throw new TypeError("`maxSize` must be a number greater than 0");let A=[...f(this,b,"m",PA).call(this)],i=A.length-e;i<0?(_(this,J,new Map(A),"f"),_(this,G,new Map,"f"),_(this,U,A.length,"f")):(i>0&&f(this,b,"m",WA).call(this,A.slice(0,i)),_(this,G,new Map(A.slice(i)),"f"),_(this,J,new Map,"f"),_(this,U,0,"f")),_(this,CA,e,"f")}evict(e=1){let A=e;if(!A||A<=0)return;let i=[...f(this,b,"m",PA).call(this)],n=Math.trunc(Math.min(A,Math.max(i.length-1,0)));n<=0||(f(this,b,"m",WA).call(this,i.slice(0,n)),_(this,G,new Map(i.slice(n)),"f"),_(this,J,new Map,"f"),_(this,U,0,"f"))}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[(U=new WeakMap,J=new WeakMap,G=new WeakMap,CA=new WeakMap,bA=new WeakMap,BA=new WeakMap,b=new WeakSet,WA=function(A){if(typeof f(this,BA,"f")=="function")for(let[i,n]of A)f(this,BA,"f").call(this,i,n.value)},X=function(A,i){return typeof i.expiry=="number"&&i.expiry<=Date.now()?(typeof f(this,BA,"f")=="function"&&f(this,BA,"f").call(this,A,i.value),this.delete(A)):!1},ui=function(A,i){if(!f(this,b,"m",X).call(this,A,i))return i.value},ve=function(A,i){return i.expiry?f(this,b,"m",ui).call(this,A,i):i.value},Le=function(A,i){let n=i.get(A);return f(this,b,"m",ve).call(this,A,n)},Me=function(A,i){var n;f(this,J,"f").set(A,i),_(this,U,(n=f(this,U,"f"),n++,n),"f"),f(this,U,"f")>=f(this,CA,"f")&&(_(this,U,0,"f"),f(this,b,"m",WA).call(this,f(this,G,"f")),_(this,G,f(this,J,"f"),"f"),_(this,J,new Map,"f"))},wi=function(A,i){f(this,G,"f").delete(A),f(this,b,"m",Me).call(this,A,i)},PA=function*(){for(let A of f(this,G,"f")){let[i,n]=A;f(this,J,"f").has(i)||f(this,b,"m",X).call(this,i,n)||(yield A)}for(let A of f(this,J,"f")){let[i,n]=A;f(this,b,"m",X).call(this,i,n)||(yield A)}},Symbol.iterator)](){for(let e of f(this,J,"f")){let[A,i]=e;f(this,b,"m",X).call(this,A,i)||(yield[A,i.value])}for(let e of f(this,G,"f")){let[A,i]=e;f(this,J,"f").has(A)||f(this,b,"m",X).call(this,A,i)||(yield[A,i.value])}}*entriesDescending(){let e=[...f(this,J,"f")];for(let A=e.length-1;A>=0;--A){let i=e[A],[n,g]=i;f(this,b,"m",X).call(this,n,g)||(yield[n,g.value])}e=[...f(this,G,"f")];for(let A=e.length-1;A>=0;--A){let i=e[A],[n,g]=i;f(this,J,"f").has(n)||f(this,b,"m",X).call(this,n,g)||(yield[n,g.value])}}*entriesAscending(){for(let[e,A]of f(this,b,"m",PA).call(this))yield[e,A.value]}get size(){if(!f(this,U,"f"))return f(this,G,"f").size;let e=0;for(let A of f(this,G,"f").keys())f(this,J,"f").has(A)||e++;return Math.min(f(this,U,"f")+e,f(this,CA,"f"))}get maxSize(){return f(this,CA,"f")}get maxAge(){return f(this,bA,"f")}entries(){return this.entriesAscending()}forEach(e,A=this){for(let[i,n]of this.entriesAscending())e.call(A,n,i,this)}get[Symbol.toStringTag](){return"QuickLRU"}toString(){return`QuickLRU(${this.size}/${this.maxSize})`}[Symbol.for("nodejs.util.inspect.custom")](){return this.toString()}};function ki(t,e=0){let A=t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24;return((t[e+4]|t[e+5]<<8|t[e+6]<<16|t[e+7]<<24)>>>0)*4294967296+(A>>>0)}var uA=class{blockPosition;dataPosition;constructor(e,A){this.blockPosition=e,this.dataPosition=A}toString(){return`${this.blockPosition}:${this.dataPosition}`}compareTo(e){return this.blockPosition-e.blockPosition||this.dataPosition-e.dataPosition}};function nA(t,e=0){return new uA(t[e+7]*1099511627776+t[e+6]*4294967296+t[e+5]*16777216+t[e+4]*65536+t[e+3]*256+t[e+2],t[e+1]<<8|t[e])}function jA(t,e){let A=t.length;if(A===0)return t;let i;if(e){let Q=e.blockPosition,a=e.dataPosition;i=[];for(let I=0;I<A;I++){let o=t[I];(o.maxv.blockPosition-Q||o.maxv.dataPosition-a)>0&&i.push(o)}if(i.length===0)return i}else i=t;i.sort((Q,a)=>{let I=Q.minv.blockPosition-a.minv.blockPosition;return I===0?Q.minv.dataPosition-a.minv.dataPosition:I});let n=[i[0]],g=i[0].minv.blockPosition,r=i[0].maxv.blockPosition;for(let Q=1;Q<i.length;Q++){let a=i[Q],I=a.minv.blockPosition,o=a.maxv.blockPosition;if(I-r<65e3&&o-g<5e6){let h=n.at(-1);(o-r||a.maxv.dataPosition-h.maxv.dataPosition)>0&&(n[n.length-1]=new W(h.minv,a.maxv,h.bin,a.endPosition),r=o)}else n.push(a),g=I,r=o}return wg(n)}function wg(t){let e=[t[0]];for(let A=1;A<t.length;A++){let i=t[A],n=e.at(-1).maxv;if((i.minv.blockPosition-n.blockPosition||i.minv.dataPosition-n.dataPosition)>=0){e.push(i);continue}(i.maxv.blockPosition-n.blockPosition||i.maxv.dataPosition-n.dataPosition)>0&&e.push(new W(n,i.maxv,i.bin,i.endPosition))}return e}function VA(t,e=[]){let A=[...e];for(let i of t)A.push(i.minv.blockPosition,i.maxv.blockPosition);A.sort((i,n)=>i-n);for(let i of t){let n=i.maxv.blockPosition,g=0,r=A.length;for(;g<r;){let Q=g+r>>>1;A[Q]>n?r=Q:g=Q+1}g<A.length&&(i.endPosition=Math.min(i.endPosition,A[g]))}}function $A(t,e,A,i){let n=i?i.blockPosition:1/0,g=i?i.dataPosition:0,r=!1;for(let Q=0;Q<A;Q++){let a=e+Q*8,I=t[a+7]*1099511627776+t[a+6]*4294967296+t[a+5]*16777216+t[a+4]*65536+t[a+3]*256+t[a+2],o=t[a+1]<<8|t[a];(I<n||I===n&&o<g)&&(n=I,g=o,r=!0)}return r?new uA(n,g):i}function kg(t){let e=new TextDecoder("utf-8"),A=[],i={},n=0,g=0;for(;g<t.length;){let r=t.indexOf(0,g);if(r===-1)break;if(r>g){let Q=e.decode(t.subarray(g,r));A[n]=Q,i[Q]=n}g=r+1,n++}return{refNameToId:i,refIdToName:A}}var Dg={0:"generic",1:"SAM",2:"VCF",3:"GAF"};function Ae(t,e){let A=new DataView(t.buffer,t.byteOffset,t.byteLength),i=A.getInt32(e,!0),n=i&65536?"zero-based-half-open":"1-based-closed",g=Dg[i&15];if(!g)throw new Error(`invalid Tabix preset format flags ${i}`);let r={ref:A.getInt32(e+4,!0),start:A.getInt32(e+8,!0),end:A.getInt32(e+12,!0)},Q=A.getInt32(e+16,!0),a=Q?String.fromCharCode(Q):void 0,I=A.getInt32(e+20,!0),o=A.getInt32(e+24,!0),{refIdToName:h,refNameToId:E}=kg(t.subarray(e+28,e+28+o));return{refIdToName:h,refNameToId:E,skipLines:I,metaChar:a,columnNumbers:r,format:g,coordinateType:n}}function ee(t,e){return{lineCount:ki(t,e)}}function te(t,e=5){let A=new JA({maxSize:e});return i=>{let n=A.get(i);if(n!==void 0)return n;let g=t(i);return g!==void 0&&A.set(i,g),g}}function Ng(t,e,A,i){if(e>2**(A+i*3))return;let n=(8**(i+1)-1)/7,g=(8**i-1)/7+Math.floor((e-1)/2**A)+1;for(g>=n&&(g=0);;){for(;g%8===1;)g=(g-1)/8;if(g===0)return;let r=t[g];if(r?.length){let Q=r[0].minv;for(let a=1;a<r.length;a++){let I=r[a].minv;I.compareTo(Q)<0&&(Q=I)}return Q}g++}}function Di(t,e){return t.format==="GAF"?0:t.refNameToId[e]}var sA=class{filehandle;parseCache=new gA({});constructor({filehandle:e}){this.filehandle=e}async readIndexBytes(e){let A=await this.filehandle.readFile({signal:e.signal,onProgress:e.onProgress}),i=await xA(A);return{bytes:i,dataView:new DataView(i.buffer,i.byteOffset,i.byteLength)}}async lineCount(e,A={}){let i=await this.parse(A),n=Di(i,e);return n===void 0?-1:i.indices(n)?.stats?.lineCount??-1}async getMetadata(e={}){let{indices:A,...i}=await this.parse(e);return i}async blocksForRange(e,A,i,n={}){let g=await this.parse(n),r=Di(g,e);if(r===void 0)return[];let Q=g.indices(r);if(!Q)return[];g.format==="GAF"&&(A=Math.max(A-1,0));let a=[];for(let[h,E]of this.reg2bins(A,i,g))for(let B=h;B<=E;B++){let s=Q.binIndex[B];if(s)for(let N of s)a.push(N)}let I=jA(a,this.lowestOffset(Q,A,g)),o=Ng(Q.binIndex,i,g.minShift,g.depth);if(o){let h=I.length;for(;h>0&&I[h-1].minv.compareTo(o)>=0;)h--;I.length=h}return I}parse(e={}){return this.parseCache.get("index",e.signal,A=>this._parse({...e,signal:A}))}async hasRefSeq(e,A={}){return!!(await this.parse(A)).indices(e)?.binIndex}};var mg=21582659,yg=38359875;function Ni(t,e){return t*2**e}function Ue(t,e){return Math.floor(t/2**e)}var EA=class extends sA{async _parse(e={}){let{bytes:A,dataView:i}=await this.readIndexBytes(e),n=i.getUint32(0,!0),g;if(n===mg)g=1;else if(n===yg)g=2;else throw new Error(`Not a CSI file (magic=${n})`);let r=i.getInt32(4,!0),Q=i.getInt32(8,!0),a=(8**(Q+1)-1)/7,I=2**(r+Q*3),o=i.getInt32(12,!0),h=o>=28&&(i.getInt32(16,!0)&15)===3,E=o>=30||h?Ae(A,16):{refIdToName:[],refNameToId:{},metaChar:void 0,columnNumbers:{ref:0,start:1,end:2},coordinateType:"zero-based-half-open",format:"generic"},B=i.getInt32(16+o,!0),s=16+o+4,N,k=[];for(let D=0;D<B;D++){k.push(s);let w=i.getInt32(s,!0);s+=4;for(let C=0;C<w;C++){let d=i.getUint32(s,!0);if(s+=4,d>a)s+=44;else{N=$A(A,s,1,N),s+=8;let m=i.getInt32(s,!0);s+=4+16*m}}}function u(D){let w=k[D];if(w===void 0)return;let C=w,d=i.getInt32(C,!0);C+=4;let m={},c={},p;for(let y=0;y<d;y++){let l=i.getUint32(C,!0);if(C+=4,l>a)p=ee(A,C+28),C+=44;else{c[l]=nA(A,C),C+=8;let F=i.getInt32(C,!0);C+=4;let R=Array.from({length:F});for(let M=0;M<F;M++)R[M]=new W(nA(A,C),nA(A,C+8),l),C+=16;m[l]=R}}return VA(Object.values(m).flat()),{binIndex:m,loffsets:c,stats:p}}return{...E,csi:!0,refCount:B,maxBlockSize:65536,firstDataLine:N,csiVersion:g,indices:te(u),minShift:r,depth:Q,maxBinNumber:a,maxRefLength:I}}lowestOffset(e,A,{minShift:i,depth:n}){let{loffsets:g}=e,r;if(g){let Q=(Ni(1,3*n)-1)/7+Ue(Math.max(A,0),i);for(;r===void 0&&Q>0;)if(r=g[Q],r===void 0){let a=Math.floor((Q-1)/8),I=a*8+1;Q=Q>I?Q-1:a}r??=g[0]}return r}reg2bins(e,A,{minShift:i,depth:n,maxBinNumber:g}){e=Math.max(e,0);let r=2**(i+n*3);A>r&&(A=r),A-=1;let Q=0,a=0,I=i+n*3,o=[];for(;Q<=n;I-=3,a+=Ni(1,Q*3),Q+=1){let h=a+Ue(e,I),E=a+Ue(A,I);if(E-h+o.length>g)throw new Error(`query ${e}-${A} is too large for current binning scheme (shift ${i}, depth ${n}), try a smaller query or a coarser index binning scheme`);o.push([h,E])}return o}};var pg=21578324,Ye=5,He=14,ie=2**(He+Ye*3);function mi(t){return Math.min(Math.max(t,0),ie)}var AA=class extends sA{reg2bins(e,A){e>ie&&console.warn("querying outside of possible tabix range");let i=mi(e),n=Math.min(A,ie)-1,g=[];return i<=n&&g.push([0,0],[1+(i>>26),1+(n>>26)],[9+(i>>23),9+(n>>23)],[73+(i>>20),73+(n>>20)],[585+(i>>17),585+(n>>17)],[4681+(i>>14),4681+(n>>14)]),g}lowestOffset(e,A){let i=e.linearIndex;return i?.[Math.min(mi(A)>>He,i.length-1)]}async _parse(e={}){let{bytes:A,dataView:i}=await this.readIndexBytes(e);if(i.getUint32(0,!0)!==pg)throw new Error("Not a TBI file");let n=i.getUint32(4,!0),g=((1<<(Ye+1)*3)-1)/7,{refNameToId:r,refIdToName:Q,coordinateType:a,format:I,columnNumbers:o,metaChar:h,skipLines:E}=Ae(A,8),s=36+i.getInt32(32,!0),N,k=[];for(let D=0;D<n;D++){k.push(s);let w=i.getInt32(s,!0);s+=4;for(let d=0;d<w;d++){let m=i.getUint32(s,!0);s+=4;let c=i.getInt32(s,!0);if(s+=4,m>g+1)throw new Error("tabix index contains too many bins, please use a CSI index");s+=16*c}let C=i.getInt32(s,!0);s+=4,N=$A(A,s,C,N),s+=8*C}function u(D){let w=k[D];if(w===void 0)return;let C=w,d=i.getInt32(C,!0);C+=4;let m={},c;for(let l=0;l<d;l++){let F=i.getUint32(C,!0);if(C+=4,F>g+1)throw new Error("tabix index contains too many bins, please use a CSI index");if(F===g+1){let R=i.getInt32(C,!0);C+=4,R===2&&(c=ee(A,C+16)),C+=16*R}else{let R=i.getInt32(C,!0);C+=4;let M=Array.from({length:R});for(let v=0;v<R;v++)M[v]=new W(nA(A,C),nA(A,C+8),F),C+=16;m[F]=M}}let p=i.getInt32(C,!0);C+=4;let y=Array.from({length:p});for(let l=0;l<p;l++)y[l]=nA(A,C),C+=8;return VA(Object.values(m).flat(),y.map(l=>l.blockPosition)),{binIndex:m,linearIndex:y,stats:c}}return{indices:te(u),metaChar:h,minShift:He,depth:Ye,maxBinNumber:g,maxRefLength:ie,skipLines:E,firstDataLine:N,columnNumbers:o,coordinateType:a,format:I,refIdToName:Q,refNameToId:r,maxBlockSize:65536}}};var Ke=9,ge=10,pi=13,Fg=59,xg=60,bg=62,Jg=6,Sg=1024*2**20,Gg=180*1e3;function Rg(t,e,A){if(t)return t;if(e)return new aA(e);if(A)return new $(A);throw new TypeError("must provide either filehandle, path, or url")}function _g({tbiFilehandle:t,csiFilehandle:e,tbiPath:A,csiPath:i,tbiUrl:n,csiUrl:g,path:r,url:Q}){if(t)return new AA({filehandle:t});if(e)return new EA({filehandle:e});if(A)return new AA({filehandle:new aA(A)});if(i)return new EA({filehandle:new aA(i)});if(g)return new EA({filehandle:new $(g)});if(n)return new AA({filehandle:new $(n)});if(r)return new AA({filehandle:new aA(`${r}.tbi`)});if(Q)return new AA({filehandle:new $(`${Q}.tbi`)});throw new TypeError("must provide one of tbiFilehandle, tbiPath, csiFilehandle, csiPath, tbiUrl, csiUrl")}function Fi(t,e,A,i,n){return t[A]*256+(i-e[A])+n+1}function vg(t,e,A,i,n,g){let r=i-A,Q=e+r;if(t[n]===46)return Q;let a=n;for(let I=n;I<=g;I++)if(I===g||t[I]===Fg){let o=I-a;if(o>=10&&t[a]===83&&t[a+1]===86&&t[a+2]===84&&t[a+3]===89&&t[a+4]===80&&t[a+5]===69&&t[a+6]===61&&t[a+7]===84&&t[a+8]===82&&t[a+9]===65)return e+1;o>=4&&t[a]===69&&t[a+1]===78&&t[a+2]===68&&t[a+3]===61&&(Q=qe(t,a+4,I)),a=I+1}return Q}var xi=new TextDecoder;function yi(t,e){let A=-1,i=e.charCodeAt(0);for(let n=0,g=t.length;n<g;n++){let r=t[n];if(n===A+1&&r!==i)break;r===ge&&(A=n)}return t.subarray(0,A+1)}function Lg(t,e){let A=0;for(let i=0;i<e;i++){let n=t.indexOf(ge,A);if(n===-1){A=t.length;break}A=n+1}return xi.decode(t.subarray(0,A)).split(/\r?\n/).slice(0,e)}function qe(t,e,A){let i=0;for(let n=e;n<A;n++){let g=t[n];if(g>=48&&g<=57)i=i*10+(g-48);else break}return i}function Mg(t,e,A,i,{start:n,end:g,pathCol:r,metaCharCode:Q,decoder:a,callback:I}){let o=0,h=0;for(;o<t.length;){let E=t.indexOf(ge,o);if(E===-1)break;let B=o;o=E+1;let s=B+i;for(;h<A.length&&s>=A[h];)h++;if(t[B]===Q)continue;let N=B;for(let d=1;d<r;d++){let m=t.indexOf(Ke,N);if(m===-1||m>=E){N=E;break}N=m+1}let k=t[N];if(k!==bg&&k!==xg)continue;let u=t.indexOf(Ke,N);(u===-1||u>E)&&(u=E);let D=1/0,w=-1,C=N;for(;C<u;){let d=0,m=C+1;for(;m<u;m++){let c=t[m]-48;if(c<0||c>9)break;d=d*10+c}d<D&&(D=d),d>w&&(w=d),C=m}if(D>=g)return!0;if(w>=n){let d=t[E-1]===pi?E-1:E;I(a.decode(t.subarray(B,d)),Fi(e,A,h,B,i),D,w+1)}}return!1}var wA=class{filehandle;index;chunkCache;headerCache=new gA({});bgzfWorkerPool;constructor({path:e,filehandle:A,url:i,tbiPath:n,tbiUrl:g,tbiFilehandle:r,csiPath:Q,csiUrl:a,csiFilehandle:I,chunkCacheSize:o=Sg,chunkCacheIdleTimeoutMs:h=Gg,chunkCacheBudget:E,bgzfWorkerPool:B}){this.bgzfWorkerPool=B,this.filehandle=Rg(A,e,i),this.index=_g({tbiFilehandle:r,csiFilehandle:I,tbiPath:n,csiPath:Q,tbiUrl:g,csiUrl:a,path:e,url:i}),this.chunkCache=new gA({maxSize:o,sizeOf:s=>s.buffer.byteLength,cacheKey:s=>s.toString(),idleTimeoutMs:h,budget:E,fill:(s,N)=>this.readChunk(s,{signal:N})})}clearChunkCache(){this.chunkCache.clear()}async bytesForRegions(e,A={}){let i=[];for(let{refName:g,start:r,end:Q}of e){let a=await this.index.blocksForRange(g,r,Q,A);for(let I of a)i.push(I)}let n=0;for(let g of jA(i))n+=g.fetchedSize();return n}async getLines(e,A,i,n){let g,r={},Q,a;typeof n=="function"?Q=n:(r=n,Q=n.lineCallback,g=n.signal,a=n.onProgress);let I=await this.index.getMetadata(r),o=A??0,h=i??I.maxRefLength;if(o>h)throw new TypeError("invalid start and end coordinates. start must be less than or equal to end");if(o===h)return;let E=await this.index.blocksForRange(e,o,h,r),B=I.format==="VCF",s=I.columnNumbers.ref||0,N=I.columnNumbers.start||0,k=B?8:I.columnNumbers.end||0,u=Math.max(s,N,k),D=I.metaChar?.charCodeAt(0),w=I.coordinateType==="1-based-closed"?-1:0,C=new TextEncoder,d=new TextDecoder,m=C.encode(e),c=new Int32Array(u+1),p=I.format==="GAF"?{start:o,end:h,pathCol:N,metaCharCode:D,decoder:d,callback:Q}:void 0,y=0;for(let v of E)y+=v.fetchedSize();let l=0;a?.(0,y);let F=1,R=[],M=v=>{for(;R.length<Math.min(v,E.length);){let cA=E[R.length],z=this.chunkCache.get(cA,g);z.catch(()=>{}),R.push(z)}};M(1);for(let v=0,cA=E.length;v<cA;v++){let z=E[v],{buffer:L,cpositions:Ze,dpositions:SA}=await R[v];l+=z.fetchedSize(),a?.(l,y);let Ie=z.minv.dataPosition;if(p){if(Mg(L,Ze,SA,Ie,p))return}else{let q=0,GA=0;for(;q<L.length;){let T=L.indexOf(ge,q);if(T===-1)break;let Si=q+Ie;for(;GA<SA.length&&Si>=SA[GA];)GA++;if(D!==void 0&&L[q]===D){q=T+1;continue}c[0]=q-1;for(let Z=0;Z<u;Z++){let _A=c[Z],oe=_A<T?L.indexOf(Ke,_A+1):-1;c[Z+1]=oe===-1||oe>=T?T:oe}let Xe=c[s-1]+1,ze=c[s]-Xe;if(ze!==m.length){q=T+1;continue}let Oe=!0;for(let Z=0;Z<ze;Z++)if(L[Xe+Z]!==m[Z]){Oe=!1;break}if(!Oe){q=T+1;continue}let RA=qe(L,c[N-1]+1,c[N])+w;if(RA>=h)return;let kA;if(k===0||k===N?kA=RA+1:B?kA=vg(L,RA,c[3]+1,c[4],c[k-1]+1,c[k]):kA=qe(L,c[k-1]+1,c[k]),kA>o){let Z=L[T-1]===pi?T-1:T,_A=d.decode(L.subarray(q,Z));Q(_A,Fi(Ze,SA,GA,q,Ie),RA,kA)}q=T+1}}F=Math.min(F*2,Jg),M(v+1+F)}}async getMetadata(e={}){return this.index.getMetadata(e)}async readHeaderBytes(e){let{firstDataLine:A,maxBlockSize:i}=await this.getMetadata(e),n=(A?.blockPosition??0)+i,g=await this.filehandle.read(n,0,e);return xA(g)}async parseHeader(e){let{metaChar:A,skipLines:i=0}=await this.getMetadata(e),n=await this.readHeaderBytes(e);return{header:xi.decode(A?yi(n,A):n),skippedLines:i>0?Lg(n,i):[]}}getParsedHeader(e={}){return this.headerCache.get("header",e.signal,A=>this.parseHeader({...e,signal:A}))}async getHeaderBuffer(e={}){let{metaChar:A}=await this.getMetadata(e),i=await this.readHeaderBytes(e);return A?yi(i,A):i}async getSkippedLines(e={}){let{skipLines:A=0}=await this.getMetadata(e);return A<=0?[]:(await this.getParsedHeader(e)).skippedLines}async getHeader(e={}){return(await this.getParsedHeader(e)).header}async getHeaderLines(e={}){let{header:A,skippedLines:i}=await this.getParsedHeader(e);return(A?A.split(/\r?\n/):i).filter(Boolean)}async getReferenceSequenceNames(e={}){return(await this.getMetadata(e)).refIdToName}async lineCount(e,A={}){return this.index.lineCount(e,A)}async readChunk(e,A={}){let i=await this.filehandle.read(e.fetchedSize(),e.minv.blockPosition,A),n=await this.bgzfWorkerPool;return Ge(i,e,n)}};var Ji=Pe(et(),1),ne=Pe(Gi(),1),Ug=50*2**20;function dI(t,e,A){let i=t.pluginManager;return new wA({filehandle:(0,ne.openLocation)(t.getConf(e),i),...(0,ne.openTabixIndexFilehandle)(t.getConf([...A,"location"]),t.getConf([...A,"indexType"]),i),chunkCacheSize:Ug})}function Te(t,e){return`${t} ${e}`}function Yg(t){let e=new Map;for(let A of t){e.set(A,A);let i=je(A);if(i!==A){let n=Qe(A);e.set(Te(i,n),A);let g=Ve(A);g!==void 0&&e.set(Te(g,n),A)}}return e}function Hg(t,e,A){let i=t.get(Te(e,A));return i===void 0?t.get(A):i}var bi=class{constructor(e,A){this.file=e;this.adapter=A;this.lookup=(0,Ji.cachedSetup)({setup:async e=>Yg(await this.file.getReferenceSequenceNames(e))})}async assemblyRefNames(e={}){let A=await this.file.getReferenceSequenceNames(e),i=re(this.adapter,e.assemblyName),n=A.filter(g=>$e(g,i)).map(g=>Qe(g));return n.length>0?n:A}async resolve(e,A){let i=await this.lookup(A);return Hg(i,re(this.adapter,e.assemblyName),e.refName)}};export{et as a,Ri as b,xA as c,dI as d,bi as e};
2
+ //# sourceMappingURL=chunk-KDIBFGZM.js.map