memoscan
← all memos

Memo 0xb7a8c7e0…2f20db on Ethereum

function vecscl(e,l){let r=[];for(let a=0;a<e.length;a++)r[a]=e[a]*l;return r}function clamp(e){return Math.max(0,Math.min(1,e))}function dot2(e,l){return e[0]*l[0]+e[1]*l[1]}function unit(e){return vecscl(e,1/norm3(e))}function norm3(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}let C,D,body,gl,Shader,simp,colp,pap,vs,fs,Lx,Ly,Nx,Ny;GET.hash&&(tokenData.hash=GET.hash),R=new Random,document.body.style.backgroundColor="#030303",console.log("cathedral study by Eric De Giuli"),C=({body:body}=D=document).createElement("canvas"),body.appendChild(C),gl=C.getContext("webgl2"),"drawingBufferColorSpace"in gl&&(gl.drawingBufferColorSpace="display-p3"),Shader=(e,l)=>{const r=gl.createShader(e);return gl.shaderSource(r,l),gl.compileShader(r),gl.getShaderParameter(r,gl.COMPILE_STATUS)||(console.error(`Error compiling ${e===gl.VERTEX_SHADER?"vertex":"fragment"} shader "${l}":`),console.log(gl.getShaderInfoLog(r))),r};let pal,pj,inv,hgt=rnd(),Nm=hgt<.15?60:hgt<.4?120:hgt<.8?240:hgt<.93?360:512;GET.N&&(Nm=GET.N),innerWidth>innerHeight?(Ny=Nm,Nx=Math.floor(Nm*innerWidth/innerHeight)):(Nx=Nm,Ny=Math.floor(Nm*innerHeight/innerWidth));let palp=[16,3,10,7,4,0,10,13,10,13,1,1,1,2,7,12];palp=vecscl(palp,1/110);let cumpal=[];cumpal[0]=0;for(let e=1;e<palp.length;e++)cumpal[e]=cumpal[e-1]+palp[e-1];let st=1;pj=1;let palr=rnd();for(;st<palp.length&&cumpal[st]<palr;)st++;st--;let mm,nn,ri,zh,zh2,zh3,zr,a,ct,dc,archdepth,night,rlight,wf0,rain,st0,scalefac,infrac,Pcir,lgfac,famp,kkx,kky,hx,lo,sparkle,speckle,skeleton,bubbly,wobble,narch,y0,stt,rr0,nt,refl,dt,phase,clarity,gfac,kgx,kgy,melt,wild,eye,sphsh,a1,a2,xe0,ye0,ze0,kz,kx,ky,om,ox,oy,col,c1,s1,c2,s2,xe,ye,ze,pj2=0;switch(inv=0,st){case 0:pj=6,pj2=7;break;case 1:pj=11,pj2=7;break;case 2:pj=1,pj2=5;break;case 3:pj=1,pj2=0;break;case 4:pj=3,pj2=9;break;case 5:pj=6,pj2=0;break;case 6:pj=5,pj2=7;break;case 7:pj=11,pj2=5;break;case 8:pj=11,pj2=4;break;case 9:pj=11,pj2=0;break;case 10:pj=0,pj2=0,inv=1;break;case 11:pj=3,pj2=3,inv=1;break;case 12:pj=2,pj2=0;break;case 13:pj=2,pj2=10;break;case 14:pj=10,pj2=8;break;case 15:pj=10,pj2=4}pal=new Uint8Array(80);for(let e=0;e<11;e++)for(let l=0;l<2;l++){let r=0==l?pj:pj2,a=Math.min(e,pals[r].length-1);pal[3*e+30*l]=pals[r][a][0],pal[3*e+30*l+1]=pals[r][a][1],pal[3*e+30*l+2]=pals[r][a][2],inv&&(pal[3*e+30*l]=(pal[3*e+30*l]+180)%360)}let rndth=-PI/4+PI/2*rnd();c1=Math.cos(rndth),s1=Math.sin(rndth),c2=-.7,s2=.7,ze0=-(.8+1.5*rnd()),xe0=.05*(2*rnd()-1),ye0=-1/4,kz=1,rnd()<.1&&(kz=2),kx=1,rnd()<.1&&(kx=2),ky=1,rnd()<.1&&(ky=2);let azz=Math.floor(Math.exp(rnd()*Math.log(.95/.1)));azz>=4&&azz<=6&&(azz=1),hx=360*rnd(),sparkle=0,rnd()<.5&&(sparkle=1),lo=0,rnd()<.4&&(lo=1),speckle=0,famp=3*rnd(),rnd()<.4&&(famp=0),kkx=6*rnd(),kky=6*rnd(),rr0=.6,stt=0,lo=1,eye=0,skeleton=0,bubbly=1+Math.floor(4*rnd()),rnd<.1&&(bubbly=0),refl=1,rnd()<.3&&(refl=0),refl&&(rr0*=.9),inv=0,rnd()<.2&&(inv=1),rnd()<.7&&(wobble=1),azz<7&&(wobble=0),phase=0,rnd()<.6&&(phase=-PI/3+PI/6*rnd()),dt=.1+1.2*rnd(),clarity=0,rnd()<.5&&(clarity=.7*rnd()),kgx=5+7*rnd(),kgy=5+7*rnd(),gfac=.5+rnd(),Nrad0*=gfac,melt=0,rnd()<.4&&azz>5&&(melt=1),wild=1,rnd()<.2&&(wild=0),a1=rnd(),a2=rnd();let miny=1,maxy=-1,v2=[];ze=ze0,xe=xe0,ye=ye0,stt=1,rnd()<.7&&(stt=2),st0=stt,sparkle=0;let gothic=rnd()<.3?1:0;refl=0,rnd()<.8&&(refl=1),rain=0,(rnd()<.3||gothic)&&(rain=rnd()),lo&&(Nrad0*=.7);let Nc=5*gothic+6+Math.floor(10*rnd()),Nb=Math.floor(Nc/2+3*Nc*rnd());dc=.008;let colht=8-4*gothic;ct=1.5*dc;let locrnd=rnd()<.3?0:rnd();a=[];for(let e=0;e<Nc;e++){let l=[];l.x=[],l.y=[],l.z=[],l.vx=[],l.vy=[],l.vz=[],l.x[0]=.07+.85*(e/Nc+.1*locrnd*rnd()),l.z[0]=.2*rnd(),l.y[0]=0,l.vx[0]=0,l.vy[0]=1,l.vz[0]=0;for(let e=1;e<colht+1;e++)l.x[e]=l.x[0],l.y[e]=l.y[0]+dc*e,l.z[e]=l.z[0],l.vx[e]=0,l.vy[e]=1,l.vz[e]=0;l.arch=0,l.maxy=l.y[colht-1]+dc,l.maxx=l.x[colht-1],l.maxz=l.z[0],l.open=1,a.push(l)}narch=0;let nopen=Nc;for(;narch<Nb&&nopen>2;){let e=Math.floor(rnd()*a.length),l=Math.floor(rnd()*a.length);if(e!=l&&1==a[e].open&&1==a[l].open){a[e].open=0,a[l].open=0,nopen-=2;let r=a[e].maxy,t=a[l].maxy;r>t&&([e,l]=[l,e]),r=a[e].maxy,t=a[l].maxy;let c=a[e].maxx,o=a[l].maxx,n=a[e].maxz,g=a[l].maxz,i=[];i.x=[],i.y=[],i.z=[];let d=1+Math.floor((t-r)/dc+1e-4);a[e].arch;i.vx=[],i.vy=[],i.vz=[];for(let l=0;l<d;l++)i.x[l]=a[e].maxx,i.y[l]=a[e].maxy+(t-r)*l/d,i.z[l]=n,i.vx[l]=0,i.vy[l]=1,i.vz[l]=0;let p=Math.abs(o-c)/2,x=Math.max(6,1.2*PI*(p-dc)/dc),s=PI/(x-1),f=0;c<o&&(f=PI,s*=-1),y0=d>0?i.y[d-1]:a[e].maxy;for(let e=0;e<x;e++){gothic?(i.x[d+e]=(a1*c+(1-a1)*o)/2+1.1*(a1*c-(1-a1)*o)/2+1.1*(e+.5)/x*((1-a1)*o-a1*c),i.y[d+e]=y0+3*p*Math.max(0,(.5-Math.abs(e/x-.5))*(.5-Math.abs(e/x-.5)))):(i.x[d+e]=(c+o)/2+p*Math.cos(f+s*(e+1)),i.y[d+e]=y0+Math.max(0,p*Math.sin(f+s*(e+1)))),i.z[d+e]=n+(g-n)*(e+1)/x;let l=unit([Math.cos(f+s*(e+1))-Math.cos(f+s*e),Math.sin(f+s*(e+1))-Math.sin(f+s*e),0]);i.vx[d+e]=l[0],i.vy[d+e]=l[1],i.vz[d+e]=l[2]}i.maxx=(c+o)/2,i.maxy=t+p+ct/2,i.maxz=(n+g)/2,i.arch=Math.sign(o-c),i.open=1,nopen++,a.push(i),narch++}}let Nfinal=a.length,sortr=rnd();sortr>.1&&a.sort((function(e,l){return sortr<.8?parseFloat(l.maxz)-parseFloat(e.maxz):parseFloat(l.maxy)-parseFloat(e.maxy)})),maxy=0;for(let e=0;e<Nfinal;e++)maxy=Math.max(maxy,a[e].maxy);scalefac=.7/(maxy-0),ox=.5-xe0,oy=.5-ye0,oy=.93,rlight=[4*rnd()-2,4*rnd()-2,4*rnd()-2],night=0,rnd()<.3&&(night=1),(6==st||7==st||15==st)&&(night=0),wf0=.7*Math.exp(.3*rnd()),ze=ze0+.2,xe=.5+.2*rnd()-.1,ye=0,Pcir=.05+.04*Math.exp(rnd()),lgfac=rnd();let kp,km,kl,rand,aa=[],ax=[],ay=[],az=[],vx=[],vy=[],vz=[];for(let e=0;e<Nfinal;e++)for(ax.push(...a[e].x),ay.push(...a[e].y),az.push(...a[e].z),vx.push(...a[e].vx),vy.push(...a[e].vy),vz.push(...a[e].vz);ax.length>LL;){let e=[];e.x=ax.slice(0,LL),e.y=ay.slice(0,LL),e.z=az.slice(0,LL),e.vx=vx.slice(0,LL),e.vy=vy.slice(0,LL),e.vz=vz.slice(0,LL),aa.push(e),ax=ax.slice(LL),ay=ay.slice(LL),az=az.slice(LL),vx=vx.slice(LL),vy=vy.slice(LL),vz=vz.slice(LL)}Nfinal=aa.length,ax=[],ay=[],az=[],vx=[],vy=[],vz=[],rand=[];for(let e=0;e<Nrand;e++)rand[e]=rnd();let kl0=.001;switch(kp=new Float32Array(N),km=new Float32Array(N),kl=new Float32Array(N),kl[0]=c1,kl[1]=s1,kl[2]=xe,kl[3]=ye,kl[4]=ze,kl[6]=Nrad0,kl[7]=clarity,kl[8]=wf0,kl[9]=rr0,kl[10]=lgfac,kl[11]=wild,kl[12]=rlight[0],kl[13]=rlight[1],kl[14]=rlight[2],kl[15]=inv,kl[16]=night,kl[17]=lo,kl[18]=phase,kl[19]=rain,kl[20]=famp,kl[21]=kkx,kl[22]=kky,kl[23]=scalefac,kl[24]=ox,kl[25]=oy,st){case 0:kp=[.66,.95,.94,.037,.89,.26,.9,.94,.65,.76,.54,.11,.5,.66,.96,.74,.91,.33,.15,.85];break;case 1:kp=[.97,.01,.89,.08,.78,.98,.16,.8,.53,.91,.4,.54,.84,.44,.14,.75,.45,.33,.47,.95];break;case 2:kp=[.72,.85,.51,.08,.98,.29,.91,.19,.69,.24,.99,.32,.84,.03,.97,.14,.09,.04,.08,.26];break;case 3:kp=[.14,.95,.24,.09,.05,.18,.96,.04,.47,.18,.13,.38,.21,.85,.66,.05,.15,.23,.25,.48];break;case 4:kp=[.58,.02,.03,.84,.43,.4,.95,.76,.15,.55,.04,.49,.49,.55,.52,.07,.22,.16,.31,.37];break;case 5:kp=[.21,.1,.21,.13,.07,.42,.26,.77,.28,.67,.79,.1,.28,.2,.04,.21,.35,.125,.75,.87];break;case 6:kp=[.4,.28,.88,.36,.92,.96,.79,.24,.99,.73,.68,.03,.09,.52,.11,.29,.95,.01,.01,.62];break;case 7:kp=[.1,.27,.31,.05,.4,.24,.67,0,.02,.92,.75,.11,.4,.55,.97,.45,.12,.15,.54,.56];break;case 8:kp=[.17,.81,.64,.19,.52,.27,.59,.11,.65,.87,.36,.17,.66,.1,.95,.08,.5,.43,.92,.13];break;case 9:kp=[.59,.56,.03,.14,.58,.05,.8,0,.09,.75,.8,.55,.07,.27,.46,.08,.35,.01,.17,.63];break;case 10:kp=[.021,.68,.2,.04,.46,.4,.3,.76,.19,.2,.78,.5,.1,.58,.61,.13,.25,.39,.63,.38];break;case 11:kp=[.11,.18,.02,.15,.49,.9,.73,.77,.69,.93,.95,.76,.78,.32,.13,.7,.07,.04,.3,.76];break;case 12:kp=[.15,.27,.17,.11,.61,.44,.65,.21,.82,.79,.4,.33,.43,.22,.02,.07,.5,.13,.95,.34];break;case 13:kp=[.89,.46,.48,.3,.38,.18,.13,.68,.2,.87,.92,.56,.06,.25,.32,.1,.05,.11,.31,.55];break;case 14:kp=[.9,.025,.064,.439,.208,.154,.261,.085,.268,.917,.78,.709,.087,.068,.684,.057,.48,.282,.174,.819];break;case 15:kp=[.81,.79,.38,.8,.19,.22,.39,.047,.82,.98,.9,.28,.12,.24,.12,.69,.62,.2,.99,.71]}kp[4]=Math.exp(rnd()-1)-Math.exp(-1),kp[5]=Math.exp(rnd()-1)-Math.exp(-1);for(let e=0;e<N;e++)km[e]=rnd();function setrand(){rand[37]=km[0],rand[38]=kp[4],rand[39]=km[2],rand[40]=km[3],rand[41]=km[4],rand[42]=km[5],rand[43]=km[6],rand[44]=km[7]}km[0]<.15&&10!=st&&3!=st&&1!=st&&(kp[15]=.69,kp[16]=1.34),setrand();let nx=2+Math.floor(8*rnd()),ny=2+Math.floor(8*rnd()),rr=rnd(),n4=Math.floor(Math.exp(4*rnd()));const tex0=new Uint8Array(Nx*Ny*4);let th,loc_a,loc_L,loc_ac,loc_img,loc_img00,loc_res,loc_t,loc_rand,loc_pal,loc_kp,loc_km,loc_kl,loc_kv,loc_kw,loc_imgc,loc_imgc2,loc_resc,loc_Lc,loc_tc,loc_randc,loc_aavg,loc_bavg,loc_dxy,loc_dxyc,loc_rc,loc_rcc,loc_ax,loc_ay,loc_az,loc_v,loc_klc,loc_kpc,loc_palc,loc_img00c,loc_resp,loc_imgp,loc_randp,loc_kpp,loc_ap,loc_Lp;for(let e=0;e<Nx;e++)for(let l=0;l<Ny;l++){let r=e+Nx*l,a=.1+(.4+.5*a2)*rr;tex0[4*r]=Math.floor(255*rnd()*a),tex0[4*r+1]=Math.floor(255*rnd()*(1-a)),tex0[4*r+2]=Math.floor(255*rnd()*(1-a)),tex0[4*r+3]=255}function thrower(e){if(!gl.getProgramParameter(e,gl.LINK_STATUS))throw console.log(`Link failed:\n${gl.getProgramInfoLog(e)}`),console.log(`VS LOG:\n${gl.getShaderInfoLog(vs)}`),console.log(`FS LOG:\n${gl.getShaderInfoLog(fs)}`),"AARG DED"}function gul(e,l){return gl.getUniformLocation(e,l)}dzc=0,dzp=dzc,simp=gl.createProgram(),vs=Shader(gl.VERTEX_SHADER,src_vert),fs=Shader(gl.FRAGMENT_SHADER,src_simp),gl.attachShader(simp,vs),gl.attachShader(simp,fs),gl.linkProgram(simp),gl.useProgram(simp),thrower(simp),loc_res=gul(simp,"res"),loc_L=gul(simp,"L"),loc_t=gul(simp,"t"),loc_img=gul(simp,"img"),loc_img00=gul(simp,"img00"),loc_kp=gul(simp,"kp"),loc_rand=gul(simp,"rand"),loc_dxy=gul(simp,"dxy"),loc_rc=gul(simp,"rc"),gl.uniform1i(loc_img,0),gl.uniform1i(loc_img00,1),loc_a=gl.getAttribLocation(simp,"a"),gl.activeTexture(gl.TEXTURE0),gl.vertexAttribPointer(loc_a,2,gl.FLOAT,!1,0,0),gl.enableVertexAttribArray(loc_a),pap=gl.createProgram(),vs=Shader(gl.VERTEX_SHADER,src_vert),fs=Shader(gl.FRAGMENT_SHADER,src_pap),gl.attachShader(pap,vs),gl.attachShader(pap,fs),gl.linkProgram(pap),gl.useProgram(pap),thrower(pap),loc_Lp=gul(pap,"L"),loc_imgp=gul(pap,"img"),loc_randp=gul(pap,"rand"),loc_kl=gul(pap,"kl"),loc_ax=gul(pap,"ax"),loc_ay=gul(pap,"ay"),loc_az=gul(pap,"az"),loc_v=gul(pap,"v"),gl.uniform1i(loc_imgp,0),gl.bindBuffer(gl.ARRAY_BUFFER,gl.createBuffer()),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,1,1,1,1,-1,-1,1,1,-1,-1,-1]),gl.STATIC_DRAW),loc_ap=gl.getAttribLocation(pap,"a"),gl.activeTexture(gl.TEXTURE0),gl.vertexAttribPointer(loc_ap,2,gl.FLOAT,!1,0,0),gl.enableVertexAttribArray(loc_ap),colp=gl.createProgram(),vs=Shader(gl.VERTEX_SHADER,src_vert),fs=Shader(gl.FRAGMENT_SHADER,src_colp),gl.attachShader(colp,vs),gl.attachShader(colp,fs),gl.linkProgram(colp),gl.useProgram(colp),thrower(colp),loc_imgc=gul(colp,"img"),loc_imgc2=gul(colp,"img2"),loc_img00c=gul(colp,"img00"),loc_palc=gul(colp,"pal"),loc_resc=gul(colp,"res"),loc_Lc=gul(colp,"L"),loc_tc=gul(colp,"t"),loc_randc=gul(colp,"rand"),loc_dxyc=gul(colp,"dxy"),loc_rcc=gul(colp,"rc"),loc_klc=gul(colp,"kl"),gl.bindBuffer(gl.ARRAY_BUFFER,gl.createBuffer()),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,1,1,1,1,-1,-1,1,1,-1,-1,-1]),gl.STATIC_DRAW),gl.uniform1i(loc_imgc,0),gl.uniform1i(loc_imgc2,1),gl.uniform1i(loc_palc,2),gl.uniform1i(loc_img00c,3),loc_ac=gl.getAttribLocation(colp,"a"),gl.activeTexture(gl.TEXTURE0),gl.vertexAttribPointer(loc_ac,2,gl.FLOAT,!1,0,0),gl.enableVertexAttribArray(loc_ac);let M=1,f1=0;var isMobile=window.matchMedia("(hover: none)").matches;function resize_render(){let e=innerWidth,l=innerHeight,r=devicePixelRatio;C.width=M*e*r|0,C.height=M*l*r|0,head||0==f1?(Lx=2*Math.floor(.97*C.width/2),Ly=2*Math.floor(C.height/2-.015*C.width)):(C.requestFullscreen(),Lx=C.width,Ly=C.height),C.style.width=e+"px",C.style.height=l+"px",gl.viewport((C.width-Lx)/2,(C.height-Ly)/2,Lx,Ly),render()}function texset(e=gl.CLAMP_TO_EDGE,l=gl.NEAREST){gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,e),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,e),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,l),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,l)}let tex00,tex02,texA,texB,texC,fbA,fbB,fb00,fb02;tex00=gl.createTexture(),gl.bindTexture(gl.TEXTURE_2D,tex00),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,Nx,Ny,0,gl.RGBA,gl.UNSIGNED_BYTE,null),texset(),fb00=gl.createFramebuffer(),gl.bindFramebuffer(gl.FRAMEBUFFER,fb00),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,tex00,0),tex02=gl.createTexture(),gl.bindTexture(gl.TEXTURE_2D,tex02),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,Nx,Ny,0,gl.RGBA,gl.UNSIGNED_BYTE,null),texset(),fb02=gl.createFramebuffer(),gl.bindFramebuffer(gl.FRAMEBUFFER,fb02),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,tex02,0),texA=gl.createTexture(),gl.bindTexture(gl.TEXTURE_2D,texA),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,Nx,Ny,0,gl.RGBA,gl.UNSIGNED_BYTE,tex0.subarray(0,Nx*Ny*4)),texset(),fbA=gl.createFramebuffer(),gl.bindFramebuffer(gl.FRAMEBUFFER,fbA),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,texA,0),texB=gl.createTexture(),gl.bindTexture(gl.TEXTURE_2D,texB),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,Nx,Ny,0,gl.RGBA,gl.UNSIGNED_BYTE,null),texset(),fbB=gl.createFramebuffer(),gl.bindFramebuffer(gl.FRAMEBUFFER,fbB),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,texB,0),texC=gl.createTexture(),gl.bindTexture(gl.TEXTURE_2D,texC),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,10,2,0,gl.RGB,gl.UNSIGNED_BYTE,pal),texset(gl.REPEAT,gl.LINEAR),gl.useProgram(simp),gl.uniform1fv(loc_rand,rand),gl.uniform1fv(loc_kp,kp),gl.useProgram(pap),gl.uniform1fv(loc_randp,rand),gl.uniform1fv(loc_kl,kl),gl.useProgram(colp),gl.uniform1fv(loc_randc,rand),gl.uniform1fv(loc_klc,kl);let time,prevt=performance.now(),dtime=20,dtt=1,running=!0,periodic=0,anim=0,flip=0,count=0,dxycount=0,TT=120*(5-2*night),om0=.01,A=.002,time0=prevt,ai=0,AA=[],tik=0;function render(){if(running){if(time=performance.now(),time-prevt>dtime){tik%E==0&&(ai==Nfinal&&(ai=0),AA=[],AA=aa[ai],ai++,ax=AA.x,ay=AA.y,az=AA.z,vx=AA.vx,vy=AA.vy,vz=AA.vz,count++,tik=0),gl.viewport(0,0,Nx,Ny),gl.useProgram(pap),gl.uniform2f(loc_Lp,Lx,Ly),gl.uniform1fv(loc_randp,rand),gl.uniform1fv(loc_ax,ax),gl.uniform1fv(loc_ay,ay),gl.uniform1fv(loc_az,az),gl.uniform3fv(loc_v,[vx[0],vy[0],vz[0]]),kl[4]=ze*(1+.5*Math.cos(time/1e3)),kl[5]=LL,kl[26]=rnd(),kl[27]=kp[18],kl[27]=(time-prevt)/1e3*10,kl[28]=kp[19],kl[28]=tik/(E+1)*(1-tik/(E+1))*2,kl[29]=count/TT,gl.uniform1fv(loc_kl,kl);for(let e=0;e<2;e++)flip=!flip,gl.bindFramebuffer(gl.FRAMEBUFFER,flip?fb02:fb00),gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,flip?tex00:tex02),gl.drawArrays(gl.TRIANGLES,0,6);if(gl.viewport(0,0,Nx,Ny),gl.useProgram(simp),tik++,count%TT==0){count=0;for(let e=0;e<Nrand;e++)rand[e]=.7*rnd()+.3*rand[e];setrand(),gl.uniform1fv(loc_rand,rand)}if(0==dxycount){dx=dxc-dxp,dy=dyc-dyp,dz=dzc-dzp,zc*=1+2*dz,xc-=(.5+(2*dx-.5)*(1+2*dz))*zc,yc-=(.5+(2*dy-.5)*(1+2*dz))*zc,kp[0]+=dx/3,kp[1]+=dy/3;let e=count/TT*2;e<1?(kp[18]=6*e*(1-e)*Math.exp(-e),kp[19]=0):(e-=1,kp[18]=0,kp[19]=6*e*(1-e)*Math.exp(-e)),kp[4]=dtt*(1-count/TT)*(1-count/TT),kp[15]*=Math.exp(dx/3),kp[16]*=Math.exp(dy/3)}gl.uniform1fv(loc_kp,kp),0==dx&&0==dy&&0==dz||dxycount++,gl.uniform3fv(loc_dxy,[dx,dy,dz]),gl.uniform3fv(loc_rc,[xc,yc,zc]),gl.uniform1f(loc_t,time),gl.uniform2f(loc_L,Lx,Ly),gl.uniform2f(loc_res,Nx,Ny);for(let e=0;e<2;e++)flip=!flip,gl.bindFramebuffer(gl.FRAMEBUFFER,flip?fbB:fbA),gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,flip?texA:texB),gl.activeTexture(gl.TEXTURE1),gl.bindTexture(gl.TEXTURE_2D,tex00),gl.drawArrays(gl.TRIANGLES,0,6);gl.viewport((C.width-Lx)/2,(C.height-Ly)/2,Lx,Ly),gl.useProgram(colp),gl.uniform1f(loc_tc,time),gl.uniform2f(loc_Lc,Lx,Ly),gl.uniform2f(loc_resc,Nx,Ny),gl.uniform3fv(loc_dxyc,[dx,dy,dz]),gl.uniform3fv(loc_rcc,[xc,yc,zc]),dxycount>=1&&(dxycount=0,dx=0,dy=0,dz=0,dxp=dxc,dyp=dyc,dzp=dzc),gl.bindFramebuffer(gl.FRAMEBUFFER,null),gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,flip?texB:texA),gl.activeTexture(gl.TEXTURE1),gl.bindTexture(gl.TEXTURE_2D,flip?texA:texB),gl.activeTexture(gl.TEXTURE2),gl.bindTexture(gl.TEXTURE_2D,texC),gl.activeTexture(gl.TEXTURE3),gl.bindTexture(gl.TEXTURE_2D,tex00),0==dz&&gl.drawArrays(gl.TRIANGLES,0,6)}prevt=time-(time-prevt)%dtime}if(1==savescr&&(savescr=2,render()),2==savescr){savescr=0;var e=document.createElement("canvas");e.width=Lx,e.height=Ly;var l=e.getContext("2d");l.setTransform(1,0,0,-1,0,gl.height),l.drawImage(C,-(C.width-Lx)/2,-(C.height-Ly)/2),e.toBlob((e=>{saveBlob(e,`cathedral_study-${tokenData.tokenId}.png`)}))}requestAnimationFrame(render)}const saveBlob=function(){const e=document.createElement("a");return document.body.appendChild(e),e.style.display="none",function(l,r){const a=window.URL.createObjectURL(l);e.href=a,e.download=r,e.click()}}();let tid=0,savescr=0;onkeyup=e=>(" "==e.key&&(running=!running),window!==window.parent?(65==e.keyCode&&(dxc-=.01),68==e.keyCode&&(dxc+=.01),87==e.keyCode&&(dyc+=.01),83==e.keyCode&&(dyc-=.01)):(37==e.keyCode&&(dxc-=.01),39==e.keyCode&&(dxc+=.01),38==e.keyCode&&(dyc+=.01),40==e.keyCode&&(dyc-=.01)),88==e.keyCode&&(dzc-=.03),90==e.keyCode&&(dzc=Math.min(0,dzc+.03)),70==e.keyCode&&(f1=(f1+1)%2,resize_render()),80==e.keyCode&&(savescr=1),!1);const delta=6;let startx,starty,startdist,mousedown=0;gl.canvas.addEventListener("dblclick",(function(e){running=!running})),resize_render();