UNPKG

three-stdlib

Version:

stand-alone library of threejs examples

1 lines 98.2 kB
{"version":3,"file":"MarchingCubes.cjs","sources":["../../src/objects/MarchingCubes.js"],"sourcesContent":["import { BufferAttribute, BufferGeometry, Color, DynamicDrawUsage, Mesh, Sphere, Vector3 } from 'three'\n\n/**\n * Port of http://webglsamples.org/blob/blob.html\n */\n\nclass MarchingCubes extends Mesh {\n constructor(resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 10000) {\n const geometry = new BufferGeometry()\n\n super(geometry, material)\n\n this.isMarchingCubes = true\n\n const scope = this\n\n // temp buffers used in polygonize\n\n const vlist = new Float32Array(12 * 3)\n const nlist = new Float32Array(12 * 3)\n const clist = new Float32Array(12 * 3)\n\n this.enableUvs = enableUvs\n this.enableColors = enableColors\n\n // functions have to be object properties\n // prototype functions kill performance\n // (tested and it was 4x slower !!!)\n\n this.init = function (resolution) {\n this.resolution = resolution\n\n // parameters\n\n this.isolation = 80.0\n\n // size of field, 32 is pushing it in Javascript :)\n\n this.size = resolution\n this.size2 = this.size * this.size\n this.size3 = this.size2 * this.size\n this.halfsize = this.size / 2.0\n\n // deltas\n\n this.delta = 2.0 / this.size\n this.yd = this.size\n this.zd = this.size2\n\n this.field = new Float32Array(this.size3)\n this.normal_cache = new Float32Array(this.size3 * 3)\n this.palette = new Float32Array(this.size3 * 3)\n\n //\n\n this.count = 0\n\n const maxVertexCount = maxPolyCount * 3\n\n this.positionArray = new Float32Array(maxVertexCount * 3)\n const positionAttribute = new BufferAttribute(this.positionArray, 3)\n positionAttribute.setUsage(DynamicDrawUsage)\n geometry.setAttribute('position', positionAttribute)\n\n this.normalArray = new Float32Array(maxVertexCount * 3)\n const normalAttribute = new BufferAttribute(this.normalArray, 3)\n normalAttribute.setUsage(DynamicDrawUsage)\n geometry.setAttribute('normal', normalAttribute)\n\n if (this.enableUvs) {\n this.uvArray = new Float32Array(maxVertexCount * 2)\n const uvAttribute = new BufferAttribute(this.uvArray, 2)\n uvAttribute.setUsage(DynamicDrawUsage)\n geometry.setAttribute('uv', uvAttribute)\n }\n\n if (this.enableColors) {\n this.colorArray = new Float32Array(maxVertexCount * 3)\n const colorAttribute = new BufferAttribute(this.colorArray, 3)\n colorAttribute.setUsage(DynamicDrawUsage)\n geometry.setAttribute('color', colorAttribute)\n }\n\n geometry.boundingSphere = new Sphere(new Vector3(), 1)\n }\n\n ///////////////////////\n // Polygonization\n ///////////////////////\n\n function lerp(a, b, t) {\n return a + (b - a) * t\n }\n\n function VIntX(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1),\n nc = scope.normal_cache\n\n vlist[offset + 0] = x + mu * scope.delta\n vlist[offset + 1] = y\n vlist[offset + 2] = z\n\n nlist[offset + 0] = lerp(nc[q + 0], nc[q + 3], mu)\n nlist[offset + 1] = lerp(nc[q + 1], nc[q + 4], mu)\n nlist[offset + 2] = lerp(nc[q + 2], nc[q + 5], mu)\n\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu)\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu)\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu)\n }\n\n function VIntY(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1),\n nc = scope.normal_cache\n\n vlist[offset + 0] = x\n vlist[offset + 1] = y + mu * scope.delta\n vlist[offset + 2] = z\n\n const q2 = q + scope.yd * 3\n\n nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu)\n nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu)\n nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu)\n\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu)\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu)\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu)\n }\n\n function VIntZ(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1),\n nc = scope.normal_cache\n\n vlist[offset + 0] = x\n vlist[offset + 1] = y\n vlist[offset + 2] = z + mu * scope.delta\n\n const q2 = q + scope.zd * 3\n\n nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu)\n nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu)\n nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu)\n\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu)\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu)\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu)\n }\n\n function compNorm(q) {\n const q3 = q * 3\n\n if (scope.normal_cache[q3] === 0.0) {\n scope.normal_cache[q3 + 0] = scope.field[q - 1] - scope.field[q + 1]\n scope.normal_cache[q3 + 1] = scope.field[q - scope.yd] - scope.field[q + scope.yd]\n scope.normal_cache[q3 + 2] = scope.field[q - scope.zd] - scope.field[q + scope.zd]\n }\n }\n\n // Returns total number of triangles. Fills triangles.\n // (this is where most of time is spent - it's inner work of O(n3) loop )\n\n function polygonize(fx, fy, fz, q, isol) {\n // cache indices\n const q1 = q + 1,\n qy = q + scope.yd,\n qz = q + scope.zd,\n q1y = q1 + scope.yd,\n q1z = q1 + scope.zd,\n qyz = q + scope.yd + scope.zd,\n q1yz = q1 + scope.yd + scope.zd\n\n let cubeindex = 0\n const field0 = scope.field[q],\n field1 = scope.field[q1],\n field2 = scope.field[qy],\n field3 = scope.field[q1y],\n field4 = scope.field[qz],\n field5 = scope.field[q1z],\n field6 = scope.field[qyz],\n field7 = scope.field[q1yz]\n\n if (field0 < isol) cubeindex |= 1\n if (field1 < isol) cubeindex |= 2\n if (field2 < isol) cubeindex |= 8\n if (field3 < isol) cubeindex |= 4\n if (field4 < isol) cubeindex |= 16\n if (field5 < isol) cubeindex |= 32\n if (field6 < isol) cubeindex |= 128\n if (field7 < isol) cubeindex |= 64\n\n // if cube is entirely in/out of the surface - bail, nothing to draw\n\n const bits = edgeTable[cubeindex]\n if (bits === 0) return 0\n\n const d = scope.delta,\n fx2 = fx + d,\n fy2 = fy + d,\n fz2 = fz + d\n\n // top of the cube\n\n if (bits & 1) {\n compNorm(q)\n compNorm(q1)\n VIntX(q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1)\n }\n\n if (bits & 2) {\n compNorm(q1)\n compNorm(q1y)\n VIntY(q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y)\n }\n\n if (bits & 4) {\n compNorm(qy)\n compNorm(q1y)\n VIntX(qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y)\n }\n\n if (bits & 8) {\n compNorm(q)\n compNorm(qy)\n VIntY(q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy)\n }\n\n // bottom of the cube\n\n if (bits & 16) {\n compNorm(qz)\n compNorm(q1z)\n VIntX(qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z)\n }\n\n if (bits & 32) {\n compNorm(q1z)\n compNorm(q1yz)\n VIntY(q1z * 3, 15, isol, fx2, fy, fz2, field5, field7, q1z, q1yz)\n }\n\n if (bits & 64) {\n compNorm(qyz)\n compNorm(q1yz)\n VIntX(qyz * 3, 18, isol, fx, fy2, fz2, field6, field7, qyz, q1yz)\n }\n\n if (bits & 128) {\n compNorm(qz)\n compNorm(qyz)\n VIntY(qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz)\n }\n\n // vertical lines of the cube\n if (bits & 256) {\n compNorm(q)\n compNorm(qz)\n VIntZ(q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz)\n }\n\n if (bits & 512) {\n compNorm(q1)\n compNorm(q1z)\n VIntZ(q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z)\n }\n\n if (bits & 1024) {\n compNorm(q1y)\n compNorm(q1yz)\n VIntZ(q1y * 3, 30, isol, fx2, fy2, fz, field3, field7, q1y, q1yz)\n }\n\n if (bits & 2048) {\n compNorm(qy)\n compNorm(qyz)\n VIntZ(qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz)\n }\n\n cubeindex <<= 4 // re-purpose cubeindex into an offset into triTable\n\n let o1,\n o2,\n o3,\n numtris = 0,\n i = 0\n\n // here is where triangles are created\n\n while (triTable[cubeindex + i] != -1) {\n o1 = cubeindex + i\n o2 = o1 + 1\n o3 = o1 + 2\n\n posnormtriv(vlist, nlist, clist, 3 * triTable[o1], 3 * triTable[o2], 3 * triTable[o3])\n\n i += 3\n numtris++\n }\n\n return numtris\n }\n\n function posnormtriv(pos, norm, colors, o1, o2, o3) {\n const c = scope.count * 3\n\n // positions\n\n scope.positionArray[c + 0] = pos[o1]\n scope.positionArray[c + 1] = pos[o1 + 1]\n scope.positionArray[c + 2] = pos[o1 + 2]\n\n scope.positionArray[c + 3] = pos[o2]\n scope.positionArray[c + 4] = pos[o2 + 1]\n scope.positionArray[c + 5] = pos[o2 + 2]\n\n scope.positionArray[c + 6] = pos[o3]\n scope.positionArray[c + 7] = pos[o3 + 1]\n scope.positionArray[c + 8] = pos[o3 + 2]\n\n // normals\n\n if (scope.material.flatShading === true) {\n const nx = (norm[o1 + 0] + norm[o2 + 0] + norm[o3 + 0]) / 3\n const ny = (norm[o1 + 1] + norm[o2 + 1] + norm[o3 + 1]) / 3\n const nz = (norm[o1 + 2] + norm[o2 + 2] + norm[o3 + 2]) / 3\n\n scope.normalArray[c + 0] = nx\n scope.normalArray[c + 1] = ny\n scope.normalArray[c + 2] = nz\n\n scope.normalArray[c + 3] = nx\n scope.normalArray[c + 4] = ny\n scope.normalArray[c + 5] = nz\n\n scope.normalArray[c + 6] = nx\n scope.normalArray[c + 7] = ny\n scope.normalArray[c + 8] = nz\n } else {\n scope.normalArray[c + 0] = norm[o1 + 0]\n scope.normalArray[c + 1] = norm[o1 + 1]\n scope.normalArray[c + 2] = norm[o1 + 2]\n\n scope.normalArray[c + 3] = norm[o2 + 0]\n scope.normalArray[c + 4] = norm[o2 + 1]\n scope.normalArray[c + 5] = norm[o2 + 2]\n\n scope.normalArray[c + 6] = norm[o3 + 0]\n scope.normalArray[c + 7] = norm[o3 + 1]\n scope.normalArray[c + 8] = norm[o3 + 2]\n }\n\n // uvs\n\n if (scope.enableUvs) {\n const d = scope.count * 2\n\n scope.uvArray[d + 0] = pos[o1 + 0]\n scope.uvArray[d + 1] = pos[o1 + 2]\n\n scope.uvArray[d + 2] = pos[o2 + 0]\n scope.uvArray[d + 3] = pos[o2 + 2]\n\n scope.uvArray[d + 4] = pos[o3 + 0]\n scope.uvArray[d + 5] = pos[o3 + 2]\n }\n\n // colors\n\n if (scope.enableColors) {\n scope.colorArray[c + 0] = colors[o1 + 0]\n scope.colorArray[c + 1] = colors[o1 + 1]\n scope.colorArray[c + 2] = colors[o1 + 2]\n\n scope.colorArray[c + 3] = colors[o2 + 0]\n scope.colorArray[c + 4] = colors[o2 + 1]\n scope.colorArray[c + 5] = colors[o2 + 2]\n\n scope.colorArray[c + 6] = colors[o3 + 0]\n scope.colorArray[c + 7] = colors[o3 + 1]\n scope.colorArray[c + 8] = colors[o3 + 2]\n }\n\n scope.count += 3\n }\n\n /////////////////////////////////////\n // Metaballs\n /////////////////////////////////////\n\n // Adds a reciprocal ball (nice and blobby) that, to be fast, fades to zero after\n // a fixed distance, determined by strength and subtract.\n\n this.addBall = function (ballx, bally, ballz, strength, subtract, colors) {\n const sign = Math.sign(strength)\n strength = Math.abs(strength)\n const userDefineColor = !(colors === undefined || colors === null)\n let ballColor = new Color(ballx, bally, ballz)\n\n if (userDefineColor) {\n try {\n ballColor =\n colors instanceof Color\n ? colors\n : Array.isArray(colors)\n ? new Color(\n Math.min(Math.abs(colors[0]), 1),\n Math.min(Math.abs(colors[1]), 1),\n Math.min(Math.abs(colors[2]), 1),\n )\n : new Color(colors)\n } catch (err) {\n ballColor = new Color(ballx, bally, ballz)\n }\n }\n\n // Let's solve the equation to find the radius:\n // 1.0 / (0.000001 + radius^2) * strength - subtract = 0\n // strength / (radius^2) = subtract\n // strength = subtract * radius^2\n // radius^2 = strength / subtract\n // radius = sqrt(strength / subtract)\n\n const radius = this.size * Math.sqrt(strength / subtract),\n zs = ballz * this.size,\n ys = bally * this.size,\n xs = ballx * this.size\n\n let min_z = Math.floor(zs - radius)\n if (min_z < 1) min_z = 1\n let max_z = Math.floor(zs + radius)\n if (max_z > this.size - 1) max_z = this.size - 1\n let min_y = Math.floor(ys - radius)\n if (min_y < 1) min_y = 1\n let max_y = Math.floor(ys + radius)\n if (max_y > this.size - 1) max_y = this.size - 1\n let min_x = Math.floor(xs - radius)\n if (min_x < 1) min_x = 1\n let max_x = Math.floor(xs + radius)\n if (max_x > this.size - 1) max_x = this.size - 1\n\n // Don't polygonize in the outer layer because normals aren't\n // well-defined there.\n\n let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val\n\n for (z = min_z; z < max_z; z++) {\n z_offset = this.size2 * z\n fz = z / this.size - ballz\n fz2 = fz * fz\n\n for (y = min_y; y < max_y; y++) {\n y_offset = z_offset + this.size * y\n fy = y / this.size - bally\n fy2 = fy * fy\n\n for (x = min_x; x < max_x; x++) {\n fx = x / this.size - ballx\n val = strength / (0.000001 + fx * fx + fy2 + fz2) - subtract\n if (val > 0.0) {\n this.field[y_offset + x] += val * sign\n\n // optimization\n // http://www.geisswerks.com/ryan/BLOBS/blobs.html\n const ratio = Math.sqrt((x - xs) * (x - xs) + (y - ys) * (y - ys) + (z - zs) * (z - zs)) / radius\n const contrib = 1 - ratio * ratio * ratio * (ratio * (ratio * 6 - 15) + 10)\n this.palette[(y_offset + x) * 3 + 0] += ballColor.r * contrib\n this.palette[(y_offset + x) * 3 + 1] += ballColor.g * contrib\n this.palette[(y_offset + x) * 3 + 2] += ballColor.b * contrib\n }\n }\n }\n }\n }\n\n this.addPlaneX = function (strength, subtract) {\n // cache attribute lookups\n const size = this.size,\n yd = this.yd,\n zd = this.zd,\n field = this.field\n\n let x,\n y,\n z,\n xx,\n val,\n xdiv,\n cxy,\n dist = size * Math.sqrt(strength / subtract)\n\n if (dist > size) dist = size\n\n for (x = 0; x < dist; x++) {\n xdiv = x / size\n xx = xdiv * xdiv\n val = strength / (0.0001 + xx) - subtract\n\n if (val > 0.0) {\n for (y = 0; y < size; y++) {\n cxy = x + y * yd\n\n for (z = 0; z < size; z++) {\n field[zd * z + cxy] += val\n }\n }\n }\n }\n }\n\n this.addPlaneY = function (strength, subtract) {\n // cache attribute lookups\n const size = this.size,\n yd = this.yd,\n zd = this.zd,\n field = this.field\n\n let x,\n y,\n z,\n yy,\n val,\n ydiv,\n cy,\n cxy,\n dist = size * Math.sqrt(strength / subtract)\n\n if (dist > size) dist = size\n\n for (y = 0; y < dist; y++) {\n ydiv = y / size\n yy = ydiv * ydiv\n val = strength / (0.0001 + yy) - subtract\n\n if (val > 0.0) {\n cy = y * yd\n\n for (x = 0; x < size; x++) {\n cxy = cy + x\n\n for (z = 0; z < size; z++) field[zd * z + cxy] += val\n }\n }\n }\n }\n\n this.addPlaneZ = function (strength, subtract) {\n // cache attribute lookups\n\n const size = this.size,\n yd = this.yd,\n zd = this.zd,\n field = this.field\n\n let x,\n y,\n z,\n zz,\n val,\n zdiv,\n cz,\n cyz,\n dist = size * Math.sqrt(strength / subtract)\n\n if (dist > size) dist = size\n\n for (z = 0; z < dist; z++) {\n zdiv = z / size\n zz = zdiv * zdiv\n val = strength / (0.0001 + zz) - subtract\n if (val > 0.0) {\n cz = zd * z\n\n for (y = 0; y < size; y++) {\n cyz = cz + y * yd\n\n for (x = 0; x < size; x++) field[cyz + x] += val\n }\n }\n }\n }\n\n /////////////////////////////////////\n // Updates\n /////////////////////////////////////\n\n this.setCell = function (x, y, z, value) {\n const index = this.size2 * z + this.size * y + x\n this.field[index] = value\n }\n\n this.getCell = function (x, y, z) {\n const index = this.size2 * z + this.size * y + x\n return this.field[index]\n }\n\n this.blur = function (intensity = 1) {\n const field = this.field\n const fieldCopy = field.slice()\n const size = this.size\n const size2 = this.size2\n for (let x = 0; x < size; x++) {\n for (let y = 0; y < size; y++) {\n for (let z = 0; z < size; z++) {\n const index = size2 * z + size * y + x\n let val = fieldCopy[index]\n let count = 1\n\n for (let x2 = -1; x2 <= 1; x2 += 2) {\n const x3 = x2 + x\n if (x3 < 0 || x3 >= size) continue\n\n for (let y2 = -1; y2 <= 1; y2 += 2) {\n const y3 = y2 + y\n if (y3 < 0 || y3 >= size) continue\n\n for (let z2 = -1; z2 <= 1; z2 += 2) {\n const z3 = z2 + z\n if (z3 < 0 || z3 >= size) continue\n\n const index2 = size2 * z3 + size * y3 + x3\n const val2 = fieldCopy[index2]\n\n count++\n val += (intensity * (val2 - val)) / count\n }\n }\n }\n\n field[index] = val\n }\n }\n }\n }\n\n this.reset = function () {\n // wipe the normal cache\n\n for (let i = 0; i < this.size3; i++) {\n this.normal_cache[i * 3] = 0.0\n this.field[i] = 0.0\n this.palette[i * 3] = this.palette[i * 3 + 1] = this.palette[i * 3 + 2] = 0.0\n }\n }\n\n this.update = function () {\n this.count = 0\n\n // Triangulate. Yeah, this is slow.\n\n const smin2 = this.size - 2\n\n for (let z = 1; z < smin2; z++) {\n const z_offset = this.size2 * z\n const fz = (z - this.halfsize) / this.halfsize //+ 1\n\n for (let y = 1; y < smin2; y++) {\n const y_offset = z_offset + this.size * y\n const fy = (y - this.halfsize) / this.halfsize //+ 1\n\n for (let x = 1; x < smin2; x++) {\n const fx = (x - this.halfsize) / this.halfsize //+ 1\n const q = y_offset + x\n\n polygonize(fx, fy, fz, q, this.isolation)\n }\n }\n }\n\n // set the draw range to only the processed triangles\n\n this.geometry.setDrawRange(0, this.count)\n\n // update geometry data\n\n geometry.getAttribute('position').needsUpdate = true\n geometry.getAttribute('normal').needsUpdate = true\n\n if (this.enableUvs) geometry.getAttribute('uv').needsUpdate = true\n if (this.enableColors) geometry.getAttribute('color').needsUpdate = true\n\n // safety check\n\n if (this.count / 3 > maxPolyCount)\n console.warn(\n 'THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.',\n )\n }\n\n this.init(resolution)\n }\n}\n\n/////////////////////////////////////\n// Marching cubes lookup tables\n/////////////////////////////////////\n\n// These tables are straight from Paul Bourke's page:\n// http://paulbourke.net/geometry/polygonise/\n// who in turn got them from Cory Gene Bloyd.\n\n// prettier-ignore\nconst edgeTable = new Int32Array( [\n\t0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\n\t0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\n\t0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\n\t0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\n\t0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\n\t0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\n\t0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\n\t0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\n\t0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\n\t0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\n\t0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\n\t0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\n\t0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\n\t0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\n\t0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\n\t0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\n\t0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\n\t0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\n\t0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\n\t0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\n\t0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\n\t0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\n\t0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\n\t0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\n\t0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\n\t0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\n\t0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\n\t0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\n\t0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\n\t0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\n\t0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\n\t0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 ] );\n\n// prettier-ignore\nconst triTable = new Int32Array( [\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 9, 8, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 0, 2, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 8, 3, 2, 10, 8, 10, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 8, 11, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 2, 1, 9, 11, 9, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 11, 10, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 10, 1, 0, 8, 10, 8, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 9, 0, 3, 11, 9, 11, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 7, 3, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 1, 9, 4, 7, 1, 7, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 4, 7, 3, 0, 4, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 9, 0, 2, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 4, 7, 11, 2, 4, 2, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 8, 4, 7, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 3, 11, 10, 7, 8, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, - 1, - 1, - 1, - 1,\n\t4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 4, 11, 9, 9, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 1, 5, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 5, 4, 8, 3, 5, 3, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 10, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 2, 10, 5, 4, 2, 4, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 0, 8, 11, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 0, 1, 5, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, - 1, - 1, - 1, - 1,\n\t10, 3, 11, 10, 1, 3, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, - 1, - 1, - 1, - 1,\n\t5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t5, 4, 8, 5, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 5, 7, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 3, 0, 9, 5, 3, 5, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 8, 0, 1, 7, 1, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 9, 5, 7, 10, 1, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, - 1, - 1, - 1, - 1,\n\t8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 2, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 9, 5, 7, 8, 9, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, - 1, - 1, - 1, - 1,\n\t11, 2, 1, 11, 1, 7, 7, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, - 1, - 1, - 1, - 1,\n\t5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, - 1,\n\t11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, - 1,\n\t11, 10, 5, 7, 11, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 1, 9, 8, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 2, 6, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 1, 2, 6, 3, 0, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 6, 5, 9, 0, 6, 0, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 0, 8, 11, 2, 0, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, - 1, - 1, - 1, - 1,\n\t6, 3, 11, 6, 5, 3, 5, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, - 1, - 1, - 1, - 1,\n\t6, 5, 9, 6, 9, 11, 11, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 4, 7, 3, 6, 5, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 5, 10, 6, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t6, 1, 2, 6, 5, 1, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, - 1, - 1, - 1, - 1,\n\t7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, - 1,\n\t3, 11, 2, 7, 8, 4, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1,\n\t9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, - 1,\n\t8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, - 1,\n\t0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, - 1,\n\t6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 6, 4, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 10, 6, 4, 9, 10, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 0, 1, 10, 6, 0, 6, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t1, 4, 9, 1, 2, 4, 2, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, - 1, - 1, - 1, - 1,\n\t0, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 2, 8, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 10, 6, 4, 11, 2, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, - 1,\n\t9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, - 1, - 1, - 1, - 1,\n\t8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, - 1,\n\t3, 11, 6, 3, 6, 0, 0, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 4, 8, 11, 6, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 10, 6, 7, 8, 10, 8, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 10, 7, 1, 1, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, - 1,\n\t7, 8, 0, 7, 0, 6, 6, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 3, 2, 6, 7, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, - 1,\n\t1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, - 1,\n\t11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, - 1, - 1, - 1, - 1,\n\t8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, - 1,\n\t0, 9, 1, 11, 6, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, - 1, - 1, - 1, - 1,\n\t7, 11, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 9, 8, 3, 1, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 8, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 9, 0, 2, 10, 9, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, - 1, - 1, - 1, - 1,\n\t7, 2, 3, 6, 2, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 0, 8, 7, 6, 0, 6, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 7, 6, 2, 3, 7, 0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 10, 1, 7, 1, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, - 1, - 1, - 1, - 1,\n\t0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, - 1, - 1, - 1, - 1,\n\t7, 6, 10, 7, 10, 8, 8, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 11, 8, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 3, 0, 6, 0, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 6, 11, 8, 4, 6, 9, 0, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 6, 11, 8, 2, 10, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, - 1, - 1, - 1, - 1,\n\t4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, - 1, - 1, - 1, - 1,\n\t10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, - 1,\n\t8, 2, 3, 8, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, - 1, - 1, - 1, - 1,\n\t1, 9, 4, 1, 4, 2, 2, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, - 1, - 1, - 1, - 1,\n\t10, 1, 0, 10, 0, 6, 6, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, - 1,\n\t10, 9, 4, 6, 10, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 5, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 1, 5, 4, 0, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 10, 1, 2, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, - 1, - 1, - 1, - 1,\n\t7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, - 1, - 1, - 1, - 1,\n\t3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, - 1,\n\t7, 2, 3, 7, 6, 2, 5, 4, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, - 1, - 1, - 1, - 1,\n\t3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, - 1, - 1, - 1, - 1,\n\t6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, - 1,\n\t9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, - 1, - 1, - 1, - 1,\n\t1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, - 1,\n\t4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, - 1,\n\t7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, - 1, - 1, - 1, - 1,\n\t6, 9, 5, 6, 11, 9, 11, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, - 1, - 1, - 1, - 1,\n\t0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, - 1, - 1, - 1, - 1,\n\t6, 11, 3, 6, 3, 5, 5, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, - 1, - 1, - 1, - 1,\n\t0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, - 1,\n\t11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, - 1,\n\t6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, - 1, - 1, - 1, - 1,\n\t5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, - 1, - 1, - 1, - 1,\n\t9, 5, 6, 9, 6, 0, 0, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, - 1,\n\t1, 5, 6, 2, 1, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, - 1,\n\t10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, - 1, - 1, - 1, - 1,\n\t0, 3, 8, 5, 6, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 5, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 7, 5, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 11, 7, 5, 8, 3, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 11, 7, 5, 10, 11, 1, 9, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, - 1, - 1, - 1, - 1,\n\t11, 1, 2, 11, 7, 1, 7, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, - 1, - 1, - 1, - 1,\n\t9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, - 1, - 1, - 1, - 1,\n\t7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, - 1,\n\t2, 5, 10, 2, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, - 1, - 1, - 1, - 1,\n\t9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, - 1,\n\t1, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 7, 0, 7, 1, 1, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 3, 9, 3, 5, 5, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 7, 5, 9, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 8, 4, 5, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, - 1, - 1, - 1, - 1,\n\t10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, - 1,\n\t2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, - 1, - 1, - 1, - 1,\n\t0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, - 1,\n\t0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, - 1,\n\t9, 4, 5, 2, 11, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, - 1, - 1, - 1, - 1,\n\t5, 10, 2, 5, 2, 4, 4, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, - 1,\n\t5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 3, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 5, 1, 0, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, - 1, - 1, - 1, - 1,\n\t9, 4, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 11, 7, 4, 9, 11, 9, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, - 1, - 1, - 1, - 1,\n\t1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, - 1, - 1, - 1, - 1,\n\t3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, - 1,\n\t4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, - 1, - 1, - 1, - 1,\n\t9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, - 1,\n\t11, 7, 4, 11, 4, 2, 2, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, - 1, - 1, - 1, - 1,\n\t2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, - 1, - 1, - 1, - 1,\n\t9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, - 1,\n\t3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, - 1,\n\t1, 10, 2, 8, 7, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 7, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, - 1, - 1, - 1, - 1,\n\t4, 0, 3, 7, 4, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 8, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 11, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 10, 0, 10, 8, 8, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 1, 10, 11, 3, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 11, 1, 11, 9, 9, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, - 1, - 1, - 1, - 1,\n\t0, 2, 11, 8, 0, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 2, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 10, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 2, 0, 9, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, - 1, - 1, - 1, - 1,\n\t1, 10, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 8, 9, 1, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 9, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 3, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 ] );\n\nexport { MarchingCubes, edgeTable, triTable }\n"],"names":["Mesh","BufferGeometry","resolution","BufferAttribute","DynamicDrawUsage","Sphere","Vector3","Color"],"mappings":"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