0x5306…cbe7

All memos sent from and to 0x5306…cbe7.

Old Grove depicts the quiet beauty of forgotten, unpruned citrus trees. The branches are heavy with ripe fruit sometimes drooping toward the earth where fallen fruit lie. These trees have found their freedom, growing with abandon, shaping themselves as they please. Each piece is rendered with the delicate touch of pointillism, the harmony of divisionism, and the fleeting grace of impressionism, inviting the viewer into a moment of natural reverie.
Segments;_++){let $=map(_,0,e.xSegments,e.xMinExtent,e.xMaxExtent),i=map(_+1,0,e.xSegments,e.xMinExtent,e.xMaxExtent);for(let n=0;n<e.ySegments;n++){let a=map(n,0,e.ySegments,e.yMinExtent,e.yMaxExtent),r=map(n+1,0,e.ySegments,e.yMinExtent,e.yMaxExtent),s=t(a,-0,1.01),l=t(r,-0,1.01),o=dist($*s,a-.5,0,0),h=dist($*l,r-.5,0,0),p=dist(i*l,r-.5,0,0),f=dist(i*s,a-.5,0,0),u=-t(o,-.775,.775),d=-t(h,-.775,.775),c=-t(p,-.775,.775),g=-t(f,-.775,.775),m=_createV($*s,-a,u+.8),v=_createV($*l,-r,d+.8),x=_createV(i*l,-r,c+.8),b=_createV(i*s,-a,g+.8),S=_copyV(m),y=_copyV(v),w=_copyV(x),z=_copyV(b);for(let k=0;k<e.transforms.length;k++){let P=e.transforms[k];"t"==P.type?(S=_add(S,P.val),y=_add(y,P.val),w=_add(w,P.val),z=_add(z,P.val)):"s"==P.type?(S=_mult(S,P.val),y=_mult(y,P.val),w=_mult(w,P.val),z=_mult(z,P.val)):"r"==P.type&&(S=_rotate(S,P.val.x,P.val.y,P.val.z),y=_rotate(y,P.val.x,P.val.y,P.val.z),w=_rotate(w,P.val.x,P.val.y,P.val.z),z=_rotate(z,P.val.x,P.val.y,P.val.z))}let B=[_3dTo2d(S),_3dTo2d(y),_3dTo2d(w),_3dTo2d(z),],V=_normalize(triNorm(S,w,z)),M=-_dot(V,lightDir),T=norm(M,-1,1),W=new _Shape(!0);W.setPoints(B),W.zIndex=min(min(min(S.z,z.z),w.z),y.z),W.fill=paletteLerp(e.palette,doubleExponentialSigmoid(lerp(T,e.br,e.brLerp),e.constrast),!0),e.drawPolygonLines&&(W.stroke=paletteLerp(e.palette,0,!0)),W.strokeWeight=1,W.nHashesMult=.8,W.nSegments=4,W.hashWeight=1.5,W.occlude=!0,W.scaleAmt=0,W.wobbleAmt=0,booleanShapes.push(W)}}}function grassShape(e){let t=_3dTo2d(e.pos),_=[],$=(2*fractalNoise({x:.005*e.pos.x,y:0,z:.02*e.pos.z,nOctaves:3,scaleFallout:2,weightFallout:.8})-1)*PI/3+random(-1,1)*PI/32;_.push(_add(_rotate(_mult(_createV(-1,0),e.scale),0,0,$),t)),_.push(_add(_rotate(_mult(_createV(0,-1),e.scale),0,0,$),t)),_.push(_add(_rotate(_mult(_createV(1,0),e.scale),0,0,$),t));let i=map(fractalNoise({x:.005*e.pos.x+532,y:0,z:.01*e.pos.z-54323,nOctaves:3,scaleFallout:2,weightFallout:.5}),0,1,3,6),n=new _Shape(!0);n.setPoints(_),n.zIndex=e.pos.z,n.fill=paletteLerp(e.palette,e.br,!1),n.strokeWeight=1,n.nHashesMult=.5,n.hashWeight=1.5,n.occlude=!0,n.scaleAmt=i,n.wobbleAmt=2,booleanShapes.push(n)}let shapeIndex=0,hashIndex=0,bgHashIndex=0,layerCount=0;function draw(){if(saving)++saveTime>80&&(shapes=null,window.location.reload(),noLoop());else{if(background(200),"texture"==renderMode&&geometryBuffer.clear(),geometryBuffer.push(),geometryBuffer.scale(sizeAdjust,sizeAdjust),geometryBuffer.translate(targetSzX/2,targetSzY/2),geometryBuffer.fill(255,0,0),bgHashes&&bgHashIndex<bgHashes.length){blendShader.setUniform("u1",.5),crayonShader.setUniform("u2",.4);let e=0;for(let t=bgHashIndex;t<min(bgHashIndex+200,bgHashes.length);t++){for(geometryBuffer.noStroke();bgHashes[t].hidden;)e++;geometryBuffer.fill(bgHashes[t].fill),"texture"==renderMode&&bgHashes[t].wobbleAndScale(10,0),drawStroke(bgHashes[t],bgHashes[t].hashWeight,geometryBuffer,!0),e++}bgHashIndex+=e,geometryBuffer.colorMode(RGB,255)}else if(booleanShapes&&shapeIndex<booleanShapes.length){bgHashes=null;let _=0;for(let $=shapeIndex;$<min(shapeIndex+500,booleanShapes.length);$++){for(;booleanShapes[$].points.length<=1;)_++;booleanShapes[$].hidden||(geometryBuffer.noStroke(),void 0!=booleanShapes[$].stroke&&(geometryBuffer.fill(booleanShapes[$].stroke),-1e13==booleanShapes[$].zIndex&&print(booleanShapes[$]),drawStroke(booleanShapes[$],booleanShapes[$].strokeWeight,geometryBuffer))),_++}shapeIndex+=_}else if(hashes&&hashIndex<hashes.length){booleanShapes=null;let i=0;for(let n=hashIndex;n<min(hashIndex+1e3,hashes.length);n++){geometryBuffer.noStroke();for(let a=0;a<hashes[n].length;a++){geometryBuffer.fill(hashes[n][a].fill);let r=hashes[n].scaleAmt,s=hashes[n].wobbleAmt;hashes[n][a].wobbleAndScale(s,r),drawStroke(hashes[n][a],hashes[n][a].strokeWeight,geometryBuffer,!0)}i++}hashIndex+=i,geometryBuffer.colorMode(RGB,255)}else layerCount<2&&"texture"==renderMode?(hashIndex=0,layerCount++):(hashes=null,print("done"),saveMode?(doDownload=!0,saving=!0):noLoop());geometryBuffer.pop(),crayonBuffer.clear(),crayonBuffer.shader(crayonShader),crayonShader.setUniform("u3",geometryBuffer),crayonShader.setUniform("u4",[frameCount*(frameCount%20==0?0:1),(frameCount+5)*((frameCount+5)%20==0?0:1)]),crayonShader.setUniform("u5",[width,height]),crayonBuffer.rect(-crayonBuffer.width/2,-crayonBuffer.height/2,crayonBuffer.width,crayonBuffer.height),drawnBuffer.shader(blendShader),blendShader.setUniform("u6",drawnBuffer),blendShader.setUniform("u7",crayonBuffer),drawnBuffer.rect(-drawnBuffer.width/2,-drawnBuffer.height/2,drawnBuffer.width,drawnBuffer.height),bgHashes&&bgHashIndex>=bgHashes.length&&(blendShader.setUniform("u1",.9),crayonShader.setUniform("u2",.3)),background(200),"texture"==renderMode?image(drawnBuffer,0,0):image(geometryBuffer,0,0),doDownload&&(print("Saving"),saveCanvas(rSeed+"_"+nSeed,"png"),doDownload=!1)}}function ball(e){for(let t=0;t<e.nPetals;t++)cupShape({xSegments:5,ySegments:5,transforms:[{type:"t",val:_createV(0,0,-.04)},{type:"s",val:_createV(e.scl,e.scl,e.scl)},{type:"s",val:_scalarMult(e.flowerProportions,e.flowerScale)},{type:"r",val:_createV(0,map(t,0,e.nPetals,0,TAU),0)},{type:"r",val:e.flowerRotation},{type:"t",val:e.flowerTranslation}],xMinExtent:-e.xExtents,xMaxExtent:e.xExtents,yMinExtent:0,yMaxExtent:1,palette:e.palette,br:e.br,brLerp:.5,contrast:0,drawPolygonLines:!0})}
let f=_rotate(_createV(0,map(p,0,this.hPoints,this.h,0)),0,0,n);f.x+=this.x,f.y+=this.y,this.points.push(f),this.lineSegVis.push(!0)}this.calculateBoundingBox()}}function sqr(e){return e*e}function dist2(e,t){return sqr(e.x-t.x)+sqr(e.y-t.y)}function distToSegmentSquared(e,t,_){var $=dist2(t,_);if(0==$)return dist2(e,t);var i=((e.x-t.x)*(_.x-t.x)+(e.y-t.y)*(_.y-t.y))/$;return i=Math.max(0,Math.min(1,i)),dist2(e,{x:t.x+i*(_.x-t.x),y:t.y+i*(_.y-t.y)})}function distToSegment(e,t,_){return Math.sqrt(distToSegmentSquared(e,t,_))}class _WeightedLine extends _Rect{constructor(e,t,_,$,i,n){let a;super(e,t,dist(e,t,_,$),i,n,atan2($-t,_-e)),this.a=_createV(e,t),this.b=_createV(_,$),this.dir=_sub(this.b,this.a),this.centerOffset=_rotate(_setMag(this.dir,i/2),0,0,PI/2),this.lengthOffset=_setMag(this.dir,10),this.a=_add(this.a,this.centerOffset),this.b=_add(this.b,this.centerOffset),this.wt=i}pointInside(e){return distToSegment(e,_sub(this.a,this.lengthOffset),_add(this.b,this.lengthOffset))<.5*this.wt}}class _Ellipse extends _Shape{constructor(e,t,_,$,i,n){super(!0),this.x=e,this.y=t,this.w=_,this.h=$,this.nPoints=n;for(let a=0;a<this.nPoints;a++){let r=map(a,0,this.nPoints,0,TAU),s=this.w*cos(r),l=this.h*sin(r),o=_rotate(_createV(s,l),0,0,i);o.x+=this.x,o.y+=this.y,this.points.push(o),this.lineSegVis.push(!0)}this.calculateBoundingBox()}}let petalPalette,stemPalette,leafPalette,grassPalette,petalColor,lightPalette;function pickPalette(e){if(print("palette",e),1==e){petalPalette=[[color("#386270"),color("#7d8cb5"),color("#cda7e4"),color("#ec8880"),color("#f79c66"),color("#f8efaf"),],[color("#386270"),color("#799f89"),color("#cda7e4"),color("#fde6d7"),color("#e1f4fd"),]],stemPalette=[color("#354e6f"),color("#4a887a"),color("#799f89"),color("#f8efaf"),];let t=color("#223f6a"),_=color("#3e6d95"),$=color("#99bfbf"),i=color("#e2dd7a");leafPalette=[t,t,_,_,_,$,$,i,i,color("#ffdf5e"),],grassPalette=[color("#354e6f"),color("#7d8cb5"),color("#799f89"),color("#ca830b"),color("#ec8880"),color("#f7c066"),color("#efdb50"),color("#efc9d7"),color("#f8efaf"),],lightPalette=[color("#1a172f"),color("#29264E"),color("#354e6f"),color("#efdb50"),color("#efc9d7"),color("#f8efaf"),]}else if(2==e){petalPalette=[[color("#47448a"),color("#f7ae06"),color("#f5c607"),color("#fadf47"),color("#fbe773"),]],stemPalette=[color("#624835"),color("#926b50"),color("#ab8263"),color("#b997b6"),color("#d5b67b"),];let n=color("#547666"),a=color("#577769"),r=color("#7ba488"),s=color("#ece980");leafPalette=[n,n,n,a,a,r,r,r,s,s,],grassPalette=[color("#577769"),color("#4b837a"),color("#4b837a"),color("#5277cf"),color("#92bc63"),color("#91d2a6"),color("#d6dd42"),color("#d6dd42"),color("#ece980"),color("#ece980"),]}else if(4==e){petalPalette=[[color("#300a0d"),color("#f2520d"),color("#f1960e"),color("#f3cc54"),color("#f8de8f"),color("#faeab8"),],[color("#324578"),color("#dcc1ff"),color("#fdd9fa"),color("#feffe1"),color("#fdf7e1"),]],stemPalette=[color("#1f3630"),color("#839f63"),color("#9ea859"),];let l=color("#4f7442"),o=color("#9fca75"),h=color("#efdd61");leafPalette=[color("#1f3630"),color("#1f3630"),l,l,o,o,color("#bad06f"),h,h,];let p=color("#f3d354");grassPalette=[color("#3e446c"),color("#4b7a67"),color("#406cbf"),color("#d6967c"),color("#f1ad0e"),p,p,p,color("#ece3bb"),]}}function paletteLerp(e,t,_){if(_){let $=floor(map(t,0,1,0,e.length-1)),i;i=$+1;let n=e[constrain($,0,e.length-1)],a=e[constrain(i,0,e.length-1)];return lerpColor(n,a,t*(e.length-1)-$)}{let r=floor(map(t,0,1,0,e.length-1));return e[constrain(r,0,e.length-1)]}}function prepHeightmap(){noiseDetail(1,.25);let e=.006*1.5*(targetSzX/600);for(let t=0;t<mapW;t++){let _=[];for(let $=0;$<mapH;$++){let i=pow(map($,0,mapH,0,1),2)*map(pow(1*fractalNoise({x:t*e*2.5,y:0,z:$*e*5,nOctaves:2,scaleFallout:2,weightFallout:.5}),1),0,1,0,1);_.push(doubleExponentialSigmoid(i,0))}terrainHt.push(_)}for(let n=0;n<mapW-1;n++){let a=[],r=[];for(let s=0;s<mapH-1;s++){let l=_normalize(_createV(terrainHt[n+1][s]-terrainHt[n][s],0,terrainHt[n][s+1]-terrainHt[n][s]));r.push(l),a.push(map(-_dot(l,lightDir),-1,1,.9,1))}lightMap.push(a),terrainNorm.push(r)}noiseDetail(3,.5)}function heightMap(e,t){let _=constrain(floor(map(e,-(1.2*targetSzX)/2,1.2*targetSzX/2,0,mapW)),0,mapW-1),$=constrain(floor(map(t,-maxZ,maxZ,0,mapH)),0,mapH-1);return -500*terrainHt[_][$]}function terrainLight(e,t){let _=floor(map(e,-(1.2*targetSzX)/2,1.2*targetSzX/2,0,mapW)),$=floor(map(t,-maxZ,maxZ,0,mapH));return _>=0&&_<=mapW-2&&$>=0&&$<=mapH-2?lightMap[_][$]:1}function setTerrainLight(e,t,_){let $=floor(map(e,-(1.2*targetSzX)/2,1.2*targetSzX/2,0,mapW)),i=floor(map(t,-maxZ,maxZ,0,mapH));$>=0&&$<=mapW-2&&i>=0&&i<=mapH-2&&(lightMap[$][i]=_)}function placeShadow(e,t,_,$){for(let i=-_;i<=_;i++)for(let n=-(1*_);n<=1*_;n++){let a=sq(i)+sq(n/1),r=sq(_);a<r&&setTerrainLight(i+e,n+t,max(0,terrainLight(i+e,n+t)-map(a,0,r,$,0)))}}let saveMode=!1,saving=!1,saveTime=0,doDownload=!1,canv,targetSzX,targetSzY,heightToWidth=.8,sizeAdjust,mag=1,canvSzX,canvSzY,margin=0,booleanShapes=[],hashes=[],bgHashes=[],maxZ=2e3,terrainHt=[],lightMap=[],terrainNorm=[],mapW=100,mapH=175,slopeDir,lightAngle,lightDir,lightLeftRight,toEye,crayonShader,blendShader,geometryBuffer,crayonBuffer,drawnBuffer,renderMode="texture",unionBuffer=[],unionBufferW,unionBufferH,bgColor,vertShader="precision lowp float;varying vec2 var;attribute vec3 aPosition;attribute vec2 aTexCoord;void main(){var=aTexCoord;vec4 v=vec4(aPosition,1);v.xy=v.xy*2.-1.;gl_Position=v;}",crayonFragShader="precision highp float;varying vec2 var;uniform sampler2D u3;uniform vec2 u4,u5;uniform float u2;float v(float v,float u){return u+v*(1.-u);}float v(vec2 u){return fract(sin(dot(u,vec2(12.9898,4.1414)))*43758.5453);}float u(vec2 u){u*=vec2(1,u5.y/u5.x);vec2 w=floor(u+u4);u=fract(u+u4);u=u*u*(3.-2.*u);float f=mix(mix(v(w),v(w+vec2(1,0)),u.x),mix(v(w+vec2(0,1)),v(w+vec2(1)),u.x),u.y);return f*f;}void main(){vec2 w=vec2(v(var.x,-1.),v(var.y,-1.));vec3 f=vec3(5e-4,.00025,0);float z=(v(u(w*4e2),0.)+v(u(w*8e2),0.)*.5+v(u(w*1600.),0.)*.25)/1.75,x=u(w*50.)*3.14159*2.;vec4 m=texture2D(u3,var+vec2(cos(x),sin(x))*5e-4),r;if(m.w==0.)r=vec4(0);else r.xyz=m.xyz,r.w=m.w,r.w*=step(.6,v(1.-z,u2));r.w*=v(pow((texture2D(u3,var+f.xz).w+texture2D(u3,var-f.xz).w+texture2D(u3,var+f.zy).w+texture2D(u3,var-f.zy).w)/4.,.2),.8);gl_FragColor=r;}",blendFragShader=`precision highp float;varying vec2 var;uniform sampler2D u6,u7;uniform float u1; #ifndef SPECTRAL #define SPECTRAL float v(float v){return v<.04045?v/12.92:pow((v+.055)/1.055,2.4);}float f(float v){return v<.0031308?v*12.92:1.055*pow(v,1./2.4)-.055;}vec3 w(vec3 f){return vec3(v(f[0]+.01),v(f[1]+.01),v(f[2]+.01));}vec3 t(vec3 v){return clamp(vec3(f(v[0]-.01),f(v[1]-.01),f(v[2]-.01)),0.,1.);}void f(vec3 v,inout float f[7]){f[0]=0.;f[1]=0.;f[2]=0.;f[3]=0.;f[4]=0.;f[5]=0.;f[6]=0.;if(v[0]<=v[1]&&v[0]<=v[2]){f[0]=v[0];if(v[1]<=v[2])f[1]=v[1]-v[0],f[6]=v[2]-v[1];else f[1]=v[2]-v[0],f[5]=v[1]-v[2];}else if(v[1]<=v[0]&&v[1]<=v[2]){f[0]=v[1];if(v[0]<=v[2])f[2]=v[0]-v[1],f[6]=v[2]-v[0];else f[2]=v[2]-v[1],f[4]=v[0]-v[2];}else if(v[2]<=v[0]&&v[2]<=v[1]){f[0]=v[2];if(v[0]<=v[1])f[3]=v[0]-v[2],f[5]=v[1]-v[0];else f[3]=v[1]-v[2],f[4]=v[0]-v[1];}}void t(vec3 v,inout float i[38]){float p[7];f(v,p);i[0]=p[0]+p[1]*.96853629+p[2]*.51567122+p[3]*.02055257+p[4]*.03147571+p[5]*.49108579+p[6]*.97901834;i[1]=p[0]+p[1]*.96855103+p[2]*.5401552+p[3]*.02059936+p[4]*.03146636+p[5]*.46944057+p[6]*.97901649;i[2]=p[0]+p[1]*.96859338+p[2]*.62645502+p[3]*.02062723+p[4]*.03140624+p[5]*.4016578+p[6]*.97901118;i[3]=p[0]+p[1]*.96877345+p[2]*.75595012+p[3]*.02073387+p[4]*.03119611+p[5]*.2449042+p[6]*.97892146;i[4]=p[0]+p[1]*.96942204+p[2]*.92826996+p[3]*.02114202+p[4]*.03053888+p[5]*.0682688+p[6]*.97858555;i[5]=p[0]+p[1]*.97143709+p[2]*.97223624+p[3]*.02233154+p[4]*.02856855+p[5]*.02732883+p[6]*.97743705;i[6]=p[0]+p[1]*.97541862+p[2]*.98616174+p[3]*.02556857+p[4]*.02459485+p[5]*.013606+p[6]*.97428075;i[7]=p[0]+p[1]*.98074186+p[2]*.98955255+p[3]*.03330189+p[4]*.0192952+p[5]*.01000187+p[6]*.96663223;i[8]=p[0]+p[1]*.98580992+p[2]*.98676237+p[3]*.05185294+p[4]*.01423112+p[5]*.01284127+p[6]*.94822893;i[9]=p[0]+p[1]*.98971194+p[2]*.97312575+p[3]*.10087639+p[4]*.01033111+p[5]*.02636635+p[6]*.89937713;i[10]=p[0]+p[1]*.99238027+p[2]*.91944277+p[3]*.24000413+p[4]*.00765876+p[5]*.07058713+p[6]*.76070164;i[11]=p[0]+p[1]*.99409844+p[2]*.32564851+p[3]*.53589066+p[4]*.00593693+p[5]*.70421692+p[6]*.4642044;i[12]=p[0]+p[1]*.995172+p[2]*.13820628+p[3]*.79874659+p[4]*.00485616+p[5]*.85473994+p[6]*.20123039;i[13]=p[0]+p[1]*.99576545+p[2]*.05015143+p[3]*.91186529+p[4]*.00426186+p[5]*.95081565+p[6]*.08808402;i[14]=p[0]+p[1]*.99593552+p[2]*.02912336+p[3]*.95399623+p[4]*.00409039+p[5]*.9717037+p[6]*.04592894;i[15]=p[0]+p[1]*.99564041+p[2]*.02421691+p[3]*.97137099+p[4]*.00438375+p[5]*.97651888+p[6]*.02860373;i[16]=p[0]+p[1]*.99464769+p[2]*.02660696+p[3]*.97939505+p[4]*.00537525+p[5]*.97429245+p[6]*.02060067;i[17]=p[0]+p[1]*.99229579+p[2]*.03407586+p[3]*.98345207+p[4]*.00772962+p[5]*.97012917+p[6]*.01656701;i[18]=p[0]+p[1]*.98638762+p[2]*.04835936+p[3]*.98553736+p[4]*.0136612+p[5]*.9425863+p[6]*.01451549;i[19]=p[0]+p[1]*.96829712+p[2]*.0001172+p[3]*.98648905+p[4]*.03181352+p[5]*.99989207+p[6]*.01357964;i[20]=p[0]+p[1]*.89228016+p[2]*8.554e-5+p[3]*.98674535+p[4]*.10791525+p[5]*.99989891+p[6]*.01331243;i[21]=p[0]+p[1]*.53740239+p[2]*.85267882+p[3]*.98657555+p[4]*.46249516+p[5]*.13823139+p[6]*.01347661;i[22]=p[0]+p[1]*.15360445+p[2]*.93188793+p[3]*.98611877+p[4]*.84604333+p[5]*.06968113+p[6]*.01387181;i[23]=p[0]+p[1]*.05705719+p[2]*.94810268+p[3]*.98559942+p[4]*.94275572+p[5]*.05628787+p[6]*.01435472;i[24]=p[0]+p[1]*.03126539+p[2]*.94200977+p[3]*.98507063+p[4]*.96860996+p[5]*.06111561+p[6]*.01479836;i[25]=p[0]+p[1]*.02205445+p[2]*.91478045+p[3]*.98460039+p[4]*.97783966+p[5]*.08987709+p[6]*.0151525;i[26]=p[0]+p[1]*.01802271+p[2]*.87065445+p[3]*.98425301+p[4]*.98187757+p[5]*.13656016+p[6]*.01540513;i[27]=p[0]+p[1]*.0161346+p[2]*.78827548+p[3]*.98403909+p[4]*.98377315+p[5]*.22169624+p[6]*.01557233;i[28]=p[0]+p[1]*.01520947+p[2]*.65738359+p[3]*.98388535+p[4]*.98470202+p[5]*.32176956+p[6]*.0156571;i[29]=p[0]+p[1]*.01475977+p[2]*.59909403+p[3]*.98376116+p[4]*.98515481+p[5]*.36157329+p[6]*.01571025;i[30]=p[0]+p[1]*.01454263+p[2]*.56817268+p[3]*.98368246+p[4]*.98537114+p[5]*.4836192+p[6]*.01571916;i[31]=p[0]+p[1]*.01444459+p[2]*.54031997+p[3]*.98365023+p[4]*.98546685+p[5]*.46488579+p[6]*.01572133;i[32]=p[0]+p[1]*.01439897+p[2]*.52110241+p[3]*.98361309+p[4]*.98550011+p[5]*.47440306+p[6]*.01572502;i[33]=p[0]+p[1]*.0143762+p[2]*.51041094+p[3]*.98357259+p[4]*.98551031+p[5]*.4857699+p[6]*.01571717;i[34]=p[0]+p[1]*.01436343+p[2]*.50526577+p[3]*.98353856+p[4]*.98550741+p[5]*.49267971+p[6]*.01571905;i[35]=p[0]+p[1]*.01435687+p[2]*.5025508+p[3]*.98351247+p[4]*.98551323+p[5]*.49625685+p[6]*.01571059;i[36]=p[0]+p[1]*.0143537+p[2]*.50126452+p[3]*.98350101+p[4]*.98551563+p[5]*.49807754+p[6]*.01569728;i[37]=p[0]+p[1]*.01435408+p[2]*.50083021+p[3]*.98350852+p[4]*.98551547+p[5]*.49889859+p[6]*.0157002;}vec3 x(vec3 f){mat3 p;p[0]=vec3(3.24306333,-1.53837619,-.49893282);p[1]=vec3(-.96896309,1.87542451,.04154303);p[2]=vec3(.05568392,-.20417438,1.05799454);float v=dot(p[0],f),i=dot(p[1],f),r=dot(p[2],f);return t(vec3(v,i,r));}vec3 p(float p[38]){return vec3(0)+p[0]*vec3(6.469e-5,1.84e-6,.00030502)+p[1]*vec3(.00021941,6.21e-6,.00103681)+p[2]*vec3(.00112057,3.101e-5,.00531314)+p[3]*vec3(.00376661,.00010475,.01795439)+p[4]*vec3(.01188055,.00035364,.05707758)+p[5]*vec3(.02328644,.00095147,.11365162)+p[6]*vec3(.03455942,.00228226,.17335873)+p[7]*vec3(.03722379,.00420733,.19620658)+p[8]*vec3(.03241838,.0066888,.18608237)+p[9]*vec3(.02123321,.0098884,.13995048)+p[10]*vec3(.01049099,.01524945,.08917453)+p[11]*vec3(.00329584,.02141831,.04789621)+p[12]*vec3(.00050704,.03342293,.02814563)+p[13]*vec3(.00094867,.05131001,.01613766)+p[14]*vec3(.00627372,.07040208,.0077591)+p[15]*vec3(.01686462,.08783871,.00429615)+p[16]*vec3(.02868965,.09424905,.00200551)+p[17]*vec3(.04267481,.09795667,.00086147)+p[18]*vec3(.05625475,.09415219,.00036904)+p[19]*vec3(.0694704,.08678102,.00019143)+p[20]*vec3(.08305315,.07885653,.00014956)+p[21]*vec3(.0861261,.0635267,9.231e-5)+p[22]*vec3(.09046614,.05374142,6.813e-5)+p[23]*vec3(.08500387,.04264606,2.883e-5)+p[24]*vec3(.07090667,.03161735,1.577e-5)+p[25]*vec3(.05062889,.02088521,3.94e-6)+p[26]*vec3(.03547396,.01386011,1.58e-6)+p[27]*vec3(.02146821,.00810264,0)+p[28]*vec3(.01251646,.0046301,0)+p[29]*vec3(.00680458,.00249138,0)+p[30]*vec3(.00346457,.0012593,0)+p[31]*vec3(.00149761,.00054165,0)+p[32]*vec3(.0007697,.00027795,0)+p[33]*vec3(.00040737,.00014711,0)+p[34]*vec3(.00016901,6.103e-5,0)+p[35]*vec3(9.522e-5,3.439e-5,0)+p[36]*vec3(4.903e-5,1.771e-5,0)+p[37]*vec3(2e-5,7.22e-6,0);}float f(float v,float p,float f){p*=pow(f,2.);return p/(v*pow(1.-f,2.)+p);}vec3 p(vec3 v,vec3 i,float r){float u[38],m[38];t(w(v),u);t(w(i),m);float S=p(u)[1],z=p(m)[1];r=f(S,z,r);float e[38];for(int i=0;i<38;i++){float p=(1.-r)*(pow(1.-u[i],2.)/(2.*u[i]))+r*(pow(1.-m[i],2.)/(2.*m[i]));e[i]=1.+p-sqrt(pow(p,2.)+2.*p);}return x(p(e));}vec4 p(vec4 v,vec4 f,float i){return vec4(p(v.xyz,f.xyz,i),mix(v.w,f.w,i));} #endif void main(){vec4 v=texture2D(u6,vec2(var.x,1.+var.y*-1.)),f=texture2D(u7,var),i,r=p(v,f,f.w);i=mix(v*mix(vec4(1),f,u1),r,.2);gl_FragColor=i;}`,rSeed,nSeed,sNoise;function setup(){rSeed=round(random(1e7)),nSeed=round(random(1e7));let e,t=[{rSeed:8077733,nSeed:4239393},{rSeed:6335389,nSeed:7709717},{rSeed:6711193,nSeed:8046416,paletteOverride:2},{rSeed:6862698,nSeed:8114669},{rSeed:7897312,nSeed:3981128},{rSeed:9340939,nSeed:9852448,paletteOverride:2},{rSeed:7589951,nSeed:9385453},{rSeed:4526625,nSeed:6452396},{rSeed:7838216,nSeed:8818273},{rSeed:7882561,nSeed:1244},{rSeed:7732610,nSeed:8393707}][parseInt(tokenData.tokenId)%1e6];rSeed=t.rSeed,nSeed=t.nSeed;let _=t.paletteOverride;sNoise=new openSimplexNoise(nSeed),print(rSeed,nSeed),randomSeed(rSeed),noiseSeed(nSeed),prepareCanvas(1e3),background(200),geometryBuffer=createGraphics(canvSzX,canvSzY),drawnBuffer=createGraphics(canvSzX,canvSzY,WEBGL),crayonBuffer=createGraphics(canvSzX,canvSzY,WEBGL),geometryBuffer.background(color("#d0c6b9")),drawnBuffer.background(color("#b0a394")),crayonBuffer.background(0),geometryBuffer.noSmooth(),crayonShader=crayonBuffer.createShader(vertShader,crayonFragShader),blendShader=drawnBuffer.createShader(vertShader,blendFragShader),unionBufferW=targetSzX,unionBufferH=targetSzY;for(let $=0;$<unionBufferW*unionBufferH;$++)unionBuffer.push(!1);slopeDir=random([-1,1]),lightAngle=random([PI/2+PI/4,-PI/4]),print(degrees(lightAngle)),toEye=createVector(0,1,-1).normalize(),lightDir=_normalize(_createV(cos(lightAngle),-.8,sin(lightAngle))),prepHeightmap(),print("perspectiveType",perspectiveType),print("perspectivePower",perspectivePower),print("perspectiveShift",perspectiveShift),booleanShapes=[],hashes=[],pickPalette(random([1,2,4])),_&&pickPalette(_),bgColor=color("#f4eaea"),random(1),random(1);let i,n,a=random(100,120);for(let r=0;r<2;r++)for(let s=0;s<1;s++){let l=_rotate(_createV(map(r,0,max(1,1),-1,1)*a*2,0,100*map(r,0,max(1,1),-1,1)),0,0,0);l.z+=350,l.y=heightMap(l.x,l.z);let o;print("nSegs",20),o=stem({basePos:l,nSegs:20,branchNSegsFunc:function(e,t,_,$){let i;return max(ceil((e-t)*(i=_==$?.5:1==_?.1:2.7)),1)},branchPlacementFunc:function(){return 0},pitch:0,roll:PI,weightFunc:function(e,t){return e==t?.8:.3},weight:12,baseDepth:4,depth:4,trunk:!0,_basePos:l,branchProbLerpVal:0,baseBranchProb:-.15,tipBranchProb:2.5,fruitProb:.1,type:"fruit tree",trunkTwistAngle:PI/1.5,leafMultiplier:1,nChildBranchesMin:1,nChildBranchesMax:1,leafProbTip:2,petalPalette:petalPalette[0],trunkWonkNoiseScale:.1,branchWonkNoiseScale:.1,branchWindStrength:1,minTrunkWindStrength:0,maxTrunkWindStrength:1,minChildBranchAngle:PI/5,maxChildBranchAngle:PI/2.5,stemPalette:stemPalette,nTrunkGrowthDirections:2,straightTrunkStrengthBase:.025,straightTrunkStrengthTip:.0125,straightBaseExp:1});for(let h=0;h<o.length;h++){let p=o[h];if(p.fruit&&(n=i,i=p.tipPos,ball({flowerRotation:_createV(p.pitch,0,p.roll+PI),flowerTranslation:p.tipPos,flowerProportions:_createV(100,100,200),flowerScale:1.1*random(.35,.35),xExtents:.5,nPetals:2,scl:p.flowerScale,stem:p,palette:p.petalPalette,br:doubleExponentialSigmoid(pow(norm(_dot(_normalize(p.normal),_scalarMult(lightDir,1)),-1,1),1),.5)}),.3>random(1))){let f=_add(_createV(p.tipPos.x,heightMap(p.tipPos.x,p.tipPos.z)+3,p.tipPos.z),_rotate(_createV(random(100),0,0),0,random(TAU),0));ball({flowerRotation:_createV(p.pitch,0,p.roll+PI),flowerTranslation:f,flowerProportions:_createV(100,100,200),flowerScale:1.1*random(.35,.35),xExtents:.5,nPetals:2,scl:p.flowerScale,stem:p,palette:p.petalPalette,br:constrain(pow(terrainLight(f.x,f.z),1)+.1*random(-1,1),0,1)}),placeShadow(f.x,f.z,3,1)}for(let u=0;u<p.leaves.length;u++){let d=p.leaves[u],c=_createV(0,random(-1,1)*PI/4,p.roll+PI),g=_createV(120,100,20),m=1*random(.25,.3),v=pow(doubleExponentialSigmoid(norm(_dot(_normalize(d.normal),_scalarMult(lightDir,1)),-1,1),0),1),x=pow(doubleExponentialSigmoid(norm(_dot(_normalize(p.normal),_scalarMult(lightDir,1)),-1,1),.8),2),b=lerp(v,x,.7);if(cupShape({xSegments:4,ySegments:4,transforms:[{type:"s",val:_scalarMult(g,m)},{type:"r",val:c},{type:"t",val:d}],xMinExtent:-.3,xMaxExtent:.3,yMinExtent:0,yMaxExtent:1,palette:leafPalette,br:b,brLerp:.4,contrast:0,drawPolygonLines:!0}),.05>random(1)){let S=_createV(d.x,heightMap(d.x,d.z)-13,d.z);cupShape({xSegments:4,ySegments:4,transforms:[{type:"s",val:_scalarMult(g,m)},{type:"r",val:_createV(PI/2,0,0)},{type:"r",val:_createV(0,random(TAU),0)},{type:"t",val:S}],xMinExtent:-.3,xMaxExtent:.3,yMinExtent:0,yMaxExtent:1,palette:leafPalette,br:constrain(pow(terrainLight(d.x,d.z),1)+.2*random(-1,1),0,1),brLerp:.8,contrast:0,drawPolygonLines:!1})}}}}for(let y=0;y<15e3;y++){let w=1200*random(1),z=_createV(map(w,0,1200,1,1.03)*random(-1,1)*targetSzX*1.2/2,0,w);z.y=heightMap(z.x,z.z);let k=pow(terrainLight(z.x,z.z),1)+.2*random(-1,1);grassShape({pos:z,scale:_createV(10,random(5,20),0),palette:grassPalette,br:k})}addHashes(),booleanShapes.sort(function(e,t){return t.zIndex-e.zIndex});var P=performance.now();occlude();var B=performance.now();print("occluding time:",B-P),P=performance.now(),hashes.sort(function(e,t){return t.zIndex-e.zIndex}),print("sorting time:",(B=performance.now())-P)}function stem(e){let t=_copyV(e.basePos),_=_rotate(_createV(0,25,0),e.pitch,0,e.roll),$=[_3dTo2d(e.basePos)];$[0].weightAdjust=1;let i=e.pitch,n=0,a=e.roll,r=[],s=[],l=[],o=e.nTrunkGrowthDirections,h=[];if(e.trunk)for(let p=0;p<o;p++)if(p==o-1)l.push({targetOffset:PI+random([-1,1])*random(.5,1)*PI/2,turnStep:.3});else if(0==p)l.push({targetOffset:PI,turnStep:.8});else{let f=sNoise.noise3D(.01*t.x+p*e.trunkWonkNoiseScale+1213,.01*t.y+p*e.trunkWonkNoiseScale+12213,.01*t.z+p*e.trunkWonkNoiseScale+12421)*e.trunkTwistAngle+PI;l.push({targetOffset:f,turnStep:.5})}else for(let u=0;u<2;u++)if(0==u)h.push({targetOffset:-PI,turnStep:.2});else if(1==u){if(0==e.depth)h.push({targetOffset:0,turnStep:random(.5,.8)});else{let d=sNoise.noise3D(.001*t.x+u*e.branchWonkNoiseScale+1321213,.001*t.y+u*e.branchWonkNoiseScale+122153,.001*t.z+u*e.branchWonkNoiseScale+1242211)*PI/16+PI;h.push({targetOffset:d,turnStep:.2})}}else{let c=random([-1,1])*random(0,1)*PI;h.push({targetOffset:c,turnStep:.2})}let g=1;for(let m=0;m<e.nSegs;m++){let v=!1;if(e.depth>0){let x=round(map(m,0,e.nSegs,e.nChildBranchesMin,e.nChildBranchesMax));for(let b=0;b<x;b++)if(e.trunk&&m==e.nSegs-1||random(1)<map(m,0,e.nSegs-1,e.baseBranchProb,(e.trunk?.85:1)*e.tipBranchProb)){let S=_add(t,_lerp(_createV(),_,e.branchPlacementFunc())),y=sNoise.noise3D(.8*S.x,.8*S.z,b);y=map(m,e.nSegs,0,e.minChildBranchAngle,e.maxChildBranchAngle)*(y>0?1:-1);let w=stem({basePos:S,nSegs:e.branchNSegsFunc(e.nSegs,m,e.depth,e.baseDepth),branchNSegsFunc:e.branchNSegsFunc,branchPlacementFunc:e.branchPlacementFunc,pitch:i+random([-1,1])*random(PI/5,PI/3)*1,roll:a+1*y,weightFunc:e.weightFunc,weight:e.weight*e.weightFunc(e.depth,e.baseDepth),baseDepth:e.baseDepth,depth:max(0,e.depth-round(random(1,map(m,0,e.nSegs,1,e.depth)))),trunk:!1,_basePos:e._basePos,branchProbLerpVal:e.branchProbLerpVal,baseBranchProb:e.baseBranchProb,baseBranchProb:lerp(e.baseBranchProb,e.tipBranchProb,e.branchProbLerpVal),tipBranchProb:e.tipBranchProb,fruitProb:e.fruitProb,type:e.type,trunkTwistAngle:e.trunkTwistAngle,leafMultiplier:e.leafMultiplier,nChildBranchesMin:e.nChildBranchesMin,nChildBranchesMax:e.nChildBranchesMax,leafProbTip:e.leafProbTip,petalPalette:e.petalPalette,trunkWonkNoiseScale:e.trunkWonkNoiseScale,branchWonkNoiseScale:e.branchWonkNoiseScale,trunkBranchAngleExp:e.trunkBranchAngleExp,branchWindStrength:e.branchWindStrength,minTrunkWindStrength:e.minTrunkWindStrength,maxTrunkWindStrength:e.maxTrunkWindStrength,minChildBranchAngle:e.minChildBranchAngle,maxChildBranchAngle:e.maxChildBranchAngle,stemPalette:e.stemPalette,nTrunkGrowthDirections:e.nTrunkGrowthDirections,straightTrunkStrengthBase:e.straightTrunkStrengthBase,straightTrunkStrengthTip:e.straightTrunkStrengthTip,straightBaseExp:e.straightBaseExp});for(let z=0;z<w.length;z++)r.push(w[z]);v=!0}}let k,P;if(e.trunk){let B=floor(pow(map(m,0,e.nSegs,0,1),.5)*l.length);k=l[B].targetOffset,k+=lerpAngle(k,PI,expSkewMap(m,0,e.nSegs,e.straightTrunkStrengthBase,e.straightTrunkStrengthTip,e.straightBaseExp)),P=l[B].turnStep}else{let V=floor(map(m,0,e.nSegs,0,h.length));k=h[V].targetOffset,P=h[V].turnStep}let M=sNoise.noise3D(.004*t.x+124213,.004*t.y+124213,.012*t.z+124213)*map(m,0,e.nSegs,PI/16,PI/32),T=lerpAngle(i,n=sNoise.noise2D(.03*t.x+14213,.03*t.z+12423)*PI/2,e.trunk?0:.2)+M;i+=T,_=_rotate(_,T,0,0);let W=lerpAngle(a,0+k,P)+M*(e.trunk?map(m,0,e.nSegs,e.minTrunkWindStrength,e.maxTrunkWindStrength):e.branchWindStrength)+(v?e.depth/3*PI/16:0)*random([-1,1]);a+=W,_=_rotate(_,0,0,W);let A=max(1,ceil(.1*_mag(_)));for(let q=0;q<A;q++){let j=map(q,0,A,0,1),H=_add(t,_scalarMult(_,j)),X=_add(_scalarMult(_createV(cos(lightAngle),sin(lightAngle)),(H.y-heightMap(H.x,H.z))*.25),_rotate(_createV(40*pow((e._basePos.y-H.y)*.001,2)+1,0),0,0,random(TAU)));placeShadow(H.x+X.x,H.z+X.y,3,max(0,.1*pow((1-(e._basePos.y-H.y)*.001)*2-1,2)))}t=_add(t,_),g*=v?.95:1;let D=_3dTo2d(t);if(D.weightAdjust=g,D.weight=e.weight*g,$.push(D),random(1)<pow(map(m,-1,e.nSegs,0,e.leafProbTip),1)*(e.trunk?.5:1)){let Y=.05*_mag(_)*e.leafMultiplier;for(let F=0;F<Y;F++){let I;I=0==e.depth?random(.25):random(1);let E=_add(_add(t,_scalarMult(_,I)),_createV(0,0,0*random(-1,1)));E.normal=_normalize(_),s.push(E)}}}let L=[],N=[],C,O=0;for(let R=0;R<$.length;R++){let U,Z,J,G,K;if(R<$.length-1){J=$[R];let Q=_sub(G=$[R+1],J);C=O,O=atan2(Q.y,Q.x),K=C+lerpAngle(C,O,.5)}else J=$[R],K=O=C;0==R&&(K=e.roll+PI/2);let ee=max(1.5,e.weight*$[R].weightAdjust);U=_rotate(_createV(0,-ee,0),0,0,K),Z=_rotate(_createV(0,ee,0),0,0,K);let et=_add(U,J),e_=_add(Z,J);et.hashAngle=O,e_.hashAngle=O,L.push(et),N.push(e_)}for(let e$=0;e$<L.length-1;e$++){let e0=max(2,round(.23*$[e$].weight));for(let ei=0;ei<e0;ei++){let en=map(ei,0,e0,0,1),ea=map(ei+1,0,e0,0,1),er=_scalarMult(_normalize(_rotate(_sub($[e$+1],$[e$]),0,0,PI/2)),map(ei,0,e0-1,-1,1)),es=doubleExponentialSigmoid(pow(norm(_dot(er,lightDir),-1,1),1),.8),el=new _Shape(!0);el.setPoints([_lerp(L[e$],N[e$],en),_lerp(L[e$+1],N[e$+1],en),_lerp(L[e$+1],N[e$+1],ea),_lerp(L[e$],N[e$],ea),]);let eo=constrain(map($[e$].y,_3dTo2d(e.basePos).y,_3dTo2d(e.basePos).y-200,0,1),0,1),eh=lerp(es,eo,.5);el.fill=paletteLerp(e.stemPalette,eh,!0),el.zIndex=e.basePos.z,el.occlude=!0,el.hashWeight=1.5,el.nHashesMult=.9,el.scaleAmt=3,el.hashAngle=L[e$].hashAngle,el.nSegments=1,booleanShapes.push(el)}}let ep={tipDir:_,tipPos:t,pitch:i,roll:a,flowerScale:random(.5,1),normal:_sub(t,_add(e._basePos,_createV(0,-350,0))),leaves:s,basePos:e._basePos,fruit:random(1)<e.fruitProb,petalPalette:e.petalPalette};return 0==e.depth?[ep]:(r.push(ep),r)}function cupShape(e){var t=function(e,t,_){return sqrt(1-sq(map(e,t,_,-1,1)))};for(let _=0;_<e.x
function openSimplexNoise(e){"use strict";let t=e=>e.split(",").map(e=>new Uint8Array(e.split("").map(e=>Number(e)))),_=(e,t,_)=>new Int8Array(_.split("").map(_=>parseInt(_,t)+e)),$=e=>e.split(",").map(e=>parseInt(e,32)),i=1/47,n=1/103,a=1/30,r=.7320508075688772/2,s=1/3,l=1.2360679774997898/4,o=(.5773502691896258-1)/2,h=-.5/3,p=(.4472135954999579-1)/4;var f=t("110101000,110101211"),u=t("0000110010101001,2110210120113111,110010101001211021012011"),d=t("0000011000101001001010001,3111031101310113011141111,11000101001001010001211002101021001201102010120011,31110311013101130111211002101021001201102010120011");let c=_(-5,11,"a77a073aa3700330"),g=_(-11,23,"0ff7mf7fmmfffmfffm07f70f77mm7ff0ff7m0f77m77f0mf7fm7ff0077707770m77f07f70"),m=_(-3,7,"6444464444644446044426442464244662444044426442460244204422642246642446244404442604242624240424266224402442044226022420242204222664424642446244400442264224622440624240424262424002422042226222406422462244024420042226222402242062224022420242200222202222022220");var v=()=>new Uint8Array([0,1,1,0,4,1,17,0,20,2,21,2,22,5,23,5,26,4,39,3,42,4,43,3]),x=()=>new Uint16Array($("0,2,1,1,2,2,5,1,6,0,7,0,10,2,12,2,41,1,45,1,50,5,51,5,g6,0,g7,0,h2,4,h6,4,k5,3,k7,3,l0,5,l1,5,l2,4,l5,3,l6,4,l7,3,l8,d,l9,d,la,c,ld,e,le,c,lf,e,m8,k,ma,i,p9,l,pd,n,q8,k,q9,l,15e,j,15f,m,16a,i,16e,j,19d,n,19f,m,1a8,f,1a9,h,1aa,f,1ad,h,1ae,g,1af,g,1ag,b,1ah,a,1ai,b,1al,a,1am,9,1an,9,1bg,b,1bi,b,1eh,a,1el,a,1fg,8,1fh,8,1qm,9,1qn,9,1ri,7,1rm,7,1ul,6,1un,6,1vg,8,1vh,8,1vi,7,1vl,6,1vm,7,1vn,6")),b=()=>new Uint32Array($("0,3,1,2,2,3,5,2,6,1,7,1,8,3,9,2,a,3,d,2,g,3,i,3,m,1,n,1,o,3,q,3,11,2,15,2,16,1,17,1,19,2,1d,2,1m,1,1n,1,1o,0,1p,0,1q,0,1r,0,1s,0,1t,0,1u,0,1v,0,80,3,82,3,88,3,8a,3,8g,3,8i,3,8o,3,8q,3,201,2,205,2,209,2,20d,2,211,2,215,2,219,2,21d,2,280,9,281,9,288,9,289,9,g06,1,g07,1,g0m,1,g0n,1,g16,1,g17,1,g1m,1,g1n,1,g82,8,g86,8,g8i,8,g8m,8,i05,6,i07,6,i15,6,i17,6,i80,9,i81,9,i82,8,i85,6,i86,8,i87,6,i88,9,i89,9,i8i,8,i8m,8,i95,6,i97,6,401o,0,401p,0,401q,0,401r,0,401s,0,401t,0,401u,0,401v,0,408o,7,408q,7,409o,7,409q,7,4219,5,421d,5,421p,5,421t,5,4280,9,4281,9,4288,9,4289,9,428o,7,428q,7,4299,5,429d,5,429o,7,429p,5,429q,7,429t,5,4g1m,4,4g1n,4,4g1u,4,4g1v,4,4g82,8,4g86,8,4g8i,8,4g8m,8,4g8o,7,4g8q,7,4g9m,4,4g9n,4,4g9o,7,4g9q,7,4g9u,4,4g9v,4,4i05,6,4i07,6,4i15,6,4i17,6,4i19,5,4i1d,5,4i1m,4,4i1n,4,4i1p,5,4i1t,5,4i1u,4,4i1v,4,4i80,9,4i81,9,4i82,8,4i85,6,4i86,8,4i87,6,4i88,9,4i89,9,4i8i,8,4i8m,8,4i8o,7,4i8q,7,4i95,6,4i97,6,4i99,5,4i9d,5,4i9m,4,4i9n,4,4i9o,7,4i9p,5,4i9q,7,4i9t,5,4i9u,4,4i9v,4,4ia0,15,4ia1,15,4ia2,14,4ia5,12,4ia6,14,4ia7,12,4ia8,15,4ia9,15,4iai,14,4iam,14,4iao,13,4iaq,13,4ib5,12,4ib7,12,4ib9,11,4ibd,11,4ibm,10,4ibn,10,4ibo,13,4ibp,11,4ibq,13,4ibt,11,4ibu,10,4ibv,10,4ii0,1h,4ii2,1g,4ii8,1h,4iii,1g,4iio,1f,4iiq,1f,4ka1,1e,4ka5,1d,4ka9,1e,4kb5,1d,4kb9,1c,4kbd,1c,4ki0,1h,4ki1,1e,4ki8,1h,4ki9,1e,52a6,1b,52a7,1a,52am,1b,52b7,1a,52bm,19,52bn,19,52i2,1g,52i6,1b,52ii,1g,52im,1b,54a5,1d,54a7,1a,54b5,1d,54b7,1a,54i0,v,54i1,s,54i2,v,54i5,s,54i6,p,54i7,p,8ibo,18,8ibp,17,8ibq,18,8ibt,17,8ibu,16,8ibv,16,8iio,1f,8iiq,1f,8ijo,18,8ijq,18,8kb9,1c,8kbd,1c,8kbp,17,8kbt,17,8ki8,u,8ki9,r,8kio,u,8kj9,r,8kjo,m,8kjp,m,92bm,19,92bn,19,92bu,16,92bv,16,92ii,t,92im,o,92iq,t,92jm,o,92jq,l,92ju,l,94b5,q,94b7,n,94bd,q,94bn,n,94bt,k,94bv,k,94i0,v,94i1,s,94i2,v,94i5,s,94i6,p,94i7,p,94i8,u,94i9,r,94ii,t,94im,o,94io,u,94iq,t,94j5,q,94j7,n,94j9,r,94jd,q,94jm,o,94jn,n,94jo,m,94jp,m,94jq,l,94jt,k,94ju,l,94jv,k,94k0,1t,94k1,1s,94k2,1t,94k5,1s,94k6,1r,94k7,1r,94k8,1q,94k9,1p,94ki,1n,94km,1m,94ko,1q,94kq,1n,94l5,1k,94l7,1j,94l9,1p,94ld,1k,94lm,1m,94ln,1j,94lo,1o,94lp,1o,94lq,1l,94lt,1i,94lu,1l,94lv,1i,94s0,1t,94s2,1t,94s8,1q,94si,1n,94so,1q,94sq,1n,96k1,1s,96k5,1s,96k9,1p,96l5,1k,96l9,1p,96ld,1k,96s0,2f,96s1,2f,96s8,2c,96s9,2c,9kk6,1r,9kk7,1r,9kkm,1m,9kl7,1j,9klm,1m,9kln,1j,9ks2,2e,9ks6,2e,9ksi,29,9ksm,29,9mk5,2d,9mk7,2d,9ml5,26,9ml7,26,9ms0,2f,9ms1,2f,9ms2,2e,9ms5,2d,9ms6,2e,9ms7,2d,d4lo,1o,d4lp,1o,d4lq,1l,d4lt,1i,d4lu,1l,d4lv,1i,d4so,2b,d4sq,28,d4to,2b,d4tq,28,d6l9,2a,d6ld,25,d6lp,2a,d6lt,25,d6s8,2c,d6s9,2c,d6so,2b,d6t9,2a,d6to,2b,d6tp,2a,dklm,27,dkln,24,dklu,27,dklv,24,dksi,29,dksm,29,dksq,28,dktm,27,dktq,28,dktu,27,dml5,26,dml7,26,dmld,25,dmln,24,dmlt,25,dmlv,24,dms0,23,dms1,23,dms2,22,dms5,20,dms6,22,dms7,20,dms8,23,dms9,23,dmsi,22,dmsm,22,dmso,21,dmsq,21,dmt5,20,dmt7,20,dmt9,1v,dmtd,1v,dmtm,1u,dmtn,1u,dmto,21,dmtp,1v,dmtq,21,dmtt,1v,dmtu,1u,dmtv,1u,dmu0,j,dmu1,j,dmu2,i,dmu5,g,dmu6,i,dmu7,g,dmu8,j,dmu9,j,dmui,i,dmum,i,dmuo,h,dmuq,h,dmv5,g,dmv7,g,dmv9,f,dmvd,f,dmvm,e,dmvn,e,dmvo,h,dmvp,f,dmvq,h,dmvt,f,dmvu,e,dmvv,e,dn60,j,dn61,j,dn62,i,dn66,i,dn68,j,dn69,j,dn6i,i,dn6m,i,dn6o,h,dn6q,h,dn7o,h,dn7q,h,dou0,j,dou1,j,dou5,g,dou7,g,dou8,j,dou9,j,dov5,g,dov7,g,dov9,f,dovd,f,dovp,f,dovt,f,dp60,j,dp61,j,dp68,j,dp69,j,e6u2,i,e6u5,g,e6u6,i,e6u7,g,e6ui,i,e6um,i,e6v5,g,e6v7,g,e6vm,e,e6vn,e,e6vu,e,e6vv,e,e762,i,e766,i,e76i,i,e76m,i,e8u5,g,e8u7,g,e8v5,g,e8v7,g,e960,d,e961,d,e962,d,e963,d,e964,d,e965,d,e966,d,e967,d,hmuo,h,hmuq,h,hmv9,f,hmvd,f,hmvm,e,hmvn,e,hmvo,h,hmvp,f,hmvq,h,hmvt,f,hmvu,e,hmvv,e,hn6o,h,hn6q,h,hn7o,h,hn7q,h,hov9,f,hovd,f,hovp,f,hovt,f,hp68,c,hp69,c,hp6o,c,hp6p,c,hp78,c,hp79,c,hp7o,c,hp7p,c,i6vm,e,i6vn,e,i6vu,e,i6vv,e,i76i,b,i76m,b,i76q,b,i76u,b,i77i,b,i77m,b,i77q,b,i77u,b,i8v5,a,i8v7,a,i8vd,a,i8vf,a,i8vl,a,i8vn,a,i8vt,a,i8vv,a,i960,d,i961,d,i962,d,i963,d,i964,d,i965,d,i966,d,i967,d,i968,c,i969,c,i96i,b,i96m,b,i96o,c,i96p,c,i96q,b,i96u,b,i975,a,i977,a,i978,c,i979,c,i97d,a,i97f,a,i97i,b,i97l,a,i97m,b,i97n,a,i97o,c,i97p,c,i97q,b,i97t,a,i97u,b,i97v,a")),S=_(-1,4,"112011021322233123132111"),y=_(-1,5,"112011210110211120110121102132212220132122202131222022243214231243124213241324123222113311221213131221123113311112202311112022311112220342223113342223311342223131322023113322023311320223113320223131322203311322203131"),w=_(-1,6,"11201112101121101102111120111210110121110211112011011211012111021322112220122210132121220212212013122120221212201321122201222102131212202122120213112220122210222532215232152231253212523125221325312252132521232513225123251223232211432114231123212143121421312312214132141231232112431124211323121241312412132311224113241123342221322203311134221232202331113421223202233111342221322203131134221232202313113412223022231311342221322203113134212232022311313412223022231131342212322023111334212232022311133412223022231113322201222101111132202122120111113202212122011111322012221021111132021221202111113201222102211111322201222103311132202122120331113220122210233111322201222103131132022121220313113202122120231311322021221203113132022121220311313201222102231131322012221023111332021221202311133201222102231113422111331113222042121131311322204211213113132220422111331113220242121131311322024211123111332202422111331113202242112131131320224211123111332022421211313113022242112131131302224211123111330222443211423115222244312142131522224413214123152222443112421135222244131241213522224411324112352222443211423113222044312142131322204413214123132220443211423113220244311242113322024413124121332202443121421313202244311242113320224411324112332022441321412313022244131241213302224411324112330222");let z=(e,t=e=>e)=>{for(var _=[],$=0;$<e;)_.push(t($++));return _};function k(e,t=1){return e=1664525*e+1013904223|0,(t-=1)>0?k(e,t):e}let P={_2D:{base:f,squish:r,dimensions:2,pD:S,lookup:v},_3D:{base:u,squish:s,dimensions:3,pD:y,lookup:x},_4D:{base:d,squish:l,dimensions:4,pD:w,lookup:b}};function B(e,t,_){var $=0;let i=t[_++],n={next:void 0};for(;$<e.dimensions;){let a="xyzw"[$];n[a+"sb"]=t[_+$],n["d"+a]=-t[_+$++]-i*e.squish}return n}function V(e){let t=[],_=e.dimensions,$=_*_;for(var i,n=0;n<e.pD.length;){let a=e.base[e.pD[n]],r,s;i=0;do s=B(e,a,i),r?r.next=s:t[n/$]=s,r=s,i+=_+1;while(i<a.length);s.next=B(e,e.pD,n+1),_>=3&&(s.next.next=B(e,e.pD,n+_+2)),4===_&&(s.next.next.next=B(e,e.pD,n+11)),n+=$}let l=[t,function e(t,_){var $;let i=t(),n=new Map;for($=0;$<i.length;$+=2)n.set(i[$],_[i[$+1]]);return n}(e.lookup,t)];return e.base=void 0,e.lookup=void 0,l}let[M,T]=V(P._2D),[W,A]=V(P._3D),[q,j]=V(P._4D),H=new Uint8Array(256),X=new Uint8Array(256),D=new Uint8Array(256),Y=new Uint8Array(256),F=new Uint8Array(z(256,e=>e));var I=k(e,3);return((e,t)=>{for(var _=0;_<256&&!0!==t(_++););})(256,e=>{e=255-e;var t=((I=k(I))+31)%(e+1);t+=t<0?e+1:0,H[e]=F[t],X[e]=14&H[e],D[e]=H[e]%24*3,Y[e]=252&H[e],F[t]=F[e]}),f=u=d=void 0,v=x=b=void 0,S=y=w=void 0,{noise2D(e,t){let _=X,$=H,n=c,a=(e+t)*o,s=e+a,l=t+a,h=Math.floor(s),p=Math.floor(l),f=(h+p)*r,u=e-(h+f),d=t-(p+f);for(var g,m=(()=>{let e=s-h,t=l-p,_=e+t;return T.get(e-t+1|_<<1|_+t<<2|_+e<<4)})(),v=0;void 0!==m;){let x=u+m.dx,b=d+m.dy,S=2-x*x-b*b;S>0&&(g=_[$[h+m.xsb&255]+(p+m.ysb)&255],S*=S,v+=S*S*(n[g++]*x+n[g]*b)),m=m.next}return v*i},noise3D(e,t,_){let $=D,i=H,a=g,r=(e+t+_)*h,l=e+r,o=t+r,p=_+r,f=Math.floor(l),u=Math.floor(o),d=Math.floor(p),c=(f+u+d)*s,m=e-(f+c),v=t-(u+c),x=_-(d+c);for(var b,S=(()=>{let e=l-f,t=o-u,_=p-d,$=e+t+_;return A.get(t-_+1|e-t+1<<1|e-_+1<<2|$<<3|$+_<<5|$+t<<7|$+e<<9)})(),y=0;void 0!==S;){let w=m+S.dx,z=v+S.dy,k=x+S.dz,P=2-w*w-z*z-k*k;P>0&&(b=$[(i[f+S.xsb&255]+(u+S.ysb)&255)+(d+S.zsb)&255],P*=P,y+=P*P*(a[b++]*w+a[b++]*z+a[b]*k)),S=S.next}return y*n},noise4D(e,t,_,$){let i=Y,n=H,r=m,s=(e+t+_+$)*p,o=e+s,h=t+s,f=_+s,u=$+s,d=Math.floor(o),c=Math.floor(h),g=Math.floor(f),v=Math.floor(u),x=(d+c+g+v)*l,b=e-(d+x),S=t-(c+x),y=_-(g+x),w=$-(v+x);for(var z,k=(()=>{let e=o-d,t=h-c,_=f-g,$=u-v,i=e+t+_+$;return j.get(_-$+1|t-_+1<<1|t-$+1<<2|e-t+1<<3|e-_+1<<4|e-$+1<<5|i<<6|i+$<<8|i+_<<11|i+t<<14|i+e<<17)})(),P=0;void 0!==k;){let B=b+k.dx,V=S+k.dy,M=y+k.dz,T=w+k.dw,W=2-B*B-V*V-M*M-T*T;W>0&&(z=i[((n[d+k.xsb&255]+(c+k.ysb)&255)+(g+k.zsb)&255)+(v+k.wsb)&255],W*=W,P+=W*W*(r[z++]*B+r[z++]*V+r[z++]*M+r[z]*T)),k=k.next}return P*a}}}function _createV(e,t,_){let $=_;void 0==$&&($=0);let i=t;void 0==i&&(i=0);let n=e;return void 0==n&&(n=0),{x:n,y:i,z:$}}function _copyV(e){return _createV(e.x,e.y,e.z)}function _normalize(e){let t=_mag(e);return 0==t?e:_scalarMult(e,1/t)}function _setMag(e,t){return _scalarMult(_normalize(e),t)}function _add(e,t){return _createV(e.x+t.x,e.y+t.y,e.z+t.z)}function _sub(e,t){return _createV(e.x-t.x,e.y-t.y,e.z-t.z)}function _mult(e,t){return _createV(e.x*t.x,e.y*t.y,e.z*t.z)}function _scalarMult(e,t){return _createV(e.x*t,e.y*t,e.z*t)}function _mag(e){return sqrt(sq(e.x)+sq(e.y)+sq(e.z))}function _dot(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function _cross(e,t){return _createV(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}function _lerp(e,t,_){return _createV(lerp(e.x,t.x,_),lerp(e.y,t.y,_),lerp(e.z,t.z,_))}function _rotate(e,t,_,$){let i=cos($),n=cos(_),a=cos(t),r=sin($),s=sin(_),l=sin(t),o=_createV(e.x,e.y,e.z),h=i,p=r,f=0,u=-r,d=i,c=0,g=0,m=0,v=1;return o=_createV(o.x*h+o.y*u+o.z*g,o.x*p+o.y*d+o.z*m,o.x*f+o.y*c+o.z*v),h=n,p=0,f=s,u=0,d=1,c=0,g=-s,m=0,v=n,o=_createV(o.x*h+o.y*u+o.z*g,o.x*p+o.y*d+o.z*m,o.x*f+o.y*c+o.z*v),h=1,p=0,f=0,u=0,d=a,c=l,g=0,m=-l,v=a,o=_createV(o.x*h+o.y*u+o.z*g,o.x*p+o.y*d+o.z*m,o.x*f+o.y*c+o.z*v)}function fractalNoise(e){let t=e.x,_=e.y,$=e.z,i=e.nOctaves,n=e.scaleFallout,a=e.weightFallout,r=0,s=1,l=0,o=1;for(let h=0;h<i;h++)l+=s,r+=norm(sNoise.noise3D(t*o,_*o,$*o),-1,1)*s,o*=n,s*=a;return map(r,0,l,0,1)}function triNorm(e,t,_){let $=_sub(t,e),i=_sub(_,e);return _cross($,i)}let perspectiveType="perspective",perspectivePower=2,perspectiveShift=0,lowPerspective=!1;function _3dTo2d(e){let t;t=lowPerspective?_rotate(_add(e,_createV(0,0,0)),PI/8,0,0):_rotate(_add(e,_createV(0,0,0)),PI/4,0,0);let _;_="perspective"==perspectiveType?1.5*map(pow(constrain(map(t.z,-maxZ,maxZ,0,1),0,1),perspectivePower),0,1,lowPerspective?.25:.7,lowPerspective?1.5:1):1;let $=_createV(t.x/_,(t.y-0)/_+450+0);return(isNaN($.x)||isNaN($.y)||isNaN($.z))&&print("NAN!",$.x,$.y,$.z,perspectivePower,t.z),$}function intersectPoint(e,t,_,$){let i=e.x,n=e.y,a=t.x,r=t.y,s=_.x,l=_.y,o=$.x,h=$.y;if(i===a&&n===r||s===o&&l===h||0==(denominator=(h-l)*(a-i)-(o-s)*(r-n)))return!1;let p=((o-s)*(n-l)-(h-l)*(i-s))/denominator,f=((a-i)*(n-l)-(r-n)*(i-s))/denominator;return!(p<0)&&!(p>1)&&!(f<0)&&!(f>1)&&{x:i+p*(a-i),y:n+p*(r-n)}}function linesIntersect(e,t,_,$){let i=e.x,n=e.y,a=t.x,r=t.y,s=_.x,l=_.y,o=$.x,h=$.y;if(i==a&&n==r||s==o&&l==h)return!1;let p=a-i,f=r-n,u=s-o,d=l-h,c=i-s,g=n-l,m=d*c-u*g,v=f*u-p*d;if(v>0){if(m<0||m>v)return!1}else if(v<0&&(m>0||m<v))return!1;let x=p*g-f*c;if(v>0){if(x<0||x>v)return!1}else if(v<0&&(x>0||x<v))return!1;return 0!=v||0==i*(r-l)+a*(l-n)+s*(n-r)&&(!!(i>=s)&&!!(i<=o)||!!(i<=s)&&!!(i>=o)||!!(a>=s)&&!!(a<=o)||!!(a<=s)&&!!(a>=o)||!!(s>=i)&&!!(s<=a)||!!(s<=i)&&!!(s>=a))&&(!!(n>=l)&&!!(n<=h)||!!(n<=l)&&!!(n>=h)||!!(r>=l)&&!!(r<=h)||!!(r<=l)&&!!(r>=h)||!!(l>=n)&&!!(l<=r)||!!(l<=n)&&!!(l>=r))}function sign(e,t,_){return(e.x-_.x)*(t.y-_.y)-(t.x-_.x)*(e.y-_.y)}function pointInTriangle(e,t,_,$){let i,n,a,r,s;return i=sign(e,t,_),n=sign(e,_,$),a=sign(e,$,t),r=i<0||n<0||a<0,s=i>0||n>0||a>0,!(r&&s)}function drawTriangleToBuffer(e,t,_,$){let i=_createV(map(e.x,-targetSzX/2,targetSzX/2,0,unionBufferW),map(e.y,-targetSzY/2,targetSzY/2,0,unionBufferH)),n=_createV(map(t.x,-targetSzX/2,targetSzX/2,0,unionBufferW),map(t.y,-targetSzY/2,targetSzY/2,0,unionBufferH)),a=_createV(map(_.x,-targetSzX/2,targetSzX/2,0,unionBufferW),map(_.y,-targetSzY/2,targetSzY/2,0,unionBufferH)),r=min(e.x,min(t.x,_.x)),s=max(e.x,max(t.x,_.x)),l=min(e.y,min(t.y,_.y)),o=max(e.y,max(t.y,_.y));for(let h=r;h<=s;h++)for(let p=l;p<=o;p++){let f=_createV(h,p);pointInTriangle(f,i,n,a)&&setBufferIJ(h,p,!0,$)}}function setBufferIJ(e,t,_,$){e>=0&&e<unionBufferW&&t>=0&&t<unionBufferH&&($[e+t*unionBufferW]=_)}function getBufferIJ(e,t,_){return e>=0&&e<unionBufferW&&t>=0&&t<unionBufferH?_[e+t*unionBufferW]:null}function setBufferPoint(e,t,_){let $=_xyToij(e.x,e.y);setBufferIJ($.i,$.j,t,_)}function getBufferPoint(e,t){let _=_xyToij(e.x,e.y);return null==_||getBufferIJ(_.i,_.j,t)}function _xyToij(e,t){let _=floor(map(e,-targetSzX/2,targetSzX/2,0,unionBufferW)),$=floor(map(t,-targetSzY/2,targetSzY/2,0,unionBufferH));return _>=0&&_<unionBufferW&&$>=0&&$<unionBufferH?{i:_,j:$}:null}function lerpAngle(e,t,_){let $=t-e;return $>PI?$-=TAU:$<-PI&&($+=TAU),$*_}function doubleExponentialSigmoid(e,t){t=1-(t=min(.99999,max(1e-5,t)));let _=0;return e<=.5?pow(2*e,1/t)/2:1-pow(2*(1-e),1/t)/2}function drawStroke(e,t,_){let $=[],i=!1;for(let n=0;n<e.points.length;n++)!0==e.lineSegVis[n]?i?$[$.length-1].push(e.points[n]):($.push([e.points[n]]),i=!0):(i&&$[$.length-1].push(e.points[n]),i=!1);if(e.closed&&e.lineSegVis[e.lineSegVis.length-1]&&$[$.length-1].push(e.points[0]),$.length>0)for(let a of $){let r=1,s=[],l=[];for(let o=0;o<a.length-1;o++){r=map(abs(a.length/2-o),0,a.length-1,1,1)*t*.6;let h=_rotate(_scalarMult(_normalize(_sub(a[o+1],a[o])),r),0,0,PI/2);s.push(_add(a[o],h)),h=_rotate(_scalarMult(_normalize(_sub(a[o+1],a[o])),r),0,0,-PI/2),l.push(_add(a[o],h))}r=map(abs(a.length/2-a.length-1),0,a.length-1,1,1)*t*.6;let p=_rotate(_scalarMult(_normalize(_sub(a[0],a[a.length-1])),r),0,0,-PI/2);s.push(_add(a[a.length-1],p)),p=_rotate(_scalarMult(_normalize(_sub(a[0],a[a.length-1])),r),0,0,PI/2),l.push(_add(a[a.length-1],p)),_.noStroke(),_.beginShape();for(let f=0;f<s.length;f++)_.vertex(s[f].x,s[f].y);for(let u=l.length-1;u>=0;u--)_.vertex(l[u].x,l[u].y);_.endShape(CLOSE),s=null,l=null}$=null}function prepareCanvas(e){targetSzY=floor((targetSzX=e)*heightToWidth),print(targetSzX,targetSzY),windowHeight/windowWidth>heightToWidth?(canvSzX=windowWidth*mag,canvSzY=round(windowWidth*heightToWidth*mag)):(canvSzY=windowHeight*mag,canvSzX=round(windowHeight/heightToWidth*mag)),sizeAdjust=canvSzX/targetSzX,print(canvSzX,canvSzY),createCanvas(canvSzX,canvSzY)}function addHashes(){print("adding hashes");let e=round(targetSzY/2);for(let t=0;t<15;t++){for(let _=0;_<e;_++){let $=map(_,0,e-1,-targetSzY/2,targetSzY/2),i=_createV(-targetSzX/2,$),n=_createV(targetSzX/2,$),a=new _Line(i.x,i.y,n.x,n.y,2);a.zIndex=booleanShapes[0].zIndex+1e4,a.fill=bgColor,a.hashWeight=2,a.bg=!0,bgHashes.push(a)}for(let r=0;r<e;r++){let s=map(r,0,e-1,-targetSzX/2,targetSzX/2),l=_createV(s,-targetSzY/2),o=_createV(s,targetSzY/2),h=new _Line(l.x,l.y,o.x,o.y,2);h.zIndex=booleanShapes[0].zIndex+1e4,h.fill=bgColor,h.hashWeight=2,h.bg=!0,bgHashes.push(h)}}bgHashes.sort(function(e,t){return random(1)})}function occlude(){print("occluding");for(let e=booleanShapes.length-1;e>=0;e--)if(booleanShapes[e].checkOnScreen()&&!booleanShapes[e].hidden){if(booleanShapes[e].subtractBuffer(unionBuffer,!0),void 0!=booleanShapes[e].fill&&booleanShapes[e].closed){let t=[],_=max(booleanShapes[e].maxY-booleanShapes[e].minY,booleanShapes[e].maxX-booleanShapes[e].minX),$=ceil(_*(void 0==booleanShapes[e].nHashesMult?.9:booleanShapes[e].nHashesMult)),i=booleanShapes[e].points[floor(booleanShapes[e].points.length/2)],n=void 0==booleanShapes[e].hashAngle?atan2(booleanShapes[e].center.y-i.y,booleanShapes[e].center.x-i.x):booleanShapes[e].hashAngle;for(let a=0;a<$;a++){let r=_rotate(_createV(2*_/1.7,0),0,0,n),s=_rotate(r,0,0,PI/2),l=.5*map(a,0,$,-1,1),o=_add(_add(booleanShapes[e].center,r),_scalarMult(s,l)),h=_add(_sub(booleanShapes[e].center,r),_scalarMult(s,l)),p,f=(p=new _Line(o.x,o.y,h.x,h.y,2)).intersectShape(booleanShapes[e]);for(let u=0;u<f.length;u++)if(booleanShapes[e].occlude){let d=f[u].subtractBuffer(unionBuffer);for(let c=0;c<d.length;c++){let g=d[c];g.drawLastSegment=!0,g.fill=booleanShapes[e].fill,g.strokeWeight=void 0==booleanShapes[e].hashWeight?1.5:booleanShapes[e].hashWeight,g.hidden||t.push(g)}}else f[u].drawLastSegment=!0,f[u].fill=booleanShapes[e].fill,f[u].strokeWeight=void 0==booleanShapes[e].hashWeight?1.5:booleanShapes[e].hashWeight,f[u].hidden||t.push(f[u])}t.zIndex=booleanShapes[e].zIndex,t.scaleAmt=void 0==booleanShapes[e].scaleAmt?1:booleanShapes[e].scaleAmt,t.wobbleAmt=void 0==booleanShapes[e].wobbleAmt?0:booleanShapes[e].wobbleAmt,hashes.push(t)}booleanShapes[e].drawToBuffer(unionBuffer)}}function expSkewRandom(e,t,_){return map(pow(random(1),_),0,1,e,t)}function expSkewNorm(e,t,_,$){return pow(norm(e,t,_),$)}function expSkewMap(e,t,_,$,i,n){return map(expSkewNorm(e,t,_,n),0,1,$,i)}let firstFalse=0,firstTrue=0;class _Shape{constructor(e){this.points=[],this.lineSegVis=[],this.closed=e,this.perimeter=0,this.hidden=!1}setPoints(e){this.points=[];let t=null;for(let _=0;_<e.length;_++)this.points.push(_copyV(e[_])),null!=t&&(this.perimeter+=dist(t.x,t.y,e[_].x,e[_].y)),t=this.points[_];this.setSegVis(),this.calculateBoundingBox()}checkOnScreen(){return!(this.maxX<-targetSzX/2||this.minX>targetSzX/2||this.maxY<-targetSzY/2||this.minY>targetSzY/2)}setSegVis(){for(let e=0;e<this.points.length;e++)this.lineSegVis[e]=!0}calculateBoundingBox(){if(this.points.length>0){if(this.minX=this.points[0].x,this.minY=this.points[0].y,this.maxX=this.points[0].x,this.maxY=this.points[0].y,this.points.length>1)for(let e=1;e<this.points.length;e++)this.minX=min(this.minX,this.points[e].x),this.minY=min(this.minY,this.points[e].y),this.maxX=max(this.maxX,this.points[e].x),this.maxY=max(this.maxY,this.points[e].y);this.center=_createV((this.minX+this.maxX)/2,(this.minY+this.maxY)/2)}}intersectShape(e){let t=0,_;!(_=this.points[0].x>=e.minX&&this.points[0].x<=e.maxX&&this.points[0].y>=e.minY&&this.points[0].y<=e.maxY&&e.pointInside(this.points[0]))&&(this.lineSegVis[0]=!1,t++);for(let $=1;$<this.points.length;$+=1){let i;i=this.points[$].x>=e.minX&&this.points[$].x<=e.maxX&&this.points[$].y>=e.minY&&this.points[$].y<=e.maxY&&e.pointInside(this.points[$]),(!_||!i)&&(this.lineSegVis[$]=!1,t++),_=i}1>abs(t-this.points.length)&&(this.hidden=!0)}subtractBuffer(e){let t=0,_=getBufferPoint(this.points[0],e);this.closed?this.lineSegVis[0]=!_:this.lineSegVis[0]=!!this.drawLastSegment&&!_;for(let $=1;$<this.points.length;$++){let i=getBufferPoint(this.points[$],e);(_||i)&&(this.lineSegVis[$]=!1,t++),_=i}t==this.points.length&&(this.hidden=!0)}pointInside(e){if(!this.closed||!(e.x>this.minX)||!(e.x<this.maxX)||!(e.y>this.minY)||!(e.y<this.maxY))return!1;{let t=_createV(e.x-1e3*random(1,10),e.y-1e3*random(1,10)),_=0;for(let $=0;$<this.points.length;$+=1)linesIntersect(t,e,this.points[$],this.points[($+1)%this.points.length])&&_++;return _%2==1}}draw(){let e=!1;push(),beginShape();for(let t=0;t<this.points.length;t++)!0==this.lineSegVis[t]||(e=!0,endShape(),beginShape()),vertex(this.points[t].x,this.points[t].y);this.closed?e?(this.lineSegVis[this.lineSegVis.length-1]&&vertex(this.points[0].x,this.points[0].y),endShape()):endShape(CLOSE):(noFill(),endShape()),pop()}drawToBuffer(e){for(let t=this.minX;t<=this.maxX;t++)for(let _=this.minY;_<=this.maxY;_++)if(this.pointInside(_createV(t,_))){let $=_xyToij(t,_);null!=$&&setBufferIJ($.i,$.j,!0,e)}}}class _Line extends _Shape{constructor(e,t,_,$,i){super(!1),this._x1=e,this._y1=t,this._x2=_,this._y2=$,this.x1=this._x1,this.y1=this._y1,this.x2=this._x2,this.y2=this._y2,this.axis=_normalize(_createV(this._x2-this._x1,this._y2-this._y1)),this.nPoints=i;for(let n=0;n<this.nPoints;n++){let a=map(n,0,this.nPoints-1,0,1);this.points.push(_createV(lerp(this.x1,this.x2,a),lerp(this.y1,this.y2,a))),this.lineSegVis.push(!0)}i<=1&&print("not enought points",i),this.setSegVis(),this.calculateBoundingBox()}wobbleAndScale(e,t){let _=_scalarMult(this.axis,t),$=_scalarMult(_rotate(this.axis,0,0,PI/2),random(-1,1)*e);this.x1=this._x1+$.x-_.x,this.y1=this._y1+$.y-_.y,$=_scalarMult(_rotate(this.axis,0,0,-PI/2),random(-1,1)*e),this.x2=this._x2+$.x+_.x,this.y2=this._y2+$.y+_.y,this.updatePoints()}updatePoints(){for(let e=0;e<this.nPoints;e++){let t=map(e,0,this.nPoints-1,0,1);this.points[e].x=lerp(this.x1,this.x2,t),this.points[e].y=lerp(this.y1,this.y2,t)}}subtractBuffer(e,t){if(t)super.subtractBuffer(e);else{let _=max(60,round(.1*dist(this._x1,this._y1,this._x2,this._y2))),$=null,i=null,n=null,a=null,r=[];for(let s=0;s<_;s++){let l=map(s,0,_-1,0,1),o=_lerp(_createV(this._x1,this._y1),_createV(this._x2,this._y2),l);if(i=$,$=getBufferPoint(o,e),null==n)$||(n=o);else if(i)$||($?print("check is null 1"):n=o);else if(i)print("_check is null");else if($){if(a){let h=new _Line(n.x,n.y,a.x,a.y,2);h.stroke=this.stroke,h.fill=this.fill,h.strokeWeight=this.strokeWeight,h.scaleAmt=this.scaleAmt,h.wobbleAmt=this.wobbleAmt,r.push(h)}n=null,a=null}else $?print("check is null 2"):a=o}if(n&&a){let p=new _Line(n.x,n.y,a.x,a.y,2);p.stroke=this.stroke,p.fill=this.fill,p.strokeWeight=this.strokeWeight,p.scaleAmt=this.scaleAmt,p.wobbleAmt=this.wobbleAmt,r.push(p)}return r}}intersectShape(e){let t=this.points[0],_=this.points[this.points.length-1],$=[];for(let i=0;i<e.points.length;i++){let n=e.points[i],a=e.points[(i+1)%e.points.length],r=intersectPoint(t,_,n,a);r&&(r.outside=_dot(_createV(t,_),_createV(n,a))>0,$.push(r))}if($.length%2!=0)return[];{let s=[];for(let l=0;l<$.length;l+=2){let o=$[l],h=$[l+1],p=new _Line(o.x,o.y,h.x,h.y,2);p.stroke=this.stroke,p.fill=this.fill,p.strokeWeight=this.strokeWeight,p.scaleAmt=this.scaleAmt,p.wobbleAmt=this.wobbleAmt,s.push(p)}return s}}}class _FlowLine extends _Shape{constructor(e,t,_,$,i){super(!1);let n=_createV(e,t),a=_createV(_,0);this.points.push(_copyV(n));let r=.01,s=7,l=random([-1,1]);for(let o=0;o<$;o++){let h=round(map(noise(n.x*r,n.y*r,i),0,1,-s,s))/s*PI/2;a=_rotate(_createV(l*_,0),0,0,h),n=_add(n,a),this.points.push(_copyV(n)),this.lineSegVis.push(!0)}}}class _Rect extends _Shape{constructor(e,t,_,$,i,n){super(!0),this.x=e,this.y=t,this.w=_,this.h=$,this.nPoints=i,this.w>this.h?(this.wPoints=this.nPoints,this.hPoints=this.h/this.w*this.nPoints):(this.wPoints=this.w/this.h*this.nPoints,this.hPoints=this.nPoints);for(let a=0;a<this.wPoints;a++){let r=_rotate(_createV(map(a,0,this.wPoints,0,this.w),0),0,0,n);r.x+=this.x,r.y+=this.y,this.points.push(r),this.lineSegVis.push(!0)}for(let s=0;s<this.hPoints;s++){let l=_rotate(_createV(this.w,map(s,0,this.hPoints,0,this.h)),0,0,n);l.x+=this.x,l.y+=this.y,this.points.push(l),this.lineSegVis.push(!0)}for(let o=0;o<this.wPoints;o++){let h=_rotate(_createV(map(o,0,this.wPoints,this.w,0),this.h),0,0,n);h.x+=this.x,h.y+=this.y,this.points.push(h),this.lineSegVis.push(!0)}for(let p=0;p<this.hPoints;p++){