{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/hexshield.js?sa=82"],
  "sourcesContent": ["/*! \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n *  \u00A9 2026 Sick Aura Inc. All rights reserved.\n *  Author: David Otero \u2014 SICK AURA (https://www.sickactivewear.com)\n *  PROPRIETARY \u2014 this source code and the visual designs it renders\n *  are the exclusive property of Sick Aura Inc. No license is granted\n *  to copy, modify, distribute, or create derivative works, in whole\n *  or in part, without prior written permission.\n *  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   SICK AURA \u2014 HEXSHIELD hero (Shopify section build)\n   True 32-panel ball (20 hex + 12 pent, truncated icosahedron), micro-hex\n   carbon plates, HDR cyan energy seams. Cinematic director: warp-speed\n   warp-tunnel arrival -> orbit (drag to inspect) -> seam-canyon runs.\n   Imports use jsdelivr /+esm so no importmap is needed inside the theme.\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\nimport * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.160.0/+esm';\nimport { EffectComposer } from 'https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/postprocessing/EffectComposer.js/+esm';\nimport { RenderPass } from 'https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/postprocessing/RenderPass.js/+esm';\nimport { UnrealBloomPass } from 'https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/postprocessing/UnrealBloomPass.js/+esm';\nimport { AfterimagePass } from 'https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/postprocessing/AfterimagePass.js/+esm';\nimport { OrbitControls } from 'https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/controls/OrbitControls.js/+esm';\nimport { RoomEnvironment } from 'https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/environments/RoomEnvironment.js/+esm';\nimport { RGBELoader } from 'https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/loaders/RGBELoader.js/+esm';\n\nconst canvas = document.getElementById('hexshield-canvas');\nif (canvas) init(canvas);\n\nfunction init(canvas){\nconst GROOVE=0.992, BEVEL=0.93, PLATE=0.92, RAISE=0.003, RECESS=0.0015, DOME_L=4;  // AERO (prototype spec): slim seams \u2014 thin cyan lines, not glowing channels\nconst R_GLOW=0.996, CYAN=0x36e8ff, PENT_SHADE=0.42;\n\n/* ---- truncated icosahedron: 12 pentagons + 20 hexagons ---- */\nconst PHI=(1+Math.sqrt(5))/2;\nconst IV=[[-1,PHI,0],[1,PHI,0],[-1,-PHI,0],[1,-PHI,0],[0,-1,PHI],[0,1,PHI],\n          [0,-1,-PHI],[0,1,-PHI],[PHI,0,-1],[PHI,0,1],[-PHI,0,-1],[-PHI,0,1]]\n         .map(v=>new THREE.Vector3(...v).normalize());\nconst IF=[[0,11,5],[0,5,1],[0,1,7],[0,7,10],[0,10,11],[1,5,9],[5,11,4],[11,10,2],\n          [10,7,6],[7,1,8],[3,9,4],[3,4,2],[3,2,6],[3,6,8],[3,8,9],[4,9,5],\n          [2,4,11],[6,2,10],[8,6,7],[9,8,1]];\nconst cut=(a,b,f)=>new THREE.Vector3().lerpVectors(a,b,f).normalize();\n\nconst tiles=[];\nfor(const [ia,ib,ic] of IF){\n  const a=IV[ia], b=IV[ib], c=IV[ic];\n  tiles.push({ pent:false,\n    center:new THREE.Vector3().add(a).add(b).add(c).divideScalar(3).normalize(),\n    ring:[cut(a,b,1/3),cut(a,b,2/3),cut(b,c,1/3),cut(b,c,2/3),cut(c,a,1/3),cut(c,a,2/3)] });\n}\nconst nbrs=Array.from({length:12},()=>new Set());\nfor(const [ia,ib,ic] of IF){ nbrs[ia].add(ib).add(ic); nbrs[ib].add(ia).add(ic); nbrs[ic].add(ia).add(ib); }\nfor(let i=0;i<12;i++)\n  tiles.push({ pent:true, center:IV[i].clone(), ring:[...nbrs[i]].map(j=>cut(IV[i],IV[j],1/3)) });\n\n/* ---- seam graph (60 verts / 90 edges) \u2014 the glowing lines the canyon run flies ---- */\nconst seamVerts=new Map();\nconst skey=v=>`${v.x.toFixed(4)},${v.y.toFixed(4)},${v.z.toFixed(4)}`;\nfunction seamNode(v){ const k=skey(v); if(!seamVerts.has(k)) seamVerts.set(k,{p:v.clone(), nb:new Set()}); return k; }\nfunction seamEdge(a,b){ const ka=seamNode(a), kb=seamNode(b); seamVerts.get(ka).nb.add(kb); seamVerts.get(kb).nb.add(ka); }\nconst eset=new Set();\nfor(const [a,b,c] of IF) for(const [x,y] of [[a,b],[b,c],[c,a]]){\n  const k=Math.min(x,y)+'_'+Math.max(x,y);\n  if(!eset.has(k)){ eset.add(k); seamEdge(cut(IV[x],IV[y],1/3), cut(IV[x],IV[y],2/3)); }\n}\nfor(const [a,b,c] of IF){\n  seamEdge(cut(IV[a],IV[b],1/3), cut(IV[a],IV[c],1/3));\n  seamEdge(cut(IV[b],IV[a],1/3), cut(IV[b],IV[c],1/3));\n  seamEdge(cut(IV[c],IV[a],1/3), cut(IV[c],IV[b],1/3));\n}\n\n/* ---- merged shell: perfect regular panels, domed plates, smooth normals ---- */\nconst P=[], N=[], UV=[], COL=[];\nconst e1=new THREE.Vector3(), e2=new THREE.Vector3(), fn=new THREE.Vector3();\nfunction pushTri(a,b,c, ua,ub,uc, shade, smoothN){\n  P.push(a.x,a.y,a.z, b.x,b.y,b.z, c.x,c.y,c.z);\n  if(smoothN){ for(const p of [a,b,c]){ fn.copy(p).normalize(); N.push(fn.x,fn.y,fn.z); } }\n  else { e1.subVectors(b,a); e2.subVectors(c,a); fn.crossVectors(e1,e2).normalize();\n         N.push(fn.x,fn.y,fn.z, fn.x,fn.y,fn.z, fn.x,fn.y,fn.z); }\n  UV.push(ua[0],ua[1], ub[0],ub[1], uc[0],uc[1]);\n  for(let k=0;k<3;k++) COL.push(shade,shade,shade);\n}\nconst UVS=1.0, lerpTo=(c,p,f)=>new THREE.Vector3().lerpVectors(c,p,f);\n\nconst tileGroups=[], uvRad={hex:0,pent:0};\nfor(const tile of tiles){\n  const _v0=P.length/3;\n  const n=tile.center;\n  const t1=Math.abs(n.x)<0.9 ? new THREE.Vector3(1,0,0) : new THREE.Vector3(0,1,0);\n  const U=new THREE.Vector3().crossVectors(n,t1).normalize();\n  const W=new THREE.Vector3().crossVectors(n,U);\n  let ring=tile.ring.slice().sort((p,q)=> Math.atan2(p.dot(U),p.dot(W)) - Math.atan2(q.dot(U),q.dot(W)));\n  e1.subVectors(ring[1],ring[0]); e2.subVectors(ring[2],ring[0]);\n  if(fn.crossVectors(e1,e2).dot(n)<0) ring=ring.reverse();\n\n  const Cc=ring.reduce((s,p)=>s.add(p), new THREE.Vector3()).divideScalar(ring.length).normalize();\n  const UU=new THREE.Vector3().crossVectors(Cc,t1).normalize();\n  const WW=new THREE.Vector3().crossVectors(Cc,UU);\n  const m0=ring.length;\n  const a0=Math.atan2(ring[0].dot(WW), ring[0].dot(UU));\n  const a1=Math.atan2(ring[1].dot(WW), ring[1].dot(UU));\n  const dir=((a1-a0+2*Math.PI)%(2*Math.PI))<Math.PI ? 1 : -1;\n  let rT=0; for(const p of ring) rT+=Math.hypot(p.dot(UU), p.dot(WW));\n  rT/=m0;\n  const zC=Math.sqrt(Math.max(0,1-rT*rT));\n  ring=ring.map((p,i)=>{ const a=a0+dir*i*2*Math.PI/m0;\n    return Cc.clone().multiplyScalar(zC)\n      .add(UU.clone().multiplyScalar(Math.cos(a)*rT))\n      .add(WW.clone().multiplyScalar(Math.sin(a)*rT)); });\n\n  const K=8, dense=[];\n  for(let i=0;i<ring.length;i++){ const p=ring[i], q=ring[(i+1)%ring.length];\n    for(let k=0;k<K;k++) dense.push(new THREE.Vector3().lerpVectors(p,q,k/K).normalize());\n  }\n  ring=dense;\n\n  const m=ring.length;\n  const jit=0.972+0.028*(Math.abs(Math.sin((tileGroups.length+1)*127.1))%1);   // deterministic per-panel variance\n  const shade=(tile.pent ? PENT_SHADE : 1.0)*jit;\n  // canonical texture frame: +u -> panel corner 0 (patch corners align on every tile)\n  const U2=ring[0].clone().addScaledVector(Cc, -ring[0].dot(Cc)).normalize();\n  const W2=new THREE.Vector3().crossVectors(Cc,U2);\n  const RT=1+RAISE, RP=1+RAISE-RECESS;\n  const base=[], topO=[], topI=[];\n  for(const p of ring){\n    base.push(lerpTo(Cc,p,GROOVE).normalize());\n    topO.push(lerpTo(Cc,p,GROOVE*BEVEL).normalize().multiplyScalar(RT));\n    topI.push(lerpTo(Cc,p,GROOVE*BEVEL*PLATE).normalize().multiplyScalar(RP));\n  }\n  const uv=p=>[0.5+p.clone().sub(Cc).dot(U2)*UVS, 0.5+p.clone().sub(Cc).dot(W2)*UVS];\n  if(tile.pent){ if(!uvRad.pent) uvRad.pent=GROOVE*BEVEL*PLATE*rT*UVS; }\n  else         { if(!uvRad.hex)  uvRad.hex =GROOVE*BEVEL*PLATE*rT*UVS; }\n  const u0=[0.02,0.02];\n  for(let i=0;i<m;i++){\n    const j=(i+1)%m;\n    pushTri(base[i],base[j],topO[j], u0,u0,u0, shade,true);\n    pushTri(base[i],topO[j],topO[i], u0,u0,u0, shade,true);\n    pushTri(topO[i],topO[j],topI[j], uv(topO[i]),uv(topO[j]),uv(topI[j]), shade,true);\n    pushTri(topO[i],topI[j],topI[i], uv(topO[i]),uv(topI[j]),uv(topI[i]), shade,true);\n  }\n  let outer=topI;\n  for(let l=1;l<=DOME_L;l++){\n    const f=1-l/DOME_L;\n    const inner=ring.map(p=>lerpTo(Cc, lerpTo(Cc,p,GROOVE*BEVEL*PLATE), f).normalize().multiplyScalar(RP));\n    for(let i=0;i<m;i++){\n      const j=(i+1)%m;\n      pushTri(outer[i],outer[j],inner[j], uv(outer[i]),uv(outer[j]),uv(inner[j]), shade,true);\n      pushTri(outer[i],inner[j],inner[i], uv(outer[i]),uv(inner[j]),uv(inner[i]), shade,true);\n    }\n    outer=inner;\n  }\n  tileGroups.push({start:_v0, count:P.length/3-_v0, pent:tile.pent, center:tile.center.clone()});\n}\nconst shell=new THREE.BufferGeometry();\nshell.setAttribute('position', new THREE.BufferAttribute(new Float32Array(P),3));\nshell.setAttribute('normal',   new THREE.BufferAttribute(new Float32Array(N),3));\nshell.setAttribute('uv',       new THREE.BufferAttribute(new Float32Array(UV),2));\nshell.setAttribute('color',    new THREE.BufferAttribute(new Float32Array(COL),3));\n\n/* ---- micro-hex carbon texture ---- */\nfunction drawCell(g, cx, cy, rad, sides, rot, fill, C, lw){\n  lw=lw||1;\n  g.beginPath();\n  for(let k=0;k<sides;k++){ const a=rot+k*2*Math.PI/sides;\n    const x=cx+rad*Math.cos(a), y=cy+rad*Math.sin(a);\n    k?g.lineTo(x,y):g.moveTo(x,y); }\n  g.closePath();\n  g.fillStyle=fill; g.fill();\n  g.lineWidth=2.6*lw; g.strokeStyle=C.s1; g.stroke();\n  g.lineWidth=1*lw;   g.strokeStyle=C.s2; g.stroke();\n}\nfunction cellPatchTexture(light, sides, uvR){\n  const C=light ? {base:'#f4f6f8',a:'#f1f4f6',b:'#eef1f4',s1:'#e0e5ea',s2:'#d2d8de'}   // lighter weave \u2014 tone-on-tone\n                : {base:'#23282e',a:'#272c33',b:'#242930',s1:'#454d57',s2:'#1b1f24'};\n  const S=2048, LW=S/1024, cv=document.createElement('canvas'); cv.width=cv.height=S;\n  const g=cv.getContext('2d');\n  g.fillStyle=C.base; g.fillRect(0,0,S,S);\n  const cx0=S/2, cy0=S/2, Rpx=uvR*S*0.94;             // patch inset a touch inside the plate face\n  let n=0;\n  if(sides===6){\n    // honeycomb, maximal fill: any cell that fits WHOLE inside the panel\n    // outline is placed \u2014 rows run all the way to the edge and corners.\n    const K=12, rc=Rpx/12.5;                          // same weave/layout \u2014 cells breathe inside their slots\n    const H=Rpx*0.98, h=H*Math.cos(Math.PI/6);        // one ring off \u2014 pattern ends at the plate face\n    const inside=(x,y)=>{ for(let k2=0;k2<6;k2++){ const a=Math.PI/6+k2*Math.PI/3;\n      if((x-cx0)*Math.cos(a)+(y-cy0)*Math.sin(a)>h) return false; } return true; };\n    for(let q=-K;q<=K;q++) for(let r=-K;r<=K;r++){\n      if(Math.abs(q+r)>K) continue;\n      const x=cx0+rc*Math.sqrt(3)*(q+r/2), y=cy0+rc*1.5*r;\n      let ok=true;\n      for(let k2=0;k2<6&&ok;k2++){ const a=Math.PI/6+k2*Math.PI/3;\n        ok=inside(x+rc*0.98*Math.cos(a), y+rc*0.98*Math.sin(a)); }\n      if(ok) drawCell(g, x, y, rc*0.74, 6, Math.PI/6, (n++)%3===0?C.a:C.b, C, LW);   // smooth space around every cell\n    }\n  } else {\n    // PENTAGON-STAR MEDALLION \u2014 David's reference: rosettes of pentagons\n    // sharing full edges, the leftover gaps forming clean five-pointed\n    // stars, the whole pattern growing with 5-fold symmetry. Same flip\n    // rule (180deg about each edge midpoint) + SAT collision test, but\n    // candidates are placed NEAREST-FIRST (ties by angle), so growth is\n    // ring-by-ring and symmetric instead of greedy \u2014 the stars emerge\n    // evenly, just like the picture.\n    const rc=Rpx/7.4;\n    const verts=(x,y,rot,r)=>{ const v=[]; for(let k=0;k<5;k++){ const a=rot+k*2*Math.PI/5;\n      v.push([x+r*Math.cos(a), y+r*Math.sin(a)]); } return v; };\n    const collide=(A,B)=>{\n      for(const P of [A,B]) for(let i=0;i<P.length;i++){\n        const j=(i+1)%P.length, ax=P[j][1]-P[i][1], ay=P[i][0]-P[j][0];\n        let a0=Infinity,a1=-Infinity,b0=Infinity,b1=-Infinity;\n        for(const p of A){ const d=p[0]*ax+p[1]*ay; a0=Math.min(a0,d); a1=Math.max(a1,d); }\n        for(const p of B){ const d=p[0]*ax+p[1]*ay; b0=Math.min(b0,d); b1=Math.max(b1,d); }\n        if(a1<b0||b1<a0) return false;\n      }\n      return true;\n    };\n    const placed=[], seen=new Set(), cand=[{x:cx0,y:cy0,rot:0,d:0}];\n    while(cand.length&&placed.length<460){\n      let bi=0;\n      for(let i=1;i<cand.length;i++){\n        const a=cand[i], b=cand[bi];\n        const da=a.d-b.d;\n        if(da<-0.5) bi=i;\n        else if(Math.abs(da)<=0.5 &&\n                Math.atan2(a.y-cy0,a.x-cx0)<Math.atan2(b.y-cy0,b.x-cx0)) bi=i;\n      }\n      const c=cand.splice(bi,1)[0];\n      if(c.d>Rpx-rc*0.55) continue;\n      const V=verts(c.x,c.y,c.rot,rc*0.88);\n      let hit=false;\n      for(const p of placed){ if(Math.hypot(p.x-c.x,p.y-c.y)<rc*2.1 && collide(V,p.V)){ hit=true; break; } }\n      if(hit) continue;\n      placed.push({x:c.x,y:c.y,V});\n      drawCell(g, c.x, c.y, rc*0.94, 5, c.rot, (n++)%3===0?C.a:C.b, C, LW);\n      for(let e=0;e<5;e++){\n        const a1=c.rot+e*2*Math.PI/5, a2=c.rot+(e+1)*2*Math.PI/5;\n        const mx=c.x+rc*(Math.cos(a1)+Math.cos(a2))/2;\n        const my=c.y+rc*(Math.sin(a1)+Math.sin(a2))/2;\n        const nx2=2*mx-c.x, ny2=2*my-c.y;\n        const key=Math.round(nx2/2)+','+Math.round(ny2/2);\n        if(seen.has(key)) continue;\n        seen.add(key);\n        cand.push({x:nx2, y:ny2, rot:c.rot+Math.PI, d:Math.hypot(nx2-cx0,ny2-cy0)});\n      }\n    }\n  }\n  // baked rim AO \u2014 strong on dark carbon, whisper-thin on the white plates\n  // (a wide dark ring reads as dirty off-white edges on white)\n  const H2=uvR*S;\n  const ao=g.createRadialGradient(cx0,cy0,H2*(light?0.93:0.80), cx0,cy0,H2*1.05);\n  ao.addColorStop(0,'rgba(0,0,0,0)'); ao.addColorStop(1,'rgba(0,0,0,'+(light?0.05:0.20)+')');\n  g.fillStyle=ao; g.fillRect(0,0,S,S);\n  const img=g.getImageData(0,0,S,S), d=img.data;\n  for(let i=0;i<104000;i++){ const px=(Math.random()*S|0)+(Math.random()*S|0)*S;\n    const dd=(Math.random()*14-7)|0; d[px*4]+=dd; d[px*4+1]+=dd; d[px*4+2]+=dd; }\n  g.putImageData(img,0,0);\n  const tex=new THREE.CanvasTexture(cv);\n  tex.wrapS=tex.wrapT=THREE.ClampToEdgeWrapping; tex.anisotropy=8; tex.colorSpace=THREE.SRGBColorSpace;\n  return tex;\n}\nconst hexTex=cellPatchTexture(false, 6, uvRad.hex);        // dark honeycomb \u2014 hexagon plates\nconst hexTexWhite=cellPatchTexture(true, 6, uvRad.hex);     // light honeycomb \u2014 the white-sweep finale\nconst pentTex=cellPatchTexture(false, 5, uvRad.pent);       // dark pentagon-star medallion \u2014 pentagon plates\n/* the VALVE \u2014 every real ball has one; drawn onto a copy of the hex plate for ONE panel */\nconst valveTex=(()=>{\n  const src=hexTexWhite.image, S=src.width;\n  const cv=document.createElement('canvas'); cv.width=cv.height=S;\n  const g=cv.getContext('2d'); g.drawImage(src,0,0);\n  const vx=S/2, vy=S/2, vr=S*0.030;\n  g.beginPath(); g.arc(vx,vy,vr,0,6.2832); g.fillStyle='#15181c'; g.fill();      // recessed seat\n  g.lineWidth=S*0.004; g.strokeStyle='#3c444d'; g.stroke();                       // rim catch-light\n  g.beginPath(); g.arc(vx,vy,vr*0.42,0,6.2832); g.fillStyle='#0c0e11'; g.fill();  // needle port\n  const tex=new THREE.CanvasTexture(cv);\n  tex.wrapS=tex.wrapT=THREE.ClampToEdgeWrapping; tex.anisotropy=8; tex.colorSpace=THREE.SRGBColorSpace;\n  return tex;\n})();\n/* tangent-space normal maps derived from the pattern height \u2014 impressions catch\n   light directionally instead of grayscale-bump wiggle */\nfunction normalFromTexture(srcTex, strength){\n  const N=1024;\n  const cv=document.createElement('canvas'); cv.width=cv.height=N;\n  const g=cv.getContext('2d'); g.drawImage(srcTex.image,0,0,N,N);\n  const src=g.getImageData(0,0,N,N).data;\n  const h=new Float32Array(N*N);\n  for(let i=0;i<N*N;i++) h[i]=(src[i*4]+src[i*4+1]+src[i*4+2])/765;\n  const out=g.createImageData(N,N), o=out.data;\n  for(let y=0;y<N;y++) for(let x=0;x<N;x++){\n    const xm=(x-1+N)%N, xp=(x+1)%N, ym=(y-1+N)%N, yp=(y+1)%N;\n    const dx=(h[y*N+xp]-h[y*N+xm])*strength;\n    const dy=(h[yp*N+x]-h[ym*N+x])*strength;\n    const inv=1/Math.sqrt(dx*dx+dy*dy+1);\n    const i4=(y*N+x)*4;\n    o[i4  ]=((-dx*inv)*0.5+0.5)*255;\n    o[i4+1]=(( dy*inv)*0.5+0.5)*255;\n    o[i4+2]=(inv*0.5+0.5)*255;\n    o[i4+3]=255;\n  }\n  g.putImageData(out,0,0);\n  const tex=new THREE.CanvasTexture(cv);\n  tex.wrapS=tex.wrapT=THREE.ClampToEdgeWrapping; tex.anisotropy=8; tex.colorSpace=THREE.NoColorSpace;\n  return tex;\n}\nconst hexNrm=normalFromTexture(hexTex,2.0);\nconst hexWhiteNrm=normalFromTexture(hexTexWhite,2.6);\nconst pentNrm=normalFromTexture(pentTex,2.0);\nconst valveNrm=normalFromTexture(valveTex,2.6);\n\n/* ---- scene (dark studio \u2014 shop hero) ---- */\nconst renderer=new THREE.WebGLRenderer({canvas, antialias:true});\nrenderer.setPixelRatio(Math.min(1.75, window.devicePixelRatio||1));\nrenderer.toneMapping=THREE.ACESFilmicToneMapping; renderer.toneMappingExposure=1.40;  // brighter off-white arena\nconst scene=new THREE.Scene(); scene.background=new THREE.Color(0xffffff);  // white Grid arena\nconst pmrem=new THREE.PMREMGenerator(renderer);\nscene.environment=pmrem.fromScene(new RoomEnvironment(), 0.04).texture;\nnew RGBELoader().load((window.SA_HDR || 'https://www.sickaura.com/studio_small_09_1k.hdr'),\n  hdr=>{ scene.environment=pmrem.fromEquirectangular(hdr).texture; hdr.dispose(); },\n  undefined, ()=>{});                                   // real softboxes in the reflections (CORS-served)\nconst camera=new THREE.PerspectiveCamera(40,1,0.015,140); camera.position.set(0,0.35,3.9);\nscene.add(camera);\n\n/* wormhole tunnel \u2014 anime/Trek warp: helix-twisted light lanes streaming past,\n   rendered from inside a shader tube that rides with the camera */\nconst BG_WHITE=new THREE.Color(0xffffff);\nconst bgMat=new THREE.ShaderMaterial({\n  depthTest:false, depthWrite:false,\n  uniforms:{ uCol:{value:new THREE.Color(1,1,1)} },\n  vertexShader:'void main(){ gl_Position=vec4(position.xy,0.99999,1.0); }',\n  fragmentShader:'uniform vec3 uCol; void main(){ gl_FragColor=vec4(uCol,1.0); }'   // untone-mapped; (1,1,1) = TRUE #fff\n});\nconst bgQuad=new THREE.Mesh(new THREE.PlaneGeometry(2,2), bgMat);\nbgQuad.frustumCulled=false; bgQuad.renderOrder=-1000; scene.add(bgQuad);\nconst tunnelMat=new THREE.ShaderMaterial({\n  transparent:true, depthWrite:false, side:THREE.BackSide,   // normal blending: black ink on the white space\n  uniforms:{ uTime:{value:0}, uAlpha:{value:0}, uBend:{value:1}, uSpeed:{value:2.6}, uWire:{value:0.35}, uInk:{value:1.0},\n             uColA:{value:new THREE.Color(0.40,0.40,0.40)}, uColB:{value:new THREE.Color(1.18,1.18,1.18)} },\n  vertexShader:`varying vec2 vUv; varying float vDepth;\n    uniform float uBend;\n    void main(){\n      vUv=uv;\n      vec3 p=position;\n      float d=max(0.0, 27.0-p.z);                      // depth ahead of the camera (0..58)\n      p.x += uBend*0.006*d*d;                          // the curvature \u2014 bends right...\n      p.y -= uBend*0.0009*d*d;                         // ...and dips. uBend->0 straightens it\n      vDepth=d;\n      gl_Position=projectionMatrix*modelViewMatrix*vec4(p,1.0);\n    }`,\n  fragmentShader:`varying vec2 vUv; varying float vDepth;\n    uniform float uTime, uAlpha, uSpeed, uWire, uInk;\n    uniform vec3 uColA, uColB;\n    void main(){\n      // rings flow FORWARD; pow-tail bleeds back toward the camera = faint trail blur\n      float rphase=1.0-fract(vDepth*0.55 + uTime*uSpeed);         // rings flow TOWARD the camera\n      float ringW=pow(rphase, 7.0/uWire);                        // body + trail (uWire<1 = finer)\n      float ringC=pow(rphase, 22.0/uWire);                       // bright white core\n      float sw=(sin(uTime*0.34)*0.8 + sin(uTime*0.77+1.3)*0.5)*vDepth*0.05;  // swirl \u2014 drifts and REVERSES\n      float gv=vUv.x*36.0 + sw;\n      float fv=min(fract(gv),1.0-fract(gv));\n      float lonW=1.0-smoothstep(0.0,fwidth(gv)*2.1*uWire,fv);    // wire body\n      float lonC=1.0-smoothstep(0.0,fwidth(gv)*0.8*uWire,fv);    // white core\n      float wide=max(ringW*0.95, lonW*0.85);\n      float core=max(ringC, lonC);\n      // flank colour outlines each wire, HDR core glows through bloom (per-layer palette)\n      vec3 col=mix(uColA, uColB, clamp(core*1.2,0.0,1.0));\n      float fadeN=smoothstep(4.0,14.0,vDepth);   // near rings gone \u2014 no fat arcs in the lens\n      float fadeF=1.0-smoothstep(40.0,58.0,vDepth);\n      float a=wide*fadeN*fadeF*uAlpha*uInk;\n      gl_FragColor=vec4(col, a);\n    }`\n});\n// the green wireframe \u2014 rings RACE toward the camera\nconst tunnelMat2=tunnelMat.clone();\ntunnelMat2.uniforms.uSpeed.value=9.0;                  // very fast flow\ntunnelMat2.uniforms.uWire.value=0.55;                  // fine, but enough width for the hue to register\ntunnelMat2.uniforms.uInk.value=1.0;                    // full ink \u2014 neon must READ\ntunnelMat2.uniforms.uColA.value=new THREE.Color(0.00,0.48,0.10);  // deep saturated green \u2014 holds against white\ntunnelMat2.uniforms.uColB.value=new THREE.Color(0.10,1.55,0.28);  // green-dominant core: glows, stays GREEN\nconst tunnelGeo2=new THREE.CylinderGeometry(5.6,5.6,62,40,80,true);\ntunnelGeo2.rotateX(Math.PI/2);\nconst tunnel2=new THREE.Mesh(tunnelGeo2, tunnelMat2);\ntunnel2.position.set(0,0,-27); tunnel2.frustumCulled=false; tunnel2.visible=false;\ncamera.add(tunnel2);\n\nconst ball=new THREE.Group(); scene.add(ball);\n/* roughness variation \u2014 real surfaces never reflect evenly: soft blotches\n   + faint scuff streaks break the highlights up */\nfunction wearTexture(){\n  const S=512, cv=document.createElement('canvas'); cv.width=cv.height=S;\n  const g=cv.getContext('2d');\n  g.fillStyle='#8a8a8a'; g.fillRect(0,0,S,S);\n  let seed=7; const rnd=()=>{ seed=(seed*16807)%2147483647; return seed/2147483647; };\n  for(let i=0;i<46;i++){                                 // blotches\n    const x=rnd()*S, y=rnd()*S, r=20+rnd()*90, v=(rnd()*30-15)|0;\n    const rg=g.createRadialGradient(x,y,0,x,y,r);\n    rg.addColorStop(0,'rgba('+(138+v)+','+(138+v)+','+(138+v)+',0.5)');\n    rg.addColorStop(1,'rgba(138,138,138,0)');\n    g.fillStyle=rg; g.beginPath(); g.arc(x,y,r,0,6.2832); g.fill();\n  }\n  g.globalAlpha=0.10;                                    // scuff streaks\n  for(let i=0;i<26;i++){\n    const x=rnd()*S, y=rnd()*S, a=rnd()*Math.PI, L=30+rnd()*120;\n    g.strokeStyle=rnd()<0.5?'#b5b5b5':'#6c6c6c'; g.lineWidth=1+rnd()*2;\n    g.beginPath(); g.moveTo(x,y); g.lineTo(x+Math.cos(a)*L, y+Math.sin(a)*L); g.stroke();\n  }\n  g.globalAlpha=1;\n  const tex=new THREE.CanvasTexture(cv);\n  tex.wrapS=tex.wrapT=THREE.RepeatWrapping;\n  return tex;\n}\nconst wearTex=wearTexture();\nconst tileMat=new THREE.MeshPhysicalMaterial({\n  color:0xd9dee3, map:hexTex, normalMap:hexNrm, normalScale:new THREE.Vector2(0.62,0.62), vertexColors:true,\n  metalness:0.45, roughness:0.5, roughnessMap:wearTex, envMapIntensity:0.6,\n  clearcoat:1.0, clearcoatRoughness:0.24,                // lacquered carbon \u2014 softer sheen\n  clearcoatNormalMap:hexNrm, clearcoatNormalScale:new THREE.Vector2(0.32,0.32),  // lacquer pools over the impressions\n});\nconst whiteMat=new THREE.MeshPhysicalMaterial({\n  color:0xffffff, map:hexTexWhite, normalMap:hexWhiteNrm, normalScale:new THREE.Vector2(0.62,0.62), vertexColors:true,\n  metalness:0.12, roughness:0.5, roughnessMap:wearTex, envMapIntensity:0.52,\n  clearcoat:0.9, clearcoatRoughness:0.30,\n  clearcoatNormalMap:hexWhiteNrm, clearcoatNormalScale:new THREE.Vector2(0.32,0.32),\n  emissive:0xffffff, emissiveMap:hexTexWhite, emissiveIntensity:0.12,  // glow-in-the-dark pigment (prototype)\n});\nconst tileMatPent=new THREE.MeshPhysicalMaterial({\n  color:0xd9dee3, map:pentTex, normalMap:pentNrm, normalScale:new THREE.Vector2(0.62,0.62), vertexColors:true,\n  metalness:0.45, roughness:0.5, roughnessMap:wearTex, envMapIntensity:0.6,\n  clearcoat:1.0, clearcoatRoughness:0.24,                // PENT_SHADE still darkens via vertexColors\n  clearcoatNormalMap:pentNrm, clearcoatNormalScale:new THREE.Vector2(0.32,0.32),\n});\nconst tileMatValve=new THREE.MeshPhysicalMaterial({\n  color:0xffffff, map:valveTex, normalMap:valveNrm, normalScale:new THREE.Vector2(0.62,0.62), vertexColors:true,\n  metalness:0.12, roughness:0.5, roughnessMap:wearTex, envMapIntensity:0.52,\n  clearcoat:0.9, clearcoatRoughness:0.30,\n  clearcoatNormalMap:valveNrm, clearcoatNormalScale:new THREE.Vector2(0.32,0.32),\n  emissive:0xffffff, emissiveMap:valveTex, emissiveIntensity:0.12,  // glows with the plates \u2014 the dark port stays dark\n});\nfor(const g of tileGroups) shell.addGroup(g.start, g.count, 0);   // one group per panel\nball.add(new THREE.Mesh(shell, [tileMat, whiteMat, tileMatPent, tileMatValve]));\nshell.groups.forEach((g,i)=>{ if(tileGroups[i].pent) g.materialIndex=2; });\n// hexagons ordered top-to-bottom (then around) for the sequential white sweep\nconst hexOrder=tileGroups.map((g,i)=>i).filter(i=>!tileGroups[i].pent)\n  .sort((a,b)=>{ const ca=tileGroups[a].center, cb=tileGroups[b].center;\n    return (cb.y-ca.y) || (Math.atan2(ca.x,ca.z)-Math.atan2(cb.x,cb.z)); });\nsetWhite.valve=hexOrder[hexOrder.length-1];              // the last-to-whiten hexagon carries the valve\nshell.groups[setWhite.valve].materialIndex=3;\nfunction setWhite(nHex){                                          // classic colorway FULL-TIME: every hex stays white (valve keeps its port)\n  for(let k=0;k<hexOrder.length;k++)\n    shell.groups[hexOrder[k]].materialIndex = hexOrder[k]===setWhite.valve ? 3 : 1;\n}\nsetWhite(0);                                             // white hexes / black pents from frame one\nball.add(new THREE.Mesh(new THREE.SphereGeometry(R_GLOW,96,96),\n  new THREE.MeshBasicMaterial({color:new THREE.Color(CYAN).multiplyScalar(2.5)})));\n\nconst keyL=new THREE.DirectionalLight(0xffffff,1.85); keyL.position.set(1.2,1.6,1.8); scene.add(keyL); scene.add(keyL.target);\nconst rimL=new THREE.DirectionalLight(0x66f0ff,0.9); rimL.position.set(-1.6,-0.4,-1.4); scene.add(rimL); scene.add(rimL.target);\nconst camRightV=new THREE.Vector3(), camUpV=new THREE.Vector3();\nconst filL=new THREE.DirectionalLight(0x8fa3b8,0.5); filL.position.set(-1.2,0.8,1.0); scene.add(filL);\nconst warpGlow=new THREE.PointLight(0x36e8ff, 0, 0, 1.5); scene.add(warpGlow);  // cyan wash on the runaway ball\nconst ambL=new THREE.AmbientLight(0x39434c,0.55); scene.add(ambL);\n\n/* breaker rig for the finale: KEY/RIM/FILL trip when the first hexes turn\n   white \u2014 lamps die like hot halogens (superlinear fade, colour collapsing\n   white -> amber -> ember), AMB stays on, the arena dims to its slate share.\n   All-on is numerically identical to the stock look. */\nconst WARM1=new THREE.Color(1.00,0.72,0.42), WARM2=new THREE.Color(1.00,0.30,0.06), WARM3=new THREE.Color(0.55,0.04,0.00);\nconst HAL={\n  key:{ L:1, T:1, nom:1.85, col:new THREE.Color(0xffffff), light:keyL, share:0.42 },\n  rim:{ L:1, T:1, nom:0.9,  col:new THREE.Color(0x66f0ff), light:rimL, share:0.13 },\n  fil:{ L:1, T:1, nom:0.5,  col:new THREE.Color(0x8fa3b8), light:filL, share:0.20 },\n  amb:{ L:1, T:1, nom:0.55, col:new THREE.Color(0x39434c), light:ambL, share:0.25 },\n};\nconst halFULL=new THREE.Color(0,0,0), halTmp=new THREE.Color(), halBg=new THREE.Color(), halEff=new THREE.Color();\nlet darkRoom=false, bgKill=0, finaleDone=false, filtB=1;   // finale: the arena dies to TRUE black and STAYS black; the 1.09 filter fades out with it\nfor(const k in HAL){ halTmp.copy(HAL[k].col).multiplyScalar(HAL[k].share); halFULL.add(halTmp); }\nfunction halogenCol(c, out){\n  const t=c.L;\n  if(t>0.62){ out.copy(WARM1).lerp(c.col, (t-0.62)/0.38); }\n  else if(t>0.25){ out.copy(WARM2).lerp(WARM1, (t-0.25)/0.37); }\n  else { out.copy(WARM3).lerp(WARM2, Math.max(0,t)/0.25); }\n  return out;\n}\nfunction updateHalogen(dt){\n  halBg.setRGB(0,0,0);\n  let sum=0;\n  for(const k in HAL){\n    const c=HAL[k];\n    const tau=c.T>c.L ? (finaleDone?1.8:0.30) : 1.15;  // fast warm-up in-show; a slow dimmer RISE for the ending (no flash)\n    c.L += (c.T-c.L)*(1-Math.exp(-dt/tau));\n    if(c.L<0.003&&c.T===0) c.L=0;\n    halogenCol(c, halEff);\n    c.light.color.copy(halEff);\n    c.light.intensity=c.nom*Math.pow(c.L,1.6);         // filaments dim superlinearly (finale never relights \u2014 AMB stays at exact prototype 0.55)\n    sum+=c.L;\n    halTmp.copy(halEff).multiplyScalar(c.share*Math.pow(c.L,1.3));\n    halBg.add(halTmp);\n  }\n  halBg.r=Math.min(1,halBg.r/halFULL.r); halBg.g=Math.min(1,halBg.g/halFULL.g); halBg.b=Math.min(1,halBg.b/halFULL.b);\n  bgKill += ((darkRoom?1:0)-bgKill)*Math.min(1,dt*2.5);\n  bgMat.uniforms.uCol.value.copy(halBg).multiplyScalar(1-bgKill);   // pitch-black room ONLY during the finale\n  const f=sum/4;\n  const eB=finaleDone?1.33:1;                        // TRUE prototype reflections\n  tileMat.envMapIntensity=0.6*f*eB; whiteMat.envMapIntensity=0.52*f*eB; tileMatPent.envMapIntensity=0.6*f*eB; tileMatValve.envMapIntensity=0.52*f*eB;\n  // phosphorescent whites: just under the clip point \u2014 the honeycomb stays etched in the glow\n  whiteMat.emissiveIntensity=0.12+1.10*Math.pow(1-f,1.4);   // EXACT prototype phosphor \u2014 perfect white, honeycomb stays etched\n  tileMatValve.emissiveIntensity=whiteMat.emissiveIntensity;\n  const fTgt=(finaleDone||darkRoom)?0:1;                     // the 1.09 white-point filter dies with the room \u2014 dark phase renders at true prototype values\n  if(Math.abs(filtB-fTgt)>0.001){\n    filtB += (fTgt-filtB)*Math.min(1,dt*0.8);\n    canvas.style.filter='brightness('+(1+0.09*filtB).toFixed(4)+')';   // fades out for the exact-prototype ending, back in on restart\n  }\n  bloom.strength=0.55-0.16*(1-f);                      // seams calm down in the dark (prototype behaviour)\n}\nconst composer=new EffectComposer(renderer);\ncomposer.addPass(new RenderPass(scene,camera));\nconst afterimage=new AfterimagePass(0.8);                 // motion-blur trails for the high-speed roll\nafterimage.enabled=false;\ncomposer.addPass(afterimage);\nconst bloom=new UnrealBloomPass(new THREE.Vector2(1,1), 0.55, 0.3, 1.05);\ncomposer.addPass(bloom);\n\nconst controls=new OrbitControls(camera, renderer.domElement);\ncontrols.enableDamping=true; controls.dampingFactor=0.06;\ncontrols.enablePan=false; controls.enableZoom=false;                 // never steal the page scroll\ncontrols.minDistance=1.5; controls.maxDistance=6;\ncontrols.autoRotate=true; controls.autoRotateSpeed=0.7;\nconst isCoarse=window.matchMedia('(pointer: coarse)').matches;\ncontrols.enableRotate=!isCoarse;                                     // touch users scroll, desktop drags\nif(isCoarse){\n  controls.touches={ONE:null, TWO:null};                             // no touch gestures at all\n  renderer.domElement.style.touchAction='pan-y';                     // undo OrbitControls' touch-action:none\n}\n\nfunction resize(){\n  const w=canvas.clientWidth||1, h=canvas.clientHeight||1;\n  renderer.setSize(w,h,false); composer.setSize(w,h); bloom.setSize(w,h);\n  camera.aspect=w/h; camera.updateProjectionMatrix();\n}\nnew ResizeObserver(resize).observe(canvas); resize();\n\n/* ---- cinematic director: WARP -> ORBIT -> CANYON (seam-river) runs ---- */\nconst clock=new THREE.Clock();\n/* Seconds readout \u2014 total runtime + current shot clock. PERMANENT (per David). */\nconst timerEl=document.createElement('div');\ntimerEl.style.cssText='position:fixed;left:10px;bottom:10px;z-index:9999;font:600 11px/1.4 ui-monospace,Menlo,monospace;color:#0a2a33;background:rgba(255,255,255,.72);padding:6px 9px;border-radius:6px;pointer-events:none;letter-spacing:.06em';\ndocument.body.appendChild(timerEl);\nlet totalT=0;\n/* NERD SPEC FEED \u2014 minimal engineering stats rotating with the show's phases */\nconst specEl=document.createElement('div');\nspecEl.style.cssText='position:absolute;left:10px;top:8px;z-index:3;font:600 10px/1.8 ui-monospace,Menlo,monospace;letter-spacing:.16em;pointer-events:none;transition:opacity .35s;text-transform:uppercase;text-align:left;color:#7d6bff';   // flat bluish purple, anchored in the hero's top-left\n(canvas.parentElement||document.body).appendChild(specEl);   // INSIDE the hero \u2014 scrolls away with it (the timer stays floating)\nconst SPECS={\n  warp:[\n    'LAUNCH \u00B7 INSTANT ACCELERATION',\n    'SPIRAL 180\u00B0 \u00B7 DRAIN CW',\n    'TUNNEL \u00D8 11.2 \u00B7 NEON WIREFRAME',\n    'ROLL AXIS \u00B7 MOTION-DERIVED',\n  ],\n  orbit:[\n    'TRUNCATED ICOSAHEDRON',\n    '32 PANELS \u00B7 20 HEX \u00B7 12 PENT',\n    'THERMAL-BONDED \u00B7 STITCHLESS',\n    'SIZE 5 \u00B7 \u00D8 22 CM \u00B7 430 G',\n    '90 EDGES \u00B7 60 VERTICES',\n  ],\n  canyon:[\n    'SEAM: DICHROIC CYAN FILM',\n    'RETROREFLECTIVE MICRO-GLASS BEADS',\n    'SEAM CHANNEL 1.6 MM',\n    'ENERGY CORE \u00B7 HDR EMISSION',\n  ],\n  macro:[\n    'CASING: PU \u00B7 MICRO-EMBOSSED',\n    'PATTERN PRINTED UNDER LAMINATE',\n    'CLEARCOAT LACQUER 0.4 MM',\n    'IMPRESSION DEPTH 0.3 MM',\n    'HEX CELLS \u00B7 74% FILL \u00B7 WHOLE CELLS ONLY',\n    'NTAG 424 DNA \u00B7 AES-128 \u00B7 TAP TO VERIFY',\n  ],\n  dark:[\n    'PHOSPHOR: SrAl\u2082O\u2084:Eu,Dy',\n    'CHARGE 20 MIN \u00B7 GLOW 60+ MIN',\n    'GLOW PIGMENT \u00B7 PANEL-CAST',\n    'PENTAGON MEDALLION \u00B7 EDGE-FLIP TILING',\n  ],\n  final:[\n    'KIX \u00B7 GENERATION 1.0',\n    'CLASSIC COLOURWAY \u00B7 20 WHITE \u00B7 12 BLACK',\n    'SERIOUS AURA\u2122',\n    'VALVE \u00B7 SINGLE-PORT \u00B7 PANEL 20',\n  ],\n};\nlet specKey='', specIdx=0, specT=-10;\nfunction specTick(){\n  const key = mode==='warp' ? 'warp'\n            : mode==='canyon' ? 'canyon'\n            : mode==='macro' ? (darkRoom?'dark':'macro')\n            : (finaleDone?'final':'orbit');\n  if(key!==specKey){ specKey=key; specIdx=0; specT=totalT-10; }\n  if(totalT-specT>=3.5){\n    specT=totalT;\n    const list=SPECS[key];\n    const line=list[specIdx%list.length]; specIdx++;\n    specEl.style.opacity=0;\n    setTimeout(()=>{\n      specEl.innerHTML='<div style=\"opacity:.5;font-size:8px;letter-spacing:.22em\">KIX \u00B7 SPEC FEED</div><div>'+line+'</div>';\n      specEl.style.opacity=1;\n    },180);\n  }\n  // neon green everywhere \u2014 no ink switching\n}\nconst FAR=64;\nconst p0=new THREE.Vector3(), dir0=new THREE.Vector3(),\n      posV=new THREE.Vector3(), aheadV=new THREE.Vector3(),\n      lookV=new THREE.Vector3(), upV=new THREE.Vector3(), q=new THREE.Quaternion();\nlet mode='warp', mt=0, wait=0, d0=3.9, spinRate=0.4;    // cruise spin \u2014 brisker display turn\nlet curve=null, curveLen=1, canyonSpd=0.5;\nconst macroDir=new THREE.Vector3(), macroFrom=new THREE.Vector3(), macroAxis=new THREE.Vector3();\nlet macroFromD=3.9;\nconst elastic=p=> p<=0?0 : p>=1?1 : Math.pow(2,-10*p)*Math.sin((p*10-0.75)*(2*Math.PI/3))+1;\nconst sm=p=>p*p*(3-2*p);\n\nconst warpDir=new THREE.Vector3(0,0.35,3.9).normalize();\nconst warpAxis=new THREE.Vector3().crossVectors(warpDir, new THREE.Vector3(0,1,0)).normalize();\ncontrols.enabled=false;\nconst warpSide=new THREE.Vector3().crossVectors(warpDir, new THREE.Vector3(0,1,0)).normalize();\nconst warpFwd=warpDir.clone().negate(); warpFwd.y=0; warpFwd.normalize();      // the ball's travel direction\nconst warpRollAxis=new THREE.Vector3(0,1,0).cross(warpFwd).normalize();        // axis for FORWARD roll (ground below)\nconst GLOW_PTS=[[3,0],[5,0.7],[7,1.3],[9,2.3],[18,3.0]];                        // David's glow-vs-distance curve\nconst warpTang=new THREE.Vector3(), warpSteerAxis=new THREE.Vector3();          // front-wheel steering of the roll\nconst prevBallPos=new THREE.Vector3();\nconst warpFog=new THREE.Fog(new THREE.Color(2.2,2.2,2.2), 22, 36);   // HDR \u2014 consumed pixels bloom into the light                                  // the light at the end of the tunnel\ncamera.position.copy(warpDir).multiplyScalar(3.9);\ncamera.fov=55; camera.updateProjectionMatrix();\nball.position.copy(warpDir).multiplyScalar(5.2).addScaledVector(warpSide,1.5); // hidden behind the camera\n\nfunction startCanyon(){\n  mode='canyon'; mt=0; controls.enabled=false;\n  setWhite(0);                                   // classic colorway holds \u2014 nothing to un-white\n  p0.copy(camera.position); d0=p0.length(); dir0.copy(p0).normalize();\n  const dirLocal=dir0.clone().applyQuaternion(ball.quaternion.clone().invert());\n  let curKey=null, best=-2;\n  for(const [k,v] of seamVerts){ const dd=v.p.dot(dirLocal); if(dd>best){ best=dd; curKey=k; } }\n  const pts=[]; let prevKey=null, inDir=null;\n  for(let st=0; st<16; st++){\n    const v=seamVerts.get(curKey); pts.push(v.p.clone());\n    let bestN=null, bestScore=-2;\n    for(const nk of v.nb){\n      if(nk===prevKey) continue;\n      const out=seamVerts.get(nk).p.clone().sub(v.p).normalize();\n      const score=inDir ? out.dot(inDir)+Math.random()*0.08 : Math.random();\n      if(score>bestScore){ bestScore=score; bestN=nk; }\n    }\n    if(!bestN) break;\n    inDir=seamVerts.get(bestN).p.clone().sub(v.p).normalize();\n    prevKey=curKey; curKey=bestN;\n  }\n  curve=new THREE.CatmullRomCurve3(pts, false, 'centripetal', 0.5);\n  curveLen=curve.getLength();\n  canyonSpd=0.46+Math.random()*0.12;\n}\nfunction endShot(){\n  if(!finaleDone) HAL.key.T=HAL.rim.T=HAL.fil.T=1;     // in-show the lamps come back\u2026\n  if(!finaleDone) darkRoom=false;                      // \u2026but after the finale the breakers STAY tripped and the\n                                                       // room STAYS pitch black \u2014 AMB-only prototype glow till 60s\n  if(finaleDone){                                      // prototype-sharp lacquer for the ending\n    tileMat.clearcoatRoughness=0.16; whiteMat.clearcoatRoughness=0.22;\n    tileMatPent.clearcoatRoughness=0.16; tileMatValve.clearcoatRoughness=0.22;\n  }\n  // ending: the lit, textured traditional ball floating on pure black \u2014\n  // steady, no more auto-cycles\n  mode='orbit'; controls.enabled=true; wait=finaleDone?Infinity:7+Math.random()*7; spinRate=0.4;\n  ball.position.set(0,0,0);\n  warpGlow.intensity=0;\n  afterimage.enabled=false;\n  scene.fog=null;\n  tunnel2.visible=false; tunnelMat2.uniforms.uAlpha.value=0; tunnel2.rotation.z=0;\n  ball.visible=true; ball.scale.setScalar(1);\n  scene.background.copy(BG_WHITE);\n  bloom.strength=0.55; bloom.radius=0.3; bloom.threshold=1.05;\n  camera.up.set(0,1,0); camera.fov=40; camera.updateProjectionMatrix();\n}\nfunction updateShot(dt){\n  mt+=dt;\n  if(mode==='warp'){\n    // OPENING (David v3): HALF a spiral, accelerating into the very very\n    // end of the tunnel until the ball DISAPPEARS; one empty second while\n    // the tunnel visibly straightens; then it reappears firing dead-straight\n    // out of the perfect centre \u2014 hard positional stop, spin braking down\n    // to the normal display rotation.\n    const SPI=2.7, VANISH=1.0, FO=0.95, BRAKE=0.9, FADE=0.9, T=SPI+VANISH+FO+BRAKE+FADE;  // +0.5s for the drain swirl\n    if(mt>=T) return endShot();\n    spinRate=0;                                        // the roll IS the motion \u2014 no display spin yet\n    camera.position.set(0,0.35,3.9);                   // the lens never moves \u2014 the ball comes to IT\n    camera.up.set(0,1,0);\n    camera.lookAt(0,0,0);\n    camera.fov=40; camera.updateProjectionMatrix();\n    camera.updateMatrixWorld();\n    camRightV.setFromMatrixColumn(camera.matrixWorld,0);\n    const wIn=sm(Math.min(1,mt/0.7));                  // tunnel materializes\n    const wa=(mt<SPI+VANISH+FO) ? 1 : 1-sm(Math.min(1,(mt-SPI-VANISH-FO)/(BRAKE+FADE)));  // dissolves after the stop\n    // bend: full curve while the ball dives in; straightens during the empty second\n    const bendV=(mt<SPI) ? 1 : (mt<SPI+VANISH ? 1-sm((mt-SPI)/VANISH) : 0);\n    // THE DRAIN: the whole bent tunnel rotates 180\u00B0 CLOCKWISE around the\n    // view axis during the dive \u2014 the curled throat sweeps around like\n    // water circling a drain\n    const drain=-Math.PI*sm(Math.min(1,mt/SPI));\n    tunnel2.rotation.z=drain;\n    tunnel2.visible = wa*wIn>0.01;\n    tunnelMat2.uniforms.uAlpha.value=wa*wIn;\n    tunnelMat2.uniforms.uTime.value=mt;\n    tunnelMat2.uniforms.uBend.value=bendV;\n    prevBallPos.copy(ball.position);\n    const DEEP=62;                                    // past the far reaches \u2014 beyond the wires' own fade\n    const dc=Math.cos(drain), ds=Math.sin(drain);\n    if(mt<SPI){\n      ball.visible=true;\n      const p=mt/SPI, pe=1-Math.pow(1-p,2.8);          // KICKED \u2014 instant blast of speed, bleeding off the whole way in\n      const gone=sm(Math.min(1,Math.max(0,(p-0.86)/0.14)));\n      ball.scale.setScalar(1-gone);                    // corkscrews out of sight \u2014 it LEAVES, it isn't switched off\n      const th=Math.PI*(1-pe);                         // HALF a spiral \u2014 OVER THE TOP, riding with the drain\n      const D=8+(DEEP-8)*pe;                           // \u2026into the very very end\n      const r=4.35*(1-0.42*pe);                        // the throat funnels it tighter\n      const bx=bendV*0.006*D*D, by=-bendV*0.0009*D*D;  // the throat's offset\u2026\n      lookV.set(r*Math.cos(th)+bx*dc-by*ds,\n                r*Math.sin(th)+bx*ds+by*dc, -D);       // \u2026swirls with the drain; the ball rides it\n      ball.position.copy(camera.localToWorld(lookV));\n      // rolling from the real motion\n      warpSide.subVectors(ball.position, prevBallPos);\n      const dist=warpSide.length();\n      if(dist>1e-5 && dist<2.5){\n        camera.getWorldDirection(warpTang);\n        warpSteerAxis.crossVectors(warpTang, warpSide.normalize()).normalize();\n        if(warpSteerAxis.lengthSq()>0.5){ q.setFromAxisAngle(warpSteerAxis, Math.min(dist,0.30)); ball.quaternion.premultiply(q); }\n      }\n    } else if(mt<SPI+VANISH){\n      ball.visible=false;                              // GONE \u2014 one empty second, all eyes on the straighten\n      ball.position.copy(camera.localToWorld(lookV.set(0,0,-DEEP)));\n    } else if(mt<SPI+VANISH+FO){\n      ball.visible=true;\n      ball.scale.setScalar(1);\n      const p=(mt-SPI-VANISH)/FO;                      // LINEAR \u2014 full speed into a hard stop\n      lookV.set(0,0, -(DEEP+(3.917-DEEP)*p));          // out of the perfect centre\n      ball.position.copy(camera.localToWorld(lookV));\n      // head-on flight: roll explicitly about the camera's right axis\n      const dist=prevBallPos.distanceTo(ball.position);\n      q.setFromAxisAngle(camRightV, Math.min(dist,0.32));\n      ball.quaternion.premultiply(q);\n    } else {\n      ball.visible=true;\n      ball.position.set(0,0,0);                        // ABRUPT positional stop\u2026\n      const pb=Math.min(1,(mt-SPI-VANISH-FO)/BRAKE);\n      const rollRate=16*Math.pow(1-pb,2);              // \u2026while the spin BRAKES to normal\n      q.setFromAxisAngle(camRightV, rollRate*dt);\n      ball.quaternion.premultiply(q);\n    }\n  }\n  else if(mode==='canyon'){\n    const T=7.6, IN=1.25, OUT=1.35;\n    if(mt>=T){ mode='macro'; mt=0;\n      macroFrom.copy(camera.position); macroDir.copy(camera.position).normalize();\n      macroFromD=macroFrom.length();\n      macroAxis.randomDirection().cross(macroDir);\n      if(macroAxis.lengthSq()<1e-4) macroAxis.set(0,1,0).cross(macroDir);\n      macroAxis.normalize();\n      return; }\n    const blend=Math.min(sm(Math.min(1,mt/IN)), sm(Math.min(1,(T-mt)/OUT)));\n    const u=Math.min(0.985,(canyonSpd*mt)/curveLen);\n    const ua=Math.min(0.995,u+0.035);\n    posV.copy(curve.getPointAt(u)).applyQuaternion(ball.quaternion).normalize();\n    const radial=posV.clone();\n    posV.multiplyScalar(d0+(1.032-d0)*blend);\n    const enter=sm(Math.min(1,mt/0.9));\n    camera.position.copy(p0).lerp(posV,enter);\n    aheadV.copy(curve.getPointAt(ua)).applyQuaternion(ball.quaternion).normalize().multiplyScalar(1.015);\n    lookV.copy(aheadV).multiplyScalar(blend);\n    const t1=curve.getTangentAt(u).applyQuaternion(ball.quaternion),\n          t2=curve.getTangentAt(Math.min(0.999,u+0.02)).applyQuaternion(ball.quaternion);\n    const bank=THREE.MathUtils.clamp(t1.cross(t2).dot(radial)*38, -0.65, 0.65);\n    upV.set(0,1,0).lerp(radial,blend).normalize();\n    q.setFromAxisAngle(posV.clone().sub(lookV).normalize(), -bank*blend);\n    upV.applyQuaternion(q);\n    camera.up.copy(upV);\n    camera.lookAt(lookV);\n    camera.fov=40+26*blend; camera.updateProjectionMatrix();\n  }\n  else if(mode==='macro'){                     // the finale: intricate-pattern close-up\n    const IN=1.4, HOLD=7.0, TRANS=7.0, DARK=7.0, OUT=1.1, T=IN+HOLD+TRANS+DARK+OUT;  // 7s pattern, 7s transform, 7s BLACK-ROOM hold\n    if(mt>=T){ finaleDone=true; return endShot(); }   // the dark is the ending \u2014 no relight\n    const closeD=1.55;                         // a touch farther out \u2014 pattern + curvature in frame\n    // slow crane ARC: the view direction sweeps ~0.5 rad across the surface\n    const arcA=0.5*sm(Math.min(mt,IN+HOLD+TRANS)/(IN+HOLD+TRANS));\n    q.setFromAxisAngle(macroAxis, arcA);\n    aheadV.copy(macroDir).applyQuaternion(q); // current arc direction\n    let d;\n    if(mt<IN){\n      const p=mt/IN, es=1+(elastic(p)-1)*0.25; // soft elastic: ~9% bounce past target, never near the surface\n      d=macroFromD+(closeD-macroFromD)*es;\n      posV.copy(macroDir).lerp(aheadV, sm(p)).normalize();\n    }\n    else if(mt<IN+HOLD){ d=closeD; posV.copy(aheadV); }              // hold: arc pan + planet spin\n    else if(mt<IN+HOLD+TRANS){                                       // 3 hexes at a time -> traditional ball\n      d=closeD; posV.copy(aheadV);\n      const tp=(mt-IN-HOLD)/TRANS;\n      setWhite(Math.min(20, (Math.floor(tp*7)+1)*3));\n      HAL.key.T=HAL.rim.T=HAL.fil.T=0;                 // breakers trip as the first hexes whiten \u2014 AMB carries the room\n      darkRoom=true;\n    }\n    else if(mt<IN+HOLD+TRANS+DARK){                                  // the room stays DEAD: glowing ball floats and drifts back\n      setWhite(20);\n      HAL.key.T=HAL.rim.T=HAL.fil.T=0;\n      darkRoom=true;\n      const th=(mt-IN-HOLD-TRANS)/DARK;\n      d=closeD+(3.2-closeD)*sm(th); posV.copy(aheadV);\n    }\n    else { setWhite(20); d=3.2+(3.9-3.2)*sm((mt-IN-HOLD-TRANS-DARK)/OUT); posV.copy(aheadV); }\n    camera.position.copy(posV).multiplyScalar(d);\n    lookV.copy(posV).multiplyScalar(0.9);      // look down at the surface pattern\n    upV.set(0,1,0); if(Math.abs(posV.y)>0.95) upV.set(1,0,0);\n    camera.up.copy(upV);\n    camera.lookAt(lookV);\n    camera.fov=40; camera.updateProjectionMatrix();\n  }\n}\n\nfunction frame(){\n  requestAnimationFrame(frame);\n  const dt=Math.min(clock.getDelta(),0.05);\n  ball.rotation.y+=spinRate*dt;\n  if(mode==='orbit'){ controls.update(); wait-=dt; if(wait<=0) startCanyon(); }\n  else updateShot(dt);\n  // lighting rig follows the camera: key light ALWAYS from the camera's right side\n  camera.updateMatrixWorld();\n  camRightV.setFromMatrixColumn(camera.matrixWorld,0);\n  camUpV.setFromMatrixColumn(camera.matrixWorld,1);\n  keyL.position.copy(camera.position).addScaledVector(camRightV,6).addScaledVector(camUpV,2.5);\n  keyL.target.position.copy(ball.position);\n  rimL.position.copy(camera.position).addScaledVector(camRightV,-7).addScaledVector(camUpV,-1);  // counter-rim from the left\n  rimL.target.position.copy(ball.position);\n  updateHalogen(dt);\n  totalT+=dt;\n  specTick();\n  if(totalT>=60){                                      // EXACTLY 60s: the show restarts from the very beginning\n    totalT=0;\n    finaleDone=false; darkRoom=false;\n    for(const k in HAL){ HAL[k].T=1; HAL[k].L=1; }     // breakers snap back on for the white arena (they stayed tripped through the finale)\n    setWhite(0);                                       // classic colorway holds through the restart\n    tileMat.clearcoatRoughness=0.24; whiteMat.clearcoatRoughness=0.30;\n    tileMatPent.clearcoatRoughness=0.24; tileMatValve.clearcoatRoughness=0.30;\n    mode='warp'; mt=0; controls.enabled=false;\n  }\n  timerEl.textContent='T '+totalT.toFixed(1)+'s \u00B7 '+mode.toUpperCase()+' '+mt.toFixed(1)+'s';\n  composer.render();\n}\nframe();\n}\n"],
  "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uEAeA,UAAY,UAAW,kDACvB,OAAS,mBAAsB,gGAC/B,OAAS,eAAkB,4FAC3B,OAAS,oBAAuB,iGAChC,OAAS,mBAAsB,gGAC/B,OAAS,kBAAqB,yFAC9B,OAAS,oBAAuB,+FAChC,OAAS,eAAkB,qFAE3B,MAAM,OAAS,SAAS,eAAe,kBAAkB,EACrD,QAAQ,KAAK,MAAM,EAEvB,SAAS,KAAKA,QAAO,CAKrB,MAAM,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,EACrB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAC/D,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAClE,IAAI,GAAG,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,UAAU,CAAC,EAC9C,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EACrE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAC/D,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EACrC,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,MAAM,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,UAAU,EAE9D,MAAM,CAAC,EACb,SAAU,CAAC,GAAG,GAAG,EAAE,IAAK,GAAG,CACzB,MAAM,EAAE,GAAG,EAAE,EAAG,EAAE,GAAG,EAAE,EAAG,EAAE,GAAG,EAAE,EACjC,MAAM,KAAK,CAAE,KAAK,GAChB,OAAO,IAAI,MAAM,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,EAAE,UAAU,EAC1E,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAC1F,CACA,MAAM,KAAK,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,IAAI,GAAK,EAC/C,SAAU,CAAC,GAAG,GAAG,EAAE,IAAK,GAAK,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAG,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAG,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EACxG,QAAQ,EAAE,EAAE,EAAE,GAAG,IACf,MAAM,KAAK,CAAE,KAAK,GAAM,OAAO,GAAG,CAAC,EAAE,MAAM,EAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,EAGhG,MAAM,UAAU,IAAI,IACd,KAAK,GAAG,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,GACnE,SAAS,SAAS,EAAE,CAAE,MAAM,EAAE,KAAK,CAAC,EAAG,OAAI,UAAU,IAAI,CAAC,GAAG,UAAU,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAG,GAAG,IAAI,GAAK,CAAC,EAAU,CAAG,CACrH,SAAS,SAAS,EAAE,EAAE,CAAE,MAAM,GAAG,SAAS,CAAC,EAAG,GAAG,SAAS,CAAC,EAAG,UAAU,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAG,UAAU,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAG,CAC1H,MAAM,KAAK,IAAI,IACf,SAAU,CAAC,EAAE,EAAE,CAAC,IAAK,GAAI,SAAU,CAAC,EAAE,CAAC,GAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAC9D,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,EAClC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAG,SAAS,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EACpF,CACA,SAAU,CAAC,EAAE,EAAE,CAAC,IAAK,GACnB,SAAS,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EACnD,SAAS,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EACnD,SAAS,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAIrD,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,GAAG,CAAC,EAAG,IAAI,CAAC,EACxB,GAAG,IAAI,MAAM,QAAW,GAAG,IAAI,MAAM,QAAW,GAAG,IAAI,MAAM,QACnE,SAAS,QAAQ,EAAE,EAAE,EAAG,GAAG,GAAG,GAAI,MAAO,QAAQ,CAE/C,GADA,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACzC,QAAU,UAAU,IAAK,CAAC,EAAE,EAAE,CAAC,EAAI,GAAG,KAAK,CAAC,EAAE,UAAU,EAAG,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,OAC5E,GAAG,WAAW,EAAE,CAAC,EAAG,GAAG,WAAW,EAAE,CAAC,EAAG,GAAG,aAAa,GAAG,EAAE,EAAE,UAAU,EACzE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5D,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,EAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAC7C,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAK,IAAI,KAAK,MAAM,MAAM,KAAK,CACjD,CACA,MAAM,IAAI,EAAK,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,MAAM,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,EAE9D,WAAW,CAAC,EAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EACxC,UAAU,QAAQ,MAAM,CACtB,MAAM,IAAI,EAAE,OAAO,EACb,EAAE,KAAK,OACP,GAAG,KAAK,IAAI,EAAE,CAAC,EAAE,GAAM,IAAI,MAAM,QAAQ,EAAE,EAAE,CAAC,EAAI,IAAI,MAAM,QAAQ,EAAE,EAAE,CAAC,EACzE,EAAE,IAAI,MAAM,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EACnD,EAAE,IAAI,MAAM,QAAQ,EAAE,aAAa,EAAE,CAAC,EAC5C,IAAI,KAAK,KAAK,KAAK,MAAM,EAAE,KAAK,CAAC,EAAEC,KAAK,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAI,KAAK,MAAMA,GAAE,IAAI,CAAC,EAAEA,GAAE,IAAI,CAAC,CAAC,CAAC,EACrG,GAAG,WAAW,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAG,GAAG,WAAW,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAC1D,GAAG,aAAa,GAAG,EAAE,EAAE,IAAI,CAAC,EAAE,IAAG,KAAK,KAAK,QAAQ,GAEtD,MAAM,GAAG,KAAK,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAG,IAAI,MAAM,OAAS,EAAE,aAAa,KAAK,MAAM,EAAE,UAAU,EACzF,GAAG,IAAI,MAAM,QAAQ,EAAE,aAAa,GAAG,EAAE,EAAE,UAAU,EACrD,GAAG,IAAI,MAAM,QAAQ,EAAE,aAAa,GAAG,EAAE,EACzC,GAAG,KAAK,OACR,GAAG,KAAK,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,EAAG,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAE9C,KADG,KAAK,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,EAAG,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EACrC,GAAG,EAAE,KAAK,KAAK,EAAE,KAAK,IAAK,KAAK,GAAK,EAAI,GACxD,IAAI,GAAG,EAAG,UAAU,KAAK,KAAM,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,EAAG,EAAE,IAAI,EAAE,CAAC,EAClE,IAAI,GACJ,MAAM,GAAG,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EACtC,KAAK,KAAK,IAAI,CAAC,EAAE,IAAI,CAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,KAAK,GAAG,GAChD,OAAO,GAAG,MAAM,EAAE,eAAe,EAAE,EAChC,IAAI,GAAG,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,EAC7C,IAAI,GAAG,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,CAAG,CAAC,EAEtD,MAAM,EAAE,EAAG,MAAM,CAAC,EAClB,QAAQ,EAAE,EAAE,EAAE,KAAK,OAAO,IAAI,CAAE,MAAM,EAAE,KAAK,CAAC,EAAGA,GAAE,MAAM,EAAE,GAAG,KAAK,MAAM,EACvE,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAK,MAAM,KAAK,IAAI,MAAM,QAAQ,EAAE,YAAY,EAAEA,GAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CACtF,CACA,KAAK,MAEL,MAAM,EAAE,KAAK,OACP,IAAI,KAAM,MAAO,KAAK,IAAI,KAAK,KAAK,WAAW,OAAO,GAAG,KAAK,CAAC,EAAE,GACjE,OAAO,KAAK,KAAO,IAAa,GAAK,IAErC,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EACnE,GAAG,IAAI,MAAM,QAAQ,EAAE,aAAa,GAAG,EAAE,EACzC,GAAG,EAAE,KAAO,GAAG,EAAE,KAAM,MACvB,KAAK,CAAC,EAAG,KAAK,CAAC,EAAG,KAAK,CAAC,EAC9B,UAAU,KAAK,KACb,KAAK,KAAK,OAAO,GAAG,EAAE,IAAM,EAAE,UAAU,CAAC,EACzC,KAAK,KAAK,OAAO,GAAG,EAAE,KAAO,GAAK,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EAClE,KAAK,KAAK,OAAO,GAAG,EAAE,KAAO,IAAM,GAAK,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EAE1E,MAAM,GAAG,GAAG,CAAC,GAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAK,GAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAC9E,KAAK,KAAW,MAAM,OAAM,MAAM,KAAK,KAAO,IAAM,IAAM,GAAG,KAC7C,MAAM,MAAM,MAAM,IAAK,KAAO,IAAM,IAAM,GAAG,KAChE,MAAM,GAAG,CAAC,IAAK,GAAI,EACnB,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAClB,MAAM,GAAG,EAAE,GAAG,EACd,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAG,GAAG,GAAG,GAAI,MAAM,EAAI,EACrD,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAG,GAAG,GAAG,GAAI,MAAM,EAAI,EACrD,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAG,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,EAAG,MAAM,EAAI,EAChF,QAAQ,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAG,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,EAAG,MAAM,EAAI,CAClF,CACA,IAAI,MAAM,KACV,QAAQ,EAAE,EAAE,GAAG,EAAO,IAAI,CACxB,MAAM,EAAE,EAAE,EAAE,EACN,MAAM,KAAK,IAAI,GAAG,OAAO,GAAI,OAAO,GAAG,EAAE,KAAO,IAAM,GAAK,EAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EACrG,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAClB,MAAM,GAAG,EAAE,GAAG,EACd,QAAQ,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAG,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,EAAG,MAAM,EAAI,EACtF,QAAQ,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAG,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,EAAG,MAAM,EAAI,CACxF,CACA,MAAM,KACR,CACA,WAAW,KAAK,CAAC,MAAM,IAAK,MAAM,EAAE,OAAO,EAAE,IAAK,KAAK,KAAK,KAAM,OAAO,KAAK,OAAO,MAAM,CAAC,CAAC,CAC/F,CACA,MAAM,MAAM,IAAI,MAAM,eACtB,MAAM,aAAa,WAAY,IAAI,MAAM,gBAAgB,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC,EAC/E,MAAM,aAAa,SAAY,IAAI,MAAM,gBAAgB,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC,EAC/E,MAAM,aAAa,KAAY,IAAI,MAAM,gBAAgB,IAAI,aAAa,EAAE,EAAE,CAAC,CAAC,EAChF,MAAM,aAAa,QAAY,IAAI,MAAM,gBAAgB,IAAI,aAAa,GAAG,EAAE,CAAC,CAAC,EAGjF,SAAS,SAAS,EAAG,GAAI,GAAI,IAAK,MAAO,IAAK,KAAM,EAAG,GAAG,CACxD,GAAG,IAAI,EACP,EAAE,UAAU,EACZ,QAAQ,EAAE,EAAE,EAAE,MAAM,IAAI,CAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,MAC1C,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,EAAG,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,EAC/C,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAG,CACjC,EAAE,UAAU,EACZ,EAAE,UAAU,KAAM,EAAE,KAAK,EACzB,EAAE,UAAU,IAAI,GAAI,EAAE,YAAY,EAAE,GAAI,EAAE,OAAO,EACjD,EAAE,UAAU,EAAE,GAAM,EAAE,YAAY,EAAE,GAAI,EAAE,OAAO,CACnD,CACA,SAAS,iBAAiB,MAAO,MAAO,IAAI,CAC1C,MAAM,EAAE,MAAQ,CAAC,KAAK,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,EACjE,CAAC,KAAK,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,EAC3E,EAAE,KAAM,GAAG,EAAE,KAAM,GAAG,SAAS,cAAc,QAAQ,EAAG,GAAG,MAAM,GAAG,OAAO,EACjF,MAAM,EAAE,GAAG,WAAW,IAAI,EAC1B,EAAE,UAAU,EAAE,KAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EACtC,MAAM,IAAI,EAAE,EAAG,IAAI,EAAE,EAAG,IAAI,IAAI,EAAE,IAClC,IAAI,EAAE,EACN,GAAG,QAAQ,EAAE,CAGX,MAAY,GAAG,IAAI,KACb,EAAE,IAAI,IAAM,EAAE,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,IAAI,CAAE,QAAQ,GAAG,EAAE,GAAG,EAAE,KAAK,CAAE,MAAM,EAAE,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAC1E,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,EAAG,MAAO,EAAO,CAAE,MAAO,EAAM,EAC7E,QAAQA,GAAE,IAAGA,IAAG,GAAEA,KAAK,QAAQ,EAAE,IAAG,GAAG,GAAE,IAAI,CAC3C,GAAG,KAAK,IAAIA,GAAE,CAAC,EAAE,GAAG,SACpB,MAAM,EAAE,IAAI,GAAG,KAAK,KAAK,CAAC,GAAGA,GAAE,EAAE,GAAI,EAAE,IAAI,GAAG,IAAI,EAClD,IAAI,GAAG,GACP,QAAQ,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,CAAE,MAAM,EAAE,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EACxD,GAAG,OAAO,EAAE,GAAG,IAAK,KAAK,IAAI,CAAC,EAAG,EAAE,GAAG,IAAK,KAAK,IAAI,CAAC,CAAC,CAAG,CACxD,IAAI,SAAS,EAAG,EAAG,EAAG,GAAG,IAAM,EAAG,KAAK,GAAG,EAAI,IAAK,IAAI,EAAE,EAAE,EAAE,EAAE,EAAG,EAAG,EAAE,CAC5E,CACF,KAAO,CAQL,MAAM,GAAG,IAAI,IACP,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,CAAE,MAAM,EAAE,CAAC,EAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,EACnF,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAG,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAG,CAAE,OAAO,CAAG,EACpD,QAAQ,CAAC,EAAE,IAAI,CACnB,UAAUC,KAAK,CAAC,EAAE,CAAC,EAAG,QAAQ,EAAE,EAAE,EAAEA,GAAE,OAAO,IAAI,CAC/C,MAAM,GAAG,EAAE,GAAGA,GAAE,OAAQ,GAAGA,GAAE,CAAC,EAAE,CAAC,EAAEA,GAAE,CAAC,EAAE,CAAC,EAAG,GAAGA,GAAE,CAAC,EAAE,CAAC,EAAEA,GAAE,CAAC,EAAE,CAAC,EAC7D,IAAI,GAAG,IAAS,GAAG,KAAU,GAAG,IAAS,GAAG,KAC5C,UAAU,KAAK,EAAE,CAAE,MAAMC,GAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAI,GAAG,KAAK,IAAI,GAAGA,EAAC,EAAG,GAAG,KAAK,IAAI,GAAGA,EAAC,CAAG,CAClF,UAAU,KAAK,EAAE,CAAE,MAAMA,GAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAI,GAAG,KAAK,IAAI,GAAGA,EAAC,EAAG,GAAG,KAAK,IAAI,GAAGA,EAAC,CAAG,CAClF,GAAG,GAAG,IAAI,GAAG,GAAI,MAAO,EAC1B,CACA,MAAO,EACT,EACM,OAAO,CAAC,EAAG,KAAK,IAAI,IAAO,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,EAC9D,KAAM,KAAK,QAAQ,OAAO,OAAO,KAAI,CACnC,IAAI,GAAG,EACP,QAAQ,EAAE,EAAE,EAAE,KAAK,OAAO,IAAI,CAC5B,MAAM,EAAE,KAAK,CAAC,EAAG,EAAE,KAAK,EAAE,EACpB,GAAG,EAAE,EAAE,EAAE,GACZ,GAAG,KACE,KAAK,IAAI,EAAE,GAAG,IACd,KAAK,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,KAAG,GAAG,EACtE,CACA,MAAM,EAAE,KAAK,OAAO,GAAG,CAAC,EAAE,CAAC,EAC3B,GAAG,EAAE,EAAE,IAAI,GAAG,IAAM,SACpB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,GAAI,EACnC,IAAI,IAAI,GACR,UAAU,KAAK,OAAS,GAAG,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,KAAO,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAE,IAAI,GAAM,KAAO,CACnG,GAAG,KACH,QAAO,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAC3B,SAAS,EAAG,EAAE,EAAG,EAAE,EAAG,GAAG,IAAM,EAAG,EAAE,IAAM,IAAK,IAAI,EAAE,EAAE,EAAE,EAAE,EAAG,EAAG,EAAE,EACnE,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAClB,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,EAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,EACjD,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,EACtC,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,EACtC,IAAI,EAAE,GAAG,EAAE,EAAG,IAAI,EAAE,GAAG,EAAE,EACzB,IAAI,KAAK,MAAM,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,EAC7C,KAAK,IAAI,GAAG,IACf,KAAK,IAAI,GAAG,EACZ,KAAK,KAAK,CAAC,EAAE,IAAK,EAAE,IAAK,IAAI,EAAE,IAAI,KAAK,GAAI,EAAE,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,EAC5E,EACF,CACF,CAGA,MAAM,GAAG,IAAI,EACP,GAAG,EAAE,qBAAqB,IAAI,IAAI,IAAI,MAAM,IAAK,IAAO,IAAI,IAAI,GAAG,IAAI,EAC7E,GAAG,aAAa,EAAE,eAAe,EAAG,GAAG,aAAa,EAAE,eAAe,MAAM,IAAK,IAAM,GAAG,EACzF,EAAE,UAAU,GAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAClC,MAAM,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAG,EAAE,IAAI,KACzC,QAAQ,EAAE,EAAE,EAAE,MAAO,IAAI,CAAE,MAAM,IAAI,KAAK,OAAO,EAAE,EAAE,IAAI,KAAK,OAAO,EAAE,EAAE,GAAG,EACpE,GAAI,KAAK,OAAO,EAAE,GAAG,EAAG,EAAG,EAAE,GAAG,CAAC,GAAG,GAAI,EAAE,GAAG,EAAE,CAAC,GAAG,GAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAI,CAC9E,EAAE,aAAa,IAAI,EAAE,CAAC,EACtB,MAAM,IAAI,IAAI,MAAM,cAAc,EAAE,EACpC,WAAI,MAAM,IAAI,MAAM,MAAM,oBAAqB,IAAI,WAAW,EAAG,IAAI,WAAW,MAAM,eAC/E,GACT,CACA,MAAM,OAAO,iBAAiB,GAAO,EAAG,MAAM,GAAG,EAC3C,YAAY,iBAAiB,GAAM,EAAG,MAAM,GAAG,EAC/C,QAAQ,iBAAiB,GAAO,EAAG,MAAM,IAAI,EAE7C,UAAU,IAAI,CAClB,MAAM,IAAI,YAAY,MAAO,EAAE,IAAI,MAC7B,GAAG,SAAS,cAAc,QAAQ,EAAG,GAAG,MAAM,GAAG,OAAO,EAC9D,MAAM,EAAE,GAAG,WAAW,IAAI,EAAG,EAAE,UAAU,IAAI,EAAE,CAAC,EAChD,MAAM,GAAG,EAAE,EAAG,GAAG,EAAE,EAAG,GAAG,EAAE,IAC3B,EAAE,UAAU,EAAG,EAAE,IAAI,GAAG,GAAG,GAAG,EAAE,MAAM,EAAG,EAAE,UAAU,UAAW,EAAE,KAAK,EACvE,EAAE,UAAU,EAAE,KAAO,EAAE,YAAY,UAAW,EAAE,OAAO,EACvD,EAAE,UAAU,EAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAK,EAAE,MAAM,EAAG,EAAE,UAAU,UAAW,EAAE,KAAK,EAC5E,MAAM,IAAI,IAAI,MAAM,cAAc,EAAE,EACpC,WAAI,MAAM,IAAI,MAAM,MAAM,oBAAqB,IAAI,WAAW,EAAG,IAAI,WAAW,MAAM,eAC/E,GACT,GAAG,EAGH,SAAS,kBAAkB,OAAQ,SAAS,CAE1C,MAAM,GAAG,SAAS,cAAc,QAAQ,EAAG,GAAG,MAAM,GAAG,OAAO,KAC9D,MAAM,EAAE,GAAG,WAAW,IAAI,EAAG,EAAE,UAAU,OAAO,MAAM,EAAE,EAAE,KAAE,IAAC,EAC7D,MAAM,IAAI,EAAE,aAAa,EAAE,EAAE,KAAE,IAAC,EAAE,KAC5B,EAAE,IAAI,aAAa,KAAE,IAAC,EAC5B,QAAQ,EAAE,EAAE,EAAE,KAAE,KAAE,IAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAC7D,MAAM,IAAI,EAAE,gBAAgB,KAAE,IAAC,EAAG,EAAE,IAAI,KACxC,QAAQ,EAAE,EAAE,EAAE,KAAE,IAAK,QAAQ,EAAE,EAAE,EAAE,KAAE,IAAI,CACvC,MAAM,IAAI,EAAE,EAAE,MAAG,KAAG,IAAI,EAAE,GAAG,KAAG,IAAI,EAAE,EAAE,MAAG,KAAG,IAAI,EAAE,GAAG,KACjD,IAAI,EAAE,EAAE,KAAE,EAAE,EAAE,EAAE,EAAE,KAAE,EAAE,GAAG,SACzB,IAAI,EAAE,GAAG,KAAE,CAAC,EAAE,EAAE,GAAG,KAAE,CAAC,GAAG,SACzB,IAAI,EAAE,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,EAC7B,IAAI,EAAE,KAAE,GAAG,EACjB,EAAE,EAAI,GAAI,CAAC,GAAG,IAAK,GAAI,IAAK,IAC5B,EAAE,GAAG,CAAC,GAAK,GAAG,IAAK,GAAI,IAAK,IAC5B,EAAE,GAAG,CAAC,GAAG,IAAI,GAAI,IAAK,IACtB,EAAE,GAAG,CAAC,EAAE,GACV,CACA,EAAE,aAAa,IAAI,EAAE,CAAC,EACtB,MAAM,IAAI,IAAI,MAAM,cAAc,EAAE,EACpC,WAAI,MAAM,IAAI,MAAM,MAAM,oBAAqB,IAAI,WAAW,EAAG,IAAI,WAAW,MAAM,aAC/E,GACT,CACA,MAAM,OAAO,kBAAkB,OAAO,CAAG,EACnC,YAAY,kBAAkB,YAAY,GAAG,EAC7C,QAAQ,kBAAkB,QAAQ,CAAG,EACrC,SAAS,kBAAkB,SAAS,GAAG,EAGvC,SAAS,IAAI,MAAM,cAAc,CAAC,OAAAH,QAAQ,UAAU,EAAI,CAAC,EAC/D,SAAS,cAAc,KAAK,IAAI,KAAM,OAAO,kBAAkB,CAAC,CAAC,EACjE,SAAS,YAAY,MAAM,sBAAuB,SAAS,oBAAoB,IAC/E,MAAM,MAAM,IAAI,MAAM,MAAS,MAAM,WAAW,IAAI,MAAM,MAAM,QAAQ,EACxE,MAAM,MAAM,IAAI,MAAM,eAAe,QAAQ,EAC7C,MAAM,YAAY,MAAM,UAAU,IAAI,gBAAmB,GAAI,EAAE,QAC/D,IAAI,WAAW,EAAE,KAAM,OAAO,QAAU,kDACtC,KAAK,CAAE,MAAM,YAAY,MAAM,oBAAoB,GAAG,EAAE,QAAS,IAAI,QAAQ,CAAG,EAChF,OAAW,IAAI,CAAC,CAAC,EACnB,MAAM,OAAO,IAAI,MAAM,kBAAkB,GAAG,EAAE,KAAM,GAAG,EAAG,OAAO,SAAS,IAAI,EAAE,IAAK,GAAG,EACxF,MAAM,IAAI,MAAM,EAIhB,MAAM,SAAS,IAAI,MAAM,MAAM,QAAQ,EACjC,MAAM,IAAI,MAAM,eAAe,CACnC,UAAU,GAAO,WAAW,GAC5B,SAAS,CAAE,KAAK,CAAC,MAAM,IAAI,MAAM,MAAM,EAAE,EAAE,CAAC,CAAC,CAAE,EAC/C,aAAa,4DACb,eAAe,gEACjB,CAAC,EACK,OAAO,IAAI,MAAM,KAAK,IAAI,MAAM,cAAc,EAAE,CAAC,EAAG,KAAK,EAC/D,OAAO,cAAc,GAAO,OAAO,YAAY,KAAO,MAAM,IAAI,MAAM,EAwCtE,MAAM,WAvCU,IAAI,MAAM,eAAe,CACvC,YAAY,GAAM,WAAW,GAAO,KAAK,MAAM,SAC/C,SAAS,CAAE,MAAM,CAAC,MAAM,CAAC,EAAG,OAAO,CAAC,MAAM,CAAC,EAAG,MAAM,CAAC,MAAM,CAAC,EAAG,OAAO,CAAC,MAAM,GAAG,EAAG,MAAM,CAAC,MAAM,GAAI,EAAG,KAAK,CAAC,MAAM,CAAG,EAC3G,MAAM,CAAC,MAAM,IAAI,MAAM,MAAM,GAAK,GAAK,EAAI,CAAC,EAAG,MAAM,CAAC,MAAM,IAAI,MAAM,MAAM,KAAK,KAAK,IAAI,CAAC,CAAE,EACxG,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWb,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBjB,CAAC,EAE0B,MAAM,EACjC,WAAW,SAAS,OAAO,MAAM,EACjC,WAAW,SAAS,MAAM,MAAM,IAChC,WAAW,SAAS,KAAK,MAAM,EAC/B,WAAW,SAAS,MAAM,MAAM,IAAI,MAAM,MAAM,EAAK,IAAK,EAAI,EAC9D,WAAW,SAAS,MAAM,MAAM,IAAI,MAAM,MAAM,GAAK,KAAK,GAAI,EAC9D,MAAM,WAAW,IAAI,MAAM,iBAAiB,IAAI,IAAI,GAAG,GAAG,GAAG,EAAI,EACjE,WAAW,QAAQ,KAAK,GAAG,CAAC,EAC5B,MAAM,QAAQ,IAAI,MAAM,KAAK,WAAY,UAAU,EACnD,QAAQ,SAAS,IAAI,EAAE,EAAE,GAAG,EAAG,QAAQ,cAAc,GAAO,QAAQ,QAAQ,GAC5E,OAAO,IAAI,OAAO,EAElB,MAAM,KAAK,IAAI,MAAM,MAAS,MAAM,IAAI,IAAI,EAG5C,SAAS,aAAa,CACpB,MAAa,GAAG,SAAS,cAAc,QAAQ,EAAG,GAAG,MAAM,GAAG,OAAO,IACrE,MAAM,EAAE,GAAG,WAAW,IAAI,EAC1B,EAAE,UAAU,UAAW,EAAE,SAAS,EAAE,EAAE,IAAE,GAAC,EACzC,IAAI,KAAK,EAAG,MAAM,IAAI,KAAM,KAAM,KAAK,MAAO,WAAmB,KAAK,YACtE,QAAQ,EAAE,EAAE,EAAE,GAAG,IAAI,CACnB,MAAM,EAAE,IAAI,EAAE,IAAG,EAAE,IAAI,EAAE,IAAG,EAAE,GAAG,IAAI,EAAE,GAAI,EAAG,IAAI,EAAE,GAAG,GAAI,EACrD,GAAG,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC3C,GAAG,aAAa,EAAE,SAAS,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,EACjE,GAAG,aAAa,EAAE,qBAAqB,EACvC,EAAE,UAAU,GAAI,EAAE,UAAU,EAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAG,EAAE,KAAK,CAC/D,CACA,EAAE,YAAY,GACd,QAAQ,EAAE,EAAE,EAAE,GAAG,IAAI,CACnB,MAAM,EAAE,IAAI,EAAE,IAAG,EAAE,IAAI,EAAE,IAAG,EAAE,IAAI,EAAE,KAAK,GAAI,EAAE,GAAG,IAAI,EAAE,IACxD,EAAE,YAAY,IAAI,EAAE,GAAI,UAAU,UAAW,EAAE,UAAU,EAAE,IAAI,EAAE,EACjE,EAAE,UAAU,EAAG,EAAE,OAAO,EAAE,CAAC,EAAG,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,EAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAG,EAAE,OAAO,CACrF,CACA,EAAE,YAAY,EACd,MAAM,IAAI,IAAI,MAAM,cAAc,EAAE,EACpC,WAAI,MAAM,IAAI,MAAM,MAAM,eACnB,GACT,CACA,MAAM,QAAQ,YAAY,EACpB,QAAQ,IAAI,MAAM,qBAAqB,CAC3C,MAAM,SAAU,IAAI,OAAQ,UAAU,OAAQ,YAAY,IAAI,MAAM,QAAQ,IAAK,GAAI,EAAG,aAAa,GACrG,UAAU,IAAM,UAAU,GAAK,aAAa,QAAS,gBAAgB,GACrE,UAAU,EAAK,mBAAmB,IAClC,mBAAmB,OAAQ,qBAAqB,IAAI,MAAM,QAAQ,IAAK,GAAI,CAC7E,CAAC,EACK,SAAS,IAAI,MAAM,qBAAqB,CAC5C,MAAM,SAAU,IAAI,YAAa,UAAU,YAAa,YAAY,IAAI,MAAM,QAAQ,IAAK,GAAI,EAAG,aAAa,GAC/G,UAAU,IAAM,UAAU,GAAK,aAAa,QAAS,gBAAgB,IACrE,UAAU,GAAK,mBAAmB,GAClC,mBAAmB,YAAa,qBAAqB,IAAI,MAAM,QAAQ,IAAK,GAAI,EAChF,SAAS,SAAU,YAAY,YAAa,kBAAkB,GAChE,CAAC,EACK,YAAY,IAAI,MAAM,qBAAqB,CAC/C,MAAM,SAAU,IAAI,QAAS,UAAU,QAAS,YAAY,IAAI,MAAM,QAAQ,IAAK,GAAI,EAAG,aAAa,GACvG,UAAU,IAAM,UAAU,GAAK,aAAa,QAAS,gBAAgB,GACrE,UAAU,EAAK,mBAAmB,IAClC,mBAAmB,QAAS,qBAAqB,IAAI,MAAM,QAAQ,IAAK,GAAI,CAC9E,CAAC,EACK,aAAa,IAAI,MAAM,qBAAqB,CAChD,MAAM,SAAU,IAAI,SAAU,UAAU,SAAU,YAAY,IAAI,MAAM,QAAQ,IAAK,GAAI,EAAG,aAAa,GACzG,UAAU,IAAM,UAAU,GAAK,aAAa,QAAS,gBAAgB,IACrE,UAAU,GAAK,mBAAmB,GAClC,mBAAmB,SAAU,qBAAqB,IAAI,MAAM,QAAQ,IAAK,GAAI,EAC7E,SAAS,SAAU,YAAY,SAAU,kBAAkB,GAC7D,CAAC,EACD,UAAU,KAAK,WAAY,MAAM,SAAS,EAAE,MAAO,EAAE,MAAO,CAAC,EAC7D,KAAK,IAAI,IAAI,MAAM,KAAK,MAAO,CAAC,QAAS,SAAU,YAAa,YAAY,CAAC,CAAC,EAC9E,MAAM,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAK,WAAW,CAAC,EAAE,OAAM,EAAE,cAAc,EAAG,CAAC,EAEzE,MAAM,SAAS,WAAW,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAClE,KAAK,CAAC,EAAE,IAAI,CAAE,MAAM,GAAG,WAAW,CAAC,EAAE,OAAQ,GAAG,WAAW,CAAC,EAAE,OAC7D,OAAQ,GAAG,EAAE,GAAG,GAAO,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,CAAI,CAAC,EAC1E,SAAS,MAAM,SAAS,SAAS,OAAO,CAAC,EACzC,MAAM,OAAO,SAAS,KAAK,EAAE,cAAc,EAC3C,SAAS,SAAS,KAAK,CACrB,QAAQ,EAAE,EAAE,EAAE,SAAS,OAAO,IAC5B,MAAM,OAAO,SAAS,CAAC,CAAC,EAAE,cAAgB,SAAS,CAAC,IAAI,SAAS,MAAQ,EAAI,CACjF,CACA,SAAS,CAAC,EACV,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,MAAM,eAAe,KAAO,GAAG,EAAE,EAC3D,IAAI,MAAM,kBAAkB,CAAC,MAAM,IAAI,MAAM,MAAM,OAAI,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAEjF,MAAM,KAAK,IAAI,MAAM,iBAAiB,SAAS,IAAI,EAAG,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG,EAAG,MAAM,IAAI,IAAI,EAAG,MAAM,IAAI,KAAK,MAAM,EAC5H,MAAM,KAAK,IAAI,MAAM,iBAAiB,QAAS,EAAG,EAAG,KAAK,SAAS,IAAI,KAAK,IAAK,IAAI,EAAG,MAAM,IAAI,IAAI,EAAG,MAAM,IAAI,KAAK,MAAM,EAC9H,MAAM,UAAU,IAAI,MAAM,QAAW,OAAO,IAAI,MAAM,QAChD,KAAK,IAAI,MAAM,iBAAiB,QAAS,EAAG,EAAG,KAAK,SAAS,IAAI,KAAK,GAAI,CAAG,EAAG,MAAM,IAAI,IAAI,EACpG,MAAM,SAAS,IAAI,MAAM,WAAW,QAAU,EAAG,EAAG,GAAG,EAAG,MAAM,IAAI,QAAQ,EAC5E,MAAM,KAAK,IAAI,MAAM,aAAa,QAAS,GAAI,EAAG,MAAM,IAAI,IAAI,EAMhE,MAAM,MAAM,IAAI,MAAM,MAAM,EAAK,IAAK,GAAI,EAAG,MAAM,IAAI,MAAM,MAAM,EAAK,GAAK,GAAI,EAAG,MAAM,IAAI,MAAM,MAAM,IAAK,IAAK,CAAI,EAClH,IAAI,CACR,IAAI,CAAE,EAAE,EAAG,EAAE,EAAG,IAAI,KAAM,IAAI,IAAI,MAAM,MAAM,QAAQ,EAAG,MAAM,KAAM,MAAM,GAAK,EAChF,IAAI,CAAE,EAAE,EAAG,EAAE,EAAG,IAAI,GAAM,IAAI,IAAI,MAAM,MAAM,OAAQ,EAAG,MAAM,KAAM,MAAM,GAAK,EAChF,IAAI,CAAE,EAAE,EAAG,EAAE,EAAG,IAAI,GAAM,IAAI,IAAI,MAAM,MAAM,OAAQ,EAAG,MAAM,KAAM,MAAM,EAAK,EAChF,IAAI,CAAE,EAAE,EAAG,EAAE,EAAG,IAAI,IAAM,IAAI,IAAI,MAAM,MAAM,OAAQ,EAAG,MAAM,KAAM,MAAM,GAAK,CAClF,EACM,QAAQ,IAAI,MAAM,MAAM,EAAE,EAAE,CAAC,EAAG,OAAO,IAAI,MAAM,MAAS,MAAM,IAAI,MAAM,MAAS,OAAO,IAAI,MAAM,MAC1G,IAAI,SAAS,GAAO,OAAO,EAAG,WAAW,GAAO,MAAM,EACtD,UAAU,KAAK,IAAM,OAAO,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,IAAI,CAAC,EAAE,KAAK,EAAG,QAAQ,IAAI,MAAM,EAC7F,SAAS,WAAW,EAAG,IAAI,CACzB,MAAM,EAAE,EAAE,EACV,OAAG,EAAE,IAAO,IAAI,KAAK,KAAK,EAAE,KAAK,EAAE,KAAM,EAAE,KAAM,GAAI,EAC7C,EAAE,IAAO,IAAI,KAAK,KAAK,EAAE,KAAK,OAAQ,EAAE,KAAM,GAAI,EACnD,IAAI,KAAK,KAAK,EAAE,KAAK,MAAO,KAAK,IAAI,EAAE,CAAC,EAAE,GAAI,EAC9C,GACT,CACA,SAAS,cAAc,GAAG,CACxB,MAAM,OAAO,EAAE,EAAE,CAAC,EAClB,IAAI,IAAI,EACR,UAAU,KAAK,IAAI,CACjB,MAAM,EAAE,IAAI,CAAC,EACP,IAAI,EAAE,EAAE,EAAE,EAAK,WAAW,IAAI,GAAQ,KAC5C,EAAE,IAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG,GAAG,GACjC,EAAE,EAAE,MAAO,EAAE,IAAI,IAAG,EAAE,EAAE,GAC3B,WAAW,EAAG,MAAM,EACpB,EAAE,MAAM,MAAM,KAAK,MAAM,EACzB,EAAE,MAAM,UAAU,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,GAAG,EACxC,KAAK,EAAE,EACP,OAAO,KAAK,MAAM,EAAE,eAAe,EAAE,MAAM,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,EAC5D,MAAM,IAAI,MAAM,CAClB,CACA,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAG,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAG,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAClH,UAAY,SAAS,EAAE,GAAG,QAAQ,KAAK,IAAI,EAAE,GAAG,GAAG,EACnD,MAAM,SAAS,KAAK,MAAM,KAAK,KAAK,EAAE,eAAe,EAAE,MAAM,EAC7D,MAAM,EAAE,IAAI,EACN,GAAG,WAAW,KAAK,EACzB,QAAQ,gBAAgB,GAAI,EAAE,GAAI,SAAS,gBAAgB,IAAK,EAAE,GAAI,YAAY,gBAAgB,GAAI,EAAE,GAAI,aAAa,gBAAgB,IAAK,EAAE,GAEhJ,SAAS,kBAAkB,IAAK,IAAK,KAAK,IAAI,EAAE,EAAE,GAAG,EACrD,aAAa,kBAAkB,SAAS,kBACxC,MAAM,KAAM,YAAY,SAAU,EAAE,EACjC,KAAK,IAAI,MAAM,IAAI,EAAE,OACtB,QAAU,KAAK,OAAO,KAAK,IAAI,EAAE,GAAG,EAAG,EACvCA,QAAO,MAAM,OAAO,eAAe,EAAE,IAAK,OAAO,QAAQ,CAAC,EAAE,KAE9D,MAAM,SAAS,IAAK,KAAM,EAAE,EAC9B,CACA,MAAM,SAAS,IAAI,eAAe,QAAQ,EAC1C,SAAS,QAAQ,IAAI,WAAW,MAAM,MAAM,CAAC,EAC7C,MAAM,WAAW,IAAI,eAAe,EAAG,EACvC,WAAW,QAAQ,GACnB,SAAS,QAAQ,UAAU,EAC3B,MAAM,MAAM,IAAI,gBAAgB,IAAI,MAAM,QAAQ,EAAE,CAAC,EAAG,IAAM,GAAK,IAAI,EACvE,SAAS,QAAQ,KAAK,EAEtB,MAAM,SAAS,IAAI,cAAc,OAAQ,SAAS,UAAU,EAC5D,SAAS,cAAc,GAAM,SAAS,cAAc,IACpD,SAAS,UAAU,GAAO,SAAS,WAAW,GAC9C,SAAS,YAAY,IAAK,SAAS,YAAY,EAC/C,SAAS,WAAW,GAAM,SAAS,gBAAgB,GACnD,MAAM,SAAS,OAAO,WAAW,mBAAmB,EAAE,QACtD,SAAS,aAAa,CAAC,SACpB,WACD,SAAS,QAAQ,CAAC,IAAI,KAAM,IAAI,IAAI,EACpC,SAAS,WAAW,MAAM,YAAY,SAGxC,SAAS,QAAQ,CACf,MAAM,EAAEA,QAAO,aAAa,EAAG,EAAEA,QAAO,cAAc,EACtD,SAAS,QAAQ,EAAE,EAAE,EAAK,EAAG,SAAS,QAAQ,EAAE,CAAC,EAAG,MAAM,QAAQ,EAAE,CAAC,EACrE,OAAO,OAAO,EAAE,EAAG,OAAO,uBAAuB,CACnD,CACA,IAAI,eAAe,MAAM,EAAE,QAAQA,OAAM,EAAG,OAAO,EAGnD,MAAM,MAAM,IAAI,MAAM,MAEhB,QAAQ,SAAS,cAAc,KAAK,EAC1C,QAAQ,MAAM,QAAQ,6NACtB,SAAS,KAAK,YAAY,OAAO,EACjC,IAAI,OAAO,EAEX,MAAM,OAAO,SAAS,cAAc,KAAK,EACzC,OAAO,MAAM,QAAQ,wNACpBA,QAAO,eAAe,SAAS,MAAM,YAAY,MAAM,EACxD,MAAM,MAAM,CACV,KAAK,CACH,mCACA,+BACA,uCACA,+BACF,EACA,MAAM,CACJ,wBACA,qCACA,iCACA,oCACA,2BACF,EACA,OAAO,CACL,2BACA,oCACA,sBACA,+BACF,EACA,MAAM,CACJ,iCACA,iCACA,2BACA,0BACA,gDACA,8CACF,EACA,KAAK,CACH,oCACA,kCACA,+BACA,0CACF,EACA,MAAM,CACJ,0BACA,gDACA,qBACA,sCACF,CACF,EACA,IAAI,QAAQ,GAAI,QAAQ,EAAG,MAAM,IACjC,SAAS,UAAU,CACjB,MAAM,IAAM,OAAO,OAAS,OAChB,OAAO,SAAW,SAClB,OAAO,QAAW,SAAS,OAAO,QACjC,WAAW,QAAQ,QAEhC,GADG,MAAM,UAAU,QAAQ,IAAK,QAAQ,EAAG,MAAM,OAAO,IACrD,OAAO,OAAO,IAAI,CACnB,MAAM,OACN,MAAM,KAAK,MAAM,GAAG,EACd,KAAK,KAAK,QAAQ,KAAK,MAAM,EAAG,UACtC,OAAO,MAAM,QAAQ,EACrB,WAAW,IAAI,CACb,OAAO,UAAU,2FAAwF,KAAK,SAC9G,OAAO,MAAM,QAAQ,CACvB,EAAE,GAAG,CACP,CAEF,CACA,MAAM,IAAI,GACJ,GAAG,IAAI,MAAM,QAAW,KAAK,IAAI,MAAM,QACvC,KAAK,IAAI,MAAM,QAAW,OAAO,IAAI,MAAM,QAC3C,MAAM,IAAI,MAAM,QAAW,IAAI,IAAI,MAAM,QAAW,EAAE,IAAI,MAAM,WACtE,IAAI,KAAK,OAAQ,GAAG,EAAG,KAAK,EAAG,GAAG,IAAK,SAAS,GAC5C,MAAM,KAAM,SAAS,EAAG,UAAU,GACtC,MAAM,SAAS,IAAI,MAAM,QAAW,UAAU,IAAI,MAAM,QAAW,UAAU,IAAI,MAAM,QACvF,IAAI,WAAW,IACf,MAAM,QAAQ,GAAI,GAAG,EAAE,EAAI,GAAG,EAAE,EAAI,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,GAAG,MAAO,EAAE,KAAK,GAAG,EAAE,EAAE,EACpF,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAEf,QAAQ,IAAI,MAAM,QAAQ,EAAE,IAAK,GAAG,EAAE,UAAU,EAChD,SAAS,IAAI,MAAM,QAAQ,EAAE,aAAa,QAAS,IAAI,MAAM,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAC7F,SAAS,QAAQ,GACjB,MAAM,SAAS,IAAI,MAAM,QAAQ,EAAE,aAAa,QAAS,IAAI,MAAM,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EACvF,QAAQ,QAAQ,MAAM,EAAE,OAAO,EAAG,QAAQ,EAAE,EAAG,QAAQ,UAAU,EACvE,MAAM,aAAa,IAAI,MAAM,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,OAAO,EAAE,UAAU,EAC/D,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAG,CAAC,EAChD,SAAS,IAAI,MAAM,QAAW,cAAc,IAAI,MAAM,QACtD,YAAY,IAAI,MAAM,QACtB,QAAQ,IAAI,MAAM,IAAI,IAAI,MAAM,MAAM,IAAI,IAAI,GAAG,EAAG,GAAI,EAAE,EAChE,OAAO,SAAS,KAAK,OAAO,EAAE,eAAe,GAAG,EAChD,OAAO,IAAI,GAAI,OAAO,uBAAuB,EAC7C,KAAK,SAAS,KAAK,OAAO,EAAE,eAAe,GAAG,EAAE,gBAAgB,SAAS,GAAG,EAE5E,SAAS,aAAa,CACpB,KAAK,SAAU,GAAG,EAAG,SAAS,QAAQ,GACtC,SAAS,CAAC,EACV,GAAG,KAAK,OAAO,QAAQ,EAAG,GAAG,GAAG,OAAO,EAAG,KAAK,KAAK,EAAE,EAAE,UAAU,EAClE,MAAM,SAAS,KAAK,MAAM,EAAE,gBAAgB,KAAK,WAAW,MAAM,EAAE,OAAO,CAAC,EAC5E,IAAI,OAAO,KAAM,KAAK,GACtB,SAAU,CAAC,EAAE,CAAC,IAAK,UAAU,CAAE,MAAM,GAAG,EAAE,EAAE,IAAI,QAAQ,EAAM,GAAG,OAAO,KAAK,GAAI,OAAO,EAAK,CAC7F,MAAM,IAAI,CAAC,EAAG,IAAI,QAAQ,KAAM,MAAM,KACtC,QAAQ,GAAG,EAAG,GAAG,GAAI,KAAK,CACxB,MAAM,EAAE,UAAU,IAAI,MAAM,EAAG,IAAI,KAAK,EAAE,EAAE,MAAM,CAAC,EACnD,IAAI,MAAM,KAAM,UAAU,GAC1B,UAAU,MAAM,EAAE,GAAG,CACnB,GAAG,KAAK,QAAS,SACjB,MAAM,IAAI,UAAU,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EACnD,MAAM,MAAQ,IAAI,IAAI,KAAK,EAAE,KAAK,OAAO,EAAE,IAAO,KAAK,OAAO,EACjE,MAAM,YAAY,UAAU,MAAO,MAAM,GAC9C,CACA,GAAG,CAAC,MAAO,MACX,MAAM,UAAU,IAAI,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EACxD,QAAQ,OAAQ,OAAO,KACzB,CACA,MAAM,IAAI,MAAM,iBAAiB,IAAK,GAAO,cAAe,EAAG,EAC/D,SAAS,MAAM,UAAU,EACzB,UAAU,IAAK,KAAK,OAAO,EAAE,GAC/B,CACA,SAAS,SAAS,CACZ,aAAY,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,GAC1C,aAAY,SAAS,IAEtB,aACD,QAAQ,mBAAmB,IAAM,SAAS,mBAAmB,IAC7D,YAAY,mBAAmB,IAAM,aAAa,mBAAmB,KAIvE,KAAK,QAAS,SAAS,QAAQ,GAAM,KAAK,WAAW,IAAS,EAAE,KAAK,OAAO,EAAE,EAAG,SAAS,GAC1F,KAAK,SAAS,IAAI,EAAE,EAAE,CAAC,EACvB,SAAS,UAAU,EACnB,WAAW,QAAQ,GACnB,MAAM,IAAI,KACV,QAAQ,QAAQ,GAAO,WAAW,SAAS,OAAO,MAAM,EAAG,QAAQ,SAAS,EAAE,EAC9E,KAAK,QAAQ,GAAM,KAAK,MAAM,UAAU,CAAC,EACzC,MAAM,WAAW,KAAK,QAAQ,EAC9B,MAAM,SAAS,IAAM,MAAM,OAAO,GAAK,MAAM,UAAU,KACvD,OAAO,GAAG,IAAI,EAAE,EAAE,CAAC,EAAG,OAAO,IAAI,GAAI,OAAO,uBAAuB,CACrE,CACA,SAAS,WAAW,GAAG,CAErB,GADA,IAAI,GACD,OAAO,OAAO,CAOf,GAAG,IADwD,kBACjD,OAAO,QAAQ,EACzB,SAAS,EACT,OAAO,SAAS,IAAI,EAAE,IAAK,GAAG,EAC9B,OAAO,GAAG,IAAI,EAAE,EAAE,CAAC,EACnB,OAAO,OAAO,EAAE,EAAE,CAAC,EACnB,OAAO,IAAI,GAAI,OAAO,uBAAuB,EAC7C,OAAO,kBAAkB,EACzB,UAAU,oBAAoB,OAAO,YAAY,CAAC,EAClD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,EAAG,CAAC,EACzB,GAAI,GAAG,IAAI,EAAO,IAAM,EAAI,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG,IAAI,EAAO,MAAK,GAAM,GAAK,CAAC,EAE5E,MAAO,GAAG,IAAO,EAAK,GAAG,IAAI,EAAS,EAAE,IAAI,GAAG,KAAK,CAAM,EAAI,EAI9D,MAAM,CAAC,KAAK,GAAG,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,EAC1C,QAAQ,SAAS,EAAE,MACnB,QAAQ,QAAU,GAAG,IAAI,IACzB,WAAW,SAAS,OAAO,MAAM,GAAG,IACpC,WAAW,SAAS,MAAM,MAAM,GAChC,WAAW,SAAS,MAAM,MAAM,MAChC,YAAY,KAAK,KAAK,QAAQ,EAC9B,MAAM,KAAK,GACL,GAAG,KAAK,IAAI,KAAK,EAAG,GAAG,KAAK,IAAI,KAAK,EAC3C,GAAG,GAAG,IAAI,CACR,KAAK,QAAQ,GACb,MAAM,EAAE,GAAG,IAAK,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,EAC/B,KAAK,GAAG,KAAK,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,KAAM,GAAI,CAAC,CAAC,EACnD,KAAK,MAAM,UAAU,EAAE,IAAI,EAC3B,MAAM,GAAG,KAAK,IAAI,EAAE,IACd,EAAE,GAAG,KAAK,GAAG,GACb,EAAE,MAAM,EAAE,IAAK,IACf,GAAG,MAAM,KAAM,EAAE,EAAG,GAAG,CAAC,MAAM,KAAO,EAAE,EAC7C,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GACxB,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAI,CAAC,CAAC,EACxC,KAAK,SAAS,KAAK,OAAO,aAAa,KAAK,CAAC,EAE7C,SAAS,WAAW,KAAK,SAAU,WAAW,EAC9C,MAAM,KAAK,SAAS,OAAO,EACxB,KAAK,MAAQ,KAAK,MACnB,OAAO,kBAAkB,QAAQ,EACjC,cAAc,aAAa,SAAU,SAAS,UAAU,CAAC,EAAE,UAAU,EAClE,cAAc,SAAS,EAAE,KAAM,EAAE,iBAAiB,cAAe,KAAK,IAAI,KAAK,EAAI,CAAC,EAAG,KAAK,WAAW,YAAY,CAAC,GAE3H,SAAU,GAAG,IAAI,EACf,KAAK,QAAQ,GACb,KAAK,SAAS,KAAK,OAAO,aAAa,MAAM,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,UACpD,GAAG,IAAI,EAAO,IAAG,CACzB,KAAK,QAAQ,GACb,KAAK,MAAM,UAAU,CAAC,EACtB,MAAM,GAAG,GAAG,IAAI,GAAQ,IACxB,MAAM,IAAI,EAAE,EAAG,EAAE,MAAM,MAAM,MAAM,EAAE,EACrC,KAAK,SAAS,KAAK,OAAO,aAAa,KAAK,CAAC,EAE7C,MAAM,KAAK,YAAY,WAAW,KAAK,QAAQ,EAC/C,EAAE,iBAAiB,UAAW,KAAK,IAAI,KAAK,GAAI,CAAC,EACjD,KAAK,WAAW,YAAY,CAAC,CAC/B,KAAO,CACL,KAAK,QAAQ,GACb,KAAK,SAAS,IAAI,EAAE,EAAE,CAAC,EACvB,MAAM,GAAG,KAAK,IAAI,GAAG,GAAG,IAAI,EAAO,KAAI,EAAK,EACtC,SAAS,GAAG,KAAK,IAAI,EAAE,GAAG,CAAC,EACjC,EAAE,iBAAiB,UAAW,SAAS,EAAE,EACzC,KAAK,WAAW,YAAY,CAAC,CAC/B,CACF,SACQ,OAAO,SAAS,CAEtB,GAAG,IAAI,IAAE,CAAE,KAAK,QAAS,GAAG,EAC1B,UAAU,KAAK,OAAO,QAAQ,EAAG,SAAS,KAAK,OAAO,QAAQ,EAAE,UAAU,EAC1E,WAAW,UAAU,OAAO,EAC5B,UAAU,gBAAgB,EAAE,MAAM,QAAQ,EACvC,UAAU,SAAS,EAAE,MAAM,UAAU,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,QAAQ,EACjE,UAAU,UAAU,EACpB,MAAQ,CACV,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,GAAG,IAAE,CAAC,EAAG,GAAG,KAAK,IAAI,GAAG,IAAE,IAAI,IAAG,CAAC,CAAC,EAChE,EAAE,KAAK,IAAI,KAAO,UAAU,GAAI,QAAQ,EACxC,GAAG,KAAK,IAAI,KAAM,EAAE,IAAK,EAC/B,KAAK,KAAK,MAAM,WAAW,CAAC,CAAC,EAAE,gBAAgB,KAAK,UAAU,EAAE,UAAU,EAC1E,MAAM,OAAO,KAAK,MAAM,EACxB,KAAK,eAAe,IAAI,MAAM,IAAI,KAAK,EACvC,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE,GAAG,EAAG,CAAC,EACjC,OAAO,SAAS,KAAK,EAAE,EAAE,KAAK,KAAK,KAAK,EACxC,OAAO,KAAK,MAAM,WAAW,EAAE,CAAC,EAAE,gBAAgB,KAAK,UAAU,EAAE,UAAU,EAAE,eAAe,KAAK,EACnG,MAAM,KAAK,MAAM,EAAE,eAAe,KAAK,EACvC,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,gBAAgB,KAAK,UAAU,EACxD,GAAG,MAAM,aAAa,KAAK,IAAI,KAAM,EAAE,GAAI,CAAC,EAAE,gBAAgB,KAAK,UAAU,EAC7E,KAAK,MAAM,UAAU,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,GAAI,KAAO,GAAI,EACzE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,KAAK,EAAE,UAAU,EAC5C,EAAE,iBAAiB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,UAAU,EAAG,CAAC,KAAK,KAAK,EACnE,IAAI,gBAAgB,CAAC,EACrB,OAAO,GAAG,KAAK,GAAG,EAClB,OAAO,OAAO,KAAK,EACnB,OAAO,IAAI,GAAG,GAAG,MAAO,OAAO,uBAAuB,CACxD,SACQ,OAAO,QAAQ,CAErB,GAAG,IAAI,KAAI,kBAAW,GAAa,QAAQ,EAC3C,MAAM,OAAO,KAEP,KAAK,GAAI,GAAG,KAAK,IAAI,GAAG,IAAG,EAAK,CAAK,GAAG,IAAG,EAAK,EAAM,EAC5D,EAAE,iBAAiB,UAAW,IAAI,EAClC,OAAO,KAAK,QAAQ,EAAE,gBAAgB,CAAC,EACvC,IAAI,EACJ,GAAG,GAAG,IAAG,CACP,MAAM,EAAE,GAAG,IAAI,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,IACnC,EAAE,YAAY,OAAO,YAAY,GACjC,KAAK,KAAK,QAAQ,EAAE,KAAK,OAAQ,GAAG,CAAC,CAAC,EAAE,UAAU,CACpD,SACQ,GAAG,IAAG,EAAO,EAAE,OAAQ,KAAK,KAAK,MAAM,UACvC,GAAG,IAAG,EAAK,EAAM,CACvB,EAAE,OAAQ,KAAK,KAAK,MAAM,EAC1B,MAAM,IAAI,GAAG,IAAG,GAAM,EACtB,SAAS,KAAK,IAAI,IAAK,KAAK,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAC7C,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,EAC9B,SAAS,EACX,SACQ,GAAG,IAAG,EAAK,EAAM,EAAK,CAC5B,SAAS,EAAE,EACX,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,EAC9B,SAAS,GACT,MAAM,IAAI,GAAG,IAAG,EAAK,GAAO,EAC5B,EAAE,QAAQ,IAAI,QAAQ,GAAG,EAAE,EAAG,KAAK,KAAK,MAAM,CAChD,MACO,SAAS,EAAE,EAAG,EAAE,KAAK,IAAI,KAAK,IAAI,GAAG,IAAG,EAAK,EAAM,GAAM,GAAG,EAAG,KAAK,KAAK,MAAM,EACtF,OAAO,SAAS,KAAK,IAAI,EAAE,eAAe,CAAC,EAC3C,MAAM,KAAK,IAAI,EAAE,eAAe,EAAG,EACnC,IAAI,IAAI,EAAE,EAAE,CAAC,EAAM,KAAK,IAAI,KAAK,CAAC,EAAE,KAAM,IAAI,IAAI,EAAE,EAAE,CAAC,EACvD,OAAO,GAAG,KAAK,GAAG,EAClB,OAAO,OAAO,KAAK,EACnB,OAAO,IAAI,GAAI,OAAO,uBAAuB,CAC/C,CACF,CAEA,SAAS,OAAO,CACd,sBAAsB,KAAK,EAC3B,MAAM,GAAG,KAAK,IAAI,MAAM,SAAS,EAAE,GAAI,EAevC,GAdA,KAAK,SAAS,GAAG,SAAS,GACvB,OAAO,SAAU,SAAS,OAAO,EAAG,MAAM,GAAO,MAAM,GAAG,YAAY,GACpE,WAAW,EAAE,EAElB,OAAO,kBAAkB,EACzB,UAAU,oBAAoB,OAAO,YAAY,CAAC,EAClD,OAAO,oBAAoB,OAAO,YAAY,CAAC,EAC/C,KAAK,SAAS,KAAK,OAAO,QAAQ,EAAE,gBAAgB,UAAU,CAAC,EAAE,gBAAgB,OAAO,GAAG,EAC3F,KAAK,OAAO,SAAS,KAAK,KAAK,QAAQ,EACvC,KAAK,SAAS,KAAK,OAAO,QAAQ,EAAE,gBAAgB,UAAU,EAAE,EAAE,gBAAgB,OAAO,EAAE,EAC3F,KAAK,OAAO,SAAS,KAAK,KAAK,QAAQ,EACvC,cAAc,EAAE,EAChB,QAAQ,GACR,SAAS,EACN,QAAQ,GAAG,CACZ,OAAO,EACP,WAAW,GAAO,SAAS,GAC3B,UAAU,KAAK,IAAM,IAAI,CAAC,EAAE,EAAE,EAAG,IAAI,CAAC,EAAE,EAAE,EAC1C,SAAS,CAAC,EACV,QAAQ,mBAAmB,IAAM,SAAS,mBAAmB,GAC7D,YAAY,mBAAmB,IAAM,aAAa,mBAAmB,GACrE,KAAK,OAAQ,GAAG,EAAG,SAAS,QAAQ,EACtC,CACA,QAAQ,YAAY,KAAK,OAAO,QAAQ,CAAC,EAAE,UAAO,KAAK,YAAY,EAAE,IAAI,GAAG,QAAQ,CAAC,EAAE,IACvF,SAAS,OAAO,CAClB,CACA,MAAM,CACN",
  "names": ["canvas", "q", "P", "d"]
}
