artCodestring="var throwAndStop=e=>{throw console.log(e),new Error(e)};"undefined"==typeof p5&&throwAndStop("You must include p5js v1.4.0; see this contract's 'artCodeDependencies()' method.");const sunflowerIsDefined="undefined"!=typeof Sunflower,tokenDataIsDefined="undefined"!=typeof tokenData;var Helper;sunflowerIsDefined?Helper={...Sunflower}:tokenDataIsDefined&&(Helper={seed:tokenData.hash}),Helper?.seed||throwAndStop("To run, call 'seedForToken(...)' on this contract to get the seed. Then prefix this js code with 'tokenData = {hash: <seed>}', where <seed> is the seed as a string starting with '0x...'.");let isRegular,density,colors=[],weightMode=0,skipProbability=0;randomIdxFromList=e=>int(random(e.length)),randInt=(e,o)=>int(random(e,o+1)),drawSingleRune=(e,o,t,r)=>{numPoints=2,dh=float(t)/(numPoints-1),dv=float(t)/(numPoints-1),currentPoint=[e-t/2,o-t/2],points=[];for(let o=0;o<numPoints;o++){for(let e=0;e<numPoints;e++)points.push(currentPoint),currentPoint=[currentPoint[0]+dh,currentPoint[1]];currentPoint=[e-t/2,currentPoint[1]+dv]}if(currentPoint=points[randomIdxFromList(points)],minCurveLength=3,maxCurveLength=density,randomSkipRoll=random(100),shouldSkip=randomSkipRoll<r,!shouldSkip){beginShape();for(let e=0;e<int(random(minCurveLength,maxCurveLength));e++)curveVertex(currentPoint[0],currentPoint[1]),currentPoint=points[randomIdxFromList(points)];endShape()}},getRandomWeightMode=()=>(choices=[0,0,0,1],choices[randomIdxFromList(choices)]),getRandomColor=()=>color(random(255),random(255),random(255)),getColors=()=>{if(rand=random(100),colors=[],rand>=98)for(let e=0;e<5;e++)colors.push(getRandomColor());else if(rand>=95)for(let e=0;e<4;e++)colors.push(getRandomColor());else if(rand>=80)for(let e=0;e<3;e++)colors.push(getRandomColor());else if(rand>50)for(let e=0;e<2;e++)colors.push(getRandomColor());else colors.push(getRandomColor());return colors},colorToString=e=>e.toString("#rrggbb"),getRandomSkipProbability=()=>(rand=random(100),rand>=90?50:rand>=80?33:rand>=50?10:0),drawNeoRune=()=>{weight=1,noiseScale=.9,background(0,0,0),drawingSize=windowWidth,gridSize=30,canvasSize=windowWidth/2,runeSize=canvasSize/60,strokeCap(SQUARE),strokeWeight(1),delta=float(canvasSize)/(gridSize-1),currentDrawingPosition=[drawingSize/2-canvasSize/2,drawingSize/2-canvasSize/2];for(let e=0;e<gridSize;e++){for(let o=0;o<gridSize;o++)opacity=noise(random(e+o)*noiseScale),stroke(colors[randomIdxFromList(colors)]),isRegular?strokeWeight(opacity*weight):strokeWeight(opacity*randInt(4,6)),noFill(),drawSingleRune(currentDrawingPosition[0],currentDrawingPosition[1],runeSize,skipProbability),currentDrawingPosition=[currentDrawingPosition[0]+delta,currentDrawingPosition[1]];currentDrawingPosition=[drawingSize/2-canvasSize/2,currentDrawingPosition[1]+delta]}Helper.setMetadata?.("Color Count",colors.length);for(let e=0;e<colors.length;e++)Helper.setMetadata?.("Color #"+str(e+1),colorToString(colors[e]));Helper.setMetadata?.("Weight Mode",weightMode),Helper.setMetadata?.("Style",isRegular?"Regular":"Bold"),Helper.setMetadata?.("Skip Probability",skipProbability),Helper.setMetadata?.("Density",density)},windowResized=()=>{resizeCanvas(windowWidth,windowHeight)},draw=()=>{drawNeoRune()},setup=()=>{const e=Number(BigInt(Helper.seed)%BigInt("9007199254740991"));noiseSeed(e),randomSeed(e),createCanvas(windowWidth,windowHeight),frameRate(2),colors=getColors(),weightMode=getRandomWeightMode(),skipProbability=getRandomSkipProbability(),isRegular=random(100)<90,density=randInt(7,30),drawNeoRune()};"