0x027970bd…2b4asent to0x0a1bbd57…3676·#17,251,301·view on Etherscan
const _0x283a37=_0x3aa4;(function($,x){let e=_0x3aa4,a=$();for(;;)try{let o=-parseInt(e(632))/1*(parseInt(e(591))/2)+-parseInt(e(653))/3*(-parseInt(e(573))/4)+-parseInt(e(497))/5+-parseInt(e(677))/6+parseInt(e(583))/7*(-parseInt(e(498))/8)+parseInt(e(640))/9*(-parseInt(e(630))/10)+parseInt(e(683))/11*(parseInt(e(568))/12);if(510516===o)break;a.push(a.shift())}catch(t){a.push(a.shift())}})(_0x107a,510516),THREE[_0x283a37(681)]=function($,x,e){let a=_0x283a37;this[a(588)]=[],this[a(571)]=0;var o=new THREE[a(565)],t=new THREE[a(678)];t[a(684)].z=1;var r={passThruTexture:{value:null}},n=f(a(519),r),c=new THREE[a(579)](new THREE[a(641)](2,2),n);function l(e){let o=a;e[o(541)][o(547)]=o(566)+$[o(521)](1)+", "+x.toFixed(1)+" )"}function f($,x){let e=a;x=x||{};var o=new THREE[e(503)]({uniforms:x,vertexShader:e(624),fragmentShader:$});return l(o),o}o.add(c),this[a(525)]=function($,x,e){let o=a;var t={name:$,initialValueTexture:e,material:this[o(645)](x),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:THREE[o(589)],magFilter:THREE[o(589)]};return this[o(588)][o(673)](t),t},this[a(526)]=function($,x){$.dependencies=x},this[a(490)]=function(){let o=a;if(!e[o(543)][o(667)](o(687))&&!e.capabilities[o(516)])return o(586);if(0===e[o(575)][o(561)])return o(646);for(var t=0;t<this[o(588)][o(509)];t++){var r=this[o(588)][t];r[o(623)][0]=this[o(593)]($,x,r[o(686)],r.wrapT,r[o(619)],r.magFilter),r[o(623)][1]=this[o(593)]($,x,r.wrapS,r[o(680)],r[o(619)],r[o(597)]),this[o(661)](r.initialValueTexture,r[o(623)][0]),this[o(661)](r[o(524)],r[o(623)][1]);var n=r.material,c=n[o(607)];if(null!==r[o(533)])for(var l=0;l<r.dependencies[o(509)];l++){var f=r[o(533)][l];if(f[o(532)]!==r[o(532)]){for(var s=!1,d=0;d<this[o(588)][o(509)];d++)if(f[o(532)]===this[o(588)][d][o(532)]){s=!0;break}if(!s)return o(493)+r[o(532)]+o(659)+f.name}c[f[o(532)]]={value:null},n[o(633)]=o(495)+f.name+";\n"+n[o(633)]}}return this.currentTextureIndex=0,null},this[a(612)]=function(){let $=a;for(var x=this[$(571)],e=0===this.currentTextureIndex?1:0,o=0,t=this[$(588)][$(509)];o<t;o++){var r=this[$(588)][o];if(null!==r.dependencies)for(var n=r[$(656)][$(607)],c=0,l=r.dependencies[$(509)];c<l;c++){var f=r.dependencies[c];n[f[$(532)]][$(634)]=f[$(623)][x][$(578)]}this[$(643)](r.material,r[$(623)][e])}this[$(571)]=e},this[a(562)]=function($){return $.renderTargets[this[a(571)]]},this[a(601)]=function($){return $[a(623)][0===this.currentTextureIndex?1:0]},this[a(531)]=l,this[a(645)]=f,this[a(593)]=function(e,o,t,r,n,c){let l=a;return e=e||$,o=o||x,t=t||THREE.ClampToEdgeWrapping,r=r||THREE[l(536)],n=n||THREE[l(663)],c=c||THREE[l(663)],new THREE.WebGLRenderTarget(e,o,{wrapS:t,wrapT:r,minFilter:n,magFilter:c,format:THREE[l(528)],type:/(iPad|iPhone|iPod)/g.test(navigator.userAgent)?THREE[l(514)]:THREE[l(534)],stencilBuffer:!1,depthBuffer:!1})},this.createTexture=function(){var e=new Float32Array($*x*4);return new THREE[a(621)](e,$,x,THREE.RGBAFormat,THREE.FloatType)},this[a(661)]=function($,x){let e=a;r[e(636)].value=$,this.doRenderTarget(n,x),r[e(636)][e(634)]=null},this[a(643)]=function($,x){let r=a;var l=e[r(563)]();c[r(656)]=$,e[r(603)](x),e[r(655)](o,t),c.material=n,e[r(603)](l)}};let render_vertex=_0x283a37(522),render_fragment=_0x283a37(595),rdf=_0x283a37(559);const width=window[_0x283a37(560)],height=window[_0x283a37(606)],actual_width=Math[_0x283a37(638)](width),actual_height=Math.round(height),simulation_width=Math[_0x283a37(638)](actual_width/1.75),simulation_height=Math[_0x283a37(638)](actual_height/1.75),aspectRatio=window.innerWidth/window[_0x283a37(606)];class Random{constructor(){let $=_0x283a37;this[$(581)]=!1;let x=function(x){let e=$,a=parseInt(x[e(492)](0,8),16),o=parseInt(x.substring(8,16),16),t=parseInt(x[e(492)](16,24),16),r=parseInt(x[e(492)](24,32),16);return function(){a|=0,o|=0,t|=0;let $=(a+o|0)+(r|=0)|0;return r=r+1|0,a=o^o>>>9,o=t+(t<<3)|0,t=(t=t<<21|t>>>11)+$|0,($>>>0)/4294967296}};this[$(669)]=new x(tokenData[$(554)][$(492)](2,34)),this.prngB=new x(tokenData[$(554)][$(492)](34,66));for(let e=0;e<1e6;e+=2)this[$(669)](),this.prngB()}[_0x283a37(511)](){let $=_0x283a37;return this[$(581)]=!this.useA,this[$(581)]?this[$(669)]():this[$(527)]()}[_0x283a37(590)]($,x){return $+(x-$)*this[_0x283a37(511)]()}[_0x283a37(507)]($,x){return Math.floor(this[_0x283a37(590)]($,x+1))}random_bool($){return this[_0x283a37(511)]()<$}[_0x283a37(671)]($){let x=_0x283a37;return $[this[x(507)](0,$[x(509)]-1)]}}class SimplexNoise{constructor($){let x=_0x283a37;this[x(585)]=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],this.p=[];for(let e=0;e<256;e++)this.p[e]=Math[x(631)](256*$[x(511)]());this[x(672)]=Array(512);for(let a=0;a<512;a++)this[x(672)][a]=this.p[255&a]}dot($,x,e,a){return $[0]*x+$[1]*e+$[2]*a}[_0x283a37(650)]($,x,e){let a=_0x283a37,o=1/6,t,r,n,c,l=($+x+e)*(1/3),f=Math[a(631)]($+l),s=Math[a(631)](x+l),d=Math[a(631)](e+l),u=(f+s+d)*o,m=$-(f-u),_=x-(s-u),g=e-(d-u),v,h,p,b,C,F;m>=_?_>=g?(v=1,h=0,p=0,b=1,C=1,F=0):m>=g?(v=1,h=0,p=0,b=1,C=0,F=1):(v=0,h=0,p=1,b=1,C=0,F=1):_<g?(v=0,h=0,p=1,b=0,C=1,F=1):m<g?(v=0,h=1,p=0,b=0,C=1,F=1):(v=0,h=1,p=0,b=1,C=1,F=0);let T=m-v+o,w=_-h+o,y=g-p+o,k=m-b+2*o,S=_-C+2*o,D=g-F+2*o,A=m-1+3*o,P=_-1+3*o,E=g-1+3*o,B=255&f,V=255&s,z=255&d,W=this[a(672)][B+this.perm[V+this.perm[z]]]%12,I=this[a(672)][B+v+this[a(672)][V+h+this[a(672)][z+p]]]%12,K=this[a(672)][B+b+this[a(672)][V+C+this[a(672)][z+F]]]%12,U=this.perm[B+1+this[a(672)][V+1+this.perm[z+1]]]%12,G=.6-m*m-_*_-g*g;G<0?t=0:(G*=G,t=G*G*this[a(610)](this[a(585)][W],m,_,g));let M=.6-T*T-w*w-y*y;M<0?r=0:(M*=M,r=M*M*this.dot(this[a(585)][I],T,w,y));let Y=.6-k*k-S*S-D*D;Y<0?n=0:(Y*=Y,n=Y*Y*this[a(610)](this[a(585)][K],k,S,D));let H=.6-A*A-P*P-E*E;return H<0?c=0:(H*=H,c=H*H*this[a(610)](this[a(585)][U],A,P,E)),32*(t+r+n+c)}}let R=new Random;function getRandomArbitrary($,x){return R[_0x283a37(511)]()*(x-$)+$}let diffScaleArray=[.25,.375,.5],diffScale=selectFromArray(diffScaleArray),diffScaleVar=selectFromArray([diffScale-.125,diffScale-.125]),diffScaleArrayWide=[.5,.625,.75,.875,1],diffScaleWide=selectFromArray(diffScaleArrayWide),diffScaleVarWide=selectFromArray([0,diffScale-.125]),feedVar=getRandomArbitrary(0,.01),killVar=getRandomArbitrary(0,.01),randomRect,randomCirc;function selectFromArray($){let x=_0x283a37;return $[Math[x(631)](R[x(511)]()*$[x(509)])]}function selectNumberFromArray($){let x=_0x283a37;return Math[x(631)](R[x(511)]()*$[x(509)])}function getRandomBool($){return R[_0x283a37(511)]()<$}function hexToRgb($){let x=parseInt($[_0x283a37(639)](1),16),e=parseInt(x>>16&255),a=parseInt(x>>8&255),o=parseInt(255&x);return[e,a,o]}function getRandomBoolean(){return R[_0x283a37(511)]()>=.5}let palettes={Candy:{background:_0x283a37(598),accent:_0x283a37(598),substance:_0x283a37(599),c4:"#FFFF99",c5:"#FFFFFF"},Color2:{background:"#AE2029",accent:_0x283a37(508),substance:"#98D82D",c4:_0x283a37(644),c5:_0x283a37(644)},Color3:{background:_0x283a37(674),accent:_0x283a37(674),substance:_0x283a37(609),c4:"#EBFF32",c5:_0x283a37(609)},Color4:{background:_0x283a37(605),accent:_0x283a37(605),substance:_0x283a37(567),c4:"#FD97C4",c5:"#FD97C4"},Color5:{background:_0x283a37(587),accent:_0x283a37(587),substance:_0x283a37(596),c4:_0x283a37(596),c5:_0x283a37(596)},Color6:{background:_0x283a37(674),accent:"#F17401",substance:"#EBFF32",c4:"#EBFF32",c5:_0x283a37(609)},Yayoi:{background:"#D03A20",accent:_0x283a37(550),substance:_0x283a37(596),c4:"#FFFFFF",c5:"#FFFFFF"},Gabee:{background:_0x283a37(505),accent:_0x283a37(506),substance:_0x283a37(649),c4:_0x283a37(649),c5:_0x283a37(505)},CMKY:{background:"#ffffff",accent:(getRandomBoolean(),_0x283a37(545)),substance:_0x283a37(551),c4:_0x283a37(594),c5:_0x283a37(505)},RGB:{background:_0x283a37(587),accent:getRandomBoolean()?_0x283a37(491):"#00FF00",substance:_0x283a37(529),c4:_0x283a37(670),c5:_0x283a37(596)},"30Rack":{background:_0x283a37(572),accent:getRandomBoolean()?_0x283a37(572):_0x283a37(587),substance:_0x283a37(572),c4:_0x283a37(488),c5:_0x283a37(488)},Mohun:{background:"#FFFFF1",accent:getRandomBoolean()?_0x283a37(499):"#C7AFF0",substance:_0x283a37(542),c4:_0x283a37(523),c5:_0x283a37(540)},Q:{background:"#ffffff",accent:_0x283a37(505),substance:_0x283a37(538),c4:"#ffffff",c5:"#ffffff"},Skeleton:{background:_0x283a37(587),accent:_0x283a37(505),substance:_0x283a37(587),c4:_0x283a37(587),c5:_0x283a37(587)}};const defaultPallette={background:_0x283a37(529),accent:_0x283a37(491),substance:_0x283a37(670)},traitColorKeys=Object[_0x283a37(546)](palettes),randomColorIndex=R[_0x283a37(507)](0,traitColorKeys[_0x283a37(509)]-1),randomColorKey=traitColorKeys[randomColorIndex],randomColorTrait=palettes[randomColorKey],selectedColor={...defaultPallette,...randomColorTrait};console.log(_0x283a37(615),randomColorKey,_0x283a37(652),selectedColor);let main_trait={Zebra:{diffusion_scale:diffScaleWide,diffusion_scale_variation:diffScaleVarWide,feed:.05,feed_variation:0,warped:getRandomBool(.2),kill:.061,kill_variation:0,feed_modifier:-.015,kill_modifier:-.001,anisotropy:selectFromArray([.25,.75]),environment_noise_scale:750,field:!0,substance_color:hexToRgb(selectedColor[_0x283a37(614)]),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),simfrRate:64},Fingerprint:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.037,feed_variation:0,warped:getRandomBool(.2),kill:.06,feed_modifier:.009,kill_modifier:.003,kill_modifier:0,anisotropy:.5,environment_noise_scale:250,field:getRandomBool(.3),substance_color:hexToRgb(selectedColor[_0x283a37(614)]),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor[_0x283a37(608)]),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),simfrRate:64},"Dots and Dashes":{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.034,feed_variation:0,warped:getRandomBool(.2),kill:.0618,kill_variation:0,feed_modifier:-.004,kill_modifier:.0012,anisotropy:.5,environment_noise_scale:250,field:getRandomBool(.3),substance_color:hexToRgb(selectedColor[_0x283a37(614)]),middle_color:hexToRgb(selectedColor[_0x283a37(660)]),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),simfrRate:64},Yayoi:{diffusion_scale:diffScaleWide,diffusion_scale_variation:diffScaleVarWide,feed:.03,feed_variation:0,warped:getRandomBool(.2),kill:.062,kill_variation:0,feed_modifier:0,kill_modifier:-.0065,anisotropy:.5,environment_noise_scale:250,field:getRandomBool(.3),substance_color:hexToRgb(selectedColor[_0x283a37(614)]),middle_color:hexToRgb(selectedColor[_0x283a37(660)]),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),simfrRate:64},Spillage:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.035,feed_variation:.006,kill:.06,kill_variation:.006,feed_modifier:-.005,kill_modifier:-.0035,anisotropy:.5,environment_noise_scale:250,field:getRandomBool(.3),substance_color:hexToRgb(selectedColor[_0x283a37(614)]),middle_color:hexToRgb(selectedColor[_0x283a37(660)]),background_color:hexToRgb(selectedColor[_0x283a37(608)]),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),simfrRate:64},Coral:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.046,feed_variation:0,warped:getRandomBool(.2),kill:.063,kill_variation:0,feed_modifier:-.009,kill_modifier:-.003,anisotropy:.5,environment_noise_scale:250,field:getRandomBool(.3),substance_color:hexToRgb(selectedColor[_0x283a37(614)]),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor[_0x283a37(608)]),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),simfrRate:64},"Squiggle Maze":{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.03,feed_variation:0,warped:getRandomBool(.2),kill:.0565,kill_variation:0,feed_modifier:0,kill_modifier:.0065,anisotropy:.5,environment_noise_scale:250,field:getRandomBool(.3),substance_color:hexToRgb(selectedColor[_0x283a37(614)]),middle_color:hexToRgb(selectedColor[_0x283a37(660)]),background_color:hexToRgb(selectedColor[_0x283a37(608)]),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),simfrRate:64}};const defaultSettings={anisotropy:.8,simfrRate:64,environment_noise_scale:250,substance_color:[0,0,0],middle_color:[0,255,255],background_color:[255,255,255],c4_color:[0,255,255],background_color:[255,255,255],feed_modifier:0,kill_modifier:0,specular_color:[0,0,0],field:!1,warped:!1,diffusion_scale:.625,diffusion_scale_variation:.375,feed:.042,feed_variation:.001,kill:.06,kill_variation:.001},traitKeys=Object.keys(main_trait),randomIndex=Math.floor(R[_0x283a37(511)]()*traitKeys[_0x283a37(509)]),randomKey=traitKeys[randomIndex],randomTrait=main_trait[randomKey],settings={...defaultSettings,...randomTrait};console[_0x283a37(556)](_0x283a37(489),randomKey,_0x283a37(500),settings);const scene=new THREE.Scene,camera=new THREE.Camera;camera[_0x283a37(684)].z=1;const renderer=new THREE[_0x283a37(666)];renderer[_0x283a37(515)](window.devicePixelRatio),renderer.setSize(width,height),document.body[_0x283a37(501)](renderer.domElement);const getRandomInt=($,x)=>Math.floor(R[_0x283a37(511)]()*($-x+1)+x),getRandomColor=()=>(16777215*R[_0x283a37(511)]()<<0)[_0x283a37(622)](16)[_0x283a37(553)](6,"0");let elapsedTime=0,frameCounter=0;const updateFrequency=1;function getRandomFloat($,x){return R[_0x283a37(511)]()*(x-$)+$}let isRect=R[_0x283a37(671)]([1,2,3,4]);function _0x107a(){let $=["maxVertexTextures","getCurrentRenderTarget","getRenderTarget","background_color","Scene","vec2( ","#FD97C4","12YhfjHn","from","domElement","currentTextureIndex","#b42024","64340ROYYzI","Vector4","capabilities","add","randomCircSize","texture","Mesh","c4_color","useA","c5_color","1168573SEFyzz","ca_state","grad3","No OES_texture_float support for float textures.","#000000","variables","LinearFilter","random_num","208018tyFDOl","environment","createRenderTarget","#ffff00","\n\n varying vec2 vUv;\n\n uniform sampler2D reaction_diffusion;\n uniform vec3 substance_color;\n uniform vec3 background_color;\n uniform vec3 middle_color;\n uniform vec3 c4_color;\n uniform vec3 c5_color;\n uniform vec4 randomRect;\n uniform vec3 circle;\n uniform sampler2D noiseTexture;\n\n void main() {\n vec4 texColor = texture2D(reaction_diffusion, vUv);\n float h = texColor.g;\n\n vec3 colorA = background_color;\n vec3 colorB = middle_color;\n vec3 colorC = substance_color;\n vec3 colorD = c4_color;\n vec3 colorE = c5_color;\n\n float baseEdge0 = 0.0;\n float baseEdge1 = 0.075;\n float baseEdge2 = 0.175;\n float baseEdge3 = 0.275;\n float baseEdge4 = 0.375;\n\n float noiseValue = texture2D(noiseTexture, vUv).r;\n float edgeVariation = noiseValue * 0.1;\n\n float edge0 = baseEdge0 + edgeVariation;\n float edge1 = baseEdge1 + edgeVariation;\n float edge2 = baseEdge2 + edgeVariation;\n float edge3 = baseEdge3 + edgeVariation;\n float edge4 = baseEdge4 + edgeVariation;\n\n vec3 finalColor;\n\n if (h < edge1) {\n float t = clamp((h - edge0) / (edge1 - edge0), 0.0, 1.0);\n finalColor = mix(colorA, colorB, t);\n } else if (h < edge2) {\n float t = clamp((h - edge1) / (edge2 - edge1), 0.0, 1.0);\n finalColor = mix(colorB, colorC, t);\n } else if (h < edge3) {\n float t = clamp((h - edge2) / (edge3 - edge2), 0.0, 1.0);\n finalColor = mix(colorC, colorD, t);\n } else if (h < edge4) {\n float t = clamp((h - edge3) / (edge4 - edge3), 0.0, 1.0);\n finalColor = mix(colorD, colorE, t);\n } else {\n finalColor = colorE;\n }\n\n gl_FragColor = vec4(finalColor, 1.0);\n }\n\n","#FFFFFF","magFilter","#E23DB3","#FFC234","click","getAlternateRenderTarget","warped","setRenderTarget","divideScalar","#FF3C75","innerHeight","uniforms","background","#EBFF32","dot","point_pos","compute","field","substance","palette:","fromArray","borderSize","RGBFormat","minFilter","kill","DataTexture","toString","renderTargets","void main() {\n\n gl_Position = vec4( position, 1.0 );\n\n}\n","vec2(","needsUpdate","u_time","clientY","randomRectSize","9067540EClGUS","floor","2siIRDb","fragmentShader","value","substance_color","passThruTexture","href","round","slice","9wvPYhr","PlaneBufferGeometry","Vector3","doRenderTarget","#98D82D","createShaderMaterial","No support for vertex shader textures.","reaction_diffusion","mouse_pos","#f2f2f2","noise3d","ca_factor","Colors:","147ycZXIO","save_image","render","material","kill_modifier","kill_variation",", dependency=","accent","renderTexture","random_bool","NearestFilter","clientX","onmouseup","WebGLRenderer","get","createTexture","prngA","#0000FF","random_choice","perm","push","#F17401","sqrt","info","492258plkCVJ","Camera","onmouseleave","wrapT","GPUComputationRenderer","getElementById","18645099UYLSiq","position","save-link","wrapS","OES_texture_float","randomRectPos","#df2126","Growth:","init","#00FF00","substring","Variable dependency not found. Variable=","mouse_down","\nuniform sampler2D ","now","1375130EXCtQO","24CUAOIY","#C7AFF0","Settings:","appendChild","savename","ShaderMaterial","preventDefault","#ffffff","#f5f5f0","random_int","#AE2029","length","feed_modifier","random_dec","touches","Vector2","HalfFloatType","setPixelRatio","isWebGL2","randomCircPos","environment_noise_scale","uniform sampler2D passThruTexture;\n\nvoid main() {\n\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n\n gl_FragColor = texture2D( passThruTexture, uv );\n\n}\n","noise_texture","toFixed","\n varying vec2 vUv;\n void main() \n {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n\n","#5BC2AC","initialValueTexture","addVariable","setVariableDependencies","prngB","RGBAFormat","#FF0000","diffusion_scale_variation","addResolutionDefine","name","dependencies","FloatType","Aggressor: ","ClampToEdgeWrapping","anisotropy","#e00000","frame","#DE87B7","defines","#AFCDF0","extensions","middle_color","#00ffff","keys","resolution","simfrRate","reset","#D03A20","#ff00ff","caThreshold","padStart","hash","prev_scale","log","feed_variation","feed","\n\n uniform sampler2D environment;\n\n uniform float feed;\n uniform float kill;\n uniform float diffusion_scale;\n\n uniform float feed_variation;\n uniform float kill_variation;\n uniform bool isRect;\n uniform float diffusion_scale_variation;\n\n uniform float anisotropy;\n uniform bool field;\n\n uniform float feed_modifier;\n uniform float kill_modifier;\n\n uniform vec2 mouse_pos;\n uniform vec2 point_pos0;\n uniform vec2 point_pos1;\n uniform vec2 point_pos2;\n uniform vec2 point_pos3;\n uniform vec2 point_pos4;\n uniform vec2 point_pos5;\n uniform vec2 point_pos6;\n uniform vec2 point_pos7;\n uniform vec2 point_pos8;\n uniform vec2 point_pos9;\n uniform vec2 point_posR;\n uniform bool mouse_down;\n\n uniform bool reset;\n uniform bool add;\n\n uniform vec4 randomRect;\n uniform vec4 randomCirc;\n\n uniform vec2 randomRectPos;\n uniform vec2 randomRectSize;\n uniform vec2 randomCircPos;\n uniform vec2 randomCircSize;\n uniform float borderSize;\n\n uniform vec2 rect_top_left;\n uniform vec2 rect_bottom_right;\n\n uniform sampler2D ca_state;\n uniform float caThreshold;\n uniform float ca_factor;\n \n\n #define p2(v) v * v\n #define PI 3.14159265358979323846\n\n \n #define R 10.0\n #define borderWidth 20.0\n #define rectBorderWidth 2.0\n\n #define s(x, y) texture2D(reaction_diffusion, (gl_FragCoord.xy + vec2(x, y)) / resolution).xy\n\n vec2 anisotropicDiffusion(vec2 angles, float a1, vec2 center)\n {\n vec2\n v00 = s(-1, 1), v10 = s(0, 1), v20 = s(1, 1),\n v01 = s(-1, 0), v21 = s(1, 0),\n v02 = s(-1,-1), v12 = s(0,-1), v22 = s(1,-1);\n\n vec2 cos_t = cos(angles);\n vec2 sin_t = sin(angles);\n\n vec2 cos2_t = p2(cos_t);\n vec2 sin2_t = p2(sin_t);\n\n float a2 = 1.0 - a1;\n\n vec2 d = 4.0 * (a2 - a1) * p2(cos_t * sin_t);\n vec2 h = 8.0 * (a1 * cos2_t + a2 * sin2_t);\n vec2 v = 8.0 * (a2 * cos2_t + a1 * sin2_t);\n\n return ((1.0 - d) * (v00 + v22) + (1.0 + d) * (v20 + v02) + h * (v01 + v21) + v * (v10 + v12) - 20.0 * center) / 6.0;\n }\n\n float random (vec2 st) {\n return fract(sin(dot(st.xy,\n vec2(12.9898,78.233)))*\n 43758.5453123);\n }\n bool insideCircle(vec2 point, vec2 center, float radius) {\n return distance(point, center) <= radius;\n }\n\n\n void main() {\n vec4 env = texture2D(environment, (gl_FragCoord.xy / resolution).xy);\n vec2 st = gl_FragCoord.xy/resolution;\n vec3 ca_color = texture2D(ca_state, st).rgb;\n float ca_intensity = dot(ca_color, vec3(0.299, 0.587, 0.114));\n float caValue = texture2D(ca_state, (gl_FragCoord.xy / resolution)).r;\n\n\n float rnd = random( st );\n float pct = 0.0;\n\n vec2 randomRectPosA = randomRectPos * resolution;\n vec2 randomRectSizeA = randomRectSize * resolution;\n\n vec2 randomCircPosA = randomCircPos * resolution;\n vec2 randomCircSizeA = randomCircSize * resolution;\n\n pct = distance(st,vec2(0.5));\n\n float DS = diffusion_scale + env[2] * diffusion_scale_variation;\n vec2 angles = (1.0 + vec2(env[3], field ? env[0] : env[3])) * PI;\n float caInfluence = float(caValue > caThreshold);\n float F = feed + env[0] * feed_variation;\n float K = kill + env[1] * kill_variation;\n\n \n bool insideRectangle = (gl_FragCoord.x > randomRectPosA.x && gl_FragCoord.x < randomRectPosA.x + randomRectSizeA.x) &&\n (gl_FragCoord.y > randomRectPosA.y && gl_FragCoord.y < randomRectPosA.y + randomRectSizeA.y);\n\n bool insideCircle = insideCircle(gl_FragCoord.xy, randomCircPosA, randomCircSizeA.x); \n\n if (insideRectangle) {\n K += 0.003;\n }\n\n if (insideCircle) {\n K += 0.0025;\n }\n\n vec2 old = s(0, 0);\n\n vec2 reaction = vec2(-1.0, 1.0) * old[0] * old[1] * old[1] * (1.0 + caInfluence * ca_factor);\n vec2 dissipation = vec2(F * (1.0 - old[0]), -old[1] * (K + F));\n vec2 diffusion = anisotropicDiffusion(angles, anisotropy, old) * DS * vec2(1.0, 0.5);\n float dt = 1.0 / (4.0 * DS);\n gl_FragColor.xy = old + (reaction + dissipation + diffusion) * dt;\n float edgeDistX = min(gl_FragCoord.x, resolution.x - gl_FragCoord.x);\n float edgeDistY = min(gl_FragCoord.y, resolution.y - gl_FragCoord.y);\n float edgeDist = min(edgeDistX, edgeDistY);\n if (edgeDist <= borderSize) {\n gl_FragColor.x = 0.0;\n gl_FragColor.y = 0.0;\n }\n\n if (mouse_down) {\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, mouse_pos), 0.0) / R;\n }\n\n if (reset) {\n gl_FragColor = vec4(0.0);\n }\n\n if(add)\n {\n vec2 pointPositions[10];\n pointPositions[0] = point_pos1;\n pointPositions[1] = point_pos2;\n pointPositions[2] = point_pos3;\n pointPositions[3] = point_pos4;\n pointPositions[4] = point_pos5;\n pointPositions[5] = point_pos6;\n pointPositions[6] = point_pos7;\n pointPositions[7] = point_pos8;\n pointPositions[8] = point_pos9;\n pointPositions[9] = point_pos0;\n\n for (int i = 0; i < 10; i++) {\n vec2 pointPos = pointPositions[i];\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, pointPos), 0.0) / R;\n }\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, point_posR), 0.0) / R;\n\n }\n }\n\n","innerWidth"];return(_0x107a=function(){return $})()}switch(isRect){case 1:randomRect=new THREE.Vector4(.5*R[_0x283a37(511)](),0,.2,1),randomCirc=new THREE[_0x283a37(574)](0,0,0,0);break;case 2:randomRect=new THREE[_0x283a37(574)](0,0,0,0),randomCirc=new THREE[_0x283a37(574)](.5,.5,.4,.4);break;case 3:randomRect=new THREE[_0x283a37(574)](0,0,0,0),randomCirc=new THREE[_0x283a37(574)](0,0,0,0);break;case 4:randomRect=new THREE.Vector4(.5*R[_0x283a37(511)](),0,.2,1),randomCirc=new THREE[_0x283a37(574)](.5,.5,.4,.4);break;default:randomRect=new THREE[_0x283a37(574)](.5*R[_0x283a37(511)](),0,.2,1),randomCirc=new THREE.Vector4(0,0,0,0)}const borderSizes=[10,30],borderSize=R[_0x283a37(671)](borderSizes);let caEnabled=!!R[_0x283a37(662)](.05);console.log(_0x283a37(535)+caEnabled);const ca_factor=!0===caEnabled?.8:0,caWidth=Math[_0x283a37(631)](simulation_width/10),caHeight=Math[_0x283a37(631)](simulation_height/10),caData=new Uint8Array(caWidth*caHeight*3);for(let i=0;i<caData[_0x283a37(509)];i+=3){let $=.8>R.random_dec()?0:255;caData[i]=$,caData[i+1]=$,caData[i+2]=$}const caTexture=new THREE[_0x283a37(621)](caData,caWidth,caHeight,THREE[_0x283a37(618)]);caTexture[_0x283a37(597)]=THREE[_0x283a37(663)],caTexture.minFilter=THREE[_0x283a37(663)],caTexture[_0x283a37(686)]=THREE[_0x283a37(536)],caTexture[_0x283a37(680)]=THREE[_0x283a37(536)],caTexture.needsUpdate=!0;const material=new THREE[_0x283a37(503)]({vertexShader:render_vertex,fragmentShader:render_fragment,uniforms:{reaction_diffusion:{value:null},substance_color:{value:new THREE.Vector3().fromArray(settings[_0x283a37(635)]).divideScalar(255)},middle_color:{value:new THREE[_0x283a37(642)]().fromArray(settings[_0x283a37(544)])[_0x283a37(604)](255)},background_color:{value:new THREE[_0x283a37(642)]()[_0x283a37(616)](settings[_0x283a37(564)])[_0x283a37(604)](255)},c4_color:{value:new THREE[_0x283a37(642)]()[_0x283a37(616)](settings[_0x283a37(580)])[_0x283a37(604)](255)},c5_color:{value:new THREE[_0x283a37(642)]().fromArray(settings[_0x283a37(582)])[_0x283a37(604)](255)},time:{value:0},noise_texture:{value:null},isRect:{value:isRect},randomRect:{value:randomRect},randomCirc:{value:randomCirc},ca_state:{value:caTexture}},defines:{frag2sim:_0x283a37(625)+simulation_width/actual_width+", "+simulation_height/actual_height+")",simulation_resolution:"vec2("+simulation_width+", "+simulation_height+")"}});scene[_0x283a37(576)](new THREE[_0x283a37(579)](new THREE[_0x283a37(641)](2,2),material));const gpu_compute=new THREE.GPUComputationRenderer(simulation_width,simulation_height,renderer),reaction_diffusion=gpu_compute[_0x283a37(668)](),reaction_diffusion_variable=gpu_compute[_0x283a37(525)](_0x283a37(647),rdf,reaction_diffusion);reaction_diffusion_variable[_0x283a37(686)]=THREE[_0x283a37(536)],reaction_diffusion_variable.wrapT=THREE[_0x283a37(536)],gpu_compute[_0x283a37(526)](reaction_diffusion_variable,[reaction_diffusion_variable]);const rdu=reaction_diffusion_variable.material[_0x283a37(607)];rdu[_0x283a37(648)]={value:new THREE[_0x283a37(513)](-100,-100)};for(let i=0;i<10;i++)rdu[_0x283a37(611)+i]={value:new THREE[_0x283a37(513)](getRandomInt(50,simulation_width-50),getRandomInt(50,simulation_height-50))};function updateCA(){let $=_0x283a37,x=new Uint8Array(caWidth*caHeight*3),e=[1],a=[2,3];for(let o=0;o<caHeight;o++)for(let t=0;t<caWidth;t++){let r=(o*caWidth+t)*3,n=0;for(let c=-1;c<=1;c++)for(let l=-1;l<=1;l++){if(0===l&&0===c)continue;let f=(t+l+caWidth)%caWidth;255===caData[((o+c+caHeight)%caHeight*caWidth+f)*3]&&n++}let s=caData[r],d=n==e[0]||1==s&&a.includes(n)?1:0;d=255===s&&(2===n||3===n)?255:0===s&&3===n?255:0,x[r]=d,x[r+1]=d,x[r+2]=d}caData.set(x),caTexture[$(626)]=!0}rdu[_0x283a37(494)]={value:!1},rdu[_0x283a37(558)]={value:settings[_0x283a37(558)]},rdu[_0x283a37(620)]={value:settings[_0x283a37(620)]},rdu.diffusion_scale={value:settings.diffusion_scale},rdu[_0x283a37(557)]={value:settings[_0x283a37(557)]},rdu[_0x283a37(658)]={value:settings[_0x283a37(658)]},rdu[_0x283a37(510)]={value:settings[_0x283a37(510)]},rdu[_0x283a37(657)]={value:settings.kill_modifier},rdu[_0x283a37(530)]={value:settings[_0x283a37(530)]},rdu[_0x283a37(537)]={value:settings[_0x283a37(537)]},rdu[_0x283a37(549)]={value:!1},rdu[_0x283a37(576)]={value:!1},rdu[_0x283a37(613)]={value:settings[_0x283a37(613)]},rdu.warped={value:settings[_0x283a37(602)]},rdu[_0x283a37(651)]={value:ca_factor},rdu[_0x283a37(584)]={value:caTexture},rdu[_0x283a37(552)]={value:.6},rdu[_0x283a37(617)]={value:borderSize},rdu[_0x283a37(688)]={value:new THREE[_0x283a37(513)](randomRect.x,randomRect.y)},rdu[_0x283a37(629)]={value:new THREE[_0x283a37(513)](randomRect.z,randomRect.w)},rdu[_0x283a37(517)]={value:new THREE[_0x283a37(513)](randomCirc.x,randomCirc.y)},rdu[_0x283a37(577)]={value:new THREE[_0x283a37(513)](randomCirc.z,randomCirc.w)};const caDuration=3e4,maxUpdateFrequency=10;let startTime=Date[_0x283a37(496)]();function animate(){let $=_0x283a37;if(requestAnimationFrame(animate),frameCounter++,caEnabled){let x=Date[$(496)]()-startTime;if(x<3e4){var e,a=0,o=3e4,t=1,r=10;let n=Math[$(631)]((e=x,t+(e-a)*(10-t)/(3e4-a)));frameCounter%n==0&&updateCA()}else caEnabled=!1}render()}function _0x3aa4($,x){let e=_0x107a();return(_0x3aa4=function($,x){return e[$-=488]})($,x)}function render($){let x=_0x283a37;if(simulateReactionDiffusion(settings[x(548)]),material[x(607)][x(647)][x(634)]=gpu_compute[x(562)](reaction_diffusion_variable)[x(578)],elapsedTime+=.01,material.uniforms.time[x(634)]=elapsedTime,rdu[x(627)]={value:.001*$},renderer[x(655)](scene,camera),!0===render[x(654)]){render.save_image=!1;let e=document[x(682)](x(685));e.download=render[x(502)],e[x(637)]=renderer[x(570)].toDataURL(),e[x(600)]()}renderer[x(676)][x(655)][x(539)]>=2e3&&renderer[x(676)][x(655)][x(539)]<5e3?rdu[x(576)]={value:!0}:rdu[x(576)]={value:!1}}function simulateReactionDiffusion($){let x=_0x283a37;for(let e=0;e<$;e++)gpu_compute[x(612)]()}function createEnvironment($=!0){let x=_0x283a37;if(!$&&void 0!==createEnvironment.prev_scale&&createEnvironment[x(555)]===Settings[x(518)])return;createEnvironment[x(555)]=settings.environment_noise_scale;let e=new SimplexNoise(R),a=Array[x(569)]({length:4},()=>1e3*R[x(511)]()),o=1/settings.environment_noise_scale,t={x:simulation_width/2,y:simulation_height/2},r=(t.x,t.y,new Float32Array(simulation_width*simulation_height*4));for(let n=0;n<simulation_height;n++)for(let c=0;c<simulation_width;c++)for(let l=0;l<4;l++)r[(n*simulation_width+c)*4+l]=e.noise3d((c+.5)*o,(n+.5)*(!0===settings.warped?1:o),a[l]);rdu[x(592)]={value:new THREE.DataTexture(r,simulation_width,simulation_height,THREE[x(528)],THREE[x(534)])},rdu[x(592)][x(634)][x(597)]=THREE.LinearFilter,rdu[x(592)][x(634)][x(619)]=THREE[x(589)];let f=new THREE[x(621)](r,simulation_width,simulation_height,THREE[x(528)],THREE[x(534)]);f[x(597)]=THREE[x(589)],f.minFilter=THREE[x(589)],material[x(607)][x(520)][x(634)]=f}function updateMousePos($){let x=_0x283a37,e=$[x(664)]*(simulation_width/width),a=simulation_height-$[x(628)]*(simulation_height/height);rdu[x(648)][x(634)].fromArray([e,a])}function onMove($){let x=_0x283a37;updateMousePos($),rdu[x(494)][x(634)]=mouse_down&&(brush_move=!0)}function onUp(){let $=_0x283a37;mouse_down=brush_move=!1,rdu[$(494)][$(634)]=!1}function onDown(){mouse_down=!0}function handleTouchEvent($,x){let e=_0x283a37;1===$.touches[e(509)]&&($[e(504)](),x($[e(512)][0]))}createEnvironment(),gpu_compute[_0x283a37(490)](),animate(),renderer[_0x283a37(570)].onmousedown=onDown,renderer[_0x283a37(570)][_0x283a37(665)]=renderer[_0x283a37(570)][_0x283a37(679)]=onUp,renderer[_0x283a37(570)].onmousemove=onMove;