<div id="app">
<canvas id="c"></canvas>
<div id="hints">
<div id="cred" class="btn">blackhole</div>
<div id="mode" class="btn">contain</div>
<div class="btn">
<label for="file">browse</label>
<input type="file" id="file" accept="image/*" />
</div>
</div>
</div>
#app{width:100%;height:100%;display:flex;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;touch-action:none}canvas{display:block;width:100%;height:100%;opacity:0;transition:opacity .66s ease;cursor:none}#file{display:none}.btn{padding:.1rem .3rem;border:none;cursor:pointer;font-family:inherit;pointer-events:all;background:rgba(0, 0, 0, 0.27);mix-blend-mode:color-burn}.btn label{cursor:pointer}#hints{position:fixed;bottom:0px;width:100%;display:flex;justify-content:space-evenly;pointer-events:none;color:#b6b6b6;transition:opacity .66s ease,visibility .66s ease}#hints.hide{opacity:0}#mode{display:none}
const WY=X;(function(e,g){const WQ=X,n=e();while(!![]){try{const L=parseInt(WQ(0x21b))/0x1+-parseInt(WQ(0x1ae))/0x2*(-parseInt(WQ(0x1f1))/0x3)+parseInt(WQ(0x1ba))/0x4*(-parseInt(WQ(0x1ff))/0x5)+-parseInt(WQ(0x211))/0x6*(parseInt(WQ(0x18d))/0x7)+parseInt(WQ(0x200))/0x8*(parseInt(WQ(0x207))/0x9)+-parseInt(WQ(0x1e8))/0xa*(-parseInt(WQ(0x1a9))/0xb)+parseInt(WQ(0x212))/0xc;if(L===g)break;else n['push'](n['shift']());}catch(y){n['push'](n['shift']());}}}(o,0x8eb00));function X(W,h){W=W-0x185;const e=o();let g=e[W];return g;}const h=(function(){let e=!![];return function(g,n){const L=e?function(){if(n){const y=n['apply'](g,arguments);return n=null,y;}}:function(){};return e=![],L;};}()),W=h(this,function(){const Wc=X;return W[Wc(0x1f4)]()['search']('(((.+)+)+)+$')[Wc(0x1f4)]()['constructor'](W)[Wc(0x1fb)]('(((.+)+)+)+$');});function o(){const h0=['80HtUcCO','numHoles','MS4pKTt2ZWMyIGQ9dkNvb3JkLWNlbnRlcnNbaF07ZmxvYXQgcj','min','shader\x20compile:\x20','file','drop','439686VowHyf','TEXTURE_WRAP_T','hide','centers','offset','pointerId','preventDefault','addEventListener','aWZvcm0gdmVjMiBjZW50ZXJzWzE2XTt1bmlmb3JtIGZsb2F0IH','position','6OpkKVk','8883720FAwtRs','bufferData','pow','abs','getElementById','style','no\x20WebGL','getProgramParameter','FRAGMENT_SHADER','151209YpOSYA','classList','c2l0aW9uLngsMS4tcG9zaXRpb24ueSkqdmlld1NpemUtb2Zmc2','dragover','reduce','mouse','bindBuffer','createProgram','anonymous','ARRAY_BUFFER','6237203DfzOBK','LINEAR','KHIyKTtmbG9hdCBhPWF0YW4ocjIsZGlzdCk7aWYoYTw9bWF4SW','textContent','enableVertexAttribArray','lzdCxtYXhJbkFuZ2xlO3VuaWZvcm0gaW50IG51bUhvbGVzO3Vu','src','getProgramInfoLog','exp','texture','naturalWidth','f(x)\x20is\x20a\x20NaN','replace','did\x20not\x20converge','_blank','files','length','f(x0)\x20is\x20a\x20NaN','b3NpdGlvbj12ZWM0KHBvc2l0aW9uKjIuLTEuLDAsMSk7fQ==','createShader','mode','eXN0ciUpKmRpc3QtcjIpKnM7fWRpc3A9Y2xhbXAodkJhc2VUYy','YXR0cmlidXRlIHZlYzIgcG9zaXRpb247dW5pZm9ybSB2ZWMyIH','N0cmVuZ3Roc1sxNl0sY29lZmZzWyVjb2VmZnMlXTt1bmlmb3Jt','shaderSource','uniform1i','FLOAT','push','11lYXPqc','target','TEXTURE_MAG_FILTER','hTaXplO3ZhcnlpbmcgdmVjMiB2Q29vcmQsdkJhc2VUYzt2b2lk','attachShader','2003138xThlqp','ZlYzQoMCwwLDAsMSksYmxhY2spO30=','max','uniform1f','delete','innerHeight','factor','width','invTexSize','remove','uniform1fv','cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O3VuaWZvcm0gZmxvYXQgZG','2099516NSmXDx','getUniformLocation','get','atan2','https://github.com/cliffcrosland/black-hole.js','viewport','sin','isArray','texSize','size','onload','bind','CLAMP_TO_EDGE','ZlYzIoMCk7ZmxvYXQgYmxhY2s9MC47Zm9yKGludCBoPTA7aDwx','texParameteri','TEXTURE_MIN_FILTER','crossOrigin','LINK_STATUS','entries','coeffs','call','1vb3Roc3RlcCgwLiwxLixjbGFtcChzdHJlbmd0aHNbaF0sMC4s','hints','open','pointerType','ZpZXdTaXplLG9mZnNldDt1bmlmb3JtIGZsb2F0IGZhY3Rvcjt1','map','sqrt','coeffs[','set','uniform2f','TRIANGLE_STRIP','bmp\x20fail','drawArrays','error','bmlmb3JtIHZlYzIgdGV4U2l6ZTt2YXJ5aW5nIHZlYzIgdkNvb3','height','x8dkJhc2VUYy55PDAufHx2QmFzZVRjLnk+MS4pe2dsX0ZyYWdD','TEXTURE_2D','strengths','angle','resize','onclick','body','useProgram','uniform2fv','1436070vIpLDn','onchange','VERTEX_SHADER','texImage2D','tan','getAttribLocation','bindTexture','link:\x20','RGBA','3SMWgSC','createBuffer','at\x20least\x20one\x20photonPath\x20coord\x20required','toString','pageY','COMPILE_STATUS','tkaXNwKmludlRleFNpemUsdmVjMigwKSx2ZWMyKDEpKTtnbF9G','maxInAngle','devicePixelRatio','I9ZG90KGQsZCk7aWYocjI8MWUtNiljb250aW51ZTtyMj1zcXJ0','search','vertexAttribPointer','webgl','IHNhbXBsZXIyRCB0ZXh0dXJlO3VuaWZvcm0gdmVjMiBpbnZUZX','10WwiayP'];o=function(){return h0;};return o();}W(),function(){const Wq=X;function e(k,u){const Ws=X;let v=0x0;for(let W0=0x0,W1=k[Ws(0x19d)];W0<W1;W0++)v+=k[W0]*u[W0];return v;}function g(k){const Wt=X;let u=0x0;for(let v=0x0,W0=k['length'];v<W0;v++){const W1=Math[Wt(0x215)](k[v]);W1>u&&(u=W1);}return u;}function n(k){const WB=X;if(!Array[WB(0x1c1)](k))return k;const u=k[WB(0x19d)],v=Array(u);for(let W0=0x0;W0<u;W0++)v[W0]=n(k[W0]);return v;}function y(k){const u=Array(k);for(let v=0x0;v<k;v++){u[v]=Array(k);for(let W0=0x0;W0<k;W0++)u[v][W0]=v===W0?0x1:0x0;}return u;}function z(k,u){const Wi=X,v=k[Wi(0x19d)],W0=u['length'],W1=Array(v);for(let W2=0x0;W2<v;W2++){let W3=0x0;const W4=k[W2];for(let W5=0x0;W5<W0;W5++)W3+=W4[W5]*u[W5];W1[W2]=W3;}return W1;}function w(k,u,v){const WT=X,W0=k[WT(0x19d)],W1=u[WT(0x19d)],W2=Array(W0);for(let W3=0x0;W3<W0;W3++){W2[W3]=Array(W1);const W4=v*k[W3];for(let W5=0x0;W5<W1;W5++)W2[W3][W5]=W4*u[W5];}return W2;}function d(k,u){const WE=X,v=k['length'],W0=k[0x0][WE(0x19d)],W1=Array(v);for(let W2=0x0;W2<v;W2++){W1[W2]=Array(W0);for(let W3=0x0;W3<W0;W3++)W1[W2][W3]=k[W2][W3]+u[W2][W3];}return W1;}function j(k,u){const WS=X,W0=Wo=>{const WP=X,WX=Wo['length'],We=k(Wo);if(isNaN(We))throw Error(WP(0x198));const Wg=Array(WX),Wn=n(Wo);for(let Wy=0x0;Wy<WX;Wy++){let Wz=Math[WP(0x1b0)](0.000001*We,1e-8);for(let Ww=0x0;;Ww++){if(Ww===0x14)throw Error(WP(0x19a));Wn[Wy]=Wo[Wy]+Wz;var WL=k(Wn);Wn[Wy]=Wo[Wy]-Wz;const WZ=k(Wn);Wn[Wy]=Wo[Wy];if(!isNaN(WL)&&!isNaN(WZ)){Wg[Wy]=(WL-WZ)/(0x2*Wz);const Wd=Wo[Wy]-Wz,Wj=Wo[Wy]+Wz;WL=Math[WP(0x203)](Math[WP(0x215)](Wg[Wy]*(Wj-Wd)),Math['abs'](WL-WZ))/(0x3e8*(Math['abs'](We)+0x1));if(Wd===Wo[Wy]||Wj===Wo[Wy]||Wg[Wy]===0x0&&We!==0x0||WL<=0.001)break;}Wz/=0x10;}}return Wg;};var W1=n(u);u=W1['length'];var W2=k(W1),W3;if(isNaN(W2))throw Error(WS(0x19e));let W4=0x0;var W5=W0(W1);let W6={}['na']||y(u);for(;W4<0x3e8;){W4++;if(g(W5)===0x0)break;var W7=z(W6,W5);for(W3=0x0;W3<u;W3++)W7[W3]=-W7[W3];W3=e(W5,W7);if(W3>=0x0){W6=y(u);for(W3=0x0;W3<u;W3++)W7[W3]=-W5[W3];W3=e(W5,W7);}var W8=0x1,W9=W1,WW=Math[WS(0x1d5)](e(W7,W7));if(WW<1e-8)break;let Wo;for(var Wh=void 0x0;W4<0x3e8&&!(W8*WW<1e-8);){Wo=Array(u);for(Wh=0x0;Wh<u;Wh++)Wo[Wh]=W9[Wh]+W8*W7[Wh];Wh=k(Wo);if(Wh-W2<0.1*W8*W3&&!isNaN(Wh))break;W8*=0.5,W4++;}if(W8*WW<1e-8)break;W3=0x0;for(W9=0x0;W9<u;W9++)W3+=W8*W7[W9]*(W8*W7[W9]);if(Math[WS(0x215)](Wh-W2)<=1e-8*(Math['abs'](Wh)+Math[WS(0x215)](W2)+0x1)&&Math[WS(0x1d5)](W3)<1e-8){W1=Wo,W2=Wh;break;}W9=W0(Wo),W1=Array(u),W2=Array(u);for(WW=0x0;WW<u;WW++)W1[WW]=W9[WW]-W5[WW],W2[WW]=W8*W7[WW];W5=e(W1,W2),W5>1e-12&&(W7=z(W6,W1),W8=w(W2,W2,(W5+e(W1,W7))/(W5*W5)),W1=w(W7,W2,-0x1/W5),W5=w(W2,W7,-0x1/W5),W6=d(d(W6,W8),d(W1,W5))),W1=Wo,W2=Wh,W5=W9;if(Math['sqrt'](W3)<1e-8)break;}return{'ia':W1};}function D(W0){const WH=X;var W1=0x14*Math['PI'],W2=B;const W3=[0.2,0.3,0.8,0x8/0x9,0x1,0x1],W4=[[0.2],[0.075,0.225],[0x2c/0x2d,-0x38/0xf,0x20/0x9],[0x4bac/0x19a1,-0x6310/0x88b,0xfbc0/0x19a1,-0xd4/0x2d9],[0x2339/0xc60,-0x163/0x21,0xb68c/0x147f,0x31/0xb0,-0x13ef/0x48e0],[0x23/0x180,0x0,0x1f4/0x459,0x7d/0xc0,-0x88b/0x1a80,0xb/0x54]],W5=[0x47/0xe100,0x0,-0x47/0x4137,0x47/0x780,-0x4365/0x52d00,0x16/0x20d,-0.025],W6=typeof W0==='number',W7=W6?(Wj,WD)=>[W2(Wj,WD[0x0])]:W2,W8=[0x0];W0=[W6?[W0]:W0['slice']()];let W9=0x0,WW=W0[0x0];var Wh=W1-0x0;let Wo=Wh/0x64;Wh=Math['abs'](Wh)/0x64;let WX=0x0,We=0x0;const Wg=W1>0x0?0x1:-0x1,Wn=WW[WH(0x19d)];for(;Wg*W9<Wg*W1&&We<0x2710;){We++,Wg*(W9+Wo)>Wg*W1&&(Wo=W1-W9);var WL=Array(0x7);WL[0x0]=W7(W9,WW);for(var Wy=0x1;Wy<0x7;Wy++){var Wz=Array(Wn);for(var Ww=0x0;Ww<Wn;Ww++)Wz[Ww]=WW[Ww];for(Ww=0x0;Ww<Wy;Ww++)if(W4[Wy-0x1][Ww]!==void 0x0){var WZ=Wo*W4[Wy-0x1][Ww];for(var Wd=0x0;Wd<Wn;Wd++)Wz[Wd]+=WZ*WL[Ww][Wd];}WL[Wy]=W7(W9+(Wy<0x6?W3[Wy-0x1]:0x1)*Wo,Wz);}Wy=Array(Wn);for(Wz=0x0;Wz<Wn;Wz++)Wy[Wz]=WW[Wz];for(Wz=0x0;Wz<0x6;Wz++)for(Ww=Wo*W4[0x5][Wz],WZ=0x0;WZ<Wn;WZ++)Wy[WZ]+=Ww*WL[Wz][WZ];Wz=0x0;for(Ww=0x0;Ww<Wn;Ww++){WZ=0x0;for(Wd=0x0;Wd<0x7;Wd++)WZ+=W5[Wd]*WL[Wd][Ww];WZ*=Wo,WZ=Math[WH(0x215)](WZ)/(0.000001*(0x1+Math[WH(0x215)](WW[Ww]))),WZ>Wz&&(Wz=WZ);}if(Wz>0x1&&We<0x2710){Wo*=Math[WH(0x1b0)](0.1,0.8*Math['pow'](Wz,-0.2));continue;}W9+=Wo,WW=Wy,WX++,W8[WX]=W9,W0[WX]=WW,WL=!0x0;for(Wy=0x0;Wy<Wn;Wy++)if(!Number['isFinite'](WW[Wy])){WL=!0x1;break;}if(!WL)break;Wo*=Wz===0x0?0x5:Math[WH(0x203)](0x5,0.8*Math[WH(0x214)](Wz,-0.2)),Math[WH(0x215)](Wo)>Wh&&(Wo=Wg*Wh);}return{'x':W8,'y':W6?W0[WH(0x1d4)](Wj=>Wj[0x0]):W0};}function c(k){return k*Math['PI']/0xb4;}function s(){const WF=X,k=t(),u=[];for(let v=0x0;v<=2.2;v++)u[WF(0x1a8)](0x1);return{'R':j(W0=>k['ca'][WF(0x187)]((W1,W2,W3)=>{const WA=WF;let W4=0x0;for(let W5=0x0;W5<=2.2;W5++)W4+=W0[W5]*Math[WA(0x214)](W2,W5);return W2=W4-k['ha'][W3],W1+W2*W2;},0x0),u)['ia'],'M':k['M']};}function t(){const WM=X,k=[];for(let W2=0x0;W2<0x78;W2+=0.048)k[WM(0x1a8)](W2);const u=k[WM(0x1d4)](W3=>{const WR=WM;var W4=D([0x1/0x5d,0x1/(0x5d*Math['tan'](c(W3)))]),W5=W4['x'];W3=[];for(let W6=0x0,W7=W4['y'][WR(0x19d)];W6<W7;W6++){const W8=0x1/W4['y'][W6][0x0];if(W8<0x0)break;W3[WR(0x1a8)]([W8*Math['cos'](W5[W6]),W8*Math[WR(0x1c0)](W5[W6])]);}if(W3[WR(0x19d)]<0x1)throw Error(WR(0x1f3));W4=W3[W3[WR(0x19d)]-0x1];if(Math['abs'](W4[0x0])<0x1&&Math[WR(0x215)](W4[0x1])<0x1)W3={'da':!0x0};else{if(W3['length']<0x2)throw Error('not\x20enough\x20photonPath\x20coords');W4=W3[W3[WR(0x19d)]-0x2],W5=W3[W3[WR(0x19d)]-0x1],W3=W5[0x0]-W4[0x0],W4=W5[0x1]-W4[0x1],W3={'angle':Math[WR(0x1bd)](W4,W3)*0xb4/Math['PI']};}return W3;});let v=0x0;const W0=[],W1=[];return k['forEach']((W3,W4)=>{const Wa=WM;W4=u[W4],W4['da']?v=W3:isNaN(W3)||isNaN(W4[Wa(0x1e2)])||(W0[Wa(0x1a8)](W3+Math['PI']),W3=W4[Wa(0x1e2)],W1[Wa(0x1a8)](W3<0x0?-0xb4-W3:0xb4-W3));}),{'M':c(v),'ca':W0[WM(0x1d4)](c),'ha':W1[WM(0x1d4)](c)};}function B(k,u){return k=u[0x0],[u[0x1],0x3*k*k-k];}const i={'la':atob(Wq(0x1a3)+Wq(0x1d3)+Wq(0x1dd)+'JkLHZCYXNlVGM7dm9pZCBtYWluKCl7dkNvb3JkPSh2ZWMyKHBv'+Wq(0x185)+'V0KS9mYWN0b3I7dkJhc2VUYz12Q29vcmQvdGV4U2l6ZTtnbF9Q'+Wq(0x19f)),'ba':atob(Wq(0x1b9)+Wq(0x192)+Wq(0x20f)+Wq(0x1a4)+Wq(0x1fe)+Wq(0x1ac)+'IG1haW4oKXtpZih2QmFzZVRjLng8MC58fHZCYXNlVGMueD4xLn'+Wq(0x1df)+'b2xvcj12ZWM0KDAsMCwwLDEpO3JldHVybjt9dmVjMiBkaXNwPX'+Wq(0x1c7)+'NjtoKyspe2lmKGg+PW51bUhvbGVzKWJyZWFrO2Zsb2F0IHM9c2'+Wq(0x1cf)+Wq(0x202)+Wq(0x1fa)+Wq(0x18f)+'5BbmdsZSpzKWJsYWNrPTEuO2Rpc3ArPWQvcjIqKHRhbiglcG9s'+Wq(0x1a2)+Wq(0x1f7)+'cmFnQ29sb3I9bWl4KHRleHR1cmUyRCh0ZXh0dXJlLGRpc3ApLH'+Wq(0x1af))};function A(k){const WV=Wq,u=k['i']['getContext'](WV(0x1fd),{'premultipliedAlpha':!0x1,'alpha':!0x1,'preserveDrawingBuffer':!0x0});if(u){k['m']=u;var v=f(k);k['D']=l(k,v),u[WV(0x1e6)](k['D']),v=u[WV(0x1f2)](),u[WV(0x189)](u['ARRAY_BUFFER'],v),u[WV(0x213)](u[WV(0x18c)],new Float32Array([0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1]),u['STATIC_DRAW']),v=u[WV(0x1ed)](k['D'],WV(0x210)),u[WV(0x191)](v),u[WV(0x1fc)](v,0x2,u[WV(0x1a7)],!0x1,0x0,0x0),k['h']=Object[WV(0x1cc)]({'aa':'dist','fa':WV(0x1f8),'ka':WV(0x1c2),'ea':WV(0x1b6),'ma':'viewSize','offset':WV(0x20b),'l':WV(0x1b4),'ga':WV(0x201),'Z':WV(0x20a),'ja':WV(0x1e1),'$':WV(0x1cd),'oa':WV(0x196)})[WV(0x187)]((W0,[W1,W2])=>({...W0,[W1]:u[WV(0x1bb)](k['D'],W2)}),{}),u['uniform1fv'](k['h']['$'],new Float32Array(k['F']['R'])),u[WV(0x1b1)](k['h']['fa'],k['F']['M']),k['L']=u['createTexture'](),u['bindTexture'](u[WV(0x1e0)],k['L']),u[WV(0x1c8)](u[WV(0x1e0)],u[WV(0x1c9)],u[WV(0x18e)]),u[WV(0x1c8)](u[WV(0x1e0)],u[WV(0x1ab)],u['LINEAR']),u['texParameteri'](u['TEXTURE_2D'],u['TEXTURE_WRAP_S'],u['CLAMP_TO_EDGE']),u[WV(0x1c8)](u['TEXTURE_2D'],u[WV(0x208)],u[WV(0x1c6)]),k['C']=new Float32Array(0x20),k['K']=new Float32Array(0x10);}else document[WV(0x1e5)]['textContent']=WV(0x218);}function M(k){const WC=Wq;Object[WC(0x1cc)]({'touchstart':k['U'],'pointerdown':k['W'],'pointermove':k['X'],'pointerup':k['P'],'pointercancel':k['P'],'pointerout':k['Y']})['forEach'](([u,v])=>k['i'][WC(0x20e)](u,W0=>v[WC(0x1c5)](k)(W0))),document[WC(0x216)]('cred')[WC(0x1e4)]=()=>window[WC(0x1d1)](WC(0x1be),WC(0x19b)),k['O'][WC(0x1e4)]=()=>{const Wf=WC;k[Wf(0x1a1)]=0x1-k[Wf(0x1a1)],k['O'][Wf(0x190)]=k['mode']?'contain':'cover',m(k);},document[WC(0x216)](WC(0x205))[WC(0x1e9)]=u=>a(k,u[WC(0x1aa)]?.[WC(0x19c)]?.[0x0]),window[WC(0x20e)](WC(0x186),u=>u[WC(0x20d)]()),window[WC(0x20e)](WC(0x206),u=>{const WN=WC;u[WN(0x20d)](),a(k,u['dataTransfer']?.[WN(0x19c)]?.[0x0]);}),window['addEventListener'](WC(0x1e3),()=>m(k));}function a(k,u){const v=k['m'],W0=W2=>{const WO=X;k['N']=W2,k['v']=W2[WO(0x197)]||W2[WO(0x1b5)],k['u']=W2['naturalHeight']||W2[WO(0x1de)],v[WO(0x1ee)](v['TEXTURE_2D'],k['L']),v[WO(0x1eb)](v[WO(0x1e0)],0x0,v[WO(0x1f0)],v[WO(0x1f0)],v['UNSIGNED_BYTE'],W2),v[WO(0x1d8)](k['h']['ka'],k['v'],k['u']),v['uniform2f'](k['h']['ea'],0x1/k['v'],0x1/k['u']),k['B']=!0x0,m(k),r(k),k['i'][WO(0x217)]['opacity']='1';};k['B']&&(k['i']['style']['opacity']='0');const W1=()=>{const WJ=X;if(u instanceof File)createImageBitmap(u)['then'](W2=>W0(W2))['catch'](W2=>console[WJ(0x1dc)](WJ(0x1da),W2));else{const W2=new Image();W2[WJ(0x1ca)]=WJ(0x18b),W2[WJ(0x1c4)]=()=>W0(W2),W2[WJ(0x193)]=u;}};k['B']?setTimeout(W1,0x190):W1();}function q(k,u){const WI=Wq;requestAnimationFrame(W1=>q(k,W1));if(k['B']){if(k['g']['size']!==0x0||k['H']){k['A']||(k['A']=u);var v=(u-k['A'])/0x3e8;k['A']=u,v>0.1&&(v=0.1),u=0x1-Math[WI(0x195)](-0x40*v);var W0=0x4*v;v*=5.5;for(const [W1,W2]of k['g']){W2['x']+=(W2['S']-W2['x'])*u,W2['y']+=(W2['T']-W2['y'])*u;const W3=W2['o']?0x0:0x1;W2['j']<W3?W2['j']=Math[WI(0x203)](W3,W2['j']+W0):W2['j']>W3&&(W2['j']=Math[WI(0x1b0)](W3,W2['j']-v)),W2['o']&&W2['j']<=0.0001&&(k['g'][WI(0x1b2)](W1),k['g']['size']===0x0&&k['G'][WI(0x21c)][WI(0x1b7)](WI(0x209)));}r(k),k['H']=k['g'][WI(0x1c3)]>0x0;}else k['A']=0x0;}}function f(k){const Wl=Wq;k=k['F']['R'];let u='coeffs['+(k['length']-0x1)+']';for(let v=k[Wl(0x19d)]-0x2;v>=0x0;v--)u=Wl(0x1d6)+v+']\x20+\x20a\x20*\x20('+u+')';return i['ba'][Wl(0x199)]('%coeffs%',k[Wl(0x19d)])[Wl(0x199)]('%polystr%',u);}function l(k,u){const Wp=Wq,v=k['m'],W0=v[Wp(0x18a)]();v[Wp(0x1ad)](W0,p(k,v[Wp(0x1ea)],i['la'])),v[Wp(0x1ad)](W0,p(k,v[Wp(0x21a)],u)),v['linkProgram'](W0);if(!v[Wp(0x219)](W0,v[Wp(0x1cb)]))throw Wp(0x1ef)+v[Wp(0x194)](W0);return W0;}function p(k,u,v){const Wm=Wq;k=k['m'],u=k[Wm(0x1a0)](u),k[Wm(0x1a5)](u,v),k['compileShader'](u);if(!k['getShaderParameter'](u,k[Wm(0x1f6)]))throw Wm(0x204)+k['getShaderInfoLog'](u);return u;}function m(k){const WK=Wq;if(k['N']){var u=k['m'],v=window['innerWidth'],W0=window[WK(0x1b3)],W1=Math[WK(0x203)](window[WK(0x1f9)]||0x1,0x2);k['i'][WK(0x1b5)]=v*W1,k['i']['height']=W0*W1,u[WK(0x1bf)](0x0,0x0,k['i'][WK(0x1b5)],k['i'][WK(0x1de)]),W1=v/k['v'];var W2=W0/k['u'],W3=Math[WK(0x203)](W1,W2);W1=k['mode']?Math[WK(0x1b0)](W1,W2):W3,k['l']=W1,k['I']=(v-k['v']*W1)/0x2,k['J']=(W0-k['u']*W1)/0x2,u[WK(0x1b1)](k['h']['aa'],Math['hypot'](v,W0)/Math[WK(0x1ec)](k['V'])/W1),u[WK(0x1d8)](k['h']['ma'],v,W0),u[WK(0x1d8)](k['h'][WK(0x20b)],k['I'],k['J']),u['uniform1f'](k['h']['l'],k['l']),k['H']=!0x0;}}function r(k){const Wr=Wq,u=k['m'];let v=0x0;for(const [,W0]of k['g']){if(v>=0x10)break;k['C'][v*0x2]=W0['x'],k['C'][v*0x2+0x1]=W0['y'],k['K'][v]=W0['j'],v++;}u[Wr(0x1a6)](k['h']['ga'],v),v>0x0&&(u[Wr(0x1e7)](k['h']['Z'],k['C']),u[Wr(0x1b8)](k['h']['ja'],k['K'])),u[Wr(0x1db)](u[Wr(0x1d9)],0x0,0x4);}function b(k,u,v,W0){const Wb=Wq;v=(v-k['I'])/k['l'],W0=(W0-k['J'])/k['l'];let W1=k['g']['get'](u);W1?(W1['o']=!0x1,W1['S']=v,W1['T']=W0):k['g'][Wb(0x1d7)](u,{'x':v,'y':W0,'S':v,'T':W0,'j':0x0,'o':!0x1});}class x{constructor(){const WU=Wq;this['C']=this['K']=this['I']=this['J']=this['l']=this['N']=this['L']=this['v']=this['u']=this['i']=this['m']=this['h']=this['D']=null,this['H']=!0x0,this['O']=document[WU(0x216)](WU(0x1a1)),this['G']=document[WU(0x216)](WU(0x1d0)),this['mode']=0x1,this['g']=new Map(),this['A']=0x0,this['B']=!0x1,this['V']=0x49*Math['PI']/0xb4,this['F']=s(),this['i']=document[WU(0x216)]('c'),A(this),M(this),a(this,'media/void/city.webp'),requestAnimationFrame(k=>q(this,k));}['U'](k){const Wx=Wq;k[Wx(0x20d)]();}['W'](k){const WG=Wq;k[WG(0x1d2)]!=='mouse'&&(b(this,k['pointerId'],k['pageX'],k[WG(0x1f5)]),this['g'][WG(0x1c3)]===0x1&&this['G'][WG(0x21c)]['add'](WG(0x209)));}['X'](k){const Wk=Wq;b(this,k[Wk(0x1d2)]===Wk(0x188)?'mouse':k[Wk(0x20c)],k['pageX'],k[Wk(0x1f5)]);}['P'](k){const Wu=Wq;if(k[Wu(0x1d2)]!=='mouse'){if(k=this['g'][Wu(0x1bc)](k[Wu(0x20c)]))k['o']=!0x0;this['g'][Wu(0x1c3)]===0x0&&this['G'][Wu(0x21c)][Wu(0x1b7)](Wu(0x209));}}['Y'](k){const Wv=Wq;if(k=this['g'][Wv(0x1bc)](k[Wv(0x1d2)]===Wv(0x188)?Wv(0x188):k['pointerId']))k['o']=!0x0;}}new x();}[WY(0x1ce)](this);