(function(){ 'use strict';var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},d="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this;function ba(){ba=function(){};d.Symbol||(d.Symbol=ca)}var ca=function(){var a=0;return function(b){return"jscomp_symbol_"+(b||"")+a++}}(); function da(){ba();var a=d.Symbol.iterator;a||(a=d.Symbol.iterator=d.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return fa(this)}});da=function(){}}function fa(a){var b=0;return ha(function(){return bc&&(c=Math.max(0,b+c));if(null==e||e>b)e=b;e=Number(e);0>e&&(e=Math.max(0,b+e));for(c=Number(c||0);c1.)return vec2(0,log(z+sqrt(z*z-1.)));\nelse return vec2(pi, -log(-z+sqrt(z*z-1.)));\n}\n", arcsinc:"vec2 arcsinc(vec2 a){\nvec2 t2=multc(a,negc(a));\nvec2 tmp=sqrtc(addc(vec2(1.0,0.0),t2));\nvec2 tmp1=addc(multc(a,vec2(0.0,1.0)),tmp);\nvec2 erg=multc(logc(tmp1),vec2(0.0,-1.0));\nreturn erg;\n}\n",arcsinf:"vec2 arcsinf(float z){\nif(abs(z)<=1.)return vec2(asin(z),0.);\nelse if(z>1.)return vec2(pi*.5, -log(z+sqrt(z*z-1.)));\nelse return vec2(-pi*.5,log(-z+sqrt(z*z-1.)));\n}\n",arctan2c:"\n\n\n\nvec2 arctan2c(vec2 x,vec2 y){\nvec2 r=logc(divc(x+vec2(-y.y,y.x),sqrtc(multc(x,x)+multc(y,y))));\nreturn vec2(r.y, -r.x);\n}\n", arctan2cvec2:"vec2 arctan2cvec2(cvec2 v){\nreturn arctan2c(v.real,v.imag);\n}\n",arctan2vec2:"float arctan2vec2(vec2 v){\nreturn atan(v.y,v.x);\n}\n",arctanc:"vec2 arctanc(vec2 a){\nvec2 t1=logc(addc(multc(a,vec2(0.0,-1.0)),vec2(1.0,0.0)));\nvec2 t2=logc(addc(multc(a,vec2(0.0,1.0)),vec2(1.0,0.0)));\nvec2 erg=multc(subc(t1,t2),vec2(0.0,0.5));\nreturn erg;\n}\n",blue:"vec3 blue(float f)\n{\nreturn vec3(0.,0.,clamp(f,0.,1.));\n}\n",cimag:"float imagc(vec2 a){\nreturn a.y;\n}\n",conjugate:"vec2 conjugate(vec2 a){\nreturn vec2(a.x, -a.y);\n}\n", copytexture_f:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D sampler;\nvarying vec2 cgl_pixel;\n\nvoid main(void){\ngl_FragColor=texture2D(sampler,cgl_pixel);\n}\n",copytexture_v:"attribute vec3 aPos;\nattribute vec2 aTexCoord;\nvarying vec2 cgl_pixel;\n\nvoid main(void){\ngl_Position=vec4(aPos,1.);\ncgl_pixel=aTexCoord;\n}\n",cosc:"vec2 cosc(vec2 a){\n\nfloat n=exp(a.y);\nfloat imag1=n*sin(-a.x);\nfloat real1=n*cos(-a.x);\nn=exp(-a.y);\nfloat imag2=n*sin(a.x);\nfloat real2=n*cos(a.x);\nfloat i= (imag1+imag2) /2.0;\nfloat r= (real1+real2) /2.0;\n\nreturn vec2(r,i);\n}\n", creal:"float realc(vec2 a){\nreturn a.x;\n}\n",dehomogenize:"vec2 dehomogenize(vec3 z){\nreturn vec2(z.x,z.y)/z.z;\n}\n",dehomogenizex:"float dehomogenizex(vec3 z){\nreturn z.x/z.z;\n}\n",dehomogenizey:"float dehomogenizey(vec3 z){\nreturn z.y/z.z;\n}\n",det2:"float det2(mat2 a){\nreturn a[0][0]*a[1][1] -a[0][1]*a[1][0];\n}\n",det3:"float det3(mat3 a){\nreturn dot(cross(a[0],a[1]),a[2]);\n}\n",det3v:"float det3v(vec3 a,vec3 b,vec3 c){\nreturn dot(cross(a,b),c);\n}\n",det4:"float det4(mat4 a){\nfloat s00=a[0][0]*a[1][1] -a[0][1]*a[1][0],\ns01=a[0][0]*a[1][2] -a[0][2]*a[1][0],\ns02=a[0][0]*a[1][3] -a[0][3]*a[1][0],\ns03=a[0][1]*a[1][2] -a[0][2]*a[1][1],\ns04=a[0][1]*a[1][3] -a[0][3]*a[1][1],\ns05=a[0][2]*a[1][3] -a[0][3]*a[1][2],\ns06=a[2][0]*a[3][1] -a[2][1]*a[3][0],\ns07=a[2][0]*a[3][2] -a[2][2]*a[3][0],\ns08=a[2][0]*a[3][3] -a[2][3]*a[3][0],\ns09=a[2][1]*a[3][2] -a[2][2]*a[3][1],\ns10=a[2][1]*a[3][3] -a[2][3]*a[3][1],\ns11=a[2][2]*a[3][3] -a[2][3]*a[3][2];\nreturn s00*s11-s01*s10+s02*s09+s03*s08-s04*s07+s05*s06;\n}\n", divc:"vec2 divc(vec2 a,vec2 b){\nreturn vec2(dot(a,b),dot(a,vec2(-b.y,b.x)))/dot(b,b);\n}\n",divfc:"vec2 divfc(float a,vec2 b){\nreturn a*vec2(b.x,-b.y)/dot(b,b);\n}\n",expc:"vec2 expc(vec2 a){\nfloat n=exp(a.x);\nfloat r=n*cos(a.y);\nfloat i=n*sin(a.y);\nreturn vec2(r,i);\n}\n",float2color:"vec4 float2color(float f)\n{\nreturn vec4(f,f,f,1.);\n}\n",gray:"vec3 gray(float f)\n{\nf=clamp(f,0.,1.);\nreturn vec3(f,f,f);\n}\n",green:"vec3 green(float f)\n{\nreturn vec3(0.,clamp(f,0.,1.),0.);\n}\n",hsv2rgb:"vec3 hsv2rgb(vec3 c)\n{\nvec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);\nvec3 p=abs(fract(c.xxx+K.xyz) *6.0-K.www);\nreturn c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);\n}\n", hue:"vec3 hue(float a){\nreturn hsv2rgb(vec3(a,1.,1.));\n}\n",imagc:"float imagc(vec2 a){\nreturn a.y;\n}\n",invc:"vec2 invc(vec2 a){\nfloat n=a.x*a.x+a.y*a.y;\nreturn vec2(a.x/n,-a.y/n);\n}\n",logc:"vec2 logc(vec2 a){\nfloat re=a.x;\nfloat im=a.y;\nfloat s=sqrt(re*re+im*im);\nfloat i=im;\nfloat imag=atan(im,re);\nif(i<0.0){\nimag+= (2.0*pi);\n}\nif(i==0.0&&re<0.0){\nimag=pi;\n}\nif(imag>pi){\nimag-= (2.0*pi);\n};\nfloat real=log(s);\n\nreturn vec2(real,imag);\n}\n",logr:"vec2 logr(float a){\nif(a>=0.)return vec2(log(a),0);\nelse return vec2(log(-a),pi);\n}\n", mat2complex:"mat4 mat2complex(mat2 a)\n{\nreturn mat4(\nvec4(a[0][0],0,a[0][1],0),\nvec4(0,a[0][0],0,a[0][1]),\nvec4(a[1][0],0,a[1][1],0),\nvec4(0,a[1][0],0,a[1][1])\n);\n}\n",multc:"vec2 multc(vec2 a,vec2 b){\nreturn vec2(dot(a,vec2(b.x,-b.y)),dot(a,b.yx));\n}\n",negc:"vec2 negc(vec2 a){\nreturn vec2(-a.x,-a.y);\n}\n",powc:"vec2 powc(vec2 a,vec2 b){\nreturn(b.x==0. &&b.y==0.) ?vec2(1.,0.) : ((a.x==0. &&a.y==0.) ?vec2(0.) :expc(multc(logc(a),b)));\n}\n",powi:"float powi(float a,int b){\nif(mod(float(b),2.) < .5)\nreturn pow(abs(a),float(b));\nelse\nreturn sign(a)*pow(abs(a),float(b));\n}\n", random:"uniform float rnd_;\n\nfloat last_rnd= .1231;\nfloat random(){\nfloat a=fract(132422.21*sin(dot(plain_pixel,343433.671228*vec2(.176574+last_rnd, .1131+rnd_))));\nfloat b=fract(last_rnd*2321.2312*sin(dot(plain_pixel+vec2(rnd_,last_rnd),plain_pixel) *43758.5453));\nlast_rnd=fract(rnd_ +last_rnd+a+b);\nreturn last_rnd;\n}\n",randomnormal:"float randomnormal(){\nreturn sqrt(-2. *log(random())) *cos(6.283185307179586*random());\n}\n",realc:"float realc(vec2 a){\nreturn a.x;\n}\n",red:"vec3 red(float f)\n{\nreturn vec3(clamp(f,0.,1.),0.,0.);\n}\n", rgb2hsv:"vec3 rgb2hsv(vec3 c)\n{\nvec4 K=vec4(0.0, -1.0/3.0,2.0/3.0, -1.0);\nvec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));\nvec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));\n\nfloat d=q.x-min(q.w,q.y);\nfloat e=1.0e-10;\nreturn vec3(abs(q.z+ (q.w-q.y) / (6.0*d+e)),d/ (q.x+e),q.x);\n}\n",sinc:"\n\nvec2 sinc(vec2 a){\n\nfloat n=exp(a.y);\nfloat imag1=n*sin(-a.x);\nfloat real1=n*cos(-a.x);\nn=exp(-a.y);\nfloat imag2=n*sin(a.x);\nfloat real2=n*cos(a.x);\nfloat r= -(imag1-imag2) /2.0;\nfloat i= (real1-real2) /2.0;\n\nreturn vec2(r,i);\n}\n", sqrtc:"vec2 sqrtc(vec2 a){\nreturn expc(multc(logc(a),vec2(0.5,0.0)));\n}\n",sqrtf:"vec2 sqrtf(float a){\nif(a>=0.)return vec2(sqrt(a),0.);\nelse return vec2(0.,sqrt(-a));\n}\n",standardFragmentHeader:"#ifdef GL_ES\nprecision highp float;\nprecision highp int;\n#endif\n\n#define pi 3.141592653589793\n\nvarying vec2 cgl_pixel;\nvarying vec2 plain_pixel;\n",subc:"vec2 subc(vec2 a,vec2 b){\nreturn a-b;\n}\n",subpoints:"vec2 subpoints(vec3 a,vec3 b){\nreturn dehomogenize(a) -dehomogenize(b);\n}\n",tanc:"vec2 tanc(vec2 a){\nvec2 s=sinc(a);\nvec2 c=cosc(a);\nreturn divc(s,c);\n}\n", vec2complex:"vec4 vec2complex(vec2 a)\n{\nreturn vec4(a.x,0.,a.y,0);\n}\n",vshader:"attribute vec3 aPos;\nattribute vec2 aTexCoord;\nvarying vec2 cgl_pixel;\nvarying vec2 plain_pixel;\nuniform mat3 transformMatrix;\nvoid main(void){\ngl_Position=vec4(aPos,1.);\nplain_pixel=aTexCoord;\nvec3 r=transformMatrix*vec3(plain_pixel,1);\ncgl_pixel=r.xy/r.z;\n}\n"};var la=!1,g,m,n,ma,r,t,w=!1,na,x=!1,oa=!1,pa=1; function qa(){function a(c){g.removeEventListener("webglcontextcreationerror",a,!1);c.statusMessage&&(b=c.statusMessage)}if(!la){g=document.createElement("canvas");g.id="glcanvas";g.style.display="none";g.width=g.height=0;document.body.appendChild(g);m=document.createElement("canvas");m.id="tmpcanvas";m.style.display="none";m.width=m.height=0;document.body.appendChild(m);n=document.createElement("canvas");n.id="dummycanvas";n.style.display="none";n.width=n.height=1;document.body.appendChild(n);ma= {ctype:"image",value:{img:n,width:1,height:1,ready:!0,live:!1,generation:0,whenReady:function(){}}};var b="Unknown";g.addEventListener("webglcontextcreationerror",a,!1);var c={};"undefined"!==typeof CindyJS._pluginRegistry.CindyXR&&(c.xrCompatible=!0);(r=g.getContext("webgl",c))||(r=g.getContext("experimental-webgl",c));if(!r)throw new ta("Could not obtain a WebGL context.\nReason: "+b);ua.gl=r;g.removeEventListener("webglcontextcreationerror",a,!1);oa||(x=r.getExtension("OES_texture_float")&&r.getExtension("OES_texture_float_linear"), x||(console.error("Your browser does not suppert OES_texture_float, trying OES_texture_half_float..."),(w=(na=r.getExtension("OES_texture_half_float"))&&r.getExtension("OES_texture_half_float_linear"))||console.error("Your browser does not suppert OES_texture_half_float, will use 8-bit textures.")),navigator.userAgent.match(/(iPad|iPhone)/i)&&(console.log("You are using an iPhone/iPad."),x=w=!1,r.getExtension("OES_texture_half_float")&&r.getExtension("OES_texture_half_float_linear")&&r.getExtension("EXT_color_buffer_half_float")? w=!0:console.error("Your browser does not suppert writing to half_float textures, we will use 8-bit textures.")));la=!0}};function va(a){if(null==a||"object"!=typeof a)return a;if(a instanceof Array){var b=[];for(var c=0,e=a.length;cMath.abs(a.imag)?(a.real|0)===a.real?z.u:z.f:z.h;if("list"===a.ctype){var b=a.value;if(3===b.length){if("Point"===a.usage)return z.w;if("Line"===a.usage)return z.line}if(0g.width||b>g.height)g.width=Math.ceil(a),g.height=Math.ceil(b)}function Ba(a,b){a.instance.ha||(a.instance.ha={});a.instance.ha[b]||(a.instance.ha[b]=a.instance.parse(b));a=a.evaluate(a.instance.ha[b]);return a.ctype&&"number"===a.ctype?a.value.real:0}function Ca(a){return{x:Ba(a,"(screenbounds()_4).x"),y:Ba(a,"(screenbounds()_4).y")}} function Da(a){return{x:Ba(a,"(screenbounds()_3).x"),y:Ba(a,"(screenbounds()_3).y")}}var Ea=new Float32Array(1),Fa=new Int32Array(Ea.buffer);function Ga(a){Ea[0]=a;a=Fa[0];var b=a>>16&32768,c=(a&2147483647)+4096;if(1199570944<=c)return 1199570944<=(a&2147483647)?2139095040>c?b|31744:b|31744|(a&8388607)>>13:b|31743;if(947912704<=c)return b|c-939524096>>13;if(855638016>c)return b;c=(a&2147483647)>>23;return b|(a&8388607|8388608)+(8388608>>>c-102)>>126-c} function Ha(a){if(x)return new Float32Array(a);if(w){for(var b=new Uint16Array(a.length),c=0;c>10,h=e&1023;b.push((e>>15?-1:1)*(f?31===f?h?NaN:Infinity:Math.pow(2,f-15)*(1+h/1024):h/1024*6.103515625E-5))}else b.push(a[c]/255);return b}function La(a){for(var b=1;be;e++)r.bindTexture(r.TEXTURE_2D,b.textures[e]),c.mipmap?r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,c.interpolate?r.LINEAR_MIPMAP_LINEAR:r.NEAREST_MIPMAP_LINEAR): r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,c.interpolate?r.LINEAR:r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,c.interpolate?r.LINEAR:r.NEAREST),c.clamptoedge&&(r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE))}}else a.canvaswrapper=new Oa(a.ready?a:ma,c||{interpolate:!0,mipmap:!1,repeat:!1,clamptoedge:!1}),a.ready||console.log("Image is not ready yet.");return a.canvaswrapper} function Oa(a,b){this.canvas=a;this.j=b;this.L=a.width;this.G=a.height;Pa(this);this.it=0;this.textures=[];this.X=[];this.generation=-1;this.bindTexture();a.drawTo=this.drawTo.bind(this);a.readPixels=this.la.bind(this);a.cdyUpdate=this.pa.bind(this);a=Ia(this.P*this.M*4);for(var c=0;2>c;c++)this.textures[c]=r.createTexture(),r.bindTexture(r.TEXTURE_2D,this.textures[c]),r.pixelStorei(r.UNPACK_ALIGNMENT,1),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,this.P,this.M,0,r.RGBA,Ja(),a),b.mipmap?r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MIN_FILTER,b.interpolate?r.LINEAR_MIPMAP_LINEAR:r.NEAREST_MIPMAP_LINEAR):r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,b.interpolate?r.LINEAR:r.NEAREST),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,b.interpolate?r.LINEAR:r.NEAREST),b.clamptoedge&&(r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),this.X[c]=r.createFramebuffer(),r.bindFramebuffer(r.FRAMEBUFFER,this.X[c]),r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0,r.TEXTURE_2D,this.textures[c],0);this.B=new Qa(ka.copytexture_v,ka.copytexture_f);b=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,b);b=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]);a=r.getAttribLocation(this.B.handle,"aPos");r.enableVertexAttribArray(a);c=r.getAttribLocation(this.B.handle,"aTexCoord");r.enableVertexAttribArray(c);var e=new Float32Array([0,0,1,0,0,1,1,1]),f=b.byteLength;r.bufferData(r.ARRAY_BUFFER,f+e.byteLength,r.STATIC_DRAW);r.bufferSubData(r.ARRAY_BUFFER,0, b);r.bufferSubData(r.ARRAY_BUFFER,f,e);r.vertexAttribPointer(a,3,r.FLOAT,!1,0,0);r.vertexAttribPointer(c,2,r.FLOAT,!1,0,f)}function Pa(a){a.j.clamptoedge&&a.j.interpolate&&!a.j.repeat&&!a.j.mipmap?(a.P=a.L,a.M=a.G):(a.P=La(a.L+a.L/2*(a.j.mipmap&&a.j.repeat)),a.M=La(a.G+a.G/2*(a.j.mipmap&&a.j.repeat)))}Oa.prototype.bindTexture=function(){r.bindTexture(r.TEXTURE_2D,this.textures[this.it])};Oa.prototype.bindFramebuffer=function(){r.bindFramebuffer(r.FRAMEBUFFER,this.X[this.it^1]);this.it^=1}; Oa.prototype.pa=function(){if(this.canvas.img.hasOwnProperty("getContext"))var a=this.canvas.img.getContext("2d");else this.canvas.img=document.createElement("canvas"),this.canvas.img.style.display="none",this.canvas.img.width=this.L,this.canvas.img.height=this.G,a=this.canvas.img.getContext("2d");a.clearRect(0,0,this.L,this.G);this.drawTo(a,0,0);this.canvas.img.generation++}; Oa.prototype.reloadIfRequired=function(){if(!(this.canvas.live&&(this.canvas.img.webkitDecodedFrameCount||this.canvas.img.j)&&this.fa>=(this.canvas.img.webkitDecodedFrameCount||this.canvas.img.j)||!this.canvas.live&&(!this.canvas.ready||this.generation>=this.canvas.generation))){if(this.L!=this.canvas.width||this.G!=this.canvas.height){this.L=this.canvas.width;this.G=this.canvas.height;Pa(this);for(var a=Ia(this.P*this.M*4),b=0;2>b;b++)r.bindTexture(r.TEXTURE_2D,this.textures[b]),r.texImage2D(r.TEXTURE_2D, 0,r.RGBA,this.P,this.M,0,r.RGBA,Ja(),a)}this.bindTexture();r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1);this.j.repeat?(m.width=this.P,m.height=this.M,a=m.getContext("2d"),a.drawImage(this.canvas.img,0,this.M-this.G),a.drawImage(this.canvas.img,this.L,this.M-this.G),a.drawImage(this.canvas.img,0,this.M-2*this.G),a.drawImage(this.canvas.img,this.L,this.M-2*this.G),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,Ja(),m)):r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,Ja(),this.canvas.img);this.j.mipmap&&r.generateMipmap(r.TEXTURE_2D); r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,0);this.generation=this.canvas.generation;this.fa=Math.min(this.fa+1,this.canvas.img.webkitDecodedFrameCount||this.canvas.img.j)}}; Oa.prototype.drawTo=function(a,b,c){Aa(this.P,this.M);r.viewport(0,0,this.P,this.M);this.B.use(r);r.activeTexture(r.TEXTURE0);r.bindTexture(r.TEXTURE_2D,this.textures[this.it]);this.B.uniform.sampler([0]);r.bindFramebuffer(r.FRAMEBUFFER,null);r.drawArrays(r.TRIANGLE_STRIP,0,4);r.flush();a.drawImage(g,0,g.height-this.G,this.L,this.G,b,c,this.L,this.G)}; Oa.prototype.la=function(a,b,c,e){r.bindFramebuffer(r.FRAMEBUFFER,this.X[this.it]);r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,this.textures[this.it],0);var f=Ia(c*e*4);r.readPixels(a,this.G-b-e,c,e,r.RGBA,Ja(),f);a=[];for(--e;0<=e;e--)a=a.concat(Ka(f.slice(e*c*4,(e+1)*c*4)));return a};function Ra(a,b){this.C=a;this.X=b;Sa(this)} function Sa(a){var b=Ta(new Ua(a.C),a.X);a.B=b.D;a.N=b.N;a.ea=b.ea;a.fa=ka.standardFragmentHeader+b.code;a.la=ka.vshader;a.j=new Qa(a.la,a.fa);b=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,b);b=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]);var c=r.getAttribLocation(a.j.handle,"aPos");r.enableVertexAttribArray(c);a=r.getAttribLocation(a.j.handle,"aTexCoord");r.enableVertexAttribArray(a);var e=new Float32Array([0,0,1,0,0,1,1,1]),f=b.byteLength;r.bufferData(r.ARRAY_BUFFER,f+e.byteLength,r.STATIC_DRAW); r.bufferSubData(r.ARRAY_BUFFER,0,b);r.bufferSubData(r.ARRAY_BUFFER,f,e);r.vertexAttribPointer(c,3,r.FLOAT,!1,0,0);r.vertexAttribPointer(a,2,r.FLOAT,!1,0,f)}function Va(a,b,c,e){b=[c.x-b.x,e.x-b.x,b.x,c.y-b.y,e.y-b.y,b.y,0,0,1];a.j.uniform.hasOwnProperty("transformMatrix")&&a.j.uniform.transformMatrix([b[0],b[3],b[6],b[1],b[4],b[7],b[2],b[5],b[8]])} function Wa(a){function b(a,c,e){if(a)if("function"===typeof a)switch(c){case z.h:a([e.value.real,e.value.imag]);break;case z.A:e.value?a([1]):a([0]);break;case z.u:case z.f:a([e.value.real]);break;case z.w:case z.line:"geo"===e.ctype?a(e.value.homog.value.map(function(a){return a.value.real})):"list"===e.ctype&&2===e.value.length?a(e.value.map(function(a){return a.value.real}).concat([1])):"list"===e.ctype&&3===e.value.length&&a(e.value.map(function(a){return a.value.real}));break;default:if("list"=== c.type&&c.parameters===z.f)a(e.value.map(function(a){return a.value.real}));else if("list"===c.type&&"list"===c.parameters.type&&c.parameters.parameters===z.f){for(var f=[],h=0;ha.ea[b])return console.log(b+" is outdated; forcing rebuild."),!1;return!0};function ua(a){function b(b,e,f,h,k,l){if(!b.ka||b.ja=a?"bool int float complex voidt color point line coordinate2d image".split(" ")[a-1]:"list"===a.type?B(a.parameters)+"["+a.length+"]":"constant"===a.type?"const["+JSON.stringify(a.value.value)+"]":JSON.stringify(a)}function H(a){return"list"===a.type&&H(a.parameters)||F(a,z.f)}function I(a){return"list"===a.type&&I(a.parameters)||F(a,z.h)}function fb(a){return"constant"===a.type&&F(a,z.u)}function J(a){return"constant"===a.type?xa(a.value):a} function C(a){return"list"===a.type?C(a.parameters)+1:0}function Xa(a){return void 0!==a.parameters?Xa(a.parameters):a}function gb(a,b){return C(a)===C(b)&&(0===C(a)||a.length===b.length&&gb(a.parameters,b.parameters))}function K(a){return F(a,z.f)?z.f:F(a,z.h)?z.h:{type:"list",length:a.length,parameters:K(a.parameters)}}function hb(a){return F(a,z.h)?z.h:{type:"list",length:a.length,parameters:hb(a.parameters)}} function L(a){return"constant"===a.type&&L(J(a))||a===z.A||a===z.u||a===z.f||a===z.h||a===z.w||a===z.line||"list"===a.type&&a.parameters===z.f&&1<=a.length&&4>=a.length||"list"===a.type&&"list"===a.parameters.type&&a.parameters.parameters===z.f&&a.length===a.parameters.length&&2<=a.length&&4>=a.length}function ib(a){return-1!==[z.A,z.u,z.f,z.h].indexOf(a)} function jb(a,b){return a===b||"constant"===a.type&&"constant"===b.type&&wa(a.value,b.value)||"list"===a.type&&"list"===b.type&&a.length===b.length&&jb(a.parameters,b.parameters)} function F(a,b){return jb(a,b)?!0:a?ib(a)&&ib(b)?a<=b:"constant"===b.type?!1:"constant"===a.type?F(xa(a.value),b):b===z.K?F(a,z.h)||F(a,z.F)||F(a,z.w):b===z.w?F(a,z.J)||F(a,z.F):b===z.line?F(a,z.J):b===z.color?F(a,z.f)||"list"===a.type&&(3===a.length||4===a.length)&&F(a.parameters,z.f):"list"===a.type&&"list"===b.type&&a.length===b.length?F(a.parameters,b.parameters):!1:!1} function A(a,b){if(!a)return b;if(!b||jb(a,b))return a;"constant"===a.type&&(a=xa(a.value));"constant"===b.type&&(b=xa(b.value));return ib(a)&&ib(b)?Math.max(a,b):"list"===a.type&&"list"===b.type&&a.length===b.length&&(b=A(a.parameters,b.parameters))?{type:"list",length:a.length,parameters:b}:!1} function M(a){return function(b){var c={},e;for(e in a){var f=a[e];c.ca=f[0];if(b.length==c.ca.length&&b.every(function(a){return function(b,c){return F(b,a.ca[c])}}(c)))return{o:c.ca,s:f[1],l:f[2]};c={ca:c.ca}}return!1}} function kb(a){switch(a){case z.u:return M([[[z.A],z.u,N("int")]]);case z.f:return M([[[z.A],z.f,N("float")],[[z.u],z.f,N("float")]]);case z.h:return M([[[z.f],z.h,function(a){return"vec2("+a+", 0.)"}]]);case z.color:return M([[[z.f],z.color,O("float2color")],[[z.J],z.color,function(a){return"vec4("+a+",1.0)"}],[[z.O],z.color,P]]);case z.w:return M([[[z.F],z.w,function(a){return"vec3("+a+",1.0)"}],[[z.J],z.w,P]]);case z.line:return M([[[z.F],z.line,function(a){return"vec3("+a+",1.0)"}],[[z.J],z.line, P]]);case z.K:return M([[[z.h],z.K,P],[[z.F],z.K,P],[[z.w],z.K,O("dehomogenize")]]);default:if("list"===a.type)return function(b){var c=b[0],e=kb(a.parameters)([c.parameters]).l;return{o:b,s:a,l:function(b,h,k){return lb(a)(E(a.length).map(function(a){return e([Q(c,a)([b],h,k)],h,k)}),h,k)}}}}console.log("no inclusionfunction ->"+B(a)+" implemented yet; using identity...");return function(b){return{o:b,s:a,l:P}}} function R(a){a=J(a);switch(a){case z.A:return"bool";case z.u:return"int";case z.f:return"float";case z.h:case z.K:return"vec2";case z.T:return"void";case z.color:return"vec4";case z.w:case z.line:return"vec3"}if("list"===a.type&&a.parameters===z.f)return 1==a.length?"float":"vec"+a.length;if("list"===a.type&&a.parameters===z.h)return"cvec"+a.length;if("list"===a.type&&"list"===a.parameters.type&&a.length===a.parameters.length&&a.parameters.parameters===z.f)switch(a.length){case 2:return"mat2";case 3:return"mat3"; case 4:return"mat4"}if("list"===a.type)return"l"+a.length+"_"+R(a.parameters);console.error("No WebGL implementation for type "+B(a)+" found")}function mb(a,b){switch(b){case z.A:return R(b)+"("+a.value+")";case z.u:return""+(a.value.real|0);case z.f:return R(b)+"("+a.value.real+")";case z.h:return R(b)+"("+a.value.real+", "+a.value.imag+")";case z.color:return a=a.value.real,"vec4("+a+","+a+","+a+",1.)";default:console.error("Dont know how to paste values of Type "+B(b)+" yet.")}};var S={};function nb(a,b,c){if(!c.mark("includedfunctions",a)){for(var e in S[a])nb(S[a][e],b,c);c.add("includedfunctions",a,function(){return ka[a]})}}function O(a){return function(b,c,e){nb(a,c,e);return N(a)(b)}};function E(a){return Array.from(Array(a).keys())}function Ya(a){return 4>=a?[a]:5==a?[2,3]:Ya(a-4).concat([4])}function ob(a){var b=Xa(a),c=C(a);return 1==c&&b===z.f?Ya(a.length).map(function(a,b){return{type:z.aa(a),name:"a"+b}}):1<=c?E(a.length).map(function(b){return{type:a.parameters,name:"a"+b}}):[]}function pb(a,b){if(!L(a)){var c=R(a);b.add("structs",c,function(){return"struct "+c+" { "+ob(a).map(function(a){return pb(a.type,b)||R(a.type)+" "+a.name+";"}).join("")+"};"})}} function qb(a,b,c){if(!L(a)){var e=a.length,f=a.parameters.length;c.add("functions","mult"+e+"_"+f,function(){return R(z.aa(e))+" mult"+e+"_"+f+"("+R(a)+" a, "+R(z.aa(f))+" b){return "+rb(e)(E(e).map(function(a){return sb(f)(["a.a"+a,"b"],b,c)}),b,c)+";}"})}} function tb(a,b,c){if(!(L(a)&&1>=C(a))){var e=a.length,f="sum"+R(a);c.add("functions",f,function(){return R(a.parameters)+" "+f+"("+R(a)+" a){"+(R(a.parameters)+" res = "+ub(a.parameters,0)([],b,c)+";\n "+E(e).map(function(e){return"res = "+vb(a.parameters)(["res",Q(a,e)(["a",e],b,c)],b,c)+";"}).join("\n")+"\n return res;\n }")})}} function wb(a,b,c){var e=a.length,f=a.parameters.length;c.add("functions","multc"+e+"_"+f,function(){return R(z.da(e))+" multc"+e+"_"+f+"("+R(a)+" a, "+R(z.da(f))+" b){\n return cvec"+e+"("+E(e).map(function(a){return xb(f)(["a.a"+a,"b"],b,c)})+");\n }\n "})}function yb(a,b){2<=a&&4>=a||b.add("functions","dot"+a,function(){return"float dot"+a+"(vec"+a+" a, vec"+a+" b) {\n return "+Ya(a).map(function(a,b){return"dot(a.a"+b+",b.a"+b+")"}).join("+")+"; }\n "})} function zb(a,b){b.add("functions","cdot"+a,function(){return"vec2 cdot"+a+"(cvec"+a+" a, cvec"+a+" b) {\n return "+E(a).map(function(a){return"vec2(dot(a.a"+a+",vec2(b.a"+a+".x,-b.a"+a+".y)), dot(a.a"+a+",b.a"+a+".yx))"}).join("+\n")+";\n }\n "})} function Ab(a,b,c){var e="add"+R(a);c.add("functions",e,function(){return R(a)+" "+e+"("+R(a)+" a, "+R(a)+" b) {\n return "+R(a)+"("+ob(a).map(function(a){return R(a.type)+"("+vb(a.type)(["a."+a.name,"b."+a.name],b,c)+")"}).join(",")+");\n }"})} function Bb(a,b,c){var e="sub"+R(a);c.add("functions",e,function(){return R(a)+" "+e+"("+R(a)+" a, "+R(a)+" b) {\n return "+R(a)+"("+ob(a).map(function(a){return R(a.type)+"("+Cb(a.type)(["a."+a.name,"b."+a.name],b,c)+")"}).join(",")+");\n }"})}function Db(a,b,c){var e="scalarmult"+R(a);c.add("functions",e,function(){return R(a)+" "+e+"(float a, "+R(a)+" b) {\n return "+R(a)+"("+ob(a).map(function(a){return R(a.type)+"("+Eb(a.type)(["a","b."+a.name],b,c)+")"}).join(",")+");\n }"})} function Fb(a,b,c){nb("multc",b,c);var e="cscalarmult"+R(a);c.add("functions",e,function(){return R(a)+" "+e+"(vec2 a, "+R(a)+" b) {\n return "+R(a)+"("+ob(a).map(function(a){return""+Gb(a.type)(["a","b."+a.name],b,c)}).join(",")+");\n }"})} function Hb(a){if(a===z.h)return O("multc");if(L(a))return function(a){return T("*")([a[1],a[0]])};var b=Xa(a);if(F(b,z.f))return function(b,e,f){return qb(a,e,f)||"mult"+a.length+"_"+a.parameters.length+"("+b.join(",")+")"};if(b===z.h)return function(b,e,f){return wb(a,e,f)||"multc"+a.length+"_"+a.parameters.length+"("+b.join(",")+")"}}function sb(a){return function(b,c,e){return yb(a,e)||"dot"+(2<=a&&4>=a?"":a)+"("+b.join(",")+")"}} function xb(a){return function(b,c,e){return zb(a,e)||"cdot"+a+"("+b.join(",")+")"}}function vb(a){return L(a)?T("+"):function(b,c,e){return Ab(a,c,e)||"add"+R(a)+"("+b.join(",")+")"}}function Cb(a){return L(a)?T("-"):function(b,c,e){return Bb(a,c,e)||"sub"+R(a)+"("+b.join(",")+")"}}function Ib(a){return H(a)&&1==C(a)?function(b,c,e){return sb(a.length)([b[0],rb(a.length)(Array(a.length).fill("1."),c,e)],c,e)}:function(b,c,e){return tb(a,c,e)||"sum"+R(a)+"("+b.join(",")+")"}} function rb(a){if(2<=a&&4>=a)return function(b){return"vec"+a+"("+b.join(",")+")"};if(1==a)return function(a){return"float("+a.join(",")+")"};var b=0;return function(c,e,f){return pb(z.aa(a),f)||"vec"+a+"("+Ya(a).map(function(a){return"vec"+a+"("+E(a).map(function(){return++b&&c[b-1]}).join(",")+")"}).join(",")+")"}}function lb(a){var b=C(a);return L(a)?function(b){return R(a)+"("+b.join(",")+")"}:1==b&&a.parameters===z.f?rb(a.length):function(b,e,f){return pb(a,f)||R(a)+"("+b.join(",")+")"}} function Q(a,b){var c=Xa(a);return 1==C(a)&&c===z.f?Jb(a.length,b):L(a)?function(a){return"("+a[0]+")["+b+"]"}:function(a){return"("+a[0]+").a"+b}}function ub(a,b){return L(a)?function(){return R(a)+"(float("+b+"))"}:function(c,e,f){return lb(a)+"("+ob(a).map(function(a){return ub(a.type,b)(c,e,f)}).join(",")+")"}} function Jb(a,b){return function(c){if(1==a)return c[0];if(2<=a&&4>=a)return"("+c[0]+")["+b+"]";a:{var e=b;var f=Ya(a),h;for(h in f)if(f[h]<=e)e-=f[h];else{e={first:h,second:e};break a}console.error("Accessing index out of range");e=void 0}return"("+c[0]+").a"+e.first+"["+e.second+"]"}}function Eb(a){return L(a)?T("*"):function(b,c,e){return Db(a,c,e)||"scalarmult"+R(a)+"("+b.join(",")+")"}} function Gb(a){return a===z.h?O("multc"):function(b,c,e){return Fb(a,c,e)||"cscalarmult"+R(a)+"("+b.join(",")+")"}}function Kb(a,b,c){var e="reverse"+R(a);c.add("functions",e,function(){return R(a)+" "+e+"("+R(a)+" a){"+(R(a.parameters)+" m;\n")+E(Math.floor(a.length/2)).map(function(e){var f=Q(a,e)(["a",e],b,c);e=Q(a,a.length-1-e)(["a",a.length-1-e],b,c);return"m = "+f+"; "+f+" = "+e+"; "+e+" = m;"}).join("\n")+"return a;\n }"})} function Lb(a){return function(b,c,e){return Kb(a,c,e)||"reverse"+R(a)+"("+b.join(",")+")"}}function Mb(a,b,c){var e="max"+R(a);c.add("functions",e,function(){return R(a.parameters)+" "+e+"("+R(a)+" a){"+(R(a.parameters)+" m = "+Q(a,a.length-1)(["a",a.length-1],b,c)+";\n")+E(a.length-1).map(function(e){return"m = max(m,"+Q(a,e)(["a",e],b,c)+");"}).join("\n")+"return m;\n }"})}function Nb(a){return function(b,c,e){return Mb(a,c,e)||"max"+R(a)+"("+b.join(",")+")"}} function Ob(a,b,c){var e="min"+R(a);c.add("functions",e,function(){return R(a.parameters)+" "+e+"("+R(a)+" a){"+(R(a.parameters)+" m = "+Q(a,a.length-1)(["a",a.length-1],b,c)+";\n")+E(a.length-1).map(function(e){return"m = min(m,"+Q(a,e)(["a",e],b,c)+");"}).join("\n")+"return m;\n }"})}function Pb(a){return function(b,c,e){return Ob(a,c,e)||"min"+R(a)+"("+b.join(",")+")"}} function Qb(a,b,c){var e="transpose"+R(a),f=G(a.parameters.length,G(a.length,a.parameters.parameters));c.add("functions",e,function(){return R(f)+" "+e+"("+R(a)+" a){return "+lb(f)(E(f.length).map(function(e){return lb(f.parameters)(E(f.parameters.length).map(function(f){return Q(a.parameters,e)([Q(a,f)(["a",f],b,c),e],b,c)}),b,c)}),b,c)+";}"})}function Rb(a){return function(b,c,e){return Qb(a,c,e)||"transpose"+R(a)+"("+b.join(",")+")"}};function Sb(a){function b(a,e,k){if(1>=1;for(var h=a;hc&&(c=b.length+c),{o:a,s:b.parameters,l:Q(b,c)}):{o:a,s:b.parameters,l:function(){return console.error("try to access "+c+"-th Element of "+b.length+"-list "+JSON.stringify(a[0]))}}}return!1}; V.mult=function(a){var b=M([[[z.u,z.u],z.u,T("*")],[[z.f,z.f],z.f,T("*")],[[z.h,z.f],z.h,T("*")],[[z.f,z.h],z.h,T("*")],[[z.h,z.h],z.h,O("multc")],[[z.Y,z.Y],z.Y,U()],[[z.Z,z.Z],z.Z,U()],[[z.$,z.$],z.$,U()],[[z.Y,z.F],z.F,U()],[[z.Z,z.J],z.J,U()],[[z.$,z.O],z.O,U()],[[z.F,z.Y],z.F,U()],[[z.J,z.Z],z.J,U()],[[z.O,z.$],z.O,U()]])(a);if(b)return b;if(2!==a.length)return!1;b=a[0];var c=a[1];if([b,c].every(function(a){return"list"===a.type&&F(a.parameters,z.f)})&&b.length===c.length)return a=K(b),L(a)? {o:[a,a],s:z.f,l:N("dot")}:{o:[a,a],s:z.f,l:sb(b.length)};if([b,c].every(function(a){return"list"===a.type&&F(a.parameters,z.h)})&&b.length===c.length)return a=hb(b),{o:[a,a],s:z.h,l:xb(b.length)};if(H(b)&&2===C(b)&&H(c)&&1===C(c)&&b.parameters.length===c.length)return{o:[K(b),K(c)],s:z.aa(b.length),l:Hb(K(b))};if(I(b)&&2===C(b)&&I(c)&&1===C(c)&&b.parameters.length===c.length)return{o:[hb(b),hb(c)],s:z.da(b.length),l:Hb(hb(b))};for(b={H:0};2>b.H;b={V:b.V,H:b.H,ba:b.ba},b.H++){if(F(a[0^b.H],z.f)&& (H(a[1^b.H])||I(a[1^b.H])))return b.V=K(a[1^b.H]),{o:b.H?[b.V,z.f]:[z.f,b.V],s:b.V,l:function(a){return function(b,c,e){return Eb(a.V)([b[0^a.H],b[1^a.H]],c,e)}}(b)};if(F(a[0^b.H],z.h)&&I(a[1^b.H]))return b.ba=hb(a[1^b.H]),{o:b.H?[b.ba,z.h]:[z.h,b.ba],s:b.ba,l:function(a){return function(b,c,e){return Gb(a.ba)([b[0^a.H],b[1^a.H]],c,e)}}(b)}}};V["*"]=V.mult; V.div=function(a){var b=M([[[z.f,z.f],z.f,T("/")],[[z.f,z.h],z.h,O("divfc")],[[z.h,z.f],z.h,T("/")],[[z.h,z.h],z.h,O("divc")]])(a);return b?b:F(a[1],z.f)&&I(a[0])&&(a=K(a[0]),L(a))?{o:[a,z.f],s:a,l:T("/")}:!1};V["/"]=V.div;V.re=M([[[z.h],z.f,O("realc")]]);V.im=M([[[z.h],z.f,O("imagc")]]);V.floor=M([[[z.f],z.u,function(a){return"int(floor("+a+"))"}],[[z.h],z.h,N("floor")]]);V.round=M([[[z.f],z.u,function(a){return"int(floor("+a+"+.5))"}],[[z.h],z.h,function(a){return"floor("+a+"+vec2(.5))"}]]); V.ceil=M([[[z.f],z.u,function(a){return"int(ceil("+a+"))"}],[[z.h],z.h,N("ceil")]]);V.mod=M([[[z.u,z.u],z.u,function(a,b){return"int("+N("mod")("float("+a[0]+"), float("+a[1]+")",b)+")"}],[[z.f,z.f],z.f,N("mod")],[[z.h,z.h],z.h,O("mod")]]);V.random=M([[[],z.f,O("random")],[[z.f],z.f,function(a,b,c){return O("random")([],b,c)+"*"+a[0]}],[[z.h],z.h,function(a,b,c){return"vec2("+O("random")([],b,c)+","+O("random")([],b,c)+")*"+a[0]}]]); V.randomint=M([[[z.u],z.u,function(a,b,c){return"int(floor("+O("random")([],b,c)+"*float("+a[0]+")))"}],[[z.f],z.u,function(a,b,c){return"int(floor("+O("random")([],b,c)+"*floor("+a[0]+")))"}]]);V.randominteger=V.randomint;V.randombool=M([[[],z.A,function(a,b,c){return"("+O("random")([],b,c)+">.5)"}]]);V.randomnormal=M([[[],z.f,O("randomnormal")]]); V.arctan2=M([[[z.f,z.f],z.f,function(a){return"atan("+a[1]+", "+a[0]+")"}],[[z.h,z.h],z.h,O("arctan2c")],[[z.h],z.f,O("arctan2vec2")],[[z.F],z.f,O("arctan2vec2")],[[z.da(2)],z.h,O("arctan2cvec2")]]);["red","green","blue","gray","hue"].forEach(function(a){V[a]=M([[[z.f],z.J,O(a)]])});V.grey=V.gray;V.min=function(a){var b=M([[[z.f,z.f],z.f,N("min")]])(a);if(b)return b;if(1===a.length&&1===C(a[0])&&H(a[0]))return{o:a,s:a[0].parameters,l:Pb(a[0])}}; V.max=function(a){var b=M([[[z.u,z.u],z.u,N("max")],[[z.f,z.f],z.f,N("max")]])(a);if(b)return b;if(1===a.length&&1===C(a[0])&&H(a[0]))return{o:a,s:a[0].parameters,l:Nb(a[0])}};function Xb(a,b){if(!(1>=a))if(2==a)b.add("functions","raise2",function(){return"float raise2(float a) { return a*a; }"});else{Xb(2,b);var c=function(a,b){return 1==b?a:b&1?c(a,b-1)+"*a":"raise2("+c(a,b/2)+")"},e="raise"+a;b.add("functions",e,function(){return"float "+e+"(float a) { return "+c("a",a)+";}"})}} function Yb(a){return function(b,c,e){return 0==a?"1.":1==a?b[0]:Xb(a,e)||"raise"+a+"("+b[0]+")"}}V.pow=function(a){if(fb(a[1])&&F(a[0],z.f)){var b=Number(a[1].value.value.real);if(0<=b)return{o:[z.f,a[1]],s:z.f,l:Yb(b)}}return M([[[z.f,z.u],z.f,O("powi")],[[z.h,z.h],z.h,O("powc")]])(a)};V["^"]=V.pow;V.re=M([[[z.h],z.f,function(a){return"("+a+").x"}]]);V.conjugate=M([[[z.h],z.h,O("conjugate")]]);V.im=M([[[z.h],z.f,function(a){return"("+a+").y"}]]); V.genList=function(a){var b=a.length;if(0 < >= <= == !=".split(" ").forEach(function(a){V[a]=M([[[z.u,z.u],z.A,T(a)],[[z.f,z.f],z.A,T(a)]])});V["!"]=M([[[z.A],z.A,N("!")],[[z.T,z.A],z.A,function(a){return N("!")([a[1]])}]]);V.not=V["!"];V.imagergb=M([[[z.image,z.K],z.J,Zb],[[z.K,z.K,z.image,z.K],z.J,$b]]); V.imagergba=M([[[z.image,z.K],z.O,ac],[[z.K,z.K,z.image,z.K],z.O,bc]]);V.reverse=function(a){return 1===a.length&&"list"===a[0].type?{o:a,s:a[0],l:Lb(a[0])}:!1};V.sort=function(a){return 1===a.length&&1===C(a[0])&&H(a[0])?{o:a,s:a[0],l:Ub(a[0])}:!1};V.transpose=function(a){return 1===a.length&&2<=C(a[0])?{o:a,s:G(a[0].parameters.length,G(a[0].length,a[0].parameters.parameters)),l:Rb(a[0])}:!1};V.det=M([[[z.Y],z.f,O("det2")],[[z.Z],z.f,O("det3")],[[z.$],z.f,O("det4")],[[z.w,z.w,z.w],z.f,O("det3v")]]); Object.freeze(V);S.powc=["expc","multc","logc"];S.sqrtc=["expc","multc","logc"];S.arccosc=["multc","negc","sqrtc","addc","logc"];S.arcsinc=["multc","negc","sqrtc","addc","logc"];S.tanc=["sinc","cosc","divc"];S.arctanc=["logc","addc","multc","subc"];S.arctan2c=["logc","divc","sqrtc","multc"];S.arctan2vec2c=["arctan2c"];S.hue=["hsv2rgb"];S.randomnormal=["random"];S.subpoints=["dehomogenize"];S.addpoints=["dehomogenize"];Object.freeze(S);function Ua(a){this.i={};this.D={};this.j={};this.R=0;this.B={};this.C=a;this.N={}}Ua.prototype.add=function(a,b,c){this.mark(a,b);this.j[a].ia[b]||(this.j[a].ia[b]=c(),this.j[a].ga[b]=!0,this.j[a].order.push(b))};Ua.prototype.mark=function(a,b){this.j[a]||(this.j[a]={order:[],ga:{},ia:{}});var c=this.j[a].ga[b]||!1;this.j[a].ga[b]=!0;return c};function cc(a,b){return a.j[b]?a.j[b].order.map(function(c){return a.j[b].ia[c]}).join("\n"):"\n"} function W(a,b,c,e){if(jb(c,e))return b;if(F(c,e)){if("constant"===c.type)return mb(c.value,e);var f=kb(e)([c]);if(!f)return console.error("cannot find an implementation for "+B(c)+" -> "+B(e)+", using identity"),b;e=f.l;return e(W(a,b,c,f.o[0]),{},a)}console.error(B(c)+" is no subtype of "+B(e)+" (trying to cast the term "+b+")");return b}function X(a,b,c){a.i[b]||(a.i[b]={});a.i[b].S||(a.i[b].S=[]);a.i[b].v||(a.i[b].v=!1);a.hasOwnProperty("global")||(a.i[b].global=c)} function dc(a,b){var c=b.I;if(b.isuniform)return a.D[b.uvariable].type;if("variable"===b.ctype)return b=b.name,b=c[b]||b,a.i[b].v;if("function"===b.ctype&&a.B.hasOwnProperty(b.oper))return a.i[c[b.oper]].v;if("number"===b.ctype)return Za(b);if("void"===b.ctype)return z.T;if("field"===b.ctype){a=J(Y(a,b.obj));if(1==b.key.length){if("list"===a.type)return a.parameters;if(F(a,z.w))return z.f}else if("xy"==b.key&&F(a,z.w))return z.F;if(!a)return!1}else{if("string"===b.ctype)return z.image;if("function"=== b.ctype||"infix"===b.ctype){c=Array(b.args.length);for(var e=!0,f=0;fb.R)b.na=dc(a,b),b.R=a.R;return b.na} function ec(a,b,c){function e(a,b,c){var e={},f;for(f in a)e[f]=a[f];a=za();X(l,a,!1);h[a].v=c;h[a].oa=!0;e[b]=a;return e}function f(a,b,c,v){a.I=b;for(var p in a.args){var q=v||"repeat$2"===a.oper&&0==p||"repeat$3"===a.oper&&0==p||"_"===a.oper&&1==p,u=b;-1!==["repeat","forall","apply"].indexOf(y(a.oper))&&(1==p?u="repeat$2"===a.oper?e(b,"#",z.u):"repeat$3"===a.oper?e(b,a.args[1].name,z.u):"forall$2"===a.oper||"apply$2"===a.oper?e(b,"#",!1):"forall$3"===a.oper||"apply$3"===a.oper?e(b,a.args[1].name, !1):b:2==p&&(u=a.args[1].I));f(a.args[p],u,c,q)}"field"===a.ctype&&f(a.obj,b,c,v);"variable"===a.ctype&&(p=a.name,p=b[p]||p,v&&l.i[p]&&(l.i[p].W=!0));if("="===a.oper)v=a.args[0].name,v=b[v]||v,X(l,v,!0),h[v].S.push(a.args[1]);else if(a.oper&&"regional"===y(a.oper)&&"global"!=c)for(var ra in a.args){v=a.args[ra].name;var sa=za();b[v]=sa;k[c].i||(k[c].i=[]);k[c].i.push(sa);X(l,sa,!1)}else if("forall$2"===a.oper||"apply$2"===a.oper||"forall$3"===a.oper||"apply$3"===a.oper)h[2===a.args.length?a.args[1].I["#"]: a.args[2].I[a.args[1].name]].S.push({ctype:"infix",oper:"_",args:[a.args[0],{ctype:"number",value:{real:1,imag:0}}],I:a.args[0].I});else if("function"===a.ctype&&k.hasOwnProperty(a.oper)){c=a.oper;ra=c.replace("$","_");X(l,ra,!1);b[c]=ra;b={};for(sa in k[c].arglist)p=k[c].arglist[sa].name,q=ra+"_"+p,b[p]=q,X(l,q,!1),h[q].S.push(a.args[sa]);k[c].qa||(k[c].qa=!0,f(k[c].body,b,c,v),h[ra].S.push(k[c].body))}}var h=a.i,k=a.B,l=a;f(b,c,"global",!1)} function fc(a,b){function c(a){if(a.hasOwnProperty("dependsOnPixel"))return a.dependsOnPixel;if("variable"===a.ctype){var b=a.name;b=a.I[b]||b;return k[b]?a.dependsOnPixel=!0:a.dependsOnPixel=!1}b="random randomint randominteger randombool randomnormal verbatimglsl".split(" ");if("function"===a.ctype&&-1!==b.indexOf(y(a.oper)))return a.dependsOnPixel=!0;if("repeat$2"===a.oper||"forall$2"===a.oper||"apply$2"===a.oper)return c(a.args[1])?(k[a.args[1].I["#"]]=!0,a.dependsOnPixel=!0):a.dependsOnPixel= !1;if("repeat$3"===a.oper||"forall$3"===a.oper||"apply$3"===a.oper)return c(a.args[2])?(k[a.args[2].I[a.args[1].name]]=!0,a.args[1].dependsOnPixel=!0,a.dependsOnPixel=!0):a.dependsOnPixel=!1;for(var e in a.args)if(c(a.args[e]))return a.dependsOnPixel=!0;return"function"===a.ctype&&h.hasOwnProperty(a.oper)&&c(h[a.oper].body)?a.dependsOnPixel=!0:"field"===a.ctype?a.dependsOnPixel=c(a.obj):a.dependsOnPixel=!1}function e(a,b){if(c(a)){for(var f in a.args)e(a.args[f],b||"repeat$2"===a.oper&&0==f||"repeat$3"=== a.oper&&0==f||"_"===a.oper&&1==f);"field"===a.ctype&&e(a.obj,b);"function"===a.ctype&&h.hasOwnProperty(a.oper)&&(a=a.oper,q.hasOwnProperty(a)||(q[a]=!0,e(h[a].body,b)))}else if("boolean"!==a.ctype&&"number"!==a.ctype&&"void"!==a.ctype){".."===a.oper&&(b=!0);f=!1;var k;for(k in u)if(!f&&wa(a,u[k].U)){f=!0;var l=k}f||(l=za(),u[l]={U:a,type:!1,W:b});u[l].W=u[l].W||b;a.isuniform=!0;a.uvariable=l}}var f=a.i,h=a.B,k={cgl_pixel:!0,"cgl_pixel.x":!0,"cgl_pixel.y":!0},l;for(l in f)if(1<=f[l].S.length||f[l].oa)k[l]= !0;c(b);var q={"":!0},u=a.D;e(b,!1)}function gc(a,b){if("function"===b.ctype&&!a.B.hasOwnProperty(b.oper)&&null!==a.C.getMyfunction(b.oper)){var c=b.oper;a.B[c]=va(a.C.getMyfunction(c));gc(a,a.B[c].body)}for(var e in b.args)gc(a,b.args[e])} function hc(a,b){function c(a){var b={},c;for(c in a)b[c]=a[c];return b}function e(a,b){"repeat$2"===a.oper||"forall$2"===a.oper||"apply$2"===a.oper?(b=c(b),b["#"]=!0):"repeat$3"===a.oper||"forall$3"===a.oper||"apply$3"===a.oper?(b=c(b),b[a.args[1].name]=!0):"="===a.oper&&(b[a.args[0].name]=!0);for(var f in a.args)e(a.args[f],b);"field"===a.ctype&&e(a.obj,b);"variable"===a.ctype&&(a=a.name,b[a]||(h[a]=!0))}var f={},h={};e(b,{});X(a,"cgl_pixel",!1);a.i.cgl_pixel.v=z.F;if(1==Object.keys(h).length)f[Object.keys(h)[0]]= "cgl_pixel";else if(h["#"])f["#"]="cgl_pixel";else if(h.x&&h.y)X(a,"cgl_pixel.x",!1),a.i["cgl_pixel.x"].v=z.f,f.x="cgl_pixel.x",X(a,"cgl_pixel.y",!1),a.i["cgl_pixel.y"].v=z.f,f.y="cgl_pixel.y";else{b=[];for(var k in h)a.C.nada==a.C.evaluateAndVal({ctype:"variable",name:k})&&b.push(k);1==b.length?f[b[0]]="cgl_pixel":h.p?f.p="cgl_pixel":h.z&&(f.z="cgl_pixel")}"cgl_pixel"===f.z&&(a.i.cgl_pixel.v=z.h);return f} function Z(a,b,c){var e=Y(a,b);if(b.isuniform)return b=b.uvariable,c?{code:"",m:"constant"===e.type?mb(e.value,J(e)):b}:{code:""};if(";"===b.oper){e={m:""};for(var f="",h=b.args.length-1,k=h;0<=k;k--)"void"===b.args[k].ctype&&(h=k-1);for(k=0;k<=h;k++)e=Z(a,b.args[k],c&&k===h),f+=e.code;return c?{code:f,m:e.m}:{code:f}}if("constant"===e.type)return c?{m:mb(e.value,J(e)),code:""}:{code:""};if("="===b.oper)return e=Z(a,b.args[1],!0),b=Z(a,b.args[0],!0).m+" = "+W(a,e.m,Y(a,b.args[1]),Y(a,b.args[0])), c?{code:e.code,m:b}:{code:e.code+b+";\n"};if("repeat$2"===b.oper||"repeat$3"===b.oper){f=Z(a,b.args[0],!0);if("constant"!==Y(a,b.args[0]).type)return console.error("repeat possible only for fixed constant number in GLSL"),!1;e="repeat$2"===b.oper?b.args[1].I["#"]:b.args[2].I[b.args[1].name];f=Number(f.m);h="";if("constant"===a.i[e].v.type)for(k=1;k<=f;k++){a.i[e].v=eb(k);a.R++;var l=Z(a,b.args["repeat$2"===b.oper?1:2],k===f&&c);h+=l.code;if(k===f&&c)return{code:h,m:l.m}}else if(k="",l=Z(a,b.args["repeat$2"=== b.oper?1:2],c),b=Y(a,b.args["repeat$2"===b.oper?1:2]),c&&(k=za(),a.i[k]||(X(a,k,!0),a.i[k].v=b)),h=h+("for(int "+e+"=1; "+e+" <= "+f+"; "+e+"++) {\n")+l.code,c&&(h+=k+" = "+l.m+";\n"),h+="}\n",c)return{code:h,m:k};return{code:h}}if("forall$2"===b.oper||"forall$3"===b.oper||"apply$2"===b.oper||"apply$3"===b.oper){var q=Y(a,b.args[0]);if("list"!==q.type&&("constant"!==q.type||"list"!==q.value.ctype))return console.error(b.oper+" only possible for lists"),!1;f=q.length||q.value.value.length;k=2===b.args.length? b.args[1].I["#"]:b.args[2].I[b.args[1].name];var u=a.i[k].v,p=l="";c&&(p=za(),l+=R(e)+" "+p+";\n");"list"===e.type&&pb(e,a);if("constant"===a.i[k].v.type||"constant"===q.type)for(q=a.C.evaluateAndVal(b.args[0]),u=0;ua?0:1