{"version":3,"file":"index.mjs","sources":["../../../node_modules/three/examples/jsm/renderers/Projector.js","../../../node_modules/three/examples/jsm/renderers/SVGRenderer.js","../../../node_modules/ts-browser-helpers/dist/bundle.esm.js","../../../node_modules/uiconfig.js/dist/index.mjs","../src/basic/BasicSVGRenderer.ts","../src/BasicSVGRendererPlugin.ts","../src/three-svg-renderer/core/viewmap/ViewEdge.ts","../src/three-svg-renderer/utils/buffergeometry.ts","../src/three-svg-renderer/utils/geometry.ts","../src/three-svg-renderer/utils/orientationtests.ts","../src/three-svg-renderer/core/viewmap/ViewVertex.ts","../src/three-svg-renderer/core/viewmap/Chain.ts","../src/three-svg-renderer/core/viewmap/Polygon.ts","../node_modules/arrangement-2d-js/build/Arrangement2D.esm.js","../src/three-svg-renderer/core/viewmap/operations/computePolygons.ts","../src/three-svg-renderer/core/viewmap/operations/createViewVertex.ts","../src/three-svg-renderer/core/viewmap/operations/setupEdges.ts","../src/three-svg-renderer/core/viewmap/operations/assignPolygons.ts","../src/three-svg-renderer/core/viewmap/operations/computeChainsVisibility.ts","../node_modules/fast-triangle-triangle-intersection/build/index.esm.js","../src/three-svg-renderer/core/viewmap/operations/meshIntersectionCb.ts","../src/three-svg-renderer/core/viewmap/operations/splitEdge.ts","../src/three-svg-renderer/core/viewmap/operations/computeMeshIntersections.ts","../src/three-svg-renderer/core/viewmap/operations/createChains.ts","../node_modules/isect/build/isect.module.js","../src/three-svg-renderer/core/viewmap/operations/find2dSingularities.ts","../src/three-svg-renderer/core/viewmap/operations/find3dSingularities.ts","../src/three-svg-renderer/core/viewmap/Viewmap.ts","../node_modules/@svgdotjs/svg.js/dist/svg.esm.js","../node_modules/@svgdotjs/svg.topath.js/src/svg.topath.js","../src/three-svg-renderer/core/svg/SVGDrawHandler.ts","../src/three-svg-renderer/core/svg/passes/DrawPass.ts","../src/three-svg-renderer/core/svg/svgutils.ts","../src/three-svg-renderer/utils/objects.ts","../src/three-svg-renderer/core/svg/passes/FillPass.ts","../src/three-svg-renderer/core/svg/passes/SingularityPointPass.ts","../src/three-svg-renderer/core/svg/passes/ChainPass.ts","../src/three-mesh-halfedge/utils/geometry.ts","../src/three-mesh-halfedge/core/Halfedge.ts","../src/three-mesh-halfedge/operations/addEdge.ts","../src/three-mesh-halfedge/core/Face.ts","../src/three-mesh-halfedge/operations/addFace.ts","../src/three-mesh-halfedge/core/Vertex.ts","../src/three-mesh-halfedge/operations/addVertex.ts","../src/three-mesh-halfedge/operations/removeFace.ts","../src/three-mesh-halfedge/operations/removeEdge.ts","../src/three-mesh-halfedge/operations/removeVertex.ts","../src/three-mesh-halfedge/operations/cutFace.ts","../src/three-mesh-halfedge/operations/splitEdge.ts","../src/three-mesh-halfedge/operations/setFromGeometry.ts","../src/three-mesh-halfedge/core/HalfedgeDS.ts","../src/three-mesh-halfedge/augments.ts","../node_modules/three-mesh-bvh/src/core/Constants.js","../node_modules/three-mesh-bvh/src/core/build/geometryUtils.js","../node_modules/three-mesh-bvh/src/core/build/computeBoundsUtils.js","../node_modules/three-mesh-bvh/src/utils/ArrayBoxUtilities.js","../node_modules/three-mesh-bvh/src/core/build/splitUtils.js","../node_modules/three-mesh-bvh/src/core/MeshBVHNode.js","../node_modules/three-mesh-bvh/src/core/build/sortUtils.generated.js","../node_modules/three-mesh-bvh/src/core/build/sortUtils_indirect.generated.js","../node_modules/three-mesh-bvh/src/core/utils/nodeBufferUtils.js","../node_modules/three-mesh-bvh/src/core/build/buildUtils.js","../node_modules/three-mesh-bvh/src/core/build/buildTree.js","../node_modules/three-mesh-bvh/src/math/SeparatingAxisBounds.js","../node_modules/three-mesh-bvh/src/math/MathUtilities.js","../node_modules/three-mesh-bvh/src/math/ExtendedTriangle.js","../node_modules/three-mesh-bvh/src/math/OrientedBox.js","../node_modules/three-mesh-bvh/src/utils/PrimitivePool.js","../node_modules/three-mesh-bvh/src/utils/ExtendedTrianglePool.js","../node_modules/three-mesh-bvh/src/core/utils/BufferStack.js","../node_modules/three-mesh-bvh/src/core/cast/shapecast.js","../node_modules/three-mesh-bvh/src/core/cast/closestPointToPoint.js","../node_modules/three-mesh-bvh/src/utils/ThreeRayIntersectUtilities.js","../node_modules/three-mesh-bvh/src/utils/TriangleUtilities.js","../node_modules/three-mesh-bvh/src/core/utils/iterationUtils.generated.js","../node_modules/three-mesh-bvh/src/core/cast/refit.generated.js","../node_modules/three-mesh-bvh/src/core/utils/intersectUtils.js","../node_modules/three-mesh-bvh/src/core/utils/iterationUtils_indirect.generated.js","../node_modules/three-mesh-bvh/src/core/cast/raycast.generated.js","../node_modules/three-mesh-bvh/src/core/cast/raycastFirst.generated.js","../node_modules/three-mesh-bvh/src/core/cast/intersectsGeometry.generated.js","../node_modules/three-mesh-bvh/src/core/cast/closestPointToGeometry.generated.js","../node_modules/three-mesh-bvh/src/core/cast/refit_indirect.generated.js","../node_modules/three-mesh-bvh/src/core/cast/raycast_indirect.generated.js","../node_modules/three-mesh-bvh/src/core/cast/raycastFirst_indirect.generated.js","../node_modules/three-mesh-bvh/src/core/cast/intersectsGeometry_indirect.generated.js","../node_modules/three-mesh-bvh/src/core/cast/closestPointToGeometry_indirect.generated.js","../node_modules/three-mesh-bvh/src/utils/BufferUtils.js","../node_modules/three-mesh-bvh/src/core/cast/bvhcast.js","../node_modules/three-mesh-bvh/src/core/MeshBVH.js","../node_modules/three-mesh-bvh/src/utils/GeometryRayIntersectUtilities.js","../node_modules/three-mesh-bvh/src/utils/ExtensionUtilities.js","../src/three-svg-renderer/core/SVGMesh.ts","../src/three-svg-renderer/SVGRenderer.ts","../src/ThreeSVGRendererPlugin.ts"],"sourcesContent":["import {\n\tBox3,\n\tColor,\n\tDoubleSide,\n\tFrustum,\n\tMatrix3,\n\tMatrix4,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass RenderableObject {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableFace {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\t\tthis.v3 = new RenderableVertex();\n\n\t\tthis.normalModel = new Vector3();\n\n\t\tthis.vertexNormalsModel = [ new Vector3(), new Vector3(), new Vector3() ];\n\t\tthis.vertexNormalsLength = 0;\n\n\t\tthis.color = new Color();\n\t\tthis.material = null;\n\t\tthis.uvs = [ new Vector2(), new Vector2(), new Vector2() ];\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableVertex {\n\n\tconstructor() {\n\n\t\tthis.position = new Vector3();\n\t\tthis.positionWorld = new Vector3();\n\t\tthis.positionScreen = new Vector4();\n\n\t\tthis.visible = true;\n\n\t}\n\n\tcopy( vertex ) {\n\n\t\tthis.positionWorld.copy( vertex.positionWorld );\n\t\tthis.positionScreen.copy( vertex.positionScreen );\n\n\t}\n\n}\n\n//\n\nclass RenderableLine {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\n\t\tthis.vertexColors = [ new Color(), new Color() ];\n\t\tthis.material = null;\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableSprite {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\n\t\tthis.rotation = 0;\n\t\tthis.scale = new Vector2();\n\n\t\tthis.material = null;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass Projector {\n\n\tconstructor() {\n\n\t\tlet _object, _objectCount, _objectPoolLength = 0,\n\t\t\t_vertex, _vertexCount, _vertexPoolLength = 0,\n\t\t\t_face, _faceCount, _facePoolLength = 0,\n\t\t\t_line, _lineCount, _linePoolLength = 0,\n\t\t\t_sprite, _spriteCount, _spritePoolLength = 0,\n\t\t\t_modelMatrix;\n\n\t\tconst\n\n\t\t\t_renderData = { objects: [], lights: [], elements: [] },\n\n\t\t\t_vector3 = new Vector3(),\n\t\t\t_vector4 = new Vector4(),\n\n\t\t\t_clipBox = new Box3( new Vector3( - 1, - 1, - 1 ), new Vector3( 1, 1, 1 ) ),\n\t\t\t_boundingBox = new Box3(),\n\t\t\t_points3 = new Array( 3 ),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_modelViewProjectionMatrix = new Matrix4(),\n\n\t\t\t_frustum = new Frustum(),\n\n\t\t\t_objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = [];\n\n\t\t//\n\n\t\tfunction RenderList() {\n\n\t\t\tconst normals = [];\n\t\t\tconst colors = [];\n\t\t\tconst uvs = [];\n\n\t\t\tlet object = null;\n\n\t\t\tconst normalMatrix = new Matrix3();\n\n\t\t\tfunction setObject( value ) {\n\n\t\t\t\tobject = value;\n\n\t\t\t\tnormalMatrix.getNormalMatrix( object.matrixWorld );\n\n\t\t\t\tnormals.length = 0;\n\t\t\t\tcolors.length = 0;\n\t\t\t\tuvs.length = 0;\n\n\t\t\t}\n\n\t\t\tfunction projectVertex( vertex ) {\n\n\t\t\t\tconst position = vertex.position;\n\t\t\t\tconst positionWorld = vertex.positionWorld;\n\t\t\t\tconst positionScreen = vertex.positionScreen;\n\n\t\t\t\tpositionWorld.copy( position ).applyMatrix4( _modelMatrix );\n\t\t\t\tpositionScreen.copy( positionWorld ).applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst invW = 1 / positionScreen.w;\n\n\t\t\t\tpositionScreen.x *= invW;\n\t\t\t\tpositionScreen.y *= invW;\n\t\t\t\tpositionScreen.z *= invW;\n\n\t\t\t\tvertex.visible = positionScreen.x >= - 1 && positionScreen.x <= 1 &&\n\t\t\t\t\t\t positionScreen.y >= - 1 && positionScreen.y <= 1 &&\n\t\t\t\t\t\t positionScreen.z >= - 1 && positionScreen.z <= 1;\n\n\t\t\t}\n\n\t\t\tfunction pushVertex( x, y, z ) {\n\n\t\t\t\t_vertex = getNextVertexInPool();\n\t\t\t\t_vertex.position.set( x, y, z );\n\n\t\t\t\tprojectVertex( _vertex );\n\n\t\t\t}\n\n\t\t\tfunction pushNormal( x, y, z ) {\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t\tfunction pushColor( r, g, b ) {\n\n\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t}\n\n\t\t\tfunction pushUv( x, y ) {\n\n\t\t\t\tuvs.push( x, y );\n\n\t\t\t}\n\n\t\t\tfunction checkTriangleVisibility( v1, v2, v3 ) {\n\n\t\t\t\tif ( v1.visible === true || v2.visible === true || v3.visible === true ) return true;\n\n\t\t\t\t_points3[ 0 ] = v1.positionScreen;\n\t\t\t\t_points3[ 1 ] = v2.positionScreen;\n\t\t\t\t_points3[ 2 ] = v3.positionScreen;\n\n\t\t\t\treturn _clipBox.intersectsBox( _boundingBox.setFromPoints( _points3 ) );\n\n\t\t\t}\n\n\t\t\tfunction checkBackfaceCulling( v1, v2, v3 ) {\n\n\t\t\t\treturn ( ( v3.positionScreen.x - v1.positionScreen.x ) *\n\t\t\t\t\t    ( v2.positionScreen.y - v1.positionScreen.y ) -\n\t\t\t\t\t    ( v3.positionScreen.y - v1.positionScreen.y ) *\n\t\t\t\t\t    ( v2.positionScreen.x - v1.positionScreen.x ) ) < 0;\n\n\t\t\t}\n\n\t\t\tfunction pushLine( a, b ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\n\t\t\t\t// Clip\n\n\t\t\t\tv1.positionScreen.copy( v1.position ).applyMatrix4( _modelViewProjectionMatrix );\n\t\t\t\tv2.positionScreen.copy( v2.position ).applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\tif ( clipLine( v1.positionScreen, v2.positionScreen ) === true ) {\n\n\t\t\t\t\t// Perform the perspective divide\n\t\t\t\t\tv1.positionScreen.multiplyScalar( 1 / v1.positionScreen.w );\n\t\t\t\t\tv2.positionScreen.multiplyScalar( 1 / v2.positionScreen.w );\n\n\t\t\t\t\t_line = getNextLineInPool();\n\t\t\t\t\t_line.id = object.id;\n\t\t\t\t\t_line.v1.copy( v1 );\n\t\t\t\t\t_line.v2.copy( v2 );\n\t\t\t\t\t_line.z = Math.max( v1.positionScreen.z, v2.positionScreen.z );\n\t\t\t\t\t_line.renderOrder = object.renderOrder;\n\n\t\t\t\t\t_line.material = object.material;\n\n\t\t\t\t\tif ( object.material.vertexColors ) {\n\n\t\t\t\t\t\t_line.vertexColors[ 0 ].fromArray( colors, a * 3 );\n\t\t\t\t\t\t_line.vertexColors[ 1 ].fromArray( colors, b * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _line );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction pushTriangle( a, b, c, material ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\t\t\t\tconst v3 = _vertexPool[ c ];\n\n\t\t\t\tif ( checkTriangleVisibility( v1, v2, v3 ) === false ) return;\n\n\t\t\t\tif ( material.side === DoubleSide || checkBackfaceCulling( v1, v2, v3 ) === true ) {\n\n\t\t\t\t\t_face = getNextFaceInPool();\n\n\t\t\t\t\t_face.id = object.id;\n\t\t\t\t\t_face.v1.copy( v1 );\n\t\t\t\t\t_face.v2.copy( v2 );\n\t\t\t\t\t_face.v3.copy( v3 );\n\t\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;\n\t\t\t\t\t_face.renderOrder = object.renderOrder;\n\n\t\t\t\t\t// face normal\n\t\t\t\t\t_vector3.subVectors( v3.position, v2.position );\n\t\t\t\t\t_vector4.subVectors( v1.position, v2.position );\n\t\t\t\t\t_vector3.cross( _vector4 );\n\t\t\t\t\t_face.normalModel.copy( _vector3 );\n\t\t\t\t\t_face.normalModel.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\tconst normal = _face.vertexNormalsModel[ i ];\n\t\t\t\t\t\tnormal.fromArray( normals, arguments[ i ] * 3 );\n\t\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\t\tconst uv = _face.uvs[ i ];\n\t\t\t\t\t\tuv.fromArray( uvs, arguments[ i ] * 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_face.vertexNormalsLength = 3;\n\n\t\t\t\t\t_face.material = material;\n\n\t\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t\t_face.color.fromArray( colors, a * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsetObject: setObject,\n\t\t\t\tprojectVertex: projectVertex,\n\t\t\t\tcheckTriangleVisibility: checkTriangleVisibility,\n\t\t\t\tcheckBackfaceCulling: checkBackfaceCulling,\n\t\t\t\tpushVertex: pushVertex,\n\t\t\t\tpushNormal: pushNormal,\n\t\t\t\tpushColor: pushColor,\n\t\t\t\tpushUv: pushUv,\n\t\t\t\tpushLine: pushLine,\n\t\t\t\tpushTriangle: pushTriangle\n\t\t\t};\n\n\t\t}\n\n\t\tconst renderList = new RenderList();\n\n\t\tfunction projectObject( object ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\t_renderData.lights.push( object );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( object ) {\n\n\t\t\t_object = getNextObjectInPool();\n\t\t\t_object.id = object.id;\n\t\t\t_object.object = object;\n\n\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\t\t\t_object.z = _vector3.z;\n\t\t\t_object.renderOrder = object.renderOrder;\n\n\t\t\t_renderData.objects.push( _object );\n\n\t\t}\n\n\t\tthis.projectScene = function ( scene, camera, sortObjects, sortElements ) {\n\n\t\t\t_faceCount = 0;\n\t\t\t_lineCount = 0;\n\t\t\t_spriteCount = 0;\n\n\t\t\t_renderData.elements.length = 0;\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_frustum.setFromProjectionMatrix( _viewProjectionMatrix );\n\n\t\t\t//\n\n\t\t\t_objectCount = 0;\n\n\t\t\t_renderData.objects.length = 0;\n\t\t\t_renderData.lights.length = 0;\n\n\t\t\tprojectObject( scene );\n\n\t\t\tif ( sortObjects === true ) {\n\n\t\t\t\t_renderData.objects.sort( painterSort );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst objects = _renderData.objects;\n\n\t\t\tfor ( let o = 0, ol = objects.length; o < ol; o ++ ) {\n\n\t\t\t\tconst object = objects[ o ].object;\n\t\t\t\tconst geometry = object.geometry;\n\n\t\t\t\trenderList.setObject( object );\n\n\t\t\t\t_modelMatrix = object.matrixWorld;\n\n\t\t\t\t_vertexCount = 0;\n\n\t\t\t\tif ( object.isMesh ) {\n\n\t\t\t\t\tlet material = object.material;\n\n\t\t\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tif ( attributes.position === undefined ) continue;\n\n\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tlet x = positions[ i ];\n\t\t\t\t\t\tlet y = positions[ i + 1 ];\n\t\t\t\t\t\tlet z = positions[ i + 2 ];\n\n\t\t\t\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\n\t\t\t\t\t\tif ( morphTargets !== undefined ) {\n\n\t\t\t\t\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\t\t\t\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\t\t\t\t\t\tfor ( let t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\t\tconst influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\t\tconst target = morphTargets[ t ];\n\n\t\t\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t\t\tx += target.getX( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\ty += target.getY( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\tz += target.getZ( i / 3 ) * influence;\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tx += ( target.getX( i / 3 ) - positions[ i ] ) * influence;\n\t\t\t\t\t\t\t\t\ty += ( target.getY( i / 3 ) - positions[ i + 1 ] ) * influence;\n\t\t\t\t\t\t\t\t\tz += ( target.getZ( i / 3 ) - positions[ i + 2 ] ) * influence;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderList.pushVertex( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.normal !== undefined ) {\n\n\t\t\t\t\t\tconst normals = attributes.normal.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = normals.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.uv !== undefined ) {\n\n\t\t\t\t\t\tconst uvs = attributes.uv.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = uvs.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\trenderList.pushUv( uvs[ i ], uvs[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = positions.length / 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( indices[ i ], indices[ i + 1 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst step = object.isLineSegments ? 2 : 1;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = ( positions.length / 3 ) - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( i, i + 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t_vector4.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ], 1 );\n\t\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\t\t\t_vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );\n\t\t\t\t\t_vector4.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( sortElements === true ) {\n\n\t\t\t\t_renderData.elements.sort( painterSort );\n\n\t\t\t}\n\n\t\t\treturn _renderData;\n\n\t\t};\n\n\t\tfunction pushPoint( _vector4, object, camera ) {\n\n\t\t\tconst invW = 1 / _vector4.w;\n\n\t\t\t_vector4.z *= invW;\n\n\t\t\tif ( _vector4.z >= - 1 && _vector4.z <= 1 ) {\n\n\t\t\t\t_sprite = getNextSpriteInPool();\n\t\t\t\t_sprite.id = object.id;\n\t\t\t\t_sprite.x = _vector4.x * invW;\n\t\t\t\t_sprite.y = _vector4.y * invW;\n\t\t\t\t_sprite.z = _vector4.z;\n\t\t\t\t_sprite.renderOrder = object.renderOrder;\n\t\t\t\t_sprite.object = object;\n\n\t\t\t\t_sprite.rotation = object.rotation;\n\n\t\t\t\t_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[ 0 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 12 ] ) );\n\t\t\t\t_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[ 5 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 13 ] ) );\n\n\t\t\t\t_sprite.material = object.material;\n\n\t\t\t\t_renderData.elements.push( _sprite );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Pools\n\n\t\tfunction getNextObjectInPool() {\n\n\t\t\tif ( _objectCount === _objectPoolLength ) {\n\n\t\t\t\tconst object = new RenderableObject();\n\t\t\t\t_objectPool.push( object );\n\t\t\t\t_objectPoolLength ++;\n\t\t\t\t_objectCount ++;\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t\treturn _objectPool[ _objectCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextVertexInPool() {\n\n\t\t\tif ( _vertexCount === _vertexPoolLength ) {\n\n\t\t\t\tconst vertex = new RenderableVertex();\n\t\t\t\t_vertexPool.push( vertex );\n\t\t\t\t_vertexPoolLength ++;\n\t\t\t\t_vertexCount ++;\n\t\t\t\treturn vertex;\n\n\t\t\t}\n\n\t\t\treturn _vertexPool[ _vertexCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextFaceInPool() {\n\n\t\t\tif ( _faceCount === _facePoolLength ) {\n\n\t\t\t\tconst face = new RenderableFace();\n\t\t\t\t_facePool.push( face );\n\t\t\t\t_facePoolLength ++;\n\t\t\t\t_faceCount ++;\n\t\t\t\treturn face;\n\n\t\t\t}\n\n\t\t\treturn _facePool[ _faceCount ++ ];\n\n\n\t\t}\n\n\t\tfunction getNextLineInPool() {\n\n\t\t\tif ( _lineCount === _linePoolLength ) {\n\n\t\t\t\tconst line = new RenderableLine();\n\t\t\t\t_linePool.push( line );\n\t\t\t\t_linePoolLength ++;\n\t\t\t\t_lineCount ++;\n\t\t\t\treturn line;\n\n\t\t\t}\n\n\t\t\treturn _linePool[ _lineCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextSpriteInPool() {\n\n\t\t\tif ( _spriteCount === _spritePoolLength ) {\n\n\t\t\t\tconst sprite = new RenderableSprite();\n\t\t\t\t_spritePool.push( sprite );\n\t\t\t\t_spritePoolLength ++;\n\t\t\t\t_spriteCount ++;\n\t\t\t\treturn sprite;\n\n\t\t\t}\n\n\t\t\treturn _spritePool[ _spriteCount ++ ];\n\n\t\t}\n\n\t\t//\n\n\t\tfunction painterSort( a, b ) {\n\n\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t\t} else if ( a.z !== b.z ) {\n\n\t\t\t\treturn b.z - a.z;\n\n\t\t\t} else if ( a.id !== b.id ) {\n\n\t\t\t\treturn a.id - b.id;\n\n\t\t\t} else {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction clipLine( s1, s2 ) {\n\n\t\t\tlet alpha1 = 0, alpha2 = 1;\n\n\t\t\t// Calculate the boundary coordinate of each vertex for the near and far clip planes,\n\t\t\t// Z = -1 and Z = +1, respectively.\n\n\t\t\tconst bc1near = s1.z + s1.w,\n\t\t\t\tbc2near = s2.z + s2.w,\n\t\t\t\tbc1far = - s1.z + s1.w,\n\t\t\t\tbc2far = - s2.z + s2.w;\n\n\t\t\tif ( bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0 ) {\n\n\t\t\t\t// Both vertices lie entirely within all clip planes.\n\t\t\t\treturn true;\n\n\t\t\t} else if ( ( bc1near < 0 && bc2near < 0 ) || ( bc1far < 0 && bc2far < 0 ) ) {\n\n\t\t\t\t// Both vertices lie entirely outside one of the clip planes.\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\n\t\t\t\t// The line segment spans at least one clip plane.\n\n\t\t\t\tif ( bc1near < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the near plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t} else if ( bc2near < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the near plane, v1 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bc1far < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the far plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t} else if ( bc2far < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the far plane, v2 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( alpha2 < alpha1 ) {\n\n\t\t\t\t\t// The line segment spans two boundaries, but is outside both of them.\n\t\t\t\t\t// (This can't happen when we're only clipping against just near/far but good\n\t\t\t\t\t//  to leave the check here for future usage if other clip planes are added.)\n\t\t\t\t\treturn false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Update the s1 and s2 vertices to match the clipped line segment.\n\t\t\t\t\ts1.lerp( s2, alpha1 );\n\t\t\t\t\ts2.lerp( s1, 1 - alpha2 );\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { RenderableObject, RenderableFace, RenderableVertex, RenderableLine, RenderableSprite, Projector };\n","import {\n\tBox2,\n\tCamera,\n\tColor,\n\tMatrix3,\n\tMatrix4,\n\tObject3D,\n\tSRGBColorSpace,\n\tVector3\n} from 'three';\nimport { Projector } from '../renderers/Projector.js';\nimport { RenderableFace } from '../renderers/Projector.js';\nimport { RenderableLine } from '../renderers/Projector.js';\nimport { RenderableSprite } from '../renderers/Projector.js';\n\nclass SVGObject extends Object3D {\n\n\tconstructor( node ) {\n\n\t\tsuper();\n\n\t\tthis.isSVGObject = true;\n\n\t\tthis.node = node;\n\n\t}\n\n}\n\nclass SVGRenderer {\n\n\tconstructor() {\n\n\t\tlet _renderData, _elements, _lights,\n\t\t\t_svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf,\n\n\t\t\t_v1, _v2, _v3,\n\n\t\t\t_svgNode,\n\t\t\t_pathCount = 0,\n\n\t\t\t_precision = null,\n\t\t\t_quality = 1,\n\n\t\t\t_currentPath, _currentStyle;\n\n\t\tconst _this = this,\n\t\t\t_clipBox = new Box2(),\n\t\t\t_elemBox = new Box2(),\n\n\t\t\t_color = new Color(),\n\t\t\t_diffuseColor = new Color(),\n\t\t\t_ambientLight = new Color(),\n\t\t\t_directionalLights = new Color(),\n\t\t\t_pointLights = new Color(),\n\t\t\t_clearColor = new Color(),\n\n\t\t\t_vector3 = new Vector3(), // Needed for PointLight\n\t\t\t_centroid = new Vector3(),\n\t\t\t_normal = new Vector3(),\n\t\t\t_normalViewMatrix = new Matrix3(),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_svgPathPool = [],\n\n\t\t\t_projector = new Projector(),\n\t\t\t_svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\n\t\tthis.domElement = _svg;\n\n\t\tthis.autoClear = true;\n\t\tthis.sortObjects = true;\n\t\tthis.sortElements = true;\n\n\t\tthis.overdraw = 0.5;\n\n\t\tthis.outputColorSpace = SRGBColorSpace;\n\n\t\tthis.info = {\n\n\t\t\trender: {\n\n\t\t\t\tvertices: 0,\n\t\t\t\tfaces: 0\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setQuality = function ( quality ) {\n\n\t\t\tswitch ( quality ) {\n\n\t\t\t\tcase 'high': _quality = 1; break;\n\t\t\t\tcase 'low': _quality = 0; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setClearColor = function ( color ) {\n\n\t\t\t_clearColor.set( color );\n\n\t\t};\n\n\t\tthis.setPixelRatio = function () {};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_svgWidth = width; _svgHeight = height;\n\t\t\t_svgWidthHalf = _svgWidth / 2; _svgHeightHalf = _svgHeight / 2;\n\n\t\t\t_svg.setAttribute( 'viewBox', ( - _svgWidthHalf ) + ' ' + ( - _svgHeightHalf ) + ' ' + _svgWidth + ' ' + _svgHeight );\n\t\t\t_svg.setAttribute( 'width', _svgWidth );\n\t\t\t_svg.setAttribute( 'height', _svgHeight );\n\n\t\t\t_clipBox.min.set( - _svgWidthHalf, - _svgHeightHalf );\n\t\t\t_clipBox.max.set( _svgWidthHalf, _svgHeightHalf );\n\n\t\t};\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _svgWidth,\n\t\t\t\theight: _svgHeight\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setPrecision = function ( precision ) {\n\n\t\t\t_precision = precision;\n\n\t\t};\n\n\t\tfunction removeChildNodes() {\n\n\t\t\t_pathCount = 0;\n\n\t\t\twhile ( _svg.childNodes.length > 0 ) {\n\n\t\t\t\t_svg.removeChild( _svg.childNodes[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction convert( c ) {\n\n\t\t\treturn _precision !== null ? c.toFixed( _precision ) : c;\n\n\t\t}\n\n\t\tthis.clear = function () {\n\n\t\t\tremoveChildNodes();\n\t\t\t_svg.style.backgroundColor = _clearColor.getStyle( _this.outputColorSpace );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera instanceof Camera === false ) {\n\n\t\t\t\tconsole.error( 'THREE.SVGRenderer.render: camera is not an instance of Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst background = scene.background;\n\n\t\t\tif ( background && background.isColor ) {\n\n\t\t\t\tremoveChildNodes();\n\t\t\t\t_svg.style.backgroundColor = background.getStyle( _this.outputColorSpace );\n\n\t\t\t} else if ( this.autoClear === true ) {\n\n\t\t\t\tthis.clear();\n\n\t\t\t}\n\n\t\t\t_this.info.render.vertices = 0;\n\t\t\t_this.info.render.faces = 0;\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_renderData = _projector.projectScene( scene, camera, this.sortObjects, this.sortElements );\n\t\t\t_elements = _renderData.elements;\n\t\t\t_lights = _renderData.lights;\n\n\t\t\t_normalViewMatrix.getNormalMatrix( camera.matrixWorldInverse );\n\n\t\t\tcalculateLights( _lights );\n\n\t\t\t // reset accumulated path\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t\tfor ( let e = 0, el = _elements.length; e < el; e ++ ) {\n\n\t\t\t\tconst element = _elements[ e ];\n\t\t\t\tconst material = element.material;\n\n\t\t\t\tif ( material === undefined || material.opacity === 0 ) continue;\n\n\t\t\t\t_elemBox.makeEmpty();\n\n\t\t\t\tif ( element instanceof RenderableSprite ) {\n\n\t\t\t\t\t_v1 = element;\n\t\t\t\t\t_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;\n\n\t\t\t\t\trenderSprite( _v1, element, material );\n\n\t\t\t\t} else if ( element instanceof RenderableLine ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\t_elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderLine( _v1, _v2, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( element instanceof RenderableFace ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;\n\n\t\t\t\t\tif ( _v1.positionScreen.z < - 1 || _v1.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\tif ( this.overdraw > 0 ) {\n\n\t\t\t\t\t\texpand( _v1.positionScreen, _v2.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v2.positionScreen, _v3.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v3.positionScreen, _v1.positionScreen, this.overdraw );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_elemBox.setFromPoints( [\n\t\t\t\t\t\t_v1.positionScreen,\n\t\t\t\t\t\t_v2.positionScreen,\n\t\t\t\t\t\t_v3.positionScreen\n\t\t\t\t\t] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderFace3( _v1, _v2, _v3, element, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tflushPath(); // just to flush last svg:path\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t if ( object.isSVGObject ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tif ( _vector3.z < - 1 || _vector3.z > 1 ) return;\n\n\t\t\t\t\tconst x = _vector3.x * _svgWidthHalf;\n\t\t\t\t\tconst y = - _vector3.y * _svgHeightHalf;\n\n\t\t\t\t\tconst node = object.node;\n\t\t\t\t\tnode.setAttribute( 'transform', 'translate(' + x + ',' + y + ')' );\n\n\t\t\t\t\t_svg.appendChild( node );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\tfunction calculateLights( lights ) {\n\n\t\t\t_ambientLight.setRGB( 0, 0, 0 );\n\t\t\t_directionalLights.setRGB( 0, 0, 0 );\n\t\t\t_pointLights.setRGB( 0, 0, 0 );\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t\t_ambientLight.r += lightColor.r;\n\t\t\t\t\t_ambientLight.g += lightColor.g;\n\t\t\t\t\t_ambientLight.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t\t_directionalLights.r += lightColor.r;\n\t\t\t\t\t_directionalLights.g += lightColor.g;\n\t\t\t\t\t_directionalLights.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\t_pointLights.r += lightColor.r;\n\t\t\t\t\t_pointLights.g += lightColor.g;\n\t\t\t\t\t_pointLights.b += lightColor.b;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction calculateLight( lights, position, normal, color ) {\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld )\n\t\t\t\t\t\t.sub( _normal.setFromMatrixPosition( light.target.matrixWorld ) )\n\t\t\t\t\t\t.normalize();\n\n\t\t\t\t\tlet amount = normal.dot( lightPosition );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\t\tlet amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.distance == 0 ? 1 : 1 - Math.min( position.distanceTo( lightPosition ) / light.distance, 1 );\n\n\t\t\t\t\tif ( amount == 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderSprite( v1, element, material ) {\n\n\t\t\tlet scaleX = element.scale.x * _svgWidthHalf;\n\t\t\tlet scaleY = element.scale.y * _svgHeightHalf;\n\n\t\t\tif ( material.isPointsMaterial ) {\n\n\t\t\t\tscaleX *= material.size;\n\t\t\t\tscaleY *= material.size;\n\n\t\t\t}\n\n\t\t\tconst path = 'M' + convert( v1.x - scaleX * 0.5 ) + ',' + convert( v1.y - scaleY * 0.5 ) + 'h' + convert( scaleX ) + 'v' + convert( scaleY ) + 'h' + convert( - scaleX ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isSpriteMaterial || material.isPointsMaterial ) {\n\n\t\t\t\tstyle = 'fill:' + material.color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\tfunction renderLine( v1, v2, material ) {\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y );\n\n\t\t\tif ( material.isLineBasicMaterial ) {\n\n\t\t\t\tlet style = 'fill:none;stroke:' + material.color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.linewidth + ';stroke-linecap:' + material.linecap;\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\tstyle = style + ';stroke-dasharray:' + material.dashSize + ',' + material.gapSize;\n\n\t\t\t\t}\n\n\t\t\t\taddPath( style, path );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderFace3( v1, v2, v3, element, material ) {\n\n\t\t\t_this.info.render.vertices += 3;\n\t\t\t_this.info.render.faces ++;\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y ) + 'L' + convert( v3.positionScreen.x ) + ',' + convert( v3.positionScreen.y ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\t_color.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_color.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) {\n\n\t\t\t\t_diffuseColor.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_diffuseColor.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t\t_color.copy( _ambientLight );\n\n\t\t\t\t_centroid.copy( v1.positionWorld ).add( v2.positionWorld ).add( v3.positionWorld ).divideScalar( 3 );\n\n\t\t\t\tcalculateLight( _lights, _centroid, element.normalModel, _color );\n\n\t\t\t\t_color.multiply( _diffuseColor ).add( material.emissive );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\t_normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix ).normalize();\n\n\t\t\t\t_color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );\n\n\t\t\t}\n\n\t\t\tif ( material.wireframe ) {\n\n\t\t\t\tstyle = 'fill:none;stroke:' + _color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.wireframeLinewidth + ';stroke-linecap:' + material.wireframeLinecap + ';stroke-linejoin:' + material.wireframeLinejoin;\n\n\t\t\t} else {\n\n\t\t\t\tstyle = 'fill:' + _color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\t// Hide anti-alias gaps\n\n\t\tfunction expand( v1, v2, pixels ) {\n\n\t\t\tlet x = v2.x - v1.x, y = v2.y - v1.y;\n\t\t\tconst det = x * x + y * y;\n\n\t\t\tif ( det === 0 ) return;\n\n\t\t\tconst idet = pixels / Math.sqrt( det );\n\n\t\t\tx *= idet; y *= idet;\n\n\t\t\tv2.x += x; v2.y += y;\n\t\t\tv1.x -= x; v1.y -= y;\n\n\t\t}\n\n\t\tfunction addPath( style, path ) {\n\n\t\t\tif ( _currentStyle === style ) {\n\n\t\t\t\t_currentPath += path;\n\n\t\t\t} else {\n\n\t\t\t\tflushPath();\n\n\t\t\t\t_currentStyle = style;\n\t\t\t\t_currentPath = path;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction flushPath() {\n\n\t\t\tif ( _currentPath ) {\n\n\t\t\t\t_svgNode = getPathNode( _pathCount ++ );\n\t\t\t\t_svgNode.setAttribute( 'd', _currentPath );\n\t\t\t\t_svgNode.setAttribute( 'style', _currentStyle );\n\t\t\t\t_svg.appendChild( _svgNode );\n\n\t\t\t}\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t}\n\n\t\tfunction getPathNode( id ) {\n\n\t\t\tif ( _svgPathPool[ id ] == null ) {\n\n\t\t\t\t_svgPathPool[ id ] = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\n\t\t\t\tif ( _quality == 0 ) {\n\n\t\t\t\t\t_svgPathPool[ id ].setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed\n\n\t\t\t\t}\n\n\t\t\t\treturn _svgPathPool[ id ];\n\n\t\t\t}\n\n\t\t\treturn _svgPathPool[ id ];\n\n\t\t}\n\n\t}\n\n}\n\nexport { SVGObject, SVGRenderer };\n","/**\n * @license\n * ts-browser-helpers v0.19.4\n * Copyright 2022-2025 repalash <palash@shaders.app>\n * MIT License\n * See ./dependencies.txt for bundled third-party dependencies and licenses.\n */\nclass H {\n  constructor() {\n    this._eventListeners = {}, this.dispatchEvent = this.dispatchEvent.bind(this), this.addEventListener = this.addEventListener.bind(this), this.removeEventListener = this.removeEventListener.bind(this), this.hasEventListener = this.hasEventListener.bind(this);\n  }\n  addEventListener(e, i) {\n    const n = this._eventListeners;\n    n[e] === void 0 && (n[e] = []), n[e].includes(i) || n[e].push(i);\n  }\n  hasEventListener(e, i) {\n    const n = this._eventListeners;\n    return n[e] !== void 0 && n[e].includes(i);\n  }\n  removeEventListener(e, i) {\n    const r = this._eventListeners[e];\n    if (r !== void 0) {\n      const o = r.indexOf(i);\n      o !== -1 && r.splice(o, 1);\n    }\n  }\n  dispatchEvent(e) {\n    const n = this._eventListeners[e.type];\n    if (n !== void 0) {\n      e.target = this;\n      const r = n.slice(0);\n      for (let o = 0, s = r.length; o < s; o++) r[o].call(this, e);\n    }\n  }\n}\nasync function pe(t) {\n  return new Promise((e) => setTimeout(e, Math.max(0, t)));\n}\nfunction _() {\n  return (typeof performance > \"u\" ? Date : performance).now();\n}\nclass me extends H {\n  constructor() {\n    super(...arguments), this._onPointerDown = (e) => {\n      if (e.button !== 0 || !this._element) return;\n      this._pointerUp = void 0;\n      const i = e.clientX / this._element.clientWidth * 2 - 1, n = -(e.clientY / this._element.clientHeight) * 2 + 1, r = _();\n      this._pointerDown = { x: i, y: n, time: r }, this._pointer = this._pointerDown, this.dispatchEvent({ type: \"dragStart\", pointer: this._pointerDown });\n    }, this._onPointerMove = (e) => {\n      if (!this._pointerDown || !this._pointer || !this._element) return;\n      const i = e.clientX / this._element.clientWidth * 2 - 1, n = -(e.clientY / this._element.clientHeight) * 2 + 1, r = _();\n      this.dispatchEvent({\n        type: \"drag\",\n        pointer: this._pointer,\n        drag: { x: i - this._pointerDown.x, y: n - this._pointerDown.y, time: r - this._pointerDown.time },\n        delta: { x: i - this._pointer.x, y: n - this._pointer.y, time: r - this._pointer.time }\n      }), this._pointer = { x: i, y: n, time: _() }, e.buttons % 2 === 0 && this._onPointerUp(e);\n    }, this._onPointerUp = (e) => {\n      if (e.button !== 0 || !this._pointerDown || !this._element) return;\n      const i = e.clientX / this._element.clientWidth * 2 - 1, n = -(e.clientY / this._element.clientHeight) * 2 + 1, r = _();\n      this._pointerUp = { x: i, y: n, time: r }, this.dispatchEvent({\n        type: \"dragEnd\",\n        pointer: this._pointerUp,\n        drag: {\n          x: this._pointerUp.x - this._pointerDown.x,\n          y: this._pointerUp.y - this._pointerDown.y,\n          time: this._pointerUp.time - this._pointerDown.time\n        }\n      }), this._pointerDown = void 0, this._pointer = void 0;\n    };\n  }\n  get element() {\n    return this._element;\n  }\n  set element(e) {\n    this._element !== e && (this._element && this._removeElement(), this._element = e, this._element && this._addElement());\n  }\n  _removeElement() {\n    var e, i, n, r, o;\n    (e = this._element) == null || e.removeEventListener(\"pointerdown\", this._onPointerDown), (i = this._element) == null || i.removeEventListener(\"pointermove\", this._onPointerMove), (n = this._element) == null || n.removeEventListener(\"pointerup\", this._onPointerUp), (r = this._element) == null || r.removeEventListener(\"pointercancel\", this._onPointerUp), (o = this._element) == null || o.removeEventListener(\"pointerout\", this._onPointerUp);\n  }\n  _addElement() {\n    var e, i, n, r, o;\n    (e = this._element) == null || e.addEventListener(\"pointerdown\", this._onPointerDown), (i = this._element) == null || i.addEventListener(\"pointermove\", this._onPointerMove), (n = this._element) == null || n.addEventListener(\"pointerup\", this._onPointerUp), (r = this._element) == null || r.addEventListener(\"pointercancel\", this._onPointerUp), (o = this._element) == null || o.addEventListener(\"pointerout\", this._onPointerUp);\n  }\n  dispose() {\n    this.element = void 0;\n  }\n}\nclass ge {\n  constructor(e) {\n    this.options = {\n      limit: 500,\n      // maximum commands stack size\n      debug: !1,\n      // whether to emit execution status in console\n      bindHotKeys: !1\n      // whether to bind \"undo\" and \"redo\" commands to \"Ctrl+Z\", \"Ctrl+Y\" & \"Ctrl+Shift+Z\" hot keys\n      // useTransactions: true   // whether to initialize transactions manager\n    }, this.enabled = !0, this.presets = {}, this._keyDown = (i) => {\n      if (!this.enabled) return;\n      const n = i.ctrlKey || i.metaKey;\n      i.code === \"KeyZ\" && n && !i.shiftKey ? this.undo() : (i.code === \"KeyZ\" && n && i.shiftKey || i.code === \"KeyY\" && i.ctrlKey) && this.redo();\n    }, Object.assign(this.options, e), this.limit = e.limit, this.options = e, this.reset(), e.bindHotKeys && this.bindHotKeys(), this.log(`Initialized with stack limit of ${this.limit} commands`);\n  }\n  /**\n   * Bind 'undo' and 'redo' actions to 'Ctrl/Cmd+Z', 'Ctrl+Y' & 'Ctrl/Cmd+Shift+Z' hot keys.\n   * It is a basic implementation for quick testing and should be replaced with custom event handlers\n   * for more flexible processing.\n   * @returns {JSUndoManager}\n   */\n  bindHotKeys() {\n    return this.log(\"Bound 'undo' and 'redo' actions to 'Ctrl/Cmd+Z', 'Ctrl+Y' & 'Ctrl/Cmd+Shift+Z' hot keys\"), (this.options.hotKeyRoot ?? document).addEventListener(\"keydown\", this._keyDown), this;\n  }\n  /**\n   * Removes the event listeners and clears the stack\n   */\n  dispose() {\n    return (this.options.hotKeyRoot ?? document).removeEventListener(\"keydown\", this._keyDown), this.reset();\n  }\n  /**\n   * Remember executed command containing \"redo\" and \"undo\" functions\n   * @param {Object|Function} command - either an object with \"redo\" and \"undo\" functions\n   * @returns {JSUndoManager}\n   */\n  record(e) {\n    return this.enabled ? (this._record(e), this) : this;\n  }\n  replaceLast(e) {\n    const i = this.peek();\n    if (i)\n      return this.log(\"replace\", i, \"with\", e), this.stack[this.sp] = e, this;\n  }\n  /**\n   * Execute function and record it with its opposite \"undo\" function\n   * @param {Object|Function} command - either an object with \"redo\" and \"undo\" functions\n   * @param {Function} [undo] - \"undo\" function, used if the first argument is also a function\n   * @returns {JSUndoManager}\n   */\n  execute(e) {\n    if (!this.enabled) return;\n    let i = this._rc(e), n = i.redo;\n    return this.record.apply(this, i), this.log(\"Executing function...\"), n.apply(e), this;\n  }\n  _rc(e) {\n    if (e.type) {\n      const i = this.presets[e.type];\n      if (typeof i == \"function\")\n        return i(e);\n      throw console.error(e, i, this.presets), new Error(\"Preset command not found\");\n    } else\n      return e;\n  }\n  _record(e) {\n    this.enabled && (this.log(\"Recording command\", e), this._rebase(), this.stack.push(e), this.sp++, this._keepLimit());\n  }\n  //forget \"future\" commands if stack pointer is not at the end\n  _rebase() {\n    this.canRedo() && (this.stack.length = this.sp + 1);\n  }\n  //sustain limited size of stack; cut extra commands starting with the latest ones\n  _keepLimit() {\n    if (this.stack.length <= this.limit)\n      return;\n    let e = this.stack.length - this.limit;\n    this.log(\"Stack size reached its limit: ${this.limit} commands. Cutting off most old commands...\"), e === 1 ? this.stack.shift() : this.stack.splice(0, e), this.sp -= e;\n  }\n  /**\n   * Undo previous command if possible\n   * @returns {JSUndoManager}\n   */\n  undo() {\n    if (!this.canUndo())\n      return this;\n    let e = this.stack[this.sp];\n    return this.log(\"undo\"), this.sp--, this._rc(e).undo(), this;\n  }\n  /**\n   * Check whether undoing previous command is possible\n   * @returns {boolean}\n   */\n  canUndo() {\n    return this.sp >= 0 && this.enabled;\n  }\n  /**\n   * Get the last command that was done\n   */\n  peek() {\n    return this.canUndo() ? this.stack[this.sp] : null;\n  }\n  /**\n   * Redo the command which was previously undone\n   * @returns {JSUndoManager}\n   */\n  redo() {\n    if (!this.canRedo())\n      return this;\n    let e = this.stack[this.sp + 1];\n    return this.log(\"redo\"), this.sp++, this._rc(e).redo(), this;\n  }\n  /**\n   * Check whether redoing command is possible\n   * @returns {boolean}\n   */\n  canRedo() {\n    return this.sp < this.stack.length - 1 && this.enabled;\n  }\n  /**\n   * Gets the last command that was undone\n   */\n  peekForward() {\n    return this.canRedo() ? this.stack[this.sp + 1] : null;\n  }\n  /**\n   * Change stack size limit initially defined in the constructor options\n   * @param {number} limit\n   */\n  setLimit(e) {\n    let i = this.stack.length - this.sp - 1;\n    if (e < 1 || typeof e != \"number\")\n      throw new TypeError(`JSUndoManager.setLimit(): unexpected argument limit=${e}. Should be a positive number`);\n    return e < i ? console.warn(`JSUndoManager.setLimit(): cannot set stack limit (${e}) less than the number of 'redoable' commands (${i})`) : (this.limit = Math.floor(e), this._keepLimit()), this;\n  }\n  /**\n   * Reset all commands from memory\n   */\n  reset() {\n    return this.log(\"reset\"), this.stack = [], this.sp = -1, this;\n  }\n  /**\n   * Check whether the commands stack is empty\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return !this.stack.length;\n  }\n  /**\n   * Check whether the commands stack size reaches its limit\n   * @returns {boolean}\n   */\n  isFull() {\n    return this.stack.length === this.limit;\n  }\n  /**\n   * Get number of commands in memory stack\n   * @returns {Number}\n   */\n  getSize() {\n    return this.stack.length;\n  }\n  log(e, ...i) {\n    this.options.debug && console.log(`Command Manager: ${e}`, ...i);\n  }\n}\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst w = class w {\n  constructor(e = w.DECAY_MILLISECONDS) {\n    this.velocity = 0, this.naturalFrequency = 0, this.setDecayTime(e);\n  }\n  setDecayTime(e) {\n    this.naturalFrequency = 1 / Math.max(w.MIN_DECAY_MILLISECONDS, e);\n  }\n  update(e, i, n, r) {\n    const o = 2e-4 * this.naturalFrequency;\n    if (e == null || r === 0 || e === i && this.velocity === 0)\n      return i;\n    if (n < 0)\n      return e;\n    const s = e - i, a = this.velocity + this.naturalFrequency * s, c = s + n * a, u = Math.exp(-this.naturalFrequency * n), l = (a - this.naturalFrequency * c) * u, h = -this.naturalFrequency * (l + a * u);\n    return Math.abs(l) < o * Math.abs(r) && h * s >= 0 ? (this.velocity = 0, i) : (this.velocity = l, i + c * u);\n  }\n};\nw.SETTLING_TIME = 1e4, w.MIN_DECAY_MILLISECONDS = 1e-3, w.DECAY_MILLISECONDS = 50;\nlet M = w;\nfunction we() {\n  const t = document.createElementNS(\"http://www.w3.org/1999/xhtml\", \"canvas\");\n  return t.style.display = \"block\", t;\n}\nfunction ye({ innerHTML: t = \"\", id: e, classList: i, addToBody: n = !0, elementTag: r = \"div\" }) {\n  const o = document.createElement(r);\n  return e && (o.id = e), o.innerHTML = t, i && o.classList.add(...i), n && document.body.appendChild(o), o;\n}\nasync function N(t) {\n  return new Promise((e, i) => {\n    const n = new Image();\n    n.onload = () => e(n), n.onerror = i, n.crossOrigin = \"anonymous\", n.decoding = \"sync\", n.src = t;\n  });\n}\nfunction W(t, e = document.head) {\n  const i = document.createElement(\"style\");\n  return i.type = \"text/css\", i.innerText = t, e == null || e.appendChild(i), i;\n}\nasync function ve(t, e = document.head) {\n  return new Promise((i, n) => {\n    const r = document.createElement(\"script\");\n    r.setAttribute(\"src\", t), r.addEventListener(\"load\", () => i(r)), r.addEventListener(\"error\", n), e.appendChild(r);\n  });\n}\nasync function be(t, e) {\n  var n;\n  t.innerHTML = e;\n  const i = t.getElementsByTagName(\"script\");\n  for (let r = 0; r < i.length; r++) {\n    const o = i[r], s = V(o);\n    let a = !1;\n    await new Promise((c) => {\n      s.onload = c, s.onerror = () => {\n        a = !0, c(void 0);\n      };\n    }), !a && ((n = o.parentNode) == null || n.replaceChild(s, o));\n  }\n}\nfunction V(t, e) {\n  e = e ?? document.createElement(\"script\"), e.type = t.type || \"text/javascript\", e.text = t.text;\n  for (let i = 0; i < t.attributes.length; i++) {\n    const n = t.attributes[i];\n    e.setAttribute(n.name, n.value);\n  }\n  return e;\n}\nfunction xe(t) {\n  if (!window)\n    return console.warn(\"window is required\"), \"\";\n  let e = \"\";\n  const i = new Uint8Array(t), n = i.byteLength;\n  for (let r = 0; r < n; r++)\n    e += String.fromCharCode(i[r]);\n  return window.btoa(e);\n}\nfunction ke(t) {\n  if (!window)\n    return console.warn(\"window is required\"), new Uint8Array(0);\n  const e = window.atob(t), i = e.length, n = new Uint8Array(i);\n  for (let r = 0; r < i; r++)\n    n[r] = e.charCodeAt(r);\n  return n.buffer;\n}\nconst B = {\n  Int8Array,\n  Uint8Array,\n  Uint8ClampedArray,\n  Int16Array,\n  Uint16Array,\n  Int32Array,\n  Uint32Array,\n  Float32Array,\n  Float64Array\n};\nfunction Ee(t, e) {\n  return new B[t](e);\n}\nfunction Ce(t) {\n  return t.replace(\n    /\\w\\S*/g,\n    function(e) {\n      return e.charAt(0).toUpperCase() + e.substr(1).toLowerCase();\n    }\n  );\n}\nfunction _e(t) {\n  return t.replace(\n    /([-_][a-z])/ig,\n    (e) => e.toUpperCase().replace(\"-\", \"\").replace(\"_\", \"\")\n  );\n}\nfunction Se(t) {\n  if (!t || t === \"\" || t.match(/__MACOSX\\/.*\\._/)) return \"\";\n  t = t.replace(/\\?.*$/, \"\");\n  const e = t.split(/[\\\\/]/).pop() ?? \"\", i = e.lastIndexOf(\".\");\n  return e === \"\" || i < 1 ? \"\" : e.slice(i + 1);\n}\nfunction Le(t) {\n  return t.substring(t.lastIndexOf(\"/\") + 1);\n}\nfunction Y(t) {\n  return RegExp.escape ? RegExp.escape(t) : t.replace(/[.*+?^${}()|[\\]/\\\\=!:]/g, \"\\\\$&\");\n}\nfunction f(t, e, i) {\n  return t.replace(new RegExp(Y(e), \"g\"), i);\n}\nfunction Ae(t, e, i, {\n  replaceAll: n = !1,\n  prepend: r = !1,\n  append: o = !1,\n  notFoundCallback: s = () => {\n  }\n} = {}) {\n  if (s && !t.includes(e))\n    return s(), t;\n  let a = i;\n  return r ? a = i + e : o && (a = e + i), n ? t.replaceAll(e, a) : t.replace(e, a);\n}\nfunction ze(t) {\n  return t.sort(), t[0].split(\"\").map((e, i) => t[t.length - 1][i] === e ? e : \"\\0\").join(\"\").split(\"\\0\").at(0) || \"\";\n}\nfunction g(t) {\n  return t.replace(/[&<>\"']/g, function(e) {\n    switch (e) {\n      case \"&\":\n        return \"&amp;\";\n      case \"<\":\n        return \"&lt;\";\n      case \">\":\n        return \"&gt;\";\n      case '\"':\n        return \"&quot;\";\n      case \"'\":\n        return \"&#39;\";\n      default:\n        return e;\n    }\n  });\n}\nconst Ue = (t, ...e) => String.raw({ raw: t }, ...e), K = (t, ...e) => String.raw({ raw: t }, ...e), Oe = (t, ...e) => String.raw({ raw: t }, ...e), J = (t, ...e) => {\n  let i = String.raw({ raw: t }, ...e);\n  return i = f(i, \"%\", \"%25\"), i = f(i, \"> <\", \"><\"), i = f(i, \"; }\", \";}\"), i = f(i, \"<\", \"%3c\"), i = f(i, \">\", \"%3e\"), i = f(i, '\"', \"'\"), i = f(i, \"#\", \"%23\"), i = f(i, \"{\", \"%7b\"), i = f(i, \"}\", \"%7d\"), i = f(i, \"|\", \"%7c\"), i = f(i, \"^\", \"%5e\"), i = f(i, \"`\", \"%60\"), i = f(i, \"@\", \"%40\"), i = f(i, \"&\", \"&amp;\"), i = f(i, `\n`, \"%0A\"), \"data:image/svg+xml;charset=UTF-8,\" + i;\n};\nfunction De(t = document.head) {\n  return W(K`\n      ::-webkit-scrollbar\n      {\n        width: 8px;  /* for vertical scrollbars */\n        height: 8px; /* for horizontal scrollbars */\n      }\n      ::-webkit-scrollbar-track\n      {\n        background: rgba(64, 64, 64, 0.4);\n        border-radius: 6px;\n      }\n      ::-webkit-scrollbar-thumb\n      {\n        background: rgba(128, 128, 128, 0.2);\n        border-radius: 6px;\n      }\n      ::-webkit-scrollbar-corner {background: rgba(0,0,0,0.5);}\n    `, t);\n}\nfunction G(t, e) {\n  const i = window.URL.createObjectURL(t), n = document.createElement(\"a\");\n  n.style.display = \"none\", n.href = i, n.download = e, document.body.appendChild(n), n.click(), setTimeout(() => {\n    document.body.removeChild(n), window.URL.revokeObjectURL(i);\n  }, 1e3);\n}\nasync function X(t) {\n  return new Promise((e, i) => {\n    const n = new FileReader();\n    n.onload = (r) => e(n.result), n.onerror = (r) => i(n.error), n.onabort = (r) => i(new Error(\"Read aborted\")), n.readAsDataURL(t);\n  });\n}\nfunction Ie(t, e) {\n  return G(t, e ?? t.name);\n}\nasync function Pe(t = !1, e = !1, i) {\n  const n = document.createElement(\"input\");\n  n.type = \"file\", n.multiple = t, n.accept = i || \"*\", n.webkitdirectory = e, n.style.display = \"none\", document.body.appendChild(n), n.click();\n  const r = await new Promise((o) => {\n    n.onchange = (s) => {\n      o(Array.from(n.files || []));\n    };\n  });\n  return document.body.removeChild(n), r;\n}\nfunction Te() {\n  let t = !1;\n  return function(e) {\n    (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(e.substr(0, 4))) && (t = !0);\n  }(navigator.userAgent || navigator.vendor || window.opera), t;\n}\nfunction Me(t) {\n  return t < 0.04045 ? t * 0.0773993808 : Math.pow(t * 0.9478672986 + 0.0521327014, 2.4);\n}\nfunction $e(t) {\n  return t < 31308e-7 ? t * 12.92 : 1.055 * Math.pow(t, 0.41666) - 0.055;\n}\nfunction Re(t, e = 1, i = 1) {\n  const n = document.createElement(\"canvas\");\n  n.width = e, n.height = i;\n  const r = n.getContext(\"2d\");\n  r.fillStyle = \"#\" + t, r.fillRect(0, 0, e, i);\n  const o = n.toDataURL();\n  return n.remove(), o;\n}\nfunction Z(t, e) {\n  let i;\n  do\n    i = Object.getOwnPropertyDescriptor(t, e);\n  while (!i && (t = Object.getPrototypeOf(t)));\n  return i;\n}\nfunction Q(t, e, i = !0, n = !1) {\n  const r = Z(t, e);\n  return !!(r != null && r.set) || i && (r == null ? void 0 : r.writable) !== !1 && (r == null ? void 0 : r.get) === void 0 || n && !r;\n}\nfunction D(t, e, i, n = !0, r = !1) {\n  return t && Q(t, e, n, r) ? (t[e] = i, !0) : !1;\n}\nfunction Fe(t, ...e) {\n  return typeof t == \"function\" && (t = t(...e)), t;\n}\nfunction qe(t, e, i) {\n  for (const n of i) {\n    const r = t[n];\n    r !== void 0 && D(e, n, r, !0);\n  }\n  return e;\n}\nfunction He(t, e) {\n  for (const i of e)\n    if (!t.includes(i)) return !1;\n  return !0;\n}\nfunction j(t, e) {\n  for (let i = t.length - 1; i >= 0; i--)\n    if (e(t[i])) return i;\n  return -1;\n}\nfunction Ne(t, e) {\n  return function(...i) {\n    return t(), e && e.call(this, ...i);\n  };\n}\nfunction We(t, e) {\n  return function(...i) {\n    return t(...i), e && e.call(this, ...i);\n  };\n}\nfunction Ve(t, e, i = !1) {\n  for (typeof t == \"string\" && (t = t.split(\".\")); t.length > 0; ) {\n    if (!e) return e;\n    const n = t.splice(0, 1)[0];\n    if (!(n.length < 1))\n      if (Array.isArray(e))\n        e = e[parseInt(n)];\n      else if (typeof e == \"object\" && n in e)\n        e = e[n];\n      else {\n        if (i)\n          throw new Error(\"invalid access, check \" + n + \" in \" + e);\n        return;\n      }\n  }\n  return e;\n}\nfunction Be(t, e) {\n  return Object.keys(t).find((i) => t[i] === e);\n}\nfunction L(t, e) {\n  return Object.hasOwn ? Object.hasOwn(t, e) : t.hasOwnProperty(e);\n}\nfunction Ye(t, e, i = !0) {\n  const n = i ? t : {}, r = Object.keys(t);\n  for (const o of r) n[o] = e(t[o], o);\n  return n;\n}\nfunction $(t, e) {\n  return Object.fromEntries(Object.entries(t).map((i) => e(i)));\n}\nconst A = {\n  // object\n  priority: 1 / 0,\n  serialize: (t, e) => $(t, ([i, n]) => [i, m.Serialize(n, e, !1)]),\n  deserialize: (t, e, i) => Object.assign(e || {}, $(t, ([n, r]) => [n, m.Deserialize(r, e == null ? void 0 : e[n], i, !1)])),\n  isType: (t) => (t.constructor || Object) === Object\n}, d = class d {\n  static GetSerializer(e) {\n    return d.Serializers.find((i) => i.isType(e));\n  }\n  static RegisterSerializer(...e) {\n    for (const i of e) {\n      const n = i.priority ?? 1e10, r = j(d.Serializers, (o) => o.priority !== void 0 && o.priority < n);\n      r >= 0 ? d.Serializers.splice(r + 1, 0, i) : d.Serializers.push(i);\n    }\n  }\n  static UnregisterSerializer(...e) {\n    for (const i of e) {\n      const n = d.Serializers.indexOf(i);\n      n >= 0 && d.Serializers.splice(n, 1);\n    }\n  }\n  /**\n   * Serialize an object\n   * @param obj - object to serialize\n   * @param meta - Optional object to store common meta-data/resources across the serialization process of multiple objects\n   * @param isThis - true if called from inside the serialization function, like custom {@link IJSONSerializable.toJSON}.\n   */\n  static Serialize(e, i, n = !1) {\n    if (typeof e == \"function\") return;\n    if (!n) {\n      const s = d.GetSerializer(e);\n      if (s) return s.serialize(e, i);\n      if (typeof e.toJSON == \"function\") {\n        const a = e.toJSON(i, !0);\n        return e.serializableClassId && a && (a.serializableClassId = e.serializableClassId), a;\n      }\n    }\n    let r = e.constructor ?? Object;\n    const o = {};\n    for (; r && r !== Object; ) {\n      const s = d.TypeMap.get(r) ?? [];\n      for (const [a, c] of s)\n        o[a] = d.Serialize(e[c], i, !1);\n      r = Object.getPrototypeOf(r);\n    }\n    return e.serializableClassId && (o.serializableClassId = e.serializableClassId), o;\n  }\n  /**\n   * Deserialize an object\n   * @param data - data to deserialize\n   * @param obj - current object that's set. If of the same class/type the data is deserialized into that instead of creating new objects.\n   * @param meta - Optional object to retrieve common meta-data/resources across the deserialization process of multiple objects. Objects in meta must be class instances, not js objects. (like Material, Texture, Object3D etc)\n   * @param isThis - true if called from inside the deserialization function, like custom {@link IJSONSerializable.fromJSON}\n   */\n  static Deserialize(e, i, n, r = !1) {\n    if (e === void 0 || i === e) return i;\n    if (e && typeof e == \"object\" && (e.constructor || Object) === Object && e.resource && typeof e.resource == \"string\" && e.uuid) {\n      const s = n == null ? void 0 : n[e.resource];\n      if (!s)\n        return console.warn(`Serialization: Resource ${e.resource} not found`), i;\n      const a = s[e.uuid];\n      if (!a)\n        return console.warn(`Serialization: Resource ${e.resource} with uuid ${e.uuid} not found`), i;\n      if (e = a, typeof e == \"object\" && (e.__useCount = e.__useCount ? e.__useCount + 1 : 1), i === e) return i;\n      if (e && typeof e == \"object\") {\n        if ((e.constructor || Object) !== Object)\n          return i && console.warn(\"Serialization: replacing object\", i, \"with deserialized object\", e), e;\n        console.error(\"Serialization: during Deserialize, meta should only have class instances, not js objects\", e, i, n);\n      }\n    }\n    if (e && typeof e == \"object\" && (e.constructor || Object) !== Object && !Array.isArray(e) && !e.serializableClassId) {\n      if (e instanceof Blob) return e;\n      console.warn(\"Serialization: Data might already be deserialized. It will be cloned, or copied to source\", e, \"source\", i, e.constructor, e.constructor !== Object);\n    }\n    if (e && typeof e == \"object\") {\n      const s = (a) => {\n        const c = d.SerializableClasses.get(a);\n        c && (c.DataInConstructor ? i = new c(e) : i = new c());\n      };\n      e.serializableClassId && (!i || i.serializableClassId !== e.serializableClassId) && s(e.serializableClassId), e.type && (!i || i.type !== e.type) && s(e.type), !Array.isArray(i) && Array.isArray(e) ? i = [] : typeof i != \"object\" && (e.constructor || Object) === Object && (i = {});\n    }\n    if (typeof i == \"function\")\n      return console.error(\"Serialization: Cannot deserialize into a function\", i, e), i;\n    if (!r) {\n      const s = d.GetSerializer(e);\n      if (s && s !== A) return s.deserialize(e, i, n);\n    }\n    if (!e || i === void 0 || i === null || typeof i != \"object\")\n      return e;\n    if (!r && typeof (i == null ? void 0 : i.fromJSON) == \"function\")\n      return i.fromJSON(e, n, !0), i;\n    let o = i.constructor ?? Object;\n    if (o === Object) return A.deserialize(e, i, n);\n    for (; o && o !== Object; ) {\n      const s = d.TypeMap.get(o) ?? [];\n      for (const [a, c] of s) {\n        const u = i[c], l = d.Deserialize(e[a], u, n, !1);\n        l !== u && D(i, c, l, !0);\n      }\n      o = Object.getPrototypeOf(o);\n    }\n    return i;\n  }\n};\nd.TypeMap = /* @__PURE__ */ new Map(), d.SerializableClasses = /* @__PURE__ */ new Map(), d.Serializers = [\n  {\n    // arrays\n    priority: 0,\n    isType: (e) => Array.isArray(e),\n    serialize: (e, i) => e.map((n) => d.Serialize(n, i, !1)),\n    deserialize: (e, i, n) => {\n      const r = e.length;\n      Array.isArray(i) || (i = []);\n      for (let o = 0; o < r; o++) {\n        const s = e[o], a = i.length > o ? d.Deserialize(s, i[o], n, !1) : d.Deserialize(s, void 0, n, !1);\n        i.length <= o ? i.push(a) : i[o] = a;\n      }\n      return i;\n    }\n  },\n  {\n    // primitives\n    priority: 0,\n    isType: (e) => !e || typeof e != \"object\",\n    serialize: (e) => {\n      if (e && typeof e == \"number\") {\n        if (e === 1 / 0) return \"Infinity\";\n        if (e === -1 / 0) return \"-Infinity\";\n        if (isNaN(e)) return \"NaN\";\n      }\n      return e;\n    },\n    deserialize: (e, i) => {\n      if (typeof i == \"number\") {\n        if (e === \"Infinity\") return 1 / 0;\n        if (e === \"-Infinity\") return -1 / 0;\n        if (e === \"NaN\") return NaN;\n        if (typeof e == \"number\" || !e) return e;\n      }\n      return e;\n    }\n  },\n  A\n];\nlet m = d;\nconst k = class k {\n  static callFunction(e, i, n = []) {\n    if (!i) return e(...n);\n    if (e.name && i[e.name] === e) return e.call(i, ...n);\n    k.methodMap.has(i) || k.methodMap.set(i, /* @__PURE__ */ new WeakMap());\n    const r = k.methodMap.get(i);\n    if (!r.has(e)) {\n      let o = i;\n      for (; o; ) {\n        const s = Object.values(Object.getOwnPropertyDescriptors(o));\n        for (let a of s)\n          if (a.value === e)\n            return r.set(e, !0), e.call(i, ...n);\n        o = Object.getPrototypeOf(o);\n      }\n      r.set(e, !1);\n    }\n    return r.get(e) ? e.call(i, ...n) : e(...n);\n  }\n};\nk.methodMap = /* @__PURE__ */ new WeakMap();\nlet U = k;\nfunction I(t, e = \"param\") {\n  if (!t) throw new Error(\"onChange: fnKey is undefined, make sure the function exists or provide a string\");\n  return (i, n, r) => {\n    const o = {\n      get() {\n        return this[`_oc_${n}`];\n      },\n      set(s) {\n        var u;\n        const a = this[`_oc_${n}`];\n        if (a === s) return;\n        this[`_oc_${n}`] = s;\n        const c = e === \"param\" ? [n, s, a, this] : e === \"object\" ? [{ key: n, value: s, oldValue: a, target: this }] : [];\n        typeof t == \"string\" ? (u = this[t]) == null || u.call(this, ...c) : typeof t == \"function\" && U.callFunction(t, this, c);\n      }\n    };\n    if (r)\n      return L(r, \"value\") && delete r.value, L(r, \"writable\") && delete r.writable, L(r, \"initializer\") && delete r.initializer, Object.assign(r, o);\n    Object.defineProperty(i, n, o);\n  };\n}\nfunction Ke(t, e = \"void\") {\n  if (!t) throw new Error(\"onChange: fnKey is undefined, make sure the function exists or provide a string\");\n  return I(t, e);\n}\nfunction Je(t, e = \"object\") {\n  if (!t) throw new Error(\"onChange: fnKey is undefined, make sure the function exists or provide a string\");\n  return I(t, e);\n}\nfunction Ge(t) {\n  return I((e, i, n, r) => {\n    if (!r.dispatchEvent) throw new Error(\"onChangeDispatchEvent: target does not have dispatchEvent\");\n    r.dispatchEvent({ type: t || `${e}-changed`, detail: { key: e, value: i, oldValue: n } });\n  }, \"param\");\n}\nfunction Xe(t) {\n  return (e, i) => {\n    const n = e.constructor;\n    if (n === Object) throw new Error(\"All properties in an object are serialized by default\");\n    m.TypeMap.has(n) || m.TypeMap.set(n, []), m.TypeMap.get(n).push([t || i, i]);\n  };\n}\nfunction Ze(t) {\n  return (e) => (e = class extends e {\n    constructor() {\n      super(...arguments), this.serializableClassId = t;\n    }\n    // static DataInConstructor = false // if constructor is equivalent to fromJSON, see LUTCubeTextureWrapper.\n  }, m.SerializableClasses.set(t, e), e);\n}\nasync function Qe(t, e, i, n = 12) {\n  const r = typeof e == \"string\" ? new TextEncoder().encode(e) : e, o = await crypto.subtle.digest(\"SHA-256\", r), s = crypto.getRandomValues(new Uint8Array(n)), a = Array.from(s).map((x) => String.fromCharCode(x)).join(\"\"), c = { name: \"AES-GCM\", iv: s }, u = await crypto.subtle.importKey(\"raw\", o, c, !1, [\"encrypt\"]), l = typeof t == \"string\" ? new TextEncoder().encode(t) : t, h = await crypto.subtle.encrypt(c, u, l), v = new Uint8Array(h), p = Array.from(v), b = p.map((x) => String.fromCharCode(x)).join(\"\"), E = i ? typeof i == \"string\" ? i : new TextDecoder().decode(i) : \"\", C = i ? typeof i == \"string\" ? new TextEncoder().encode(i) : Array.from(i) : [];\n  return typeof t == \"string\" ? E + a + b : new Uint8Array([...C, ...s, ...p]);\n}\nasync function je(t, e, i = 12) {\n  const n = typeof e == \"string\" ? new TextEncoder().encode(e) : e, r = await crypto.subtle.digest(\"SHA-256\", n), o = t.slice(0, i), a = { name: \"AES-GCM\", iv: typeof o == \"string\" ? new Uint8Array(Array.from(o).map((h) => h.charCodeAt(0))) : o }, c = await crypto.subtle.importKey(\"raw\", r, a, !1, [\"decrypt\"]), u = t.slice(i), l = typeof u == \"string\" ? new Uint8Array(Array.from(u).map((h) => h.charCodeAt(0))) : u;\n  try {\n    const h = await crypto.subtle.decrypt(a, c, l);\n    return typeof t == \"string\" ? new TextDecoder().decode(h) : new Uint8Array(h);\n  } catch {\n    throw new Error(\"Decrypt failed\");\n  }\n}\nasync function et() {\n  return \"showOpenFilePicker\" in window ? window.showOpenFilePicker().then((t) => t[0]) : window.chooseFileSystemEntries();\n}\nfunction tt() {\n  if (\"showSaveFilePicker\" in window) {\n    const e = {\n      types: [{\n        description: \"Text file\",\n        accept: { \"text/plain\": [\".txt\"] }\n      }]\n    };\n    return window.showSaveFilePicker(e);\n  }\n  const t = {\n    type: \"save-file\",\n    accepts: [{\n      description: \"Text file\",\n      extensions: [\"txt\"],\n      mimeTypes: [\"text/plain\"]\n    }]\n  };\n  return window.chooseFileSystemEntries(t);\n}\nfunction it(t) {\n  return t.text ? t.text() : ee(t);\n}\nfunction ee(t) {\n  return new Promise((e) => {\n    const i = new FileReader();\n    i.addEventListener(\"loadend\", (n) => {\n      const r = (n.srcElement || n.target).result;\n      e(r);\n    }), i.readAsText(t);\n  });\n}\nasync function nt(t, e) {\n  if (t.createWriter) {\n    const n = await t.createWriter();\n    await n.write(0, e), await n.close();\n    return;\n  }\n  const i = await t.createWritable();\n  await i.write(e), await i.close();\n}\nasync function rt(t, e) {\n  const i = {};\n  return e && (i.writable = !0, i.mode = \"readwrite\"), await t.queryPermission(i) === \"granted\" || await t.requestPermission(i) === \"granted\";\n}\nfunction R(t, e = 8192, i = !1) {\n  var c;\n  const n = t.width || t.videoWidth, r = t.height || t.videoHeight;\n  if (!n || !r) throw new Error(\"Invalid bitmap\");\n  const o = document.createElement(\"canvas\");\n  o.width = Math.min(e, n), o.height = Math.floor(1 + o.width * r / n);\n  const s = t instanceof ImageBitmap, a = s && i && Math.abs(o.width - n) < 0.5 ? o.getContext(\"bitmaprenderer\") : void 0;\n  return a ? a.transferFromImageBitmap(t) : (c = o.getContext(\"2d\")) == null || c.drawImage(t, 0, 0, o.width, o.height), s && i && t.close(), o;\n}\nfunction ot(t, e = 8192, i = !1, n = \"image/png\") {\n  if (!(t.width || t.videoWidth) || !(t.height || t.videoHeight)) return \"\";\n  const r = R(t, e, !1), o = r.toDataURL(n);\n  return r.remove(), i && t instanceof ImageBitmap && t.close(), o;\n}\nasync function st(t, e = 8192, i = !1, n = \"image/png\") {\n  if (!(t.width || t.videoWidth) || !(t.height || t.videoHeight)) return Promise.reject(\"Invalid bitmap\");\n  const r = R(t, e, !1);\n  return new Promise((o, s) => {\n    r.toBlob((a) => {\n      a ? o(a) : s(\"Could not get blob\"), r.remove(), i && t instanceof ImageBitmap && t.close();\n    }, n);\n  });\n}\nasync function at(t) {\n  return new Promise((e, i) => {\n    const n = new Image();\n    n.addEventListener(\"load\", () => {\n      const r = document.createElement(\"canvas\");\n      r.width = n.width, r.height = n.height;\n      const o = r.getContext(\"2d\");\n      if (!o) {\n        i(new Error(\"Could not get 2d context\"));\n        return;\n      }\n      o.drawImage(n, 0, 0, r.width, r.height);\n      const s = o.getImageData(0, 0, r.width, r.height);\n      e(s), r.remove(), n.remove();\n    }, !1), n.addEventListener(\"error\", (r) => {\n      n.remove(), i(r);\n    }, !1), n.src = t;\n  });\n}\nfunction te(t, {\n  backgroundColor: e = \"\",\n  scale: i = 1,\n  width: n = 512,\n  height: r = 512\n}) {\n  const o = document.createElement(\"canvas\"), s = o.getContext(\"2d\"), a = i, c = n, u = r;\n  return o.width = c * a, o.height = u * a, o.style.width = `${c}`, o.style.height = `${u}`, (e == null ? void 0 : e.length) > 0 && (s.fillStyle = e, s.fillRect(0, 0, o.width, o.height)), s.drawImage(t, 0, 0, o.width, o.height), o;\n}\nfunction ct(t) {\n  const e = document.createElement(\"canvas\");\n  return e.width = t.width, e.height = t.height, e.getContext(\"2d\").putImageData(t, 0, 0), e;\n}\nfunction lt() {\n  const t = document.createElement(\"canvas\");\n  return t.getContext && t.getContext(\"2d\") ? t.toDataURL(\"image/webp\").startsWith(\"data:image/webp\") : !1;\n}\nfunction ut(t) {\n  const e = document.createElement(\"canvas\");\n  e.width = t.width || t.videoWidth || 1, e.height = t.height || t.videoHeight || 1;\n  const i = e.getContext(\"2d\");\n  if (!i) throw new Error(\"Unable to get 2d context\");\n  return i.translate(0, t.height || t.videoHeight || 1), i.scale(1, -1), i.drawImage(t, 0, 0), e;\n}\nfunction dt(t) {\n  return new Promise((e, i) => {\n    const n = new Image(), r = URL.createObjectURL(t);\n    n.onload = () => {\n      URL.revokeObjectURL(r), e(n);\n    }, n.onerror = (o) => {\n      URL.revokeObjectURL(r), i(o);\n    }, n.src = r;\n  });\n}\nconst ft = (t) => `data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='16' height='16' fill='%23${t}'/%3E%3C/svg%3E%0A`, ht = (t) => `data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='7' fill='%23${t}'/%3E%3C/svg%3E%0A`, pt = (t) => `data:image/svg+xml,%3Csvg viewBox='0 0 80 14' xmlns='http://www.w3.org/2000/svg'%3E%3Ctext style='font: 8px \"Roboto Mono\", \"Source Code Pro\", Menlo, Courier, monospace; fill: white;' x='9' y='9'%3E${t}%3C/text%3E%3C/svg%3E%0A`, F = async (t, e) => {\n  const i = await N(t);\n  return te(i, e);\n}, ie = async (t, e) => await F(t, e).then((i) => i.toDataURL(\"image/png\")), ne = async (t) => X(await (await fetch(t)).blob());\nasync function mt(t, e = ne) {\n  const i = t.match(/(((ftp|https?):\\/\\/)[\\-\\w@:%_\\+.~#?,&\\/\\/=]+)/g);\n  if (i)\n    for (const n of i) {\n      const r = await e(n);\n      t = t.replace(n, r);\n    }\n  return t;\n}\nfunction q(t, e, { width: i, height: n }, r = !0) {\n  const o = `\n<svg viewBox=\"0 0 ${i} ${n}\" xmlns=\"http://www.w3.org/2000/svg\">\n    <style>\n    ${e}\n    </style>\n    <foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\n        <div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"height: 100%; width: 100%; position: absolute: top:0; left:0\">\n            ${t}\n        </div>\n    </foreignObject>\n</svg>\n    `;\n  return r ? J(o) : o;\n}\nasync function gt(t, e, i) {\n  const n = q(t, e, i);\n  return await F(n, i);\n}\nasync function wt(t, e, i) {\n  const n = q(t, e, i);\n  return await ie(n, i);\n}\nfunction yt(t, e) {\n  return Math.abs(t) > Math.abs(e) ? t : e;\n}\nfunction vt(t, e, i) {\n  const n = i ? 1 : 0, r = ~(1 << e);\n  return t & r | n << e;\n}\nfunction bt(t, e) {\n  const i = ~(1 << e);\n  return t & i;\n}\nfunction xt() {\n  const t = (n, r) => n.toString(16).padStart(r, \"0\"), e = crypto.getRandomValues(new Uint8Array(16));\n  e[6] = e[6] & 15 | 64, e[8] = e[8] & 63 | 128;\n  const i = new DataView(e.buffer);\n  return `${t(i.getUint32(0), 8)}-${t(i.getUint16(4), 4)}-${t(i.getUint16(6), 4)}-${t(i.getUint16(8), 4)}-${t(i.getUint32(10), 8)}${t(i.getUint16(14), 4)}`;\n}\nfunction kt(t, e = null) {\n  var n;\n  return (n = window == null ? void 0 : window.location) != null && n.href ? new URL(window.location.href).searchParams.get(t) ?? e : e;\n}\nfunction Et(t, e, i = !1) {\n  var r;\n  if (!((r = window == null ? void 0 : window.location) != null && r.href)) return;\n  const n = new URLSearchParams(window.location.search);\n  e == null ? n.has(t) && n.delete(t) : n.set(t, e), i ? window.location.search = n.toString() : window.history.replaceState({}, \"\", \"?\" + n.toString());\n}\nfunction Ct(t, e = \"/\") {\n  return t.join(e);\n}\nfunction _t(t, e) {\n  const i = (e ? `var Module = { locateFile: function(s) { return \"${e}\"; } }; \n` : \"\") + `importScripts( \"${t}\" );`;\n  return URL.createObjectURL(new Blob([i], { type: \"text/javascript\" }));\n}\nconst St = {\n  alert: async (t) => window.alert(t),\n  prompt: async (t, e, i) => window.prompt(t, e),\n  confirm: async (t) => window.confirm(t),\n  confirmSync: (t) => window.confirm(t)\n}, re = '.dialog-container{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1000;border-radius:10px;padding:20px;max-width:calc(100% - 32px);width:calc(100% - 32px);color:#0a0a0a;background-color:#fff;border:1px solid oklch(.922 0 0);box-shadow:#0000 0 0,#0000 0 0,#0000 0 0,#0000 0 0,#0000001a 0 10px 15px -3px,#0000001a 0 4px 6px -4px;display:flex;gap:1rem;flex-direction:column;box-sizing:border-box;font-family:Inter,-apple-system,\"system-ui\",Segoe UI,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\";transition:max-width .5s,width .5s,height .5s}.dialog-content{display:flex;flex-direction:column;gap:.5rem;text-align:center}.dialog-title{font-size:1.125rem;font-weight:600;line-height:1.5;color:#0a0a0a}.dialog-message{color:#737373;font-size:.875rem;line-height:1.42}.dialog-footer{display:flex;gap:10px;flex-direction:column-reverse}@media (width >= 40rem){.dialog-content{text-align:left}.dialog-container{max-width:512px;width:512px}.dialog-footer{flex-direction:row;justify-content:flex-end}}.dialog-button,.dialog-input{height:2.25rem;box-sizing:border-box}.dialog-input{width:100%;padding:.25rem .75rem;font-size:1rem;border:1px solid oklch(.922 0 0);border-radius:.5rem;background:transparent;color:#0a0a0a;outline:none;transition:outline-width .2s}.dialog-button{padding:.5rem 1rem;box-shadow:#0000 0 0,#0000 0 0,#0000 0 0,#0000000d 0 1px 2px;border-radius:.5rem;border:1px solid oklch(.922 0 0);cursor:pointer;font-size:.875rem;background-color:#fff;color:#0a0a0a;transition:background-color .2s ease,color .2s ease,outline-width .2s ease}.dialog-button:focus,.dialog-input:focus{outline:3px solid #6d7a8c66}.dialog-button:hover{background-color:#f8f8f8}.dialog-ok{background-color:#0a0a0a;color:#fff}.dialog-ok:hover{background-color:#222}.dialog-link{max-width:100%;display:inline-block;vertical-align:bottom;text-decoration:underline;color:var(#2563eb);overflow:hidden}.dialog-link-text{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}';\nlet S = null;\nfunction oe(t) {\n  const e = /((https?:\\/\\/|www\\.)[^\\s<]+)/g;\n  return t.replace(e, (i) => {\n    let n = i;\n    return n.startsWith(\"http\") || (n = \"https://\" + n), `<a href=\"${n}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"dialog-link\"><span class=\"dialog-link-text\">${g(i)}</span></a>`;\n  });\n}\nfunction se(t) {\n  const e = g(t);\n  return oe(e).replace(/\\n/g, \"<br>\");\n}\nfunction P(t) {\n  return `\n${t.title ? `<div class=\"dialog-title\">${g(t.title)}</div>` : \"\"}\n<div class=\"dialog-message\">${se(t.message)}</div>\n`;\n}\nconst ae = (t) => `\n<div class=\"dialog-content\">\n${P(t)}\n</div>\n<div class=\"dialog-footer\">\n    ${t.ok && `<button class=\"dialog-button dialog-ok\">${g(t.ok)}</button>` || \"\"}\n</div>\n`, ce = (t) => `\n<div class=\"dialog-content\">\n${P(t)}\n</div>\n<div class=\"dialog-footer\">\n    ${t.cancel && `<button class=\"dialog-button dialog-cancel\">${g(t.cancel)}</button>` || \"\"}\n    ${t.ok && `<button class=\"dialog-button dialog-ok\">${g(t.ok)}</button>` || \"\"}\n</div>\n`, le = (t) => `\n<div class=\"dialog-content\">\n    ${P(t)}\n    <input class=\"dialog-input\" type=\"text\" value=\"${t.defaultValue ?? \"\"}\" style=\"margin-top:0.5rem;\"/>\n</div>\n<div class=\"dialog-footer\">\n    ${t.cancel && `<button class=\"dialog-button dialog-cancel\">${g(t.cancel)}</button>` || \"\"}\n    ${t.ok && `<button class=\"dialog-button dialog-ok\">${g(t.ok)}</button>` || \"\"}\n</div>\n`;\nfunction ue() {\n  S || (S = document.createElement(\"style\"), S.textContent = re, document.head.appendChild(S));\n}\nfunction z(t, { message: e, ...i }) {\n  ue();\n  const n = document.createElement(\"div\"), r = e == null ? void 0 : e.split(\":\")[0];\n  return r && e && (e = e.replace(r + \":\", \"\").trim()), n.innerHTML = t({ ...i, message: e, title: r }), n.classList.add(\"dialog-container\"), document.body.appendChild(n), n;\n}\nconst Lt = {\n  alert: async (t) => {\n    const e = z(ae, { message: t || \"Alert\", ok: \"Okay\" });\n    return new Promise((i) => {\n      const n = e.querySelector(\".dialog-ok\"), r = (s) => {\n        (s.key === \"Enter\" || s.key === \"Escape\") && (s.preventDefault(), n == null || n.click());\n      }, o = () => {\n        window.removeEventListener(\"keydown\", r), document.body.removeChild(e);\n      };\n      window.addEventListener(\"keydown\", r), n == null || n.addEventListener(\"click\", () => {\n        o(), i();\n      }), n == null || n.focus();\n    });\n  },\n  prompt: async (t, e, i = !0) => {\n    const n = z(le, {\n      message: t || \"Enter some text\",\n      ok: \"OK\",\n      cancel: i ? \"Cancel\" : void 0,\n      defaultValue: e\n    });\n    return new Promise((r) => {\n      const o = n.querySelector(\".dialog-ok\"), s = n.querySelector(\".dialog-cancel\"), a = n.querySelector(\".dialog-input\");\n      a.addEventListener(\"keydown\", (l) => {\n        l.key === \"Enter\" && (l.preventDefault(), o == null || o.click());\n      });\n      const c = (l) => {\n        l.key === \"Escape\" && s && (l.preventDefault(), s == null || s.click());\n      }, u = () => {\n        window.removeEventListener(\"keydown\", c), document.body.removeChild(n);\n      };\n      window.addEventListener(\"keydown\", c), o == null || o.addEventListener(\"click\", () => {\n        const l = a.value;\n        u(), r(l);\n      }), s == null || s.addEventListener(\"click\", () => {\n        u(), r(null);\n      }), a == null || a.focus(), a == null || a.select();\n    });\n  },\n  confirm: async (t) => {\n    const e = z(ce, { message: t || \"Are you sure?\", ok: \"Yes\", cancel: \"No\" });\n    return new Promise((i) => {\n      const n = e.querySelector(\".dialog-ok\"), r = e.querySelector(\".dialog-cancel\"), o = (a) => {\n        a.key === \"Escape\" && r && (a.preventDefault(), r.click());\n      }, s = () => {\n        window.removeEventListener(\"keydown\", o), document.body.removeChild(e);\n      };\n      window.addEventListener(\"keydown\", o), n == null || n.addEventListener(\"click\", () => {\n        s(), i(!0);\n      }), r == null || r.addEventListener(\"click\", () => {\n        s(), i(!1);\n      }), r == null || r.focus();\n    });\n  },\n  confirmSync: (t) => window.confirm(t)\n};\nfunction y(t) {\n  return t === null || typeof t != \"object\" ? t : Array.isArray(t) ? t.map(y) : !t._ui_isPrimitive && typeof t.clone == \"function\" && t._ui_primitiveClone !== !1 ? t.clone() : t;\n}\nfunction T(t, e) {\n  return t === null || typeof t != \"object\" ? t === e : Array.isArray(t) ? Array.isArray(e) && t.length === e.length && t.every((i, n) => T(i, e[n])) : !t._ui_isPrimitive && typeof t.equals == \"function\" && t._ui_primitiveEquals !== !1 ? !!t.equals(e) : t === e;\n}\nfunction O(t, e) {\n  if (e === null || typeof e != \"object\") return e;\n  if (Array.isArray(e))\n    if (t && Array.isArray(t)) {\n      if (t.length < e.length) {\n        for (let i = 0; i < t.length; i++) t[i] = O(t[i], e[i]);\n        for (let i = t.length; i < e.length; i++) t.push(y(e[i]));\n      } else {\n        for (let i = 0; i < e.length; i++) t[i] = O(t[i], e[i]);\n        t.length = e.length;\n      }\n      return t;\n    } else return y(e);\n  else return !e._ui_isPrimitive && typeof e.copy == \"function\" && e._ui_primitiveCopy !== !1 ? t && typeof t == \"object\" && !Array.isArray(t) && !t._ui_isPrimitive && typeof t.copy == \"function\" && t._ui_primitiveCopy !== !1 ? (t.copy(e), t) : y(e) : e;\n}\nfunction de(t, e, i, n = 2e3) {\n  if (!t || !t.enabled) return;\n  const r = e;\n  if (r.type !== i) return t.record(e);\n  const o = t.peek();\n  let s = !!o && o.type === i && o.uid === r.uid;\n  if (s) {\n    const a = o;\n    !a.final && r.time - a.time < n ? (r.lastVal = a.lastVal, r.val = y(r.val), t.replaceLast(r)) : s = !1;\n  }\n  s || T(r.lastVal, r.val) || (r.val = y(r.val), t.record(r));\n}\nfunction At(t, e, i, n, r, o, s = !0, a = 2e3, c = !1, u) {\n  const [l, h] = e, v = n.lastValue ?? (l == null ? void 0 : l[h]);\n  let p = !1;\n  const b = n.last ?? !0, E = T(v, i), C = y(v);\n  E ? p = !b : l ? O(v, i) !== v ? p = !D(l, h, i, !0, !0) : p = !1 : p = !0;\n  const x = !p && (b || !E);\n  return s && x && t && de(t, {\n    type: o,\n    lastVal: C,\n    val: i,\n    final: b,\n    props: n,\n    time: Date.now(),\n    uid: r,\n    binding: c ? e : void 0,\n    // save binding only if required, otherwise it could cause memory leaks\n    onUndoRedo: u\n  }, o, a), { last: b, value: i, lastValue: C, undoable: x };\n}\nexport {\n  M as Damper,\n  U as FnCaller,\n  ge as JSUndoManager,\n  $e as LinearToSRGB,\n  me as PointerDragHelper,\n  Me as SRGBToLinear,\n  m as Serialization,\n  H as SimpleEventDispatcher,\n  B as TYPED_ARRAYS,\n  yt as absMax,\n  je as aesGcmDecrypt,\n  Qe as aesGcmEncrypt,\n  xe as arrayBufferToBase64,\n  ke as base64ToArrayBuffer,\n  X as blobToDataURL,\n  dt as blobToImage,\n  ut as canvasFlipY,\n  bt as clearBit,\n  y as clonePrimitive,\n  V as cloneScriptTag,\n  Re as colorToDataUrl,\n  O as copyPrimitive,\n  qe as copyProps,\n  we as createCanvasElement,\n  ye as createDiv,\n  N as createImage,\n  ve as createScriptFromURL,\n  W as createStyles,\n  K as css,\n  Ve as deepAccessObject,\n  G as downloadBlob,\n  Ie as downloadFile,\n  mt as embedUrlRefs,\n  T as equalsPrimitive,\n  g as escapeHtml,\n  Y as escapeRegExp,\n  j as findLastIndex,\n  et as getFileHandle,\n  Le as getFilenameFromPath,\n  Be as getKeyByValue,\n  tt as getNewFileHandle,\n  Fe as getOrCall,\n  Z as getPropertyDescriptor,\n  Ee as getTypedArray,\n  kt as getUrlQueryParam,\n  Ue as glsl,\n  Oe as html,\n  Lt as htmlDialogWrapper,\n  gt as htmlToCanvas,\n  wt as htmlToPng,\n  q as htmlToSvg,\n  ot as imageBitmapToBase64,\n  st as imageBitmapToBlob,\n  R as imageBitmapToCanvas,\n  ct as imageDataToCanvas,\n  te as imageToCanvas,\n  at as imageUrlToImageData,\n  He as includesAll,\n  Q as isPropertyWritable,\n  lt as isWebpExportSupported,\n  ze as longestCommonPrefix,\n  ft as makeColorSvg,\n  ht as makeColorSvgCircle,\n  pt as makeTextSvg,\n  Te as mobileAndTabletCheck,\n  _ as now,\n  L as objectHasOwn,\n  Ye as objectMap,\n  $ as objectMap2,\n  I as onChange,\n  Ke as onChange2,\n  Je as onChange3,\n  Ge as onChangeDispatchEvent,\n  Se as parseFileExtension,\n  Ct as pathJoin,\n  De as prettyScrollbar,\n  it as readFile,\n  de as recordUndoCommand,\n  _t as remoteWorkerURL,\n  f as replaceAll,\n  Ae as safeReplaceString,\n  D as safeSetProperty,\n  Ze as serializable,\n  Xe as serialize,\n  be as setInnerHTMLWithScripts,\n  Et as setUrlQueryParam,\n  At as setValueUndoCommand,\n  F as svgToCanvas,\n  ie as svgToPng,\n  J as svgUrl,\n  pe as timeout,\n  _e as toCamelCase,\n  Ce as toTitleCase,\n  vt as updateBit,\n  Pe as uploadFile,\n  xt as uuidV4,\n  rt as verifyPermission,\n  St as windowDialogWrapper,\n  Ne as wrapThisFunction,\n  We as wrapThisFunction2,\n  nt as writeFile\n};\n//# sourceMappingURL=bundle.esm.js.map\n","import { uuidV4 as R, getOrCall as f, equalsPrimitive as A, copyPrimitive as E, clonePrimitive as M, recordUndoCommand as V, setValueUndoCommand as w, SimpleEventDispatcher as O, JSUndoManager as F, getUrlQueryParam as P, now as x, timeout as I, createDiv as Q } from \"ts-browser-helpers\";\nimport { clonePrimitive as re, copyPrimitive as ne, equalsPrimitive as ie } from \"ts-browser-helpers\";\n/**\n * @license\n * uiconfig.js v0.3.1\n * Copyright 2022-2025 repalash <palash@shaders.app>\n * MIT License\n * See ./dependencies.txt for bundled third-party dependencies and licenses.\n */\nconst C = class C {\n};\nC.Map = /* @__PURE__ */ new Map();\nlet c = C;\nfunction v(n, e, t, r, i = !0) {\n  r = r ?? n[e], t = t ?? e + \"\";\n  const o = r == null ? void 0 : r.uiConfig;\n  let s;\n  if (o)\n    s = o;\n  else {\n    const a = T(r);\n    a === \"folder\" ? s = U(t, r, {}, \"folder\", i) : a && (s = {\n      type: a,\n      label: t,\n      property: [n, e]\n    });\n  }\n  return s && !s.label && (s.label = t), s;\n}\nfunction _(n) {\n  if (!n) return [];\n  let e = n.constructor || Object;\n  e === Array && (e = Object);\n  const t = [], r = [];\n  for (; e && e !== Object; )\n    r.push(e), e = Object.getPrototypeOf(e);\n  if (!r.length || Array.isArray(n)) {\n    const i = typeof n == \"object\" ? Object.keys(n) : Array.isArray(n) ? n.map((o, s) => s) : [];\n    for (const o of i) {\n      const s = n[o];\n      if (s == null) continue;\n      const a = v(n, o, o + \"\", s, !0);\n      a && t.push(a);\n    }\n  }\n  return r.reverse().forEach((i) => {\n    var o;\n    (o = c.Map.get(i)) == null || o.forEach(({ params: s, propKey: a, uiType: u }) => {\n      let d;\n      if (u || (d = () => v(n, a)), d || (d = {\n        property: [n, a],\n        type: u || \"input\"\n        // ...params,\n        // ...extraParams,\n      }), s) {\n        const y = typeof s.params == \"function\" ? s.params(n) : s.params || {}, p = { ...s };\n        if (delete p.params, typeof d == \"function\") {\n          const m = d;\n          d = () => {\n            const l = m();\n            return l && Object.assign(l, { ...p, ...y });\n          };\n        } else\n          Object.assign(d, { ...p, ...y });\n      }\n      t.push(d);\n    });\n  }), t;\n}\nfunction U(n, e, t = {}, r = \"folder\", i = !1) {\n  return {\n    type: r,\n    label: n,\n    children: i ? [() => _(e)] : _(e),\n    uuid: R(),\n    ...t\n  };\n}\nfunction T(n) {\n  return n == null ? null : Array.isArray(n) ? \"folder\" : typeof n == \"boolean\" ? \"checkbox\" : typeof n == \"number\" ? \"number\" : typeof n == \"string\" ? \"input\" : typeof n == \"function\" ? \"button\" : typeof n.x == \"number\" ? \"vec\" : typeof n.r == \"number\" ? \"color\" : n.isTexture ? \"image\" : typeof n == \"object\" ? \"folder\" : null;\n}\nfunction B(n) {\n  return (e, t) => {\n    const r = e.constructor;\n    if (r === Object) throw new Error(\"Not possible to use uiConfig decorator on an object, use class instead\");\n    c.Map.has(r) || c.Map.set(r, []), n(e, t, c.Map.get(r));\n  };\n}\nfunction h(n, e) {\n  return B((t, r, i) => {\n    const o = i.findIndex((s) => s.propKey === r);\n    if (o && o < 0)\n      i.push({\n        params: e || {},\n        propKey: r,\n        uiType: n\n      });\n    else\n      throw new Error(`Property ${r} already has a uiConfig decorator`);\n  });\n}\nfunction b(n, e, t = \"panel\") {\n  return (r) => class extends r {\n    constructor() {\n      super(...arguments), this.uiConfig = U(f(n, this) || \"\", this, e || {}, t);\n    }\n  };\n}\nfunction j(n, e) {\n  return h(\"monitor\", { label: n, params: e });\n}\nfunction q(n, e, t, r) {\n  return h(\"slider\", { label: n, bounds: e, stepSize: t, params: r });\n}\nfunction D(n, e, t, r) {\n  return h(\"vec\", { label: n, bounds: e, stepSize: t, params: r });\n}\nfunction N(n, e, t) {\n  return Array.isArray(e) && typeof e[0] == \"string\" && (e = e.map((r) => ({ label: r, value: r }))), h(\"dropdown\", { label: n, children: e, params: t });\n}\nfunction W(n, e) {\n  return h(\"button\", { label: n, params: e });\n}\nfunction z(n, e) {\n  return h(\"input\", { label: n, params: e });\n}\nfunction H(n, e) {\n  return h(\"number\", { label: n, params: e });\n}\nfunction J(n, e) {\n  return h(\"color\", { label: n, params: e });\n}\nfunction $(n, e) {\n  return h(\"image\", { label: n, params: e });\n}\nfunction G(n, e) {\n  return h(\"checkbox\", { label: n, params: e });\n}\nfunction K(n, e) {\n  return b(n, e, \"panel\");\n}\nfunction X(n, e) {\n  return b(n, e, \"folder\");\n}\nfunction Y(n) {\n  return n;\n}\nconst g = {\n  setValue: \"UiConfigMethods_set\",\n  action: \"UiConfigMethods_action\"\n};\nclass k {\n  constructor(e) {\n    this._renderer = e, this.undoEditingWaitTime = 2e3, this.undoPresets = {\n      [g.setValue]: (t) => {\n        const r = () => {\n          var i, o;\n          t.onUndoRedo && t.onUndoRedo(t), (o = (i = t.uid).uiRefresh) == null || o.call(i, !1);\n        };\n        return {\n          undo: () => {\n            this.setValue(t.uid, t.lastVal, t.props, void 0, !1).then(r);\n          },\n          redo: () => {\n            this.setValue(t.uid, t.val, t.props, void 0, !1).then(r);\n          }\n        };\n      },\n      [g.action]: (t) => {\n        const r = () => {\n          var i, o;\n          t.onUndoRedo && t.onUndoRedo(t), (o = (i = t.uid).uiRefresh) == null || o.call(i, !1);\n        };\n        return {\n          undo: async () => {\n            await t.undo.call(t.target, ...t.args), r();\n          },\n          redo: async () => {\n            await t.redo.call(t.target, ...t.args), r();\n          }\n        };\n      }\n    };\n  }\n  getBinding(e, t = !0) {\n    let r = f(e.property, e);\n    const i = f(e.path, e);\n    if (r === void 0 && Object.hasOwn(e, \"value\") && (r = [e, \"value\"]), r === void 0 && t && (r = f(e.parentProperty, e)), !r || typeof r[0] != \"object\" || !r[1])\n      return [void 0, \"\"];\n    if (typeof r[1] == \"string\" && i && i.length && (r = [r[0], r[1] + \".\" + i]), typeof r[1] == \"string\" && r[1].includes(\".\")) {\n      const o = r[1].split(\".\");\n      let s = r[0];\n      const a = o.pop() || \"\";\n      for (const u of o)\n        if (s = Array.isArray(s) ? s[parseInt(u)] : s[u], !s)\n          return console.warn(\"Cannot determine property, invalid property path\", e, r), [void 0, \"\"];\n      r = [s, a];\n    }\n    return Array.isArray(r[0]) && typeof r[1] == \"string\" && (r[1] = parseInt(r[1])), r;\n  }\n  getRawValue(e) {\n    const [t, r] = this.getBinding(e);\n    return t ? t[r] : void 0;\n  }\n  /**\n   * Get the value from config\n   * @param config\n   * @param val - existing value, new value can be copied to this if not equal.\n   * @param copyOnEqual - whether the value should be copied to val if equal. Default is true.\n   * @returns The value from the binding, cloned or copied if possible. If the value is equal and copyOnEqual is false, then undefined is returned. this can be used to check if the value is changed\n   */\n  getValue(e, t, r = !0) {\n    const [i, o] = this.getBinding(e);\n    if (!i) return;\n    const s = i[o];\n    return t !== void 0 && s !== void 0 ? A(t, s) && !r ? void 0 : E(t, s) : M(s);\n  }\n  dispatchOnChangeSync(e, t, ...r) {\n    var s;\n    const o = [{\n      type: \"change\",\n      last: t.last ?? !0,\n      config: t.config ?? e,\n      configPath: [e, ...t.configPath || []],\n      target: e,\n      value: t.value,\n      lastValue: t.lastValue\n    }, ...r];\n    typeof e.onChange == \"function\" ? e.onChange(...o) : Array.isArray(e.onChange) ? e.onChange.flat().forEach(\n      (a) => typeof a == \"function\" && (a == null ? void 0 : a(...o))\n      // todo .call with config if not a bound function\n    ) : e.onChange && console.error(\"Invalid onChange type, must be a function or array of functions\", e.onChange), (s = e.parentOnChange) == null || s.call(e, ...o);\n  }\n  recordUndo(e) {\n    const t = this._renderer.undoManager;\n    V(t, e, g.setValue, this.undoEditingWaitTime);\n  }\n  /**\n   * Performs an action with undo/redo support.\n   * @param action - a function that returns - 1. an undo function, 2. an object with undo and redo functions (and optional action)\n   * @param targ - the target object to call the action on\n   * @param args - the arguments to pass to the action function\n   * @param config - ui config\n   * @param onUndoRedo - optional callback function to be called on undo/redo of the command. Not called on first action execution, only on undo/redo.\n   */\n  async performAction(e, t, r, i, o) {\n    var p, m, l;\n    const s = () => e === void 0 ? t(...r) : t.call(e, ...r);\n    let a = await s();\n    const u = typeof a == \"function\" ? a : (p = a == null ? void 0 : a.undo) == null ? void 0 : p.bind(a), d = typeof a != \"function\" ? (m = a == null ? void 0 : a.action) == null ? void 0 : m.bind(a) : null, y = typeof a == \"function\" ? s : ((l = a == null ? void 0 : a.redo) == null ? void 0 : l.bind(a)) ?? d;\n    typeof d == \"function\" && (a = await d()), typeof u == \"function\" && this.recordUndo({\n      type: \"UiConfigMethods_action\",\n      uid: i,\n      target: e,\n      undo: u,\n      redo: y,\n      args: r,\n      onUndoRedo: o\n    });\n  }\n  /**\n   *\n   * @param config\n   * @param value\n   * @param props - only the prop `last` need to be set, rest are optional. `lastValue` can be set if known (but it should be exactly equal to the value in the binding and not cloned).\n   * @param forceOnChange\n   * @param trackUndo\n   */\n  async setValue(e, t, r, i, o = !0) {\n    return this.runAtEvent(e, () => {\n      const s = this.getBinding(e), a = this._renderer.undoManager, u = w(a, s, t, r, e, g.setValue, o, this.undoEditingWaitTime, !1, void 0);\n      return !u.undoable && !i ? !1 : (this.dispatchOnChangeSync(e, { ...r, ...u }), !0);\n    });\n  }\n  /**\n   *\n   * @param config\n   * @param props - only last needs to be set, rest are optional. `lastValue` can be set if known (but it should be exactly equal to the value in the binding and not cloned). `config`, `configPath` are for parentOnChange, no need to set that.\n   */\n  async dispatchOnChange(e, t) {\n    return this.runAtEvent(e, () => {\n      this.dispatchOnChangeSync(e, t);\n    });\n  }\n  getLabel(e) {\n    var t;\n    return (f(e.label, e) ?? ((t = this.getBinding(e)) == null ? void 0 : t[1])) + \"\";\n  }\n  getChildren(e) {\n    return (f(e.children, e) ?? []).map((t) => f(t)).flat(2).filter((t) => t);\n  }\n  async clickButton(e, t) {\n    return this.runAtEvent(e, async () => {\n      const r = this.getBinding(e, !1), i = r[0], o = r[1], s = f(e.sendArgs, e) === !1 ? [] : (t == null ? void 0 : t.args) ?? [], a = [];\n      if (i) {\n        const u = i[o] ?? i.value;\n        typeof u == \"function\" ? a.push([u, i]) : u && console.warn(\"Invalid action type for button\", u);\n      }\n      typeof e.onClick == \"function\" && a.push([e.onClick, e]);\n      for (const [u, d] of a)\n        await this.performAction(d, u, s, e);\n      await this.dispatchOnChange(e, {});\n    });\n  }\n  async runAtEvent(e, t) {\n    const r = f(e.dispatchMode, e) ?? \"postFrame\";\n    return r === \"immediate\" ? t() : new Promise((i) => {\n      const o = async () => {\n        this._renderer.removeEventListener(r, o), i(await t());\n      };\n      this._renderer.addEventListener(r, o);\n    });\n  }\n  initUiConfig(e) {\n    e && (e.type || (console.warn(\"No type for config\", e), e.type = \"input\"), e.uuid || (e.uuid = R()), e.property === void 0 && (e.binding ? e.property = e.binding : e.value === void 0 ? (e.getValue || e.setValue) && (Object.defineProperty(e, \"value\", {\n      get: () => e.getValue && e.getValue(),\n      set: (t) => e.setValue && e.setValue(t)\n    }), e.property = [e, \"value\"]) : (e.getValue || e.setValue) && console.warn(\"getValue/setValue is ignored since value is provided\", e), e.property));\n  }\n  getBounds(e, t = !1) {\n    const r = f(e.bounds), i = ((r == null ? void 0 : r.length) ?? 0) >= 2 ? r[1] : t ? 1 / 0 : 1, o = ((r == null ? void 0 : r.length) ?? 0) >= 1 ? r[0] : t ? -1 / 0 : 0, s = f(e.stepSize) || (t ? 0.01 : Math.pow(10, Math.floor(Math.log10((i - o) / 100))));\n    return { min: o, max: i, step: s };\n  }\n}\nclass L extends O {\n  constructor(e = !0, t, r) {\n    super(), this._rafId = null, this.raf = () => {\n      this._autoFrameEvents && (this.dispatchEvent({ type: \"preFrame\" }), this.dispatchEvent({ type: \"preRender\" }), this.dispatchEvent({ type: \"postRender\" }), this.dispatchEvent({ type: \"postFrame\" }), this._rafId = requestAnimationFrame(this.raf));\n    }, this._refreshQueue = {\n      // [config, delay, uuid]\n      preRender: [],\n      postRender: [],\n      preFrame: [],\n      postFrame: []\n    }, this._lastModeTime = {\n      preRender: 0,\n      postRender: 0,\n      preFrame: 0,\n      postFrame: 0\n    }, this.methods = t || new k(this), this.undoManager = r === !1 ? void 0 : r || new F({ bindHotKeys: !0, limit: 1e3, debug: P(\"debugUndo\") !== null }), this._autoFrameEvents = e, e && (this.addEventListener(\"preFrame\", () => this.refreshQueue(\"preFrame\")), this.addEventListener(\"postFrame\", () => this.refreshQueue(\"postFrame\")), this.addEventListener(\"preRender\", () => this.refreshQueue(\"preRender\")), this.addEventListener(\"postRender\", () => this.refreshQueue(\"postRender\")));\n  }\n  get undoManager() {\n    return this._undoManager;\n  }\n  set undoManager(e) {\n    this._undoManager = e, this._undoManager && Object.assign(this._undoManager.presets, this.methods.undoPresets);\n  }\n  // call from render or onMount\n  start() {\n    this._rafId === null && (this._rafId = requestAnimationFrame(this.raf));\n  }\n  // call from unmount or onDispose etc\n  stop() {\n    this._rafId !== null && (cancelAnimationFrame(this._rafId), this._rafId = null);\n  }\n  refreshQueue(e) {\n    const t = this._refreshQueue[e], r = [], i = x(), o = i - this._lastModeTime[e];\n    t.forEach((s) => {\n      s[1] > 1e-3 ? (s[1] -= o, r.push(s)) : this._refreshUiConfigObject(s[0]);\n    }), this._refreshQueue[e] = r, this._lastModeTime[e] = i;\n  }\n  _addToRefreshQueue(e, t, r) {\n    const i = t.uuid, o = this._refreshQueue[e], s = o.find((a) => a[2] === i);\n    s ? s[1] = Math.max(s[1], r) : o.push([t, r, i]), this._refreshQueue[e] = o;\n  }\n  /**\n   * Disposes the UI associated with a config, doesn't makes change to the object or its parent.\n   * @param config\n   * @param performDispose\n   */\n  disposeUiConfig(e, t = !0) {\n    var r, i;\n    e && (e.uiRef && (t && ((i = (r = e.uiRef).dispose) == null || i.call(r)), e.uiRef = void 0), e.uiRefType = void 0, e.uiRefresh = void 0);\n  }\n  addToRefreshQueue(e, t, r, i) {\n    const o = r ? this._flattenUiConfig(t) : [t];\n    for (const s of o)\n      e === \"immediate\" ? I(i).then(() => this._refreshUiConfigObject(s)) : this._addToRefreshQueue(e, s, i);\n  }\n  _flattenUiConfig(e, t) {\n    var r;\n    return t = t ?? [], !e || !e.uiRef || (t.push(e), typeof e.children == \"function\") || (r = e.children) == null || r.forEach((i) => {\n      typeof i != \"function\" && i && (Array.isArray(i) ? i.forEach((o) => t = this._flattenUiConfig(o, t)) : t = this._flattenUiConfig(i, t));\n    }), t;\n  }\n}\nclass Z extends L {\n  constructor(e = document.body, t = !0, r, i) {\n    super(t, r, i), this.config = {\n      type: \"panel\",\n      label: \"Configuration\",\n      children: []\n    }, this._uiContainer = this._createUiContainer(), e.appendChild(this._uiContainer), this.start();\n  }\n  unmount() {\n    this.disposeUiConfig(this.config), this._uiContainer.remove(), this.stop();\n  }\n  // appendUiConfig(uiConfig: UiObjectConfig): void {\n  //     if (!uiConfig) return\n  //     this._renderUiConfig(uiConfig)\n  // }\n  appendChild(e, t) {\n    e && (Object.assign(e, t), this.config.children.push(e), this.refreshRoot());\n  }\n  removeChild(e) {\n    const t = this.config.children.indexOf(e);\n    t !== -1 && (this.config.children.splice(t, 1), this.disposeUiConfig(e), this.refreshRoot());\n  }\n  refreshRoot(e = !0, t = \"postFrame\", r = 0) {\n    var i, o;\n    (o = (i = this.config).uiRefresh) == null || o.call(i, e, t, r);\n  }\n  _createUiContainer() {\n    return Q({ id: \"uiConfigContainer\", addToBody: !1 });\n  }\n}\nexport {\n  k as UiConfigMethods,\n  Z as UiConfigRenderer,\n  L as UiConfigRendererBase,\n  c as UiConfigTypeMap,\n  re as clonePrimitive,\n  ne as copyPrimitive,\n  Y as createValueUiConfig,\n  ie as equalsPrimitive,\n  _ as generateUiConfig,\n  U as generateUiFolder,\n  v as generateValueConfig,\n  W as uiButton,\n  J as uiColor,\n  h as uiConfig,\n  b as uiContainer,\n  N as uiDropdown,\n  X as uiFolderContainer,\n  $ as uiImage,\n  z as uiInput,\n  j as uiMonitor,\n  H as uiNumber,\n  K as uiPanelContainer,\n  q as uiSlider,\n  G as uiToggle,\n  D as uiVector,\n  g as undoCommandTypes\n};\n//# sourceMappingURL=index.mjs.map\n","import {SVGRenderer} from 'three/examples/jsm/renderers/SVGRenderer.js'\nimport {uiDropdown, uiFolderContainer, uiNumber, uiToggle} from 'uiconfig.js'\nimport {onChange2} from 'ts-browser-helpers'\n\n@uiFolderContainer('Basic SVG Renderer')\nexport class BasicSVGRenderer extends SVGRenderer {\n    @uiToggle()\n    declare autoClear: boolean\n    @uiToggle()\n    declare sortObjects: boolean\n    @uiToggle()\n    declare sortElements: boolean\n    @uiNumber()\n    declare overdraw: number\n\n    @uiDropdown(undefined, ['low', 'high'])\n    @onChange2(BasicSVGRenderer.prototype._refresh)\n        quality: 'low' | 'high' = 'high'\n\n    private _refresh() {\n        this.setQuality(this.quality)\n    }\n}\n","import {\n    AViewerPluginSync,\n    type IViewerEvent,\n    ThreeViewer,\n    uiButton,\n    uiConfig,\n    uiFolderContainer,\n    uiToggle,\n} from 'threepipe'\nimport {BasicSVGRenderer} from './basic/BasicSVGRenderer'\n\n/**\n * SVG rendering of 3d objects using SVGRenderer from three/addons\n */\n@uiFolderContainer('SVG Renderer')\nexport class BasicSVGRendererPlugin extends AViewerPluginSync {\n    static readonly PluginType = 'BasicSVGRendererPlugin'\n\n    @uiToggle()\n        enabled = true\n\n    @uiConfig()\n    readonly renderer = new BasicSVGRenderer()\n\n    /**\n     * @param enabled\n     * @param autoAddToContainer - automatically add the svg to the viewer container and style it same as the viewer is position is absolute\n     */\n    constructor(enabled = true, readonly autoAddToContainer = true) {\n        super()\n        this._onResize = this._onResize.bind(this)\n        this.enabled = enabled\n        this.renderer.domElement.style.position = 'absolute'\n        this.renderer.domElement.style.display = 'none'\n    }\n\n    protected _lastStyles?: string = undefined\n    onAdded(viewer: ThreeViewer) {\n        super.onAdded(viewer)\n        this.renderer.setSize(viewer.canvas.clientWidth, viewer.canvas.clientHeight)\n        this._refreshParams()\n        if (this.autoAddToContainer) {\n            viewer.container.prepend(this.renderer.domElement) // behind the canvas so that we get pointer events\n            const element = this.renderer.domElement\n            element.style.pointerEvents = 'none'\n            const canvasStyles = getComputedStyle(viewer.canvas)\n            if (canvasStyles.position === 'absolute') {\n                this._lastStyles = element.style.cssText\n                // copy styles from canvas to svg so it looks the same.\n                element.style.top = canvasStyles.top\n                element.style.left = canvasStyles.left\n                element.style.width = canvasStyles.width\n                element.style.height = canvasStyles.height\n                // element.style.zIndex = '999999' // svg should be behind the canvas\n            } else {\n                this._viewer?.console.warn('BasicSVGRendererPlugin: canvas position should be absolute for proper rendering')\n            }\n            viewer.renderManager.addEventListener('resize', this._onResize)\n        }\n        this.renderer.domElement.style.display = this.enabled ? '' : 'none'\n    }\n\n    onRemove(viewer: ThreeViewer) {\n        super.onRemove(viewer)\n        if (this.autoAddToContainer) {\n            viewer.container.removeChild(this.renderer.domElement)\n        }\n        if (this._lastStyles !== undefined) {\n            this.renderer.domElement.style.cssText = this._lastStyles\n            this._lastStyles = undefined\n        }\n        viewer.renderManager.removeEventListener('resize', this._onResize)\n        this.renderer.domElement.style.display = 'none'\n    }\n\n\n    @uiToggle()\n        autoRender = true\n\n    @uiButton()\n    render() {\n        if (!this._viewer) return\n        if (this.isDisabled()) return\n        this.renderer.render(this._viewer.scene, this._viewer.scene.mainCamera)\n    }\n\n    @uiButton()\n    download() {\n        const svg = this.renderer.domElement.outerHTML\n        const blob = new Blob([svg], {type: 'image/svg+xml'})\n        this._viewer?.exportBlob(blob, 'scene.svg')\n    }\n\n    protected _viewerListeners = {\n        postRender: (_: IViewerEvent)=>{\n            if (this.autoRender) this.render()\n        },\n    }\n\n    get svgNode() {\n        return this.renderer.domElement\n    }\n\n    protected _refreshParams() {\n        if (this.isDisabled()) return\n        this.renderer.setQuality('medium')\n    }\n    protected _onResize() {\n        if (!this._viewer) return\n        this.renderer.setSize(this._viewer.canvas.clientWidth, this._viewer.canvas.clientHeight)\n    }\n\n}\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 09/12/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {Vector2} from 'three';\nimport {Face, Halfedge} from '../../../three-mesh-halfedge';\nimport {SVGMesh} from '../SVGMesh';\n// import { ViewPoint } from './ViewPoint_';\nimport {ViewVertex} from './ViewVertex';\n\n/**\n * Possible values for the edge nature in the viemap.\n */\nexport enum ViewEdgeNature {\n  // /** Edge is standard */\n  // None = \"None\",\n  /** Edge is connected to front-facing and a back-facing face */\n  Silhouette = \"Silhouette\",\n  /** Edge is only connected to one face */\n  Boundary = \"Boundary\",\n  /** Edge is on the intersection between two meshes */\n  MeshIntersection = \"MeshIntersection\",\n  /** Edge is connected to two faces where the angle between normals is acute */\n  Crease = \"Crease\",\n  /** Edge is connected to two faces using a different material/vertex color */\n  Material = \"Material\",\n}\n\nexport const VisibilityIndicatingNatures = new Set([\n  ViewEdgeNature.Silhouette,\n  ViewEdgeNature.Boundary,\n  ViewEdgeNature.MeshIntersection,\n]);\n\nexport class ViewEdge {\n\n  /**\n   * Halfedge on which the edge is based on\n   * @defaultValue null\n   */\n  halfedge?: Halfedge;\n\n  /**\n   * List of the meshes the Edge belongs to\n   */\n  readonly meshes = new Array<SVGMesh>();\n\n  /**\n   * Nature of the edge\n   * @defautValue EdgeNature.None\n   */\n  nature: ViewEdgeNature;\n\n  /**\n   * Angle between to the connected faces.\n   * @defaultValue Infinity */\n  faceAngle = Infinity;\n\n  /**\n   * Indicates whether the edge is connected to back-facing faces only\n   * *Note: this makes only sense with 2 connected faces.*\n   * @defaultValue false\n  */\n  isBack = false;\n\n  /**\n   * Indicates wheter the edge is concave.\n   * *Note: this makes only sense with 2 connected faces.*\n   * @defaultValue false\n   */\n  isConcave = false;\n\n\n  faces = new Array<Face>();\n\n  a: ViewVertex;\n  b: ViewVertex;\n\n  constructor(a: ViewVertex, b: ViewVertex, nature: ViewEdgeNature, halfedge?: Halfedge) {\n    this.a = a;\n    this.b = b;\n    this.nature = nature;\n    this.halfedge = halfedge;\n  }\n\n  get vertices() {\n    return [this.a, this.b];\n  }\n\n  get from(): Vector2 {\n    return this.a.pos2d;\n  }\n\n  get to(): Vector2 {\n    return this.b.pos2d;\n  }\n\n  toJSON() {\n\n    return {\n      id: [...this.a.vertices].map(v => v.id).join(',') + '-' +\n          [...this.b.vertices].map(v => v.id).join(','),\n    }\n  }\n\n  clone() {\n    const edge =  new ViewEdge(this.a, this.b, this.nature, this.halfedge);\n    edge.faceAngle = this.faceAngle;\n    edge.isBack = this.isBack;\n    edge.isConcave = this.isConcave;\n    edge.meshes.push(...this.meshes);\n    edge.faces.push(...this.faces);\n    return edge;\n  }\n\n  otherVertex(vertex: ViewVertex) {\n    if (vertex === this.a) {\n      return this.b;\n    } else {\n      return this.a;\n    }\n  }\n\n  hasVertex(vertex: ViewVertex) {\n    return this.a === vertex || this.b === vertex;\n  }\n\n  isConnectedTo(edge: ViewEdge) {\n    return this.hasVertex(edge.a) || this.hasVertex(edge.b);\n  }\n\n}\n\n\n\n","import {BufferAttribute, BufferGeometry, Material, Mesh} from 'three';\nimport {computeMorphedAttributes} from 'threepipe';\n\n/**\n * Types definitions are not up to date\n */\ndeclare module 'threepipe' {\n  export function computeMorphedAttributes(object: Mesh): {\n    positionAttribute: BufferAttribute,\n    normalAttribute: BufferAttribute,\n    morphedPositionAttribute: BufferAttribute,\n    morphedNormalAttribute: BufferAttribute\n  }\n}\n\nexport function triangleGeometry(size: number) {\n  const vertices = new Float32Array([\n    -size, 0,  -size,\n    size, 0,  -size,\n    0, 0, size\n  ]);\n  const geometry = new BufferGeometry();\n  geometry.setAttribute('position', new BufferAttribute(vertices, 3));\n  return geometry;\n}\n\nexport function disposeMesh(mesh: Mesh) {\n  mesh.geometry.dispose();\n  if (mesh.material instanceof Array) {\n    const materials = mesh.material as Array<Material>;\n    for (const material of materials) {\n      material.dispose();\n    }\n  } else {\n    mesh.material.dispose();\n  }\n}\n\nexport function disposeGeometry(geometry: BufferGeometry) {\n  geometry.dispose();\n  for (const attribute in geometry.attributes) {\n    geometry.deleteAttribute(attribute);\n  }\n}\n\nexport function computeMorphedGeometry(source: Mesh, target: BufferGeometry) {\n\n  if (!source.geometry.hasAttribute(\"normal\")) {\n    source.geometry.computeVertexNormals();\n  }\n\n  const {\n    morphedPositionAttribute,\n    morphedNormalAttribute\n  } = computeMorphedAttributes(source);\n\n  target.groups = [...source.geometry.groups];\n  if (source.geometry.index) {\n    target.index = source.geometry.index.clone();\n  }\n\n  target.deleteAttribute('position');\n  target.deleteAttribute('normal');\n  target.setAttribute('position', morphedPositionAttribute);\n  target.setAttribute('normal', morphedNormalAttribute);\n}\n","\n\nimport {Vector2, Vector3, PerspectiveCamera, Line3} from 'three';\n\nconst _u = new Vector3();\n\nexport interface PointLike {\n  x: number;\n  y: number;\n}\n\nexport interface SizeLike {\n  w: number;\n  h: number;\n}\n\nexport interface RectLike extends PointLike, SizeLike {}\n\nexport function projectPointNDC(\n    point: Vector3,\n    target: Vector2,\n    camera: PerspectiveCamera\n): Vector2 {\n\n  _u.copy(point).project(camera);\n  return target.set(_u.x, _u.y);\n}\n\nexport function projectPoint(\n    point: Vector3,\n    target: Vector2,\n    camera: PerspectiveCamera,\n    renderSize: SizeLike): Vector2 {\n\n  projectPointNDC(point, target, camera);\n  NDCPointToImage(target, target, renderSize);\n  return target;\n}\n\n/**\n * Converts a point from the NDC coordinates to the image coordinates\n * @param point Point in NDC to be converted\n * @param size Size of the render\n * @returns \n */\nexport function NDCPointToImage(point: Vector2, target: Vector2, size: SizeLike): Vector2 {\n  return target.set(\n    (point.x + 1)/2 * size.w,\n    (1 - point.y)/2 * size.h\n  );\n}\n\n/**\n * Converts a point from the image coordinates to the NDC coordinates\n * @param point Point in the image coordinates\n * @param size Size of the render\n * @returns \n */\nexport function imagePointToNDC(point: Vector2, target: Vector2, size: SizeLike): Vector2 {\n  return target.set(\n    2/size.w*point.x - 1,\n    1 - 2/size.h*point.y\n  );\n}\n\nexport function hashVector3(vec: Vector3, multiplier = 1e10) {\n  const gap = 1e-3/multiplier;\n  return `${hashNumber(vec.x+gap, multiplier)},` +\n         `${hashNumber(vec.y+gap, multiplier)},` +\n         `${hashNumber(vec.z+gap, multiplier)}`;\n}\n\nexport function hashVector2(vec: Vector2, multiplier = 1e10) {\n  const gap = 1e-3/multiplier;\n  return `${hashNumber(vec.x+gap, multiplier)},` +\n         `${hashNumber(vec.y+gap, multiplier)}`;\n}\n\nfunction hashNumber(value: number, multiplier = 1e10) {\n  // return (~ ~ (value*multiplier));\n  return Math.trunc(value*multiplier);\n}\n\n/**\n * Checks wether lines intersect and computes the intersection point.\n * \n * Adapted from mathjs\n * \n * @param line1 First segment/line\n * @param line2 Second segment/line\n * @param target Destination of the intersection point\n * @param infiniteLine Wether to consider segments as infinite lines. Default, false\n * @param tolerance Tolerance from which points are considred equal\n * @returns true if lines intersect, false otherwise\n */\nexport function intersectLines(\n    line1: Line3,\n    line2: Line3,\n    target: Vector3,\n    infiniteLine = false,\n    tolerance = 1e-10) {\n\n  const {x : x1, y : y1, z : z1} = line1.start;\n  const {x : x2, y : y2, z : z2} = line1.end;\n  const {x : x3, y : y3, z : z3} = line2.start;\n  const {x : x4, y : y4, z : z4} = line2.end;\n\n  // (a - b)*(c - d) + (e - f)*(g - h) + (i - j)*(k - l)\n  const d1343 = (x1 - x3)*(x4 - x3) + (y1 - y3)*(y4 - y3) + (z1 - z3)*(z4 - z3);\n  const d4321 = (x4 - x3)*(x2 - x1) + (y4 - y3)*(y2 - y1) + (z4 - z3)*(z2 - z1);\n  const d1321 = (x1 - x3)*(x2 - x1) + (y1 - y3)*(y2 - y1) + (z1 - z3)*(z2 - z1);\n  const d4343 = (x4 - x3)*(x4 - x3) + (y4 - y3)*(y4 - y3) + (z4 - z3)*(z4 - z3);\n  const d2121 = (x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1) + (z2 - z1)*(z2 - z1);\n\n\n  const numerator = (d1343 * d4321) - (d1321 * d4343);\n  const denominator = (d2121 * d4343) - (d4321 * d4321);\n  if (denominator < tolerance) {\n    return false;\n  }\n  const ta = numerator / denominator;\n  const tb = ((d1343 + (ta * d4321)) / d4343);\n\n  if (!infiniteLine && (ta < 0 || ta > 1 || tb < 0 || tb > 1)) {\n    return false;\n  }\n\n  const pax = x1 + (ta * (x2 - x1));\n  const pay = y1 + (ta * (y2 - y1));\n  const paz = z1 + (ta * (z2 - z1));\n  const pbx = x3 + (tb * (x4 - x3));\n  const pby = y3 + (tb * (y4 - y3));\n  const pbz = z3 + (tb * (z4 - z3));\n  if (Math.abs(pax - pbx) < tolerance && \n      Math.abs(pay - pby) < tolerance &&\n      Math.abs(paz - pbz) < tolerance) {\n    target.set(pax, pay, paz);\n    return true;\n  } \n  return false;\n}\n\nexport function vectors3Equal(a: Vector3, b: Vector3, tolerance = 1e-10) {\n  return (\n    Math.abs(a.x - b.x) < tolerance &&\n    Math.abs(a.y - b.y) < tolerance &&\n    Math.abs(a.z - b.z) < tolerance\n  );\n}\n\nexport function vectors2Equal(a: Vector2, b: Vector2, tolerance = 1e-10) {\n  return (\n    Math.abs(a.x - b.x) < tolerance &&\n    Math.abs(a.y - b.y) < tolerance\n  );\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Thu Oct 20 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Matrix4, Triangle, Vector3 } from \"three\";\n\nconst _matrix = new Matrix4();\n\n/**\n * Determines whether the point `d` is to the left of, to the right of, or on \n * the oriented plane defined by triangle `abc` appearing in counter-clockwise\n * order when viewed from above the plane.\n * \n * See https://hal.inria.fr/hal-02189483 Appendix C.2 Orientation test\n * \n * @param a Triangle point\n * @param b Triangle point\n * @param c Triangle point\n * @param d Test point\n * @param epsilon Precision, default to `1e-10`\n * @returns `1` if on the right side, `-1` if left, `0` if coplanar\n */\nexport function orient3D(a: Vector3, b: Vector3, c: Vector3, d: Vector3, epsilon = 1e-10): 1|-1|0{\n  _matrix.set(\n    a.x, a.y, a.z, 1,\n    b.x, b.y, b.z, 1,\n    c.x, c.y, c.z, 1,\n    d.x, d.y, d.z, 1\n  );\n  const det = _matrix.determinant();\n\n  if (det > epsilon) {\n    return 1;\n  } else if (det < -epsilon) {\n    return -1;\n  }\n  return 0;\n}\n\n/**\n * \n * Determines whether the point `d` is to the left of, to the right of, or on \n * the oriented plane defined by triangle `abc` appearing in counter-clockwise\n * order when viewed from above the plane.\n * \n * See https://hal.inria.fr/hal-02189483 Appendix C.2 Orientation test\n * \n * @param tri Triangle\n * @param p Test point\n * @param epsilon Precision, default to `1e-10`\n * @returns `1` if on the right side, `-1` if left, `0` if coplanar\n */\nexport function triOrient3D(tri: Triangle, p: Vector3, epsilon = 1e-10) {\n  return orient3D(tri.a, tri.b, tri.c, p, epsilon);\n}\n\n/**\n * Returns whether the point `d` is front facing the triangle `abc`.\n * \n * See https://hal.inria.fr/hal-02189483 Appendix C.2 Orientation test\n * \n * @param a Triangle point\n * @param b Triangle point\n * @param c Triangle point\n * @param d Camera position\n * @param epsilon Precision, default to `1e-10`\n * @returns `True` if triangle if front facing, `False` otherwise\n */\nexport function frontSide(a: Vector3, b: Vector3, c: Vector3, d: Vector3, epsilon = 1e-10) {\n  return orient3D(d, b, c, a, epsilon) > 0;\n}\n\n/**\n * Returns whether the points `d` and `e` are on the same side of the triangle `abc`.\n * \n * See https://hal.inria.fr/hal-02189483 Appendix C.2 Orientation test\n * \n * @param a Triangle point\n * @param b Triangle point\n * @param c Triangle point\n * @param d Test point\n * @param e Test point\n * @param epsilon Precision, default to `1e-10`\n * @returns `True` if points are on the same side, `False` otherwise\n */\nexport function sameSide(a: Vector3, b: Vector3, c: Vector3, d: Vector3, e: Vector3, epsilon = 1e-10) {\n  return (orient3D(a,b,c,d,epsilon) > 0) === (orient3D(a,b,c,e,epsilon) > 0);\n}\n\n/**\n * Rounds the number `num` with the given `divider`.\n * @param num Number to round\n * @param divider Value of the divider, default `100`.\n * @returns Rounded number\n */\nexport function round(num: number, divider = 100) {\n  return Math.round(num * divider)/divider;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Fri Dec 09 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {Vector2, Vector3} from \"three\";\nimport {Vertex} from \"../../../three-mesh-halfedge\";\nimport {vectors2Equal, vectors3Equal} from \"../../utils\";\nimport {ViewEdge} from \"./ViewEdge\";\n\nexport enum ViewVertexSingularity {\n  None = \"None\",\n  ImageIntersection = \"ImageIntersection\",\n  MeshIntersection = \"MeshIntersection\",\n  CurtainFold = \"CurtainFold\",\n  Bifurcation = \"Bifurcation\",\n}\n\nexport class ViewVertex {\n\n  hash3d = \"\";\n  hash2d = \"\";\n\n  singularity = ViewVertexSingularity.None;\n\n  readonly vertices = new Set<Vertex>();\n\n  readonly pos3d = new Vector3();\n  readonly pos2d = new Vector2();\n\n  readonly viewEdges = new Array<ViewEdge>();\n\n  visible = false;\n\n\n  commonViewEdgeWith(other: ViewVertex) {\n    for (const viewEdge of this.viewEdges) {\n      if (other.viewEdges.includes(viewEdge)) {\n        return viewEdge;\n      }\n    }\n    return null;\n  }\n\n  isConnectedTo(other: ViewVertex) {\n    return this.commonViewEdgeWith(other) != null;\n  }\n\n  matches3dPosition(position: Vector3, tolerance = 1e-4) {\n    return vectors3Equal(this.pos3d, position, tolerance);\n  }\n\n  matches2dPosition(position: Vector2, tolerance = 1e-4) {\n    return vectors2Equal(this.pos2d, position, tolerance);\n  }\n\n  get x() {\n    return this.pos2d.x;\n  }\n\n  get y() {\n    return this.pos2d.y;\n  }\n\n}\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 23/02/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {Vector2} from 'three';\nimport {ViewEdge} from './ViewEdge';\nimport { SVGMesh } from '../SVGMesh';\nimport { ViewVertex } from './ViewVertex';\n\nexport enum ChainVisibility {\n  Unknown = \"Unknown\",\n  Hidden = \"Hidden\",\n  Visible = \"Visible\",\n}\n\nexport class Chain {\n  id: number;\n  object: SVGMesh;\n  raycastPoint = new Vector2();\n  edges = new Array<ViewEdge>();\n  vertices = new Array<ViewVertex>();\n  visibility: ChainVisibility = ChainVisibility.Unknown;\n\n  constructor(id: number, object: SVGMesh) {\n    this.id = id;\n    this.object = object;\n  }\n\n  get head(): ViewVertex {\n    return this.vertices[0];\n  }\n\n  get tail(): ViewVertex {\n    return this.vertices[this.vertices.length -1];\n  }\n\n  get size() {\n    return this.vertices.length;\n  }\n\n  get nature() {\n    return this.edges[0].nature;\n  }\n\n  middlePoint(): ViewVertex {\n    return this.vertices[Math.floor(this.vertices.length/2)];\n  }\n\n  middleEdge(): ViewEdge | null {\n    if (this.edges.length === 0) {\n      return null;\n    } else {\n      return this.edges[Math.floor(this.edges.length/2)]\n    }\n  }\n\n  addEdge(edge: ViewEdge): void {\n    if (this.edges.length == 0) {\n      this.edges.push(edge);\n      this.vertices.push(edge.a);\n      this.vertices.push(edge.b);\n    } else {\n      if (edge.hasVertex(this.head)) {\n        // Put vertex and segment in the head of the lists\n        this.vertices.unshift(edge.otherVertex(this.head));\n        this.edges.unshift(edge);\n      } else if (edge.hasVertex(this.tail)) {\n        // Put vertex and segment in the tail of the lists\n        this.vertices.push(edge.otherVertex(this.tail));\n        this.edges.push(edge);\n      }\n    }\n  }\n}","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 23/02/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {Vector2, Color} from 'three';\nimport { SVGMesh } from '../SVGMesh';\n\nexport class Polygon {\n  id: number;\n  mesh?: SVGMesh;\n  color = new Color();\n  insidePoint: Vector2 = new Vector2();\n  contour: Vector2[];\n  holes: Vector2[][];\n\n  constructor(\n      id: number,\n      contour: Vector2[],\n      holes: Vector2[][]) {\n\n    this.id = id;\n    this.contour = contour;\n    this.holes = holes;\n  }\n\n}","\nvar Arrangement2D = (() => {\n  var _scriptDir = import.meta.url;\n  \n  return (\nfunction(Arrangement2D) {\n  Arrangement2D = Arrangement2D || {};\n\nvar Module=typeof Arrangement2D!=\"undefined\"?Arrangement2D:{};var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_main\")){Object.defineProperty(Module[\"ready\"],\"_main\",{configurable:true,get:function(){abort(\"You are getting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_main\",{configurable:true,set:function(){abort(\"You are setting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_VoidPtr___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_VoidPtr___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_VoidPtr___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_VoidPtr___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_VoidPtr___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder_ArrangementBuilder_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder_ArrangementBuilder_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ArrangementBuilder_ArrangementBuilder_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder_ArrangementBuilder_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ArrangementBuilder_ArrangementBuilder_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder_getPolygons_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder_getPolygons_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ArrangementBuilder_getPolygons_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder_getPolygons_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ArrangementBuilder_getPolygons_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ArrangementBuilder___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ArrangementBuilder___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ArrangementBuilder___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Point_Point_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_Point_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Point_Point_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_Point_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Point_Point_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Point_Point_2\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_Point_2\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Point_Point_2 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_Point_2\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Point_Point_2 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Point_get_x_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_get_x_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Point_get_x_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_get_x_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Point_get_x_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Point_set_x_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_set_x_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Point_set_x_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_set_x_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Point_set_x_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Point_get_y_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_get_y_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Point_get_y_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_get_y_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Point_get_y_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Point_set_y_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_set_y_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Point_set_y_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point_set_y_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Point_set_y_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Point___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Point___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Point___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Point___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon_Polygon_2\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_Polygon_2\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon_Polygon_2 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_Polygon_2\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon_Polygon_2 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon_getInsidePoint_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_getInsidePoint_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon_getInsidePoint_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_getInsidePoint_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon_getInsidePoint_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon_getPolyTristripArea_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_getPolyTristripArea_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon_getPolyTristripArea_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_getPolyTristripArea_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon_getPolyTristripArea_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon_get_contour_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_get_contour_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon_get_contour_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_get_contour_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon_get_contour_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon_set_contour_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_set_contour_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon_set_contour_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_set_contour_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon_set_contour_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon_get_holes_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_get_holes_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon_get_holes_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_get_holes_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon_get_holes_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon_set_holes_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_set_holes_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon_set_holes_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon_set_holes_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon_set_holes_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Polygon___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Polygon___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Polygon___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Polygon___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PointList_PointList_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_PointList_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PointList_PointList_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_PointList_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PointList_PointList_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PointList_push_back_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_push_back_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PointList_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_push_back_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PointList_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PointList_size_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_size_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PointList_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_size_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PointList_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PointList_at_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_at_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PointList_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_at_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PointList_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PointList_clear_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_clear_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PointList_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList_clear_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PointList_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PointList___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PointList___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PointList___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PointList___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PolygonList_PolygonList_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_PolygonList_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PolygonList_PolygonList_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_PolygonList_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PolygonList_PolygonList_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PolygonList_push_back_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_push_back_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PolygonList_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_push_back_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PolygonList_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PolygonList_size_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_size_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PolygonList_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_size_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PolygonList_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PolygonList_at_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_at_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PolygonList_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_at_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PolygonList_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PolygonList_clear_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_clear_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PolygonList_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList_clear_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PolygonList_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_PolygonList___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_PolygonList___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_PolygonList___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_PolygonList___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Contour_Contour_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_Contour_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Contour_Contour_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_Contour_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Contour_Contour_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Contour_push_back_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_push_back_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Contour_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_push_back_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Contour_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Contour_size_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_size_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Contour_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_size_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Contour_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Contour_at_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_at_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Contour_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_at_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Contour_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Contour_clear_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_clear_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Contour_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour_clear_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Contour_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_Contour___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_Contour___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_Contour___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_Contour___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ContourList_ContourList_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_ContourList_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ContourList_ContourList_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_ContourList_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ContourList_ContourList_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ContourList_push_back_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_push_back_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ContourList_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_push_back_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ContourList_push_back_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ContourList_size_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_size_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ContourList_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_size_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ContourList_size_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ContourList_at_1\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_at_1\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ContourList_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_at_1\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ContourList_at_1 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ContourList_clear_0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_clear_0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ContourList_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList_clear_0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ContourList_clear_0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_emscripten_bind_ContourList___destroy___0\")){Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList___destroy___0\",{configurable:true,get:function(){abort(\"You are getting _emscripten_bind_ContourList___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_emscripten_bind_ContourList___destroy___0\",{configurable:true,set:function(){abort(\"You are setting _emscripten_bind_ContourList___destroy___0 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"_fflush\")){Object.defineProperty(Module[\"ready\"],\"_fflush\",{configurable:true,get:function(){abort(\"You are getting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"_fflush\",{configurable:true,set:function(){abort(\"You are setting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}if(!Object.getOwnPropertyDescriptor(Module[\"ready\"],\"onRuntimeInitialized\")){Object.defineProperty(Module[\"ready\"],\"onRuntimeInitialized\",{configurable:true,get:function(){abort(\"You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}});Object.defineProperty(Module[\"ready\"],\"onRuntimeInitialized\",{configurable:true,set:function(){abort(\"You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")}})}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof importScripts==\"function\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(Module[\"ENVIRONMENT\"]){throw new Error(\"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)\")}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;if(e&&typeof e==\"object\"&&e.stack){toLog=[e,e.stack]}err(\"exiting due to exception: \"+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(!(typeof process==\"object\"&&typeof require==\"function\"))throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}requireNodeFS=()=>{if(!nodePath){fs=require(\"fs\");nodePath=require(\"path\")}};read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}requireNodeFS();filename=nodePath[\"normalize\"](filename);return fs.readFileSync(filename,binary?undefined:\"utf8\")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=(filename,onload,onerror)=>{var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}requireNodeFS();filename=nodePath[\"normalize\"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process[\"exitCode\"]=status;throw toThrow}logExceptionOnExit(toThrow);process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof process==\"object\"&&typeof require===\"function\"||typeof window==\"object\"||typeof importScripts==\"function\")throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");if(typeof read!=\"undefined\"){read_=function shell_read(f){const data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){let data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data==\"object\");return data};readAsync=function readAsync(f,onload,onerror){setTimeout(()=>onload(readBinary(f)),0)};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit==\"function\"){quit_=(status,toThrow)=>{logExceptionOnExit(toThrow);quit(status)}}if(typeof print!=\"undefined\"){if(typeof console==\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!=\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}if(!(typeof window==\"object\"||typeof importScripts==\"function\"))throw new Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");{read_=url=>{try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{throw new Error(\"environment detection error\")}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;checkIncomingModuleAPI();if(Module[\"arguments\"])arguments_=Module[\"arguments\"];legacyModuleProp(\"arguments\",\"arguments_\");if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];legacyModuleProp(\"thisProgram\",\"thisProgram\");if(Module[\"quit\"])quit_=Module[\"quit\"];legacyModuleProp(\"quit\",\"quit_\");assert(typeof Module[\"memoryInitializerPrefixURL\"]==\"undefined\",\"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"pthreadMainPrefixURL\"]==\"undefined\",\"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"cdInitializerPrefixURL\"]==\"undefined\",\"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"filePackagePrefixURL\"]==\"undefined\",\"Module.filePackagePrefixURL option was removed, use Module.locateFile instead\");assert(typeof Module[\"read\"]==\"undefined\",\"Module.read option was removed (modify read_ in JS)\");assert(typeof Module[\"readAsync\"]==\"undefined\",\"Module.readAsync option was removed (modify readAsync in JS)\");assert(typeof Module[\"readBinary\"]==\"undefined\",\"Module.readBinary option was removed (modify readBinary in JS)\");assert(typeof Module[\"setWindowTitle\"]==\"undefined\",\"Module.setWindowTitle option was removed (modify setWindowTitle in JS)\");assert(typeof Module[\"TOTAL_MEMORY\"]==\"undefined\",\"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY\");legacyModuleProp(\"read\",\"read_\");legacyModuleProp(\"readAsync\",\"readAsync\");legacyModuleProp(\"readBinary\",\"readBinary\");legacyModuleProp(\"setWindowTitle\",\"setWindowTitle\");assert(!ENVIRONMENT_IS_SHELL,\"shell environment detected but not enabled at build time.  Add 'shell' to `-sENVIRONMENT` to enable.\");var POINTER_SIZE=4;function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function uleb128Encode(n){assert(n<16384);if(n<128){return[n]}return[n%128|128,n>>7]}function sigToWasmTypes(sig){var typeNames={\"i\":\"i32\",\"j\":\"i64\",\"f\":\"f32\",\"d\":\"f64\",\"p\":\"i32\"};var type={parameters:[],results:sig[0]==\"v\"?[]:[typeNames[sig[0]]]};for(var i=1;i<sig.length;++i){assert(sig[i]in typeNames,\"invalid signature char: \"+sig[i]);type.parameters.push(typeNames[sig[i]])}return type}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==\"function\"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSection=[1,96];var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={\"i\":127,\"p\":127,\"j\":126,\"f\":125,\"d\":124};typeSection=typeSection.concat(uleb128Encode(sigParam.length));for(var i=0;i<sigParam.length;++i){assert(sigParam[i]in typeCodes,\"invalid signature char: \"+sigParam[i]);typeSection.push(typeCodes[sigParam[i]])}if(sigRet==\"v\"){typeSection.push(0)}else{typeSection=typeSection.concat([1,typeCodes[sigRet]])}typeSection=[1].concat(uleb128Encode(typeSection.length),typeSection);var bytes=new Uint8Array([0,97,115,109,1,0,0,0].concat(typeSection,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0]));var module=new WebAssembly.Module(bytes);var instance=new WebAssembly.Instance(module,{\"e\":{\"f\":func}});var wrappedFunc=instance.exports[\"f\"];return wrappedFunc}var freeTableIndexes=[];var functionsInTableMap;function getEmptyTableSlot(){if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw\"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\"}return wasmTable.length-1}function updateTableMap(offset,count){for(var i=offset;i<offset+count;i++){var item=getWasmTableEntry(i);if(item){functionsInTableMap.set(item,i)}}}function legacyModuleProp(prop,newName){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,get:function(){abort(\"Module.\"+prop+\" has been replaced with plain \"+newName+\" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)\")}})}}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(\"`Module.\"+prop+\"` was supplied but `\"+prop+\"` not included in INCOMING_MODULE_JS_API\")}}function unexportedMessage(sym,isFSSybol){var msg=\"'\"+sym+\"' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\";if(isFSSybol){msg+=\". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\"}return msg}function unexportedRuntimeSymbol(sym,isFSSybol){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get:function(){abort(unexportedMessage(sym,isFSSybol))}})}}function unexportedRuntimeFunction(sym,isFSSybol){if(!Object.getOwnPropertyDescriptor(Module,sym)){Module[sym]=()=>abort(unexportedMessage(sym,isFSSybol))}}var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];legacyModuleProp(\"wasmBinary\",\"wasmBinary\");var noExitRuntime=Module[\"noExitRuntime\"]||true;legacyModuleProp(\"noExitRuntime\",\"noExitRuntime\");if(typeof WebAssembly!=\"object\"){abort(\"no native wasm support detected\")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(\"Assertion failed\"+(text?\": \"+text:\"\"))}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!==\"array\",'Return type should not be \"array\".');if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret}var ALLOC_STACK=1;var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}else{var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{if((u0&248)!=240)warnOnce(\"Invalid UTF-8 leading byte 0x\"+u0.toString(16)+\" encountered when deserializing a UTF-8 string in wasm memory to a JS string!\");u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce(\"Invalid Unicode code point 0x\"+u.toString(16)+\" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).\");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite==\"number\",\"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!\");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function writeArrayToMemory(array,buffer){assert(array.length>=0,\"writeArrayToMemory array must have a length (should be an array or typed array)\");HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){assert(str.charCodeAt(i)===(str.charCodeAt(i)&255));HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var TOTAL_STACK=5242880;if(Module[\"TOTAL_STACK\"])assert(TOTAL_STACK===Module[\"TOTAL_STACK\"],\"the stack size can no longer be determined at runtime\");var INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;legacyModuleProp(\"INITIAL_MEMORY\",\"INITIAL_MEMORY\");assert(INITIAL_MEMORY>=TOTAL_STACK,\"INITIAL_MEMORY should be larger than TOTAL_STACK, was \"+INITIAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");assert(typeof Int32Array!=\"undefined\"&&typeof Float64Array!==\"undefined\"&&Int32Array.prototype.subarray!=undefined&&Int32Array.prototype.set!=undefined,\"JS engine does not provide full typed array support\");assert(!Module[\"wasmMemory\"],\"Use of `wasmMemory` detected.  Use -sIMPORTED_MEMORY to define wasmMemory externally\");assert(INITIAL_MEMORY==16777216,\"Detected runtime INITIAL_MEMORY setting.  Use -sIMPORTED_MEMORY to define wasmMemory dynamically\");var wasmTable;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);HEAP32[max>>2]=34821223;HEAP32[max+4>>2]=2310721022;HEAPU32[0]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(\"Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x\"+cookie2.toString(16)+\" 0x\"+cookie1.toString(16))}if(HEAPU32[0]!==1668509029)abort(\"Runtime error: The application has corrupted its heap memory area (address zero)!\")}(function(){var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw\"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)\"})();var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();callRuntimeCallbacks(__ATINIT__)}function postRun(){checkStackCookie();if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}assert(Math.imul,\"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");assert(Math.fround,\"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");assert(Math.clz32,\"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");assert(Math.trunc,\"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!=\"undefined\"){runDependencyWatcher=setInterval(function(){if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err(\"still waiting on run dependencies:\")}err(\"dependency: \"+dep)}if(shown){err(\"(end of list)\")}},1e4)}}else{err(\"warning: run dependency added without ID\")}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err(\"warning: run dependency removed without ID\")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}}what=\"Aborted(\"+what+\")\";err(what);ABORT=true;EXITSTATUS=1;var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var FS={error:function(){abort(\"Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM\")},init:function(){FS.error()},createDataFile:function(){FS.error()},createPreloadedFile:function(){FS.error()},createLazyFile:function(){FS.error()},open:function(){FS.error()},mkdev:function(){FS.error()},registerDevice:function(){FS.error()},analyzePath:function(){FS.error()},loadFilesFromDB:function(){FS.error()},ErrnoError:function ErrnoError(){FS.error()}};Module[\"FS_createDataFile\"]=FS.createDataFile;Module[\"FS_createPreloadedFile\"]=FS.createPreloadedFile;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith(\"file://\")}function createExportWrapper(name,fixedasm){return function(){var displayName=name;var asm=fixedasm;if(!fixedasm){asm=Module[\"asm\"]}assert(runtimeInitialized,\"native function `\"+displayName+\"` called before runtime initialization\");if(!asm[name]){assert(asm[name],\"exported native function `\"+displayName+\"` not found\")}return asm[name].apply(null,arguments)}}var wasmBinaryFile;wasmBinaryFile=\"data:application/octet-stream;base64,AGFzbQEAAAABpAMzYAJ/fwBgAX8Bf2ABfwBgAn9/AX9gA39/fwF/YAN/f38AYAR/f39/AGAEf39/fwF/YAV/f39/fwBgBn9/f39/fwF/YAV/f39/fwF/YAh/f39/f39/fwF/YAZ/f39/f38AYAAAYAd/f39/f39/AGAHf39/f39/fwF/YAABf2AFf35+fn4AYAV/f39/fgF/YAJ/fABgAX8BfGADf35/AX5gAnx/AXxgBH9+fn8AYAp/f39/f39/f39/AX9gBn9/f39+fgF/YAd/f39/f35+AX9gCX9/f39/f39/fwF/YAZ/fH9/f38Bf2AFf39+f38AYAR/f39/AX5gDH9/f39/f39/f39/fwF/YAV/f39/fAF/YAt/f39/f39/f39/fwF/YAp/f39/f39/f39/AGAPf39/f39/f39/f39/f39/AGADf39/AX5gCH9/f39/f39/AGAEf398fABgAnx8AX9gAn5/AX9gAn9+AGACf38BfmADf39+AGAEfn5+fgF/YAN+fn4Bf2ACfn4BfGACfn4BfWAEf39/fgF+YAN/f38BfWADf39/AXwC+wIOA2VudhhfX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24AAQNlbnYLX19jeGFfdGhyb3cABQNlbnYFYWJvcnQADQNlbnYEZXhpdAACA2VudhVlbXNjcmlwdGVuX21lbWNweV9iaWcABRZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxCGZkX2Nsb3NlAAEWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF93cml0ZQAHA2VudhZlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwAAEWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQdmZF9yZWFkAAcWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MRFlbnZpcm9uX3NpemVzX2dldAADFndhc2lfc25hcHNob3RfcHJldmlldzELZW52aXJvbl9nZXQAAwNlbnYKc3RyZnRpbWVfbAAKA2VudgtzZXRUZW1wUmV0MAACFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawAKA5AIjggNAgEBBAEDAQINDQECEwIAAAECFAICAAICAgYIBQYAAwYBAgICAgECAgECAAECAQMBAgIBAgECAQECAAIBBAQEAwICAAAFAQkBAwMABQQFAAUCAQEBAQIBAgIGAQwCBQQIDAgOCwAGBQECAgkBAQoCAgYGCAoBAwMFAwECAgICAAIHAAIFBgIEBgQDBgYBAAICAgACBAECAQIAAwENCAQJAgUAAwMBAwUDAAAAAAADAAMACAAACQ8IDgUKBQAHAQIIAwcABggIAAUFAQUFAgMAAAgBAQIGCAgIDgAABgQICgMIAgYICA4AAQIbCAcBAgICAgACBwAAAgUFAgYEAwYGAQACAgICBAECAQIDAwEDBQAAAwAIAAAJCwgOAAMHAAMABQYIAAUFBAUFBQoFAgEmAhADECcUExQTAwMUAAEAAhAAAQMCAgABAwABAwICBAQEAQAWFgEEFQEBAwEEEBYEBwoPBQEGKAgcAAEBKQERFxEGKgcrAwMBAgMAAREXLC0REwAAFxERES4vBQYHCgQDBQEEDQQBAQIBAgEEHQYEBQEBAwQDAQECAgIBAwEBAwADAQEBAgIDAgAAAQIBBAUBBAIBAwEDAwEAAQAFAAEFAAEBAwMAARUDAQUABQAAAQICAAEDAQMAAQQDAgABAwEDAAQDBAQDBAEDBAcEAwcCAQcwBgoGBAoGBQQJAQ8DBAkBBRgHBgkeCQcJBwkeCQgfMQkyCQYJEAQEAwkBDwkDBRgJCQkJCQgfCQkJBAoBAQoGCgQOEgoSIAQBBw4ZCgEKAQoOCRIKEiAOGQoEAAALAQkJCQwJDAkICgsLCQkJDAkMCQgKCw8MAw8BAAAAAQAADyEABQUPAQEDAA8hAA8BAAEDGiIjBAkaIiMJBAwMAQACAQUQAQUCAQIEAgIEBwcHAwQDBAcECgECAwQDBAcECgsKCgILBAsKCgEBCgELCwoBCwsKAQIBAgEBAAAAAAAAAAABAgECAAECAQIBAgECAQIBAgECAQIBAgECAQIBAgIBAQUAAQMDAAIBAw0FJCQBAAAFJQEMBQUFBAAlAQgADQQEAwUGBgYGBggMCAgIDAwMAQEBAQECEAIBDRAQEAcAAwMBAwUEAQACAgEBAwMBAQAFDwMAAwEDAQMEBAEBAAABAwEBBgUDBAADAAABAwMDAwQAAwQHAwEDAwAAAAMDAwMAAAEDAwQHBwEEAQMDAwMDBAEBBAEDBwkDAQIABQAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAgMAAAAHAAAAAAMAAAAAAAcAAAAABAAAAAAHAAAAAAAAAAAAAAAAAAADAwMDAAAAAAADAAAABAAAAAAAAAMDAwAAAAAEAAAAAAAAAwABAAAFAAQACg4PGxgEBwFwAfcF9wUFBwEBgAKAgAIGEwN/AUHw9MICC38BQQALfwFBAAsHuxBABm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzAA4ZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEABm1hbGxvYwCFAwRmcmVlAIYDJWVtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzAAvgI3ZW1zY3JpcHRlbl9iaW5kX0FycmFuZ2VtZW50QnVpbGRlcl9BcnJhbmdlbWVudEJ1aWxkZXJfMAC/AjBlbXNjcmlwdGVuX2JpbmRfQXJyYW5nZW1lbnRCdWlsZGVyX2dldFBvbHlnb25zXzEAwAIwZW1zY3JpcHRlbl9iaW5kX0FycmFuZ2VtZW50QnVpbGRlcl9fX2Rlc3Ryb3lfX18wAL4CHWVtc2NyaXB0ZW5fYmluZF9Qb2ludF9Qb2ludF8wAMECHWVtc2NyaXB0ZW5fYmluZF9Qb2ludF9Qb2ludF8yAMICHWVtc2NyaXB0ZW5fYmluZF9Qb2ludF9nZXRfeF8wAMMCHWVtc2NyaXB0ZW5fYmluZF9Qb2ludF9zZXRfeF8xAMQCHWVtc2NyaXB0ZW5fYmluZF9Qb2ludF9nZXRfeV8wAMUCHWVtc2NyaXB0ZW5fYmluZF9Qb2ludF9zZXRfeV8xAMYCI2Vtc2NyaXB0ZW5fYmluZF9Qb2ludF9fX2Rlc3Ryb3lfX18wAL4CIWVtc2NyaXB0ZW5fYmluZF9Qb2x5Z29uX1BvbHlnb25fMgDHAihlbXNjcmlwdGVuX2JpbmRfUG9seWdvbl9nZXRJbnNpZGVQb2ludF8xAMgCLWVtc2NyaXB0ZW5fYmluZF9Qb2x5Z29uX2dldFBvbHlUcmlzdHJpcEFyZWFfMADJAiVlbXNjcmlwdGVuX2JpbmRfUG9seWdvbl9nZXRfY29udG91cl8wAEUlZW1zY3JpcHRlbl9iaW5kX1BvbHlnb25fc2V0X2NvbnRvdXJfMQDKAiNlbXNjcmlwdGVuX2JpbmRfUG9seWdvbl9nZXRfaG9sZXNfMADLAiNlbXNjcmlwdGVuX2JpbmRfUG9seWdvbl9zZXRfaG9sZXNfMQDMAiVlbXNjcmlwdGVuX2JpbmRfUG9seWdvbl9fX2Rlc3Ryb3lfX18wAM0CJWVtc2NyaXB0ZW5fYmluZF9Qb2ludExpc3RfUG9pbnRMaXN0XzAAzgIlZW1zY3JpcHRlbl9iaW5kX1BvaW50TGlzdF9wdXNoX2JhY2tfMQDPAiBlbXNjcmlwdGVuX2JpbmRfUG9pbnRMaXN0X3NpemVfMADQAh5lbXNjcmlwdGVuX2JpbmRfUG9pbnRMaXN0X2F0XzEA0QIhZW1zY3JpcHRlbl9iaW5kX1BvaW50TGlzdF9jbGVhcl8wANICJ2Vtc2NyaXB0ZW5fYmluZF9Qb2ludExpc3RfX19kZXN0cm95X19fMADTAillbXNjcmlwdGVuX2JpbmRfUG9seWdvbkxpc3RfUG9seWdvbkxpc3RfMADOAidlbXNjcmlwdGVuX2JpbmRfUG9seWdvbkxpc3RfcHVzaF9iYWNrXzEA1AIiZW1zY3JpcHRlbl9iaW5kX1BvbHlnb25MaXN0X3NpemVfMADVAiBlbXNjcmlwdGVuX2JpbmRfUG9seWdvbkxpc3RfYXRfMQDWAiNlbXNjcmlwdGVuX2JpbmRfUG9seWdvbkxpc3RfY2xlYXJfMADSAillbXNjcmlwdGVuX2JpbmRfUG9seWdvbkxpc3RfX19kZXN0cm95X19fMADTAiFlbXNjcmlwdGVuX2JpbmRfQ29udG91cl9Db250b3VyXzAAzgIjZW1zY3JpcHRlbl9iaW5kX0NvbnRvdXJfcHVzaF9iYWNrXzEAzwIeZW1zY3JpcHRlbl9iaW5kX0NvbnRvdXJfc2l6ZV8wANACHGVtc2NyaXB0ZW5fYmluZF9Db250b3VyX2F0XzEA0QIfZW1zY3JpcHRlbl9iaW5kX0NvbnRvdXJfY2xlYXJfMADSAiVlbXNjcmlwdGVuX2JpbmRfQ29udG91cl9fX2Rlc3Ryb3lfX18wANMCKWVtc2NyaXB0ZW5fYmluZF9Db250b3VyTGlzdF9Db250b3VyTGlzdF8wAM4CJ2Vtc2NyaXB0ZW5fYmluZF9Db250b3VyTGlzdF9wdXNoX2JhY2tfMQDXAiJlbXNjcmlwdGVuX2JpbmRfQ29udG91ckxpc3Rfc2l6ZV8wANgCIGVtc2NyaXB0ZW5fYmluZF9Db250b3VyTGlzdF9hdF8x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AgAiASACRwRAA0AgASgCBCIDIAEoAgAiAjYCACABKAIAIAM2AgQgACAAKAJEQQFrNgJEQbDGAi0AAEUEQEH4xAJCADcCAEGwxgJBAToAAEGkxQJCIDcCAEGcxQJClICAgIAENwIAQYDFAkIANwIAQYjFAkIANwIAQZDFAkIANwIAQZjFAkEANgIACyABQZDFAigCADYCAEGQxQIgATYCACACIgEgACgCQEcNAAsLC8kCAQN/IwBBEGsiAyQAQa/GAi0AAEUEQEG8xAJCADcCAEGvxgJBAToAAEHoxAJCIDcCAEHgxAJCtICAgIAENwIAQcTEAkIANwIAQczEAkIANwIAQdTEAkIANwIAQdzEAkEANgIACwJAQdTEAigCACIBBEBB1MQCIAEoAgA2AgAMAQtB1MQCEDoiAQ0AIANBCGoiAEHI+gE2AgAgAEGg+gE2AgAgABA7AAsgAUEANgIwIAFBADYCBCABQQA2AiggASABQSBqIgI2AiQgASACNgIgIAFBADYCHCABIAFBFGoiAjYCGCABIAI2AhQgAUEANgIQIAEgAUEIaiICNgIMIAEgAjYCCCABQbgwNgIAIAEgACgCHCICNgIsIAEgAigCMDYCMCACKAIwIAE2AiwgAiABNgIwIAAgACgCIEEBajYCICADQRBqJAAgAQunBAECfyAAQZgBEJ0GEBM2AgBB6AAQnQZBAEHgABDeAiEBQQQQnQYhAiABQgA3AxAgASACNgIAIAEgAkEEajYCCCACQQA2AQAgAUEANgIgIAFCADcDGCABIAI2AgRBBBCdBiECIAFCADcDKCABIAI2AhggASACQQRqNgIgIAJBATYBACABQQA2AjggAUIANwMwIAEgAkECajYCHEEEEJ0GIQIgAUFAa0IANwMAIAEgAjYCMCABIAJBBGo2AjggAkEANgEAIAFBADYCUCABQgA3A0ggASACNgI0QQQQnQYhAiABQgA3A1ggASACNgJIIAEgAkEEajYCUCACQQE2AQAgAUEBNgJgIAEgAkECajYCTCAAIAE2AgRB6AAQnQZBAEHgABDeAiEBQQQQnQYhAiABQgA3AxAgASACNgIAIAEgAkEEajYCCCACQQA2AQAgAUEANgIgIAFCADcDGCABIAI2AgRBBBCdBiECIAFCADcDKCABIAI2AhggASACQQRqNgIgIAJBATYBACABQQA2AjggAUIANwMwIAEgAkECajYCHEEEEJ0GIQIgAUFAa0IANwMAIAEgAjYCMCABIAJBBGo2AjggAkEANgEAIAFBADYCUCABQgA3A0ggASACNgI0QQQQnQYhAiABQgA3A1ggASACNgJIIAEgAkEEajYCUCACQQE2AQAgAUEBNgJgIAEgAkECajYCTCAAQYCAgAg2AgwgACABNgIIIAAL2gQCC38CfCMAQfAAayIDJAAgASsDACEOIANCADcDICADQQA2AhggA0IANwMQIANBEGoiBSAOEBsgAysDICEOIAMoAhQhASADKAIQIQYgAisDACEPIANCADcDICADQQA2AhggA0IANwMQIAUgDxAbIAMrAyAhDyADKAIUIQcgAygCECECIANBADYCGCADQgA3AxACQAJAIAEgBkcEQCABIAZrIgFBAEgNASADIAEQnQYiCDYCECADIAggAUEBdUEBdGoiCzYCGCADIAggBiABENwCIAFqIgw2AhQLIAMgDjkDICADQQIQnQYiBUECaiIJNgIwIAMgBTYCKCAFQQE7AQAgA0IANwM4IAMgCTYCLCADQUBrQgA3AwAgA0EANgJIIAIgB0cEQCAHIAJrIgFBAEgNAiADIAEQnQYiBDYCQCADIAQ2AkQgAyAEIAFBAXVBAXRqIg02AkggBCACIAEQ3AIgAWohCgtBAhCdBiIHQQE7AQBB6AAQnQYiAUEBNgJgIAEgBDYCMCABIAU2AhggASAOOQMQIAEgCzYCCCABIAw2AgQgASAINgIAIAFCADcDWCABIAdBAmoiBDYCUCABIAQ2AkwgASAHNgJIIAFBQGsgDzkDACABIA02AjggASAKNgI0IAFCADcDKCABIAk2AiAgASAJNgIcIAMgATYCCCADIAE2AgAgASABKAJgQQFqNgJgIANBCGoQFRogACABNgIAIAEgASgCYEEBajYCYCADEBUaIAIEQCACEIYDCyAGBEAgBhCGAwsgA0HwAGokACAADwsQFwALEBcAC/0CAQF/IABBAEGQARDeAiEAQQQQnQYhASAAQgA3AxAgACABNgIAIAAgAUEEajYCCCABQQA2AQAgAEEANgIgIABCADcDGCAAIAE2AgRBBBCdBiEBIABCADcDKCAAIAE2AhggACABQQRqNgIgIAFBATYBACAAQQA2AjggAEIANwMwIAAgAUECajYC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AyIBIAJHDQALCwu3AwEFfyAAQaTQADYCACAAQZgDahAVGiAAQZQDahAVGgJAIAAoApADIgEoApABQQFHBEAgASABKAKQASIBQQFrNgKQASABQQFHDQELIAAoApADEBYgACgCkAMQhgMLIABBiANqEBUaIABBhANqEBUaAkAgACgCgAMiASgCkAFBAUcEQCABIAEoApABIgFBAWs2ApABIAFBAUcNAQsgACgCgAMQFiAAKAKAAxCGAwsgACgC9AIEQCAAKAL4AiIBIAAoAvQCIgRHBEADQCABIgJBEGshAwJAIAFBFGsiASgCACIFQR91IAVGBEAgAxAVGgwBCyACQQhrEBUaIAJBDGsQFRogAygCACICKAKQAUEBRwRAIAIgAigCkAEiAkEBazYCkAEgAkEBRw0BCyADKAIAEBYgAygCABCGAwsgASAERw0ACwsgACAENgL4AiAAKAL0AhCGAwsCQCAAKALwAkUNACAAKALsAiIBKAIAIgIgACgC6AIiAygCBDYCBCADKAIEIAI2AgAgAEEANgLwAiABIABB6AJqIgNGDQADQCABKAIEIQIgARCGAyACIgEgA0cNAAsLIAAQZQumAQEDfyAAQbjCADYCACAAQZgBahBmIAAoAngiAQRAIAEQhgMLIAAoAmQQhgMgACgCOCIBBEAgACABNgI8IAEQhgMLIABBrMsANgIIAkAgACgCJEUNACAAKAIgIgIoAgAiAyAAKAIcIgEoAgQ2AgQgASgCBCADNgIAIABBADYCJCACIABBHGoiA0YNAANAIAIoAgQhASACEIYDIAEiAiADRw0ACwsgAAu4AwEFfyAAQcT+ADYCACAAQcQDahAVGiAAQcADahAVGgJAIAAoArwDIgEoApABQQFHBEAgASABKAKQASIBQQFrNgKQASABQQFHDQELIAAoArwDEBYgACgCvAMQhgMLIABBpANqEBUaIABBoANqEBUaAkAgACgCnAMiASgCkAFBAUcEQCABIAEoApABIgFBAWs2ApABIAFBAUcNAQsgACgCnAMQFiAAKAKcAxCGAwsgACgCkAMEQCAAKAKUAyIBIAAoApADIgRHBEADQCABIgJBIGshAwJAIAFBJGsiASgCACIFQR91IAVGBEAgAxAVGgwBCyACQRhrEBUaIAJBHGsQFRogAygCACICKAKQAUEBRwRAIAIgAigC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C0EwaiANQTBqEBQLQX9HDQELIAMoAhBBfnEhCiADKAIYIQYgAyEFIAchCQsgCCgCBCIIIARHDQALCwJAIAUEfyAAIAVGDQEgBSgCDAUgAgsoAhghAQsgBhBUIAEQVBCEASEAIAxBEGokACAAQQFGC/oBAQN/IwBBEGsiAyQAQbDGAi0AAEUEQEH4xAJCADcCAEGwxgJBAToAAEGkxQJCIDcCAEGcxQJClICAgIAENwIAQYDFAkIANwIAQYjFAkIANwIAQZDFAkIANwIAQZjFAkEANgIACwJAQZDFAigCACIBBEBBkMUCIAEoAgA2AgAMAQtBkMUCEDoiAQ0AIANBCGoiAEHI+gE2AgAgAEGg+gE2AgAgABA7AAsgAUIANwIAIAFBADoAECABQgA3AgggASAAKAIoIgI2AgAgASACKAIENgIEIAIoAgQgATYCACACIAE2AgQgACAAKAIsQQFqNgIsIANBEGokACABC9QNAQl/IwBBwAFrIggkACAIQZABaiAAKAIAEFchBSAIQeAAaiAAKAIAQTBqEFchBCAIQTBqIAEoAgAQVyEGIAggASgCAEEwahBXIQMjAEHQAWsiACQAQQQQnQYhASAAQgA3A6gBIAAgATYCmAEgACABQQRqNgKgASABQQA2AQAgACABNgKcAUEEEJ0GIQEgAEIANwPAASAAIAFBBGo2ArgBIAAgATYCsAEgAUEBNgEAIAAgAUECajYCtAEgBSAAQZgBahBYIQIgACgCsAEiAQRAIAAgATYCtAEgARCGAwsgACgCmAEiAQRAIAAgATYCnAEgARCGAwsCQCACBEBBBBCdBiEBIABCADcDqAEgACABNgKYASAAIAFBBGo2AqABIAFBADYBACAAIAE2ApwBQQQQnQYhASAAQgA3A8ABIAAgAUEEajYCuAEgACABNgKwASABQQE2AQAgACABQQJqNgK0ASADIABBmAFqEFghAiAAKAKwASIBBEAgACABNgK0ASABEIYDCyAAKAKYASIBBEAgACABNgKcASABEIYDC0F/IQEgAg0BIABBmAFqIgEgBhCFASABIAMQhQFsIQEMAQtBBBCdBiEBIABCADcDqAEgACABNgKYASAAIAFBBGo2AqABIAFBADYBACAAIAE2ApwBQQQQnQYhASAAQgA3A8ABIAAgAUEEajYCuAEgACABNgKwASABQQE2AQAgACABQQJqNgK0ASAGIABBmAFqEFghAiAAKAKwASIBBEAgACABNgK0ASABEIYDCyAAKAKYASIBBEAgACABNgKcASABEIYDCyACBEBBBBCdBiEBIABCADcDqAEgACABNgKYASAAIAFBBGo2AqABIAFBADYBACAAIAE2ApwBQQQQnQYhASAAQgA3A8ABIAAgAUEEajYCuAEgACABNgKwASABQQE2AQAgACABQQJqNgK0ASAEIABBmAFqEFghAiAAKAKwASIBBEAgACABNgK0ASABEIYDCyAAKAKYASIBBEAgACABNgKcASABEIYDC0EBIQEgAg0BQQAgAEGYAWoiASAFEIUBIAEgBBCFAWxrIQEMAQtBBBCdBiEBIABCADcDqAEgACABNgKYASAAIAFBBGo2AqABIAFBADYBACAAIAE2ApwBQQQQnQYhASAAQgA3A8ABIAAgAUEEajYCuAEgACABNgKwASABQQE2AQAgACABQQJqNgK0ASAEIABBmAFqEFghAiAAKAKwASIBBEAgACABNgK0ASABEIYDCyAAKAKYASIBBEAgACABNgKcASABEIYDCyACBEBBBBCdBiEBIABCADcDqAEgACABNgKYASAAIAFBBGo2AqABIAFBADYBACAAIAE2ApwBQQQQnQYhASAAQgA3A8ABIAAgAUEEajYCuAEgACABNgKwASABQQE2AQAgACABQQJqNgK0ASADIABBmAFqEFghAiAAKAKwASIBBEAgACABNgK0ASABEIYDCyAAKAKYASIBBEAgACABNgKcASABEIYDCyACQQFzIQEMAQtBBBCdBiEBIABCADcDqAEgACABNgKYASAAIAFBBGo2AqABIAFBADYBACAAIAE2ApwBQQQQnQYhASAAQgA3A8ABIAAgAUEEajYCuAEgACABNgKwASABQQE2AQAgACABQQJqNgK0ASADIABBmAFqEFghAiAAKAKwASIBBEAgACABNgK0ASABEIYDCyAAKAKYASIBBEAgACABNgKcASABEIYDC0F/IQEgAg0AQQAgAEGYAWoiAiAFEIUBIAIgBBCFAWxrIgdBACACIAYQhQEgAiADEIUBbGsiAkgNAEEBIQEgAiAHSA0AIAdBAEoEQCAAQegAaiIHIAUgAxBeIABBmAFqIgkgAEE4aiICIAcQhgEgAEEIaiIKIAYgBBBeIAIgAEHI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AigCCCIFRQRAIABB4ABqIQZBACEFDAQLIAIgBSgCDEYhAyAFIQIgAw0ACwwBCwNAIAIiBSgCECICDQALCyAFIABB4ABqIgZGDQELIAdBBGohCANAIAQhAgJAIAQgCEYNACAFKAIAIQMDQCACKAIIIANGDQEgAigCBCICIAhHDQALDAILIAIgCEYNAQJAIAUiAygCDCICBEADQCACIgUoAhAiAg0ADAILAAsDQCADKAIIIgVFBEBBACEFDAILIAMgBSgCDEYhAiAFIQMgAg0ACwsgBSAGRw0ACyAGIQULAkACQCAAKAJUIgAgBiAAGyICIAFGBEAgB0EEaiEGIAEgBUYNAQNAIAQgASgCADYCCAJAIAEiAygCDCICBEADQCACIgEoAhAiAg0ADAILAAsDQCADKAIIIgFFBEBBACEBDAILIAMgASgCDEYhACABIQMgAA0ACwsgBCgCBCEEIAEgBUcNAAsMAQsCQAJAAkACQCABKAIQIgAEQANAIAAiAygCDCIADQAMAgsACwNAIAEoAggiA0UEQEEAIQMMAwsgASADKAIQRiEAIAMhASAADQALCyACIANGDQELIAdBBGohBgNAAkACQAJAIAYgBCIBRg0AIAMoAgAhAANAIAEoAgggAEYNASABKAIEIgEgBkcNAAsMAQsgASAGRw0BCwJAIAMoAgwiAgRAA0AgAiIBKAIQIgINAAwCCwALA0AgAygCCCIBRQRAQQAhAQwCCyADIAEoAgxGIQAgASEDIAANAAsLIAEgBUYNAwNAIAQgASgCADYCCAJAIAEiAygCDCICBEADQCACIgEoAhAiAg0ADAILAAsDQCADKAIIIgFFBEBBACEBDAILIAMgASgCDEYhACABIQMgAA0ACwsgBCgCBCEEIAEgBUcNAAsMAwsCQCADIgAoAhAiAQRAA0AgASIDKAIMIgENAAwCCwALA0AgACgCCCIDRQRAQQAhAwwCCyAAIAMoAhBGIQEgAyEAIAENAAsLIAIgA0cNAAsLAkACQAJAAkAgB0EEaiIGIAQiAUYNACACKAIAIQADQCABKAIIIABGDQEgASgCBCIBIAZHDQALDAELIAEgBkcNAQsCQCACKAIMIgMEQANAIAMiASgCECIDDQAMAgsACwNAIAIoAggiAUUEQEEAIQEMAgsgAiABKAIMRiEAIAEhAiAADQALCyABIAVG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QQpNBEAgAyAHOgALIAMhAAwBCyAHQRBqQXBxIgYQnQYhACADIAZBgICAgHhyNgIIIAMgADYCACADIAc2AgQLIAEgC0cEfyAAIAEgBxDcAiAHagUgAAtBADoAACAEIAMoAgAgAyADLQALIgBBGHRBGHVBAEgiARsgAygCBCAAIAEbEKYGIAMsAAtBAE4NACADKAIAEIYDCyADQRBqJAAMAQsQqgEACyACIAJB8AFqIAIoAiAgBCACLAArIgBBAEgiARsgAigCJCAAQf8BcSABGxCnBiIAKAIINgKoAiACIAApAgA3A6ACIABCADcCACAAQQA2AggCQCAQKAIEIBAtAAsiACAAQRh0QRh1IgFBAEgbIgNFBEAgAkEAOgAQIAJBADoAGyACIAJBoAJqIAJBEGpBABCnBiIAKAIINgKIAiACIAApAgA3A4ACIABCADcCACAAQQA2AgggDCACQYACahCeBiACLACLAkEASARAIAIoAoACEIYDCyACLAAbQQBODQEgAigCEBCGAwwBCyACQRAQnQYiADYCACACQo6AgICAgoCAgH83AgQgAEEAOgAOIABBtSopAAA3AAYgAEGvKikAADcAACACIAIgECgCACAQIAFBAEgbIAMQpwYiACgCCDYCGCACIAApAgA3AxAgAEIANwIAIABBADYCCCACIAJBoAJqIAIoAhAgAkEQaiACLQAbIgBBGHRBGHVBAEgiARsgAigCFCAAIAEbEKcGIgAoAgg2AogCIAIgACkCADcDgAIgAEIANwIAIABBADYCCCAMIAJBgAJqEJ4GIAIsAIsCQQBIBEAgAigCgAIQhgMLIAIsABtBAEgEQCACKAIQEIYDCyACLAALQQBODQAgAigCABCGAwsgAiwAqwJBAEgEQCACKAKgAhCGAwsgAiwAK0EASARAIAIoAiAQhgMLIAIsAPsBQQBIBEAgAigC8AEQhgMLIAIsADtBAEgEQCACKAIwEIYDCyACLADrAUEASARAIAIoAuABEIYDCyACLADbAUEASARAIAIoAtABEIYDCyACLABLQQBIBEAgAigCQBCGAwsgAiwAywFBAEgEQCACKALAARCGAwsgAiwAa0EASARAIAIoAmAQhgMLAkAgE0UNACACLABbQQBODQAgAigCUBCGAwsgAiwAuwFBAEgEQCACKAKwARCGAwsgAiwAe0EASARA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CyACLQAEDQAgAkEBOgAEIAAgACgCDEEBajYCDAsLOQEBfyAAIAFGBEBBAQ8LA0ACQCAAKAIcIgJFDQAgAiABELEBDQAgACgCICIAIAFHDQELCyACQQBHC+cCAQR/IwBBIGsiAiQAIAJBADYCGCACIAJBEGoiAzYCFCACIAM2AhAgAkEANgIIIAIgAjYCBCACIAI2AgAgACADELQBGiABIAIQtAEaAkAgAyACKAIUIgRGDQAgAigCBCIBIAJGDQADQCAEKAIIIQMgASEAAkADQCADIAAoAghHBEAgACgCBCIAIAJHDQEMAgsLIAAgAkYNAEEBIQUMAgsgBCgCBCIEIAJBEGpHDQALCwJAIAIoAghFDQAgAigCBCIAKAIAIgEgAigCACIDKAIENgIEIAMoAgQgATYCACACQQA2AgggACACRg0AA0AgACgCBCEBIAAQhgMgASIAIAJHDQALCwJAIAIoAhhFDQAgAigCFCIAKAIAIgEgAigCECIDKAIENgIEIAMoAgQgATYCACACQQA2AhggACACQRBqRg0AA0AgACgCBCEBIAAQhgMgASIAIAJBEGpHDQALCyACQSBqJAAgBQsyAQJ/IAAoAhwiAkUEQEEBDwsDQCACELMBIAFqIQEgACgCICIAKAIcIgINAAsgAUEBagtfAQF/A0AgACgCHCICBEAgAiABELQBIQEgACgCICEADAELC0EMEJ0GIgIgATYCBCACIAA2AgggAiABKAIAIgA2AgAgACACNgIEIAEgAjYCACABIAEoAghBAWo2AgggAQubAQIDfwF+IwBBMGsiAyQAAkAgASgCHCIERQRAIAMgATYCKCACIANBKGoQuAEgAikCACEGDAELIAMgAikCACIGNwMQIAMgBjcDICADQShqIgUgBCADQRBqELUBIAEoAiAhASADIAMpAygiBjcDCCADIAY3AxggBSABIANBCGoQtQEgAiADKQMoIgY3AgALIAAgBjcCACADQTBqJAALUAECfyMAQRBrIgIkAANAIAAoAhwiAwRAIAMgARC2ASEBIAAoAiAhAAwBCwsgAiAANgIMIAIgATYCCCACQQhqIAJBDGoQuQEgAkEQaiQAIAELIAAgAQRAIAAgASgCABC3ASAAIAEoAgQQtwEgARCGAwsLtQUBCX8jAEEQayIFJAACfyAFQQhqIQIgASEJAkAgACgCACIIIgFBBGoiAyAAKAIEIgRHBEAgCSgCACIGIAQoAhAiB08NAQsgBCgCACEHAkAgBCICIAEoAgBHBEACQCAHRQRAIAQhAQNAIAEoAggiAigCACABRiEGIAIhASAGDQALDAELIAchAQNAIAEiAigCBCIBDQALCyAJKAIAIgYgAigCEE0NAQsgB0UEQCAFIAQ2AgwgBAwDCyAFIAI2AgwgAkEEagwCCyADKAIAIgFFBEAgBSADNgIMIAMMAgsDQAJAIAEiAigCECIBIAZLBEAgAiIDKAIAIgENAgwBCyABIAZPDQAgAkEEaiEDIAIoAgQiAQ0BCwsgBSACNgIMIAMMAQsgBiAHSwRAAkAgBCgCBCIHRQRAIAQhAQNAIAEoAggiAigCACABRyEKIAIhASAKDQALDAELIAchAQNAIAEiAigCACIBDQALCwJAIAIgA0cEQCAGIAIoAhBPDQELIAdFBEAgBSAENgIMIARBBGoMAwsgBSACNgIMIAIMAgsgAygCACIBRQRAIAUgAzYCDCADDAILA0ACQCABIgIoAhAiASAGSwRAIAIiAygCACIBDQIMAQsgASAGTw0AIAJBBGohAyACKAIEIgENAQsLIAUgAjYCDCADDAELIAUgBDYCDCACIAQ2AgAgAgsiBCgCACICRQRAQRQQnQYiAiAJKAIANgIQIAIgBSgCDDYCCCACQgA3AgAgBCACNgIAIAIhASAIKAIAKAIAIgMEQCAIIAM2AgAgBCgCACEBCyAIKAIEIAEQugEgCCAIKAIIQQFqNgIICyAAIAI2AgQCQCACKAIEIgEEQANAIAEiAigCACIBDQAMAgsACwNAIAIgAigCCCICKAIARw0ACwsgACACNgIEIAVBEGokAAvlAQEGfyAAKAIAIgAoAgQiAiAAKAIIIgNJBEAgAiABKAIANgIAIAAgAkEEajYCBA8LAkAgAiAAKAIAIgJrIgZBAnUiBUEBaiIEQYCAgIAESQRAIAMgAmsiA0EBdSIHIAQgBCAHSRtB/////wMgA0H8////B0kbIgQEfyAEQYCAgIAETw0CIARBAnQQnQYFQQALIgMgBUECdGoiBSABKAIANgIAIAZBAEoEQCADIAIgBhDcAhoLIAAgAyAEQQJ0ajYCCCAAIAVBBGo2AgQgACADNgIAIAIEQCACEIYDCw8LEBcACxAYAAuUBAEDfyABIAAgAUYiAjoADAJAIAINAANAIAEoAggiAi0ADA0BAkAgAiACKAIIIgMoAgAiBEYEQAJAIAMoAgQiBEUNACAELQAMDQAMAgsCQCABIAIoAgBGBEAgAiEBDAELIAIgAigCBCIBKAIAIgA2AgQgASAABH8gACACNgIIIAIoAggFIAMLNgIIIAIoAggiACAAKAIAIAJHQQJ0aiABNgIAIAEgAjYCACACIAE2AgggASgCCCIDKAIAIQILIAFBAToADCADQQA6AAwgAyACKAIEIgA2AgAgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCBCADIAI2AggPCwJAIARFDQAgBC0ADA0ADAELAkAgASACKAIARwRAIAIhAQwBCyACIAEoAgQiADYCACABIAAEfyAAIAI2AgggAigCCAUgAws2AgggAigCCCIAIAAoAgAgAkdBAnRqIAE2AgAgASACNgIEIAIgATYCCCABKAIIIQMLIAFBAToADCADQQA6AAwgAyADKAIEIgAoAgAiATYCBCABBEAgASADNgIICyAAIAMoAgg2AgggAygCCCIBIAEoAgAgA0dBAnRqIAA2AgAgACADNgIAIAMgADYCCAwCCyAEQQxqIQEgAkEBOgAMIAMgACADRjoADCABQQE6AAAgAyIBIABHDQALCwurAgEDfyMAQSBrIgQkAAJAIAEoAgAiAiAAQeAAakdBACACGw0AIAAoAgwiAiABKAIERg0AIAQgACgCBDYCCCABQQxqIAIgAEGAA2ogAEGQA2oQkwEgACgCkAMiAyADKAKQAUEBajYCkAEgASgCDCECIAEgAzYCDAJAIAIoApABQQFHBEAgAiACKAKQASIDQQFrNgKQASADQQFHDQELIAIQFiACEIYDCyAAKAKUAyICIAIoAmBBAWo2AmAgASgCECEDIAEgAjYCECAEIAM2AhAgBEEQahAVGiAAKAKYAyICIAIoAmBBAWo2AmAgASgCFCEDIAEgAjYCFCAEIAM2AhggBEEYahAVGiABIAAoApwDNgIYIAAoAgwiACAALQAcQSByOgAcCyAEQSBqJAALLgEBfwN/IAAoAhwiAkUEQCAAIAFGDwsgAiABELwBBH9BAQUgACgCICEADAELCws2ACABBEAgACABKAIAEL0BIAAgASgCBBC9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RP///////+9/IAOZRAAAAAAAAPB/YxuaOQNwIAFBMGoiCiAGIAFB8ABqIgsQ1wEgASsDMCEEIAErAzghBSAHIAIoAgAiAkEwahDVASAIIAJByABqENUBIAEgASsDYDkDGCABIAErA1iaOQMQIAEgASsDSDkDCCABIAErA0CaOQMAIAYgCSABENYBIAFEAQAAAAAAAABEAAAAAAAA8D8gASgCaCABKAJQaxDhAiIDIANEAAAAAAAAAABhGzkDeCABIANE////////738gA5lEAAAAAAAA8H9jG5o5A3AgCiAGIAsQ1wEgASsDMCEDIAAgASsDODkDGCAAIAU5AxAgACADmjkDCCAAIASaOQMAIAFBgAFqJAALpgMBBH8jAEEQayIGJAAgACgCACEIIAEoAgAiACADKAIAIgcQFCIFRQRAIABBMGogB0EwahAUIQULQQEhAAJAAkACQCAFQQFqDgIAAgELIAIoAgAiACADKAIAIgcQFCIFRQRAIABBMGogB0EwahAUIQULQQAhAAJAAkAgBUEBag4CAwABC0EBIQAMAgsgAigCACIAIAQoAgAiBxAUIgVFBEAgAEEwaiAHQTBqEBQhBQtBASEAAkACQCAFQQFqDgIAAwELIAYgASACIAMgBBDTASAGLQAAQQBHIQAMAgsgBiABIAIgAyAEENQBIAYtAABBAEchAAwBCyAEKAIAIgAgASgCACIHEBQiBUUEQCAAQTBqIAdBMGoQFCEFC0EAIQACQAJAIAVBAWoOAgIAAQtBASEADAELIAQoAgAiACACKAIAIgcQFCIFRQRAIABBMGogB0EwahAUIQULQQEhAAJAAkAgBUEBag4CAAIBCyAGIAMgBCABIAIQ0wEgBi0AAEEARyEADAELIAYgAyAEIAEgAhDUASAGLQAAQQBHIQALIAZBEGokACAAC+EDAQJ/IwBBIGsiBCQAIARBAzYCGCAEIAI2AhQgBCABNgIQQegAEJ0GQQBB4AAQ3gIhAkEEEJ0GIQMgAkIANwMQIAIgAzYCACACIANBBGo2AgggA0EANgEAIAJBADYCICACQgA3AxggAiADNgIEQQQQnQYhAyACQgA3AyggAiADNgIYIAIgA0EEajYCICADQQE2AQAgAkEANgI4IAJCADcDMCACIANBAmo2AhxBBBCdBiEDIAJBQGtCADcDACACIAM2AjAgAiADQQRqNgI4IANBADYBACACQQA2AlAgAkIANwNIIAIgAzYCNEEEEJ0GIQMgAkIANwNYIAIgAzYCSCACIANBBGo2AlAgA0EBNgEAIAJBATYCYCACIANBAmo2AkwgBCACNgIcIARBHGohAgJAAkACQAJAIARBEGoQ2AFBAWsOAgECAAsgAEEAOgAADAILIAQoAhhBA0YEQCAEQRBqENgBGgsgBCAEKAIcIgE2AgggASABKAJgQQFqNgJgIAAgATYCCCABIAEoAmBBAWo2AmAgAEEBOgAAIABBADYCBCAEQQhqEBUaDAELIAAgASgCACIBNgIIIAEgASgCkAFBAWo2ApABIABBAToAACAAQQE2AgQLIAIQFRogBEEgaiQAC6EEAQR/IwBBEGsiBCQAAkAgACgCACICIAEoAgAiA0YEQCAAKAIEIQMgACABKAIENgIEIAEgAzYCBCACIAJBH3VGBEAgACABKAIINgIIDAILIAAoAgghAiAAIAEoAgg2AgggASACNgIIIAAoAgwhAiAAIAEoAgw2AgwgASACNgIMIAAgASgCEDYCEAwBCyAEIAA2AgggBCADQR91IgUgA3M2AgwgAyAFRgRAIABBBGohAwJAIAIgAkEfdUYEQCADEBUaDAELIABBDGoQFRogAEEIahAVGiAAKAIEIgAoApABQQFHBEAgACAAKAKQASIAQQFrNgKQASAAQQFHDQELIAMoAgAQFiADKAIAEIYDCyAEKAIIIgAgASgCBCICNgIEIAIgAigCYEEBajYCYCAAIAEoAgg2AgggACAEKAIMNgIADAELIAQoAggiAEEEaiECAkAgACgCACIDQR91IANGBEAgAhAVGgwBCyAAQQxqEBUaIABBCGoQFRogACgCBCIAKAKQAUEBRwRAIAAgACgCkAEiAEEBazYCkAEgAEEBRw0BCyACKAIAEBYgAigCABCGAwsgBCgCCCIAIAEoAgQiAjYCBCACIAIoApABQQFqNgKQASAAIAEoAggiAjYCCCACIAIoAmBBAWo2AmAgACABKAIMIgI2AgwgAiACKAJgQQFqNgJgIAAgASgCEDYCECAEKAIIIAQoAgw2AgALIARBEGokAAupAQEBfyMAQRBrIgQkACAAIAEoAgAiATYCACABIAEoApABQQFqNgKQASAAIAIoAgAiATYCBCABIAEoAmBBAWo2AmAg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SAsgAkHgAGokAAuyCwEIfwJAAkACQCAAKAIMIgcoAhQiBCgCCCgCACIBKAIMIgJFBEAgASECA0AgAigCCCIFRQRAIABB4ABqIQZBACEFDAQLIAIgBSgCDEYhAyAFIQIgAw0ACwwBCwNAIAIiBSgCECICDQALCyAFIABB4ABqIgZGDQELIAdBEGohCANAIAQhAgJAIAQgCEYNACAFKAIAIQMDQCACKAIIIANGDQEgAigCBCICIAhHDQALDAILIAIgCEYNAQJAIAUiAygCDCICBEADQCACIgUoAhAiAg0ADAILAAsDQCADKAIIIgVFBEBBACEFDAILIAMgBSgCDEYhAiAFIQMgAg0ACwsgBSAGRw0ACyAGIQULAkACQCAAKAJUIgAgBiAAGyICIAFGBEAgB0EQaiEGIAEgBUYNAQNAIAQgASgCADYCCAJAIAEiAygCDCICBEADQCACIgEoAhAiAg0ADAILAAsDQCADKAIIIgFFBEBBACEBDAILIAMgASgCDEYhACABIQMgAA0ACwsgBCgCBCEEIAEgBUcNAAsMAQsCQAJAAkACQCABKAIQIgAEQANAIAAiAygCDCIADQAMAgsACwNAIAEoAggiA0UEQEEAIQMMAwsgASADKAIQRiEAIAMhASAADQALCyACIANGDQELIAdBEGohBgNAAkACQAJAIAYgBCIBRg0AIAMoAgAhAANAIAEoAgggAEYNASABKAIEIgEgBkcNAAsMAQsgASAGRw0BCwJAIAMoAgwiAgRAA0AgAiIBKAIQIgINAAwCCwALA0AgAygCCCIBRQRAQQAhAQwCCyADIAEoAgxGIQAgASEDIAANAAsLIAEgBUYNAwNAIAQgASgCADYCCAJAIAEiAygCDCICBEADQCACIgEoAhAiAg0ADAILAAsDQCADKAIIIgFFBEBBACEBDAILIAMgASgCDEYhACABIQMgAA0ACwsgBCgCBCEEIAEgBUcNAAsMAwsCQCADIgAoAhAiAQRAA0AgASIDKAIMIgENAAwCCwALA0AgACgCCCIDRQRAQQAhAwwCCyAAIAMoAhBGIQEgAyEAIAENAAsLIAIgA0cNAAsLAkACQAJAAkAgB0EQaiIGIAQiAUYNACACKAIAIQADQCABKAIIIABGDQEgASgCBCIBIAZHDQALDAELIAEgBkcNAQsCQCACKAIMIgMEQANAIAMi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AkYNAEEBIQUMAgsgBCgCBCIEIAJBEGpHDQALCwJAIAIoAghFDQAgAigCBCIAKAIAIgEgAigCACIDKAIENgIEIAMoAgQgATYCACACQQA2AgggACACRg0AA0AgACgCBCEBIAAQhgMgASIAIAJHDQALCwJAIAIoAhhFDQAgAigCFCIAKAIAIgEgAigCECIDKAIENgIEIAMoAgQgATYCACACQQA2AhggACACQRBqRg0AA0AgACgCBCEBIAAQhgMgASIAIAJBEGpHDQALCyACQSBqJAAgBQsyAQJ/IAAoAiwiAkUEQEEBDwsDQCACEJsCIAFqIQEgACgCMCIAKAIsIgINAAsgAUEBagtfAQF/A0AgACgCLCICBEAgAiABEJwCIQEgACgCMCEADAELC0EMEJ0GIgIgATYCBCACIAA2AgggAiABKAIAIgA2AgAgACACNgIEIAEgAjYCACABIAEoAghBAWo2AgggAQubAQIDfwF+IwBBMGsiAyQAAkAgASgCLCIERQRAIAMgATYCKCACIANBKGoQuAEgAikCACEGDAELIAMgAikCACIGNwMQIAMgBjcDICADQShqIgUgBCADQRBqEJ0CIAEoAjAhASADIAMpAygiBjcDCCADIAY3AxggBSABIANBCGoQnQIgAiADKQMoIgY3AgALIAAgBjcCACADQTBqJAALIAAgAQRAIAAgASgCABCeAiAAIAEoAgQQngIgARCGAwsL+gICA38BfiMAQSBrIgQkAAJAIAEoAgAiAiAAQeAAakdBACACGw0AIAAoAgwiAiABKAIERg0AIAQgACgCBCgCADYCCCABQQxqIAIgAEGcA2ogAEG8A2oQkwEgASkCHCEFIAAgASgCJDYCtAMgACAFNwKsAyABKQIcIQUgACABKAIkNgLUAyAAIAU3AswDIAAoArwDIgMgAygCkAFBAWo2ApABIAEoAgwhAiABIAM2AgwCQCACKAKQAUEBRwRAIAIgAigCkAEiA0EBazYCkAEgA0EBRw0BCyACEBYgAhCGAwsgACgCwAMiAiACKAJgQQFqNgJgIAEoAhAhAyABIAI2AhAgBCADNgIQIARBEGoQFRogACgCxAMiAiACKAJgQQFqNgJgIAEoAhQhAyABIAI2AhQgBCADNgIYIARBGGoQFRogASAAKALIAzYCGCABIAApANEDNwAhIAEgACkCzAM3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ICIgASsDGKGiIAErAxCgOQM4CyABKAJ4IgENAAsgBSACNgLUBSACIgYLIQEgBSgCyAUiAyAFKALEBSITSARAIAYhAyMAQUBqIgckACAFQdgFaiIEKAIAIgEEQANAIAEoAhghAiABEIYDIAQgAjYCACACIgENAAsLIAdBADYCPAJAAkACQAJAIANFDQADQAJAAkAgAygCZEEBRg0AIAMoAkwNACADKAJQRQ0BCwJAAkAgBygCPCICRQRAIAdBPGohCAwBCyADQUBrIQogAysDOCIdIAMrAzAiH6EhIUGIvwIrAwAhIyAHQTxqIQgDQAJAAkACQAJAAkACQCAdIAIrAxAiHGYNACAKKwMAIAIrAxhhDQAgHCACKwMIIiChIiUgIaEiHJkgI2VFDQELIAhBKBCFAyIBNgIAIAFFDQEgASAdOQMQIAEgHzkDCCABIAM2AgAMBwsgHyAgoSAcoyImICSiIRwgAigCACELIAQiASgCACICRQ0CIAIrAxAgHGQEfyABBQNAIAIiASgCGCICRQRAIAFBGGohAQwFCyACKwMQIBxkRQ0ACyABQRhqC0EgEIUDIgE2AgAgAUUNAQwDCyAHQacUNgIwQbiRASgCACAHQTBqEOACDAoLIAdBwhQ2AiBBuJEBKAIAIAdBIGoQ4AIMCQsgAUEgEIUDIgE2AgBBACECIAENACAHQcIUNgIQQbiRASgCACAHQRBqEOACDAgLIAEgAjYCGCABICYgJaIgIKA5AwggASADNgIEIAEgCzYCACABIBw5AxAgCCgCACIBQSBqIQggASgCICICDQALCyAIQSgQhQMiATYCACABRQ0EIAEgAzYCACABIAMrAzA5AwggASADKwM4OQMQIANBQGshCkEAIQILIAorAwAhHCABIAI2AiAgASAcOQMYCyADKAJ4IgMNAAsgBygCPCICRQ0AA0AgAigCICEBIAIQhgMgASICDQALCyAHQUBrJAAMAgsgB0GnFDYCAEG4kQEoAgAgBxDgAgtBABADAAsgBSgC2AUiCgRAA0AgCigCBCEDAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJ/AkACQAJAAkAgCigCACIHKAJMIhlFBEAgBygCUEUNByADKAJMIgINASADKAJQRQ0HIANB7ABq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lRY2AlBBuJEBKAIAIA1B0ABqEOACDAELIA1B4ABqJAAgCg8LQQAQAwALQgEBfwNAIAIoAggiAwRAIAAgASADELoCCyABIAAoAgAiA0EDdGogAisDADkDACAAIANBAWo2AgAgAigCDCICDQALCzoBAX8CQCAAKAIAIgFFDQAgAUEIahC7AiAAKAIAQQxqELsCIAAoAgAiAUUNACABEIYDIABBADYCAAsL7wICCX8GfCMAQRBrIgMkAAJAAkAgACgCACIFQQV0IgFFBEAMAQsgARCFAyIERQ0BCyAFQQBKBEAgACgCCCEGA0AgBCACQQV0aiIBQv////////93NwMYIAFC/////////3c3AxAgAUL/////////9/8ANwMIIAFC//////////f/ADcDACAGIAJBA3RqIgAoAgAiB0EASgRAIAAoAgQhCEEAIQBE////////738hDET////////v/yENRP///////+//IQ5E////////738hDwNAIA8gCCAAQQR0aiIJKwMAIgpkBEAgASAKOQMAIAohDwsgDCAJKwMIIgtkBEAgASALOQMIIAshDAsgCiAOZARAIAEgCjkDECAKIQ4LIAsgDWQEQCABIAs5AxggCyENCyAAQQFqIgAgB0cNAAsLIAJBAWoiAiAFRw0ACwsgA0EQaiQAIAQPCyADQZkVNgIAQbiRASgCACADEOACQQAQAwALsQEBA38jAEEgayIEJAADQCAAIgUoAgAiBkEQaiEAIAYNAAsgBUEYEIUDIgA2AgACQCAABEAgAEEBNgIAIABCADcCDCAAQRgQhQMiADYCCCAARQ0BIABBADYCECAAIAM5AwggACACOQMAIAEgBSgCADYCbCAEQSBqJAAPCyAEQakWNgIAQbiRASgCACAEEOACQQAQAwALIARBrxU2AhBBuJEBKAIAIARBEGoQ4AJBABADAAsMACAABEAgABCGAwsLBwBBARCdBgvEjwEDFn8BfAF+IwBBoAJrIg8kACAPQYQtNgKkASAPQbArNgKgASAPQawBaiIEQQA2AghBGBCdBiIAQgA3AgQgAEGECDsBDCAAQZQ6NgIAIAQgADYCBCAAIAA2AhQgACAANgIQIARBADYCFEEkEJ0GIgBCADcCBCAAQaA+NgIAIABCADcCFCAAQgA3AgwgBCAANgIQIAAgADYCICAAIAA2Ahwg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IAYoAiggChDdASAGKAIoIgAoAlQiASAAQeAAaiIAIAEbIgogAEcNAAsLIAYgBigCACgCDBECACAGKALkAiIAKAIoEF8gACgCKEEAOgB9IAYQYBogEBBhGiAGQZAFaiQADAELIARBADYCCCAEIAQ2AgQgBCAENgIAIBQhACMAQcAGayITJAAgAygCeCEFIBNBkARqIhFBADYCBCARQgA3AjQgESADNgIwIBEgAzYCKCARQQA2AiQgESARQRxqIgI2AiAgEUEANgIYIBFCADcCECARIANBBGoiATYCDCARQcz1ADYCACARIAE2AiwgEUHw9QA2AgggEUIANwI8IBEgAjYCHCARQQwQnQYiAjYCOCARQUBrIAJBDGoiATYCACACQQA2AgggAkIANwIAIBFBADYCeCARQQA2AlwgEUIANwJUIBFCgICAgBA3AkggESABNgI8IBFCgISAgPA/NwJwIBFBgPgAEJ0GNgJkQQAhCQNAIAlBFGwiAiARKAJkaiIBQgA3AgAgAUEANgIQIAFCADcCCCARKAJkIAlBAXJBFGxqIgFCADcCACABQQA2AhAgAUIANwIIIAIgESgCZGoiAUEANgI4IAFCADcCMCABQgA3AiggAiARKAJkaiIBQQA2AkwgAUIANwJEIAFCADcCPCACIBEoAmRqIgFBADYCYCABQgA3AlggAUIANwJQIAIgESgCZGoiAUEANgJ0IAFCADcCbCABQgA3AmQgCUEGaiIJQYAGRw0ACyARIBEoAmQiCkGA0ABqNgJsIBEgCkGA+ABqNgJoIBFB0ABqIQcgESgCSCECQQAhCQNAIAogCUEUbGoiASACNgIAIAEgBzYCECAKIAlBAXJBFGxqIgEgAjYCACABIAc2AhAgCiAJQQJyQRRsaiIBIAI2AgAgASAHNgIQIAogCUEDckEUbGoiASACNgIAIAEgBzYCECAJQQRqIglBgARHDQALIAogESgCTDYCACARQQA2AlwgEUIANwJUIBFBlAFqEGQgEUEANgLsASARQgA3AuQBIBFB3OIANgIAIBFB8AFqEBEaIBFCADcAhQIgEUIANwKAAiARQZACahARGiARQgA3AKUCIBFCADcCoAIgEyAFNgKIBCATQQA2AoAEIBMgE0H4A2oiBjYC/AMgEyAGNgL4AyATQQA2AvADIBMgE0HoA2oiEDYC7AMgEyAQ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IQAgAUEIahAVGiABEIYDIAAiASAERw0ACwsgAygCcCIBIAtHBEADQCALKAIAKAIIIgAgACgCACgCHBECACALKAIAIgsgAUcNAAsLIARBEGokACAPKAKwASIEKAIQIgAgBEcEQCAEIQIDQCAAKAIQIQEgAC0ABEEBcQRAIA8gFjYCGCAPIBY2AgggDyAENgIUIA8gADYCECAPIA8pAxA3AwAjAEEgayIOJAAgDygCACINKAIEQX5xIgwoAgghBSAPQQA2AjggDyAFNgI0IA8gBTYCMCAOIA8oAgg2AhggDiAPKQIANwMQIA9BoAFqIgsoAnAiByALQewAaiIKRwRAA0AgBygCCCICKAIAKALcASEAIA4gDigCGDYCCCAOIA4pAxA3AwAgAiAOIAARAAAgBygCBCIHIApHDQALCyAMKAIMIgIoAgAiACACKAIENgIEIAIoAgQgADYCACAFIAUoAihBAWs2AiggAhCGAyAMKAIEIgAgDCgCADYCACAMKAIAIAA2AgQgCyALKAJQQQFrNgJQQbDGAi0AAEUEQEH4xAJCADcCAEGwxgJBAToAAEGkxQJCIDcCAEGcxQJClICAgIAENwIAQYDFAkIANwIAQYjFAkIANwIAQZDFAkIANwIAQZjFAkEANgIACyAMQZDFAigCADYCAEGQxQIgDDYCACANKAIIEBUQhgMgDSgCFCIAIA0oAhA2AhAgDSgCECAANgIUIAsgCygCFEEBazYCFCANIA0oAgAoAgARAQAaQa3GAi0AAEUEQEHEwwJCADcCAEGtxgJBAToAAEHwwwJCIDcCAEHowwJCmICAgIAENwIAQczDAkIANwIAQdTDAkIANwIAQdzDAkIANwIAQeTDAkEANgIACyANQdzDAigCADYCAEHcwwIgDTYCACALKAJwIgIgCkcEQANAIAooAgAoAggiACAAKAIAKALgARECACAKKAIAIgogAkcNAAsLIA5BIGokACAPKAKwASECCyABIgAgAkcNAAsLIA8oArwBIgAoAhwiAiAARwRAA0AgAigCHCgCHCEQAn8gAigCFCIAQQFxRQRAIABBCGoMAQsCQCAAQX5xIgEoAhBBAkcEQCABIQAMAQsgAUEIaiEFA0AgBSgCACIAQQhqIQUgACgCEEECRg0ACyABIAA2AgggAUECNgIQIAIgAEEBcjYCFAsgAEEIagso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CxAAIAAoAgQgACgCAGtBBHULDQAgACgCACABQQR0agsMACAAIAAoAgA2AgQLJAEBfyAABEAgACgCACIBBEAgACABNgIEIAEQhgMLIAAQhgMLC9MBAQV/IAAoAgQiAiAAKAIIRwRAIAIgATYCACAAIAJBBGo2AgQPCwJAIAIgACgCACIFayICQQJ1IgZBAWoiA0GAgICABEkEQCACQQF1IgQgAyADIARJG0H/////AyACQfz///8HSRsiAwR/IANBgICAgARPDQIgA0ECdBCdBgVBAAsiBCAGQQJ0aiIGIAE2AgAgAkEASgRAIAQgBSACENwCGgsgACAEIANBAnRqNgIIIAAgBkEEajYCBCAAIAQ2AgAgBQRAIAUQhgMLDwsQFwALEBgACxAAIAAoAgQgACgCAGtBAnULEAAgACgCACABQQJ0aigCAAukAQEDfwJAIAAoAgQiAiAAKAIIRwRAIAJBADYCCCACQgA3AgAgASgCBCIDIAEoAgAiBEcEQCADIARrIgRBAEgNAiACIAQQnQYiAzYCACACIAM2AgQgAiADIARBBHVBBHRqNgIIIAIgASgCBCABKAIAIgRrIgFBAEoEfyADIAQgARDcAiABagUgAws2AgQLIAAgAkEMajYCBA8LIAAgARAeDwsQFwALEAAgACgCBCAAKAIAa0EMbQsNACAAKAIAIAFBDGxqC0cBBH8gACgCBCIBIAAoAgAiAkcEQANAIAFBDGsiBCgCACIDBEAgAUEIayADNgIAIAMQhgMLIAQiASACRw0ACwsgACACNgIEC2YBBH8gAARAIAAoAgAiAgRAIAIhASACIAAoAgQiA0cEQANAIANBDGsiASgCACIEBEAgA0EIayAENgIAIAQQhgMLIAEiAyACRw0ACyAAKAIAIQELIAAgAjYCBCABEIYDCyAAEIYDCwuABAEDfyACQYAETwRAIAAgASACEAQgAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiBEHAAEkNACACIARBQGoiBUsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIgIAIgASgCJDYCJCACIAEoAig2AiggAiABKAIsNgIsIAIgASgCMDYCMCACIAEoAjQ2AjQgAiABKAI4NgI4IAIgASgCPDYCPCABQUBrIQEgAkFAayICIAVNDQALCyACIARPDQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAESQ0ACwwBCyADQQRJBEAgACECDAELIAAgA0EEayIESwRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAiABLQABOgABIAIgAS0AAjoAAiACIAEtAAM6AAMgAUEEaiEBIAJBBGoiAiAETQ0ACwsgAiADSQRAA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0cNAAsLIAAL6QIBAn8CQCAAIAFGDQAgASAAIAJqIgRrQQAgAkEBdGtNBEAgACABIAIQ3AIPCyAAIAFzQQNxIQMCQAJAIAAgAUkEQCADBEAgACEDDAMLIABBA3FFBEAgACEDDAILIAAhAwNAIAJFDQQgAyABLQAAOgAAIAFBAWohASACQQFrIQIgA0EBaiIDQQNxDQALDAELAkAgAw0AIARBA3EEQANAIAJFDQUgACACQQFrIgJqIgMgASACai0AADoAACADQQNxDQALCyACQQNNDQADQCAAIAJBBGsiAmogASACaigCADYCACACQQNLDQALCyACRQ0CA0AgACACQQFrIgJqIAEgAmotAAA6AAAgAg0ACwwCCyACQQNNDQADQCADIAEoAgA2AgAgAUEEaiEBIANBBGohAyACQQRrIgJBA0sNAAsLIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLIAAL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALBABBAAsqAQF/IwBBEGsiAiQAIAIgATYCDCAAQZArIAFBAEEAEO8CGiACQRBqJAALCQAgACABEOICC6gBAAJAIAFBgAhOBEAgAEQAAAAAAADgf6IhACABQf8PSQRAIAFB/wdrIQEMAgsgAEQAAAAAAADgf6IhACABQf0XIAFB/RdIG0H+D2shAQwBCyABQYF4Sg0AIABEAAAAAAAAYAOiIQAgAUG4cEsEQCABQckHaiEBDAELIABEAAAAAAAAYAOiIQAgAUHwaCABQfBoShtBkg9qIQELIAAgAUH/B2qtQjSGv6ILCQAgACgCPBAFC/YCAQd/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBUECIQcCfwJAAkACQCAAKAI8IANBEGoiAUECIANBDGoQBiIEBH9B2MYCIAQ2AgBBfwVBAAsEQCABIQQMAQsDQCAFIAMoAgwiBkYNAiAGQQBIBEAgASEEDAQLIAEgBiABKAIEIghLIglBA3RqIgQgBiAIQQAgCRtrIgggBCgCAGo2AgAgAUEMQQQgCRtqIgEgASgCACAIazYCACAFIAZrIQUgACgCPCAEIgEgByAJayIHIANBDGoQBiIGBH9B2MYCIAY2AgBBfwVBAAtFDQALCyAFQX9HDQELIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwBCyAAQQA2AhwgAEIANwMQIAAgACgCAEEgcjYCAEEAIAdBAkYNABogAiAEKAIEawshACADQSBqJAAgAAtWAQF/IAAoAjwhAyMAQRBrIgAkACADIAGnIAFCIIinIAJB/wFxIABBCGoQDSICBH9B2MYCIAI2AgBBfwVBAAshAiAAKQMIIQEgAEEQaiQAQn8gASACGwtpAQN/AkAgACIBQQNxBEADQCABLQAARQ0CIAFBAWoiAUEDcQ0ACwsDQCABIgJBBGohASACKAIAIgNBf3MgA0GBgoQIa3FBgIGChHhxRQ0ACwNAIAIiAUEBaiECIAEtAAANAAsLIAEgAGsLBABBAQsEAEEAC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC+YBAQJ/IAJBAEchAwJAAkACQCAAQQNxRQ0AIAJFDQAgAUH/AXEhBANAIAAtAAAgBEYNAiACQQFrIgJBAEchAyAAQQFqIgBBA3FFDQEgAg0ACwsgA0UNAQsCQAJAIAAtAAAgAUH/AXFGDQAgAkEESQ0AIAFB/wFxQYGChAhsIQMDQCAAKAIAIANzIgRBf3MgBEGBgoQIa3FBgIGChHhxDQIgAEEEaiEAIAJBBGsiAkEDSw0ACwsgAkUNAQsgAUH/AXEhAQNAIAEgAC0AAEYEQCAADwsgAEEBaiEAIAJBAWsiAg0ACwtBAAsGAEHYxgILfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQ7AIhACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwvCAQEDfwJAIAEgAigCECIDBH8gAwUgAhDpAg0BIAIoAhALIAIoAhQiBWtLBEAgAiAAIAEgAigCJBEEAA8LAkAgAigCUEEASARAQQAhAwwBCyABIQQDQCAEIgNFBEBBACEDDAILIAAgA0EBayIEai0AAEEKRw0ACyACIAAgAyACKAIkEQQAIgQgA0kNASAAIANqIQAgASADayEBIAIoAhQhBQsgBSAAIAEQ3AIaIAIgAigCFCABajYCFCABIANqIQQLIAQLQgEBfyABIAJsIQQgBAJ/IAMoAkxBAEgEQCAAIAQgAxDtAgwBCyAAIAQgAxDtAgsiAEYEQCACQQAgARsPCyAAIAFuC9UCAQR/IwBB0AFrIgUkACAFIAI2AswBIAVBoAFqIgJBAEEoEN4CGiAFIAUoAswBNgLIAQJAQQAgASAFQcgBaiAFQdAAaiACIAMgBBDwAkEASARAQX8hBAwBCyAAKAJMQQBOIQYgACgCACEHIAAoAkhBAEwEQCAAIAdBX3E2AgALAn8CQAJAIAAoAjBFBEAgAEHQADYCMCAAQQA2AhwgAEIANwMQIAAoAiwhCCAAIAU2AiwMAQsgACgCEA0BC0F/IAAQ6QINARoLIAAgASAFQcgBaiAFQdAAaiAFQaABaiADIAQQ8AILIQIgCARAIABBAEEAIAAoAiQRBAAaIABBADYCMCAAIAg2AiwgAEEANgIcIAAoAhQhASAAQgA3AxAgAkF/IAEbIQILIAAgACgCACIAIAdBIHFyNgIAQX8gAiAAQSBxGyEEIAZFDQALIAVB0AFqJAAgBAuSEwIRfwF+IwBB0ABrIgckACAHIAE2AkwgB0E3aiEWIAdBOGohEkEAIQECQAJAAkACQANAIAFB/////wcgDWtKDQEgASANaiENIAcoAkwiDCEBAkACQAJAIAwtAAAiCgRAA0ACQAJAIApB/wFxIghFBEAgASEKDAELIAhBJUcNASABIQoDQCABLQABQSVHDQEgByABQQJqIgg2AkwgCkEBaiEKIAEtAAIhCyAIIQEgC0ElRg0ACwsgCiAMayIBQf////8HIA1rIhdKDQcgAARAIAAgDCABEPECCyABDQZBfyEQQQEhCCAHKAJMIQECQCABLAABQTBrQQpPDQAgAS0AAkEkRw0AIAEsAAFBMGshEEEBIRRBAyEICyAHIAEgCGoiATYCTEEAIQ4CQCABLAAAIhNBIGsiC0EfSwRAIAEhCAwBCyABIQhBASALdCIJQYnRBHFFDQADQCAHIAFBAWoiCDYCTCAJIA5yIQ4gASwAASITQSBrIgtBIE8NASAIIQFBASALdCIJQYnRBHENAAsLAkAgE0EqRgRAIAcCfwJAIAgsAAFBMGtBCk8NACAHKAJMIgEtAAJBJEcNACABLAABQQJ0IARqQcABa0EKNgIAIAEsAAFBA3QgA2pBgANrKAIAIQ9BASEUIAFBA2oMAQsgFA0GQQAhFEEAIQ8gAARAIAIgAigCACIBQQRqNgIAIAEoAgAhDwsgBygCTEEBagsiATYCTCAPQQBODQFBACAPayEPIA5BgMAAciEODAELIAdBzABqEPICIg9BAEgNCCAHKAJMIQELQQAhCEF/IQkCf0EAIAEtAABBLkcNABogAS0AAUEqRgRAIAcCfwJAIAEsAAJBMGtBCk8NACAHKAJMIgEtAANBJEcNACABLAACQQJ0IARqQcABa0EKNgIAIAEsAAJBA3QgA2pBgANrKAIAIQkgAUEEagwBCyAUDQYgAAR/IAIgAigCACIBQQRqNgIAIAEoAgAFQQALIQkgBygCTEECagsiATYCTCAJQX9zQR92DAELIAcgAUEBajYCTCAHQcwAahDyAiEJIAcoAkwhAUEBCyEVA0AgCCERQRwhCiABLAAAQfsAa0FGSQ0JIAcgAUEBaiITNgJMIAEsAAAhCCATIQEgCCARQTpsakH/kAFqLQAAIghBAWtBCEkNAAsCQAJAIAhBG0cEQCAIRQ0LIBBBAE4EQCAEIBBBAnRqIAg2AgAgByADIBBBA3RqKQMANwNADAILIABFDQggB0FAayAIIAIgBhDzAiAHKAJMIRMMAgsgEEEATg0KC0EAIQEgAEUNBwsgDkH//3txIgsgDiAOQYDAAHEbIQhBACEOQegPIRAgEiEKAkACQAJAAn8CQAJAAkACQAJ/AkACQAJAAkACQAJAAkAgE0EBaywAACIBQV9xIAEgAUEPcUEDRhsgASARGyIBQdgAaw4hBBQUFBQUFBQUDhQPBg4ODhQGFBQUFAIFAxQUCRQBFBQEAAsCQCABQcEAaw4HDhQLFA4ODgALIAFB0wBGDQkMEwsgBykDQCEYQegPDAULQQAhAQJAAkACQAJAAkACQAJAIBFB/wFxDggAAQIDBBoFBhoLIAcoAkAgDTYCAAwZCyAHKAJAIA02AgAMGAsgBygCQCANrDcDAAwXCyAHKAJAIA07AQAMFgsgBygCQCANOgAADBULIAcoAkAgDTYCAAwUCyAHKAJAIA2sNwMADBMLIAlBCCAJQQhLGyEJIAhBCHIhCEH4ACEBCyASIQsgAUEgcSERIAcpA0AiGFBFBEADQCALQQFrIgsgGKdBD3FBkJUBai0AACARcjoAACAYQg9WIQwgGEIEiCEYIAwNAAsLIAshDCAHKQNAUA0DIAhBCHFFDQMgAUEEdkHoD2ohEEECIQ4MAwsgEiEBIAcpA0AiGFBFBEADQCABQQFrIgEgGKdBB3FBMHI6AAAgGEIHViELIBhCA4ghGCALDQALCyABIQwgCEEIcUUNAiAJIBIgDGsiAUEBaiABIAlIGyEJDAILIAcpA0AiGEIAUwRAIAdCACAYfSIYNwNAQQEhDkHoDwwBCyAIQYAQcQRAQQEhDkHpDwwBC0HqD0HoDyAIQQFxIg4bCyEQIBggEhD0AiEMCyAVQQAgCUEASBsNDiAIQf//e3EgCCAVGyEIAkAgBykDQCIYQgBSDQAgCQ0AIBIiDCEKQQAhCQwMCyAJIBhQIBIgDGtqIgEgASAJSBshCQwLCyAHKAJAIgFBuiUgARsiDCIKQQAgCUH/////ByAJQf////8HSRsiCBDqAiIBIAprIAggARsiASAMaiEKIAlBAE4EQCALIQggASEJDAsLIAshCCABIQkgCi0AAA0NDAoLIAkEQCAHKAJADAILQQAhASAAQSAgD0EAIAgQ9QIMAgsgB0EANgIMIAcgBykDQD4CCCAHIAdBCGoiATYCQEF/IQkgAQshCkEAIQECQANAIAooAgAiC0UNAQJAIAdBBGogCxCEAyIMQQBIIgsNACAMIAkgAWtLDQAgCkEEaiEKIAkgASAMaiIBSw0BDAILCyALDQ0LQT0hCiABQQBIDQsgAEEgIA8gASAIEPUCIAFFBEBBACEBDAELQQAhCSAHKAJAIQoDQCAKKAIAIgtFDQEgB0EEaiALEIQDIgsgCWoiCSABSw0BIAAgB0EEaiALEPECIApBBGohCiABIAlLDQALCyAAQSAgDyABIAhBgMAAcxD1AiAPIAEgASAPSBshAQwICyAVQQAgCUEASBsNCEE9IQogACAHKwNAIA8gCSAIIAEgBREcACIBQQBODQcMCQsgByAHKQNAPAA3QQEhCSAWIQwgCyEIDAQLIAcgAUEBaiIINgJMIAEtAAEhCiAIIQEMAAsACyAADQcgFEUNAkEBIQEDQCAEIAFBAnRqKAIAIgAEQCADIAFBA3RqIAAgAiAGEPMCQQEhDSABQQFqIgFBCkcNAQwJCwtBASENIAFBCk8NBwNAIAQgAUECdGooAgANASABQQFqIgFBCkcNAAsMBwtBHCEKDAQLIAkgCiAMayIRIAkgEUobIgtB/////wcgDmtKDQJBPSEKIA8gCyAOaiIJIAkgD0gbIgEgF0oNAyAAQSAgASAJIAgQ9QIgACAQIA4Q8QIgAEEwIAEgCSAIQYCABHMQ9QIgAEEwIAsgEUEAEPUCIAAgDCAREPECIABBICABIAkgCEGAwABzEPUCDAELC0EAIQ0MAwtBPSEKC0HYxgIgCjYCAAtBfyENCyAHQdAAaiQAIA0LGAAgAC0AAEEgcUUEQCABIAIgABDtAhoLC3IBA38gACgCACwAAEEwa0EKTwRAQQAPCwNAIAAoAgAhA0F/IQEgAkHMmbPmAE0EQEF/IAMsAABBMGsiASACQQpsIgJqIAFB/////wcgAmtKGyEBCyAAIANBAWo2AgAgASECIAMsAAFBMGtBCkkNAAsgAgvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAAALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC4MBAgN/AX4CQCAAQoCAgIAQVARAIAAhBQwBCwNAIAFBAWsiASAAIABCCoAiBUIKfn2nQTByOgAAIABC/////58BViECIAUhACACDQALCyAFpyICBEADQCABQQFrIgEgAiACQQpuIgNBCmxrQTByOgAAIAJBCUshBCADIQIgBA0ACwsgAQtyAQF/IwBBgAJrIgUkAAJAIAIgA0wNACAEQYDABHENACAFIAFB/wFxIAIgA2siA0GAAiADQYACSSIBGxDeAhogAUUEQANAIAAgBUGAAhDxAiADQYACayIDQf8BSw0ACwsgACAFIAMQ8QILIAVBgAJqJAALxxgDEn8BfAJ+IwBBsARrIgskACALQQA2AiwCQCABvSIZQgBTBEBBASEQQfIPIRMgAZoiAb0hGQwBCyAEQYAQcQRAQQEhEEH1DyETDAELQfgPQfMPIARBAXEiEBshEyAQRSEVCwJAIBlCgICAgICAgPj/AINCgICAgICAgPj/AFEEQCAAQSAgAiAQQQNqIgMgBEH//3txEPUCIAAgEyAQEPECIABBzRZBnR8gBUEgcSIFG0GaHEHdHyAFGyABIAFiG0EDEPECIABBICAC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BEEQaiABIAJCAEKAgICAgICA//8AEJMDIANB/f8CIANB/f8CSBtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORCTAyAEKQNIIQIgBCkDQCEBIANB9IB+SwRAIANBjf8AaiEDDAELIARBMGogASACQgBCgICAgICAgDkQkwMgA0HogX0gA0HogX1KG0Ga/gFqIQMgBCkDOCECIAQpAzAhAQsgBCABIAJCACADQf//AGqtQjCGEJMDIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAvXBgIEfwN+IwBBgAFrIgUkAAJAAkACQCADIARCAEIAEIwDRQ0AAn8gBEL///////8/gyEJAn8gBEIwiKdB//8BcSIGQf//AUcEQEEEIAYNARpBAkEDIAMgCYRQGwwCCyADIAmEUAsLIQcgAkIwiKciCEH//wFxIgZB//8BRg0AIAcNAQsgBUEQaiABIAIgAyAEEJMDIAUgBSkDECIBIAUpAxgiAiABIAIQjgMgBSkDCCECIAUpAwAhBAwBCyABIAJC////////P4MgBq1CMIaEIgogAyAEQv///////z+DIARCMIinQf//AXEiB61CMIaEIgkQjANBAEwEQCABIAogAyAJEIwDBEAgASEEDAILIAVB8ABqIAEgAkIAQgAQkwMgBSkDeCECIAUpA3AhBAwBCyAGBH4gAQUgBUHgAGogASAKQgBCgICAgICAwLvAABCTAyAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAEJMDIAUpA1giCUIwiKdB+ABrIQcgBSkDUCEDCyAJQv///////z+DQoCAgICAgMAAhCEJIApC////////P4NCgICAgICAwACEIQogBiAHSgRAA0ACfiAKIAl9IAMgBFatfSILQgBZBEAgCyAEIAN9IgSEUARAIAVBIGogASACQgBCABCTAyAFKQMoIQIgBSkDICEEDAULIAtCAYYgBEI/iIQMAQsgCkIBhiAEQj+IhAshCiAEQgGGIQQgBkEBayIGIAdKDQALIAchBgsCQCAKIAl9IAMgBFatfSIJQgBTBEAgCiEJDAELIAkgBCADfSIEhEIAUg0AIAVBMGogASACQgBCABCTAyAFKQM4IQIg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BEEddiECIARBAXQhBCADIAJBBHFqIgdBEGooAgAiAg0ACyAHIAA2AhAgACADNgIYCyAAIAA2AgwgACAANgIIDwsgAygCCCIBIAA2AgwgAyAANgIIIABBADYCGCAAIAM2AgwgACABNgIICwtSAQJ/QaTAAigCACIBIABBA2pBfHEiAmohAAJAIAJBACAAIAFNGw0AIAA/AEEQdEsEQCAAEAdFDQELQaTAAiAANgIAIAEPC0HYxgJBMDYCAEF/C8wJAgR+BH8jAEHwAGsiCiQAIARC////////////AIMhBQJAAkAgAVAiCSACQv///////////wCDIgZCgICAgICAwP//AH1CgICAgICAwICAf1QgBlAbRQRAIANCAFIgBUKAgICAgIDA//8AfSIIQoCAgICAgMCAgH9WIAhCgICAgICAwICAf1EbDQELIAkgBkKAgICAgIDA//8AVCAGQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQQgASEDDAILIANQIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEEDAILIAEgBkKAgICAgIDA//8AhYRQBEBCgICAgICA4P//ACACIAEgA4UgAiAEhUKAgICAgICAgIB/hYRQIgkbIQRCACABIAkbIQMMAgsgAyAFQoCAgICAgMD//wCFhFANASABIAaEUARAIAMgBYRCAFINAiABIAODIQMgAiAEgyEEDAILIAMgBYRQRQ0AIAEhAyACIQQMAQsgAyABIAEgA1QgBSAGViAFIAZRGyIMGyEFIAQgAiAMGyIIQv///////z+DIQYgAiAEIAwbIgdCMIinQf//AXEhCyAIQjCIp0H//wFxIglFBEAgCkHgAGogBSAGIAUgBiAGUCIJG3kgCUEGdK18pyIJQQ9rEIsDIAopA2ghBiAKKQNgIQVBECAJayEJCyABIAMgDBshAyAHQv///////z+DIQQgC0UEQCAKQdAAaiADIAQgAyAEIARQIgsbeSALQQZ0rXynIgtBD2sQiwNBECALayELIAopA1ghBCAKKQNQIQMLIARCA4YgA0I9iIRCgICAgICAgASEIQIgBkIDhiAFQj2IhCEEIANCA4YhASAHIAiFIQMCQCAJIAtGDQAgCSALayILQf8ASwRAQgAhAkIBIQEMAQsgCkFAayABIAJBgAEgC2sQiwMgCkEwaiABIAIgCxCSAyAKKQMwIAopA0AgCikDSIRCAFKthCEBIAopAzghAgsgBEKAgICAgICABIQhByAFQgOGIQYCQCADQgBTBEBCACEDQgAhBCABIAaFIAIgB4WEUA0CIAYgAX0hBSAHIAJ9IAEgBlatfSIEQv////////8DVg0BIApBIGogBSAEIAUgBCAEUCILG3kgC0EGdK18p0EMayILEIsDIAkgC2shCSAKKQMoIQQgCikDICEFDAELIAEgBnwiBSABVK0gAiAHfHwiBEKAgICAgICACINQDQAgBUIBgyAEQj+GIAVCAYiEhCEFIAlBAWohCSAEQgGIIQQLIAhCgICAgICAgICAf4MhASAJQf//AU4EQCABQoCAgICAgMD//wCEIQRCACEDDAELQQAhCwJAIAlBAEoEQCAJIQsMAQsgCkEQaiAFIAQgCUH/AGoQiwMgCiAFIARBASAJaxCSAyAKKQMAIAopAxAgCikDGIRCAFKthCEFIAopAwghBAsgBEI9hiAFQgOIhCICIAWnQQdxIglBBEutfCIDIAJUrSAEQgOIQv///////z+DIAutQjCGhCABhHwhBAJAIAlBBEYEQCAEIANCAYMiASADfCIDIAFUrXwhBAwBCyAJRQ0BCwsgACADNwMAIAAgBDcDCCAKQfAAaiQAC1ABAX4CQCADQcAAcQRAIAEgA0FAaq2GIQJCACEBDAELIANFDQAgAiADrSIEhiABQcAAIANrrYiEIQIgASAEhiEBCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQEF/IQQgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LQX8hBCAAIAJWIAEgA1UgASADURsNACAAIAKFIAEgA4WEQgBSIQQLIAQLxAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AQQAgAkL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgACAEIAWEhFAEQEEADwsgASACg0IAWQRAQQAgASACUyABIAJRGw0BIAAgASAChYRCAFIPCyAAQgBSIAEgAlUgASACURsNACAAIAEgAoWEQgBSIQMLIAMLtg8CBX8OfiMAQdACayIFJAAgBEL///////8/gyEKIAJC////////P4MhDCACIASFQoCAgICAgICAgH+DIQ0gBEIwiKdB//8BcSEIAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgCEH//wFrQYGAfksNAQsgAVAgAkL///////////8AgyIPQoCAgICAgMD//wBUIA9CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDQwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCENIAMhAQwCCyABIA9CgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhDQwDCyANQoCAgICAgMD//wCEIQ1CACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgD4RQBEBCgICAgICA4P//ACANIAIgA4RQGyENQgAhAQwCCyACIAOEUARAIA1CgICAgICAwP//AIQhDUIAIQEMAgsgD0L///////8/WARAIAVBwAJqIAEgDCABIAwgDFAiBht5IAZBBnStfKciBkEPaxCLA0EQIAZrIQYgBSkDyAIhDCAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyAKIAMgCiAKUCIHG3kgB0EGdK18pyIHQQ9rEIsDIAYgB2pBEGshBiAFKQO4AiEKIAUpA7ACIQMLIAVBoAJqIApCgICAgICAwACEIhJCD4YgA0IxiIQiAkIAQoCAgICw5ryC9QAgAn0iBEIAEJQDIAVBkAJqQgAgBSkDqAJ9QgAgBEIAEJQDIAVBgAJqIAUpA5gCQgGGIAUpA5ACQj+IhCIEQgAgAkIAEJQDIAVB8AFqIARCAEIAIAUpA4gCfUIAEJQDIAVB4AFqIAUpA/gBQgGGIAUpA/ABQj+IhCIEQgAgAkIAEJQDIAVB0AFqIARCAEIAIAUpA+gBfUIAEJQDIAVBwAFqIAUpA9gBQgGGIAUpA9ABQj+IhCIEQgAgAkIAEJQDIAVBsAFqIARCAEIAIAUpA8gBfUIAEJQDIAVBoAFqIAJCACAFKQO4AUIBhiAFKQOwAUI/iIRCAX0iAkIAEJQDIAVBkAFqIANCD4ZCACACQgAQlAMgBUHwAGogAkIAQgAgBSkDqAEgBSkDoAEiDyAFKQOYAXwiBCAPVK18IARCAVatfH1CABCUAyAFQYABakIBIAR9QgAgAkIAEJQDIAYgCSAIa2ohBgJ/IAUpA3AiEEIBhiIUIAUpA4gBIg5CAYYgBSkDgAFCP4iEfCILQufsAH0iFUIgiCICIAxCgICAgICAwACEIhZCAYYgAUI/iIQiDEIgiCIEfiIRIAFCAYYiD0IgiCIKIAsgFVatIAsgFFStIAUpA3hCAYYgEEI/iIQgDkI/iHx8fEIBfSIQQiCIIgt+fCIOIBFUrSAOIA4gEEL/////D4MiECAMQv////8PgyIUfnwiDlatfCAEIAt+fCAEIBB+IhMgCyAUfnwiESATVK1CIIYgEUIgiIR8IA4gDiARQiCGfCIOVq18IA4gDiAVQv////8PgyIVIBR+IhMgAiAKfnwiESATVK0gESARIBAgD0L+////D4MiE358IhFWrXx8Ig5WrXwgDiAEIBV+IhcgCyATfnwiBCACIBR+fCILIAogEH58IhBCIIggCyAQVq0gBCAXVK0gBCALVq18fEIghoR8IgQgDlStfCAEIBEgAiATfiICIAogFX58IgpCIIggAiAKVq1CIIaEfCICIBFUrSACIBBCIIZ8IAJUrXx8IgIgBFStfCIEQv////////8AWARAIAVB0ABqIAIgBCADIBIQlAMgAUIxhiAFKQNYfSAFKQNQIgFCAFKtfSELQgAgAX0hCiAGQf7/AGoMAQsgBUHgAGogBEI/hiACQgGIhCICIARCAYgiBCADIBIQlAMgAUIwhiAFKQNofSAFKQNgIgxCAFKtfSELQgAgDH0hCiABIQ8gFiEMIAZB//8AagsiBkH//wFOBEAgDUKAgICAgIDA//8AhCENQgAhAQwBCwJ+IAZBAEoEQCALQgGGIApCP4iEIQsgBEL///////8/gyAGrUIwhoQhDCAKQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQkgMgBUEwaiAPIAwgBkHwAGoQiwMgBUEgaiADIBIgBSkDQCICIAUpA0giDBCUAyAFKQM4IAUpAyhCAYYgBSkDICIBQj+IhH0gBSkDMCIEIAFCAYYiAVStfSELIAQgAX0LIQQgBUEQaiADIBJCA0IAEJQDIAUgAyASQgVCABCUAyAMIAIgAiADIAJCAYMiASAEfCIDVCALIAEgA1atfCIBIBJWIAEgElEbrXwiAlatfCIEIAIgAiAEQoCAgICAgMD//wBUIAMgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgJWrXwiBCACIARCgICAgICAwP//AFQgAyAFKQMAViABIAUpAwgiA1YgASADURtxrXwiASACVK18IA2EIQ0LIAAgATcDACAAIA03AwggBUHQAmokAAv6AQIDfgJ/IwBBEGsiBSQAAn4gAb0iA0L///////////8AgyICQoCAgICAgIAIfUL/////////7/8AWARAIAJCPIYhBCACQgSIQoCAgICAgICAPHwMAQsgAkKAgICAgICA+P8AWgRAIANCPIYhBCADQgSIQoCAgICAgMD//wCEDAELIAJQBEBCAAwBCyAFIAJCACADp2dBIGogAkIgiKdnIAJCgICAgBBUGyIGQTFqEIsDIAUpAwAhBCAFKQMIQoCAgICAgMAAhUGM+AAgBmutQjCGhAshAiAAIAQ3AwAgACACIANCgICAgICAgICAf4OENwMIIAVBEGokAAt/AgJ/AX4jAEEQayIDJAAgAAJ+IAFFBEBCAAwBCyADIAEgAUEfdSICcyACayICrUIAIAJnIgJB0QBqEIsDIAMpAwhCgICAgICAwACFQZ6AASACa61CMIZ8IAFBgICAgHhxrUIghoQhBCADKQMACzcDACAAIAQ3AwggA0EQaiQAC2QCAX8BfiMAQRBrIgIkACAAAn4gAUUEQEIADAELIAIgAa1CACABZyIBQdEAahCLAyACKQMIQoCAgICAgMAAhUGegAEgAWutQjCGfCEDIAIpAwALNwMAIAAgAzcDCCACQRBqJAALUAEBfgJAIANBwABxBEAgAiADQUBqrYghAUIAIQIMAQsgA0UNACACQcAAIANrrYYgASADrSIEiIQhASACIASIIQILIAAgATcDACAAIAI3AwgLyQoCBX8PfiMAQeAAayIFJAAgBEL///////8/gyEMIAIgBIVCgICAgICAgICAf4MhCiACQv///////z+DIg1CIIghDiAEQjCIp0H//wFxIQcCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAHQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIgtCgICAgICAwP//AFQgC0KAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEKDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQogAyEBDAILIAEgC0KAgICAgIDA//8AhYRQBEAgAiADhFAEQEKAgICAgIDg//8AIQpCACEBDAMLIApCgICAgICAwP//AIQhCkIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQCABIAuEIQJCACEBIAJQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rEIsDQRAgBmshBiAFKQNYIg1CIIghDiAFKQNQIQELIAJC////////P1YNACAFQUBrIAMgDCADIAwgDFAiCBt5IAhBBnStfKciCEEPaxCLAyAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECALQiCIIhMgAUL/////D4MiAX58Ig9CIIYiESABIAJ+fCILIBFUrSACIA1C/////w+DIg1+IhUgBCATfnwiESAMQg+GIANCMYiEIhJC/////w+DIgMgAX58IhQgDyAQVK1CIIYgD0IgiIR8Ig8gAiAOQoCABIQiDH4iFiANIBN+fCIOIBJCIIhCgICAgAiEIgIgAX58IhAgAyAEfnwiEkIghnwiF3whASAHIAlqIAZqQf//AGshBgJAIAIgBH4iGCAMIBN+fCIEIBhUrSAEIAQgAyANfnwiBFatfCACIAx+fCAEIAQgESAVVK0gESAUVq18fCIEVq18IAMgDH4iAyACIA1+fCICIANUrUIghiACQiCIhHwgBCACQiCGfCICIARUrXwgAiACIBAgElatIA4gFlStIA4gEFatfHxCIIYgEkIgiIR8IgJWrXwgAiACIA8gFFStIA8gF1atfHwiAlatfCIEQoCAgICAgMAAg1BFBEAgBkEBaiEGDAELIAtCP4ghAyAEQgGGIAJCP4iEIQQgAkIBhiABQj+IhCECIAtCAYYhCyADIAFCAYaEIQELIAZB//8BTgRAIApCgICAgICAwP//AIQhCkIAIQEMAQsCfiAGQQBMBEBBASAGayIHQYABTwRAQgAhAQwDCyAFQTBqIAsgASAGQf8AaiIGEIsDIAVBIGogAiAEIAYQiwMgBUEQaiALIAEgBxCSAyAFIAIgBCAHEJIDIAUpAzAgBSkDOIRCAFKtIAUpAyAgBSkDEISEIQsgBSkDKCAFKQMYhCEBIAUpAwAhAiAFKQMIDAELIARC////////P4MgBq1CMIaECyAKhCEKIAtQIAFCAFkgAUKAgICAgICAgIB/URtFBEAgCiACQgF8IgEgAlStfCEKDAELIAsgAUKAgICAgICAgIB/hYRQRQRAIAIhAQwBCyAKIAIgAkIBg3wiASACVK18IQoLIAAgATcDACAAIAo3AwggBUHgAGokAAt1AQF+IAAgASAEfiACIAN+fCADQiCIIgIgAUIgiCIEfnwgA0L/////D4MiAyABQv////8PgyIBfiIFQiCIIAMgBH58IgNCIIh8IAEgAn4gA0L/////D4N8IgFCIIh8NwMIIAAgBUL/////D4MgAUIghoQ3AwALRQEBfyMAQRBrIgUkACAFIAEgAiADIARCgICAgICAgICAf4UQigMgBSkDACEBIAAgBSkDCDcDCCAAIAE3AwAgBUEQaiQAC9MDAgJ+An8jAEEgayIEJAACQCABQv///////////wCDIgNCgICAgICAwIA8fSADQoCAgICAgMD/wwB9VARAIAFCBIYgAEI8iIQhAyAAQv//////////D4MiAEKBgICAgICAgAhaBEAgA0KBgICAgICAgMAAfCECDAILIANCgICAgICAgIBAfSECIABCgICAgICAgIAIUg0BIAIgA0IBg3whAgwBCyAAUCADQoCAgICAgMD//wBUIANCgICAgICAwP//AFEbRQRAIAFCBIYgAEI8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIANC////////v//DAFYNAEIAIQIgA0IwiKciBUGR9wBJDQAgBEEQaiAAIAFC////////P4NCgICAgICAwACEIgIgBUGB9wBrEIsDIAQgACACQYH4ACAFaxCSAyAEKQMIQgSGIAQpAwAiAEI8iIQhAiAEKQMQIAQpAxiEQgBSrSAAQv//////////D4OEIgBCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyAAQoCAgICAgICACFINACACQgGDIAJ8IQILIARBIGokACACIAFCgICAgICAgICAf4OEvwu2AwIDfwF+IwBBIGsiAyQAAkAgAUL///////////8AgyIFQoCAgICAgMDAP30gBUKAgICAgIDAv8AAfVQEQCABQhmIpyEEIABQIAFC////D4MiBUKAgIAIVCAFQoCAgAhRG0UEQCAEQYGAgIAEaiECDAILIARBgICAgARqIQIgACAFQoCAgAiFhEIAUg0BIAIgBEEBcWohAgwBCyAAUCAFQoCAgICAgMD//wBUIAVCgICAgICAwP//AFEbRQRAIAFCGYinQf///wFxQYCAgP4HciECDAELQYCAgPwHIQIgBUL///////+/v8AAVg0AQQAhAiAFQjCIpyIEQZH+AEkNACADQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiBSAEQYH+AGsQiwMgAyAAIAVBgf8AIARrEJIDIAMpAwgiAEIZiKchAiADKQMAIAMpAxAgAykDGIRCAFKthCIFUCAAQv///w+DIgBCgICACFQgAEKAgIAIURtFBEAgAkEBaiECDAELIAUgAEKAgIAIhYRCAFINACACQQFxIAJqIQILIANBIGokACACIAFCIIinQYCAgIB4cXK+CzwAIAAgASACAn8gASAAa0ECdSEAQQAhAQNAIABBAk4EQCAAQQF2IQAgAUEBaiEBDAELCyABQQF0CxCZAwvNCQEHfwNAIAFBBGshCANAIAAhBANAAkACfwJAAkACQAJAAkACQAJAIAEgBGsiAEECdSIFDgYICAAEAQIDCyABQQRrIgAoAgAgBCgCAE8NByAEKAIAIQEgBCAAKAIANgIAIAAgATYCAA8LIAQgBEEEaiAEQQhqIAFBBGsQmgMaDwsgBCAEQQRqIARBCGogBEEMaiABQQRrEJsDGg8LIABB+wBMBEAgASEDIwBBEGsiBSQAIAQgBEEEaiAEQQhqIgIQnAMaIARBDGohAQNAIAEgA0cEQCABKAIAIAIoAgBJBEAgBSABKAIANgIMIAEhAANAAkAgACACIgAoAgA2AgAgACAERgRAIAQhAAwBCyAFKAIMIABBBGsiAigCAEkNAQsLIAAgBSgCDDYCAAsgASICQQRqIQEMAQsLIAVBEGokAA8LIANFBEACQCABIgAgBEYNAAJAIAAgBGsiAkEFSA0AIAJBAnUiA0ECa0ECbSECA0AgAkEASA0BIAQgAyAEIAJBAnRqEJ4DIAJBAWshAgwACwALIAAgBGtBAnUhAgNAIAAgAUYEQCAAIARrQQJ1IQEDQCABQQFKBEAgAUECTgRAIAQoAgAhAiAEIABBBGsiAygCADYCACADIAI2AgAgBCABQQFrIAQQngMLIAFBAWshASAAQQRrIQAMAQsLDAILIAEoAgAgBCgCAEkEQCABKAIAIQMgASAEKAIANgIAIAQgAzYCACAEIAIgBBCeAwsgAUEEaiEBDAALAAsPCyAEIAVBAm1BAnRqIQYCfyAAQZ0fTwRAIAQgBCAFQQRtQQJ0IgBqIAYgACAGaiAIEJsDDAELIAQgBiAIEJwDCyEJIANBAWshAyAIIQAgBCgCACAGKAIATwRAA0AgAEEEayIAIARGBEAgBEEEaiEFIAQoAgAgCCgCAEkNBQNAIAUgCEYNCCAEKAIAIAUoAgBJBEAgBSgCACEAIAUgCCgCADYCACAIIAA2AgAgBUEEaiEFDAcFIAVBBGohBQwBCwALAAsgACgCACAGKAIATw0ACyAEKAIAIQUgBCAAKAIANgIAIAAgBTYCACAJQQFqIQkLIARBBGoiBSAATw0BA0AgBSIHQQRqIQUgBygCACAGKAIASQ0AA0AgAEEEayIAKAIAIAYoAgBPDQALIAAgB0kEQCAHIQUMAwUgBygCACEKIAcgACgCADYCACAAIAo2AgAgACAGIAYgB0YbIQYgCUEBaiEJDAELAAsACyAEIARBBGogAUEEaxCcAxoMAwsCQCAFIAZGDQAgBigCACAFKAIATw0AIAUoAgAhACAFIAYoAgA2AgAgBiAANgIAIAlBAWohCQsgCUUEQCAEIAUQnQMhByAFQQRqIgAgARCdAwRAIAUhASAEIQAgB0UNBwwEC0ECIAcNAhoLIAUgBGsgASAFa0gEQCAEIAUgAiADEJkDIAVBBGohAAwFCyAFQQRqIAEgAiADEJkDIAUhASAEIQAMBQsgBSAIIgZGDQEDfyAFIgBBBGohBSAEKAIAIAAoAgBPDQADQCAEKAIAIAZBBGsiBigCAEkNAAsgACAGTwR/QQQFIAAoAgAhByAAIAYoAgA2AgAgBiAHNgIADAELCwshBSAAIQQgBUECaw4DAgABAAsLCwsLlQEBAn8gACABIAIQnAMhBCADKAIAIAIoAgBJBH8gAigCACEFIAIgAygCADYCACADIAU2AgAgAigCACABKAIATwRAIARBAWoPCyABKAIAIQMgASACKAIANgIAIAIgAzYCACABKAIAIAAoAgBPBEAgBEECag8LIAAoAgAhAiAAIAEoAgA2AgAgASACNgIAIARBA2oFIAQLC8MBAQJ/IAAgASACIAMQmgMhBSAEKAIAIAMoAgBJBH8gAygCACEGIAMgBCgCADYCACAEIAY2AgAgAygCACACKAIATwRAIAVBAWoPCyACKAIAIQQgAiADKAIANgIAIAMgBDYCACACKAIAIAEoAgBPBEAgBUECag8LIAEoAgAhAyABIAIoAgA2AgAgAiADNgIAIAEoAgAgACgCAE8EQCAFQQNqDwsgACgCACECIAAgASgCADYCACABIAI2AgAgBUEEagUgBQsL0AEBAn8gASgCACIEIAIoAgBLIQMCfwJAIAQgACgCAE8EQEEAIANFDQIaIAEoAgAhAyABIAIoAgA2AgAgAiADNgIAQQEgASgCACAAKAIATw0CGiAAKAIAIQIgACABKAIANgIAIAEgAjYCAAwBCyADBEAgACgCACEBIAAgAigCADYCACACIAE2AgBBAQ8LIAAoAgAhAyAAIAEoAgA2AgAgASADNgIAQQEgAigCACABKAIATw0BGiABKAIAIQAgASACKAIANgIAIAIgADYCAAtBAgsLzQIBBn8jAEEQayIEJABBASEGAkACQAJAAkACQAJAIAEgAGtBAnUOBgUFAAECAwQLIAFBBGsiASgCACAAKAIATw0EIAAoAgAhAiAAIAEoAgA2AgAgASACNgIADAQLIAAgAEEEaiABQQRrEJwDGgwDCyAAIABBBGogAEEIaiABQQRrEJoDGgwCCyAAIABBBGogAEEIaiAAQQxqIAFBBGsQmwMaDAELIAAgAEEEaiAAQQhqIgUQnAMaIABBDGohAwNAIAEgA0YNAQJAIAMoAgAgBSgCAEkEQCAEIAMoAgA2AgwgAyECA0ACQCACIAUiAigC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IAIgASADbEYNAiACIABB0AFqIgFuIgMgAUkNBCAAQdIBaiEAIAIgASADbEcNAAsMAQsgAiAAQQJ0QdCZAWooAgAiAW4iAyABSQ0CIABBAWohACACIAEgA2xHDQELC0EAIAVBAWoiACAAQTBGIgAbIQUgACAGaiIGQdIBbCECDAELCyAEIAI2AgwLIARBEGokACACC4EBAQR/IwBBEGsiBSQAIwBBEGsiAyQAIAEgAGtBAnUhAQNAIAEEQCADIAA2AgwgAyADKAIMIAFBAXYiBEECdGo2AgwgASAEQX9zaiAEIAMoAgwiBCgCACACKAIASSIGGyEBIARBBGogACAGGyEADAELCyADQRBqJAAgBUEQaiQAIAALBQAQAgAL4wEBBH8jAEEgayIEJAAgBCABNgIQIAQgAiAAKAIwIgNBAEdrNgIUIAAoAiwhBSAEIAM2AhwgBCAFNgIYAkACQCAAIAAoAjwgBEEQakECIARBDGoQCCIDBH9B2MYCIAM2AgBBfwVBAAsEf0EgBSAEKAIMIgNBAEoNAUEgQRAgAxsLIAAoAgByNgIADAELIAQoAhQiBSADIgZPDQAgACAAKAIsIgM2AgQgACADIAYgBWtqNgIIIAAoAjAEQCAAIANBAWo2AgQgASACakEBayADLQAAOgAACyACIQYLIARBIGokACAGC/ABAQN/IABFBEBByMICKAIABEBByMICKAIAEKMDIQELQaDAAigCAARAQaDAAigCABCjAyABciEBC0HUxgIoAgAiAARAA0AgACgCTBogACgCFCAAKAIcRwRAIAAQowMgAXIhAQsgACgCOCIADQALCyABDwsgACgCTEEATiECAkACQCAAKAIUIAAoAhxGDQAgAEEAQQAgACgCJBEEABogACgCFA0AQX8hAQwBCyAAKAIEIgEgACgCCCIDRwRAIAAgASADa6xBASAAKAIoERUAGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAJFDQALIAELBwAgABDjAwsNACAAEOMDGiAAEIYDCzgBAn8gAEHYnAE2AgAgACgCBCIBIAEoAgRBAWsiAjYCBCACQX9GBEAgASABKAIAKAIIEQIACyAACw0AIAAQpgMaIAAQhgMLKwAgAEHYnAE2AgAgAEEEahC1BRogAEIANwIYIABCADcCECAAQgA3AgggAAsEACAACxAA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IGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEELIEIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB4AFqIABBIGogACgCHCAEEKIEIABBmAJqIABBkAJqELwDBEAgBCAEKAIAQQJyNgIACyAAKAKYAiECIAEQogYaIABB4AFqEKIGGiAAQaACaiQAIAILsgICBH4FfyMAQSBrIggkAAJAAkACQCABIAJHBEBB2MYCKAIAIQxB2MYCQQA2AgAjAEEQayIJJAAQtAQaIwBBEGsiCiQAIwBBEGsiCyQAIAsgASAIQRxqQQIQkAQgCykDACEEIAogCykDCDcDCCAKIAQ3AwAgC0EQaiQAIAopAwAhBCAJIAopAwg3AwggCSAENwMAIApBEGokACAJKQMAIQQgCCAJKQMINwMQIAggBDcDCCAJQRBqJAAgCCkDECEEIAgpAwghBUHYxgIoAgAiAUUNASAIKAIcIAJHDQIgBSEGIAQhByABQcQARw0DDAILIANBBDYCAAwCC0HYxgIgDDYCACAIKAIcIAJGDQELIANBBDYCACAGIQUgByEECyAAIAU3AwAgACAENwMIIAhBIGokAAvtBAECfyMAQZACayIAJAAgACACNgKAAiAAIAE2AogCIABB0AFqENcDIQcgAEEQaiIGIAMoAhwiATYCACABIAEoAgRBAWo2AgQgBhC4AyIBQeDAAUH6wAEgAEHgAWogASgCACgCIBEHABogBigCACIBIAEoAgRBAWsiAjYCBCACQX9GBEAgASABKAIAKAIIEQIACyAAQcABahDXAyICIAItAAtBB3YEfyACKAIIQf////8HcUEBawVBCgsQ2gMgAAJ/IAItAAtBB3YEQCACKAIADAELIAILIgE2ArwBIAAgBjYCDCAAQQA2AggDQAJAIABBiAJqIABBgAJqELkDRQ0AIAAoArwBAn8gAi0AC0EHdgRAIAIoAgQMAQsgAi0ACwsgAWpGBEACfyACLQALQQd2BEAgAigCBAwBCyACLQALCyEDIAICfyACLQALQQd2BEAgAigCBAwBCyACLQALC0EBdBDaAyACIAItAAtBB3YEfyACKAIIQf////8HcUEBawVBCgsQ2gMgACADAn8gAi0AC0EHdgRAIAIoAgAMAQsgAgsiAWo2ArwBCyAAQYgCahC6A0EQ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AgwBCwsQoQMACxChAwALIABBmAJqIABBkAJqELwDBEAgBSAFKAIAQQJyNgIACyAAKAKYAiECIAAoApABIgEgASgCBEEBayIDNgIEIANBf0YEQCABIAEoAgAoAggRAgALIAcoAgAhASAHQQA2AgAgAQRAIAEgBygCBBECAAsgAEGgAmokACACC6YVAQp/IwBBsARrIgskACALIAo2AqQEIAsgATYCqAQCQCAAIAtBqARqELwDBEAgBSAFKAIAQQRyNgIAQQAhAAwBCyALQZACNgJoIAsgC0GIAWogC0GQAWogC0HoAGoiARCcBCIPKAIAIgo2AoQBIAsgCkGQA2o2AoABIAEQ1wMhESALQdgAahDXAyEOIAtByABqENcDIQ0gC0E4ahDXAyEMIAtBKGoQ1wMhECMAQRBrIgEkACALAn8gAgRAIAEgAxCUBSICIAIoAgAoAiwRAAAgCyABKAIANgB4IAEgAiACKAIAKAIgEQAAIAwgARDYAyABEKIGGiABIAIgAigCACgCHBEAACANIAEQ2AMgARCiBhogCyACIAIoAgAoAgwRAQA6AHcgCyACIAIoAgAoAhARAQA6AHYgASACIAIoAgAoAhQRAAAgESABENgDIAEQogYaIAEgAiACKAIAKAIYEQAAIA4gARDYAyABEKIGGiACIAIoAgAoAiQRAQAMAQsgASADEJUFIgIgAigCACgCLBEAACALIAEoAgA2AHggASACIAIoAgAoAiARAAAgDCABENgDIAEQogYaIAEgAiACKAIAKAIcEQAAIA0gARDYAyABEKIGGiALIAIgAigCACgCDBEBADoAdyALIAIgAigCACgCEBEBADoAdiABIAIgAigCACgCFBEAACARIAEQ2AMgARCiBhogASACIAIoAgAoAhgRAAAgDiABENgDIAEQogYaIAIgAigCACgCJBEBAAs2AiQgAUEQaiQAIAkgCCgCADYCACAEQYAEcSISQQl2IRNBACEDQQAhAQNAIAEhAgJAAkACQAJAIANBBEYNACAAIAtBqARqELkDRQ0AQQAhCgJAAkACQAJAAkACQCALQfgAaiADaiwAAA4FAQAEAwUJCyADQQNGDQcgABC6AyIBQQBOBH8gBygCCCABQf8BcUECdGooAgBBAXEFQQALBEAgC0EYaiAAEJAFIBAgCywAGBCoBgwCCyAFIAUoAgBB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IA8oAgAgCygChAFGDQBBACEAIAtBADYCGCARIA8oAgAgCygChAEgC0EYahCiBCALKAIYBEAgBSAFKAIAQQRyNgIADAELQQEhAAsgEBCiBhogDBCiBhogDRCiBhogDhCiBhogERCiBhogDygCACEBIA9BADYCACABBEAgASAPKAIEEQIACwwDCyACIQELIANBAWohAwwACwALIAtBsARqJAAgAAslAQF/IAEoAgAQvwNBGHRBGHUhAiAAIAEoAgA2AgQgACACOgAAC+MBAQZ/IwBBEGsiBSQAIAAoAgQhAwJ/IAIoAgAgACgCAGsiBEH/////B0kEQCAEQQF0DAELQX8LIgRBASAEGyEEIAEoAgAhByAAKAIAIQggA0GQAkYEf0EABSAAKAIACyAEEIcDIgYEQCADQZACRwRAIAAoAgAaIABBADYCAAsgBUGPAjYCBCAAIAVBCGogBiAFQQRqEJwEIgMQlwUgAygCACEGIANBADYCACAGBEAgBiADKAIEEQIACyABIAAoAgAgByAIa2o2AgAgAiAEIAAoAgBqNgIAIAVBEGokAA8LEKEDAAvmAQEGfyMAQRBrIgUkACAAKAIEIQMCfyACKAIAIAAoAgBrIgRB/////wdJBEAgBEEBdAwBC0F/CyIEQQQgBBshBCABKAIAIQcgACgCACEIIANBkAJGBH9BAAUgACgCAAsgBBCHAyIGBEAgA0GQAkcEQCAAKAIAGiAAQQA2AgALIAVBjwI2AgQgACAFQQhqIAYgBUEEahCcBCIDEJcFIAMoAgAhBiADQQA2AgAgBgRAIAYgAygCBBECAAsgASAAKAIAIAcgCGtqNgIAIAIgACgCACAEQXxxajYCACAFQRBqJAAPCxChAwAL6gYBBH8jAEGgAWsiACQAIAAgAjYCkAEgACABNgKYASAAQZACNgIUIABBGGogAEEgaiAAQRRqIggQnAQhCSAAQRBqIgcgBCgCHCIBNgIAIAEgASgCBEEBajYCBCAHELgDIQEgAEEAOgAPIABBmAFqIAIgAyAHIAQoAgQgBSAAQQ9qIAEgCSAIIABBhAFqEI8FBEAjAEEQayICJAACQCAGLQALQQd2BEAgBigCACEDIAJBADoADyADIAItAA86AAAgBkEANgIEDAELIAJBADoADiAGIAItAA46AAAgBkEAOgALCyACQRBqJAAgAC0ADwRAIAYgAUEtIAEoAgAoAhwRAwAQqAYLIAFBMCABKAIAKAIcEQMAIQEgCSgCACECIAAoAhQiCEEBayEDIAFB/wFxIQEDQAJAIAIgA08NACACLQAAIAFHDQAgAkEBaiECDAELCyMAQRBrIgEkAAJ/IAYtAAtBB3YEQCAGKAIEDAELIAYtAAsLIQcgBiIDLQALQQd2BH8gAygCCEH/////B3FBAWsFQQoLIQQCQCAIIAJrIgpFDQACfyADLQALQQd2BEAgBigCAAwBCyAGCyACTQR/An8gBi0AC0EHdgRAIAYoAgAMAQsgBgsCfyAGLQALQQd2BEAgBigCBAwBCyAGLQALC2ogAk8FQQALRQRAIAogBCAHa0sEQCAGIAQgByAKaiAEayAHIAdBABCjBgsCfyAGLQALQQd2BEAgBigCAAwBCyAGCyAHaiEEA0AgAiAIRwRAIAQgAi0AADoAACACQQFqIQIgBEEBaiEEDAELCyABQQA6AA8gBCABLQAPOgAAIAcgCmohAgJAIAYtAAtBB3YEQCAGIAI2AgQMAQsgBiACOgALCwwBCyMAQRBrIgMkACABIAIgCBDZAyADQRBqJAAgBgJ/IAEtAAtBB3YEQCABKAIADAELIAELAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0ACwsQpwYaIAEQogYaCyABQRBqJAALIABBmAFqIABBkAFqELwDBEAgBSAFKAIAQQJyNgIACyAAKAKYASECIAAoAhAiASABKAIEQQFrIgM2AgQgA0F/RgRAIAEgASgCACgCCBECAAsgCSgCACEBIAlBADYCACABBEAgASAJKAIEEQIACyAAQaABaiQAIAILCwAgAEHE5QIQmwQLCwAgAEG85QIQmwQLNAEBfyMAQRBrIgIkACACIAAoAgA2AgggAiACKAIIIAFqNgIIIAIoAgghACACQRBqJAAgAAs9AQJ/IAEoAgAhAiABQQA2AgAgAiEDIAAoAgAhAiAAIAM2AgAgAgRAIAIgACgCBBECAAsgACABKAIENgIEC+wEAQJ/IwBB8ARrIgAkACAAIAI2AuAEIAAgATYC6AQgAEGQAjYCECAAQcgBaiAAQdABaiAAQRBqEJwEIQcgAEHAAWoiCCAEKAIcIgE2AgAgASABKAIEQQFqNgIEIAgQ0AMhASAAQQA6AL8BAkAgAEHoBGogAiADIAggBCgCBCAFIABBvwFqIAEgByAAQcQBaiAAQeAEahCZBUUNACAAQfwjKAAANgC3ASAAQfUjKQAANwOwASABIABBsAFqIABBugFqIABBgAFqIAEoAgAoAjARBwAaIABBjwI2AhAgAEEIakEAIABBEGoiBBCcBCEBAkAgACgCxAEgBygCAGtBiQNOBEAgACgCxAEgBygCAGtBAnVBAmoQhQMhAyABKAIAIQIgASADNgIAIAIEQCACIAEoAgQRAgALIAEoAgBFDQEgASgCACEECyAALQC/AQRAIARBLToAACAEQQFqIQQLIAcoAgAhAgNAIAAoAsQBIAJNBEACQCAEQQA6AAAgACAGNgIAIABBEGogABCKBEEBRw0AIAEoAgAhAiABQQA2AgAgAgRAIAIgASgCBBECAAsMBAsFIAQgAEGwAWogAEGAAWoiAyADQShqIAIQyQQgA2tBAnVqLQAAOgAAIARBAWohBCACQQRqIQIMAQsLEKEDAAsQoQMACyAAQegEaiAAQeAEahDTAwRAIAUgBSgCAEECcjYCAAsgACgC6AQhAiAAKALAASIBIAEoAgRBAWsiAzYCBCADQX9GBEAgASABKAIAKAIIEQIACyAHKAIAIQEgB0EANgIAIAEEQCABIAcoAgQRAgALIABB8ARqJAAgAgvGFwEKfyMAQbAEayILJAAgCyAKNgKkBCALIAE2AqgEAkAgACALQagEahDTAwRAIAUgBSgCAEEEcjYCAEEAIQAMAQsgC0GQAjYCYCALIAtBiAFqIAtBkAFqIAtB4ABqIgEQnAQiDygCACIKNgKEASALIApBkANqNgKAASABENcDIREgC0HQAGoQ1wMhDiALQUBrENcDIQ0gC0EwahDXAyEMIAtBIGoQ1wMhECMAQRBrIgEkACALAn8gAgRAIAEgAxCcBSICIAIoAgAoAiwRAAAgCyABKAIANgB4IAEgAiACKAIAKAIgEQAAIAwgARCdBSABEKoGGiABIAIgAigCACgCHBEAACANIAEQnQUgARCqBhogCyACIAIoAgAoAgwRAQA2AnQgCyACIAIoAgAoAhARAQA2AnAgASACIAIoAgAoAhQRAAAgESABENgDIAEQogYaIAEgAiACKAIAKAIYEQAAIA4gARCdBSABEKoGGiACIAIoAgAoAiQRAQAMAQsgASADEJ4FIgIgAigCACgCLBEA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LQALC2pqQQJqCyIOQeUATwRAIA4QhQMhDiALKAIAIQIgCyAONgIAIAIEQCACIAsoAgQRAgALIAsoAgAiAkUNAQsgAiAAQSRqIABBIGogAygCBCAMIAkgDGogESAPIABB0AFqIAAsAM8BIAAsAM4BIBAgByAIIAAoApwBEKIFIAEgAiAAKAIkIAAoAiAgAyAEEK0BIQIgCygCACEBIAtBADYCACABBEAgASALKAIEEQIACyAIEKIGGiAHEKIGGiAQEKIGGiAAKALYASIBIAEoAgRBAWsiAzYCBCADQX9GBEAgASABKAIAKAIIEQIACyAKKAIAIQEgCkEANgIAIAEEQCABIAooAgQRAgALIA0oAgAhASANQQA2AgAgAQRAIAEgDSgCBBECAAsgAEHQA2okACACDwsQoQMAC9EDAQF/IwBBEGsiCiQAIAkCfyAABEAgAhCUBSEAAkAgAQRAIAogACAAKAIAKAIsEQAAIAMgCigCADYAACAKIAAgACgCACgCIBEAAAwBCyAKIAAgACgCACgCKBEAACADIAooAgA2AAAgCiAAIAAoAgAoAhwRAAALIAggChDYAyAKEKIGGiAEIAAgACgCACgCDBEBADoAACAFIAAgACgCACgCEBEBADoAACAKIAAgACgCACgCFBEAACAGIAoQ2AMgChCiBhogCiAAIAAoAgAoAhgRAAAgByAKENgDIAoQogYaIAAgACgCACgCJBEBAAwBCyACEJUFIQACQCABBEAgCiAAIAAoAgAoAiwRAAAgAyAKKAIANgAAIAogACAAKAIAKAIgEQAADAELIAogACAAKAIAKAIoEQAAIAMgCigCADYAACAKIAAgACgCACgCHBEAAAsgCCAKENgDIAoQogYaIAQgACAAKAIAKAIMEQEAOgAAIAUgACAAKAIAKAIQEQEAOgAAIAogACAAKAIAKAIUEQAAIAYgChDYAyAKEKIGGiAKIAAgACgCACgCGBEAACAHIAoQ2AMgChCiBhogACAAKAIAKAIkEQEACzYCACAKQRBqJAALzQcBCn8jAEEQayITJAAgAiAANgIAIANBgARxIRYDQCAUQQRGBEACfyANLQALQQd2BEAgDSgCBAwBCyANLQALC0EBSwRAIBMgDRDLBDYCCCACIBNBCGpBARCWBSANEMwEIAIoAgAQowU2AgALIANBsAFxIgNBEEcE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EGsiAyQAIAMgATYCDAJAAkACQCAALQALQQd2RQRAQQEhAiAALQALIgFBAUYNASAAIgIgAUEBajoACwwDCyAAKAIEIgEgACgCCEH/////B3FBAWsiAkcNAQsgACACQQEgAiACEKsGIAIhAQsgACgCACECIAAgAUEBajYCBAsgAiABQQJ0aiIAIAMoAgw2AgAgA0EANgIIIAAgAygCCDYCBCADQRBqJAALEABBzMICKAIAEQ0AEKEDAAstACACRQRAIAAoAgQgASgCBEYPCyAAIAFGBEBBAQ8LIAAoAgQgASgCBBCDBEULogEBAn8jAEFAaiIDJAACf0EBIAAgAUEAEK4GDQAaQQAgAUUNABpBACABQcz3ARCwBiIBRQ0AGiADQQhqIgRBBHJBAEE0EN4CGiADQQE2AjggA0F/NgIUIAMgADYCECADIAE2AgggASAEIAIoAgBBASABKAIAKAIcEQYAIAMoAiAiAEEBRgRAIAIgAygCGDYCAAsgAEEBRgshACADQUBrJAAgAAu7AgEDfyMAQUBqIgIkACAAKAIAIgNBBGsoAgAhBCADQQhrKAIAIQMgAkIANwMgIAJCADcDKCACQgA3AzAgAkIANwA3IAJCADcDGCACQQA2AhQgAkGc9wE2AhAgAiAANgIMIAIgATYCCCAAIANqIQBBACEDAkAgBCABQQAQrgYEQCACQQE2AjggBCACQQhqIAAgAEEBQQAgBCgCACgCFBEMACAAQQAgAigCIEEBRhshAwwBCyAEIAJBCGogAEEBQQAgBCgCACgCGBEIAAJAAkAgAigCLA4CAAECCyACKAIcQQAgAigCKEEBRhtBACACKAIkQQFGG0EAIAIoAjBBAUYbIQMMAQsgAigCIEEBRwRAIAIoAjANASACKAIkQQFHDQEgAigCKEEBRw0BCyACKAIYIQMLIAJBQGskACADC10BAX8gACgCECIDRQRAIABBATYCJCAAIAI2AhggACABNgIQDwsCQCABIANGBEAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACAAKAIkQQFqNgIkCwsaACAAIAEoAghBABCuBgRAIAEgAiADELEGCwszACAAIAEoAghBABCuBgRAIAEgAiADELEGDwsgACgCCCIAIAEgAiADIAAoAgAoAhwRBgALUgEBfyAAKAIEIQQgACgC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BiABKAJIIAEoAkxGDQIgASABQUBrQeUTEM4GKQIANwMAIAFByABqIAEQ2gYEQCABQThqIAFByABqQQkQqwcgAUIANwIwIAEoAjghAiABIAA2AiAgACgCACEDIAFBAToAKCABIAM2AiQgACACNgIAIAEoAjwhAiABIABBBGo2AhAgACgCBCEDIAFBAToAGCABIAM2AhQgACACNgIEIAFBCGogABDiBiABIAEpAwg3AzAgAS0AGARAIAEoAhAgASgCFDYCAAsgAS0AKARAIAEoAiAgASgCJDYCAAtBACECIAEoAjAgASgCNEYNAyABIAAQ6wYiAjYCICACRQ0CIwBBEGsiAyQAIABBmANqQRQQ9AYhACABKAIgIQQgAyABKQIwIgY3AwAgAyAGNwMIIABBAToAByAAQQE6AAYgAEEBOgAFIABBCjoABCAAQcz9ATYCACAAIgIgBDYCCCACQcS0AjYCACACIAMpAgA3AgwgA0EQaiQADAMLIAFBADYCICAAKAIAIgMgACgCBEcEfyADLAAABUEAC0H/AXFByQBGBEAgASAAQQAQ5wYiAzYCICADRQ0DCyABIAAQ6wYiAjYCECACBH8jAEEQayICJAAgAEGYA2pBGBD0BiEAIAEoAhAhAyACIAEpAkgiBjcDCCABKAIgIQQgAiAGNwMAIABBAToAByAAQQE6AAYgAEEBOgAFIABBAjoABCAAQcz9ATYCACAAIAM2AgggAEGwtQI2AgAgAikCACEGIAAgBDYCFCAAIAY3AgwgAkEQaiQAIAAFQQALIQIMAgsgASAAEPoGIgM2AiAgASAAENQGIgI2AhAgAkUNACADRQ0BIABBmANqQRAQ9AYhACABKAIgIQQgASgCECIDLQAFIQIgAy0ABiEFIAAgAy0ABzoAByAAIAU6AAYgACACOgAFIABBAzoABCAAQcz9ATYCACAAIgIgAzYCDCACIAQ2AgggAkGgtgI2AgAMAQtBACECCyABQdAAaiQAIAILkAIBAX8gACgCACAAQQxqRiECAkAgASgCACABQQxqRgRAIAJFBEAgACgCABCGAyAAIABBHGo2AgggACAAQQxqIgI2AgQgACACNgIACyABKAIAIAEoAgQgACgCABDzBiAAIAAoAgAgASgCBCABKAIAa0ECdUECdGo2AgQMAQsgAgRAIAAgASgCADYCACAAIAEo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ASADKALAAiEEIABBAToAByAAQQE6AAYgAEEBOgAFIABBMToABCAAQcz9ATYCACAAIgIgBDYCDCACIAE2AgggAkHsmgI2AgAMEQsgACABQQJqNgIAIABBCGoiASgCBCABKAIAa0ECdSEEA0AgAEHFABDRBkUEQCADIAAQlwciBTYC4AQgBUUNEiABIANB4ARqEN4GDAELCyADQeAEaiAAIAQQ3wYjAEEQayIBJAAgAEGYA2pBFBD0BiEAIAEgAykC4AQiBzcDACABIAc3AwggAEEAIAEQ2AchAiABQRBqJAAMEAsCQAJAAkACQCABLAABIgRB8wBrDgIBAwALIARB0wBGDQEgBEHlAEcNEiAAIAFBAmo2AgAgAyADQYgEakHjIhDOBikCADcDeCAAIANB+ABqEJIHIQIMEgsgACABQQJqNgIAIAMgA0GABGpB0yMQzgYpAgA3A4ABIAAgA0GAAWoQkgchAgwRCyAAIAFBAmo2AgAgAyADQfgDakHiIhDOBikCADcDiAEgACADQYgBahCSByECDBALIAAgAUECajYCACADIANB8ANqQdojEM4GKQIANwOQASAAIANBkAFqEJIHIQIMDwsCQAJAAkACQAJAAkAgASwAASIEQekAaw4FARQUAwUACwJAIARByQBrDgQCFBQEAAsgBEHjAEcNEyAAIAFBAmo2AgAjAEEQayIBJAAgASAAENQGIgI2AgwCfwJAIAJFDQAgASAAEPAGIgI2AgggAkUNACABIABBARDSBkEAIABBxQAQ0QZFDQEaIwBBEGsiAiQAIABBmANqQRgQ9AYhACABKAIIIQQgASgCDCEFIAIgASkCACIHNwMAIAIgBzcDCCAAQQE6AAcgAEEBOgAGIABBAToABSAAQT86AAQgAEHM/QE2AgAgACAENgIMIAAgBTYCCCAAQZyeAjYCACAAIAIpAgA3AhAgAkEQaiQAIAAMAQtBAAshAiABQRBqJAAMEwsgACABQQJqNgIAIAMgA0HoA2pB7SQQzgYpAgA3A5gBIAAgA0GYAWoQkgchAgwSCyAAIAFBAmo2AgAgAyADQeADakH5IhDOBikCADcDoAEgACADQaABahCSByECDBELIAAgAUECajYCACADIANB2ANqQaklEM4GKQIANwOoASAAIANBqAFqEJIHIQIMEAsgACABQQJqNgIAIAMgA0HQA2pBjyMQzgYpAgA3A7ABIAAgA0GwAWoQkgchAgwPCyAAIAFBAmo2AgAgAEHfABDRBgRAIAMgA0HIA2pB7CQQzgYpAgA3A7gBIAAgA0G4AWoQkwchAgwPCyADIAAQ8AYiAjYC4AQgAkUNDSAAIANB4ARqQewkEJgHIQIMDgsCQAJAAkACQAJAAkAgASwAASIEQeEAaw4HARMTEwITAwALIARB9ABrDgUDEhIABBILIwBB8ABrIgEkACABIAFB4ABqQdMSEM4GKQIANwMgIAEgACABQSBqEM8GOgBvIAEgACgCBCAAKAIAIgRrQQFLBH8gBCwAAQVBAAtB/wFxQeEARjoAXyABIAFB0ABqQaEQEM4GKQIANwMYAkAgACABQRhqEM8GRQRAIAEgAUHIAGpB6R0QzgYpAgA3AxAgACABQRBqEM8GRQ0BCyAAQQhqIgQiAigCBCACKAIAa0ECdSECAkADQCAAQd8AENEGRQRAIAEgABDwBiIFNgJAIAVFDQIgBCABQUBrEN4GDAELCyABQUBrIAAgAhDfBiABIAAQ1AYiBTYCPEEAIQIgBUUNASABIAFBMGpBshgQzgYpAgA3AwggACABQQhqEM8GBEAgBCgCBCAEKAIAa0ECdSEFA0AgAEHFABDRBkUEQCABIAAQ8AYiBjYCKCAGRQ0EIAQgAUEoahDeBgwBCwsgAUEoaiICIAAgBRDfBiAAIAFBQGsgAUE8aiACIAFB7wBqIAFB3wBqEKYHIQIMAgsgAEHFABDRBkUNASAAIAFBQGsgAUE8agJ/IAFBKGoiAEIANwIAIAALIAFB7wBqIAFB3wBqEKYHIQIMAQtBACECCyABQfAAaiQADBELIAAgAUECajYCACADIANBwANqQbAjEM4GKQIANwPAASAAIANBwAFqEJIHIQIMEAsgACABQQJqNgIAIAMgA0G4A2pB7SQQzgYpAgA3A8gBIAAgA0HIAWoQkwchAgwPCyAAIAFBAmo2AgAgAyADQbADakG4JxDOBikCADcD0AEgACADQdABahCTByECDA4LIAAgAUECajYCACADIAAQ8AYiAjYC4AQgAkUNDCMAQSBrIgEkACAAQZgDakEcEPQGIQAgAUEYakGOJhDOBiECIAMoAuAEIQQgAUEQakHgJRDOBiEFIAEgAikCADcDCCABIAUpAgA3AwAgACABQQhqIAQgARDdByECIAFBIGokAAwNCyABLAABIgRB7gBrDgUAAQwMAgMLIAAQmQchAgwLCyAAIAFBAmo2AgAgAyADQagDakHcDhDOBikCADcD2AEgACADQdgBahCSByECDAoLIAAgAUECajYCACADIANBoANqQecOEM4GKQIANwPgASAAIANB4AFqEJIHIQIMCQsgBEHSAEcNCCAAIAFBAmo2AgAgAyADQZgDakGVIhDOBikCADcD6AEgACADQegBahCSByECDAgLAkACQAJAAkACQAJAIAEsAAEiBEHsAGsOCQEADQ0DDQ0EBQILIAAgAUECajYCACADIANBkANqQaAlEM4GKQIANwPwASAAIANB8AFqEJIHIQIMDAsgACABQQJqNgIAIAMgA0GIA2pBjCUQzgYpAgA3A/gBIAAgA0H4AWoQkgchAgwLCyAEQcwARw0KIAAgAUECajYCACADIANBgANqQYQjEM4GKQIANwOAAiAAIANBgAJqEJIHIQIMCgsgACABQQJqNgIAIABB3wAQ0QYEQCADIANB+AJqQYslEM4GKQIANwOIAiAAIANBiAJqEJMHIQIMCgsgAyAAEPAGIgI2AuAEIAJFDQggACADQeAEakGLJRCYByECDAkLIAAgAUECajYCACADIANB8AJqQYwlEM4GKQIANwOQAiAAIANBkAJqEJMHIQIMCAsgACABQQJqNgIAIAMgABDwBiICNgLgBCACRQ0GIAMgABDwBiICNgLAAiACRQ0GIAAgA0HgBGpBrCAgA0HAAmoQlgchAgwHCyABLQABQfUARw0GIAAgAUECajYCACADIAAQ8AYiAjYC4AQgAkUNBSADIAAQ8AYiAjYCwAIgAkUNBSADIAAQ8AYiAjYC7AIgAkUNBSAAQZgDakEUEPQGIQAgAygC4AQhASADKALAAiEEIAMoAuwCIQUgAEEBOgAHIABBAToABiAAQQE6AAUgAEEzOgAEIABBzP0BNgIAIAAiAiAFNgIQIAIgBDYCDCACIAE2AgggAkHQoQI2AgAMBgsCQAJAIAEsAAEiBEHNAEcEQCAEQdMARg0CIARB8wBGDQEgBEHtAEcEQCAEQeMARw0JIAAgAUECajYCACADIAAQ1AYiAjYC4AQgAkUNCCADIAAQ8AYiAjYCwAIgAkUNCCMAQRBrIgEkACAAQZgDakEYEPQGIQAgAUEIakGH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ACgCACgCFBEAAAsgAkEQaiQACxYAIAAgASgCDCIAIAAoAgAoAhgRAAALjgEBA38jAEEQayIEJAAgAC0AEEUEQCAEQQhqIgIgAEEQajYCACAALQAQIQMgAkEBOgAFIAIgAzoABCAAQQE6ABAgAiEDAn8gACgCDCICLQAFIgBBAkcEQCAARQwBCyACIAEgAigCACgCABEDAAshAiADLQAFBEAgAygCACADLQAEOgAACwsgBEEQaiQAIAILjgEBA38jAEEQayIEJAAgAC0AEEUEQCAEQQhqIgIgAEEQajYCACAALQAQIQMgAkEBOgAFIAIgAzoABCAAQQE6ABAgAiEDAn8gACgCDCICLQAGIgBBAkcEQCAARQwBCyACIAEgAigCACgCBBEDAAshAiADLQAFBEAgAygCACADLQAEOgAACwsgBEEQaiQAIAILjgEBA38jAEEQayIEJAAgAC0AEEUEQCAEQQhqIgIgAEEQajYCACAALQAQIQMgAkEBOgAFIAIgAzoABCAAQQE6ABAgAiEDAn8gACgCDCICLQAHIgBBAkcEQCAARQwBCyACIAEgAigCACgCCBEDAAshAiADLQAFBEAgAygCACADLQAEOgAACwsgBEEQaiQAIAILeQEDfyMAQRBrIgQkACAALQAQRQRAIARBCGoiAyAAQRBqNgIAIAAtABAhAiADQQE6AAUgAyACOgAEIABBAToAECADIQIgACgCDCIAIAEgACgCACgCDBEDACEAIAItAAUEQCACKAIAIAItAAQ6AAALCyAEQRBqJAAgAAt1AQN/IwBBEGsiBCQAIAAtABBFBEAgBEEIaiIDIABBEGo2AgAgAC0AECECIANBAToABSADIAI6AAQgAEEBOgAQIAMhAiAAKAIMIgAgASAAKAIAKAIQEQAAIAItAAUEQCACKAIAIAItAAQ6AAALCyAEQRBqJAALdQEDfyMAQRBrIgQkACAALQAQRQRAIARBCGoiAyAAQRBqNgIAIAAtABAhAiADQQE6AAUgAyACOgAEIABBAToAECADIQIgACgCDCIAIAEgACgCACgCFBEAACACLQAFBEAgAigCACACLQAEOgAACwsgBEEQaiQAC/8BAQN/IwBBQGoiASQAIAEgAUE4akHlHhDOBikCADcDGAJAIAAgAUEYahDPBgRAIABBzhIQ4QYhAgwBCyABIAFBMGpByhMQzgYpAgA3AxAgACABQRBqEM8GBEAgABD6BhogAUEoaiAAQQAQ0gYgAEHfABDRBkUNASAAIAFBKGoQngchAgwBCyABIAFBIGpBsx8QzgYpAgA3AwggACABQQhqEM8GRQ0AIAFBKGoiAyAAQQAQ0gYgAygCACADKAIERg0AIABB8AAQ0QZFDQAgABD6BhogAUEoaiAAQQAQ0gYgAEHfABDRBkUNACAAIAFBKGoQngchAgsgAUFAayQAIAIL0AECA38BfiMAQRBrIgMkACADIAAQ8AYiAjYCDAJ/AkAgAkUNACADIAAQ8AYiAjYCCCACRQ0AIwBBEGsiAiQAIABBmANqQRgQ9AYhACADKAIMIQQgAiABKQIAIgU3AwggAygCCCEBIAIgBTcDACAAQQE6AAcgAEEBOgAGIABBAToABSAAQTA6AAQgAEHM/QE2AgAgACAENgIIIABB+JACNgIAIAIpAgAhBSAAIAE2AhQgACAFNwIMIAJBEGokACAADAELQQALIQAgA0EQaiQAIAALqgECAn8BfiMAQRBrIgMkACADIAAQ8AYiAjYCDCACBH8jAEEQayICJAAgAEGYA2pBFBD0BiEAIAIgASkCACIENwMIIAMoAgwhASACIAQ3AwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEE8OgAEIABBzP0BNgIAIABB4JECNgIAIAIpAgAhBCAAIAE2AhAgACAENwIIIAJBEGokACAABUEACyEAIANBEGokACAAC34CAX8BfiMAQRBrIgMkACAAQZgDakEUEPQGIQAgASgCACEBIAMgAikCACIENwMAIAMgBDcDCCAAQQE6AAcgAEEBOgAGIABBAToABSAAQTk6AAQgAEHM/QE2AgAgACABNgIIIABBrJMCNgIAIAAgAykCADcCDCADQRBqJAAgAAtpACAAQZgDakEQEPQGIQAgASgCACEBIAItAAAhAiADLQAAIQMgAEEBOgAHIABBAToABiAAQQE6AAUgAEE7OgAEIABBzP0BNgIAIAAgAzoADSAAIAI6AAwgACABNgIIIABB/JQCNgIAIAALVAEBfyMAQRBrIgQkACAAQZgDakEYEPQGIQAgASgCACEBIARBCGogAhDOBiECIAMoAgAhAyAEIAIpAgA3AwAgACABIAQgAxDTByEAIARBEGokACAAC8kDAQR/IwBBEGsi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AgggAEGUmQI2AgAgAAtqACAAQZgDakEUEPQGIQAgASgCACEBIAIoAgAhAiADLQAAIQMgAEEBOgAHIABBAToABiAAQQE6AAUgAEHLADoABCAAQcz9ATYCACAAIAM6ABAgACACNgIMIAAgATYCCCAAQdybAjYCACAAC78BAgF/An4jAEEgayIGJAAgAEGYA2pBIBD0BiEAIAYgASkCACIHNwMYIAIoAgAhASAGIAMpAgAiCDcDECAFLQAAIQIgBC0AACEDIAYgBzcDCCAGIAg3AwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEE6OgAEIABBzP0BNgIAIABBgKACNgIAIAYpAgghByAAIAE2AhAgACAHNwIIIAYpAgAhByAAIAI6AB0gACADOgAcIAAgBzcCFCAGQSBqJAAgAAtYAQJ/IwBBEGsiAiQAIAAgATYCACAAIAEoAtACIAEoAswCa0ECdTYCBCAAQQhqENgGIQEgACgCACEDIAIgATYCDCADQcwCaiACQQxqEN4GIAJBEGokACAAC4YGAgV/AX4jAEGgAWsiASQAIAEgADYCmAEgASABQZABakHQDxDOBikCADcDKAJAIAAgAUEoahDPBgRAIAEgAUGYAWpBABCxByIDNgJIIANFDQEgAEGYA2pBDBD0BiEAIAEoAkghAyAAQQE6AAcgAEEBOgAGIABBADoABSAAQR06AAQgAEHM/QE2AgAgACICIAM2AgggAkGgiAI2AgAMAQsgASABQYgBakHVFhDOBikCADcDIAJAIAAgAUEgahDPBgRAIAEgAUGYAWpBARCxByICNgJIIAJFDQEgASAAENQGIgI2AjggAkUNASAAQZgDakEQEPQGIQAgASgCSCEDIAEoAjghBCAAQQE6AAcgAEEBOgAGIABBADoABSAAQR46AAQgAEHM/QE2AgAgACICIAQ2AgwgAiADNgIIIAJBlIkCNgIADAILIAEgAUGAAWpBwhIQzgYpAgA3AxggACABQRhqEM8GBEAgASABQZgBakECELEHIgI2AnwgAkUNASAAQQhqIgIoAgQgAigCAGtBAnUhAyABQcgAaiAAEKcHIQQCfwJAA0ACQCABIAFBQGtB9B8QzgYpAgA3AwggACABQQhqEM8GDQAgASAAEKgHIgU2AjggBUUNAiACIAFBOGoQ3gYMAQsLIAFBOGogACADEN8G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AEGAAWsiAiQAIABBDGoiBCACQfgAakGLIhDOBhCbBwRAIAIgAkHwAGpByyYQzgYpAgA3AzggASACQThqEPcGGgsgAiACQegAakHLJhDOBikCADcDMCABIAJBMGoQ9wYhASAAKAIIIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiACQeAAakGBKxDOBikCADcDKCABIAJBKGoQ9wYhASACIAApAgwiBTcDICACIAU3A1ggASACQSBqEPcGIQEgAiACQdAAakHKJhDOBikCADcDGCABIAJBGGoQ9wYhASAAKAIUIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAiACQcgAakHgJRDOBikCADcDECABIAJBEGoQ9wYhACAEIAJB+ABqQYsiEM4GEJsHBEAgAiACQUBrQeAlEM4GKQIANwMIIAAgAkEIahD3BhoLIAJBgAFqJAALnQECAX8BfiMAQTBrIgIkACACIAApAggiAzcDECACIAM3AyggASACQRBqEPcGIQEgAiACQSBqQcsmEM4GKQIANwMIIAEgAkEIahD3BiEBIAAoAhAiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACIAJBGGpB4CUQzgYpAgA3AwAgASACEPcGGiACQTBqJAALUAEBfiAAQQE6AAcgAEEBOgAGIABBAToABSAAQTc6AAQgAEHM/QE2AgAgAEHIkgI2AgAgASkCACEEIAAgAzYCFCAAIAI2AhAgACAENwIIIAALtgECAn8BfiMAQUBqIgIkACACIAApAggiBDcDGCACIAQ3AzggASACQRhqEPcGIQEgAiACQTBqQdojEM4GKQIANwMQIAEgAkEQahD3BiEBIAAoAhAiAyABIAMoAgAoAhARAAAgAiACQShqQf0lEM4GKQIANwMIIAEgAkEIahD3BiEBIAAoAhQiACABIAAoAgAoAhARAAAgAiACQSBqQeAlEM4GKQIANwMAIAEgAhD3BhogAkFAayQAC4QBAQJ/IwBBIGsiAiQAIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBGGpByyYQzgYpAgA3AwggAEEMaiABIAJBCGoQ9wYiABC6ByACIAJBEGpB4CUQzgYpAgA3AwAgACACEPcGGiACQSBqJAALowEBAn8jAEEwayICJAAgAiACQShqQcsmEM4GKQIANwMQIAEgAkEQahD3BiEBIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBIGpBiyYQzgYpAgA3AwggAEEMaiABIAJBCGoQ9wYiABC6ByACIAJBGGpB4CUQzgYpAgA3AwAgACACEPcGGiACQTBqJAALqgEBAX8jAEEwayICJAAgAC0ADARAIAIgAkEoakHyIxDOBikCADcDECABIAJBEGoQ9wYaCyACIAJBIGpBwxwQzgYpAgA3AwggASACQQhqEPcGIQEgAC0ADQRAIAIgAkEYakGSKhDOBikCADcDACABIAIQ9wYaCyAAKAIIIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAkEwaiQAC00AIABBmANqQQwQ9AYhACABKAIAIQEgAEEBOgAHIABBAToABiAAQQE6AAUgAEEEOgAEIABBzP0BNgIAIAAgATYCCCAAQbSXAjYCACAAC0QBAX8jAEEQayICJAAgAiACQQhqQcwOEM4GKQIANwMAIAEgAhD3BiEBIAAoAggiACABIAAoAgAoAhARAAAgAkEQaiQAC14BAX8jAEEQayICJAAgAiACQQhqQc8nEM4GKQIANwMAIAEgAhD3BiEBIAAoAggiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACQRBqJAALXgEBfyMAQRBrIgIkACACIAJBCGpBhCsQzgYpAgA3AwAgASACEPcGIQEgACgCCCIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAJBEGokAAteAQF/IwBBEGsiAiQAIAIgAkEIakHyIxDOBikCADcDACABIAIQ9wYhASAAKAIIIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAkEQaiQACxYAIAAgASgCCCIAIAAoAgAoAhgRAAALUAEBfiAAQQE6AAcgAEEBOgAGIABBAToABSAAQTQ6AAQgAEHM/QE2AgAgACABNgIIIABBhJoCNgIAIAIpAgAhBCAAIAM2AhQgACAENwIMIAALjgECAn8BfiMAQRBrIgIkACAAKAIIIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiAAKQIMIgQ3AwAgAiAENwMIIAEgAhD3BiEBIAAoAhQiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACQRBqJAALyQEBAn8jAEEwayICJAAgAiACQShqQcsmEM4GKQIANwMQIAEgAkEQahD3BiEBIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBIGpBvh4QzgYpAgA3AwggASACQQhqEPcGIQEgACgCDCIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAIgAkEYakGuHhDOBikCADcDACABIAIQ9wYaIAJBMGokAAv3AQECfyMAQRBrIgMkAAJAIAAtABAEQCABQdsAEM0GIAAoAggiAiABIAIoAgAoAhARAAAgAi0ABUEBRwRAIAIgASACKAIAKAIUEQAACyABQd0AEM0GDAELIAFBLhDNBiAAKAIIIgIgASACKAIAKAIQEQAAIAItAAVBAUcEQCACIAEgAigCACgCFBEAAAsLIAAoAgwiAi0ABEHLAGtB/wFxQQJPBEAgAyADQQhqQZYqEM4GKQIANwMAIAEgAxD3BhogACgCDCECCyACIAEgAigCACgCEBEAACACLQAFQQFHBEAgAiABIAIoAgAoAhQRAAALIANBEGokAAuCAgECfyMAQSBrIgMkACABQdsAEM0GIAAoAggiAiABIAIoAgAoAhARAAAgAi0ABUEBRwRAIAIgASACKAIAKAIUEQAACyADIANBGGpB+CoQzgYpAgA3AwggASADQQhqEPcGIQEgACgCDCICIAEgAigCACgCEBEAACACLQAFQQFHBEAgAiABIAIoAgAoAhQRAAALIAFB3QAQzQYgACgCECICLQAEQcsAa0H/AXFBAk8EQCADIANBEGpBlioQzgYpAgA3AwAgASADEPcGGiAAKAIQIQILIAIgASACKAIAKAIQEQAAIAItAAVBAUcEQCACIAEgAigCACgCFBEAAAsgA0EgaiQAC0QAIABBAToAByAAQQE6AAYgAEEBOgAFIABBwAA6AAQgAEHM/QE2AgAgACABNgIIIABBsJ0CNgIAIAAgAikCADcCDCAAC1EBAX8gACgCCCICBEAgAiABIAIoAgAoAhARAAAgAi0ABUEBRwRAIAIgASACKAIAKAIUEQAACwsgAUH7ABDNBiAAQQxqIAEQugcgAUH9ABDNBgvJAQECfyMAQTBrIgIkACACIAJBKGpByyYQzgYpAgA3AxAgASACQRBqEPcGIQEgACgCCCIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAIgAkEgakGLJhDOBikCADcDCCABIAJBCGoQ9wYhASAAKAIMIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAiACQRhqQeAlEM4GKQIANwMAIAEgAhD3BhogAkEwaiQAC50BAgJ/AX4jAEEwayICJAAgAiACQShqQcsmEM4GKQIANwMQIAEgAkEQahD3BiEBIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBIGpB4CUQzgYpAgA3AwggASACQQhqEPcGIQEgAiAAKQIMIgQ3AwAgAiAENwMYIAEgAhD3BhogAkEwaiQAC9YCAQJ/IwBB8ABrIgIkACAALQAcBEAgAiACQegAakHNJxDOBikCADcDMCABIAJBMGoQ9wYaCyACIAJB4ABqQa0QEM4GKQIANwMoIAEgAkEoahD3BiEBIAAtAB0EQCACIAJB2ABqQa0eEM4GKQIANwMgIAEgAkEgahD3BhoLIAFBIBDNBiAAQQhqIgMoAgQEQCACIAJB0ABqQcsmEM4GKQIANwMYIAMgASACQRhqEPcGIgMQugcgAiACQcgAakHgJRDOBikCADcDECADIAJBEGoQ9wYaCyAAKAIQIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAEEUaiIAKAIEBEAgAiACQUBrQcsmEM4GKQIANwMIIAAgASACQQhqEPcGIgAQugcgAiACQThqQeAlEM4GKQIANwMAIAAgAhD3BhoLIAJB8ABqJAALUwEBfiAAQQE6AAcgAEEBOgAGIABBAToABSAAQTY6AAQgAEHM/QE2AgAgAEHkoAI2AgAgASkCACEEIAAgAjYCECAAIAQ3AgggACADKQIANwIUIAALfgICfwF+IwBBIGsiAiQAIAIgACkCCCIENwMIIAIgBDcDGCABIAJBCGoQ9wYhASAAKAIQIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiAAKQIUIgQ3AwAgAiAENwMQIAEgAhD3BhogAkEgaiQAC5YCAQJ/IwBBQGoiAiQAIAIgAkE4akHLJhDOBikCADcDGCABIAJBGGoQ9wYhASAAKAIIIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiACQTBqQbUmEM4GKQIANwMQIAEgAkEQahD3BiEBIAAoAgwiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBKGpBuyYQzgYpAgA3AwggASACQQhqEPcGIQEgACgCECIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAIgAkEgakHgJRDOBikCADcDACABIAIQ9wYaIAJBQGskAAvTAgECfyMAQeAAayICJAAgACgCDCIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAIgAkHYAGpB1iMQzgYpAgA3AyAgASACQSBqEPcGIQMgACgCCCIBIAMgASgCACgCEBEAACABLQAFQQFHBEAgASADIAEoAgAoAhQRAAALIAIgAkHQAGpBwScQzgYpAgA3AxggAyACQRhqEPcGIQEgAgJ/IABBEGoiACgCACAAKAIERgRAIAJByABqQcQkEM4GDAELIAAoAgAtAABB7gBGBEAgAiACQUBrQe0kEM4GKQIANwMQIAEgAkEQahD3BhogAkE4aiIDIABBARCrByADDAELIAIgACkCADcDMCACQTBqCykCADcDCCABIAJBCGoQ9wYhACACIAJBKGpBiyIQzgYpAgA3AwAgACACEPcGGiACQeAAaiQAC2ABAX8jAEEwayICJAAgAiACQShqQYAmEM4GKQIANwMIIAEgAkEIahD3BiEBIAJBGGogACgCCBDEByABEMUHIAIgAkEQakHgJRDOBikCADcDACABIAIQ9wYaIAJBMGokAAsMACAAQQhqIAEQugcLXgEBfyMAQRBrIgIkACACIAJBCGpBuicQzgYpAgA3AwAgASACEPcG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QQJHBEAgBEUMAQsgAyABIAMoAgAoAggRAwALRQ0BCyACQShqQcsmEM4GDAELIAJBIGpBjisQzgYLKQIANwMQIAEgAkEQahD3BiEBIAAoAggiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACIAJBGGpBpCUQzgYpAgA3AwggASACQQhqEPcGGiACQTBqJAALnwEBA38jAEEQayIDJAACQAJ/IAAoAgwiAi0ABiIEQQJHBEAgBEUMAQsgAiABIAIoAgAoAgQRAwALRQRAAn8gACgCDCICLQAHIgRBAkcEQCAERQwBCyACIAEgAigCACgCCBEDAAtFDQELIAMgA0EIakHgJRDOBikCADcDACABIAMQ9wYaCyAAKAIMIgAgASAAKAIAKAIUEQAAIANBEGokAAtlAgF/AX4jAEEQayICJAAgAiAAKQIIIgM3AwAgAiADNwMIIAEgAhD3BiIBQSAQzQYgACgCECIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAJBEGokAAstAQF/An8gACgCCCIALQAFIgJBAkcEQCACRQwBCyAAIAEgACgCACgCABEDAAsL/gICA38BfiMAQeAAayICJAAgAgJ/AkAgACgCCCIDLQAEQQpGBEAgAxCQCCEEIAAoAgghAyAEDQELIAMgASADKAIAKAIQEQAAAn8gACgCCCIDLQAGIgRBAkcEQCAERQwBCyADIAEgAygCACgCBBEDAAsEQCACIAJB2ABqQY4rEM4GKQIANwMoIAEgAkEoahD3BhoLAkACfyAAKAIIIgMtAAYiBEECRwRAIARFDAELIAMgASADKAIAKAIEEQMAC0UEQAJ/IAAoAggiAC0AByIDQQJHBEAgA0UMAQsgACABIAAoAgAoAggRAwALRQ0BCyACIAJB0ABqQcsmEM4GKQIANwMgIAEgAkEgahD3BhoLIAJByABqQaklEM4GDAELIAIgAkFAa0HHIxDOBikCADcDGCABIAJBGGoQ9wYhACACIAMpAgwiBTcDECACIAU3AzggACACQRBqEPcGGiACQTBqQYsiEM4GCykCADcDCCABIAJBCGoQ9wYaIAJB4ABqJAALRAECfyMAQRBrIgIkACAAKAIIIgAtAARBB0YEQCACQQhqIgEgACkCCDcCACABIAJB7REQzgYQmwchAQsgAkEQaiQAIAELuwEBA38jAEEQayIDJAACQAJAAn8gACgCCCICLQAEQQpGBEAgAhCQCA0DIAAoAgghAgsgAi0ABiIEQQJHBEAgBEUMAQsgAiABIAIoAgAoAgQRAwALRQRAAn8gACgCCCICLQAHIgRBAkcEQCAERQwBCyACIAEgAigCACgCCBEDAAtFDQELIAMgA0EIakHgJRDOBikCADcDACABIAMQ9wYaCyAAKAIIIgAgASAAKAIAKAIUEQAACyADQRBqJAAL7gIBA38jAEFAaiICJAAgAC0AEEUEQCACQThqIgMgAEEQajYCACAALQAQIQQgA0EBOgAFIAMgBDoABCAAQQE6ABAgAyEEIAJBMGogACABEJMIIAIoAjQiAARAIAAgASAAKAIAKAIQEQAAAn8gAigCNCIDLQAGIgBBAkcEQCAARQwBCyADIAEgAygCACgCBBEDAAsEQCACIAJBKGpBjisQzgYpAgA3AxAgASACQRBqEPcGGgsCQAJ/IAIoAjQiAy0ABiIAQQJHBEAgAEUMAQsgAyABIAMoAgAoAgQRAwALRQRAAn8gAigCNCIDLQAHIgBBAkcEQCAARQwBCyADIAEgAygCACgCCBEDAAtFDQELIAIgAkEgakHLJhDOBikCADcDCCABIAJBCGoQ9wYaCyACIAJBGGpB8yZB9yYgAigCMBsQzgYpAgA3AwAgASACEPcGGgsgBC0ABQRAIAQoAgAgBC0ABDoAAAsLIAJBQGskAAvFAQEDfyMAQTBrIgUkACAAIAEoAgw2AgAgACABKAIINgIEIABBBGohBCAFENgGIQECQANAIAQoAgAiAyACIAMoAgAoAgwRAwAiAy0ABEEMRw0BIAAgAygCCDYCBCAAIANBDGoiAyAAIAMoAgAgACgCAEgbKAIANgIAIAEgBBDeBiABKAIEIAEoAgBrQQJ1IgNBAkkNACAEKAIAIAEoAgAgA0EBa0EBdkECdGooAgBHDQALIARBADYCAAsgARDWBiAFQTBqJAAL/QEBA38jAEEgayICJAAgAC0AEEUEQCACQRhqIgMgAEEQajYCACAALQAQIQQgA0EBOgAFIAMgBDoABCAAQQE6ABAgAyEEIAJBEGogACABEJMIIAIoAhQiAARAAkACfyAALQAGIgNBAkcEQCADRQwBCyAAIAEgACgCACgCBBEDAAtFBEACfyACKAIUIgMtAAciAEECRwRAIABFDAELIAMgASADKAIAKAIIEQMAC0UNAQsgAiACQQhqQeAlEM4GKQIANwMAIAEgAhD3BhoLIAIoAhQiACABIAAoAgAoAhQRAAALIAQtAAUEQCAEKAIAIAQtAAQ6AAALCyACQSBqJAALQwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEEFOgAEIABBzP0BNgIAIAAgATYCCCAAQeS9AjYCACAAIAIpAgA3AgwgAAtFAgJ/AX4jAEEQayICJAAgACgCCCIDIAEgAygCACgCEBEAACACIAApAgwiBDcDACACIAQ3AwggASACEPcGGiACQRBqJAALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKcQDCAFpwsZACABIAIgA60gBK1CIIaEIAUgBiAAER0ACxkAIAEgAiADIAQgBa0gBq1CIIaEIAAREgALIwAgASACIAMgBCAFrSAGrUIghoQgB60gCK1CIIaEIAARGQALJQAgASACIAMgBCAFIAatIAetQiCGhCAIrSAJrUIghoQgABEaAAsLqKICNQBBhAgLpkc0BgAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAATjRDR0FMMThBcnJfZmFjZV9pbmRleF9tYXBJTlNfMTNBcnJhbmdlbWVudF8ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzE2QXJyX2RlZmF1bHRfZGNlbElTOF9FRUVFRUUATjRDR0FMMTJBcnJfb2JzZXJ2ZXJJTlNfMTNBcnJhbmdlbWVudF8ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzE2QXJyX2RlZmF1bHRfZGNlbElTOF9FRUVFRUUAAABAfAAAmgUAAGh8AAAEBQAALAYAAAAAAAAsBgAARAAAAEUAAAAHAAAARgAAAAkAAABHAAAACwAAAAwAAAANAAAASAAAAA8AAABJAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAAEoAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAAEsAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAAb3BlcmF0b3J+AHsuLi59AG9wZXJhdG9yfHwAb3BlcmF0b3J8AGluZmluaXR5AEZlYnJ1YXJ5AEphbnVhcnkAIGltYWdpbmFyeQBKdWx5AFRodXJzZGF5AFR1ZXNkYXkAV2VkbmVzZGF5AFNhdHVyZGF5AFN1bmRheQBNb25kYXkARnJpZGF5AE1heQBUeQAlbS8lZC8leQAgY29tcGxleABEeAAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AHRocm93AF9fbmV4dF9wcmltZSBvdmVyZmxvdwBudwBvcGVyYXRvciBuZXcARHcATm92AGR2AGN2AER2AFRodQBUdQB1bnN1cHBvcnRlZCBsb2NhbGUgZm9yIHN0YW5kYXJkIGlucHV0AEF1Z3VzdAAgY29uc3QAY29uc3RfY2FzdAByZWludGVycHJldF9jYXN0AHN0YXRpY19jYXN0AGR5bmFtaWNfY2FzdAB1bnNpZ25lZCBzaG9ydABub2V4Y2VwdAB1bnNpZ25lZCBpbnQAbHQAZ3QAc3RydWN0ACByZXN0cmljdABvYmpjX29iamVjdABPY3QAZmxvYXQAX0Zsb2F0AFNhdABzdGQ6Om51bGxwdHJfdAB3Y2hhcl90AGNoYXI4X3QAY2hhcjE2X3QAY2hhcjMyX3QAVXQAVHQAU3QAcnMAbHMAdGhpcwBncwBkcwBUcwBudWxscHRyAHNyAEFwcgB2ZWN0b3IAc3RkOjphbGxvY2F0b3IAT2N0b2JlcgBOb3ZlbWJlcgBTZXB0ZW1iZXIARGVjZW1iZXIAdW5zaWduZWQgY2hhcgBpb3NfYmFzZTo6Y2xlYXIATWFyAGVxAGZwAFNlcABUcAAlSTolTTolUyAlcABhdXRvAG9iamNwcm90bwBvbwBlbwBEbwBTdW4ASnVuAHlwdG4AYXNzZXJ0aW9uAHNjYW5iZWFtIHRyZWUgaW5zZXJ0aW9uAFNUIGluc2VydGlvbgBMTVQgaW5zZXJ0aW9uAElUIGluc2VydGlvbgBzdGQ6OmV4Y2VwdGlvbgBjb250b3VyIGFkZGl0aW9uAGNvbnRvdXIgaG9sZSBhZGRpdGlvbgBhc3NlcnRpb24gdmlvbGF0aW9uAEJvdW5kaW5nIGJveCBjcmVhdGlvbgB0cmlzdHJpcCB2ZXJ0ZXggY3JlYXRpb24AdHJpc3RyaXAgbGlzdCBjcmVhdGlvbgBzYnQgY3JlYXRpb24AdHJpc3RyaXAgY3JlYXRpb24Ab3ZlcmxhcCB0YWJsZSBjcmVhdGlvbgBlZGdlIHRhYmxlIGNyZWF0aW9uAHRyaXN0cmlwIG5vZGUgY3JlYXRpb24AdW5pb24ATW9uAGRuAG5hbgBKYW4AVG4AZW51bQBybQBjbQBiYXNpY19pb3N0cmVhbQBzdGQ6Omlvc3RyZWFtAGJhc2ljX29zdHJlYW0Ac3RkOjpvc3RyZWFtAGJhc2ljX2lzdHJlYW0Ac3RkOjppc3RyZWFtAEp1bABwbABib29sAFJlZmVyIHRvIHRoZSBidWctcmVwb3J0aW5nIGluc3RydWN0aW9ucyBhdCBodHRwczovL3d3dy5jZ2FsLm9yZy9idWdfcmVwb3J0Lmh0bWwAdWxsAEFwcmlsAHN0cmluZyBsaXRlcmFsAFVsAEZyaQBwaQBtaQBiYWRfYXJyYXlfbmV3X2xlbmd0aABNYXJjaAAvaG9tZS9ydW5uZXIvd29yay9hcnJhbmdlbWVudC0yZC1qcy9hcnJhbmdlbWVudC0yZC1qcy9saWJyYXJpZXMvQ0dBTC01LjQvaW5jbHVkZS9DR0FML1N1cmZhY2Vfc3dlZXBfMi9FdmVudF9jb21wYXJlci5oAC9ob21lL3J1bm5lci93b3JrL2FycmFuZ2VtZW50LTJkLWpzL2FycmFuZ2VtZW50LTJkLWpzL2xpYnJhcmllcy9DR0FMLTUuNC9pbmNsdWRlL0NHQUwvQXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18yLmgAL2hvbWUvcnVubmVyL3dvcmsvYXJyYW5nZW1lbnQtMmQtanMvYXJyYW5nZW1lbnQtMmQtanMvbGlicmFyaWVzL0NHQUwtNS40L2luY2x1ZGUvQ0dBTC9BcnJhbmdlbWVudF8yL0Fycl90cmFpdHNfYWRhcHRvcl8yLmgAQXVnAHVuc2lnbmVkIGxvbmcgbG9uZwB1bnNpZ25lZCBsb25nAHRlcm1pbmF0aW5nAHN0ZDo6YmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAF9fdXVpZG9mAGluZgBoYWxmACVhZgAlLjBMZgAlTGYAdHJ1ZQBUdWUAb3BlcmF0b3IgZGVsZXRlAGZhbHNlAEp1bmUAIHZvbGF0aWxlAGxvbmcgZG91YmxlAF9ibG9ja19pbnZva2UAZ2UAVGUAc3RkAHZvaWQAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkACd1bm5hbWVkAG11dGV4IGxvY2sgZmFpbGVkAFdlZABzdGQ6OmJhZF9hbGxvYwBEZWMARmViAFViAG5hACdsYW1iZGEAYWEAJWEAb3BlcmF0b3JeAG9wZXJhdG9yIG5ld1tdAG9wZXJhdG9yW10Ab3BlcmF0b3IgZGVsZXRlW10AcGl4ZWwgdmVjdG9yWwApWwBfX19fWgAlYSAlYiAlZCAlSDolTTolUyAlWQBQT1NJWABkVgBmcFQAJFRUACRUAHJTAGxTAGFTACVIOiVNOiVTAG9SAGVPAERPAHNyTgBhTgBfR0xPQkFMX19OAE5BTgAkTgByTQBQTQBBTQBwTABtTABmTAAlTGFMAExDX0FMTABDR0FMAG1JAFVhOWVuYWJsZV9pZkkATEFORwBJTkYAdkUARG5FAFJFAE9FAGIxRQBiMEUAREMAb3BlcmF0b3I/AG9wZXJhdG9yPgBvcGVyYXRvcj4+AG9wZXJhdG9yPD0+AG9wZXJhdG9yLT4Ac3RkOjpiYXNpY19pb3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4Ac3RkOjpiYXNpY19vc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBzdGQ6OmJhc2ljX2lzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+AHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4Ab3BlcmF0b3J8PQBvcGVyYXRvcj0Ab3BlcmF0b3JePQBvcGVyYXRvcj49AG9wZXJhdG9yPj49AG9wZXJhdG9yPT0Ab3BlcmF0b3I8PQBvcGVyYXRvcjw8PQBvcGVyYXRvci89AG9wZXJhdG9yLT0Ab3BlcmF0b3IrPQBvcGVyYXRvcio9AG9wZXJhdG9yJj0Ab3BlcmF0b3IlPQBvcGVyYXRvciE9AG9wZXJhdG9yPAB0ZW1wbGF0ZTwAaWQ8AG9wZXJhdG9yPDwALjwAIjwAW2FiaToAIFtlbmFibGVfaWY6AHN0ZDo6ADAxMjM0NTY3ODkAdW5zaWduZWQgX19pbnQxMjgAX19mbG9hdDEyOABkZWNpbWFsMTI4AEMuVVRGLTgAZGVjaW1hbDY0AGRlY2ltYWwzMgAwAG9wZXJhdG9yLwAgLi4uAG9wZXJhdG9yLQAtaW4tAG9wZXJhdG9yLS0Ab3BlcmF0b3IsAG9wZXJhdG9yKwBvcGVyYXRvcisrAG9wZXJhdG9yKgBvcGVyYXRvci0+KgA6OioALioAZGVjbHR5cGUoYXV0bykAKG51bGwpAChhbm9ueW1vdXMgbmFtZXNwYWNlKQBvcGVyYXRvcigpAHRocm93KABub2V4Y2VwdCgAZGVjbHR5cGUoAD4oAHNpemVvZi4uLigAKSgAbm9leGNlcHQgKABhbGlnbm9mICgAc2l6ZW9mICgAdHlwZWlkICgAKSA/ICgAKSA6ICgAc2l6ZW9mLi4uICgAJ2Jsb2NrLWxpdGVyYWwnAG9wZXJhdG9yJgBvcGVyYXRvciYmACAmJgAgJgBvcGVyYXRvciUAPiIAb3BlcmF0b3IhACB2aW9sYXRpb24hAFB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsZWQhAHRocm93IAAgYXQgb2Zmc2V0IAA6Om9wZXJhdG9yIAByZWZlcmVuY2UgdGVtcG9yYXJ5IGZvciAAdGVtcGxhdGUgcGFyYW1ldGVyIG9iamVjdCBmb3IgAHR5cGVpbmZvIGZvciAAdGhyZWFkLWxvY2FsIHdyYXBwZXIgcm91dGluZSBmb3IgAHRocmVhZC1sb2NhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciAAdHlwZWluZm8gbmFtZSBmb3IgAGNvbnN0cnVjdGlvbiB2dGFibGUgZm9yIABndWFyZCB2YXJpYWJsZSBmb3IgAFZUVCBmb3IgAGNvdmFyaWFudCByZXR1cm4gdGh1bmsgdG8gAG5vbi12aXJ0dWFsIHRodW5rIHRvIABpbnZvY2F0aW9uIGZ1bmN0aW9uIGZvciBibG9jayBpbiAAPiB0eXBlbmFtZSAAW10gACA9IAAKRXhwcjogAENHQUwgZXJyb3I6IAAKRXhwbGFuYXRpb246IAAKTGluZTogAApGaWxlOiAARXhwcmVzc2lvbiA6IABMaW5lICAgICAgIDogAEZpbGUgICAgICAgOiAAIC4uLiAALCAAKSAAb3BlcmF0b3IiIiAAZ3BjIG1hbGxvYyBmYWlsdXJlOiAlcwoAAAAAAHQWAABMAAAATQAAAE4AAABONENHQUwyNEFycmFuZ2VtZW50X29uX3N1cmZhY2VfMklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18zNkFycl9ib3VuZGVkX3BsYW5hcl90b3BvbG9neV90cmFpdHNfMklTN19OU18xNkFycl9kZWZhdWx0X2RjZWxJUzdfRUVFRUVFAAAAQHwAALwVAAAAAAAALBcAAE8AAABQAAAAUQAAAFEAAABRAAAAUQAAAE40Q0dBTDMzQXJyX3BsYW5hcl90b3BvbG9neV90cmFpdHNfYmFzZV8ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzE2QXJyX2RlZmF1bHRfZGNlbElTN19FRUVFAEB8AACcFgAATjVib29zdDEwd3JhcGV4Y2VwdElTdDliYWRfYWxsb2NFRQBONWJvb3N0MTZleGNlcHRpb25fZGV0YWlsMTBjbG9uZV9iYXNlRQAAAEB8AABXFwAATjVib29zdDlleGNlcHRpb25FAABAfAAAiBcAAMR8AAA0FwAAAAAAAAMAAACAFwAAAgAAAHx9AAACBAAAnBcAAAIIAAAAAAAApBcAAFIAAABTAAAAAwAAAFQAAAD8////pBcAAFUAAABWAAAAVwAAAPj///+kFwAAWAAAAFkAAAAAAAAAgBcAAFEAAABRAAAAWgAAAFsAAAAAAAAAnBcAAFEAAABRAAAAAAAAANgZAABcAAAAXQAAAF4AAABONENHQUw4QXJyX2ZhY2VJTlNfMTVBcnJfdmVydGV4X2Jhc2VJTlNfN1BvaW50XzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRUVFTlNfMTdBcnJfaGFsZmVkZ2VfYmFzZUlOU18xM0Fycl9zZWdtZW50XzJJUzdfRUVFRU5TXzEzQXJyX2ZhY2VfYmFzZUVFRQBONENHQUwxM0Fycl9mYWNlX2Jhc2VFAABAfAAA7BgAAE40Q0dBTDE4SW5fcGxhY2VfbGlzdF9iYXNlSU5TXzhBcnJfZmFjZUlOU18xNUFycl92ZXJ0ZXhfYmFzZUlOU183UG9pbnRfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFRUVOU18xN0Fycl9oYWxmZWRnZV9iYXNlSU5TXzEzQXJyX3NlZ21lbnRfMklTOF9FRUVFTlNfMTNBcnJfZmFjZV9iYXNlRUVFRUUAAABAfAAADBkAAMR8AABEGAAAAAAAAAIAAAAEGQAAAgAAANAZAAACLAAAAAAAAAQZAABcAAAAXwAAAF4AAAAAAAAAnBoAAEwAAABgAAAATgAAAE40Q0dBTDEzQXJyYW5nZW1lbnRfMklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18xNkFycl9kZWZhdWx0X2RjZWxJUzdfRUVFRQBofAAAIBoAAHQWAAAAAAAAXBsAAE8AAABhAAAAYgAAAGMAAABkAAAAZQAAAE40Q0dBTDM2QXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzE2QXJyX2RlZmF1bHRfZGNlbElTN19FRUVFAABofAAAyBoAACwXAAAAAAAA9BwAAGYAAABnAAAATjRDR0FMMTZBcnJfZGVmYXVsdF9kY2VsSU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRUVFAE40Q0dBTDEzQXJyX2RjZWxfYmFzZUlOU18xNUFycl92ZXJ0ZXhfYmFzZUlOU183UG9pbnRfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFRUVOU18xN0Fycl9oYWxmZWRnZV9iYXNlSU5TXzEzQXJyX3NlZ21lbnRfMklTN19FRUVFTlNfMTNBcnJfZmFjZV9iYXNlRU41Ym9vc3QxOWZhc3RfcG9vbF9hbGxvY2F0b3JJaU5TRl8zM2RlZmF1bHRfdXNlcl9hbGxvY2F0b3JfbmV3X2RlbGV0ZUVOU3QzX18yNW11dGV4RUxqMzJFTGowRUVFRUUAAAAAQHwAANwbAADEfAAAeBsAAAAAAAABAAAA7BwAAAIEAAAAAAAA+B4AAGgAAABpAAAAagAAAE40Q0dBTDEwQXJyX3ZlcnRleElOU18xNUFycl92ZXJ0ZXhfYmFzZUlOU183UG9pbnRfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFRUVOU18xN0Fycl9oYWxmZWRnZV9iYXNlSU5TXzEzQXJyX3NlZ21lbnRfMklTN19FRUVFTlNfMTNBcnJfZmFjZV9iYXNlRUVFAE40Q0dBTDE1QXJyX3ZlcnRleF9iYXNlSU5TXzdQb2ludF8ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVFRQBAfAAAyx0AAE40Q0dBTDE4SW5fcGxhY2VfbGlzdF9iYXNlSU5TXzEwQXJyX3ZlcnRleElOU18xNUFycl92ZXJ0ZXhfYmFzZUlOU183UG9pbnRfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFRUVOU18xN0Fycl9oYWxmZWRnZV9iYXNlSU5TXzEzQXJyX3NlZ21lbnRfMklTOF9FRUVFTlNfMTNBcnJfZmFjZV9iYXNlRUVFRUUAAAAAQHwAACgeAADEfAAAIB0AAAAAAAACAAAAIB4AAAIAAADwHgAAAhAAAAAAAAAQIQAAawAAAGwAAABtAAAATjRDR0FMMTJBcnJfaGFsZmVkZ2VJTlNfMTVBcnJfdmVydGV4X2Jhc2VJTlNfN1BvaW50XzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRUVFTlNfMTdBcnJfaGFsZmVkZ2VfYmFzZUlOU18xM0Fycl9zZWdtZW50XzJJUzdfRUVFRU5TXzEzQXJyX2ZhY2VfYmFzZUVFRQBONENHQUwxN0Fycl9oYWxmZWRnZV9iYXNlSU5TXzEzQXJyX3NlZ21lbnRfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFRUUAAEB8AADZHwAATjRDR0FMMThJbl9wbGFjZV9saXN0X2Jhc2VJTlNfMTJBcnJfaGFsZmVkZ2VJTlNfMTVBcnJfdmVydGV4X2Jhc2VJTlNfN1BvaW50XzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRUVFTlNfMTdBcnJfaGFsZmVkZ2VfYmFzZUlOU18xM0Fycl9zZWdtZW50XzJJUzhfRUVFRU5TXzEzQXJyX2ZhY2VfYmFzZUVFRUVFAABAfAAAQCAAAMR8AAAsHwAAAAAAAAIAAAA4IAAAAgAAAAghAAACHAAAAAAAAJglAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAATjRDR0FMMjdBcnJfY29uc3RydWN0aW9uX3NzX3Zpc2l0b3JJTlNfMzhBcnJfYm91bmRlZF9wbGFuYXJfY29uc3RydWN0aW9uX2hlbHBlcklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18yNEFycmFuZ2VtZW50X29uX3N1cmZhY2VfMklTOF9OU18zNkFycl9ib3VuZGVkX3BsYW5hcl90b3BvbG9neV90cmFpdHNfMklTOF9OU18xNkFycl9kZWZhdWx0X2RjZWxJUzhfRUVFRUVFTlNfMjJBcnJfY29uc3RydWN0aW9uX2V2ZW50SVM4X1NFX041Ym9vc3QxOWZhc3RfcG9vbF9hbGxvY2F0b3JJaU5TR18zM2RlZmF1bHRfdXNlcl9hbGxvY2F0b3JfbmV3X2RlbGV0ZUVOU3QzX18yNW11dGV4RUxqMzJFTGowRUVFTlNfMTVTdXJmYWNlX3N3ZWVwXzIxOERlZmF1bHRfZXZlbnRfYmFzZUVOU01fMTZEZWZhdWx0X3N1YmN1cnZlRUVFTlNfMjVBcnJfY29uc3RydWN0aW9uX3N1YmN1cnZlSVM4X1NQX1NMX1NPX05TXzdEZWZhdWx0RUVFRUVTUl9FRQBONENHQUwxNVN1cmZhY2Vfc3dlZXBfMjIwRGVmYXVsdF92aXNpdG9yX2Jhc2VJTlNfMjBBcnJfc2VnbWVudF90cmFpdHNfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFTlNfMjJBcnJfY29uc3RydWN0aW9uX2V2ZW50SVM4X05TXzI0QXJyYW5nZW1lbnRfb25fc3VyZmFjZV8ySVM4X05TXzM2QXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18ySVM4X05TXzE2QXJyX2RlZmF1bHRfZGNlbElTOF9FRUVFRUVONWJvb3N0MTlmYXN0X3Bvb2xfYWxsb2NhdG9ySWlOU0dfMzNkZWZhdWx0X3VzZXJfYWxsb2NhdG9yX25ld19kZWxldGVFTlN0M19fMjVtdXRleEVMajMyRUxqMEVFRU5TMF8xOERlZmF1bHRfZXZlbnRfYmFzZUVOUzBfMTZEZWZhdWx0X3N1YmN1cnZlRUVFTlNfMjVBcnJfY29uc3RydWN0aW9uX3N1YmN1cnZlSVM4X1NPX1NMX1NOX05TXzdEZWZhdWx0RUVFU0xfTlNfMjdBcnJfY29uc3RydWN0aW9uX3NzX3Zpc2l0b3JJTlNfMzhBcnJfYm91bmRlZF9wbGFuYXJfY29uc3RydWN0aW9uX2hlbHBlcklTOF9TRl9TT19TUl9FRVNRX0VFRUUAAEB8AABdIwAAaHwAAFQhAACQJQAAAAAAAKQnAAB1AAAAdgAAAHcAAAB4AAAAeQAAAE40Q0dBTDM4QXJyX2JvdW5kZWRfcGxhbmFyX2NvbnN0cnVjdGlvbl9oZWxwZXJJTlNfMjBBcnJfc2VnbWVudF90cmFpdHNfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFTlNfMjRBcnJhbmdlbWVudF9vbl9zdXJmYWNlXzJJUzdfTlNfMzZBcnJfYm91bmRlZF9wbGFuYXJfdG9wb2xvZ3lfdHJhaXRzXzJJUzdfTlNfMTZBcnJfZGVmYXVsdF9kY2VsSVM3X0VFRUVFRU5TXzIyQXJyX2NvbnN0cnVjdGlvbl9ldmVudElTN19TRF9ONWJvb3N0MTlmYXN0X3Bvb2xfYWxsb2NhdG9ySWlOU0ZfMzNkZWZhdWx0X3VzZXJfYWxsb2NhdG9yX25ld19kZWxldGVFTlN0M19fMjVtdXRleEVMajMyRUxqMEVFRU5TXzE1U3VyZmFjZV9zd2VlcF8yMThEZWZhdWx0X2V2ZW50X2Jhc2VFTlNMXzE2RGVmYXVsdF9zdWJjdXJ2ZUVFRU5TXzI1QXJyX2NvbnN0cnVjdGlvbl9zdWJjdXJ2ZUlTN19TT19TS19TTl9OU183RGVmYXVsdEVFRUVFAABAfAAAwCUAQbTPAAvJQQQoAABONENHQUwyN0Fycl9hbGxfc2lkZXNfb2JsaXZpb3VzX3RhZ0UATjRDR0FMMjFBcnJfYm91bmRhcnlfY29uZF90YWdFAEB8AADdJwAAxHwAALgnAAAAAAAAAQAAAPwnAAAD9P//AAAAAKAsAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAE40Q0dBTDE1U3VyZmFjZV9zd2VlcF8yMTVTdXJmYWNlX3N3ZWVwXzJJTlNfMjdBcnJfY29uc3RydWN0aW9uX3NzX3Zpc2l0b3JJTlNfMzhBcnJfYm91bmRlZF9wbGFuYXJfY29uc3RydWN0aW9uX2hlbHBlcklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18yNEFycmFuZ2VtZW50X29uX3N1cmZhY2VfMklTQV9OU18zNkFycl9ib3VuZGVkX3BsYW5hcl90b3BvbG9neV90cmFpdHNfMklTQV9OU18xNkFycl9kZWZhdWx0X2RjZWxJU0FfRUVFRUVFTlNfMjJBcnJfY29uc3RydWN0aW9uX2V2ZW50SVNBX1NHX041Ym9vc3QxOWZhc3RfcG9vbF9hbGxvY2F0b3JJaU5TSV8zM2RlZmF1bHRfdXNlcl9hbGxvY2F0b3JfbmV3X2RlbGV0ZUVOU3QzX18yNW11dGV4RUxqMzJFTGowRUVFTlMwXzE4RGVmYXVsdF9ldmVudF9iYXNlRU5TMF8xNkRlZmF1bHRfc3ViY3VydmVFRUVOU18yNUFycl9jb25zdHJ1Y3Rpb25fc3ViY3VydmVJU0FfU1FfU05fU1BfTlNfN0RlZmF1bHRFRUVFRVNTX0VFRUUATjRDR0FMMTVTdXJmYWNlX3N3ZWVwXzIzMU5vX2ludGVyc2VjdGlvbl9zdXJmYWNlX3N3ZWVwXzJJTlNfMjdBcnJfY29uc3RydWN0aW9uX3NzX3Zpc2l0b3JJTlNfMzhBcnJfYm91bmRlZF9wbGFuYXJfY29uc3RydWN0aW9uX2hlbHBlcklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18yNEFycmFuZ2VtZW50X29uX3N1cmZhY2VfMklTQV9OU18zNkFycl9ib3VuZGVkX3BsYW5hcl90b3BvbG9neV90cmFpdHNfMklTQV9OU18xNkFycl9kZWZhdWx0X2RjZWxJU0FfRUVFRUVFTlNfMjJBcnJfY29uc3RydWN0aW9uX2V2ZW50SVNBX1NHX041Ym9vc3QxOWZhc3RfcG9vbF9hbGxvY2F0b3JJaU5TSV8zM2RlZmF1bHRfdXNlcl9hbGxvY2F0b3JfbmV3X2RlbGV0ZUVOU3QzX18yNW11dGV4RUxqMzJFTGowRUVFTlMwXzE4RGVmYXVsdF9ldmVudF9iYXNlRU5TMF8xNkRlZmF1bHRfc3ViY3VydmVFRUVOU18yNUFycl9jb25zdHJ1Y3Rpb25fc3ViY3VydmVJU0FfU1FfU05fU1BfTlNfN0RlZmF1bHRFRUVFRVNTX0VFRUUAAABAfAAAZSoAAGh8AABEKAAAmCwAAAAAAACYLAAAggAAAIMAAACEAAAAhQAAAIYAAACHAAAAiAAAAIkAAAAAAAAAxC4AAIoAAACLAAAATjRDR0FMOE11bHRpc2V0SVBOU18yMkFycl9jb25zdHJ1Y3Rpb25fZXZlbnRJTlNfMjBBcnJfc2VnbWVudF90cmFpdHNfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFTlNfMjRBcnJhbmdlbWVudF9vbl9zdXJmYWNlXzJJUzhfTlNfMzZBcnJfYm91bmRlZF9wbGFuYXJfdG9wb2xvZ3lfdHJhaXRzXzJJUzhfTlNfMTZBcnJfZGVmYXVsdF9kY2VsSVM4X0VFRUVFRU41Ym9vc3QxOWZhc3RfcG9vbF9hbGxvY2F0b3JJaU5TRl8zM2RlZmF1bHRfdXNlcl9hbGxvY2F0b3JfbmV3X2RlbGV0ZUVOU3QzX18yNW11dGV4RUxqMzJFTGowRUVFTlNfMTVTdXJmYWNlX3N3ZWVwXzIxOERlZmF1bHRfZXZlbnRfYmFzZUVOU0xfMTZEZWZhdWx0X3N1YmN1cnZlRUVFTlNMXzE0RXZlbnRfY29tcGFyZXJJTlNfMjZBcnJfdHJhaXRzX2Jhc2ljX2FkYXB0b3JfMklTOF9FRVNPX0VFU0tfTlNfMTFCb29sZWFuX3RhZ0lMYjFFRUVFRQAAQHwAAOQsAAAAAAAA1DAAAIwAAACNAAAATjRDR0FMOE11bHRpc2V0SVBOU18yNUFycl9jb25zdHJ1Y3Rpb25fc3ViY3VydmVJTlNfMjBBcnJfc2VnbWVudF90cmFpdHNfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFTlNfMjJBcnJfY29uc3RydWN0aW9uX2V2ZW50SVM4X05TXzI0QXJyYW5nZW1lbnRfb25fc3VyZmFjZV8ySVM4X05TXzM2QXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18ySVM4X05TXzE2QXJyX2RlZmF1bHRfZGNlbElTOF9FRUVFRUVONWJvb3N0MTlmYXN0X3Bvb2xfYWxsb2NhdG9ySWlOU0dfMzNkZWZhdWx0X3VzZXJfYWxsb2NhdG9yX25ld19kZWxldGVFTlN0M19fMjVtdXRleEVMajMyRUxqMEVFRU5TXzE1U3VyZmFjZV9zd2VlcF8yMThEZWZhdWx0X2V2ZW50X2Jhc2VFTlNNXzE2RGVmYXVsdF9zdWJjdXJ2ZUVFRVNMX1NPX05TXzdEZWZhdWx0RUVFTlNNXzE0Q3VydmVfY29tcGFyZXJJUzhfU1BfU1JfRUVTTF9OU18xMUJvb2xlYW5fdGFnSUxiMEVFRUVFAAAAQHwAANwuAABONENHQUwxOUFzc2VydGlvbl9leGNlcHRpb25FAE40Q0dBTDE3RmFpbHVyZV9leGNlcHRpb25FAGh8AAD5MAAA1H0AAGh8AADcMAAAFDEAAAAAAAAgMQAABAAAAI8AAACQAAAAAAAAABQxAAAEAAAAkQAAAJAAAAAAAAAAuDoAAJIAAACTAAAAlAAAAJUAAACWAAAAlwAAAJgAAACZAAAAmgAAAJsAAABONENHQUwyNEFycl9pbnNlcnRpb25fc3NfdmlzaXRvcklOU18zNUFycl9ib3VuZGVkX3BsYW5hcl9pbnNlcnRpb25faGVscGVySU5TXzIyQXJyX2luc2VydGlvbl90cmFpdHNfMklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18yNEFycmFuZ2VtZW50X29uX3N1cmZhY2VfMklTOV9OU18zNkFycl9ib3VuZGVkX3BsYW5hcl90b3BvbG9neV90cmFpdHNfMklTOV9OU18xNkFycl9kZWZhdWx0X2RjZWxJUzlfRUVFRUVFRUVTRl9OU18yMkFycl9jb25zdHJ1Y3Rpb25fZXZlbnRJU0dfU0ZfTjVib29zdDE5ZmFzdF9wb29sX2FsbG9jYXRvcklpTlNJXzMzZGVmYXVsdF91c2VyX2FsbG9jYXRvcl9uZXdfZGVsZXRlRU5TdDNfXzI1bXV0ZXhFTGozMkVMajBFRUVOU18xNVN1cmZhY2Vfc3dlZXBfMjE4RGVmYXVsdF9ldmVudF9iYXNlRU5TT18xNkRlZmF1bHRfc3ViY3VydmVFRUVOU18yNUFycl9jb25zdHJ1Y3Rpb25fc3ViY3VydmVJU0dfU1JfU05fU1FfTlNfN0RlZmF1bHRFRUVFRVNUX0VFAE40Q0dBTDQwQXJyX25vX2ludGVyc2VjdGlvbl9pbnNlcnRpb25fc3NfdmlzaXRvcklOU18zNUFycl9ib3VuZGVkX3BsYW5hcl9pbnNlcnRpb25faGVscGVySU5TXzIyQXJyX2luc2VydGlvbl90cmFpdHNfMklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18yNEFycmFuZ2VtZW50X29uX3N1cmZhY2VfMklTOV9OU18zNkFycl9ib3VuZGVkX3BsYW5hcl90b3BvbG9neV90cmFpdHNfMklTOV9OU18xNkFycl9kZWZhdWx0X2RjZWxJUzlfRUVFRUVFRUVTRl9OU18yMkFycl9jb25zdHJ1Y3Rpb25fZXZlbnRJU0dfU0ZfTjVib29zdDE5ZmFzdF9wb29sX2FsbG9jYXRvcklpTlNJXzMzZGVmYXVsdF91c2VyX2FsbG9jYXRvcl9uZXdfZGVsZXRlRU5TdDNfXzI1bXV0ZXhFTGozMkVMajBFRUVOU18xNVN1cmZhY2Vfc3dlZXBfMjE4RGVmYXVsdF9ldmVudF9iYXNlRU5TT18xNkRlZmF1bHRfc3ViY3VydmVFRUVOU18yNUFycl9jb25zdHJ1Y3Rpb25fc3ViY3VydmVJU0dfU1JfU05fU1FfTlNfN0RlZmF1bHRFRUVFRU5TXzI0QXJyX2luc2VydGlvbl9zc192aXNpdG9ySVNWX1NUX0VFRUUATjRDR0FMMjdBcnJfY29uc3RydWN0aW9uX3NzX3Zpc2l0b3JJTlNfMzVBcnJfYm91bmRlZF9wbGFuYXJfaW5zZXJ0aW9uX2hlbHBlcklOU18yMkFycl9pbnNlcnRpb25fdHJhaXRzXzJJTlNfMjBBcnJfc2VnbWVudF90cmFpdHNfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFTlNfMjRBcnJhbmdlbWVudF9vbl9zdXJmYWNlXzJJUzlfTlNfMzZBcnJfYm91bmRlZF9wbGFuYXJfdG9wb2xvZ3lfdHJhaXRzXzJJUzlfTlNfMTZBcnJfZGVmYXVsdF9kY2VsSVM5X0VFRUVFRUVFU0ZfTlNfMjJBcnJfY29uc3RydWN0aW9uX2V2ZW50SVNHX1NGX041Ym9vc3QxOWZhc3RfcG9vbF9hbGxvY2F0b3JJaU5TSV8zM2RlZmF1bHRfdXNlcl9hbGxvY2F0b3JfbmV3X2RlbGV0ZUVOU3QzX18yNW11dGV4RUxqMzJFTGowRUVFTlNfMTVTdXJmYWNlX3N3ZWVwXzIxOERlZmF1bHRfZXZlbnRfYmFzZUVOU09fMTZEZWZhdWx0X3N1YmN1cnZlRUVFTlNfMjVBcnJfY29uc3RydWN0aW9uX3N1YmN1cnZlSVNHX1NSX1NOX1NRX05TXzdEZWZhdWx0RUVFRUVOU18yNEFycl9pbnNlcnRpb25fc3NfdmlzaXRvcklTVl9TVF9FRUVFAE40Q0dBTDE1U3VyZmFjZV9zd2VlcF8yMjBEZWZhdWx0X3Zpc2l0b3JfYmFzZUlOU18yMkFycl9pbnNlcnRpb25fdHJhaXRzXzJJTlNfMjBBcnJfc2VnbWVudF90cmFpdHNfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFTlNfMjRBcnJhbmdlbWVudF9vbl9zdXJmYWNlXzJJUzlfTlNfMzZBcnJfYm91bmRlZF9wbGFuYXJfdG9wb2xvZ3lfdHJhaXRzXzJJUzlfTlNfMTZBcnJfZGVmYXVsdF9kY2VsSVM5X0VFRUVFRUVFTlNfMjJBcnJfY29uc3RydWN0aW9uX2V2ZW50SVNHX1NGX041Ym9vc3QxOWZhc3RfcG9vbF9hbGxvY2F0b3JJaU5TSV8zM2RlZmF1bHRfdXNlcl9hbGxvY2F0b3JfbmV3X2RlbGV0ZUVOU3QzX18yNW11dGV4RUxqMzJFTGowRUVFTlMwXzE4RGVmYXVsdF9ldmVudF9iYXNlRU5TMF8xNkRlZmF1bHRfc3ViY3VydmVFRUVOU18yNUFycl9jb25zdHJ1Y3Rpb25fc3ViY3VydmVJU0dfU1FfU05fU1BfTlNfN0RlZmF1bHRFRUVTTl9OU18yNEFycl9pbnNlcnRpb25fc3NfdmlzaXRvcklOU18zNUFycl9ib3VuZGVkX3BsYW5hcl9pbnNlcnRpb25faGVscGVySVNHX1NGX1NRX1NUX0VFU1NfRUVFRQAAAEB8AABJOAAAaHwAAP81AACYOgAAaHwAAKgzAACgOgAAaHwAAIQxAACsOgAAAAAAAKA6AACcAAAAnQAAAJ4AAACfAAAAoAAAAKEAAACiAAAAAAAAABQ/AACjAAAApAAAAKUAAACmAAAApwAAAE40Q0dBTDM1QXJyX2JvdW5kZWRfcGxhbmFyX2luc2VydGlvbl9oZWxwZXJJTlNfMjJBcnJfaW5zZXJ0aW9uX3RyYWl0c18ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzI0QXJyYW5nZW1lbnRfb25fc3VyZmFjZV8ySVM4X05TXzM2QXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18ySVM4X05TXzE2QXJyX2RlZmF1bHRfZGNlbElTOF9FRUVFRUVFRVNFX05TXzIyQXJyX2NvbnN0cnVjdGlvbl9ldmVudElTRl9TRV9ONWJvb3N0MTlmYXN0X3Bvb2xfYWxsb2NhdG9ySWlOU0hfMzNkZWZhdWx0X3VzZXJfYWxsb2NhdG9yX25ld19kZWxldGVFTlN0M19fMjVtdXRleEVMajMyRUxqMEVFRU5TXzE1U3VyZmFjZV9zd2VlcF8yMThEZWZhdWx0X2V2ZW50X2Jhc2VFTlNOXzE2RGVmYXVsdF9zdWJjdXJ2ZUVFRU5TXzI1QXJyX2NvbnN0cnVjdGlvbl9zdWJjdXJ2ZUlTRl9TUV9TTV9TUF9OU183RGVmYXVsdEVFRUVFAE40Q0dBTDM4QXJyX2JvdW5kZWRfcGxhbmFyX2NvbnN0cnVjdGlvbl9oZWxwZXJJTlNfMjJBcnJfaW5zZXJ0aW9uX3RyYWl0c18ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzI0QXJyYW5nZW1lbnRfb25fc3VyZmFjZV8ySVM4X05TXzM2QXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18ySVM4X05TXzE2QXJyX2RlZmF1bHRfZGNlbElTOF9FRUVFRUVFRVNFX05TXzIyQXJyX2NvbnN0cnVjdGlvbl9ldmVudElTRl9TRV9ONWJvb3N0MTlmYXN0X3Bvb2xfYWxsb2NhdG9ySWlOU0hfMzNkZWZhdWx0X3VzZXJfYWxsb2NhdG9yX25ld19kZWxldGVFTlN0M19fMjVtdXRleEVMajMyRUxqMEVFRU5TXzE1U3VyZmFjZV9zd2VlcF8yMThEZWZhdWx0X2V2ZW50X2Jhc2VFTlNOXzE2RGVmYXVsdF9zdWJjdXJ2ZUVFRU5TXzI1QXJyX2NvbnN0cnVjdGlvbl9zdWJjdXJ2ZUlTRl9TUV9TTV9TUF9OU183RGVmYXVsdEVFRUVFAAAAAEB8AAAFPQAAaHwAAAQ7AAAMPwAAAAAAAAw/AACjAAAAqAAAAKUAAACmAAAApwAAAAAAAAD0QwAAqQAAAKoAAACrAAAArAAAAK0AAACuAAAArwAAALAAAABONENHQUwxNVN1cmZhY2Vfc3dlZXBfMjE1U3VyZmFjZV9zd2VlcF8ySU5TXzI0QXJyX2luc2VydGlvbl9zc192aXNpdG9ySU5TXzM1QXJyX2JvdW5kZWRfcGxhbmFyX2luc2VydGlvbl9oZWxwZXJJTlNfMjJBcnJfaW5zZXJ0aW9uX3RyYWl0c18ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzI0QXJyYW5nZW1lbnRfb25fc3VyZmFjZV8ySVNCX05TXzM2QXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18ySVNCX05TXzE2QXJyX2RlZmF1bHRfZGNlbElTQl9FRUVFRUVFRVNIX05TXzIyQXJyX2NvbnN0cnVjdGlvbl9ldmVudElTSV9TSF9ONWJvb3N0MTlmYXN0X3Bvb2xfYWxsb2NhdG9ySWlOU0tfMzNkZWZhdWx0X3VzZXJfYWxsb2NhdG9yX25ld19kZWxldGVFTlN0M19fMjVtdXRleEVMajMyRUxqMEVFRU5TMF8xOERlZmF1bHRfZXZlbnRfYmFzZUVOUzBfMTZEZWZhdWx0X3N1YmN1cnZlRUVFTlNfMjVBcnJfY29uc3RydWN0aW9uX3N1YmN1cnZlSVNJX1NTX1NQX1NSX05TXzdEZWZhdWx0RUVFRUVTVV9FRUVFAE40Q0dBTDE1U3VyZmFjZV9zd2VlcF8yMzFOb19pbnRlcnNlY3Rpb25fc3VyZmFjZV9zd2VlcF8ySU5TXzI0QXJyX2luc2VydGlvbl9zc192aXNpdG9ySU5TXzM1QXJyX2JvdW5kZWRfcGxhbmFyX2luc2VydGlvbl9oZWxwZXJJTlNfMjJBcnJfaW5zZXJ0aW9uX3RyYWl0c18ySU5TXzIwQXJyX3NlZ21lbnRfdHJhaXRzXzJJTlNfOUNhcnRlc2lhbklOU184UXVvdGllbnRJTlNfOE1QX0Zsb2F0RUVFRUVFRU5TXzI0QXJyYW5nZW1lbnRfb25fc3VyZmFjZV8ySVNCX05TXzM2QXJyX2JvdW5kZWRfcGxhbmFyX3RvcG9sb2d5X3RyYWl0c18ySVNCX05TXzE2QXJyX2RlZmF1bHRfZGNlbElTQl9FRUVFRUVFRVNIX05TXzIyQXJyX2NvbnN0cnVjdGlvbl9ldmVudElTSV9TSF9ONWJvb3N0MTlmYXN0X3Bvb2xfYWxsb2NhdG9ySWlOU0tfMzNkZWZhdWx0X3VzZXJfYWxsb2NhdG9yX25ld19kZWxldGVFTlN0M19fMjVtdXRleEVMajMyRUxqMEVFRU5TMF8xOERlZmF1bHRfZXZlbnRfYmFzZUVOUzBfMTZEZWZhdWx0X3N1YmN1cnZlRUVFTlNfMjVBcnJfY29uc3RydWN0aW9uX3N1YmN1cnZlSVNJX1NTX1NQX1NSX05TXzdEZWZhdWx0RUVFRUVTVV9FRUVFAEB8AACgQQAAaHwAAGQ/AADsQwAAAAAAAOxDAACxAAAAsgAAALMAAAC0AAAAtQAAALYAAAC3AAAAuAAAAAAAAAA4RgAAuQAAALoAAABONENHQUw4TXVsdGlzZXRJUE5TXzIyQXJyX2NvbnN0cnVjdGlvbl9ldmVudElOU18yMkFycl9pbnNlcnRpb25fdHJhaXRzXzJJTlNfMjBBcnJfc2VnbWVudF90cmFpdHNfMklOU185Q2FydGVzaWFuSU5TXzhRdW90aWVudElOU184TVBfRmxvYXRFRUVFRUVFTlNfMjRBcnJhbmdlbWVudF9vbl9zdXJmYWNlXzJJUzlfTlNfMzZBcnJfYm91bmRlZF9wbGFuYXJfdG9wb2xvZ3lfdHJhaXRzXzJJUzlfTlNfMTZBcnJfZGVmYXVsdF9kY2VsSVM5X0VFRUVFRUVFU0ZfTjVib29zdDE5ZmFzdF9wb29sX2FsbG9jYXRvcklpTlNIXzMzZGVmYXVsdF91c2VyX2FsbG9jYXRvcl9uZXdfZGVsZXRlRU5TdDNfXzI1bXV0ZXhFTGozMkVMajBFRUVOU18xNVN1cmZhY2Vfc3dlZXBfMjE4RGVmYXVsdF9ldmVudF9iYXNlRU5TTl8xNkRlZmF1bHRfc3ViY3VydmVFRUVOU05fMTRFdmVudF9jb21wYXJlcklOU18yNkFycl90cmFpdHNfYmFzaWNfYWRhcHRvcl8ySVNHX0VFU1FfRUVTTV9OU18xMUJvb2xlYW5fdGFnSUxiMUVFRUVFAEB8AAA4RAAAAAAAAGhIAAC7AAAAvAAAAE40Q0dBTDhNdWx0aXNldElQTlNfMjVBcnJfY29uc3RydWN0aW9uX3N1YmN1cnZlSU5TXzIyQXJyX2luc2VydGlvbl90cmFpdHNfMklOU18yMEFycl9zZWdtZW50X3RyYWl0c18ySU5TXzlDYXJ0ZXNpYW5JTlNfOFF1b3RpZW50SU5TXzhNUF9GbG9hdEVFRUVFRUVOU18yNEFycmFuZ2VtZW50X29uX3N1cmZhY2VfMklTOV9OU18zNkFycl9ib3VuZGVkX3BsYW5hcl90b3BvbG9neV90cmFpdHNfMklTOV9OU18xNkFycl9kZWZhdWx0X2RjZWxJUzlfRUVFRUVFRUVOU18yMkFycl9jb25zdHJ1Y3Rpb25fZXZlbnRJU0dfU0ZfTjVib29zdDE5ZmFzdF9wb29sX2FsbG9jYXRvcklpTlNJXzMzZGVmYXVsdF91c2VyX2FsbG9jYXRvcl9uZXdfZGVsZXRlRU5TdDNfXzI1bXV0ZXhFTGozMkVMajBFRUVOU18xNVN1cmZhY2Vfc3dlZXBfMjE4RGVmYXVsdF9ldmVudF9iYXNlRU5TT18xNkRlZmF1bHRfc3ViY3VydmVFRUVTTl9TUV9OU183RGVmYXVsdEVFRU5TT18xNEN1cnZlX2NvbXBhcmVySVNHX1NSX1NUX0VFU05fTlNfMTFCb29sZWFuX3RhZ0lMYjBFRUVFRQAAQHwAAFBGAAABAAAAAgAAAAIAAAABAEGYkQELBQIAAAACAEGwkQELUQEAAAABAAAAkJ8AAAAAAAAZAAoAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkAEQoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQBBkZIBCyEOAAAAAAAAAAAZAAoNGRkZAA0AAAIACQ4AAAAJAA4AAA4AQcuSAQsBDABB15IBCxUTAAAAABMAAAAACQwAAAAAAAwAAAwAQYWTAQsBEABBkZMBCxUPAAAABA8AAAAACRAAAAAAABAAABAAQb+TAQsBEgBBy5MBCx4RAAAAABEAAAAACRIAAAAAABIAABIAABoAAAAaGhoAQYKUAQsOGgAAABoaGgAAAAAAAAkAQbOUAQsBFABBv5QBCxUXAAAAABcAAAAACRQAAAAAABQAABQAQe2UAQsBFgBB+ZQBC4kSFQAAAAAVAAAAAAkWAAAAAAAWAAAWAAAwMTIzNDU2Nzg5QUJDREVG0XSeAFedvSqAcFIP//8+JwoAAABkAAAA6AMAABAnAACghgEAQEIPAICWmAAA4fUFGAAAADUAAABxAAAAa////877//+Sv///AAAAAAAAAAD/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgQHAwYFAAAAAAAAAAIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM2wAAAAAA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\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=Module[\"asm\"][\"memory\"];assert(wasmMemory,\"memory not found in wasm exports\");updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module[\"asm\"][\"__indirect_function_table\"];assert(wasmTable,\"table not found in wasm exports\");addOnInit(Module[\"asm\"][\"__wasm_call_ctors\"]);removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,\"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?\");trueModule=null;receiveInstance(result[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);if(isFileURI(wasmBinaryFile)){err(\"warning: Loading from a file URI (\"+wasmBinaryFile+\") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing\")}abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch==\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function array_bounds_check_error(idx,size){throw\"Array index \"+idx+\" out of bounds: [0,\"+size+\")\"}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func==\"number\"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function withStackSave(f){var stack=stackSave();var ret=f();stackRestore(stack);return ret}function demangle(func){demangle.recursionGuard=(demangle.recursionGuard|0)+1;if(demangle.recursionGuard>1)return func;var __cxa_demangle_func=Module[\"___cxa_demangle\"]||Module[\"__cxa_demangle\"];assert(__cxa_demangle_func);return withStackSave(function(){try{var s=func;if(s.startsWith(\"__Z\"))s=s.substr(1);var len=lengthBytesUTF8(s)+1;var buf=stackAlloc(len);stringToUTF8(s,buf,len);var status=stackAlloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return UTF8ToString(ret)}}catch(e){}finally{_free(ret);if(demangle.recursionGuard<2)--demangle.recursionGuard}return func})}function demangleAll(text){var regex=/\\b_Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+\" [\"+x+\"]\"})}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,\"JavaScript-side Wasm function table mirror is out of date!\");return func}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return\"(no stack trace available)\"}}return error.stack.toString()}function setWasmTableEntry(idx,func){wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;assert(prev>0);return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.\"}function _abort(){abort(\"native code called abort()\")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){err(\"emscripten_realloc_buffer: Attempted to grow heap from \"+buffer.byteLength+\" bytes to \"+size+\" bytes, but got error: \"+e)}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(\"Cannot enlarge memory, asked to go up to \"+requestedSize+\" bytes, but the limit is \"+maxHeapSize+\" bytes!\");return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}err(\"Failed to grow the heap from \"+oldSize+\" bytes to \"+newSize+\" bytes, not enough memory!\");return false}var ENV={};function getExecutableName(){return thisProgram||\"./this.program\"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={\"USER\":\"web_user\",\"LOGNAME\":\"web_user\",\"PATH\":\"/\",\"PWD\":\"/\",\"HOME\":\"/home/web_user\",\"LANG\":lang,\"_\":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+\"=\"+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}var SYSCALLS={varargs:undefined,get:function(){assert(SYSCALLS.varargs!=undefined);SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){abort(\"fd_close called without SYSCALLS_REQUIRE_FILESYSTEM\")}function _fd_read(fd,iov,iovcnt,pnum){abort(\"fd_read called without SYSCALLS_REQUIRE_FILESYSTEM\")}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function flush_NO_FILESYSTEM(){_fflush(0);if(printCharBuffers[1].length)printChar(1,10);if(printCharBuffers[2].length)printChar(2,10)}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):\"\"};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_1[rule])}var WEEKDAYS=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];var MONTHS=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function leadingSomething(value,digits,character){var str=typeof value==\"number\"?value.toString():value||\"\";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,\"0\")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={\"%a\":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},\"%A\":function(date){return WEEKDAYS[date.tm_wday]},\"%b\":function(date){return MONTHS[date.tm_mon].substring(0,3)},\"%B\":function(date){return MONTHS[date.tm_mon]},\"%C\":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},\"%d\":function(date){return leadingNulls(date.tm_mday,2)},\"%e\":function(date){return leadingSomething(date.tm_mday,2,\" \")},\"%g\":function(date){return getWeekBasedYear(date).toString().substring(2)},\"%G\":function(date){return getWeekBasedYear(date)},\"%H\":function(date){return leadingNulls(date.tm_hour,2)},\"%I\":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},\"%j\":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},\"%m\":function(date){return leadingNulls(date.tm_mon+1,2)},\"%M\":function(date){return leadingNulls(date.tm_min,2)},\"%n\":function(){return\"\\n\"},\"%p\":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return\"AM\"}else{return\"PM\"}},\"%S\":function(date){return leadingNulls(date.tm_sec,2)},\"%t\":function(){return\"\\t\"},\"%u\":function(date){return date.tm_wday||7},\"%U\":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},\"%V\":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},\"%w\":function(date){return date.tm_wday},\"%W\":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},\"%y\":function(date){return(date.tm_year+1900).toString().substring(2)},\"%Y\":function(date){return date.tm_year+1900},\"%z\":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?\"+\":\"-\")+String(\"0000\"+off).slice(-4)},\"%Z\":function(date){return date.tm_zone},\"%%\":function(){return\"%\"}};pattern=pattern.replace(/%%/g,\"\\0\\0\");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\\0\\0/g,\"%\");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var ASSERTIONS=true;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\")  at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob==\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE==\"boolean\"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,\"base64\");return new Uint8Array(buf[\"buffer\"],buf[\"byteOffset\"],buf[\"byteLength\"])}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error(\"Converting base64 string to bytes failed.\")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}function checkIncomingModuleAPI(){ignoredModuleProp(\"fetchSettings\")}var asmLibraryArg={\"__cxa_allocate_exception\":___cxa_allocate_exception,\"__cxa_throw\":___cxa_throw,\"abort\":_abort,\"array_bounds_check_error\":array_bounds_check_error,\"emscripten_memcpy_big\":_emscripten_memcpy_big,\"emscripten_resize_heap\":_emscripten_resize_heap,\"environ_get\":_environ_get,\"environ_sizes_get\":_environ_sizes_get,\"exit\":_exit,\"fd_close\":_fd_close,\"fd_read\":_fd_read,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write,\"setTempRet0\":_setTempRet0,\"strftime_l\":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=createExportWrapper(\"__wasm_call_ctors\");var _malloc=Module[\"_malloc\"]=createExportWrapper(\"malloc\");var _free=Module[\"_free\"]=createExportWrapper(\"free\");var _emscripten_bind_VoidPtr___destroy___0=Module[\"_emscripten_bind_VoidPtr___destroy___0\"]=createExportWrapper(\"emscripten_bind_VoidPtr___destroy___0\");var _emscripten_bind_ArrangementBuilder_ArrangementBuilder_0=Module[\"_emscripten_bind_ArrangementBuilder_ArrangementBuilder_0\"]=createExportWrapper(\"emscripten_bind_ArrangementBuilder_ArrangementBuilder_0\");var _emscripten_bind_ArrangementBuilder_getPolygons_1=Module[\"_emscripten_bind_ArrangementBuilder_getPolygons_1\"]=createExportWrapper(\"emscripten_bind_ArrangementBuilder_getPolygons_1\");var _emscripten_bind_ArrangementBuilder___destroy___0=Module[\"_emscripten_bind_ArrangementBuilder___destroy___0\"]=createExportWrapper(\"emscripten_bind_ArrangementBuilder___destroy___0\");var _emscripten_bind_Point_Point_0=Module[\"_emscripten_bind_Point_Point_0\"]=createExportWrapper(\"emscripten_bind_Point_Point_0\");var _emscripten_bind_Point_Point_2=Module[\"_emscripten_bind_Point_Point_2\"]=createExportWrapper(\"emscripten_bind_Point_Point_2\");var _emscripten_bind_Point_get_x_0=Module[\"_emscripten_bind_Point_get_x_0\"]=createExportWrapper(\"emscripten_bind_Point_get_x_0\");var _emscripten_bind_Point_set_x_1=Module[\"_emscripten_bind_Point_set_x_1\"]=createExportWrapper(\"emscripten_bind_Point_set_x_1\");var _emscripten_bind_Point_get_y_0=Module[\"_emscripten_bind_Point_get_y_0\"]=createExportWrapper(\"emscripten_bind_Point_get_y_0\");var _emscripten_bind_Point_set_y_1=Module[\"_emscripten_bind_Point_set_y_1\"]=createExportWrapper(\"emscripten_bind_Point_set_y_1\");var _emscripten_bind_Point___destroy___0=Module[\"_emscripten_bind_Point___destroy___0\"]=createExportWrapper(\"emscripten_bind_Point___destroy___0\");var _emscripten_bind_Polygon_Polygon_2=Module[\"_emscripten_bind_Polygon_Polygon_2\"]=createExportWrapper(\"emscripten_bind_Polygon_Polygon_2\");var _emscripten_bind_Polygon_getInsidePoint_1=Module[\"_emscripten_bind_Polygon_getInsidePoint_1\"]=createExportWrapper(\"emscripten_bind_Polygon_getInsidePoint_1\");var _emscripten_bind_Polygon_getPolyTristripArea_0=Module[\"_emscripten_bind_Polygon_getPolyTristripArea_0\"]=createExportWrapper(\"emscripten_bind_Polygon_getPolyTristripArea_0\");var _emscripten_bind_Polygon_get_contour_0=Module[\"_emscripten_bind_Polygon_get_contour_0\"]=createExportWrapper(\"emscripten_bind_Polygon_get_contour_0\");var _emscripten_bind_Polygon_set_contour_1=Module[\"_emscripten_bind_Polygon_set_contour_1\"]=createExportWrapper(\"emscripten_bind_Polygon_set_contour_1\");var _emscripten_bind_Polygon_get_holes_0=Module[\"_emscripten_bind_Polygon_get_holes_0\"]=createExportWrapper(\"emscripten_bind_Polygon_get_holes_0\");var _emscripten_bind_Polygon_set_holes_1=Module[\"_emscripten_bind_Polygon_set_holes_1\"]=createExportWrapper(\"emscripten_bind_Polygon_set_holes_1\");var _emscripten_bind_Polygon___destroy___0=Module[\"_emscripten_bind_Polygon___destroy___0\"]=createExportWrapper(\"emscripten_bind_Polygon___destroy___0\");var _emscripten_bind_PointList_PointList_0=Module[\"_emscripten_bind_PointList_PointList_0\"]=createExportWrapper(\"emscripten_bind_PointList_PointList_0\");var _emscripten_bind_PointList_push_back_1=Module[\"_emscripten_bind_PointList_push_back_1\"]=createExportWrapper(\"emscripten_bind_PointList_push_back_1\");var _emscripten_bind_PointList_size_0=Module[\"_emscripten_bind_PointList_size_0\"]=createExportWrapper(\"emscripten_bind_PointList_size_0\");var _emscripten_bind_PointList_at_1=Module[\"_emscripten_bind_PointList_at_1\"]=createExportWrapper(\"emscripten_bind_PointList_at_1\");var _emscripten_bind_PointList_clear_0=Module[\"_emscripten_bind_PointList_clear_0\"]=createExportWrapper(\"emscripten_bind_PointList_clear_0\");var _emscripten_bind_PointList___destroy___0=Module[\"_emscripten_bind_PointList___destroy___0\"]=createExportWrapper(\"emscripten_bind_PointList___destroy___0\");var _emscripten_bind_PolygonList_PolygonList_0=Module[\"_emscripten_bind_PolygonList_PolygonList_0\"]=createExportWrapper(\"emscripten_bind_PolygonList_PolygonList_0\");var _emscripten_bind_PolygonList_push_back_1=Module[\"_emscripten_bind_PolygonList_push_back_1\"]=createExportWrapper(\"emscripten_bind_PolygonList_push_back_1\");var _emscripten_bind_PolygonList_size_0=Module[\"_emscripten_bind_PolygonList_size_0\"]=createExportWrapper(\"emscripten_bind_PolygonList_size_0\");var _emscripten_bind_PolygonList_at_1=Module[\"_emscripten_bind_PolygonList_at_1\"]=createExportWrapper(\"emscripten_bind_PolygonList_at_1\");var _emscripten_bind_PolygonList_clear_0=Module[\"_emscripten_bind_PolygonList_clear_0\"]=createExportWrapper(\"emscripten_bind_PolygonList_clear_0\");var _emscripten_bind_PolygonList___destroy___0=Module[\"_emscripten_bind_PolygonList___destroy___0\"]=createExportWrapper(\"emscripten_bind_PolygonList___destroy___0\");var _emscripten_bind_Contour_Contour_0=Module[\"_emscripten_bind_Contour_Contour_0\"]=createExportWrapper(\"emscripten_bind_Contour_Contour_0\");var _emscripten_bind_Contour_push_back_1=Module[\"_emscripten_bind_Contour_push_back_1\"]=createExportWrapper(\"emscripten_bind_Contour_push_back_1\");var _emscripten_bind_Contour_size_0=Module[\"_emscripten_bind_Contour_size_0\"]=createExportWrapper(\"emscripten_bind_Contour_size_0\");var _emscripten_bind_Contour_at_1=Module[\"_emscripten_bind_Contour_at_1\"]=createExportWrapper(\"emscripten_bind_Contour_at_1\");var _emscripten_bind_Contour_clear_0=Module[\"_emscripten_bind_Contour_clear_0\"]=createExportWrapper(\"emscripten_bind_Contour_clear_0\");var _emscripten_bind_Contour___destroy___0=Module[\"_emscripten_bind_Contour___destroy___0\"]=createExportWrapper(\"emscripten_bind_Contour___destroy___0\");var _emscripten_bind_ContourList_ContourList_0=Module[\"_emscripten_bind_ContourList_ContourList_0\"]=createExportWrapper(\"emscripten_bind_ContourList_ContourList_0\");var _emscripten_bind_ContourList_push_back_1=Module[\"_emscripten_bind_ContourList_push_back_1\"]=createExportWrapper(\"emscripten_bind_ContourList_push_back_1\");var _emscripten_bind_ContourList_size_0=Module[\"_emscripten_bind_ContourList_size_0\"]=createExportWrapper(\"emscripten_bind_ContourList_size_0\");var _emscripten_bind_ContourList_at_1=Module[\"_emscripten_bind_ContourList_at_1\"]=createExportWrapper(\"emscripten_bind_ContourList_at_1\");var _emscripten_bind_ContourList_clear_0=Module[\"_emscripten_bind_ContourList_clear_0\"]=createExportWrapper(\"emscripten_bind_ContourList_clear_0\");var _emscripten_bind_ContourList___destroy___0=Module[\"_emscripten_bind_ContourList___destroy___0\"]=createExportWrapper(\"emscripten_bind_ContourList___destroy___0\");var ___errno_location=Module[\"___errno_location\"]=createExportWrapper(\"__errno_location\");var _fflush=Module[\"_fflush\"]=createExportWrapper(\"fflush\");var _emscripten_stack_init=Module[\"_emscripten_stack_init\"]=function(){return(_emscripten_stack_init=Module[\"_emscripten_stack_init\"]=Module[\"asm\"][\"emscripten_stack_init\"]).apply(null,arguments)};var _emscripten_stack_get_free=Module[\"_emscripten_stack_get_free\"]=function(){return(_emscripten_stack_get_free=Module[\"_emscripten_stack_get_free\"]=Module[\"asm\"][\"emscripten_stack_get_free\"]).apply(null,arguments)};var _emscripten_stack_get_base=Module[\"_emscripten_stack_get_base\"]=function(){return(_emscripten_stack_get_base=Module[\"_emscripten_stack_get_base\"]=Module[\"asm\"][\"emscripten_stack_get_base\"]).apply(null,arguments)};var _emscripten_stack_get_end=Module[\"_emscripten_stack_get_end\"]=function(){return(_emscripten_stack_get_end=Module[\"_emscripten_stack_get_end\"]=Module[\"asm\"][\"emscripten_stack_get_end\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=createExportWrapper(\"stackSave\");var stackRestore=Module[\"stackRestore\"]=createExportWrapper(\"stackRestore\");var stackAlloc=Module[\"stackAlloc\"]=createExportWrapper(\"stackAlloc\");var ___cxa_demangle=Module[\"___cxa_demangle\"]=createExportWrapper(\"__cxa_demangle\");var ___cxa_is_pointer_type=Module[\"___cxa_is_pointer_type\"]=createExportWrapper(\"__cxa_is_pointer_type\");var dynCall_jiji=Module[\"dynCall_jiji\"]=createExportWrapper(\"dynCall_jiji\");var dynCall_viijii=Module[\"dynCall_viijii\"]=createExportWrapper(\"dynCall_viijii\");var dynCall_iiiiij=Module[\"dynCall_iiiiij\"]=createExportWrapper(\"dynCall_iiiiij\");var dynCall_iiiiijj=Module[\"dynCall_iiiiijj\"]=createExportWrapper(\"dynCall_iiiiijj\");var dynCall_iiiiiijj=Module[\"dynCall_iiiiiijj\"]=createExportWrapper(\"dynCall_iiiiiijj\");unexportedRuntimeFunction(\"ccall\",false);unexportedRuntimeFunction(\"cwrap\",false);unexportedRuntimeFunction(\"allocate\",false);unexportedRuntimeFunction(\"UTF8ArrayToString\",false);unexportedRuntimeFunction(\"UTF8ToString\",false);unexportedRuntimeFunction(\"stringToUTF8Array\",false);unexportedRuntimeFunction(\"stringToUTF8\",false);unexportedRuntimeFunction(\"lengthBytesUTF8\",false);unexportedRuntimeFunction(\"addOnPreRun\",false);unexportedRuntimeFunction(\"addOnInit\",false);unexportedRuntimeFunction(\"addOnPreMain\",false);unexportedRuntimeFunction(\"addOnExit\",false);unexportedRuntimeFunction(\"addOnPostRun\",false);unexportedRuntimeFunction(\"addRunDependency\",true);unexportedRuntimeFunction(\"removeRunDependency\",true);unexportedRuntimeFunction(\"FS_createFolder\",false);unexportedRuntimeFunction(\"FS_createPath\",true);unexportedRuntimeFunction(\"FS_createDataFile\",true);unexportedRuntimeFunction(\"FS_createPreloadedFile\",true);unexportedRuntimeFunction(\"FS_createLazyFile\",true);unexportedRuntimeFunction(\"FS_createLink\",false);unexportedRuntimeFunction(\"FS_createDevice\",true);unexportedRuntimeFunction(\"FS_unlink\",true);unexportedRuntimeFunction(\"getLEB\",false);unexportedRuntimeFunction(\"getFunctionTables\",false);unexportedRuntimeFunction(\"alignFunctionTables\",false);unexportedRuntimeFunction(\"registerFunctions\",false);unexportedRuntimeFunction(\"addFunction\",false);unexportedRuntimeFunction(\"removeFunction\",false);unexportedRuntimeFunction(\"prettyPrint\",false);unexportedRuntimeFunction(\"getCompilerSetting\",false);unexportedRuntimeFunction(\"print\",false);unexportedRuntimeFunction(\"printErr\",false);unexportedRuntimeFunction(\"getTempRet0\",false);unexportedRuntimeFunction(\"setTempRet0\",false);unexportedRuntimeFunction(\"callMain\",false);unexportedRuntimeFunction(\"abort\",false);unexportedRuntimeFunction(\"keepRuntimeAlive\",false);unexportedRuntimeFunction(\"wasmMemory\",false);unexportedRuntimeFunction(\"warnOnce\",false);unexportedRuntimeFunction(\"stackSave\",false);unexportedRuntimeFunction(\"stackRestore\",false);unexportedRuntimeFunction(\"stackAlloc\",false);unexportedRuntimeFunction(\"AsciiToString\",false);unexportedRuntimeFunction(\"stringToAscii\",false);unexportedRuntimeFunction(\"UTF16ToString\",false);unexportedRuntimeFunction(\"stringToUTF16\",false);unexportedRuntimeFunction(\"lengthBytesUTF16\",false);unexportedRuntimeFunction(\"UTF32ToString\",false);unexportedRuntimeFunction(\"stringToUTF32\",false);unexportedRuntimeFunction(\"lengthBytesUTF32\",false);unexportedRuntimeFunction(\"allocateUTF8\",false);unexportedRuntimeFunction(\"allocateUTF8OnStack\",false);unexportedRuntimeFunction(\"ExitStatus\",false);unexportedRuntimeFunction(\"intArrayFromString\",false);unexportedRuntimeFunction(\"intArrayToString\",false);unexportedRuntimeFunction(\"writeStringToMemory\",false);unexportedRuntimeFunction(\"writeArrayToMemory\",false);unexportedRuntimeFunction(\"writeAsciiToMemory\",false);Module[\"writeStackCookie\"]=writeStackCookie;Module[\"checkStackCookie\"]=checkStackCookie;unexportedRuntimeFunction(\"intArrayFromBase64\",false);unexportedRuntimeFunction(\"tryParseAsDataURI\",false);unexportedRuntimeFunction(\"ptrToString\",false);unexportedRuntimeFunction(\"zeroMemory\",false);unexportedRuntimeFunction(\"stringToNewUTF8\",false);unexportedRuntimeFunction(\"getHeapMax\",false);unexportedRuntimeFunction(\"emscripten_realloc_buffer\",false);unexportedRuntimeFunction(\"ENV\",false);unexportedRuntimeFunction(\"ERRNO_CODES\",false);unexportedRuntimeFunction(\"ERRNO_MESSAGES\",false);unexportedRuntimeFunction(\"setErrNo\",false);unexportedRuntimeFunction(\"inetPton4\",false);unexportedRuntimeFunction(\"inetNtop4\",false);unexportedRuntimeFunction(\"inetPton6\",false);unexportedRuntimeFunction(\"inetNtop6\",false);unexportedRuntimeFunction(\"readSockaddr\",false);unexportedRuntimeFunction(\"writeSockaddr\",false);unexportedRuntimeFunction(\"DNS\",false);unexportedRuntimeFunction(\"getHostByName\",false);unexportedRuntimeFunction(\"Protocols\",false);unexportedRuntimeFunction(\"Sockets\",false);unexportedRuntimeFunction(\"getRandomDevice\",false);unexportedRuntimeFunction(\"traverseStack\",false);unexportedRuntimeFunction(\"UNWIND_CACHE\",false);unexportedRuntimeFunction(\"convertPCtoSourceLocation\",false);unexportedRuntimeFunction(\"readAsmConstArgsArray\",false);unexportedRuntimeFunction(\"readAsmConstArgs\",false);unexportedRuntimeFunction(\"mainThreadEM_ASM\",false);unexportedRuntimeFunction(\"jstoi_q\",false);unexportedRuntimeFunction(\"jstoi_s\",false);unexportedRuntimeFunction(\"getExecutableName\",false);unexportedRuntimeFunction(\"listenOnce\",false);unexportedRuntimeFunction(\"autoResumeAudioContext\",false);unexportedRuntimeFunction(\"dynCallLegacy\",false);unexportedRuntimeFunction(\"getDynCaller\",false);unexportedRuntimeFunction(\"dynCall\",false);unexportedRuntimeFunction(\"handleException\",false);unexportedRuntimeFunction(\"runtimeKeepalivePush\",false);unexportedRuntimeFunction(\"runtimeKeepalivePop\",false);unexportedRuntimeFunction(\"callUserCallback\",false);unexportedRuntimeFunction(\"maybeExit\",false);unexportedRuntimeFunction(\"safeSetTimeout\",false);unexportedRuntimeFunction(\"asmjsMangle\",false);unexportedRuntimeFunction(\"asyncLoad\",false);unexportedRuntimeFunction(\"alignMemory\",false);unexportedRuntimeFunction(\"mmapAlloc\",false);unexportedRuntimeFunction(\"writeI53ToI64\",false);unexportedRuntimeFunction(\"writeI53ToI64Clamped\",false);unexportedRuntimeFunction(\"writeI53ToI64Signaling\",false);unexportedRuntimeFunction(\"writeI53ToU64Clamped\",false);unexportedRuntimeFunction(\"writeI53ToU64Signaling\",false);unexportedRuntimeFunction(\"readI53FromI64\",false);unexportedRuntimeFunction(\"readI53FromU64\",false);unexportedRuntimeFunction(\"convertI32PairToI53\",false);unexportedRuntimeFunction(\"convertI32PairToI53Checked\",false);unexportedRuntimeFunction(\"convertU32PairToI53\",false);unexportedRuntimeFunction(\"reallyNegative\",false);unexportedRuntimeFunction(\"unSign\",false);unexportedRuntimeFunction(\"strLen\",false);unexportedRuntimeFunction(\"reSign\",false);unexportedRuntimeFunction(\"formatString\",false);unexportedRuntimeFunction(\"setValue\",false);unexportedRuntimeFunction(\"getValue\",false);unexportedRuntimeFunction(\"PATH\",false);unexportedRuntimeFunction(\"PATH_FS\",false);unexportedRuntimeFunction(\"SYSCALLS\",false);unexportedRuntimeFunction(\"getSocketFromFD\",false);unexportedRuntimeFunction(\"getSocketAddress\",false);unexportedRuntimeFunction(\"JSEvents\",false);unexportedRuntimeFunction(\"registerKeyEventCallback\",false);unexportedRuntimeFunction(\"specialHTMLTargets\",false);unexportedRuntimeFunction(\"maybeCStringToJsString\",false);unexportedRuntimeFunction(\"findEventTarget\",false);unexportedRuntimeFunction(\"findCanvasEventTarget\",false);unexportedRuntimeFunction(\"getBoundingClientRect\",false);unexportedRuntimeFunction(\"fillMouseEventData\",false);unexportedRuntimeFunction(\"registerMouseEventCallback\",false);unexportedRuntimeFunction(\"registerWheelEventCallback\",false);unexportedRuntimeFunction(\"registerUiEventCallback\",false);unexportedRuntimeFunction(\"registerFocusEventCallback\",false);unexportedRuntimeFunction(\"fillDeviceOrientationEventData\",false);unexportedRuntimeFunction(\"registerDeviceOrientationEventCallback\",false);unexportedRuntimeFunction(\"fillDeviceMotionEventData\",false);unexportedRuntimeFunction(\"registerDeviceMotionEventCallback\",false);unexportedRuntimeFunction(\"screenOrientation\",false);unexportedRuntimeFunction(\"fillOrientationChangeEventData\",false);unexportedRuntimeFunction(\"registerOrientationChangeEventCallback\",false);unexportedRuntimeFunction(\"fillFullscreenChangeEventData\",false);unexportedRuntimeFunction(\"registerFullscreenChangeEventCallback\",false);unexportedRuntimeFunction(\"JSEvents_requestFullscreen\",false);unexportedRuntimeFunction(\"JSEvents_resizeCanvasForFullscreen\",false);unexportedRuntimeFunction(\"registerRestoreOldStyle\",false);unexportedRuntimeFunction(\"hideEverythingExceptGivenElement\",false);unexportedRuntimeFunction(\"restoreHiddenElements\",false);unexportedRuntimeFunction(\"setLetterbox\",false);unexportedRuntimeFunction(\"currentFullscreenStrategy\",false);unexportedRuntimeFunction(\"restoreOldWindowedStyle\",false);unexportedRuntimeFunction(\"softFullscreenResizeWebGLRenderTarget\",false);unexportedRuntimeFunction(\"doRequestFullscreen\",false);unexportedRuntimeFunction(\"fillPointerlockChangeEventData\",false);unexportedRuntimeFunction(\"registerPointerlockChangeEventCallback\",false);unexportedRuntimeFunction(\"registerPointerlockErrorEventCallback\",false);unexportedRuntimeFunction(\"requestPointerLock\",false);unexportedRuntimeFunction(\"fillVisibilityChangeEventData\",false);unexportedRuntimeFunction(\"registerVisibilityChangeEventCallback\",false);unexportedRuntimeFunction(\"registerTouchEventCallback\",false);unexportedRuntimeFunction(\"fillGamepadEventData\",false);unexportedRuntimeFunction(\"registerGamepadEventCallback\",false);unexportedRuntimeFunction(\"registerBeforeUnloadEventCallback\",false);unexportedRuntimeFunction(\"fillBatteryEventData\",false);unexportedRuntimeFunction(\"battery\",false);unexportedRuntimeFunction(\"registerBatteryEventCallback\",false);unexportedRuntimeFunction(\"setCanvasElementSize\",false);unexportedRuntimeFunction(\"getCanvasElementSize\",false);unexportedRuntimeFunction(\"demangle\",false);unexportedRuntimeFunction(\"demangleAll\",false);unexportedRuntimeFunction(\"jsStackTrace\",false);unexportedRuntimeFunction(\"stackTrace\",false);unexportedRuntimeFunction(\"getEnvStrings\",false);unexportedRuntimeFunction(\"checkWasiClock\",false);unexportedRuntimeFunction(\"flush_NO_FILESYSTEM\",false);unexportedRuntimeFunction(\"dlopenMissingError\",false);unexportedRuntimeFunction(\"setImmediateWrapped\",false);unexportedRuntimeFunction(\"clearImmediateWrapped\",false);unexportedRuntimeFunction(\"polyfillSetImmediate\",false);unexportedRuntimeFunction(\"uncaughtExceptionCount\",false);unexportedRuntimeFunction(\"exceptionLast\",false);unexportedRuntimeFunction(\"exceptionCaught\",false);unexportedRuntimeFunction(\"ExceptionInfo\",false);unexportedRuntimeFunction(\"exception_addRef\",false);unexportedRuntimeFunction(\"exception_decRef\",false);unexportedRuntimeFunction(\"Browser\",false);unexportedRuntimeFunction(\"setMainLoop\",false);unexportedRuntimeFunction(\"wget\",false);unexportedRuntimeFunction(\"tempFixedLengthArray\",false);unexportedRuntimeFunction(\"miniTempWebGLFloatBuffers\",false);unexportedRuntimeFunction(\"heapObjectForWebGLType\",false);unexportedRuntimeFunction(\"heapAccessShiftForWebGLHeap\",false);unexportedRuntimeFunction(\"GL\",false);unexportedRuntimeFunction(\"emscriptenWebGLGet\",false);unexportedRuntimeFunction(\"computeUnpackAlignedImageSize\",false);unexportedRuntimeFunction(\"emscriptenWebGLGetTexPixelData\",false);unexportedRuntimeFunction(\"emscriptenWebGLGetUniform\",false);unexportedRuntimeFunction(\"webglGetUniformLocation\",false);unexportedRuntimeFunction(\"webglPrepareUniformLocationsBeforeFirstUse\",false);unexportedRuntimeFunction(\"webglGetLeftBracePos\",false);unexportedRuntimeFunction(\"emscriptenWebGLGetVertexAttrib\",false);unexportedRuntimeFunction(\"writeGLArray\",false);unexportedRuntimeFunction(\"AL\",false);unexportedRuntimeFunction(\"SDL_unicode\",false);unexportedRuntimeFunction(\"SDL_ttfContext\",false);unexportedRuntimeFunction(\"SDL_audio\",false);unexportedRuntimeFunction(\"SDL\",false);unexportedRuntimeFunction(\"SDL_gfx\",false);unexportedRuntimeFunction(\"GLUT\",false);unexportedRuntimeFunction(\"EGL\",false);unexportedRuntimeFunction(\"GLFW_Window\",false);unexportedRuntimeFunction(\"GLFW\",false);unexportedRuntimeFunction(\"GLEW\",false);unexportedRuntimeFunction(\"IDBStore\",false);unexportedRuntimeFunction(\"runAndAbortIfError\",false);unexportedRuntimeSymbol(\"ALLOC_NORMAL\",false);unexportedRuntimeSymbol(\"ALLOC_STACK\",false);var calledRun;function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(args){args=args||arguments_;if(runDependencies>0){return}stackCheckInit();preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();assert(!Module[\"_main\"],'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]');postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}checkStackCookie()}Module[\"run\"]=run;function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{flush_NO_FILESYSTEM()}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce(\"stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.\");warnOnce(\"(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)\")}}function exit(status,implicit){EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=\"program exited (with status: \"+status+\"), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)\";readyPromiseReject(msg);err(msg)}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module[\"onExit\"])Module[\"onExit\"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}run();function WrapperObject(){}WrapperObject.prototype=Object.create(WrapperObject.prototype);WrapperObject.prototype.constructor=WrapperObject;WrapperObject.prototype.__class__=WrapperObject;WrapperObject.__cache__={};Module[\"WrapperObject\"]=WrapperObject;function getCache(__class__){return(__class__||WrapperObject).__cache__}Module[\"getCache\"]=getCache;function wrapPointer(ptr,__class__){var cache=getCache(__class__);var ret=cache[ptr];if(ret)return ret;ret=Object.create((__class__||WrapperObject).prototype);ret.ptr=ptr;return cache[ptr]=ret}Module[\"wrapPointer\"]=wrapPointer;function castObject(obj,__class__){return wrapPointer(obj.ptr,__class__)}Module[\"castObject\"]=castObject;Module[\"NULL\"]=wrapPointer(0);function destroy(obj){if(!obj[\"__destroy__\"])throw\"Error: Cannot destroy object. (Did you create it yourself?)\";obj[\"__destroy__\"]();delete getCache(obj.__class__)[obj.ptr]}Module[\"destroy\"]=destroy;function compare(obj1,obj2){return obj1.ptr===obj2.ptr}Module[\"compare\"]=compare;function getPointer(obj){return obj.ptr}Module[\"getPointer\"]=getPointer;function getClass(obj){return obj.__class__}Module[\"getClass\"]=getClass;var ensureCache={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(ensureCache.needed){for(var i=0;i<ensureCache.temps.length;i++){Module[\"_free\"](ensureCache.temps[i])}ensureCache.temps.length=0;Module[\"_free\"](ensureCache.buffer);ensureCache.buffer=0;ensureCache.size+=ensureCache.needed;ensureCache.needed=0}if(!ensureCache.buffer){ensureCache.size+=128;ensureCache.buffer=Module[\"_malloc\"](ensureCache.size);assert(ensureCache.buffer)}ensureCache.pos=0},alloc:function(array,view){assert(ensureCache.buffer);var bytes=view.BYTES_PER_ELEMENT;var len=array.length*bytes;len=len+7&-8;var ret;if(ensureCache.pos+len>=ensureCache.size){assert(len>0);ensureCache.needed+=len;ret=Module[\"_malloc\"](len);ensureCache.temps.push(ret)}else{ret=ensureCache.buffer+ensureCache.pos;ensureCache.pos+=len}return ret},copy:function(array,view,offset){offset>>>=0;var bytes=view.BYTES_PER_ELEMENT;switch(bytes){case 2:offset>>>=1;break;case 4:offset>>>=2;break;case 8:offset>>>=3;break}for(var i=0;i<array.length;i++){view[offset+i]=array[i]}}};function VoidPtr(){throw\"cannot construct a VoidPtr, no constructor in IDL\"}VoidPtr.prototype=Object.create(WrapperObject.prototype);VoidPtr.prototype.constructor=VoidPtr;VoidPtr.prototype.__class__=VoidPtr;VoidPtr.__cache__={};Module[\"VoidPtr\"]=VoidPtr;VoidPtr.prototype[\"__destroy__\"]=VoidPtr.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_VoidPtr___destroy___0(self)};function ArrangementBuilder(){this.ptr=_emscripten_bind_ArrangementBuilder_ArrangementBuilder_0();getCache(ArrangementBuilder)[this.ptr]=this}ArrangementBuilder.prototype=Object.create(WrapperObject.prototype);ArrangementBuilder.prototype.constructor=ArrangementBuilder;ArrangementBuilder.prototype.__class__=ArrangementBuilder;ArrangementBuilder.__cache__={};Module[\"ArrangementBuilder\"]=ArrangementBuilder;ArrangementBuilder.prototype[\"getPolygons\"]=ArrangementBuilder.prototype.getPolygons=function(points){var self=this.ptr;if(points&&typeof points===\"object\")points=points.ptr;return wrapPointer(_emscripten_bind_ArrangementBuilder_getPolygons_1(self,points),PolygonList)};ArrangementBuilder.prototype[\"__destroy__\"]=ArrangementBuilder.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_ArrangementBuilder___destroy___0(self)};function Point(x,y){if(x&&typeof x===\"object\")x=x.ptr;if(y&&typeof y===\"object\")y=y.ptr;if(x===undefined){this.ptr=_emscripten_bind_Point_Point_0();getCache(Point)[this.ptr]=this;return}if(y===undefined){this.ptr=_emscripten_bind_Point_Point_1(x);getCache(Point)[this.ptr]=this;return}this.ptr=_emscripten_bind_Point_Point_2(x,y);getCache(Point)[this.ptr]=this}Point.prototype=Object.create(WrapperObject.prototype);Point.prototype.constructor=Point;Point.prototype.__class__=Point;Point.__cache__={};Module[\"Point\"]=Point;Point.prototype[\"get_x\"]=Point.prototype.get_x=function(){var self=this.ptr;return _emscripten_bind_Point_get_x_0(self)};Point.prototype[\"set_x\"]=Point.prototype.set_x=function(arg0){var self=this.ptr;if(arg0&&typeof arg0===\"object\")arg0=arg0.ptr;_emscripten_bind_Point_set_x_1(self,arg0)};Object.defineProperty(Point.prototype,\"x\",{get:Point.prototype.get_x,set:Point.prototype.set_x});Point.prototype[\"get_y\"]=Point.prototype.get_y=function(){var self=this.ptr;return _emscripten_bind_Point_get_y_0(self)};Point.prototype[\"set_y\"]=Point.prototype.set_y=function(arg0){var self=this.ptr;if(arg0&&typeof arg0===\"object\")arg0=arg0.ptr;_emscripten_bind_Point_set_y_1(self,arg0)};Object.defineProperty(Point.prototype,\"y\",{get:Point.prototype.get_y,set:Point.prototype.set_y});Point.prototype[\"__destroy__\"]=Point.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_Point___destroy___0(self)};function Polygon(contour,holes){if(contour&&typeof contour===\"object\")contour=contour.ptr;if(holes&&typeof holes===\"object\")holes=holes.ptr;this.ptr=_emscripten_bind_Polygon_Polygon_2(contour,holes);getCache(Polygon)[this.ptr]=this}Polygon.prototype=Object.create(WrapperObject.prototype);Polygon.prototype.constructor=Polygon;Polygon.prototype.__class__=Polygon;Polygon.__cache__={};Module[\"Polygon\"]=Polygon;Polygon.prototype[\"getInsidePoint\"]=Polygon.prototype.getInsidePoint=function(point){var self=this.ptr;if(point&&typeof point===\"object\")point=point.ptr;return!!_emscripten_bind_Polygon_getInsidePoint_1(self,point)};Polygon.prototype[\"getPolyTristripArea\"]=Polygon.prototype.getPolyTristripArea=function(){var self=this.ptr;return _emscripten_bind_Polygon_getPolyTristripArea_0(self)};Polygon.prototype[\"get_contour\"]=Polygon.prototype.get_contour=function(){var self=this.ptr;return wrapPointer(_emscripten_bind_Polygon_get_contour_0(self),Contour)};Polygon.prototype[\"set_contour\"]=Polygon.prototype.set_contour=function(arg0){var self=this.ptr;if(arg0&&typeof arg0===\"object\")arg0=arg0.ptr;_emscripten_bind_Polygon_set_contour_1(self,arg0)};Object.defineProperty(Polygon.prototype,\"contour\",{get:Polygon.prototype.get_contour,set:Polygon.prototype.set_contour});Polygon.prototype[\"get_holes\"]=Polygon.prototype.get_holes=function(){var self=this.ptr;return wrapPointer(_emscripten_bind_Polygon_get_holes_0(self),ContourList)};Polygon.prototype[\"set_holes\"]=Polygon.prototype.set_holes=function(arg0){var self=this.ptr;if(arg0&&typeof arg0===\"object\")arg0=arg0.ptr;_emscripten_bind_Polygon_set_holes_1(self,arg0)};Object.defineProperty(Polygon.prototype,\"holes\",{get:Polygon.prototype.get_holes,set:Polygon.prototype.set_holes});Polygon.prototype[\"__destroy__\"]=Polygon.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_Polygon___destroy___0(self)};function PointList(){this.ptr=_emscripten_bind_PointList_PointList_0();getCache(PointList)[this.ptr]=this}PointList.prototype=Object.create(WrapperObject.prototype);PointList.prototype.constructor=PointList;PointList.prototype.__class__=PointList;PointList.__cache__={};Module[\"PointList\"]=PointList;PointList.prototype[\"push_back\"]=PointList.prototype.push_back=function(s){var self=this.ptr;if(s&&typeof s===\"object\")s=s.ptr;_emscripten_bind_PointList_push_back_1(self,s)};PointList.prototype[\"size\"]=PointList.prototype.size=function(){var self=this.ptr;return _emscripten_bind_PointList_size_0(self)};PointList.prototype[\"at\"]=PointList.prototype.at=function(i){var self=this.ptr;if(i&&typeof i===\"object\")i=i.ptr;return wrapPointer(_emscripten_bind_PointList_at_1(self,i),Point)};PointList.prototype[\"clear\"]=PointList.prototype.clear=function(){var self=this.ptr;_emscripten_bind_PointList_clear_0(self)};PointList.prototype[\"__destroy__\"]=PointList.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_PointList___destroy___0(self)};function PolygonList(){this.ptr=_emscripten_bind_PolygonList_PolygonList_0();getCache(PolygonList)[this.ptr]=this}PolygonList.prototype=Object.create(WrapperObject.prototype);PolygonList.prototype.constructor=PolygonList;PolygonList.prototype.__class__=PolygonList;PolygonList.__cache__={};Module[\"PolygonList\"]=PolygonList;PolygonList.prototype[\"push_back\"]=PolygonList.prototype.push_back=function(s){var self=this.ptr;if(s&&typeof s===\"object\")s=s.ptr;_emscripten_bind_PolygonList_push_back_1(self,s)};PolygonList.prototype[\"size\"]=PolygonList.prototype.size=function(){var self=this.ptr;return _emscripten_bind_PolygonList_size_0(self)};PolygonList.prototype[\"at\"]=PolygonList.prototype.at=function(i){var self=this.ptr;if(i&&typeof i===\"object\")i=i.ptr;return wrapPointer(_emscripten_bind_PolygonList_at_1(self,i),Polygon)};PolygonList.prototype[\"clear\"]=PolygonList.prototype.clear=function(){var self=this.ptr;_emscripten_bind_PolygonList_clear_0(self)};PolygonList.prototype[\"__destroy__\"]=PolygonList.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_PolygonList___destroy___0(self)};function Contour(){this.ptr=_emscripten_bind_Contour_Contour_0();getCache(Contour)[this.ptr]=this}Contour.prototype=Object.create(WrapperObject.prototype);Contour.prototype.constructor=Contour;Contour.prototype.__class__=Contour;Contour.__cache__={};Module[\"Contour\"]=Contour;Contour.prototype[\"push_back\"]=Contour.prototype.push_back=function(s){var self=this.ptr;if(s&&typeof s===\"object\")s=s.ptr;_emscripten_bind_Contour_push_back_1(self,s)};Contour.prototype[\"size\"]=Contour.prototype.size=function(){var self=this.ptr;return _emscripten_bind_Contour_size_0(self)};Contour.prototype[\"at\"]=Contour.prototype.at=function(i){var self=this.ptr;if(i&&typeof i===\"object\")i=i.ptr;return wrapPointer(_emscripten_bind_Contour_at_1(self,i),Point)};Contour.prototype[\"clear\"]=Contour.prototype.clear=function(){var self=this.ptr;_emscripten_bind_Contour_clear_0(self)};Contour.prototype[\"__destroy__\"]=Contour.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_Contour___destroy___0(self)};function ContourList(){this.ptr=_emscripten_bind_ContourList_ContourList_0();getCache(ContourList)[this.ptr]=this}ContourList.prototype=Object.create(WrapperObject.prototype);ContourList.prototype.constructor=ContourList;ContourList.prototype.__class__=ContourList;ContourList.__cache__={};Module[\"ContourList\"]=ContourList;ContourList.prototype[\"push_back\"]=ContourList.prototype.push_back=function(s){var self=this.ptr;if(s&&typeof s===\"object\")s=s.ptr;_emscripten_bind_ContourList_push_back_1(self,s)};ContourList.prototype[\"size\"]=ContourList.prototype.size=function(){var self=this.ptr;return _emscripten_bind_ContourList_size_0(self)};ContourList.prototype[\"at\"]=ContourList.prototype.at=function(i){var self=this.ptr;if(i&&typeof i===\"object\")i=i.ptr;return wrapPointer(_emscripten_bind_ContourList_at_1(self,i),Contour)};ContourList.prototype[\"clear\"]=ContourList.prototype.clear=function(){var self=this.ptr;_emscripten_bind_ContourList_clear_0(self)};ContourList.prototype[\"__destroy__\"]=ContourList.prototype.__destroy__=function(){var self=this.ptr;_emscripten_bind_ContourList___destroy___0(self)};\n\n\n  return Arrangement2D.ready\n}\n);\n})();\nexport default Arrangement2D;","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 22 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport Arrangement2D from 'arrangement-2d-js';\nimport {Vector2} from 'three';\nimport {ChainVisibility} from '../Chain';\nimport {Polygon} from '../Polygon';\nimport {Viewmap} from '../Viewmap';\n\n// Make the wrapper a global promise so it is load once\nconst Arr2DPromise = Arrangement2D();\n\nexport class PolygonsInfo{\n  smallAreaIgnored = Infinity;\n  insidePointErrors = Infinity;\n}\n\n/**\n * Computes the polygons formed by the projection of the ViewEdges on the image\n * plane\n * @param viewmap\n * @param info\n */\nexport async function computePolygons(\n    viewmap: Viewmap,\n    info = new PolygonsInfo()) {\n\n  const {chains, polygons} = viewmap;\n  const Arr2D = await Arr2DPromise;\n\n  const visibleChains = chains.filter(c => c.visibility === ChainVisibility.Visible);\n\n  const points = new Arr2D.PointList();\n  let a, b;\n  for (const chain of visibleChains) {\n    a = new Arr2D.Point(chain.vertices[0].pos2d.x, chain.vertices[0].pos2d.y);\n    for (let i=1; i<chain.vertices.length; i++) {\n      b = new Arr2D.Point(chain.vertices[i].pos2d.x, chain.vertices[i].pos2d.y);\n      points.push_back(a);\n      points.push_back(b);\n      a = b;\n    }\n  }\n\n  const builder = new Arr2D.ArrangementBuilder();\n  // todo: this gets stuck in infinite loop sometimes. either clamp or run it in a worker with timeout?\n  const arr2DPolygonlist = builder.getPolygons(points);\n\n  const p = new Arr2D.Point();\n  info.smallAreaIgnored = 0;\n  info.insidePointErrors = 0;\n\n  for (let i=0; i<arr2DPolygonlist.size(); i++) {\n    const arr2DPolygon = arr2DPolygonlist.at(i);\n\n    const area = arr2DPolygon.getPolyTristripArea();\n\n    if (area > 1e-10) {\n\n      // Transform types from the Arrangement2D to more friendly three types\n      const contour = convertContour(arr2DPolygon.contour);\n      const holes = convertContourList(arr2DPolygon.holes);\n      const polygon = new Polygon(i, contour, holes);\n\n      if (arr2DPolygon.getInsidePoint(p)) {\n        polygon.insidePoint.set(p.x, p.y);\n        polygons.push(polygon);\n      } else {\n        info.insidePointErrors += 1;\n      }\n\n    } else {\n      info.smallAreaIgnored += 1;\n    }\n\n    Arr2D.destroy(arr2DPolygon);\n  }\n  Arr2D.destroy(arr2DPolygonlist);\n  Arr2D.destroy(p);\n}\n\nexport function convertContourList(\n    vector: Arrangement2D.ContourList) : Array<Array<Vector2>> {\n\n  const array = new Array<Array<Vector2>>();\n  for (let i=0; i<vector.size(); i++) {\n    array.push(convertContour(vector.at(i)));\n  }\n  return array;\n}\n\nexport function convertContour(\n    contour: Arrangement2D.Contour) : Array<Vector2> {\n\n  const array = new Array<Vector2>();\n  for (let i=0; i<contour.size(); i++) {\n    const p = contour.at(i);\n    array.push(new Vector2(p.x, p.y));\n  }\n  return array;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Mon Dec 12 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Vector3 } from \"three\";\nimport { hashVector2, hashVector3, projectPoint } from \"../../../utils\";\nimport { Viewmap } from \"../Viewmap\";\nimport { ViewVertex } from \"../ViewVertex\";\n\n/**\n * Creates a ViewVertex at the given position if no one already exist\n * @param viewmap \n * @param pos3d \n * @returns \n */\nexport function createViewVertex(viewmap: Viewmap, pos3d: Vector3) {\n\n  const {camera, viewVertexMap, renderSize} = viewmap;\n\n  const hash3d = hashVector3(pos3d);\n  let viewVertex = viewVertexMap.get(hash3d);\n  if (!viewVertex) {\n    viewVertex = new ViewVertex();\n    viewVertex.pos3d.copy(pos3d);\n    projectPoint(pos3d, viewVertex.pos2d, camera, renderSize);\n    viewVertex.hash2d = hashVector2(viewVertex.pos2d);\n    viewVertex.hash3d = hash3d;\n    viewVertexMap.set(hash3d, viewVertex);\n  }\n  return viewVertex;\n\n}","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Wed Nov 16 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {Halfedge} from \"../../../../three-mesh-halfedge\";\nimport {frontSide} from \"../../../utils\";\nimport {ViewEdge, ViewEdgeNature} from \"../ViewEdge\";\nimport {Viewmap} from \"../Viewmap\";\nimport {PerspectiveCamera, Vector3} from \"three\";\nimport {createViewVertex} from \"./createViewVertex\";\n\nexport interface ViewEdgeNatureOptions {\n  creaseAngle?: {min: number, max: number};\n}\n\nconst _u = new Vector3();\nconst _v = new Vector3();\n\n/**\n * Returns the list\n * @param meshes\n * @param camera\n * @param options\n * @returns\n */\nexport function setupEdges(\n    viewmap: Viewmap,\n    options: ViewEdgeNatureOptions) {\n\n  const {viewEdges, camera, meshes} = viewmap;\n  const handledHalfedges = new Set<Halfedge>();\n\n  for (const mesh of meshes) {\n\n    for (const face of mesh.hes.faces) {\n      face.viewEdges = new Array<ViewEdge>();\n    }\n\n    for (const halfedge of mesh.hes.halfedges) {\n\n      if (!handledHalfedges.has(halfedge.twin)) {\n\n        handledHalfedges.add(halfedge);\n\n        const props = propsForViewEdge(halfedge, camera, options);\n\n        if (props) {\n\n          const meshv1 = halfedge.vertex;\n          const meshv2 = halfedge.twin.vertex;\n\n          // Get the viewmap points from the vertices or create them\n          const v1 = createViewVertex(viewmap, meshv1.position);\n          const v2 = createViewVertex(viewmap, meshv2.position);\n\n          meshv1.viewVertex = v1;\n          meshv2.viewVertex = v2;\n\n          // Point stores a set of vertices, so unicity is guaranted\n          v1.vertices.add(meshv1);\n          v2.vertices.add(meshv2);\n\n          const viewEdge = new ViewEdge(v1, v2, props.nature, halfedge);\n          viewEdge.faceAngle = props.faceAngle;\n          viewEdge.isConcave = props.isConcave;\n          viewEdge.isBack = props.isBack;\n          viewEdge.meshes.push(mesh);\n\n          v1.viewEdges.push(viewEdge);\n          v2.viewEdges.push(viewEdge);\n\n          if (halfedge.face) {\n            halfedge.face.viewEdges.push(viewEdge);\n            viewEdge.faces.push(halfedge.face);\n          }\n\n          if (halfedge.twin.face) {\n            halfedge.twin.face.viewEdges.push(viewEdge);\n            viewEdge.faces.push(halfedge.twin.face);\n          }\n\n          viewEdges.push(viewEdge);\n        }\n      }\n    }\n  }\n}\nexport function propsForViewEdge(\n    halfedge: Halfedge,\n    camera: PerspectiveCamera,\n    options?: ViewEdgeNatureOptions) {\n\n  const props = {\n    nature: ViewEdgeNature.Silhouette,\n    faceAngle: 0,\n    isConcave: false,\n    isBack: false,\n  }\n\n  const opt = {\n    creaseAngle: {min: 80, max: 100},\n    ...options\n  }\n\n  // If halfedge only has one connected face, then it is a boundary\n  if (!halfedge.face || !halfedge.twin.face) {\n    props.nature = ViewEdgeNature.Boundary;\n    return props;\n  } else {\n    const faceAFront = halfedge.face.isFront(camera.position);\n    const faceBFront = halfedge.twin.face.isFront(camera.position);\n\n    // If edge is between two back faces, then it is a back edge\n    props.isBack = !faceAFront && !faceBFront;\n\n    // Compute the angle between the 2 connected face\n    halfedge.face.getNormal(_u);\n    halfedge.twin.face.getNormal(_v);\n    props.faceAngle = Math.acos(_u.dot(_v)) * 180 / Math.PI;\n\n    // Concavity is determined by an orientation test\n    props.isConcave = frontSide(\n      halfedge.prev.vertex.position,\n      halfedge.vertex.position,\n      halfedge.next.vertex.position,\n      halfedge.twin.prev.vertex.position);\n\n    // If edge is between front and back face, then it is a silhouette edge\n    if (faceAFront !== faceBFront) {\n\n      props.nature = ViewEdgeNature.Silhouette;\n      return props;\n\n    } else if(opt.creaseAngle.min <= props.faceAngle &&\n              props.faceAngle <= opt.creaseAngle.max) {\n      props.nature = ViewEdgeNature.Crease;\n      return props;\n    }\n  }\n\n  return null;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 22 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Color, ColorRepresentation, Mesh, Raycaster, Vector2 } from \"three\";\nimport { imagePointToNDC } from \"../../../utils\";\nimport { SVGMesh } from \"../../SVGMesh\";\nimport { Viewmap } from \"../Viewmap\";\n\n\nexport interface AssignPolygonOptions {\n  defaultMeshColor: ColorRepresentation;\n}\n\nexport class AssignPolygonInfo {\n  assigned = Infinity;\n  nonAssigned = Infinity;\n}\n\nconst _color = new Color();\nconst _raycaster = new Raycaster();\nconst _vec2 = new Vector2();\n\nexport function assignPolygons(\n    viewmap: Viewmap,\n    options?: AssignPolygonOptions,\n    info = new AssignPolygonInfo()) {\n\n  options = {\n    defaultMeshColor: 0x333333,\n    ...options,\n  }\n\n  _color.set(options.defaultMeshColor);\n\n  info.assigned = 0;\n  info.nonAssigned = 0;\n\n  const {meshes, renderSize, camera, polygons} = viewmap;\n\n  const svgMeshesMap = new Map<Mesh, SVGMesh>();\n  const threeMeshes = new Array<Mesh>();\n\n  for (const mesh of meshes) {\n    svgMeshesMap.set(mesh.threeMesh, mesh);\n    threeMeshes.push(mesh.threeMesh);\n  }\n\n  for (const polygon of polygons) {\n\n    imagePointToNDC(polygon.insidePoint, _vec2, renderSize);\n    _raycaster.setFromCamera(_vec2, camera);\n    // _raycaster.firstHitOnly = true; // todo?\n    const intersections = _raycaster.intersectObjects(threeMeshes, false);\n\n    if (intersections.length > 0) {\n      const intersection = intersections[0];\n      const faceIndex = intersection.faceIndex;\n      if (faceIndex !== undefined) {\n        const intersectionMesh = intersection.object as Mesh;\n        polygon.mesh = svgMeshesMap.get(intersectionMesh);\n        if (polygon.mesh) {\n          polygon.color.copy(polygon.mesh.colorForFaceIndex(faceIndex) || _color);\n          info.assigned += 1;\n        } else {\n          console.error(`Could not associate SVG mesh to polygon ${polygon.id}`);\n        }\n      } else {\n        console.error(`Polygon ${polygon.id} intersection has no face index`,intersection);\n      }\n    }\n  }\n\n  info.nonAssigned = polygons.length - info.assigned;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 22 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { DoubleSide, Material, Mesh, PerspectiveCamera, Raycaster, Side, Vector3 } from \"three\";\nimport { Chain, ChainVisibility } from \"../Chain\";\nimport { Viewmap } from \"../Viewmap\";\n\nconst _raycaster = new Raycaster();\nconst _rayDirection = new Vector3();\nconst _rayOrigin = new Vector3();\n\nexport class ChainVisibilityInfo {\n  nbTests = Infinity;\n  nbRaycasts = Infinity;\n}\n\nexport function computeChainsVisibility(\n    viewmap: Viewmap,\n    info = new ChainVisibilityInfo()) {\n\n  const {chains, meshes, camera} = viewmap;\n  const threeMeshes = meshes.map(obj => obj.threeMesh);\n\n  info.nbRaycasts = 0;\n  info.nbTests = 0;\n\n  // As we cast rays from object to the camera, we want rays to intersect only\n  // on the backside face. So we need to change material sideness\n  const materialSidenessMap = new Map<Material, Side>();\n\n  for (const mesh of meshes) {\n    if (Array.isArray(mesh.material)) {\n      for (const material of mesh.material) {\n        materialSidenessMap.set(material, material.side);\n        material.side = DoubleSide;\n      }\n    } else {\n      materialSidenessMap.set(mesh.material, mesh.material.side);\n      mesh.material.side = DoubleSide;\n    }\n  }\n\n  // Compute chain visibility\n  for (const chain of chains) {\n\n    info.nbTests += 1;\n\n    // if (!chainVisibilityWithGeometry(chain)) {\n    chainVisibilityWithRaycasting(chain, camera, threeMeshes);\n    info.nbRaycasts += 1;\n    // }\n  }\n\n  // Restaure the sideness of material\n  for (const mesh of meshes) {\n    if (Array.isArray(mesh.material)) {\n      for (const material of mesh.material) {\n        material.side = materialSidenessMap.get(material) ?? material.side;\n      }\n    } else {\n      mesh.material.side = materialSidenessMap.get(mesh.material) ?? mesh.material.side;\n    }\n  }\n\n}\n\n\nexport function chainVisibilityWithGeometry(chain: Chain) {\n\n  // Search for an edge that is not obvisouly hidden by geometry\n  // (i.e. not back and not concave\n  // see paper https://hal.inria.fr/hal-02189483)\n  let i = 0;\n  let hiddenByGeometry = false;\n  do {\n    hiddenByGeometry = chain.edges[i].isConcave || chain.edges[i].isBack;\n    i += 1;\n  } while(!hiddenByGeometry && i < chain.edges.length);\n\n  for (const edge of chain.edges) {\n    if (edge.isConcave || edge.isBack) {\n      chain.visibility = ChainVisibility.Hidden;\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n/**\n * Determines chain visibility via casting a rayfrom the chain to the camera\n * @param contour\n * @param camera\n * @param objects\n * @param tolerance\n * @returns\n */\nexport function chainVisibilityWithRaycasting(\n    chain: Chain,\n    camera: PerspectiveCamera,\n    objects: Array<Mesh>,\n    tolerance = 1e-5) {\n\n  const edge = chain.middleEdge();\n\n  if (!edge) {\n    console.error(\"Contour has no edges\");\n    chain.visibility = ChainVisibility.Visible;\n    return;\n  }\n\n  // Cast a ray from the middle of the segment to the camera\n  _rayOrigin.lerpVectors(edge.a.pos3d, edge.b.pos3d, 0.5);\n  _rayDirection.subVectors(camera.position, _rayOrigin).normalize();\n  // _raycaster.firstHitOnly = false; // todo?\n  _raycaster.set(_rayOrigin, _rayDirection);\n\n  // Get the projection of the origin of the ray cast\n  chain.raycastPoint.lerpVectors(edge.a.pos2d, edge.b.pos2d, 0.5);\n\n  // Compute total distance in case of mathematical imprecision\n  const intersections = _raycaster.intersectObjects(objects, false);\n\n  let totalDistance = 0;\n  for (const intersection of intersections) {\n    totalDistance += intersection.distance;\n  }\n\n  if (totalDistance < tolerance) {\n    chain.visibility = ChainVisibility.Visible;\n  } else {\n    chain.visibility = ChainVisibility.Hidden;\n  }\n\n}\n","import { Vector3, Matrix4, Matrix3, Triangle } from 'three';\n\nconst EPSILON$1 = 1e-10;\nconst _tmp1 = new Vector3();\nconst _tmp2 = new Vector3();\nconst _matrix4 = new Matrix4();\nconst _matrix3 = new Matrix3();\nfunction isTriDegenerated(tri) {\n    _tmp1.subVectors(tri.a, tri.b);\n    _tmp2.subVectors(tri.a, tri.c);\n    _tmp1.cross(_tmp2);\n    return _tmp1.x > -EPSILON$1 && _tmp1.x < EPSILON$1 &&\n        _tmp1.y > -EPSILON$1 && _tmp1.y < EPSILON$1 &&\n        _tmp1.z > -EPSILON$1 && _tmp1.z < EPSILON$1;\n}\nfunction orient3D(a, b, c, d) {\n    _matrix4.set(a.x, a.y, a.z, 1, b.x, b.y, b.z, 1, c.x, c.y, c.z, 1, d.x, d.y, d.z, 1);\n    const det = _matrix4.determinant();\n    if (det < -EPSILON$1)\n        return -1;\n    else if (det > EPSILON$1)\n        return 1;\n    else\n        return 0;\n}\nfunction orient2D(a, b, c) {\n    _matrix3.set(a.x, a.y, 1, b.x, b.y, 1, c.x, c.y, 1);\n    const det = _matrix3.determinant();\n    if (det < -EPSILON$1)\n        return -1;\n    else if (det > EPSILON$1)\n        return 1;\n    else\n        return 0;\n}\nfunction permuteTriLeft(tri) {\n    const tmp = tri.a;\n    tri.a = tri.b;\n    tri.b = tri.c;\n    tri.c = tmp;\n}\nfunction permuteTriRight(tri) {\n    const tmp = tri.c;\n    tri.c = tri.b;\n    tri.b = tri.a;\n    tri.a = tmp;\n}\nfunction makeTriCounterClockwise(tri) {\n    if (orient2D(tri.a, tri.b, tri.c) < 0) {\n        const tmp = tri.c;\n        tri.c = tri.b;\n        tri.b = tmp;\n    }\n}\nfunction linesIntersect2d(a1, b1, a2, b2, target) {\n    const dx1 = (a1.x - b1.x);\n    const dx2 = (a2.x - b2.x);\n    const dy1 = (a1.y - b1.y);\n    const dy2 = (a2.y - b2.y);\n    const D = dx1 * dy2 - dx2 * dy1;\n    const n1 = a1.x * b1.y - a1.y * b1.x;\n    const n2 = a2.x * b2.y - a2.y * b2.x;\n    target.set((n1 * dx2 - n2 * dx1) / D, (n1 * dy2 - n2 * dy1) / D, 0);\n}\n\nconst EPSILON = 1e-10;\nconst _u$1 = new Vector3();\nconst _v$1 = new Vector3();\nconst _n1 = new Vector3();\nconst _n2 = new Vector3();\nconst _i1 = new Vector3();\nconst _i2 = new Vector3();\nfunction crossIntersect(t1, t2, o1a, o1b, o1c, target) {\n    const o2a = orient3D(t1.a, t1.b, t1.c, t2.a);\n    const o2b = orient3D(t1.a, t1.b, t1.c, t2.b);\n    const o2c = orient3D(t1.a, t1.b, t1.c, t2.c);\n    if (o2a === o2b && o2a === o2c) {\n        return false;\n    }\n    makeTriAVertexAlone(t1, o1a, o1b, o1c);\n    makeTriAVertexAlone(t2, o2a, o2b, o2c);\n    makeTriAVertexPositive(t2, t1);\n    makeTriAVertexPositive(t1, t2);\n    const o1 = orient3D(t1.a, t1.b, t2.a, t2.b);\n    const o2 = orient3D(t1.a, t1.c, t2.c, t2.a);\n    if (o1 <= 0 && o2 <= 0) {\n        if (target) {\n            computeLineIntersection(t1, t2, target);\n        }\n        return true;\n    }\n    return false;\n}\nfunction makeTriAVertexAlone(tri, oa, ob, oc) {\n    if (oa === ob) {\n        permuteTriRight(tri);\n    }\n    else if (oa === oc) {\n        permuteTriLeft(tri);\n    }\n    else if (ob !== oc) {\n        if (ob > 0) {\n            permuteTriLeft(tri);\n        }\n        else if (oc > 0) {\n            permuteTriRight(tri);\n        }\n    }\n}\nfunction makeTriAVertexPositive(tri, other) {\n    const o = orient3D(other.a, other.b, other.c, tri.a);\n    if (o < 0) {\n        const tmp = other.c;\n        other.c = other.b;\n        other.b = tmp;\n    }\n}\nfunction intersectPlane(a, b, p, n, target) {\n    _u$1.subVectors(b, a);\n    _v$1.subVectors(a, p);\n    const dot1 = n.dot(_u$1);\n    const dot2 = n.dot(_v$1);\n    _u$1.multiplyScalar(-dot2 / dot1);\n    target.addVectors(a, _u$1);\n}\nfunction computeLineIntersection(t1, t2, target) {\n    t1.getNormal(_n1);\n    t2.getNormal(_n2);\n    const o1 = orient3D(t1.a, t1.c, t2.b, t2.a);\n    const o2 = orient3D(t1.a, t1.b, t2.c, t2.a);\n    if (o1 > 0) {\n        if (o2 > 0) {\n            intersectPlane(t1.a, t1.c, t2.a, _n2, _i1);\n            intersectPlane(t2.a, t2.c, t1.a, _n1, _i2);\n        }\n        else {\n            intersectPlane(t1.a, t1.c, t2.a, _n2, _i1);\n            intersectPlane(t1.a, t1.b, t2.a, _n2, _i2);\n        }\n    }\n    else {\n        if (o2 > 0) {\n            intersectPlane(t2.a, t2.b, t1.a, _n1, _i1);\n            intersectPlane(t2.a, t2.c, t1.a, _n1, _i2);\n        }\n        else {\n            intersectPlane(t2.a, t2.b, t1.a, _n1, _i1);\n            intersectPlane(t1.a, t1.b, t2.a, _n2, _i2);\n        }\n    }\n    target.push(_i1.clone());\n    if (_i1.distanceTo(_i2) >= EPSILON) {\n        target.push(_i2.clone());\n    }\n}\n\nconst _matrix = new Matrix4();\nconst _n = new Vector3();\nconst _u = new Vector3();\nconst _v = new Vector3();\nconst _affineMatrix = new Matrix4().set(0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1);\nfunction coplanarIntersect(t1, t2, target) {\n    t1.getNormal(_n);\n    _u.subVectors(t1.a, t1.b).normalize();\n    _v.crossVectors(_n, _u);\n    _u.add(t1.a);\n    _v.add(t1.a);\n    _n.add(t1.a);\n    _matrix.set(t1.a.x, _u.x, _v.x, _n.x, t1.a.y, _u.y, _v.y, _n.y, t1.a.z, _u.z, _v.z, _n.z, 1, 1, 1, 1);\n    _matrix.invert();\n    _matrix.premultiply(_affineMatrix);\n    t1.a.applyMatrix4(_matrix);\n    t1.b.applyMatrix4(_matrix);\n    t1.c.applyMatrix4(_matrix);\n    t2.a.applyMatrix4(_matrix);\n    t2.b.applyMatrix4(_matrix);\n    t2.c.applyMatrix4(_matrix);\n    makeTriCounterClockwise(t1);\n    makeTriCounterClockwise(t2);\n    const p1 = t1.a;\n    const p2 = t2.a;\n    const q2 = t2.b;\n    const r2 = t2.c;\n    const o_p2q2 = orient2D(p2, q2, p1);\n    const o_q2r2 = orient2D(q2, r2, p1);\n    const o_r2p2 = orient2D(r2, p2, p1);\n    let intersecting = false;\n    if (o_p2q2 >= 0) {\n        if (o_q2r2 >= 0) {\n            if (o_r2p2 >= 0) {\n                intersecting = true;\n            }\n            else {\n                intersecting = intersectionTypeR1(t1, t2);\n            }\n        }\n        else {\n            if (o_r2p2 >= 0) {\n                permuteTriRight(t2);\n                intersecting = intersectionTypeR1(t1, t2);\n            }\n            else {\n                intersecting = intersectionTypeR2(t1, t2);\n            }\n        }\n    }\n    else {\n        if (o_q2r2 >= 0) {\n            if (o_r2p2 >= 0) {\n                permuteTriLeft(t2);\n                intersecting = intersectionTypeR1(t1, t2);\n            }\n            else {\n                permuteTriLeft(t2);\n                intersecting = intersectionTypeR2(t1, t2);\n            }\n        }\n        else {\n            if (o_r2p2 >= 0) {\n                permuteTriRight(t2);\n                intersecting = intersectionTypeR2(t1, t2);\n            }\n            else {\n                console.error(\"Triangles should not be flat.\", t1, t2, _v);\n                return false;\n            }\n        }\n    }\n    if (intersecting && target) {\n        clipTriangle(t1, t2, target);\n        _matrix.invert();\n        for (const p of target) {\n            p.applyMatrix4(_matrix);\n        }\n    }\n    return intersecting;\n}\nfunction intersectionTypeR1(t1, t2) {\n    const p1 = t1.a;\n    const q1 = t1.b;\n    const r1 = t1.c;\n    const p2 = t2.a;\n    const r2 = t2.c;\n    if (orient2D(r2, p2, q1) >= 0) {\n        if (orient2D(r2, p1, q1) >= 0) {\n            if (orient2D(p1, p2, q1) >= 0) {\n                return true;\n            }\n            else {\n                if (orient2D(p1, p2, r1) >= 0) {\n                    if (orient2D(q1, r1, p2) >= 0) {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    else {\n        if (orient2D(r2, p2, r1) >= 0) {\n            if (orient2D(q1, r1, r2) >= 0) {\n                if (orient2D(p1, p2, r1) >= 0) {\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\nfunction intersectionTypeR2(t1, t2) {\n    const p1 = t1.a;\n    const q1 = t1.b;\n    const r1 = t1.c;\n    const p2 = t2.a;\n    const q2 = t2.b;\n    const r2 = t2.c;\n    if (orient2D(r2, p2, q1) >= 0) {\n        if (orient2D(q2, r2, q1) >= 0) {\n            if (orient2D(p1, p2, q1) >= 0) {\n                if (orient2D(p1, q2, q1) <= 0) {\n                    return true;\n                }\n            }\n            else {\n                if (orient2D(p1, p2, r1) >= 0) {\n                    if (orient2D(r2, p2, r1) <= 0) {\n                        return true;\n                    }\n                }\n            }\n        }\n        else {\n            if (orient2D(p1, q2, q1) <= 0) {\n                if (orient2D(q2, r2, r1) >= 0) {\n                    if (orient2D(q1, r1, q2) >= 0) {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    else {\n        if (orient2D(r2, p2, r1) >= 0) {\n            if (orient2D(q1, r1, r2) >= 0) {\n                if (orient2D(r1, p1, p2) >= 0) {\n                    return true;\n                }\n            }\n            else {\n                if (orient2D(q1, r1, q2) >= 0) {\n                    if (orient2D(q2, r2, r1) >= 0) {\n                        return true;\n                    }\n                }\n            }\n        }\n    }\n    return false;\n}\nconst _tmp = new Vector3();\nconst _clip = new Array(3).fill(_tmp);\nconst _output = new Array();\nconst _inter = new Vector3();\nconst _orients = new Array(9).fill(0);\nfunction clipTriangle(t1, t2, target) {\n    _clip[0] = t1.a;\n    _clip[1] = t1.b;\n    _clip[2] = t1.c;\n    _output.splice(0, _output.length);\n    _output.push(t2.a);\n    _output.push(t2.b);\n    _output.push(t2.c);\n    for (let i = 0; i < 3; i++) {\n        const input = [..._output];\n        _output.splice(0, _output.length);\n        const i_prev = (i + 2) % 3;\n        for (let j = 0; j < input.length; j++) {\n            _orients[j] = orient2D(_clip[i_prev], _clip[i], input[j]);\n        }\n        for (let j = 0; j < input.length; j++) {\n            const j_prev = (j - 1 + input.length) % input.length;\n            if (_orients[j] >= 0) {\n                if (_orients[j_prev] < 0) {\n                    linesIntersect2d(_clip[i_prev], _clip[i], input[j_prev], input[j], _inter);\n                    _output.push(_inter.clone());\n                }\n                _output.push(input[j].clone());\n            }\n            else if (_orients[j_prev] >= 0) {\n                linesIntersect2d(_clip[i_prev], _clip[i], input[j_prev], input[j], _inter);\n                _output.push(_inter.clone());\n            }\n        }\n    }\n    for (const point of _output) {\n        let j = 0;\n        let sameFound = false;\n        while (!sameFound && j < target.length) {\n            sameFound = point.distanceTo(target[j]) <= 1e-10;\n            j++;\n        }\n        if (!sameFound) {\n            target.push(point);\n        }\n    }\n}\n\nconst _t1 = new Triangle();\nconst _t2 = new Triangle();\nvar Intersection;\n(function (Intersection) {\n    Intersection[\"Cross\"] = \"Cross\";\n    Intersection[\"Coplanar\"] = \"Coplanar\";\n})(Intersection || (Intersection = {}));\nfunction trianglesIntersect(t1, t2, target) {\n    if (target) {\n        target.splice(0, target.length);\n    }\n    if (isTriDegenerated(t1) || isTriDegenerated(t2)) {\n        console.warn(\"Degenerated triangles provided, skipping.\");\n        return null;\n    }\n    _t1.copy(t1);\n    _t2.copy(t2);\n    t1 = _t1;\n    t2 = _t2;\n    const o1a = orient3D(t2.a, t2.b, t2.c, t1.a);\n    const o1b = orient3D(t2.a, t2.b, t2.c, t1.b);\n    const o1c = orient3D(t2.a, t2.b, t2.c, t1.c);\n    if (o1a === o1b && o1a === o1c) {\n        if (o1a === 0 && coplanarIntersect(t1, t2, target)) {\n            return Intersection.Coplanar;\n        }\n        return null;\n    }\n    if (crossIntersect(t1, t2, o1a, o1b, o1c, target)) {\n        return Intersection.Cross;\n    }\n    return null;\n}\n\nexport { Intersection, trianglesIntersect };\n//# sourceMappingURL=index.esm.js.map\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Wed Nov 30 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {trianglesIntersect} from \"fast-triangle-triangle-intersection\";\nimport {Line3, Matrix4, Triangle, Vector3} from \"three\";\nimport {Face} from \"../../../../three-mesh-halfedge\";\nimport {SVGMesh} from \"../../SVGMesh\";\n\nconst _matrix = new Matrix4();\nconst _line = new Line3();\nconst _points = new Array<Vector3>();\n\nexport class TriIntersectionInfo {\n  name = \"\";\n  nbTests = Infinity;\n  nbIntersections = Infinity;\n  time = Infinity;\n}\n\n/**\n * Run the specify callback for all\n * @param meshA\n * @param meshB\n * @param callback\n * @param info\n */\nexport function meshIntersectionCb(\n    meshA: SVGMesh,\n    meshB: SVGMesh,\n    callback: (meshA: SVGMesh, meshB: SVGMesh, line: Line3, faceA: Face, faceB: Face) => void,\n    info = new TriIntersectionInfo()) {\n\n  const startTime = Date.now();\n\n  info.name = meshA.name + ' ∩ ' + meshB.name;\n  info.nbTests = 0;\n  info.nbIntersections = 0;\n\n  _matrix.copy(meshA.matrixWorld).invert().multiply(meshB.matrixWorld);\n\n  meshA.bvh.bvhcast(meshB.bvh, _matrix, {\n\n    intersectsTriangles: (t1: Triangle, t2: Triangle, idx1: number, idx2: number) => {\n\n      info.nbTests += 1;\n\n      if (trianglesIntersect(t1, t2, _points) !== null) {\n\n        info.nbIntersections += 1;\n\n        // Ignore intersection on a single point\n        if (_points.length === 1) {\n          return false;\n        }\n        else if (_points.length > 2) {\n          _points.push(_points[0]);\n        }\n\n        for (let i=0; i<_points.length-1; i++) {\n\n          _line.start.copy(_points[i]);\n          _line.end.copy(_points[i+1]);\n\n          if (_line.distance() > 1e-10) {\n            _line.applyMatrix4(meshA.matrixWorld);\n            callback(meshA, meshB, _line, meshA.hes.faces[idx1], meshB.hes.faces[idx2]);\n          }\n        }\n      }\n      return false;\n    }\n  });\n\n  info.time = Date.now() - startTime;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 29 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {Vector2, Vector3} from \"three\";\n// import { Vertex } from \"three-mesh-halfedge\";\n// import {hashVector2, hashVector3} from \"../../../utils\";\nimport {ViewEdge} from \"../ViewEdge\";\nimport {Viewmap} from \"../Viewmap\";\nimport {ViewVertex} from \"../ViewVertex\";\nimport {createViewVertex} from \"./createViewVertex\";\n\nconst _u = new Vector3();\nconst _v = new Vector3();\n\nconst _vec3 = new Vector3();\nconst _u2 = new Vector2();\nconst _v2 = new Vector2();\n\nexport function splitViewEdge3d(\n    viewmap: Viewmap,\n    edge: ViewEdge,\n    position: Vector3) {\n\n  /**\n   *  We consider that position is on the infinite line formed by a and b\n   *\n   *            p?          p?           p?\n   *            x--a--------x---------b--x\n   *                  edge\n   */\n\n  // const hash = hashVector3(position);\n\n  // if (edge.a.hash3d === hash) {\n  if (edge.a.matches3dPosition(position)) {\n\n    // if (edge.a.hash3d !== hash) {\n    //   console.log(\"Different hash\", edge.a, position, hash);\n    // }\n\n    return {\n      viewVertex: edge.a,\n      viewEdge: null\n    };\n  }\n  // if (edge.b.hash3d === hash) {\n  if (edge.b.matches3dPosition(position)) {\n\n    // if (edge.b.hash3d !== hash) {\n    //   console.log(\"Different hash\", edge.b, position, hash);\n    // }\n\n    return {\n      viewVertex: edge.b,\n      viewEdge: null\n    };\n  }\n\n  _u.subVectors(position, edge.a.pos3d);\n  _v.subVectors(edge.b.pos3d, edge.a.pos3d);\n\n\n  const cross = _u.cross(_v);\n  const v = cross.x + cross.y + cross.z;\n  if (v > 1e-10 || v < -1e-10) {\n    return null;\n  }\n\n  if (_u.dot(_v) < -1e-10) {\n    return null;\n  }\n\n  const lengthU = _u.length();\n  const lengthV = _v.length();\n\n  if (lengthU > lengthV) {\n    return null;\n  }\n\n  const viewVertex = createViewVertex(viewmap, position);\n  const viewEdge = splitViewEdgeWithViewVertex(viewmap, edge, viewVertex);\n\n  return {\n    viewVertex: viewVertex,\n    viewEdge: viewEdge\n  };\n}\n\nexport function splitViewEdge2d(\n    viewmap: Viewmap,\n    edge: ViewEdge,\n    position: Vector2) {\n  // tolerance = 1e-10) {\n\n  // const hash = hashVector2(position);\n\n  // if (edge.a.hash2d === hash) {\n  if (edge.a.matches2dPosition(position)) {\n\n    // if (edge.a.hash2d !== hash) {\n    //   console.log(\"Different hash\", edge.a, position, hash);\n    // }\n\n    return {\n      viewVertex: edge.a,\n      viewEdge: null\n    };\n  }\n  // if (edge.b.hash2d === hash) {\n  if (edge.b.matches2dPosition(position)) {\n\n    // if (edge.b.hash2d !== hash) {\n    //   console.log(\"Different hash\", edge.b, position, hash);\n    // }\n\n    return {\n      viewVertex: edge.b,\n      viewEdge: null\n    };\n  }\n\n  _u2.subVectors(position, edge.a.pos2d);\n  _v2.subVectors(edge.b.pos2d, edge.a.pos2d);\n\n  // Check points are aligned\n  const cross = _u2.cross(_v2);\n  if (cross > 1e-10 || cross < -1e-10) {\n    return null;\n  }\n\n  const lengthU = _u2.length();\n  const lengthV = _v2.length();\n\n  if (lengthU > lengthV) {\n    return null;\n  }\n\n  // Check points order\n  if (_u.dot(_v) < -1e10) {\n    return null;\n  }\n\n  _vec3.lerpVectors(edge.a.pos3d, edge.b.pos3d, lengthU/lengthV);\n  const viewVertex = createViewVertex(viewmap, _vec3);\n  const viewEdge = splitViewEdgeWithViewVertex(viewmap, edge, viewVertex);\n\n  return {\n    viewVertex: viewVertex,\n    viewEdge: viewEdge\n  };\n}\n\nexport function splitViewEdgeWithViewVertex(\n    viewmap: Viewmap,\n    edge: ViewEdge,\n    vertex: ViewVertex) {\n\n  /**\n   *  Update the references around the new vertex\n   *\n   *                       vertex\n   *            ---a--------x---------b--\n   *                  edge      newedge\n   */\n\n  const b = edge.b;\n\n  const newEdge = edge.clone();\n  edge.b = vertex;\n  newEdge.a = vertex;\n  newEdge.b = b;\n\n  vertex.viewEdges.push(edge);\n  vertex.viewEdges.push(newEdge);\n\n  b.viewEdges.remove(edge);\n  b.viewEdges.push(newEdge);\n\n  for (const face of newEdge.faces) {\n    face.viewEdges.push(newEdge);\n  }\n\n  viewmap.viewEdges.push(newEdge);\n\n  return newEdge;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 29 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {Line3, Vector3} from \"three\";\nimport {Face} from \"../../../../three-mesh-halfedge\";\nimport {intersectLines} from \"../../../utils\";\nimport {SVGMesh} from \"../../SVGMesh\";\nimport {ViewEdge, ViewEdgeNature} from \"../ViewEdge\";\nimport {Viewmap} from \"../Viewmap\";\nimport {createViewVertex} from \"./createViewVertex\";\nimport {meshIntersectionCb, TriIntersectionInfo} from \"./meshIntersectionCb\";\nimport {splitViewEdge3d} from \"./splitEdge\";\n\n\nconst _line = new Line3();\nconst _inter = new Vector3();\nconst _lineDir = new Vector3();\nconst _dir = new Vector3();\n\nexport class MeshIntersectionInfo {\n  details = new Array<TriIntersectionInfo>();\n  nbTests = Infinity;\n  nbIntersections = Infinity;\n  nbMeshesTested = Infinity;\n  nbEdgesAdded = Infinity;\n}\n\nexport function computeMeshIntersections(\n    viewmap: Viewmap,\n    info = new MeshIntersectionInfo()) {\n\n  const {meshes} = viewmap;\n\n  info.nbMeshesTested = 0;\n  info.nbIntersections = 0;\n  info.nbTests = 0;\n  info.nbEdgesAdded = 0;\n\n\n  const intersectCallback = (\n      meshA: SVGMesh, meshB: SVGMesh, line: Line3,\n      faceA: Face, faceB: Face) => {\n    if(!faceA || !faceB) {\n        // console.error(\"No face found\", faceA, faceB);\n        return;\n    }\n\n    // Create vertices for line ends\n    const v1 = createViewVertex(viewmap, line.start);\n    const v2 = createViewVertex(viewmap, line.end);\n    const intersectionViewVertices = [v1, v2];\n\n    // Gather all the viewEdges that lie on faceA and faceB and check if\n    // they intersect with the line\n    const faceViewEdges = new Set([...faceA.viewEdges, ...faceB.viewEdges]);\n\n    for (const e of faceViewEdges) {\n\n      _line.set(e.a.pos3d, e.b.pos3d);\n\n      if (intersectLines(_line, line, _inter)) {\n        const splitResult = splitViewEdge3d(viewmap, e, _inter);\n\n        if (splitResult) {\n          if (!intersectionViewVertices.includes(splitResult.viewVertex)) {\n            intersectionViewVertices.push(splitResult.viewVertex);\n          }\n        } else {\n          console.error(\"Intersection but split failed\");\n        }\n      }\n    }\n\n    // Sort point along the line\n    _dir.subVectors(line.end, line.start);\n    intersectionViewVertices.sort((a,b) => {\n      _dir.subVectors(b.pos3d, a.pos3d);\n      return _dir.dot(_lineDir)\n    });\n\n    // Create new edges\n    for (let i = 0; i<intersectionViewVertices.length-1; i++) {\n\n      const v1 = intersectionViewVertices[i];\n      const v2 = intersectionViewVertices[i+1];\n\n      const viewEdge = new ViewEdge(v1, v2, ViewEdgeNature.MeshIntersection);\n      viewEdge.meshes.push(meshA, meshB);\n      viewEdge.faces.push(faceA, faceB);\n\n      v1.viewEdges.push(viewEdge);\n      v2.viewEdges.push(viewEdge);\n\n      faceA.viewEdges.push(viewEdge);\n      faceB.viewEdges.push(viewEdge);\n\n      viewmap.viewEdges.push(viewEdge);\n    }\n  }\n\n  // Apply the callback for every pair of meshes\n  // TODO: Need to run that for self-intersections as well\n  for (let i=0; i<meshes.length-1; i++) {\n    for (let j=i+1; j<meshes.length; j++) {\n\n      const meshA = meshes[i];\n      const meshB = meshes[j];\n\n      const triInfo = new TriIntersectionInfo();\n      meshIntersectionCb(meshA, meshB, intersectCallback, triInfo);\n\n      info.nbIntersections += triInfo.nbIntersections;\n      info.nbTests += triInfo.nbTests;\n      info.nbMeshesTested += 1;\n      info.details.push(triInfo);\n    }\n  }\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 22 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {SVGMesh} from \"../../SVGMesh\";\nimport {Chain} from \"../Chain\";\nimport {ViewEdge} from \"../ViewEdge\";\nimport {Viewmap} from \"../Viewmap\";\nimport {ViewVertex, ViewVertexSingularity} from \"../ViewVertex\";\n\n\n// See chaining section of https://hal.inria.fr/hal-02189483\nexport function createChains(viewmap: Viewmap, maxChains = 10000) {\n\n  const {viewEdges, chains} = viewmap;\n  const remainingEdges = new Set(viewEdges);\n\n  let chainId = 0;\n  while(remainingEdges.size > 0 && chainId < maxChains) {\n    const [startEdge] = remainingEdges;\n    const currentObject = startEdge.meshes[0];\n    const chain = new Chain(chainId, currentObject);\n\n    remainingEdges.delete(startEdge);\n    chain.addEdge(startEdge);\n\n    // Search for connected edges from one direction\n    for (const startViewVertex of startEdge.vertices) {\n      let current = startViewVertex;\n      let edge = nextChainEdge(startEdge, current, remainingEdges, currentObject);\n\n      while (edge) {\n        remainingEdges.delete(edge);\n        chain.addEdge(edge);\n        current = edge.otherVertex(current);\n        edge = nextChainEdge(edge, current, remainingEdges, currentObject);\n      }\n    }\n    chains.push(chain);\n    chainId += 1;\n  }\n}\n\nexport function nextChainEdge(\n    currentEdge: ViewEdge,\n    viewVertex: ViewVertex,\n    remainingEdges: Set<ViewEdge>,\n    obj: SVGMesh) : ViewEdge | null {\n\n  // If point is a singularity, chaining stops\n  if (viewVertex.singularity !== ViewVertexSingularity.None) {\n    return null;\n  }\n\n  // TODO: Taking into account the nature of the current segment and geometric\n  // properties to build longer chains\n  for (const viewEdge of viewVertex.viewEdges) {\n\n    const takeEdge =\n      // Take edge only if it has not been assigned yet\n      remainingEdges.has(viewEdge) &&\n      // Next edge must have the same nature of the current edge\n      viewEdge.nature === currentEdge.nature &&\n      // Next edge must be part of the same object\n      viewEdge.meshes.includes(obj);\n\n    if (takeEdge) {\n      return viewEdge;\n    }\n  }\n  return null;\n}\n","/* follows \"An implementation of top-down splaying\"\n * by D. Sleator <sleator@cs.cmu.edu> March 1992\n */\n\n/**\n * @typedef {*} Key\n */\n\n\n/**\n * @typedef {*} Value\n */\n\n\n/**\n * @typedef {function(node:Node):void} Visitor\n */\n\n\n/**\n * @typedef {function(a:Key, b:Key):number} Comparator\n */\n\n\n/**\n * @param {function(node:Node):string} NodePrinter\n */\n\n\n/**\n * @typedef {Object}  Node\n * @property {Key}    Key\n * @property {Value=} data\n * @property {Node}   left\n * @property {Node}   right\n */\n\nvar Node = function Node (key, data) {\n  this.key  = key;\n  this.data = data;\n  this.left = null;\n  this.right= null;\n};\n\nfunction DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }\n\n\n/**\n * Simple top down splay, not requiring i to be in the tree t.\n * @param {Key} i\n * @param {Node?} t\n * @param {Comparator} comparator\n */\nfunction splay (i, t, comparator) {\n  if (t === null) { return t; }\n  var l, r, y;\n  var N = new Node();\n  l = r = N;\n\n  while (true) {\n    var cmp = comparator(i, t.key);\n    //if (i < t.key) {\n    if (cmp < 0) {\n      if (t.left === null) { break; }\n      //if (i < t.left.key) {\n      if (comparator(i, t.left.key) < 0) {\n        y = t.left;                           /* rotate right */\n        t.left = y.right;\n        y.right = t;\n        t = y;\n        if (t.left === null) { break; }\n      }\n      r.left = t;                               /* link right */\n      r = t;\n      t = t.left;\n    //} else if (i > t.key) {\n    } else if (cmp > 0) {\n      if (t.right === null) { break; }\n      //if (i > t.right.key) {\n      if (comparator(i, t.right.key) > 0) {\n        y = t.right;                          /* rotate left */\n        t.right = y.left;\n        y.left = t;\n        t = y;\n        if (t.right === null) { break; }\n      }\n      l.right = t;                              /* link left */\n      l = t;\n      t = t.right;\n    } else {\n      break;\n    }\n  }\n  /* assemble */\n  l.right = t.left;\n  r.left = t.right;\n  t.left = N.right;\n  t.right = N.left;\n  return t;\n}\n\n\n/**\n * @param  {Key}        i\n * @param  {Value}      data\n * @param  {Comparator} comparator\n * @param  {Tree}       tree\n * @return {Node}      root\n */\nfunction insert (i, data, t, comparator, tree) {\n  var node = new Node(i, data);\n\n  tree._size++;\n\n  if (t === null) {\n    node.left = node.right = null;\n    return node;\n  }\n\n  t = splay(i, t, comparator);\n  var cmp = comparator(i, t.key);\n  if (cmp < 0) {\n    node.left = t.left;\n    node.right = t;\n    t.left = null;\n  } else if (cmp >= 0) {\n    node.right = t.right;\n    node.left = t;\n    t.right = null;\n  }\n  return node;\n}\n\n\n/**\n * Insert i into the tree t, unless it's already there.\n * @param  {Key}        i\n * @param  {Value}      data\n * @param  {Comparator} comparator\n * @param  {Tree}       tree\n * @return {Node}       root\n */\nfunction add (i, data, t, comparator, tree) {\n  var node = new Node(i, data);\n\n  if (t === null) {\n    node.left = node.right = null;\n    tree._size++;\n    return node;\n  }\n\n  t = splay(i, t, comparator);\n  var cmp = comparator(i, t.key);\n  if (cmp === 0) { return t; }\n  else {\n    if (cmp < 0) {\n      node.left = t.left;\n      node.right = t;\n      t.left = null;\n    } else if (cmp > 0) {\n      node.right = t.right;\n      node.left = t;\n      t.right = null;\n    }\n    tree._size++;\n    return node;\n  }\n}\n\n\n/**\n * Deletes i from the tree if it's there\n * @param {Key}        i\n * @param {Tree}       tree\n * @param {Comparator} comparator\n * @param {Tree}       tree\n * @return {Node}      new root\n */\nfunction remove (i, t, comparator, tree) {\n  var x;\n  if (t === null) { return null; }\n  t = splay(i, t, comparator);\n  var cmp = comparator(i, t.key);\n  if (cmp === 0) {               /* found it */\n    if (t.left === null) {\n      x = t.right;\n    } else {\n      x = splay(i, t.left, comparator);\n      x.right = t.right;\n    }\n    tree._size--;\n    return x;\n  }\n  return t;                         /* It wasn't there */\n}\n\n\nfunction split (key, v, comparator) {\n  var left, right;\n  if (v === null) {\n    left = right = null;\n  } else {\n    v = splay(key, v, comparator);\n\n    var cmp = comparator(v.key, key);\n    if (cmp === 0) {\n      left  = v.left;\n      right = v.right;\n    } else if (cmp < 0) {\n      right   = v.right;\n      v.right = null;\n      left    = v;\n    } else {\n      left   = v.left;\n      v.left = null;\n      right  = v;\n    }\n  }\n  return { left: left, right: right };\n}\n\n\nfunction merge (left, right, comparator) {\n  if (right === null) { return left; }\n  if (left  === null) { return right; }\n\n  right = splay(left.key, right, comparator);\n  right.left = left;\n  return right;\n}\n\n\n/**\n * Prints level of the tree\n * @param  {Node}                        root\n * @param  {String}                      prefix\n * @param  {Boolean}                     isTail\n * @param  {Array<string>}               out\n * @param  {Function(node:Node):String}  printNode\n */\nfunction printRow (root, prefix, isTail, out, printNode) {\n  if (root) {\n    out((\"\" + prefix + (isTail ? '└── ' : '├── ') + (printNode(root)) + \"\\n\"));\n    var indent = prefix + (isTail ? '    ' : '│   ');\n    if (root.left)  { printRow(root.left,  indent, false, out, printNode); }\n    if (root.right) { printRow(root.right, indent, true,  out, printNode); }\n  }\n}\n\n\nvar Tree = function Tree (comparator) {\n  if ( comparator === void 0 ) comparator = DEFAULT_COMPARE;\n\n  this._comparator = comparator;\n  this._root = null;\n  this._size = 0;\n};\n\nvar prototypeAccessors = { size: { configurable: true } };\n\n\n/**\n * Inserts a key, allows duplicates\n * @param{Key}  key\n * @param{Value=} data\n * @return {Node|null}\n */\nTree.prototype.insert = function insert$1 (key, data) {\n  return this._root = insert(key, data, this._root, this._comparator, this);\n};\n\n\n/**\n * Adds a key, if it is not present in the tree\n * @param{Key}  key\n * @param{Value=} data\n * @return {Node|null}\n */\nTree.prototype.add = function add$1 (key, data) {\n  return this._root = add(key, data, this._root, this._comparator, this);\n};\n\n\n/**\n * @param{Key} key\n * @return {Node|null}\n */\nTree.prototype.remove = function remove$1 (key) {\n  this._root = remove(key, this._root, this._comparator, this);\n};\n\n\n/**\n * Removes and returns the node with smallest key\n * @return {?Node}\n */\nTree.prototype.pop = function pop () {\n  var node = this._root;\n  if (node) {\n    while (node.left) { node = node.left; }\n    this._root = splay(node.key,this._root, this._comparator);\n    this._root = remove(node.key, this._root, this._comparator, this);\n    return { key: node.key, data: node.data };\n  }\n  return null;\n};\n\n\n/**\n * @param{Key} key\n * @return {Node|null}\n */\nTree.prototype.findStatic = function findStatic (key) {\n  var current = this._root;\n  var compare = this._comparator;\n  while (current) {\n    var cmp = compare(key, current.key);\n    if (cmp === 0)  { return current; }\n    else if (cmp < 0) { current = current.left; }\n    else            { current = current.right; }\n  }\n  return null;\n};\n\n\n/**\n * @param{Key} key\n * @return {Node|null}\n */\nTree.prototype.find = function find (key) {\n  if (this._root) {\n    this._root = splay(key, this._root, this._comparator);\n    if (this._comparator(key, this._root.key) !== 0) { return null; }\n  }\n  return this._root;\n};\n\n\n/**\n * @param{Key} key\n * @return {Boolean}\n */\nTree.prototype.contains = function contains (key) {\n  var current = this._root;\n  var compare = this._comparator;\n  while (current) {\n    var cmp = compare(key, current.key);\n    if (cmp === 0)  { return true; }\n    else if (cmp < 0) { current = current.left; }\n    else            { current = current.right; }\n  }\n  return false;\n};\n\n\n/**\n * @param{Visitor} visitor\n * @param{*=}    ctx\n * @return {SplayTree}\n */\nTree.prototype.forEach = function forEach (visitor, ctx) {\n  var current = this._root;\n  var Q = [];/* Initialize stack s */\n  var done = false;\n\n  while (!done) {\n    if (current !==null) {\n      Q.push(current);\n      current = current.left;\n    } else {\n      if (Q.length !== 0) {\n        current = Q.pop();\n        visitor.call(ctx, current);\n\n        current = current.right;\n      } else { done = true; }\n    }\n  }\n  return this;\n};\n\n\n/**\n * Walk key range from `low` to `high`. Stops if `fn` returns a value.\n * @param{Key}    low\n * @param{Key}    high\n * @param{Function} fn\n * @param{*?}     ctx\n * @return {SplayTree}\n */\nTree.prototype.range = function range (low, high, fn, ctx) {\n    var this$1 = this;\n\n  var Q = [];\n  var compare = this._comparator;\n  var node = this._root, cmp;\n\n  while (Q.length !== 0 || node) {\n    if (node) {\n      Q.push(node);\n      node = node.left;\n    } else {\n      node = Q.pop();\n      cmp = compare(node.key, high);\n      if (cmp > 0) {\n        break;\n      } else if (compare(node.key, low) >= 0) {\n        if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned\n      }\n      node = node.right;\n    }\n  }\n  return this;\n};\n\n\n/**\n * Returns array of keys\n * @return {Array<Key>}\n */\nTree.prototype.keys = function keys () {\n  var keys = [];\n  this.forEach(function (ref) {\n      var key = ref.key;\n\n      return keys.push(key);\n    });\n  return keys;\n};\n\n\n/**\n * Returns array of all the data in the nodes\n * @return {Array<Value>}\n */\nTree.prototype.values = function values () {\n  var values = [];\n  this.forEach(function (ref) {\n      var data = ref.data;\n\n      return values.push(data);\n    });\n  return values;\n};\n\n\n/**\n * @return {Key|null}\n */\nTree.prototype.min = function min () {\n  if (this._root) { return this.minNode(this._root).key; }\n  return null;\n};\n\n\n/**\n * @return {Key|null}\n */\nTree.prototype.max = function max () {\n  if (this._root) { return this.maxNode(this._root).key; }\n  return null;\n};\n\n\n/**\n * @return {Node|null}\n */\nTree.prototype.minNode = function minNode (t) {\n    if ( t === void 0 ) t = this._root;\n\n  if (t) { while (t.left) { t = t.left; } }\n  return t;\n};\n\n\n/**\n * @return {Node|null}\n */\nTree.prototype.maxNode = function maxNode (t) {\n    if ( t === void 0 ) t = this._root;\n\n  if (t) { while (t.right) { t = t.right; } }\n  return t;\n};\n\n\n/**\n * Returns node at given index\n * @param{number} index\n * @return {?Node}\n */\nTree.prototype.at = function at (index) {\n  var current = this._root, done = false, i = 0;\n  var Q = [];\n\n  while (!done) {\n    if (current) {\n      Q.push(current);\n      current = current.left;\n    } else {\n      if (Q.length > 0) {\n        current = Q.pop();\n        if (i === index) { return current; }\n        i++;\n        current = current.right;\n      } else { done = true; }\n    }\n  }\n  return null;\n};\n\n\n/**\n * @param{Node} d\n * @return {Node|null}\n */\nTree.prototype.next = function next (d) {\n  var root = this._root;\n  var successor = null;\n\n  if (d.right) {\n    successor = d.right;\n    while (successor.left) { successor = successor.left; }\n    return successor;\n  }\n\n  var comparator = this._comparator;\n  while (root) {\n    var cmp = comparator(d.key, root.key);\n    if (cmp === 0) { break; }\n    else if (cmp < 0) {\n      successor = root;\n      root = root.left;\n    } else { root = root.right; }\n  }\n\n  return successor;\n};\n\n\n/**\n * @param{Node} d\n * @return {Node|null}\n */\nTree.prototype.prev = function prev (d) {\n  var root = this._root;\n  var predecessor = null;\n\n  if (d.left !== null) {\n    predecessor = d.left;\n    while (predecessor.right) { predecessor = predecessor.right; }\n    return predecessor;\n  }\n\n  var comparator = this._comparator;\n  while (root) {\n    var cmp = comparator(d.key, root.key);\n    if (cmp === 0) { break; }\n    else if (cmp < 0) { root = root.left; }\n    else {\n      predecessor = root;\n      root = root.right;\n    }\n  }\n  return predecessor;\n};\n\n\n/**\n * @return {SplayTree}\n */\nTree.prototype.clear = function clear () {\n  this._root = null;\n  this._size = 0;\n  return this;\n};\n\n\n/**\n * @return {NodeList}\n */\nTree.prototype.toList = function toList$1 () {\n  return toList(this._root);\n};\n\n\n/**\n * Bulk-load items. Both array have to be same size\n * @param{Array<Key>}  keys\n * @param{Array<Value>}[values]\n * @param{Boolean}     [presort=false] Pre-sort keys and values, using\n *                                       tree's comparator. Sorting is done\n *                                       in-place\n * @return {AVLTree}\n */\nTree.prototype.load = function load (keys, values, presort) {\n    if ( keys === void 0 ) keys = [];\n    if ( values === void 0 ) values = [];\n    if ( presort === void 0 ) presort = false;\n\n  var size = keys.length;\n  var comparator = this._comparator;\n\n  // sort if needed\n  if (presort) { sort(keys, values, 0, size - 1, comparator); }\n\n  if (this._root === null) { // empty tree\n    this._root = loadRecursive(this._root, keys, values, 0, size);\n    this._size = size;\n  } else { // that re-builds the whole tree from two in-order traversals\n    var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);\n    size = this._size + size;\n    this._root = sortedListToBST({ head: mergedList }, 0, size);\n  }\n  return this;\n};\n\n\n/**\n * @return {Boolean}\n */\nTree.prototype.isEmpty = function isEmpty () { return this._root === null; };\n\nprototypeAccessors.size.get = function () { return this._size; };\n\n\n/**\n * @param{NodePrinter=} printNode\n * @return {String}\n */\nTree.prototype.toString = function toString (printNode) {\n    if ( printNode === void 0 ) printNode = function (n) { return n.key; };\n\n  var out = [];\n  printRow(this._root, '', true, function (v) { return out.push(v); }, printNode);\n  return out.join('');\n};\n\n\nTree.prototype.update = function update (key, newKey, newData) {\n  var comparator = this._comparator;\n  var ref = split(key, this._root, comparator);\n    var left = ref.left;\n    var right = ref.right;\n  this._size--;\n  if (comparator(key, newKey) < 0) {\n    right = insert(newKey, newData, right, comparator, this);\n  } else {\n    left = insert(newKey, newData, left, comparator, this);\n  }\n  this._root = merge(left, right, comparator);\n};\n\n\nTree.prototype.split = function split$1 (key) {\n  return split(key, this._root, this._comparator);\n};\n\nObject.defineProperties( Tree.prototype, prototypeAccessors );\n\n\nfunction loadRecursive (parent, keys, values, start, end) {\n  var size = end - start;\n  if (size > 0) {\n    var middle = start + Math.floor(size / 2);\n    var key    = keys[middle];\n    var data   = values[middle];\n    var node   = { key: key, data: data, parent: parent };\n    node.left    = loadRecursive(node, keys, values, start, middle);\n    node.right   = loadRecursive(node, keys, values, middle + 1, end);\n    return node;\n  }\n  return null;\n}\n\n\nfunction createList(keys, values) {\n  var head = { next: null };\n  var p = head;\n  for (var i = 0; i < keys.length; i++) {\n    p = p.next = { key: keys[i], data: values[i] };\n  }\n  p.next = null;\n  return head.next;\n}\n\n\nfunction toList (root) {\n  var current = root;\n  var Q = [], done = false;\n\n  var head = { next: null };\n  var p = head;\n\n  while (!done) {\n    if (current) {\n      Q.push(current);\n      current = current.left;\n    } else {\n      if (Q.length > 0) {\n        current = p = p.next = Q.pop();\n        current = current.right;\n      } else { done = true; }\n    }\n  }\n  p.next = null; // that'll work even if the tree was empty\n  return head.next;\n}\n\n\nfunction sortedListToBST(list, start, end) {\n  var size = end - start;\n  if (size > 0) {\n    var middle = start + Math.floor(size / 2);\n    var left = sortedListToBST(list, start, middle);\n\n    var root = list.head;\n    root.left = left;\n\n    list.head = list.head.next;\n\n    root.right = sortedListToBST(list, middle + 1, end);\n    return root;\n  }\n  return null;\n}\n\n\nfunction mergeLists (l1, l2, compare) {\n  if ( compare === void 0 ) compare = function (a, b) { return a - b; };\n\n  var head = {}; // dummy\n  var p = head;\n\n  var p1 = l1;\n  var p2 = l2;\n\n  while (p1 !== null && p2 !== null) {\n    if (compare(p1.key, p2.key) < 0) {\n      p.next = p1;\n      p1 = p1.next;\n    } else {\n      p.next = p2;\n      p2 = p2.next;\n    }\n    p = p.next;\n  }\n\n  if (p1 !== null)      { p.next = p1; }\n  else if (p2 !== null) { p.next = p2; }\n\n  return head.next;\n}\n\n\nfunction sort(keys, values, left, right, compare) {\n  if (left >= right) { return; }\n\n  var pivot = keys[(left + right) >> 1];\n  var i = left - 1;\n  var j = right + 1;\n\n  while (true) {\n    do { i++; } while (compare(keys[i], pivot) < 0);\n    do { j--; } while (compare(keys[j], pivot) > 0);\n    if (i >= j) { break; }\n\n    var tmp = keys[i];\n    keys[i] = keys[j];\n    keys[j] = tmp;\n\n    tmp = values[i];\n    values[i] = values[j];\n    values[j] = tmp;\n  }\n\n  sort(keys, values,  left,     j, compare);\n  sort(keys, values, j + 1, right, compare);\n}\n\nfunction createEventQueue(byY) {\n  var q = new Tree(byY);\n\n  return {\n    isEmpty: isEmpty,\n    size: size,\n    pop: pop,\n    find: find,\n    insert: insert\n  }\n\n  function find(p) {\n    return q.find(p);\n  }\n\n  function size() {\n    return q.size;\n  }\n\n  function isEmpty() {\n    return q.isEmpty();\n  }\n\n  function insert(event) {\n    // debugger;\n    q.add(event.point, event);\n  }\n\n  function pop() {\n    var node = q.pop();\n    return node && node.data;\n  }\n}\n\n/**\n * Just a collection of geometry related utilities\n */\n\n// This is used for precision checking (e.g. two numbers are equal\n// if their difference is smaller than this number). The value is \n// chosen empirically. We still may run into precision related issues.\n// TODO: we should allow consumers to configure this.\nvar EPS = 1e-9;//10;\n\nfunction getIntersectionXPoint(segment, xPos, yPos) {\n  var dy1 = segment.from.y - yPos;\n  var dy2 = yPos - segment.to.y;\n  var dy = segment.to.y - segment.from.y;\n  if (Math.abs(dy1) < EPS) {\n    // The segment starts on the sweep line\n    if (Math.abs(dy) < EPS) {\n      // the segment is horizontal. Intersection is at the point\n      if (xPos <= segment.from.x) { return segment.from.x; }\n      if (xPos > segment.to.x) { return segment.to.x; }\n      return xPos;\n    }\n    return segment.from.x;\n  }\n  \n  var dx = (segment.to.x - segment.from.x); \n  var xOffset; \n  if (dy1 >= dy2) {\n    xOffset = dy1 * (dx / dy); \n    return (segment.from.x - xOffset);\n  } \n  xOffset = dy2 * (dx / dy);\n  return (segment.to.x + xOffset);\n}\n\nfunction angle(dx, dy) {\n  // https://stackoverflow.com/questions/16542042/fastest-way-to-sort-vectors-by-angle-without-actually-computing-that-angle\n  var p = dx/(Math.abs(dx) + Math.abs(dy)); // -1 .. 1 increasing with x\n\n  if (dy < 0) { return p - 1; }  // -2 .. 0 increasing with x\n  return 1 - p               //  0 .. 2 decreasing with x\n}\n\nfunction intersectSegments(a, b) {\n  //  https://stackoverflow.com/a/1968345/125351\n  var aStart = a.from, bStart = b.from;\n  var p0_x = aStart.x, p0_y = aStart.y,\n      p2_x = bStart.x, p2_y = bStart.y;\n\n  var s1_x = a.dx, s1_y = a.dy, s2_x = b.dx, s2_y = b.dy;\n  var div = s1_x * s2_y - s2_x * s1_y;\n\n  var s = (s1_y * (p0_x - p2_x) - s1_x * (p0_y - p2_y)) / div;\n  if (s < 0 || s > 1) { return; }\n\n  var t = (s2_x * (p2_y - p0_y) + s2_y * (p0_x - p2_x)) / div;\n\n  if (t >= 0 && t <= 1) {\n    return {\n      x: p0_x - (t * s1_x),\n      y: p0_y - (t * s1_y)\n    }\n  }\n}\n\nfunction samePoint(a, b) {\n  return Math.abs(a.x - b.x) < EPS && Math.abs(a.y - b.y) < EPS;\n}\n\n/**\n * Creates a new sweep status data structure.\n */\nfunction createSweepStatus(onError, EPS$$1) {\n  var lastPointY, prevY;\n  var lastPointX, prevX;\n  var useBelow = false;\n  var status = new Tree(compareSegments);\n\n  // To save on GC we return mutable object.\n  var currentBoundary = {\n    beforeLeft: null,\n    left: null,\n    right: null,\n    afterRight: null,\n  };\n\n  var currentLeftRight = {left: null, right: null};\n\n  return {\n    /**\n     * Add new segments into the status tree.\n     */\n    insertSegments: insertSegments,\n\n    /**\n     * Remove segments from the status tree.\n     */\n    deleteSegments: deleteSegments,\n\n    /**\n     * Returns segments that are to the left and right from a given point.\n     */\n    getLeftRightPoint: getLeftRightPoint,\n\n    /**\n     * For a given collections of segments finds the most left and the most right\n     * segments. Also returns segments immediately before left, and after right segments.\n     */\n    getBoundarySegments: getBoundarySegments,\n\n    findSegmentsWithPoint: findSegmentsWithPoint,\n\n    /**\n     * Current binary search tree with segments\n     */\n    status: status,\n\n    /**\n     * Introspection method that verifies if there are duplicates in the segment tree.\n     * If there are - `onError()` is called.\n     */\n    checkDuplicate: checkDuplicate,\n\n    /**\n     * Prints current segments in order of their intersection with sweep line. Introspection method.\n     */\n    printStatus: printStatus,\n\n    /**\n     * Returns current position of the sweep line.\n     */\n    getLastPoint: function getLastPoint() {\n      return {x: lastPointX, y: lastPointY};\n    }\n  }\n\n  function compareSegments(a, b) {\n    if (a === b) { return 0; }\n\n    var ak = getIntersectionXPoint(a, lastPointX, lastPointY);\n    var bk = getIntersectionXPoint(b, lastPointX, lastPointY);\n\n    var res = ak - bk;\n    if (Math.abs(res) >= EPS$$1) {\n      // We are okay fine. Intersection distance between two segments\n      // is good to give conclusive answer\n      return res;\n    }\n\n    var aIsHorizontal = Math.abs(a.dy) < EPS$$1;\n    var bIsHorizontal = Math.abs(b.dy) < EPS$$1;\n    if (aIsHorizontal && bIsHorizontal) {\n      return b.to.x - a.to.x;\n    }\n    // TODO: What if both a and b is horizontal?\n    // move horizontal to end\n    if (aIsHorizontal) { \n      return useBelow ? -1 : 1;\n    }\n\n    if (bIsHorizontal) {\n      if (useBelow) {\n        return (b.from.x >= lastPointX) ? -1 : 1\n      }\n      return -1;\n      // return useBelow ? 1 : -1;\n    }\n    var pa = a.angle;\n    var pb = b.angle;\n    if (Math.abs(pa - pb) >= EPS$$1) {\n      return useBelow ? pa - pb : pb - pa;\n    }\n\n    var segDist = a.from.y - b.from.y;\n    if (Math.abs(segDist) >= EPS$$1) {\n      return -segDist;\n    }\n    segDist = a.to.y - b.to.y;\n    if (Math.abs(segDist) >= EPS$$1) {\n      // TODO: Is this accurate?\n      return -segDist;\n    }\n\n    return 0;\n    // Could also use:\n    // var aAngle = Math.atan2(a.from.y - a.to.y, a.from.x - a.to.x);\n    // var bAngle = Math.atan2(b.from.y - b.to.y, b.from.x - b.to.x);\n    // return useBelow ? bAngle - aAngle : aAngle - bAngle;\n  }\n\n  function getBoundarySegments(upper, interior) {\n    var leftMost, rightMost, i;\n    var uLength = upper.length;\n\n    if (uLength > 0) {\n      leftMost = rightMost = upper[0];\n    } else {\n      leftMost = rightMost = interior[0];\n    }\n\n    for (i = 1; i < uLength; ++i) {\n      var s = upper[i];\n      var cmp = compareSegments(leftMost, s);\n      if (cmp > 0) { leftMost = s; }\n\n      cmp = compareSegments(rightMost, s);\n      if (cmp < 0) { rightMost = s; }\n    }\n\n    var startFrom = uLength > 0 ? 0 : 1;\n    for (i = startFrom; i < interior.length; ++i) {\n      s = interior[i];\n      cmp = compareSegments(leftMost, s);\n      if (cmp > 0) { leftMost = s; }\n\n      cmp = compareSegments(rightMost, s);\n      if (cmp < 0) { rightMost = s; }\n    }\n\n    // at this point we have our left/right segments in the status.\n    // Let's find their prev/next elements and report them back:\n    var left = status.find(leftMost);\n    if (!left) {\n      onError('Left is missing. Precision error?');\n    }\n\n    var right = status.find(rightMost);\n    if (!right) {\n      onError('Right is missing. Precision error?');\n    }\n\n    var beforeLeft = left && status.prev(left);\n    var afterRight = right && status.next(right);\n\n    while (afterRight && right.key.dy === 0 && afterRight.key.dy === 0) {\n      // horizontal segments are special :(\n      afterRight = status.next(afterRight);\n    }\n\n    currentBoundary.beforeLeft = beforeLeft && beforeLeft.key;\n    currentBoundary.left = left && left.key;\n    currentBoundary.right = right && right.key;\n    currentBoundary.afterRight = afterRight && afterRight.key;\n\n    return currentBoundary;\n  }\n\n  function getLeftRightPoint(p) {\n    // We are trying to find left and right segments that are nearest to the\n    // point p. For this we traverse the binary search tree, and remember\n    // node with the shortest distance to p.\n    var lastLeft;\n    var current = status._root;\n    var minX = Number.POSITIVE_INFINITY;\n    while (current) {\n      var x = getIntersectionXPoint(current.key, p.x, p.y);\n      var dx = p.x - x;\n      if (dx >= 0) {\n        if (dx < minX) {\n          minX = dx;\n          lastLeft = current;\n          current = current.left;\n        } else {\n          break;\n        }\n      } else {\n        if (-dx < minX) {\n          minX = -dx;\n          lastLeft = current;\n          current = current.right;\n        } else {\n          break;\n        }\n      }\n    }\n\n    currentLeftRight.left = lastLeft && lastLeft.key;\n    var next = lastLeft && status.next(lastLeft);\n    currentLeftRight.right = next && next.key;\n    return currentLeftRight;\n\n    // Conceptually, the code above should be equivalent to the code below;\n    // The code below is easier to understand, but intuitively, the code above\n    // should have better performance (as we do not traverse the entire status\n    // tree)\n\n    // var right, left,  x;\n    // var all = status.keys()\n    // for (var i = 0; i < all.length; ++i) {\n    //   var segment = all[i];\n    //   x = getIntersectionXPoint(segment, p.x, p.y);\n    //   if (x > p.x && !right) {\n    //     right = segment;\n    //     break;\n    //   } else if (x < p.x) {\n    //     left = segment;\n    //   }\n    // }\n\n    // currentLeftRight.left = left;\n    // currentLeftRight.right = right;\n\n    // return currentLeftRight;\n  }\n\n  function findSegmentsWithPoint(p, onFound) {\n    // Option 1.\n    // var arrResults = [];\n    // status.forEach(current => {\n    //   var x = getIntersectionXPoint(current.key, p.x, p.y);\n    //   var dx = p.x - x;\n    //   if (Math.abs(dx) < EPS) {\n    //     onFound(current.key);\n    //    // arrResults.push(current.key)\n    //   }\n    // });\n    // return arrResults;\n\n    // Option 2.\n\n    // let current = status._root;\n    // const Q = [];  /* Initialize stack s */\n    // let done = false;\n    // var res = [];\n    // var breakEarly = false;\n\n    // while (!done) {\n    //   if (current !==  null) {\n    //     Q.push(current);\n    //     current = current.left;\n    //   } else {\n    //     if (Q.length !== 0) {\n    //       current = Q.pop();\n\n    //       var x = getIntersectionXPoint(current.key, p.x, p.y);\n    //       var dx = p.x - x;\n    //       if (Math.abs(dx) < EPS) {\n    //         res.push(current.key)\n    //         breakEarly = true;\n    //       } else if (breakEarly) {\n    //         done = true;\n    //       }\n\n    //       current = current.right;\n    //     } else done = true;\n    //   }\n    // }\n\n    // return res;\n\n    // option 3.\n    var current = status._root;\n\n    while (current) {\n      var x = getIntersectionXPoint(current.key, p.x, p.y);\n      var dx = p.x - x;\n      if (Math.abs(dx) < EPS$$1) {\n        collectAdjacentNodes(current, p, onFound);\n        break;\n      } else if (dx < 0) {\n        current = current.left;\n      } else {\n        current = current.right;\n      }\n    }\n  }\n\n  function collectAdjacentNodes(root, p, onFound) {\n    onFound(root.key);\n    goOverPredecessors(root.left, p, onFound);\n    goOverSuccessors(root.right, p, onFound);\n  }\n\n  function goOverPredecessors(root, p, res) {\n    if (!root) { return; }\n    var x = getIntersectionXPoint(root.key, p.x, p.y);\n    var dx = p.x - x;\n    if (Math.abs(dx) < EPS$$1) {\n      collectAdjacentNodes(root, p, res);\n    } else {\n      goOverPredecessors(root.right, p, res);\n    }\n  }\n\n  function goOverSuccessors(root, p, res) {\n    if (!root) { return; }\n    var x = getIntersectionXPoint(root.key, p.x, p.y);\n    var dx = p.x - x;\n    if (Math.abs(dx) < EPS$$1) {\n      collectAdjacentNodes(root, p, res);\n    } else {\n      goOverSuccessors(root.left, p, res);\n    }\n  }\n\n  function checkDuplicate() {\n    var prev;\n    status.forEach(function (node) {\n      var current = node.key;\n\n      if (prev) {\n        if (samePoint(prev.from, current.from) && samePoint(prev.to, current.to)) {\n          // Likely you have received error before during segment removal.\n          onError('Duplicate key in the status! This may be caused by Floating Point rounding error');\n        }\n      }\n      prev = current;\n    });\n  }\n\n  function printStatus(prefix) {\n    if ( prefix === void 0 ) prefix = '';\n\n    // eslint-disable-next-line\n    console.log(prefix, 'status line: ', lastPointX, lastPointY);\n    status.forEach(function (node) {\n      var x = getIntersectionXPoint(node.key, lastPointX, lastPointY);\n      // eslint-disable-next-line\n      console.log(x + ' ' + node.key.name);\n    });\n  }\n\n  function insertSegments(interior, upper, sweepLinePos) {\n    lastPointY = sweepLinePos.y;\n    lastPointX = sweepLinePos.x;\n    var key;\n\n    for (var i = 0; i < interior.length; ++i) {\n      key = interior[i];\n      status.add(key);\n    }\n    for (i = 0; i < upper.length; ++i) {\n      key = upper[i];\n      status.add(key);\n    }\n  }\n\n  function deleteSegments(lower, interior, sweepLinePos) {\n    // I spent most of the time debugging this method. Depending on the\n    // algorithm state we can run into situation when dynamic keys of the\n    // `status` tree predict wrong branch, and thus we are not able to find\n    // the segment that needs to be deleted. If that happens I'm trying to\n    // use previous point and repeat the process. This may result in \n    // incorrect state. In that case I report an error. \n    var i;\n    var prevCount = status._size;\n    prevX = lastPointX;\n    prevY = lastPointY;\n    lastPointY = sweepLinePos.y;\n    lastPointX = sweepLinePos.x;\n\n    useBelow = true;\n    for(i = 0; i < lower.length; ++i) {\n      removeSegment(lower[i], sweepLinePos);\n    }\n    for(i = 0; i < interior.length; ++i) {\n      removeSegment(interior[i], sweepLinePos);\n    }\n    useBelow = false;\n\n    if (status._size !== prevCount - interior.length - lower.length) {\n      // This can happen when rounding error occurs. You can try scaling your input\n      onError('Segments were not removed from a tree properly. Precision error?');\n    }\n  }\n\n  function removeSegment(key, sweepLinePos) {\n    if (status.find(key)) {\n      status.remove(key);\n    } else {\n      lastPointX = prevX;\n      lastPointY = prevY;\n      if (status.find(key)) {\n        status.remove(key);\n      }\n      lastPointY = sweepLinePos.y;\n      lastPointX = sweepLinePos.x;\n    }\n  }\n}\n\n/**\n * Represents a single event in the sweep-line algorithm\n */\nvar SweepEvent = function SweepEvent(point, segment) {\n  this.point = point;\n  if (segment) { this.from = [segment]; }\n};\n\n/**\n * A point on a line\n * \n * @typedef {Object} Point\n * @property {number} x coordinate\n * @property {number} y coordinate\n */\n\n\n/**\n * @typedef {Object} Segment \n * @property {Point} from start of the segment\n * @property {Point} to end of the segment\n */\n\n/**\n * @typedef {function(point : Point, interior : Segment[], lower : Segment[], upper : Segment[])} ReportIntersectionCallback\n */\n\n/**\n * @typedef {Object} ISectOptions \n * @property {ReportIntersectionCallback} onFound \n */\n\n /**\n  * @typedef {Object} ISectResult\n  */\n\n// We use EMPTY array to avoid pressure on garbage collector. Need to be\n// very cautious to not mutate this array.\nvar EMPTY = [];\n\n/**\n * Finds all intersections among given segments.\n * \n * The algorithm follows \"Computation Geometry, Algorithms and Applications\" book\n * by Mark de Berg, Otfried Cheong, Marc van Kreveld, and Mark Overmars.\n * \n * Line is swept top-down\n * \n * @param {Segment[]} segments\n * @param {ISectOptions=} options\n * @returns {ISectResult}\n */\nfunction isect(segments, options) {\n  var results = [];\n  var reportIntersection = (options && options.onFound) || defaultIntersectionReporter;\n\n  var onError = (options && options.onError) || defaultErrorReporter;\n\n  var eventQueue = createEventQueue(byY);\n  var sweepStatus = createSweepStatus(onError, EPS);\n  var lower, interior, lastPoint;\n\n  segments.forEach(addSegment);\n\n  return {\n    /**\n     * Find all intersections synchronously.\n     * \n     * @returns array of found intersections.\n     */\n    run: run,\n\n    /**\n     * Performs a single step in the sweep line algorithm\n     * \n     * @returns true if there was something to process; False if no more work to do\n     */\n    step: step,\n\n    // Methods below are low level API for fine-grained control.\n    // Don't use it unless you understand this code thoroughly\n\n    /**\n     * Add segment into the \n     */\n    addSegment: addSegment,\n\n    /**\n     * Direct access to event queue. Queue contains segment endpoints and\n     * pending detected intersections.\n     */\n    eventQueue: eventQueue, \n\n    /**\n     * Direct access to sweep line status. \"Status\" holds information about\n     * all intersected segments.\n     */\n    sweepStatus: sweepStatus,\n\n    /**\n     * Access to results array. Works only when you use default onFound() handler\n     */\n    results: results\n  }\n\n  function run() {\n    while (!eventQueue.isEmpty()) {\n      var eventPoint = eventQueue.pop();\n      if (handleEventPoint(eventPoint)) {\n        // they decided to stop.\n        return;\n      }    }\n\n    return results;\n  }\n\n  function step() {\n    if (!eventQueue.isEmpty()) {\n      var eventPoint = eventQueue.pop();\n      handleEventPoint(eventPoint);\n      // Note: we don't check results of `handleEventPoint()`\n      // assumption is that client controls `step()` and thus they \n      // know better if they want to stop.\n      return true;\n    }\n    return false;\n  }\n\n  function handleEventPoint(p) {\n    lastPoint = p.point;\n    var upper = p.from || EMPTY;\n\n    lower = interior = undefined;\n    // TODO: move lower/interior into sweep status method?\n\n    sweepStatus.findSegmentsWithPoint(lastPoint, addLowerOrInterior);\n    // if (segmentsWithPoint) {\n    //   segmentsWithPoint.forEach()\n    // } \n\n    if (!lower) { lower = EMPTY; }\n    if (!interior) { interior = EMPTY; }\n\n    var uLength = upper.length;\n    var iLength = interior.length;\n    var lLength = lower.length;\n    var hasIntersection = uLength + iLength + lLength > 1;\n    var hasPointIntersection = !hasIntersection && (uLength === 0 && lLength === 0 && iLength > 0);\n\n    if (hasIntersection || hasPointIntersection) {\n      p.isReported = true;\n      if (reportIntersection(lastPoint, union(interior, union(lower, upper)))) {\n        return true;\n      }\n    }\n\n    sweepStatus.deleteSegments(lower, interior, lastPoint);\n    sweepStatus.insertSegments(interior, upper, lastPoint);\n\n    var sLeft, sRight;\n\n    var hasNoCrossing = (uLength + iLength === 0);\n\n    if (hasNoCrossing) {\n      var leftRight = sweepStatus.getLeftRightPoint(lastPoint);\n      sLeft = leftRight.left;\n      if (!sLeft) { return; }\n\n      sRight = leftRight.right;\n      if (!sRight) { return; }\n\n      findNewEvent(sLeft, sRight, p);\n    } else {\n      var boundarySegments = sweepStatus.getBoundarySegments(upper, interior);\n\n      findNewEvent(boundarySegments.beforeLeft, boundarySegments.left, p);\n      findNewEvent(boundarySegments.right, boundarySegments.afterRight, p);\n    }\n\n    return false;\n  }\n\n  function addLowerOrInterior(s) {\n    if (samePoint(s.to, lastPoint)) {\n      if (!lower) { lower = [s]; }\n      else { lower.push(s); }\n    } else if (!samePoint(s.from, lastPoint)) {\n      if (!interior) { interior = [s]; }\n      else { interior.push(s); }\n    }\n  }\n\n  function findNewEvent(left, right, p) {\n    if (!left || !right) { return; }\n\n    var intersection = intersectSegments(left, right);\n    if (!intersection) {\n        return;\n    }\n\n    var dy = p.point.y - intersection.y;\n    // TODO: should I add dy to intersection.y?\n    if (dy < -EPS) {\n      // this means intersection happened after the sweep line. \n      // We already processed it.\n      return;\n    }\n    if (Math.abs(dy) < EPS && intersection.x <= p.point.x) {\n      return;\n    }\n\n    // Need to adjust floating point for this special case,\n    // since otherwise it gives rounding errors:\n    roundNearZero(intersection);\n\n    var current = eventQueue.find(intersection);\n\n    if (current && current.isReported) {\n      // We already reported this event. No need to add it one more time\n      // TODO: Is this case even possible?\n      onError('We already reported this event.');\n      return;\n    }\n\n    if (!current) {\n      var event = new SweepEvent(intersection);\n      eventQueue.insert(event);\n    }\n  }\n\n  function defaultIntersectionReporter(p, segments) {\n    results.push({\n      point: p, \n      segments: segments\n    });\n  }\n\n  function addSegment(segment) {\n    var from = segment.from;\n    var to = segment.to;\n\n    // Small numbers give more precision errors. Rounding them to 0.\n    roundNearZero(from);\n    roundNearZero(to);\n\n    var dy = from.y - to.y;\n\n    // Note: dy is much smaller then EPS on purpose. I found that higher\n    // precision here does less good - getting way more rounding errors.\n    if (Math.abs(dy) < 1e-5) {\n      from.y = to.y;\n      segment.dy = 0;\n    }\n    if ((from.y < to.y) || (\n        (from.y === to.y) && (from.x > to.x))\n      ) {\n      var temp = from;\n      from = segment.from = to; \n      to = segment.to = temp;\n    }\n\n    // We pre-compute some immutable properties of the segment\n    // They are used quite often in the tree traversal, and pre-computation\n    // gives significant boost:\n    segment.dy = from.y - to.y;\n    segment.dx = from.x - to.x;\n    segment.angle = angle(segment.dy, segment.dx);\n\n    var isPoint = segment.dy === segment.dx && segment.dy === 0;\n    var prev = eventQueue.find(from);\n    if (prev && !isPoint) {\n      // this detects identical segments early. Without this check\n      // the algorithm would break since sweep line has no means to\n      // detect identical segments.\n      var prevFrom = prev.data.from;\n      if (prevFrom) {\n        for (var i = 0; i < prevFrom.length; ++i) {\n          var s = prevFrom[i];\n          if (samePoint(s.to, to)) {\n            reportIntersection(s.from, [s.from, s.to]);\n            reportIntersection(s.to, [s.from, s.to]);\n            return;\n          }\n        }\n      }\n    }\n\n    if (!isPoint) {\n      if (prev) {\n        if (prev.data.from) { prev.data.from.push(segment); }\n        else { prev.data.from = [segment]; }\n      } else {\n        var e = new SweepEvent(from, segment);\n        eventQueue.insert(e);\n      }\n      var event = new SweepEvent(to);\n      eventQueue.insert(event);\n    } else {\n      var event = new SweepEvent(to);\n      eventQueue.insert(event);\n    }\n  } \n}\n\nfunction roundNearZero(point) {\n  if (Math.abs(point.x) < EPS) { point.x = 0; }\n  if (Math.abs(point.y) < EPS) { point.y = 0; }\n}\n\nfunction defaultErrorReporter(errorMessage) {\n  throw new Error(errorMessage);\n}\n\nfunction union(a, b) {\n  if (!a) { return b; }\n  if (!b) { return a; }\n\n  return a.concat(b);\n}\n\nfunction byY(a, b) {\n  // decreasing Y \n  var res = b.y - a.y;\n  // TODO: This might mess up the status tree.\n  if (Math.abs(res) < EPS) {\n    // increasing x.\n    res = a.x - b.x;\n    if (Math.abs(res) < EPS) { res = 0; }\n  }\n\n  return res;\n}\n\nfunction intersectSegments$1(a, b) {\n  // Note: this is almost the same as geom.intersectSegments()\n  // The main difference is that we don't have a pre-computed\n  // value for dx/dy on the segments.\n  //  https://stackoverflow.com/a/1968345/125351\n  var aStart = a.from, bStart = b.from;\n  var p0_x = aStart.x, p0_y = aStart.y,\n      p2_x = bStart.x, p2_y = bStart.y;\n\n  var s1_x = a.from.x - a.to.x, s1_y = a.from.y - a.to.y, s2_x = b.from.x - b.to.x, s2_y = b.from.y - b.to.y;\n  var div = s1_x * s2_y - s2_x * s1_y;\n\n  var s = (s1_y * (p0_x - p2_x) - s1_x * (p0_y - p2_y)) / div;\n  if (s < 0 || s > 1) { return; }\n\n  var t = (s2_x * (p2_y - p0_y) + s2_y * (p0_x - p2_x)) / div;\n\n  if (t >= 0 && t <= 1) {\n    return {\n      x: p0_x - (t * s1_x),\n      y: p0_y - (t * s1_y)\n    }\n  }\n}\n\n/**\n * This is a brute force solution with O(n^2) performance.\n * (`n` is number of segments).\n * \n * Use this when number of lines is low, and number of intersections\n * is high.\n */\nfunction brute(lines, options) {\n  var results = [];\n  var reportIntersection = (options && options.onFound) || \n                            defaultIntersectionReporter;\n  var asyncState;\n\n  return {\n    /**\n     * Execute brute force of the segment intersection search\n     */\n    run: run,\n    /**\n     * Access to results array. Works only when you use default onFound() handler\n     */\n    results: results,\n\n    /**\n     * Performs a single step in the brute force algorithm ()\n     */\n    step: step\n  }\n\n  function step() {\n    if (!asyncState) {\n      asyncState = {\n        i: 0\n      };\n    }\n    var test = lines[asyncState.i];\n    for (var j = asyncState.i + 1; j < lines.length; ++j) {\n      var other = lines[j];\n      var pt = intersectSegments$1(test, other);\n      if (pt) {\n        if (reportIntersection(pt, [test, other])) {\n          return;\n        }\n      }\n    }\n    asyncState.i += 1;\n    return asyncState.i < lines.length;\n  }\n\n  function run() {\n    for(var i = 0; i < lines.length; ++i) {\n      var test = lines[i];\n      for (var j = i + 1; j < lines.length; ++j) {\n        var other = lines[j];\n        var pt = intersectSegments$1(test, other);\n        if (pt) {\n          if (reportIntersection(pt, [test, other])) {\n            return;\n          }\n        }\n      }\n    }\n    return results;\n  }\n\n  function defaultIntersectionReporter(p, interior) {\n    results.push({\n      point: p, \n      segments: interior\n    });\n  }\n}\n\nvar ARRAY_TYPES = [\n    Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n    Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\nvar VERSION = 3; // serialized format version\n\nvar Flatbush = function Flatbush(numItems, nodeSize, ArrayType, data) {\n    var this$1 = this;\n\n    if (numItems === undefined) { throw new Error('Missing required argument: numItems.'); }\n    if (isNaN(numItems) || numItems <= 0) { throw new Error((\"Unpexpected numItems value: \" + numItems + \".\")); }\n\n    this.numItems = +numItems;\n    this.nodeSize = Math.min(Math.max(+nodeSize || 16, 2), 65535);\n\n    // calculate the total number of nodes in the R-tree to allocate space for\n    // and the index of each tree level (used in search later)\n    var n = numItems;\n    var numNodes = n;\n    this._levelBounds = [n * 4];\n    do {\n        n = Math.ceil(n / this$1.nodeSize);\n        numNodes += n;\n        this$1._levelBounds.push(numNodes * 4);\n    } while (n !== 1);\n\n    this.ArrayType = ArrayType || Float64Array;\n    this.IndexArrayType = numNodes < 16384 ? Uint16Array : Uint32Array;\n\n    var arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n    var nodesByteSize = numNodes * 4 * this.ArrayType.BYTES_PER_ELEMENT;\n\n    if (arrayTypeIndex < 0) {\n        throw new Error((\"Unexpected typed array class: \" + ArrayType + \".\"));\n    }\n\n    if (data && (data instanceof ArrayBuffer)) {\n        this.data = data;\n        this._boxes = new this.ArrayType(this.data, 8, numNodes * 4);\n        this._indices = new this.IndexArrayType(this.data, 8 + nodesByteSize, numNodes);\n\n        this._pos = numNodes * 4;\n        this.minX = this._boxes[this._pos - 4];\n        this.minY = this._boxes[this._pos - 3];\n        this.maxX = this._boxes[this._pos - 2];\n        this.maxY = this._boxes[this._pos - 1];\n\n    } else {\n        this.data = new ArrayBuffer(8 + nodesByteSize + numNodes * this.IndexArrayType.BYTES_PER_ELEMENT);\n        this._boxes = new this.ArrayType(this.data, 8, numNodes * 4);\n        this._indices = new this.IndexArrayType(this.data, 8 + nodesByteSize, numNodes);\n        this._pos = 0;\n        this.minX = Infinity;\n        this.minY = Infinity;\n        this.maxX = -Infinity;\n        this.maxY = -Infinity;\n\n        new Uint8Array(this.data, 0, 2).set([0xfb, (VERSION << 4) + arrayTypeIndex]);\n        new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n        new Uint32Array(this.data, 4, 1)[0] = numItems;\n    }\n};\n\nFlatbush.from = function from (data) {\n    if (!(data instanceof ArrayBuffer)) {\n        throw new Error('Data must be an instance of ArrayBuffer.');\n    }\n    var ref = new Uint8Array(data, 0, 2);\n        var magic = ref[0];\n        var versionAndType = ref[1];\n    if (magic !== 0xfb) {\n        throw new Error('Data does not appear to be in a Flatbush format.');\n    }\n    if (versionAndType >> 4 !== VERSION) {\n        throw new Error((\"Got v\" + (versionAndType >> 4) + \" data when expected v\" + VERSION + \".\"));\n    }\n    var ref$1 = new Uint16Array(data, 2, 1);\n        var nodeSize = ref$1[0];\n    var ref$2 = new Uint32Array(data, 4, 1);\n        var numItems = ref$2[0];\n\n    return new Flatbush(numItems, nodeSize, ARRAY_TYPES[versionAndType & 0x0f], data);\n};\n\nFlatbush.prototype.add = function add (minX, minY, maxX, maxY) {\n    var index = this._pos >> 2;\n    this._indices[index] = index;\n    this._boxes[this._pos++] = minX;\n    this._boxes[this._pos++] = minY;\n    this._boxes[this._pos++] = maxX;\n    this._boxes[this._pos++] = maxY;\n\n    if (minX < this.minX) { this.minX = minX; }\n    if (minY < this.minY) { this.minY = minY; }\n    if (maxX > this.maxX) { this.maxX = maxX; }\n    if (maxY > this.maxY) { this.maxY = maxY; }\n};\n\nFlatbush.prototype.finish = function finish () {\n        var this$1 = this;\n\n    if (this._pos >> 2 !== this.numItems) {\n        throw new Error((\"Added \" + (this._pos >> 2) + \" items when expected \" + (this.numItems) + \".\"));\n    }\n\n    var width = this.maxX - this.minX;\n    var height = this.maxY - this.minY;\n    var hilbertValues = new Uint32Array(this.numItems);\n    var hilbertMax = (1 << 16) - 1;\n\n    // map item centers into Hilbert coordinate space and calculate Hilbert values\n    for (var i = 0; i < this.numItems; i++) {\n        var pos = 4 * i;\n        var minX = this$1._boxes[pos++];\n        var minY = this$1._boxes[pos++];\n        var maxX = this$1._boxes[pos++];\n        var maxY = this$1._boxes[pos++];\n        var x = Math.floor(hilbertMax * ((minX + maxX) / 2 - this$1.minX) / width);\n        var y = Math.floor(hilbertMax * ((minY + maxY) / 2 - this$1.minY) / height);\n        hilbertValues[i] = hilbert(x, y);\n    }\n\n    // sort items by their Hilbert value (for packing later)\n    sort$1(hilbertValues, this._boxes, this._indices, 0, this.numItems - 1);\n\n    // generate nodes at each tree level, bottom-up\n    for (var i$1 = 0, pos$1 = 0; i$1 < this._levelBounds.length - 1; i$1++) {\n        var end = this$1._levelBounds[i$1];\n\n        // generate a parent node for each block of consecutive <nodeSize> nodes\n        while (pos$1 < end) {\n            var nodeMinX = Infinity;\n            var nodeMinY = Infinity;\n            var nodeMaxX = -Infinity;\n            var nodeMaxY = -Infinity;\n            var nodeIndex = pos$1;\n\n            // calculate bbox for the new node\n            for (var i$2 = 0; i$2 < this.nodeSize && pos$1 < end; i$2++) {\n                var minX$1 = this$1._boxes[pos$1++];\n                var minY$1 = this$1._boxes[pos$1++];\n                var maxX$1 = this$1._boxes[pos$1++];\n                var maxY$1 = this$1._boxes[pos$1++];\n                if (minX$1 < nodeMinX) { nodeMinX = minX$1; }\n                if (minY$1 < nodeMinY) { nodeMinY = minY$1; }\n                if (maxX$1 > nodeMaxX) { nodeMaxX = maxX$1; }\n                if (maxY$1 > nodeMaxY) { nodeMaxY = maxY$1; }\n            }\n\n            // add the new node to the tree data\n            this$1._indices[this$1._pos >> 2] = nodeIndex;\n            this$1._boxes[this$1._pos++] = nodeMinX;\n            this$1._boxes[this$1._pos++] = nodeMinY;\n            this$1._boxes[this$1._pos++] = nodeMaxX;\n            this$1._boxes[this$1._pos++] = nodeMaxY;\n        }\n    }\n};\n\nFlatbush.prototype.search = function search (minX, minY, maxX, maxY, filterFn) {\n        var this$1 = this;\n\n    if (this._pos !== this._boxes.length) {\n        throw new Error('Data not yet indexed - call index.finish().');\n    }\n\n    var nodeIndex = this._boxes.length - 4;\n    var level = this._levelBounds.length - 1;\n    var queue = [];\n    var results = [];\n\n    while (nodeIndex !== undefined) {\n        // find the end index of the node\n        var end = Math.min(nodeIndex + this$1.nodeSize * 4, this$1._levelBounds[level]);\n\n        // search through child nodes\n        for (var pos = nodeIndex; pos < end; pos += 4) {\n            var index = this$1._indices[pos >> 2];\n\n            // check if node bbox intersects with query bbox\n            if (maxX < this$1._boxes[pos]) { continue; } // maxX < nodeMinX\n            if (maxY < this$1._boxes[pos + 1]) { continue; } // maxY < nodeMinY\n            if (minX > this$1._boxes[pos + 2]) { continue; } // minX > nodeMaxX\n            if (minY > this$1._boxes[pos + 3]) { continue; } // minY > nodeMaxY\n\n            if (nodeIndex < this$1.numItems * 4) {\n                if (filterFn === undefined || filterFn(index)) {\n                    results.push(index); // leaf item\n                }\n\n            } else {\n                queue.push(index); // node; add it to the search queue\n                queue.push(level - 1);\n            }\n        }\n\n        level = queue.pop();\n        nodeIndex = queue.pop();\n    }\n\n    return results;\n};\n\n// custom quicksort that sorts bbox data alongside the hilbert values\nfunction sort$1(values, boxes, indices, left, right) {\n    if (left >= right) { return; }\n\n    var pivot = values[(left + right) >> 1];\n    var i = left - 1;\n    var j = right + 1;\n\n    while (true) {\n        do { i++; } while (values[i] < pivot);\n        do { j--; } while (values[j] > pivot);\n        if (i >= j) { break; }\n        swap(values, boxes, indices, i, j);\n    }\n\n    sort$1(values, boxes, indices, left, j);\n    sort$1(values, boxes, indices, j + 1, right);\n}\n\n// swap two values and two corresponding boxes\nfunction swap(values, boxes, indices, i, j) {\n    var temp = values[i];\n    values[i] = values[j];\n    values[j] = temp;\n\n    var k = 4 * i;\n    var m = 4 * j;\n\n    var a = boxes[k];\n    var b = boxes[k + 1];\n    var c = boxes[k + 2];\n    var d = boxes[k + 3];\n    boxes[k] = boxes[m];\n    boxes[k + 1] = boxes[m + 1];\n    boxes[k + 2] = boxes[m + 2];\n    boxes[k + 3] = boxes[m + 3];\n    boxes[m] = a;\n    boxes[m + 1] = b;\n    boxes[m + 2] = c;\n    boxes[m + 3] = d;\n\n    var e = indices[i];\n    indices[i] = indices[j];\n    indices[j] = e;\n}\n\n// Fast Hilbert curve algorithm by http://threadlocalmutex.com/\n// Ported from C++ https://github.com/rawrunprotected/hilbert_curves (public domain)\nfunction hilbert(x, y) {\n    var a = x ^ y;\n    var b = 0xFFFF ^ a;\n    var c = 0xFFFF ^ (x | y);\n    var d = x & (y ^ 0xFFFF);\n\n    var A = a | (b >> 1);\n    var B = (a >> 1) ^ a;\n    var C = ((c >> 1) ^ (b & (d >> 1))) ^ c;\n    var D = ((a & (c >> 1)) ^ (d >> 1)) ^ d;\n\n    a = A; b = B; c = C; d = D;\n    A = ((a & (a >> 2)) ^ (b & (b >> 2)));\n    B = ((a & (b >> 2)) ^ (b & ((a ^ b) >> 2)));\n    C ^= ((a & (c >> 2)) ^ (b & (d >> 2)));\n    D ^= ((b & (c >> 2)) ^ ((a ^ b) & (d >> 2)));\n\n    a = A; b = B; c = C; d = D;\n    A = ((a & (a >> 4)) ^ (b & (b >> 4)));\n    B = ((a & (b >> 4)) ^ (b & ((a ^ b) >> 4)));\n    C ^= ((a & (c >> 4)) ^ (b & (d >> 4)));\n    D ^= ((b & (c >> 4)) ^ ((a ^ b) & (d >> 4)));\n\n    a = A; b = B; c = C; d = D;\n    C ^= ((a & (c >> 8)) ^ (b & (d >> 8)));\n    D ^= ((b & (c >> 8)) ^ ((a ^ b) & (d >> 8)));\n\n    a = C ^ (C >> 1);\n    b = D ^ (D >> 1);\n\n    var i0 = x ^ y;\n    var i1 = b | (0xFFFF ^ (i0 | a));\n\n    i0 = (i0 | (i0 << 8)) & 0x00FF00FF;\n    i0 = (i0 | (i0 << 4)) & 0x0F0F0F0F;\n    i0 = (i0 | (i0 << 2)) & 0x33333333;\n    i0 = (i0 | (i0 << 1)) & 0x55555555;\n\n    i1 = (i1 | (i1 << 8)) & 0x00FF00FF;\n    i1 = (i1 | (i1 << 4)) & 0x0F0F0F0F;\n    i1 = (i1 | (i1 << 2)) & 0x33333333;\n    i1 = (i1 | (i1 << 1)) & 0x55555555;\n\n    return ((i1 << 1) | i0) >>> 0;\n}\n\n/**\n * This implementation is inspired by discussion here \n * https://twitter.com/mourner/status/1049325199617921024 and \n * here https://github.com/anvaka/isect/issues/1\n * \n * It builds an index of all segments using static spatial index\n * and then for each segment it queries overlapping rectangles.\n */\nfunction bush(lines, options) {\n  var results = [];\n  var reportIntersection = (options && options.onFound) || \n                            defaultIntersectionReporter;\n  var asyncState;\n\n  var index = new Flatbush(lines.length);\n  lines.forEach(addToIndex);\n  index.finish();\n\n  return {\n    run: run,\n    step: step,\n    results: results,\n\n    // undocumented, don't use unless you know what you are doing:\n    checkIntersection: checkIntersection\n  }\n\n  function run() {\n    for (var i = 0; i < lines.length; ++i) {\n      if (checkIntersection(lines[i], i)) {\n        return; // stop early\n      }\n    }\n    return results;\n  }\n\n  function checkIntersection(currentSegment, currentId) {\n    // sorry about code duplication.\n    var minX = currentSegment.from.x; var maxX = currentSegment.to.x;\n    var minY = currentSegment.from.y; var maxY = currentSegment.to.y;\n    var t;\n    if (minX > maxX) { t = minX; minX = maxX; maxX = t; }\n    if (minY > maxY) { t = minY; minY = maxY; maxY = t; }\n\n    var ids = index.search(minX, minY, maxX, maxY);\n\n    for (var i = 0; i < ids.length; ++i) {\n      var segmentIndex = ids[i];\n      if (segmentIndex <= currentId) { continue; } // we have either reported it, or it is current.\n\n      var otherSegment = lines[segmentIndex];\n      var point = intersectSegments$1(otherSegment, currentSegment);\n\n      if (point) {\n        if (reportIntersection(point, [currentSegment, otherSegment])) {\n          // stop early\n          return true;\n        }\n      }\n    }\n  }\n\n  function step() {\n    if (!asyncState) {\n      asyncState = {i: 0};\n    }\n    var test = lines[asyncState.i];\n    checkIntersection(test, asyncState.i);\n    asyncState.i += 1;\n    return asyncState.i < lines.length;\n  }\n\n\n  function addToIndex(line) {\n    var minX = line.from.x; var maxX = line.to.x;\n    var minY = line.from.y; var maxY = line.to.y;\n    var t;\n    if (minX > maxX) { t = minX; minX = maxX; maxX = t; }\n    if (minY > maxY) { t = minY; minY = maxY; maxY = t; }\n    index.add(minX, minY, maxX, maxY);\n  }\n\n  function defaultIntersectionReporter(p, interior) {\n    results.push({\n      point: p, \n      segments: interior\n    });\n  }\n}\n\nexport { isect as sweep, brute, bush };\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 22 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {ViewEdge, VisibilityIndicatingNatures} from \"../ViewEdge\";\nimport {bush} from 'isect';\nimport {Vector2} from \"three\";\nimport {Viewmap} from \"../Viewmap\";\nimport {splitViewEdge2d} from \"./splitEdge\";\nimport {ViewVertexSingularity} from \"../ViewVertex\";\nimport {hashVector2} from \"../../../utils\";\n\nconst _vec = new Vector2();\n\n\n/**\n * Finds the 2d singularities in the viewmap and mark them.\n * (Computes the intersection of ViewEdges in the image plane)\n *\n * @param viewmap\n */\nexport function find2dSingularities(viewmap: Viewmap) {\n\n  const {viewEdges} = viewmap;\n\n  const interAlgorithm = bush([...viewEdges]);\n  let intersections = interAlgorithm.run() as Array<{\n    segments: ViewEdge[],\n    point: {x: number, y: number}\n  }>;\n\n  // Keep intersections of non connected edges with at least one visibility\n  // indicating ViewEdgeNature\n  intersections = intersections.filter(({segments: [a,b]}) => {\n    return !(a).isConnectedTo(b) &&\n      (VisibilityIndicatingNatures.has(a.nature) ||\n      VisibilityIndicatingNatures.has(b.nature));\n  });\n\n  // As we will cut viewEdge recursively in small viewEdge, we store the current\n  // cuts in a map\n  const cutMap = new Map<ViewEdge, ViewEdge[]>();\n\n  for (const intersection of intersections) {\n\n    const splitViewVertices = [];\n\n    _vec.set(intersection.point.x, intersection.point.y);\n    const hash = hashVector2(_vec);\n\n    for (const viewEdge of intersection.segments) {\n\n      // Setup edge cuts if needed\n      let cuts = cutMap.get(viewEdge);\n      if (!cuts) {\n        cuts = [viewEdge];\n        cutMap.set(viewEdge, cuts);\n      }\n\n      // Test the cuts to find the intersection point\n      let i = 0;\n      let splitResult = null;\n      while(i < cuts.length && splitResult === null) {\n        splitResult = splitViewEdge2d(viewmap, cuts[i], _vec);\n        i += 1;\n      }\n\n      if (splitResult) {\n        splitViewVertices.push(splitResult.viewVertex);\n\n        /*\n         * Overwrite position and hash so we are sure the vertices have the\n         * exact same 2D position from the camera which is CRUCIAL for the\n         * CGAL step\n         */\n        splitResult.viewVertex.pos2d.copy(_vec);\n        splitResult.viewVertex.hash2d = hash;\n\n        if (splitResult.viewEdge) {\n          cuts.push(splitResult.viewEdge);\n        }\n\n      } else {\n        // console.error(\"Image intersection -- Edge could not be splitted\", cuts, _vec);\n      }\n    }\n\n    if (splitViewVertices.length === 0) {\n      // console.error(\"Image intersection -- Should have 2 split vertices\");\n    } else if (splitViewVertices.length === 1) {\n      const v = splitViewVertices[0];\n      v.singularity = ViewVertexSingularity.ImageIntersection;\n    } else {\n      const v1 = splitViewVertices[0];\n      const v2 = splitViewVertices[1];\n\n      // Compute the distance between the vertices and the camera.\n      // We only need to insert a singularity point at the farest vertex\n      // If equal, both vertices get a singularity\n      // See https://hal.inria.fr/hal-02189483, image intersections of type T-cusp\n\n      const d1 = v1.pos3d.distanceTo(viewmap.camera.position);\n      const d2 = v2.pos3d.distanceTo(viewmap.camera.position);\n\n      if (d1 > d2 + 1e-10) {\n        v1.singularity = ViewVertexSingularity.ImageIntersection;\n      } else if (d2 > d1 + 1e-10) {\n        v2.singularity = ViewVertexSingularity.ImageIntersection;\n      } else {\n        v1.singularity = ViewVertexSingularity.ImageIntersection;\n        v2.singularity = ViewVertexSingularity.ImageIntersection;\n      }\n    }\n  }\n}\n\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Nov 22 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {PerspectiveCamera} from \"three\";\nimport {Vertex} from \"../../../../three-mesh-halfedge\";\nimport {sameSide} from \"../../../utils\";\nimport {ViewEdgeNature} from \"../ViewEdge\";\nimport {Viewmap} from \"../Viewmap\";\nimport {ViewVertex, ViewVertexSingularity} from \"../ViewVertex\";\n\nexport function find3dSingularities(viewmap: Viewmap) {\n\n  const {viewVertexMap, camera} = viewmap;\n\n  for (const [, viewVertex] of viewVertexMap) {\n    viewVertex.singularity = singularityForPoint(viewVertex, camera);\n  }\n}\n\n/**\n *\n * @ref https://hal.inria.fr/hal-02189483/file/contour_tutorial.pdf Section 4.3\n *\n * @param point\n * @param camera\n * @returns\n */\nexport function singularityForPoint(\n    viewVertex: ViewVertex, camera: PerspectiveCamera) {\n\n  const natures = new Set<ViewEdgeNature>();\n\n  let concaveSilhouetteEdgeFound = false;\n  let convexSilhouetteEdgeFound = false;\n\n  // Count the number of different natures connected to the vertex\n  for (const edge of viewVertex.viewEdges) {\n\n    natures.add(edge.nature);\n\n    if (edge.faces.length > 1 && edge.nature === ViewEdgeNature.Silhouette) {\n      concaveSilhouetteEdgeFound ||= edge.isConcave;\n      convexSilhouetteEdgeFound ||= !edge.isConcave;\n    }\n  }\n\n  if (natures.size === 0) {\n    console.error(\"No natures found around vertex\", viewVertex);\n    return ViewVertexSingularity.None;\n  }\n\n  // If the number of segment natures is 1 and there is more than 2 segments\n  // connected to the point, then there is a bifurcation singularity\n  if (natures.size === 1) {\n    if(viewVertex.viewEdges.length > 2 && (\n      natures.has(ViewEdgeNature.Silhouette) || natures.has(ViewEdgeNature.Boundary)\n    )) {\n      return ViewVertexSingularity.Bifurcation;\n    }\n  }\n\n  // If there are at least 2 edges of different natures connected to the vertex,\n  // then there is a mesh intersection singularity\n  if (natures.size > 1) {\n    if (natures.has(ViewEdgeNature.Silhouette) ||\n        natures.has(ViewEdgeNature.Boundary) ||\n        natures.has(ViewEdgeNature.MeshIntersection)) {\n      return ViewVertexSingularity.MeshIntersection;\n    }\n  }\n\n  // Curtains folds:\n\n  // Curtain fold singularity can occur on a non-boundary segment where\n  // there are at least one concave and one convex edges connected\n  // if (!natures.has(EdgeNature.Boundary) &&\n  if (concaveSilhouetteEdgeFound && convexSilhouetteEdgeFound) {\n    return ViewVertexSingularity.CurtainFold;\n  }\n\n  // Curtain fold singularity can also occur on a Boundary edge where\n  // one of the connected face overlaps the boundary edge\n  // Note that at this stage of the pipeline, each point should only have\n  // one associated vertex, hence the index 0\n  if (natures.has(ViewEdgeNature.Boundary)) {\n    if (isAnyFaceOverlappingBoundary(viewVertex, camera)) {\n      return ViewVertexSingularity.CurtainFold;\n    }\n  }\n\n  return ViewVertexSingularity.None;\n\n}\n\nexport function *listBoundaryHalfedgesInOut(vertex: Vertex) {\n  yield* vertex.boundaryHalfedgesInLoop();\n  yield* vertex.boundaryHalfedgesOutLoop();\n}\n\n/**\n * Checks if face adjacent to a boundary vertex overlap in image-space.\n *\n * @ref https://hal.inria.fr/hal-02189483/file/contour_tutorial.pdf Appendix C.2.1\n *\n * @param vertex\n * @param camera\n * @returns\n */\nexport function isAnyFaceOverlappingBoundary(viewVertex: ViewVertex, camera: PerspectiveCamera) {\n\n  for (const vertex of viewVertex.vertices) {\n\n    // Get the farthest boundary halfedge from the camera and connected to the\n    // vertex\n    let farthestHalfedge = null;\n    let otherVertex = null;\n    let distance = -Infinity;\n\n    for (const halfedge of listBoundaryHalfedgesInOut(vertex)) {\n\n      let other;\n      if (halfedge.vertex === vertex) {\n        // Halfedge is starting from vertex\n        other = halfedge.next.vertex;\n      } else {\n        // Halfedge is arriving to vertex\n        other = halfedge.vertex;\n      }\n      const d = other.position.distanceTo(camera.position);\n      if (d > distance) {\n        distance = d;\n        farthestHalfedge = halfedge;\n        otherVertex = other;\n      }\n    }\n\n    if (farthestHalfedge && otherVertex) {\n\n      // Iterate on each connected faces to vertex and check if it overlaps\n      // the farthest halfedge\n      const c = camera.position;\n      const p = vertex.position;\n      const e = otherVertex.position;\n\n      const boundaryFace = farthestHalfedge.twin.face;\n\n      if (boundaryFace) {\n        for (const halfedge of vertex.loopCW()) {\n          if (halfedge.face !== boundaryFace) {\n\n            const q = halfedge.next.vertex.position;\n            const r = halfedge.next.vertex.position;\n\n            if (!sameSide(p,q,r,c,e) && sameSide(c,p,q,e,r) && sameSide(c,p,r,e,q)) {\n              return true;\n            }\n          }\n        }\n      } else {\n        console.error(\"Boundary halfedge twin has no connected face\");\n      }\n    }\n  }\n  return false;\n}\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 23/02/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\n// Modified by repalash <palash@shaders.app>. Minor changes, added parameters and error handling.\n\nimport {ColorRepresentation, PerspectiveCamera} from 'three';\nimport {SizeLike} from '../../utils';\nimport {SVGMesh} from '../SVGMesh';\nimport {Chain, ChainVisibility} from './Chain';\nimport {ViewEdge} from './ViewEdge';\nimport {computePolygons, PolygonsInfo} from './operations/computePolygons';\nimport {setupEdges} from './operations/setupEdges'; // import { ViewPoint } from './ViewPoint_';\nimport {Polygon} from './Polygon';\nimport {AssignPolygonInfo, assignPolygons} from './operations/assignPolygons';\nimport {ChainVisibilityInfo, computeChainsVisibility} from './operations/computeChainsVisibility'; // import { setupPoints } from './operations/setupPoints_';\nimport {computeMeshIntersections, MeshIntersectionInfo} from './operations/computeMeshIntersections';\nimport {ViewVertex} from './ViewVertex';\nimport {createChains} from './operations/createChains'\nimport {find2dSingularities} from './operations/find2dSingularities'\nimport {find3dSingularities} from './operations/find3dSingularities'\n\ndeclare module '../../../three-mesh-halfedge' {\n\n  export interface Face {\n    viewEdges: ViewEdge[];\n  }\n\n  export interface Vertex {\n    viewVertex: ViewVertex;\n  }\n\n}\n\nexport interface ViewmapOptions {\n  updateMeshes?: boolean;\n  ignoreVisibility?: boolean;\n  defaultMeshColor?: ColorRepresentation;\n  creaseAngle?: {\n    min: number,\n    max: number,\n  }\n}\n\nexport class ViewmapBuildInfo {\n  totalTime = Infinity;\n\n  /** Record or times in ms */\n  times = {\n    updateGeometries: Infinity,\n    updateBVH: Infinity,\n    updateHES: Infinity,\n    setupEdges: Infinity,\n    find3dSingularities: Infinity,\n    find2dSingularities: Infinity,\n    computeChains: Infinity,\n    visibility: Infinity,\n    computePolygons: Infinity,\n    assignPolygons: Infinity,\n    worldTransform: Infinity,\n    meshIntersections: Infinity,\n    setupPoints: Infinity,\n    setupFaceMap: Infinity,\n  };\n\n  intersections = new MeshIntersectionInfo();\n  visibility =  {\n    nbTests: Infinity,\n    nbRaycasts: Infinity,\n  };\n  polygons = {\n    smallAreaIgnored: Infinity,\n    insidePointErrors: Infinity,\n    assigned: Infinity,\n    nonAssigned: Infinity,\n  };\n}\n\nexport interface ProgressInfo {\n  currentStepName: string;\n  currentStep: number;\n  totalSteps: number;\n}\n\ninterface ViewmapAction {\n  name: string;\n  process: () => Promise<void>;\n}\n\nexport class Viewmap {\n\n  readonly meshes = new Array<SVGMesh>();\n\n  readonly viewEdges = new Array<ViewEdge>();\n  // readonly viewPointMap = new Map<string, ViewPoint>();\n  readonly viewVertexMap = new Map<string, ViewVertex>();\n\n  readonly chains = new Array<Chain>();\n  readonly polygons = new Array<Polygon>();\n  readonly camera = new PerspectiveCamera();\n  readonly renderSize = {w: 500, h: 500};\n  readonly options: Required<ViewmapOptions> = {\n    updateMeshes: true,\n    ignoreVisibility: false,\n    defaultMeshColor: 0x555555,\n    creaseAngle: {\n      min: 80,\n      max: 100,\n    }\n  }\n\n  constructor(options?: ViewmapOptions) {\n    Object.assign(this.options, options);\n  }\n\n  clear() {\n    this.meshes.clear();\n    this.viewEdges.clear();\n    // this.viewPointMap.clear();\n    this.viewVertexMap.clear();\n    this.chains.clear();\n    this.polygons.clear();\n  }\n\n  build(\n      meshes: SVGMesh[],\n      camera: PerspectiveCamera,\n      renderSize: SizeLike,\n      info = new ViewmapBuildInfo(),\n      progressCallback?: (progress: ProgressInfo) => void) {\n\n    this.clear();\n\n    this.meshes.push(...meshes);\n\n    const ud = camera.userData\n    camera.userData = {};\n    this.camera.copy(camera);\n    camera.userData = ud;\n    this.camera.getWorldPosition(camera.position);\n\n    this.renderSize.w = renderSize.w;\n    this.renderSize.h = renderSize.h;\n\n\n    const actions = this.setupActions(info);\n\n    info.totalTime = Date.now();\n\n    return this.buildAsync(0, actions, info, progressCallback);\n\n  }\n\n  skipActions = false\n\n  private buildAsync(\n      idx: number,\n      actions: ViewmapAction[],\n      info: ViewmapBuildInfo,\n      progressCallback?: (progress: ProgressInfo) => void) {\n\n    info.totalTime = Date.now();\n\n    return new Promise<void>((resolve) => {\n\n      if (idx < actions.length) {\n        progressCallback && progressCallback({\n          totalSteps: actions.length,\n          currentStep: idx+1,\n          currentStepName: actions[idx].name\n        });\n        const res = () => {\n          resolve(this.buildAsync(idx+1, actions, info, progressCallback));\n        }\n        if(this.skipActions) res()\n        else {\n          // console.info(`Viewmap step ${idx+1}/${actions.length} : ${actions[idx].name}`);\n          actions[idx].process().catch(_ => {\n            // todo handle errors properly depending on the step.\n            // console.error(`Viewmap step ${idx+1}/${actions.length} : ${actions[idx].name} failed`, e);\n          }).then(res)\n        }\n      } else {\n        info.totalTime = Date.now() - info.totalTime;\n        resolve();\n      }\n    });\n\n  }\n\n\n  private setupActions(info = new ViewmapBuildInfo()): Array<ViewmapAction> {\n\n    const actions = new Array<ViewmapAction>();\n\n    if (this.options.updateMeshes) {\n\n      /**\n       * Update Morphed Geometries\n       */\n      actions.push({\n        name: \"Update Morphed Geometries\",\n        process: async() => {\n          const startTime = Date.now();\n          for (const mesh of this.meshes) {\n            mesh.updateMorphGeometry();\n          }\n          info.times.updateGeometries = Date.now() - startTime;\n        }\n      });\n\n      /**\n       * Update BVH structs\n       */\n      actions.push({\n        name: \"Update BVH Structures\",\n        process: async() => {\n          const startTime = Date.now();\n          for (const mesh of this.meshes) {\n            mesh.updateBVH(false);\n          }\n          info.times.updateBVH = Date.now() - startTime;\n        }\n      });\n\n      /**\n       * Update Halfedge structs\n       */\n      actions.push({\n        name: \"Update Halfedge Structures\",\n        process: async() => {\n          const startTime = Date.now();\n          for (const mesh of this.meshes) {\n            mesh.updateHES(false);\n          }\n          info.times.updateHES = Date.now() - startTime;\n        }\n      });\n\n      /**\n       * Update Halfedge structures to world positions\n       */\n      actions.push({\n        name: \"Transform local 3d points into world\",\n        process: async() => {\n          const startTime = Date.now();\n          for (const mesh of this.meshes) {\n            for (const vertex of mesh.hes.vertices) {\n              vertex.position.applyMatrix4(mesh.matrixWorld);\n            }\n          }\n          info.times.worldTransform = Date.now() - startTime;\n        }\n      });\n    }\n\n    /**\n     * Setup edges\n     */\n    actions.push({\n      name: \"Setup viewmap edges\",\n      process: async() => {\n        const startTime = Date.now();\n        setupEdges(this, this.options);\n        info.times.setupEdges = Date.now() - startTime;\n      }\n    });\n\n    /**\n     * Compute Meshes Intersections\n     */\n    actions.push({\n      name: \"Compute meshes intersections\",\n      process: async() => {\n        const startTime = Date.now();\n        computeMeshIntersections(this, info.intersections);\n        info.times.meshIntersections = Date.now() - startTime;\n      }\n    });\n\n    /**\n     * Find singularities in the 3D space\n     */\n    actions.push({\n      name: \"Find singularities in the 3d space\",\n      process: async() => {\n        const startTime = Date.now();\n        // this.singularityPoints =\n        find3dSingularities(this);\n        info.times.find3dSingularities = Date.now() - startTime;\n      }\n    });\n\n    /**\n     * Find singularity points in the 2d space (image place intersections)\n     * This step creates new points and segments on-the-fly\n     */\n    actions.push({\n      name: \"Find singularities in the 2d space\",\n      process: async() => {\n        const startTime = Date.now();\n        find2dSingularities(this);\n        info.times.find2dSingularities = Date.now() - startTime;\n      }\n    });\n\n    /**\n     * Compute chains from the set of segments: link segments depending\n     * of their connexity and nature\n     */\n    actions.push({\n      name: \"Create chains\",\n      process: async() => {\n        const startTime = Date.now();\n        createChains(this);\n        info.times.computeChains = Date.now() - startTime;\n      }\n    });\n\n    /**\n     * Compute contours visibility using geometry's topology or raycasting if\n     * need.\n     * If ignore visibility is set, set all contours to be visible\n     */\n    actions.push({\n      name: \"Compute chains visibility\",\n      process: async() => {\n        if (!this.options.ignoreVisibility)  {\n          const startTime = Date.now();\n          const visInfo = new ChainVisibilityInfo();\n          computeChainsVisibility(this, visInfo);\n          info.visibility.nbRaycasts = visInfo.nbRaycasts;\n          info.visibility.nbTests = visInfo.nbTests;\n          info.times.visibility = Date.now() - startTime;\n        } else {\n          this.chains.map(chain => chain.visibility = ChainVisibility.Visible);\n        }\n      }\n    });\n\n    /**\n     * Compute the polygons formed by the visible subset of contours\n     */\n    actions.push({\n      name: \"Compute polygons\",\n      process: async() => {\n        const startTime = Date.now();\n        const polyInfo = new PolygonsInfo();\n        await computePolygons(this, polyInfo);\n        info.polygons.smallAreaIgnored = polyInfo.smallAreaIgnored;\n        info.polygons.insidePointErrors = polyInfo.insidePointErrors;\n        info.times.computePolygons = Date.now() - startTime;\n      }\n    });\n\n    /**\n     * Assign polygons to their corresponding object with raycasting\n     */\n    actions.push({\n      name: \"Assign Polygons\",\n      process: async() => {\n        const startTime = Date.now();\n        const assignInfo = new AssignPolygonInfo();\n        assignPolygons(this, this.options, assignInfo);\n        info.polygons.assigned = assignInfo.assigned;\n        info.polygons.nonAssigned = assignInfo.nonAssigned;\n        info.times.assignPolygons = Date.now() - startTime;\n      }\n    });\n\n    return actions;\n  }\n\n  visibleChains() {\n    return this.chains.filter(c => c.visibility === ChainVisibility.Visible);\n  }\n\n  hiddenChains() {\n    return this.chains.filter(c => c.visibility === ChainVisibility.Hidden);\n  }\n}\n","/*!\n* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG.\n* @version 3.2.0\n* https://svgjs.dev/\n*\n* @copyright Wout Fierens <wout@mick-wout.com>\n* @license MIT\n*\n* BUILT: Mon Jun 12 2023 10:34:51 GMT+0200 (Central European Summer Time)\n*/;\nconst methods$1 = {};\nconst names = [];\nfunction registerMethods(name, m) {\n  if (Array.isArray(name)) {\n    for (const _name of name) {\n      registerMethods(_name, m);\n    }\n\n    return;\n  }\n\n  if (typeof name === 'object') {\n    for (const _name in name) {\n      registerMethods(_name, name[_name]);\n    }\n\n    return;\n  }\n\n  addMethodNames(Object.getOwnPropertyNames(m));\n  methods$1[name] = Object.assign(methods$1[name] || {}, m);\n}\nfunction getMethodsFor(name) {\n  return methods$1[name] || {};\n}\nfunction getMethodNames() {\n  return [...new Set(names)];\n}\nfunction addMethodNames(_names) {\n  names.push(..._names);\n}\n\n// Map function\nfunction map(array, block) {\n  let i;\n  const il = array.length;\n  const result = [];\n\n  for (i = 0; i < il; i++) {\n    result.push(block(array[i]));\n  }\n\n  return result;\n} // Filter function\n\nfunction filter(array, block) {\n  let i;\n  const il = array.length;\n  const result = [];\n\n  for (i = 0; i < il; i++) {\n    if (block(array[i])) {\n      result.push(array[i]);\n    }\n  }\n\n  return result;\n} // Degrees to radians\n\nfunction radians(d) {\n  return d % 360 * Math.PI / 180;\n} // Radians to degrees\n\nfunction degrees(r) {\n  return r * 180 / Math.PI % 360;\n} // Convert dash-separated-string to camelCase\n\nfunction camelCase(s) {\n  return s.toLowerCase().replace(/-(.)/g, function (m, g) {\n    return g.toUpperCase();\n  });\n} // Convert camel cased string to dash separated\n\nfunction unCamelCase(s) {\n  return s.replace(/([A-Z])/g, function (m, g) {\n    return '-' + g.toLowerCase();\n  });\n} // Capitalize first letter of a string\n\nfunction capitalize(s) {\n  return s.charAt(0).toUpperCase() + s.slice(1);\n} // Calculate proportional width and height values when necessary\n\nfunction proportionalSize(element, width, height, box) {\n  if (width == null || height == null) {\n    box = box || element.bbox();\n\n    if (width == null) {\n      width = box.width / box.height * height;\n    } else if (height == null) {\n      height = box.height / box.width * width;\n    }\n  }\n\n  return {\n    width: width,\n    height: height\n  };\n}\n/**\n * This function adds support for string origins.\n * It searches for an origin in o.origin o.ox and o.originX.\n * This way, origin: {x: 'center', y: 50} can be passed as well as ox: 'center', oy: 50\n**/\n\nfunction getOrigin(o, element) {\n  const origin = o.origin; // First check if origin is in ox or originX\n\n  let ox = o.ox != null ? o.ox : o.originX != null ? o.originX : 'center';\n  let oy = o.oy != null ? o.oy : o.originY != null ? o.originY : 'center'; // Then check if origin was used and overwrite in that case\n\n  if (origin != null) {\n    [ox, oy] = Array.isArray(origin) ? origin : typeof origin === 'object' ? [origin.x, origin.y] : [origin, origin];\n  } // Make sure to only call bbox when actually needed\n\n\n  const condX = typeof ox === 'string';\n  const condY = typeof oy === 'string';\n\n  if (condX || condY) {\n    const {\n      height,\n      width,\n      x,\n      y\n    } = element.bbox(); // And only overwrite if string was passed for this specific axis\n\n    if (condX) {\n      ox = ox.includes('left') ? x : ox.includes('right') ? x + width : x + width / 2;\n    }\n\n    if (condY) {\n      oy = oy.includes('top') ? y : oy.includes('bottom') ? y + height : y + height / 2;\n    }\n  } // Return the origin as it is if it wasn't a string\n\n\n  return [ox, oy];\n}\n\nvar utils = {\n  __proto__: null,\n  map: map,\n  filter: filter,\n  radians: radians,\n  degrees: degrees,\n  camelCase: camelCase,\n  unCamelCase: unCamelCase,\n  capitalize: capitalize,\n  proportionalSize: proportionalSize,\n  getOrigin: getOrigin\n};\n\n// Default namespaces\nconst svg = 'http://www.w3.org/2000/svg';\nconst html = 'http://www.w3.org/1999/xhtml';\nconst xmlns = 'http://www.w3.org/2000/xmlns/';\nconst xlink = 'http://www.w3.org/1999/xlink';\nconst svgjs = 'http://svgjs.dev/svgjs';\n\nvar namespaces = {\n  __proto__: null,\n  svg: svg,\n  html: html,\n  xmlns: xmlns,\n  xlink: xlink,\n  svgjs: svgjs\n};\n\nconst globals = {\n  window: typeof window === 'undefined' ? null : window,\n  document: typeof document === 'undefined' ? null : document\n};\nfunction registerWindow(win = null, doc = null) {\n  globals.window = win;\n  globals.document = doc;\n}\nconst save = {};\nfunction saveWindow() {\n  save.window = globals.window;\n  save.document = globals.document;\n}\nfunction restoreWindow() {\n  globals.window = save.window;\n  globals.document = save.document;\n}\nfunction withWindow(win, fn) {\n  saveWindow();\n  registerWindow(win, win.document);\n  fn(win, win.document);\n  restoreWindow();\n}\nfunction getWindow() {\n  return globals.window;\n}\n\nclass Base {// constructor (node/*, {extensions = []} */) {\n  //   // this.tags = []\n  //   //\n  //   // for (let extension of extensions) {\n  //   //   extension.setup.call(this, node)\n  //   //   this.tags.push(extension.name)\n  //   // }\n  // }\n}\n\nconst elements = {};\nconst root = '___SYMBOL___ROOT___'; // Method for element creation\n\nfunction create(name, ns = svg) {\n  // create element\n  return globals.document.createElementNS(ns, name);\n}\nfunction makeInstance(element, isHTML = false) {\n  if (element instanceof Base) return element;\n\n  if (typeof element === 'object') {\n    return adopter(element);\n  }\n\n  if (element == null) {\n    return new elements[root]();\n  }\n\n  if (typeof element === 'string' && element.charAt(0) !== '<') {\n    return adopter(globals.document.querySelector(element));\n  } // Make sure, that HTML elements are created with the correct namespace\n\n\n  const wrapper = isHTML ? globals.document.createElement('div') : create('svg');\n  wrapper.innerHTML = element; // We can use firstChild here because we know,\n  // that the first char is < and thus an element\n\n  element = adopter(wrapper.firstChild); // make sure, that element doesn't have its wrapper attached\n\n  wrapper.removeChild(wrapper.firstChild);\n  return element;\n}\nfunction nodeOrNew(name, node) {\n  return node && node.ownerDocument && node instanceof node.ownerDocument.defaultView.Node ? node : create(name);\n} // Adopt existing svg elements\n\nfunction adopt(node) {\n  // check for presence of node\n  if (!node) return null; // make sure a node isn't already adopted\n\n  if (node.instance instanceof Base) return node.instance;\n\n  if (node.nodeName === '#document-fragment') {\n    return new elements.Fragment(node);\n  } // initialize variables\n\n\n  let className = capitalize(node.nodeName || 'Dom'); // Make sure that gradients are adopted correctly\n\n  if (className === 'LinearGradient' || className === 'RadialGradient') {\n    className = 'Gradient'; // Fallback to Dom if element is not known\n  } else if (!elements[className]) {\n    className = 'Dom';\n  }\n\n  return new elements[className](node);\n}\nlet adopter = adopt;\nfunction mockAdopt(mock = adopt) {\n  adopter = mock;\n}\nfunction register(element, name = element.name, asRoot = false) {\n  elements[name] = element;\n  if (asRoot) elements[root] = element;\n  addMethodNames(Object.getOwnPropertyNames(element.prototype));\n  return element;\n}\nfunction getClass(name) {\n  return elements[name];\n} // Element id sequence\n\nlet did = 1000; // Get next named element id\n\nfunction eid(name) {\n  return 'Svgjs' + capitalize(name) + did++;\n} // Deep new id assignment\n\nfunction assignNewId(node) {\n  // do the same for SVG child nodes as well\n  for (let i = node.children.length - 1; i >= 0; i--) {\n    assignNewId(node.children[i]);\n  }\n\n  if (node.id) {\n    node.id = eid(node.nodeName);\n    return node;\n  }\n\n  return node;\n} // Method for extending objects\n\nfunction extend(modules, methods) {\n  let key, i;\n  modules = Array.isArray(modules) ? modules : [modules];\n\n  for (i = modules.length - 1; i >= 0; i--) {\n    for (key in methods) {\n      modules[i].prototype[key] = methods[key];\n    }\n  }\n}\nfunction wrapWithAttrCheck(fn) {\n  return function (...args) {\n    const o = args[args.length - 1];\n\n    if (o && o.constructor === Object && !(o instanceof Array)) {\n      return fn.apply(this, args.slice(0, -1)).attr(o);\n    } else {\n      return fn.apply(this, args);\n    }\n  };\n}\n\nfunction siblings() {\n  return this.parent().children();\n} // Get the current position siblings\n\nfunction position() {\n  return this.parent().index(this);\n} // Get the next element (will return null if there is none)\n\nfunction next() {\n  return this.siblings()[this.position() + 1];\n} // Get the next element (will return null if there is none)\n\nfunction prev() {\n  return this.siblings()[this.position() - 1];\n} // Send given element one step forward\n\nfunction forward() {\n  const i = this.position();\n  const p = this.parent(); // move node one step forward\n\n  p.add(this.remove(), i + 1);\n  return this;\n} // Send given element one step backward\n\nfunction backward() {\n  const i = this.position();\n  const p = this.parent();\n  p.add(this.remove(), i ? i - 1 : 0);\n  return this;\n} // Send given element all the way to the front\n\nfunction front() {\n  const p = this.parent(); // Move node forward\n\n  p.add(this.remove());\n  return this;\n} // Send given element all the way to the back\n\nfunction back() {\n  const p = this.parent(); // Move node back\n\n  p.add(this.remove(), 0);\n  return this;\n} // Inserts a given element before the targeted element\n\nfunction before(element) {\n  element = makeInstance(element);\n  element.remove();\n  const i = this.position();\n  this.parent().add(element, i);\n  return this;\n} // Inserts a given element after the targeted element\n\nfunction after(element) {\n  element = makeInstance(element);\n  element.remove();\n  const i = this.position();\n  this.parent().add(element, i + 1);\n  return this;\n}\nfunction insertBefore(element) {\n  element = makeInstance(element);\n  element.before(this);\n  return this;\n}\nfunction insertAfter(element) {\n  element = makeInstance(element);\n  element.after(this);\n  return this;\n}\nregisterMethods('Dom', {\n  siblings,\n  position,\n  next,\n  prev,\n  forward,\n  backward,\n  front,\n  back,\n  before,\n  after,\n  insertBefore,\n  insertAfter\n});\n\n// Parse unit value\nconst numberAndUnit = /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i; // Parse hex value\n\nconst hex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i; // Parse rgb value\n\nconst rgb = /rgb\\((\\d+),(\\d+),(\\d+)\\)/; // Parse reference id\n\nconst reference = /(#[a-z_][a-z0-9\\-_]*)/i; // splits a transformation chain\n\nconst transforms = /\\)\\s*,?\\s*/; // Whitespace\n\nconst whitespace = /\\s/g; // Test hex value\n\nconst isHex = /^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i; // Test rgb value\n\nconst isRgb = /^rgb\\(/; // Test for blank string\n\nconst isBlank = /^(\\s+)?$/; // Test for numeric string\n\nconst isNumber = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i; // Test for image url\n\nconst isImage = /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i; // split at whitespace and comma\n\nconst delimiter = /[\\s,]+/; // Test for path letter\n\nconst isPathLetter = /[MLHVCSQTAZ]/i;\n\nvar regex = {\n  __proto__: null,\n  numberAndUnit: numberAndUnit,\n  hex: hex,\n  rgb: rgb,\n  reference: reference,\n  transforms: transforms,\n  whitespace: whitespace,\n  isHex: isHex,\n  isRgb: isRgb,\n  isBlank: isBlank,\n  isNumber: isNumber,\n  isImage: isImage,\n  delimiter: delimiter,\n  isPathLetter: isPathLetter\n};\n\nfunction classes() {\n  const attr = this.attr('class');\n  return attr == null ? [] : attr.trim().split(delimiter);\n} // Return true if class exists on the node, false otherwise\n\nfunction hasClass(name) {\n  return this.classes().indexOf(name) !== -1;\n} // Add class to the node\n\nfunction addClass(name) {\n  if (!this.hasClass(name)) {\n    const array = this.classes();\n    array.push(name);\n    this.attr('class', array.join(' '));\n  }\n\n  return this;\n} // Remove class from the node\n\nfunction removeClass(name) {\n  if (this.hasClass(name)) {\n    this.attr('class', this.classes().filter(function (c) {\n      return c !== name;\n    }).join(' '));\n  }\n\n  return this;\n} // Toggle the presence of a class on the node\n\nfunction toggleClass(name) {\n  return this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n}\nregisterMethods('Dom', {\n  classes,\n  hasClass,\n  addClass,\n  removeClass,\n  toggleClass\n});\n\nfunction css(style, val) {\n  const ret = {};\n\n  if (arguments.length === 0) {\n    // get full style as object\n    this.node.style.cssText.split(/\\s*;\\s*/).filter(function (el) {\n      return !!el.length;\n    }).forEach(function (el) {\n      const t = el.split(/\\s*:\\s*/);\n      ret[t[0]] = t[1];\n    });\n    return ret;\n  }\n\n  if (arguments.length < 2) {\n    // get style properties as array\n    if (Array.isArray(style)) {\n      for (const name of style) {\n        const cased = camelCase(name);\n        ret[name] = this.node.style[cased];\n      }\n\n      return ret;\n    } // get style for property\n\n\n    if (typeof style === 'string') {\n      return this.node.style[camelCase(style)];\n    } // set styles in object\n\n\n    if (typeof style === 'object') {\n      for (const name in style) {\n        // set empty string if null/undefined/'' was given\n        this.node.style[camelCase(name)] = style[name] == null || isBlank.test(style[name]) ? '' : style[name];\n      }\n    }\n  } // set style for property\n\n\n  if (arguments.length === 2) {\n    this.node.style[camelCase(style)] = val == null || isBlank.test(val) ? '' : val;\n  }\n\n  return this;\n} // Show element\n\nfunction show() {\n  return this.css('display', '');\n} // Hide element\n\nfunction hide() {\n  return this.css('display', 'none');\n} // Is element visible?\n\nfunction visible() {\n  return this.css('display') !== 'none';\n}\nregisterMethods('Dom', {\n  css,\n  show,\n  hide,\n  visible\n});\n\nfunction data(a, v, r) {\n  if (a == null) {\n    // get an object of attributes\n    return this.data(map(filter(this.node.attributes, el => el.nodeName.indexOf('data-') === 0), el => el.nodeName.slice(5)));\n  } else if (a instanceof Array) {\n    const data = {};\n\n    for (const key of a) {\n      data[key] = this.data(key);\n    }\n\n    return data;\n  } else if (typeof a === 'object') {\n    for (v in a) {\n      this.data(v, a[v]);\n    }\n  } else if (arguments.length < 2) {\n    try {\n      return JSON.parse(this.attr('data-' + a));\n    } catch (e) {\n      return this.attr('data-' + a);\n    }\n  } else {\n    this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v));\n  }\n\n  return this;\n}\nregisterMethods('Dom', {\n  data\n});\n\nfunction remember(k, v) {\n  // remember every item in an object individually\n  if (typeof arguments[0] === 'object') {\n    for (const key in k) {\n      this.remember(key, k[key]);\n    }\n  } else if (arguments.length === 1) {\n    // retrieve memory\n    return this.memory()[k];\n  } else {\n    // store memory\n    this.memory()[k] = v;\n  }\n\n  return this;\n} // Erase a given memory\n\nfunction forget() {\n  if (arguments.length === 0) {\n    this._memory = {};\n  } else {\n    for (let i = arguments.length - 1; i >= 0; i--) {\n      delete this.memory()[arguments[i]];\n    }\n  }\n\n  return this;\n} // This triggers creation of a new hidden class which is not performant\n// However, this function is not rarely used so it will not happen frequently\n// Return local memory object\n\nfunction memory() {\n  return this._memory = this._memory || {};\n}\nregisterMethods('Dom', {\n  remember,\n  forget,\n  memory\n});\n\nfunction sixDigitHex(hex) {\n  return hex.length === 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex;\n}\n\nfunction componentHex(component) {\n  const integer = Math.round(component);\n  const bounded = Math.max(0, Math.min(255, integer));\n  const hex = bounded.toString(16);\n  return hex.length === 1 ? '0' + hex : hex;\n}\n\nfunction is(object, space) {\n  for (let i = space.length; i--;) {\n    if (object[space[i]] == null) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction getParameters(a, b) {\n  const params = is(a, 'rgb') ? {\n    _a: a.r,\n    _b: a.g,\n    _c: a.b,\n    _d: 0,\n    space: 'rgb'\n  } : is(a, 'xyz') ? {\n    _a: a.x,\n    _b: a.y,\n    _c: a.z,\n    _d: 0,\n    space: 'xyz'\n  } : is(a, 'hsl') ? {\n    _a: a.h,\n    _b: a.s,\n    _c: a.l,\n    _d: 0,\n    space: 'hsl'\n  } : is(a, 'lab') ? {\n    _a: a.l,\n    _b: a.a,\n    _c: a.b,\n    _d: 0,\n    space: 'lab'\n  } : is(a, 'lch') ? {\n    _a: a.l,\n    _b: a.c,\n    _c: a.h,\n    _d: 0,\n    space: 'lch'\n  } : is(a, 'cmyk') ? {\n    _a: a.c,\n    _b: a.m,\n    _c: a.y,\n    _d: a.k,\n    space: 'cmyk'\n  } : {\n    _a: 0,\n    _b: 0,\n    _c: 0,\n    space: 'rgb'\n  };\n  params.space = b || params.space;\n  return params;\n}\n\nfunction cieSpace(space) {\n  if (space === 'lab' || space === 'xyz' || space === 'lch') {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction hueToRgb(p, q, t) {\n  if (t < 0) t += 1;\n  if (t > 1) t -= 1;\n  if (t < 1 / 6) return p + (q - p) * 6 * t;\n  if (t < 1 / 2) return q;\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n  return p;\n}\n\nclass Color {\n  constructor(...inputs) {\n    this.init(...inputs);\n  } // Test if given value is a color\n\n\n  static isColor(color) {\n    return color && (color instanceof Color || this.isRgb(color) || this.test(color));\n  } // Test if given value is an rgb object\n\n\n  static isRgb(color) {\n    return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number';\n  }\n  /*\n  Generating random colors\n  */\n\n\n  static random(mode = 'vibrant', t, u) {\n    // Get the math modules\n    const {\n      random,\n      round,\n      sin,\n      PI: pi\n    } = Math; // Run the correct generator\n\n    if (mode === 'vibrant') {\n      const l = (81 - 57) * random() + 57;\n      const c = (83 - 45) * random() + 45;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'sine') {\n      t = t == null ? random() : t;\n      const r = round(80 * sin(2 * pi * t / 0.5 + 0.01) + 150);\n      const g = round(50 * sin(2 * pi * t / 0.5 + 4.6) + 200);\n      const b = round(100 * sin(2 * pi * t / 0.5 + 2.3) + 150);\n      const color = new Color(r, g, b);\n      return color;\n    } else if (mode === 'pastel') {\n      const l = (94 - 86) * random() + 86;\n      const c = (26 - 9) * random() + 9;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'dark') {\n      const l = 10 + 10 * random();\n      const c = (125 - 75) * random() + 86;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'rgb') {\n      const r = 255 * random();\n      const g = 255 * random();\n      const b = 255 * random();\n      const color = new Color(r, g, b);\n      return color;\n    } else if (mode === 'lab') {\n      const l = 100 * random();\n      const a = 256 * random() - 128;\n      const b = 256 * random() - 128;\n      const color = new Color(l, a, b, 'lab');\n      return color;\n    } else if (mode === 'grey') {\n      const grey = 255 * random();\n      const color = new Color(grey, grey, grey);\n      return color;\n    } else {\n      throw new Error('Unsupported random color mode');\n    }\n  } // Test if given value is a color string\n\n\n  static test(color) {\n    return typeof color === 'string' && (isHex.test(color) || isRgb.test(color));\n  }\n\n  cmyk() {\n    // Get the rgb values for the current color\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const [r, g, b] = [_a, _b, _c].map(v => v / 255); // Get the cmyk values in an unbounded format\n\n    const k = Math.min(1 - r, 1 - g, 1 - b);\n\n    if (k === 1) {\n      // Catch the black case\n      return new Color(0, 0, 0, 1, 'cmyk');\n    }\n\n    const c = (1 - r - k) / (1 - k);\n    const m = (1 - g - k) / (1 - k);\n    const y = (1 - b - k) / (1 - k); // Construct the new color\n\n    const color = new Color(c, m, y, k, 'cmyk');\n    return color;\n  }\n\n  hsl() {\n    // Get the rgb values\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const [r, g, b] = [_a, _b, _c].map(v => v / 255); // Find the maximum and minimum values to get the lightness\n\n    const max = Math.max(r, g, b);\n    const min = Math.min(r, g, b);\n    const l = (max + min) / 2; // If the r, g, v values are identical then we are grey\n\n    const isGrey = max === min; // Calculate the hue and saturation\n\n    const delta = max - min;\n    const s = isGrey ? 0 : l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n    const h = isGrey ? 0 : max === r ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 : max === g ? ((b - r) / delta + 2) / 6 : max === b ? ((r - g) / delta + 4) / 6 : 0; // Construct and return the new color\n\n    const color = new Color(360 * h, 100 * s, 100 * l, 'hsl');\n    return color;\n  }\n\n  init(a = 0, b = 0, c = 0, d = 0, space = 'rgb') {\n    // This catches the case when a falsy value is passed like ''\n    a = !a ? 0 : a; // Reset all values in case the init function is rerun with new color space\n\n    if (this.space) {\n      for (const component in this.space) {\n        delete this[this.space[component]];\n      }\n    }\n\n    if (typeof a === 'number') {\n      // Allow for the case that we don't need d...\n      space = typeof d === 'string' ? d : space;\n      d = typeof d === 'string' ? 0 : d; // Assign the values straight to the color\n\n      Object.assign(this, {\n        _a: a,\n        _b: b,\n        _c: c,\n        _d: d,\n        space\n      }); // If the user gave us an array, make the color from it\n    } else if (a instanceof Array) {\n      this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb';\n      Object.assign(this, {\n        _a: a[0],\n        _b: a[1],\n        _c: a[2],\n        _d: a[3] || 0\n      });\n    } else if (a instanceof Object) {\n      // Set the object up and assign its values directly\n      const values = getParameters(a, b);\n      Object.assign(this, values);\n    } else if (typeof a === 'string') {\n      if (isRgb.test(a)) {\n        const noWhitespace = a.replace(whitespace, '');\n        const [_a, _b, _c] = rgb.exec(noWhitespace).slice(1, 4).map(v => parseInt(v));\n        Object.assign(this, {\n          _a,\n          _b,\n          _c,\n          _d: 0,\n          space: 'rgb'\n        });\n      } else if (isHex.test(a)) {\n        const hexParse = v => parseInt(v, 16);\n\n        const [, _a, _b, _c] = hex.exec(sixDigitHex(a)).map(hexParse);\n        Object.assign(this, {\n          _a,\n          _b,\n          _c,\n          _d: 0,\n          space: 'rgb'\n        });\n      } else throw Error('Unsupported string format, can\\'t construct Color');\n    } // Now add the components as a convenience\n\n\n    const {\n      _a,\n      _b,\n      _c,\n      _d\n    } = this;\n    const components = this.space === 'rgb' ? {\n      r: _a,\n      g: _b,\n      b: _c\n    } : this.space === 'xyz' ? {\n      x: _a,\n      y: _b,\n      z: _c\n    } : this.space === 'hsl' ? {\n      h: _a,\n      s: _b,\n      l: _c\n    } : this.space === 'lab' ? {\n      l: _a,\n      a: _b,\n      b: _c\n    } : this.space === 'lch' ? {\n      l: _a,\n      c: _b,\n      h: _c\n    } : this.space === 'cmyk' ? {\n      c: _a,\n      m: _b,\n      y: _c,\n      k: _d\n    } : {};\n    Object.assign(this, components);\n  }\n\n  lab() {\n    // Get the xyz color\n    const {\n      x,\n      y,\n      z\n    } = this.xyz(); // Get the lab components\n\n    const l = 116 * y - 16;\n    const a = 500 * (x - y);\n    const b = 200 * (y - z); // Construct and return a new color\n\n    const color = new Color(l, a, b, 'lab');\n    return color;\n  }\n\n  lch() {\n    // Get the lab color directly\n    const {\n      l,\n      a,\n      b\n    } = this.lab(); // Get the chromaticity and the hue using polar coordinates\n\n    const c = Math.sqrt(a ** 2 + b ** 2);\n    let h = 180 * Math.atan2(b, a) / Math.PI;\n\n    if (h < 0) {\n      h *= -1;\n      h = 360 - h;\n    } // Make a new color and return it\n\n\n    const color = new Color(l, c, h, 'lch');\n    return color;\n  }\n  /*\n  Conversion Methods\n  */\n\n\n  rgb() {\n    if (this.space === 'rgb') {\n      return this;\n    } else if (cieSpace(this.space)) {\n      // Convert to the xyz color space\n      let {\n        x,\n        y,\n        z\n      } = this;\n\n      if (this.space === 'lab' || this.space === 'lch') {\n        // Get the values in the lab space\n        let {\n          l,\n          a,\n          b\n        } = this;\n\n        if (this.space === 'lch') {\n          const {\n            c,\n            h\n          } = this;\n          const dToR = Math.PI / 180;\n          a = c * Math.cos(dToR * h);\n          b = c * Math.sin(dToR * h);\n        } // Undo the nonlinear function\n\n\n        const yL = (l + 16) / 116;\n        const xL = a / 500 + yL;\n        const zL = yL - b / 200; // Get the xyz values\n\n        const ct = 16 / 116;\n        const mx = 0.008856;\n        const nm = 7.787;\n        x = 0.95047 * (xL ** 3 > mx ? xL ** 3 : (xL - ct) / nm);\n        y = 1.00000 * (yL ** 3 > mx ? yL ** 3 : (yL - ct) / nm);\n        z = 1.08883 * (zL ** 3 > mx ? zL ** 3 : (zL - ct) / nm);\n      } // Convert xyz to unbounded rgb values\n\n\n      const rU = x * 3.2406 + y * -1.5372 + z * -0.4986;\n      const gU = x * -0.9689 + y * 1.8758 + z * 0.0415;\n      const bU = x * 0.0557 + y * -0.2040 + z * 1.0570; // Convert the values to true rgb values\n\n      const pow = Math.pow;\n      const bd = 0.0031308;\n      const r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - 0.055 : 12.92 * rU;\n      const g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - 0.055 : 12.92 * gU;\n      const b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - 0.055 : 12.92 * bU; // Make and return the color\n\n      const color = new Color(255 * r, 255 * g, 255 * b);\n      return color;\n    } else if (this.space === 'hsl') {\n      // https://bgrins.github.io/TinyColor/docs/tinycolor.html\n      // Get the current hsl values\n      let {\n        h,\n        s,\n        l\n      } = this;\n      h /= 360;\n      s /= 100;\n      l /= 100; // If we are grey, then just make the color directly\n\n      if (s === 0) {\n        l *= 255;\n        const color = new Color(l, l, l);\n        return color;\n      } // TODO I have no idea what this does :D If you figure it out, tell me!\n\n\n      const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      const p = 2 * l - q; // Get the rgb values\n\n      const r = 255 * hueToRgb(p, q, h + 1 / 3);\n      const g = 255 * hueToRgb(p, q, h);\n      const b = 255 * hueToRgb(p, q, h - 1 / 3); // Make a new color\n\n      const color = new Color(r, g, b);\n      return color;\n    } else if (this.space === 'cmyk') {\n      // https://gist.github.com/felipesabino/5066336\n      // Get the normalised cmyk values\n      const {\n        c,\n        m,\n        y,\n        k\n      } = this; // Get the rgb values\n\n      const r = 255 * (1 - Math.min(1, c * (1 - k) + k));\n      const g = 255 * (1 - Math.min(1, m * (1 - k) + k));\n      const b = 255 * (1 - Math.min(1, y * (1 - k) + k)); // Form the color and return it\n\n      const color = new Color(r, g, b);\n      return color;\n    } else {\n      return this;\n    }\n  }\n\n  toArray() {\n    const {\n      _a,\n      _b,\n      _c,\n      _d,\n      space\n    } = this;\n    return [_a, _b, _c, _d, space];\n  }\n\n  toHex() {\n    const [r, g, b] = this._clamped().map(componentHex);\n\n    return `#${r}${g}${b}`;\n  }\n\n  toRgb() {\n    const [rV, gV, bV] = this._clamped();\n\n    const string = `rgb(${rV},${gV},${bV})`;\n    return string;\n  }\n\n  toString() {\n    return this.toHex();\n  }\n\n  xyz() {\n    // Normalise the red, green and blue values\n    const {\n      _a: r255,\n      _b: g255,\n      _c: b255\n    } = this.rgb();\n    const [r, g, b] = [r255, g255, b255].map(v => v / 255); // Convert to the lab rgb space\n\n    const rL = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n    const gL = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n    const bL = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92; // Convert to the xyz color space without bounding the values\n\n    const xU = (rL * 0.4124 + gL * 0.3576 + bL * 0.1805) / 0.95047;\n    const yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.00000;\n    const zU = (rL * 0.0193 + gL * 0.1192 + bL * 0.9505) / 1.08883; // Get the proper xyz values by applying the bounding\n\n    const x = xU > 0.008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116;\n    const y = yU > 0.008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116;\n    const z = zU > 0.008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116; // Make and return the color\n\n    const color = new Color(x, y, z, 'xyz');\n    return color;\n  }\n  /*\n  Input and Output methods\n  */\n\n\n  _clamped() {\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const {\n      max,\n      min,\n      round\n    } = Math;\n\n    const format = v => max(0, min(round(v), 255));\n\n    return [_a, _b, _c].map(format);\n  }\n  /*\n  Constructing colors\n  */\n\n\n}\n\nclass Point {\n  // Initialize\n  constructor(...args) {\n    this.init(...args);\n  } // Clone point\n\n\n  clone() {\n    return new Point(this);\n  }\n\n  init(x, y) {\n    const base = {\n      x: 0,\n      y: 0\n    }; // ensure source as object\n\n    const source = Array.isArray(x) ? {\n      x: x[0],\n      y: x[1]\n    } : typeof x === 'object' ? {\n      x: x.x,\n      y: x.y\n    } : {\n      x: x,\n      y: y\n    }; // merge source\n\n    this.x = source.x == null ? base.x : source.x;\n    this.y = source.y == null ? base.y : source.y;\n    return this;\n  }\n\n  toArray() {\n    return [this.x, this.y];\n  }\n\n  transform(m) {\n    return this.clone().transformO(m);\n  } // Transform point with matrix\n\n\n  transformO(m) {\n    if (!Matrix.isMatrixLike(m)) {\n      m = new Matrix(m);\n    }\n\n    const {\n      x,\n      y\n    } = this; // Perform the matrix multiplication\n\n    this.x = m.a * x + m.c * y + m.e;\n    this.y = m.b * x + m.d * y + m.f;\n    return this;\n  }\n\n}\nfunction point(x, y) {\n  return new Point(x, y).transformO(this.screenCTM().inverseO());\n}\n\nfunction closeEnough(a, b, threshold) {\n  return Math.abs(b - a) < (threshold || 1e-6);\n}\n\nclass Matrix {\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  static formatTransforms(o) {\n    // Get all of the parameters required to form the matrix\n    const flipBoth = o.flip === 'both' || o.flip === true;\n    const flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1;\n    const flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1;\n    const skewX = o.skew && o.skew.length ? o.skew[0] : isFinite(o.skew) ? o.skew : isFinite(o.skewX) ? o.skewX : 0;\n    const skewY = o.skew && o.skew.length ? o.skew[1] : isFinite(o.skew) ? o.skew : isFinite(o.skewY) ? o.skewY : 0;\n    const scaleX = o.scale && o.scale.length ? o.scale[0] * flipX : isFinite(o.scale) ? o.scale * flipX : isFinite(o.scaleX) ? o.scaleX * flipX : flipX;\n    const scaleY = o.scale && o.scale.length ? o.scale[1] * flipY : isFinite(o.scale) ? o.scale * flipY : isFinite(o.scaleY) ? o.scaleY * flipY : flipY;\n    const shear = o.shear || 0;\n    const theta = o.rotate || o.theta || 0;\n    const origin = new Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY);\n    const ox = origin.x;\n    const oy = origin.y; // We need Point to be invalid if nothing was passed because we cannot default to 0 here. That is why NaN\n\n    const position = new Point(o.position || o.px || o.positionX || NaN, o.py || o.positionY || NaN);\n    const px = position.x;\n    const py = position.y;\n    const translate = new Point(o.translate || o.tx || o.translateX, o.ty || o.translateY);\n    const tx = translate.x;\n    const ty = translate.y;\n    const relative = new Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY);\n    const rx = relative.x;\n    const ry = relative.y; // Populate all of the values\n\n    return {\n      scaleX,\n      scaleY,\n      skewX,\n      skewY,\n      shear,\n      theta,\n      rx,\n      ry,\n      tx,\n      ty,\n      ox,\n      oy,\n      px,\n      py\n    };\n  }\n\n  static fromArray(a) {\n    return {\n      a: a[0],\n      b: a[1],\n      c: a[2],\n      d: a[3],\n      e: a[4],\n      f: a[5]\n    };\n  }\n\n  static isMatrixLike(o) {\n    return o.a != null || o.b != null || o.c != null || o.d != null || o.e != null || o.f != null;\n  } // left matrix, right matrix, target matrix which is overwritten\n\n\n  static matrixMultiply(l, r, o) {\n    // Work out the product directly\n    const a = l.a * r.a + l.c * r.b;\n    const b = l.b * r.a + l.d * r.b;\n    const c = l.a * r.c + l.c * r.d;\n    const d = l.b * r.c + l.d * r.d;\n    const e = l.e + l.a * r.e + l.c * r.f;\n    const f = l.f + l.b * r.e + l.d * r.f; // make sure to use local variables because l/r and o could be the same\n\n    o.a = a;\n    o.b = b;\n    o.c = c;\n    o.d = d;\n    o.e = e;\n    o.f = f;\n    return o;\n  }\n\n  around(cx, cy, matrix) {\n    return this.clone().aroundO(cx, cy, matrix);\n  } // Transform around a center point\n\n\n  aroundO(cx, cy, matrix) {\n    const dx = cx || 0;\n    const dy = cy || 0;\n    return this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy);\n  } // Clones this matrix\n\n\n  clone() {\n    return new Matrix(this);\n  } // Decomposes this matrix into its affine parameters\n\n\n  decompose(cx = 0, cy = 0) {\n    // Get the parameters from the matrix\n    const a = this.a;\n    const b = this.b;\n    const c = this.c;\n    const d = this.d;\n    const e = this.e;\n    const f = this.f; // Figure out if the winding direction is clockwise or counterclockwise\n\n    const determinant = a * d - b * c;\n    const ccw = determinant > 0 ? 1 : -1; // Since we only shear in x, we can use the x basis to get the x scale\n    // and the rotation of the resulting matrix\n\n    const sx = ccw * Math.sqrt(a * a + b * b);\n    const thetaRad = Math.atan2(ccw * b, ccw * a);\n    const theta = 180 / Math.PI * thetaRad;\n    const ct = Math.cos(thetaRad);\n    const st = Math.sin(thetaRad); // We can then solve the y basis vector simultaneously to get the other\n    // two affine parameters directly from these parameters\n\n    const lam = (a * c + b * d) / determinant;\n    const sy = c * sx / (lam * a - b) || d * sx / (lam * b + a); // Use the translations\n\n    const tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy);\n    const ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy); // Construct the decomposition and return it\n\n    return {\n      // Return the affine parameters\n      scaleX: sx,\n      scaleY: sy,\n      shear: lam,\n      rotate: theta,\n      translateX: tx,\n      translateY: ty,\n      originX: cx,\n      originY: cy,\n      // Return the matrix parameters\n      a: this.a,\n      b: this.b,\n      c: this.c,\n      d: this.d,\n      e: this.e,\n      f: this.f\n    };\n  } // Check if two matrices are equal\n\n\n  equals(other) {\n    if (other === this) return true;\n    const comp = new Matrix(other);\n    return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) && closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) && closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f);\n  } // Flip matrix on x or y, at a given offset\n\n\n  flip(axis, around) {\n    return this.clone().flipO(axis, around);\n  }\n\n  flipO(axis, around) {\n    return axis === 'x' ? this.scaleO(-1, 1, around, 0) : axis === 'y' ? this.scaleO(1, -1, 0, around) : this.scaleO(-1, -1, axis, around || axis); // Define an x, y flip point\n  } // Initialize\n\n\n  init(source) {\n    const base = Matrix.fromArray([1, 0, 0, 1, 0, 0]); // ensure source as object\n\n    source = source instanceof Element ? source.matrixify() : typeof source === 'string' ? Matrix.fromArray(source.split(delimiter).map(parseFloat)) : Array.isArray(source) ? Matrix.fromArray(source) : typeof source === 'object' && Matrix.isMatrixLike(source) ? source : typeof source === 'object' ? new Matrix().transform(source) : arguments.length === 6 ? Matrix.fromArray([].slice.call(arguments)) : base; // Merge the source matrix with the base matrix\n\n    this.a = source.a != null ? source.a : base.a;\n    this.b = source.b != null ? source.b : base.b;\n    this.c = source.c != null ? source.c : base.c;\n    this.d = source.d != null ? source.d : base.d;\n    this.e = source.e != null ? source.e : base.e;\n    this.f = source.f != null ? source.f : base.f;\n    return this;\n  }\n\n  inverse() {\n    return this.clone().inverseO();\n  } // Inverses matrix\n\n\n  inverseO() {\n    // Get the current parameters out of the matrix\n    const a = this.a;\n    const b = this.b;\n    const c = this.c;\n    const d = this.d;\n    const e = this.e;\n    const f = this.f; // Invert the 2x2 matrix in the top left\n\n    const det = a * d - b * c;\n    if (!det) throw new Error('Cannot invert ' + this); // Calculate the top 2x2 matrix\n\n    const na = d / det;\n    const nb = -b / det;\n    const nc = -c / det;\n    const nd = a / det; // Apply the inverted matrix to the top right\n\n    const ne = -(na * e + nc * f);\n    const nf = -(nb * e + nd * f); // Construct the inverted matrix\n\n    this.a = na;\n    this.b = nb;\n    this.c = nc;\n    this.d = nd;\n    this.e = ne;\n    this.f = nf;\n    return this;\n  }\n\n  lmultiply(matrix) {\n    return this.clone().lmultiplyO(matrix);\n  }\n\n  lmultiplyO(matrix) {\n    const r = this;\n    const l = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n    return Matrix.matrixMultiply(l, r, this);\n  } // Left multiplies by the given matrix\n\n\n  multiply(matrix) {\n    return this.clone().multiplyO(matrix);\n  }\n\n  multiplyO(matrix) {\n    // Get the matrices\n    const l = this;\n    const r = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n    return Matrix.matrixMultiply(l, r, this);\n  } // Rotate matrix\n\n\n  rotate(r, cx, cy) {\n    return this.clone().rotateO(r, cx, cy);\n  }\n\n  rotateO(r, cx = 0, cy = 0) {\n    // Convert degrees to radians\n    r = radians(r);\n    const cos = Math.cos(r);\n    const sin = Math.sin(r);\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a * cos - b * sin;\n    this.b = b * cos + a * sin;\n    this.c = c * cos - d * sin;\n    this.d = d * cos + c * sin;\n    this.e = e * cos - f * sin + cy * sin - cx * cos + cx;\n    this.f = f * cos + e * sin - cx * sin - cy * cos + cy;\n    return this;\n  } // Scale matrix\n\n\n  scale(x, y, cx, cy) {\n    return this.clone().scaleO(...arguments);\n  }\n\n  scaleO(x, y = x, cx = 0, cy = 0) {\n    // Support uniform scaling\n    if (arguments.length === 3) {\n      cy = cx;\n      cx = y;\n      y = x;\n    }\n\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a * x;\n    this.b = b * y;\n    this.c = c * x;\n    this.d = d * y;\n    this.e = e * x - cx * x + cx;\n    this.f = f * y - cy * y + cy;\n    return this;\n  } // Shear matrix\n\n\n  shear(a, cx, cy) {\n    return this.clone().shearO(a, cx, cy);\n  }\n\n  shearO(lx, cx = 0, cy = 0) {\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a + b * lx;\n    this.c = c + d * lx;\n    this.e = e + f * lx - cy * lx;\n    return this;\n  } // Skew Matrix\n\n\n  skew(x, y, cx, cy) {\n    return this.clone().skewO(...arguments);\n  }\n\n  skewO(x, y = x, cx = 0, cy = 0) {\n    // support uniformal skew\n    if (arguments.length === 3) {\n      cy = cx;\n      cx = y;\n      y = x;\n    } // Convert degrees to radians\n\n\n    x = radians(x);\n    y = radians(y);\n    const lx = Math.tan(x);\n    const ly = Math.tan(y);\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a + b * lx;\n    this.b = b + a * ly;\n    this.c = c + d * lx;\n    this.d = d + c * ly;\n    this.e = e + f * lx - cy * lx;\n    this.f = f + e * ly - cx * ly;\n    return this;\n  } // SkewX\n\n\n  skewX(x, cx, cy) {\n    return this.skew(x, 0, cx, cy);\n  } // SkewY\n\n\n  skewY(y, cx, cy) {\n    return this.skew(0, y, cx, cy);\n  }\n\n  toArray() {\n    return [this.a, this.b, this.c, this.d, this.e, this.f];\n  } // Convert matrix to string\n\n\n  toString() {\n    return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')';\n  } // Transform a matrix into another matrix by manipulating the space\n\n\n  transform(o) {\n    // Check if o is a matrix and then left multiply it directly\n    if (Matrix.isMatrixLike(o)) {\n      const matrix = new Matrix(o);\n      return matrix.multiplyO(this);\n    } // Get the proposed transformations and the current transformations\n\n\n    const t = Matrix.formatTransforms(o);\n    const current = this;\n    const {\n      x: ox,\n      y: oy\n    } = new Point(t.ox, t.oy).transform(current); // Construct the resulting matrix\n\n    const transformer = new Matrix().translateO(t.rx, t.ry).lmultiplyO(current).translateO(-ox, -oy).scaleO(t.scaleX, t.scaleY).skewO(t.skewX, t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox, oy); // If we want the origin at a particular place, we force it there\n\n    if (isFinite(t.px) || isFinite(t.py)) {\n      const origin = new Point(ox, oy).transform(transformer); // TODO: Replace t.px with isFinite(t.px)\n      // Doesn't work because t.px is also 0 if it wasn't passed\n\n      const dx = isFinite(t.px) ? t.px - origin.x : 0;\n      const dy = isFinite(t.py) ? t.py - origin.y : 0;\n      transformer.translateO(dx, dy);\n    } // Translate now after positioning\n\n\n    transformer.translateO(t.tx, t.ty);\n    return transformer;\n  } // Translate matrix\n\n\n  translate(x, y) {\n    return this.clone().translateO(x, y);\n  }\n\n  translateO(x, y) {\n    this.e += x || 0;\n    this.f += y || 0;\n    return this;\n  }\n\n  valueOf() {\n    return {\n      a: this.a,\n      b: this.b,\n      c: this.c,\n      d: this.d,\n      e: this.e,\n      f: this.f\n    };\n  }\n\n}\nfunction ctm() {\n  return new Matrix(this.node.getCTM());\n}\nfunction screenCTM() {\n  /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\n     This is needed because FF does not return the transformation matrix\n     for the inner coordinate system when getScreenCTM() is called on nested svgs.\n     However all other Browsers do that */\n  if (typeof this.isRoot === 'function' && !this.isRoot()) {\n    const rect = this.rect(1, 1);\n    const m = rect.node.getScreenCTM();\n    rect.remove();\n    return new Matrix(m);\n  }\n\n  return new Matrix(this.node.getScreenCTM());\n}\nregister(Matrix, 'Matrix');\n\nfunction parser() {\n  // Reuse cached element if possible\n  if (!parser.nodes) {\n    const svg = makeInstance().size(2, 0);\n    svg.node.style.cssText = ['opacity: 0', 'position: absolute', 'left: -100%', 'top: -100%', 'overflow: hidden'].join(';');\n    svg.attr('focusable', 'false');\n    svg.attr('aria-hidden', 'true');\n    const path = svg.path().node;\n    parser.nodes = {\n      svg,\n      path\n    };\n  }\n\n  if (!parser.nodes.svg.node.parentNode) {\n    const b = globals.document.body || globals.document.documentElement;\n    parser.nodes.svg.addTo(b);\n  }\n\n  return parser.nodes;\n}\n\nfunction isNulledBox(box) {\n  return !box.width && !box.height && !box.x && !box.y;\n}\nfunction domContains(node) {\n  return node === globals.document || (globals.document.documentElement.contains || function (node) {\n    // This is IE - it does not support contains() for top-level SVGs\n    while (node.parentNode) {\n      node = node.parentNode;\n    }\n\n    return node === globals.document;\n  }).call(globals.document.documentElement, node);\n}\nclass Box {\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  addOffset() {\n    // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\n    this.x += globals.window.pageXOffset;\n    this.y += globals.window.pageYOffset;\n    return new Box(this);\n  }\n\n  init(source) {\n    const base = [0, 0, 0, 0];\n    source = typeof source === 'string' ? source.split(delimiter).map(parseFloat) : Array.isArray(source) ? source : typeof source === 'object' ? [source.left != null ? source.left : source.x, source.top != null ? source.top : source.y, source.width, source.height] : arguments.length === 4 ? [].slice.call(arguments) : base;\n    this.x = source[0] || 0;\n    this.y = source[1] || 0;\n    this.width = this.w = source[2] || 0;\n    this.height = this.h = source[3] || 0; // Add more bounding box properties\n\n    this.x2 = this.x + this.w;\n    this.y2 = this.y + this.h;\n    this.cx = this.x + this.w / 2;\n    this.cy = this.y + this.h / 2;\n    return this;\n  }\n\n  isNulled() {\n    return isNulledBox(this);\n  } // Merge rect box with another, return a new instance\n\n\n  merge(box) {\n    const x = Math.min(this.x, box.x);\n    const y = Math.min(this.y, box.y);\n    const width = Math.max(this.x + this.width, box.x + box.width) - x;\n    const height = Math.max(this.y + this.height, box.y + box.height) - y;\n    return new Box(x, y, width, height);\n  }\n\n  toArray() {\n    return [this.x, this.y, this.width, this.height];\n  }\n\n  toString() {\n    return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height;\n  }\n\n  transform(m) {\n    if (!(m instanceof Matrix)) {\n      m = new Matrix(m);\n    }\n\n    let xMin = Infinity;\n    let xMax = -Infinity;\n    let yMin = Infinity;\n    let yMax = -Infinity;\n    const pts = [new Point(this.x, this.y), new Point(this.x2, this.y), new Point(this.x, this.y2), new Point(this.x2, this.y2)];\n    pts.forEach(function (p) {\n      p = p.transform(m);\n      xMin = Math.min(xMin, p.x);\n      xMax = Math.max(xMax, p.x);\n      yMin = Math.min(yMin, p.y);\n      yMax = Math.max(yMax, p.y);\n    });\n    return new Box(xMin, yMin, xMax - xMin, yMax - yMin);\n  }\n\n}\n\nfunction getBox(el, getBBoxFn, retry) {\n  let box;\n\n  try {\n    // Try to get the box with the provided function\n    box = getBBoxFn(el.node); // If the box is worthless and not even in the dom, retry\n    // by throwing an error here...\n\n    if (isNulledBox(box) && !domContains(el.node)) {\n      throw new Error('Element not in the dom');\n    }\n  } catch (e) {\n    // ... and calling the retry handler here\n    box = retry(el);\n  }\n\n  return box;\n}\n\nfunction bbox() {\n  // Function to get bbox is getBBox()\n  const getBBox = node => node.getBBox(); // Take all measures so that a stupid browser renders the element\n  // so we can get the bbox from it when we try again\n\n\n  const retry = el => {\n    try {\n      const clone = el.clone().addTo(parser().svg).show();\n      const box = clone.node.getBBox();\n      clone.remove();\n      return box;\n    } catch (e) {\n      // We give up...\n      throw new Error(`Getting bbox of element \"${el.node.nodeName}\" is not possible: ${e.toString()}`);\n    }\n  };\n\n  const box = getBox(this, getBBox, retry);\n  const bbox = new Box(box);\n  return bbox;\n}\nfunction rbox(el) {\n  const getRBox = node => node.getBoundingClientRect();\n\n  const retry = el => {\n    // There is no point in trying tricks here because if we insert the element into the dom ourselves\n    // it obviously will be at the wrong position\n    throw new Error(`Getting rbox of element \"${el.node.nodeName}\" is not possible`);\n  };\n\n  const box = getBox(this, getRBox, retry);\n  const rbox = new Box(box); // If an element was passed, we want the bbox in the coordinate system of that element\n\n  if (el) {\n    return rbox.transform(el.screenCTM().inverseO());\n  } // Else we want it in absolute screen coordinates\n  // Therefore we need to add the scrollOffset\n\n\n  return rbox.addOffset();\n} // Checks whether the given point is inside the bounding box\n\nfunction inside(x, y) {\n  const box = this.bbox();\n  return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height;\n}\nregisterMethods({\n  viewbox: {\n    viewbox(x, y, width, height) {\n      // act as getter\n      if (x == null) return new Box(this.attr('viewBox')); // act as setter\n\n      return this.attr('viewBox', new Box(x, y, width, height));\n    },\n\n    zoom(level, point) {\n      // Its best to rely on the attributes here and here is why:\n      // clientXYZ: Doesn't work on non-root svgs because they dont have a CSSBox (silly!)\n      // getBoundingClientRect: Doesn't work because Chrome just ignores width and height of nested svgs completely\n      //                        that means, their clientRect is always as big as the content.\n      //                        Furthermore this size is incorrect if the element is further transformed by its parents\n      // computedStyle: Only returns meaningful values if css was used with px. We dont go this route here!\n      // getBBox: returns the bounding box of its content - that doesn't help!\n      let {\n        width,\n        height\n      } = this.attr(['width', 'height']); // Width and height is a string when a number with a unit is present which we can't use\n      // So we try clientXYZ\n\n      if (!width && !height || typeof width === 'string' || typeof height === 'string') {\n        width = this.node.clientWidth;\n        height = this.node.clientHeight;\n      } // Giving up...\n\n\n      if (!width || !height) {\n        throw new Error('Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element');\n      }\n\n      const v = this.viewbox();\n      const zoomX = width / v.width;\n      const zoomY = height / v.height;\n      const zoom = Math.min(zoomX, zoomY);\n\n      if (level == null) {\n        return zoom;\n      }\n\n      let zoomAmount = zoom / level; // Set the zoomAmount to the highest value which is safe to process and recover from\n      // The * 100 is a bit of wiggle room for the matrix transformation\n\n      if (zoomAmount === Infinity) zoomAmount = Number.MAX_SAFE_INTEGER / 100;\n      point = point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y);\n      const box = new Box(v).transform(new Matrix({\n        scale: zoomAmount,\n        origin: point\n      }));\n      return this.viewbox(box);\n    }\n\n  }\n});\nregister(Box, 'Box');\n\nclass List extends Array {\n  constructor(arr = [], ...args) {\n    super(arr, ...args);\n    if (typeof arr === 'number') return this;\n    this.length = 0;\n    this.push(...arr);\n  }\n\n}\nextend([List], {\n  each(fnOrMethodName, ...args) {\n    if (typeof fnOrMethodName === 'function') {\n      return this.map((el, i, arr) => {\n        return fnOrMethodName.call(el, el, i, arr);\n      });\n    } else {\n      return this.map(el => {\n        return el[fnOrMethodName](...args);\n      });\n    }\n  },\n\n  toArray() {\n    return Array.prototype.concat.apply([], this);\n  }\n\n});\nconst reserved = ['toArray', 'constructor', 'each'];\n\nList.extend = function (methods) {\n  methods = methods.reduce((obj, name) => {\n    // Don't overwrite own methods\n    if (reserved.includes(name)) return obj; // Don't add private methods\n\n    if (name[0] === '_') return obj; // Relay every call to each()\n\n    obj[name] = function (...attrs) {\n      return this.each(name, ...attrs);\n    };\n\n    return obj;\n  }, {});\n  extend([List], methods);\n};\n\nfunction baseFind(query, parent) {\n  return new List(map((parent || globals.document).querySelectorAll(query), function (node) {\n    return adopt(node);\n  }));\n} // Scoped find method\n\nfunction find(query) {\n  return baseFind(query, this.node);\n}\nfunction findOne(query) {\n  return adopt(this.node.querySelector(query));\n}\n\nlet listenerId = 0;\nconst windowEvents = {};\nfunction getEvents(instance) {\n  let n = instance.getEventHolder(); // We dont want to save events in global space\n\n  if (n === globals.window) n = windowEvents;\n  if (!n.events) n.events = {};\n  return n.events;\n}\nfunction getEventTarget(instance) {\n  return instance.getEventTarget();\n}\nfunction clearEvents(instance) {\n  let n = instance.getEventHolder();\n  if (n === globals.window) n = windowEvents;\n  if (n.events) n.events = {};\n} // Add event binder in the SVG namespace\n\nfunction on(node, events, listener, binding, options) {\n  const l = listener.bind(binding || node);\n  const instance = makeInstance(node);\n  const bag = getEvents(instance);\n  const n = getEventTarget(instance); // events can be an array of events or a string of events\n\n  events = Array.isArray(events) ? events : events.split(delimiter); // add id to listener\n\n  if (!listener._svgjsListenerId) {\n    listener._svgjsListenerId = ++listenerId;\n  }\n\n  events.forEach(function (event) {\n    const ev = event.split('.')[0];\n    const ns = event.split('.')[1] || '*'; // ensure valid object\n\n    bag[ev] = bag[ev] || {};\n    bag[ev][ns] = bag[ev][ns] || {}; // reference listener\n\n    bag[ev][ns][listener._svgjsListenerId] = l; // add listener\n\n    n.addEventListener(ev, l, options || false);\n  });\n} // Add event unbinder in the SVG namespace\n\nfunction off(node, events, listener, options) {\n  const instance = makeInstance(node);\n  const bag = getEvents(instance);\n  const n = getEventTarget(instance); // listener can be a function or a number\n\n  if (typeof listener === 'function') {\n    listener = listener._svgjsListenerId;\n    if (!listener) return;\n  } // events can be an array of events or a string or undefined\n\n\n  events = Array.isArray(events) ? events : (events || '').split(delimiter);\n  events.forEach(function (event) {\n    const ev = event && event.split('.')[0];\n    const ns = event && event.split('.')[1];\n    let namespace, l;\n\n    if (listener) {\n      // remove listener reference\n      if (bag[ev] && bag[ev][ns || '*']) {\n        // removeListener\n        n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false);\n        delete bag[ev][ns || '*'][listener];\n      }\n    } else if (ev && ns) {\n      // remove all listeners for a namespaced event\n      if (bag[ev] && bag[ev][ns]) {\n        for (l in bag[ev][ns]) {\n          off(n, [ev, ns].join('.'), l);\n        }\n\n        delete bag[ev][ns];\n      }\n    } else if (ns) {\n      // remove all listeners for a specific namespace\n      for (event in bag) {\n        for (namespace in bag[event]) {\n          if (ns === namespace) {\n            off(n, [event, ns].join('.'));\n          }\n        }\n      }\n    } else if (ev) {\n      // remove all listeners for the event\n      if (bag[ev]) {\n        for (namespace in bag[ev]) {\n          off(n, [ev, namespace].join('.'));\n        }\n\n        delete bag[ev];\n      }\n    } else {\n      // remove all listeners on a given node\n      for (event in bag) {\n        off(n, event);\n      }\n\n      clearEvents(instance);\n    }\n  });\n}\nfunction dispatch(node, event, data, options) {\n  const n = getEventTarget(node); // Dispatch event\n\n  if (event instanceof globals.window.Event) {\n    n.dispatchEvent(event);\n  } else {\n    event = new globals.window.CustomEvent(event, {\n      detail: data,\n      cancelable: true,\n      ...options\n    });\n    n.dispatchEvent(event);\n  }\n\n  return event;\n}\n\nclass EventTarget extends Base {\n  addEventListener() {}\n\n  dispatch(event, data, options) {\n    return dispatch(this, event, data, options);\n  }\n\n  dispatchEvent(event) {\n    const bag = this.getEventHolder().events;\n    if (!bag) return true;\n    const events = bag[event.type];\n\n    for (const i in events) {\n      for (const j in events[i]) {\n        events[i][j](event);\n      }\n    }\n\n    return !event.defaultPrevented;\n  } // Fire given event\n\n\n  fire(event, data, options) {\n    this.dispatch(event, data, options);\n    return this;\n  }\n\n  getEventHolder() {\n    return this;\n  }\n\n  getEventTarget() {\n    return this;\n  } // Unbind event from listener\n\n\n  off(event, listener, options) {\n    off(this, event, listener, options);\n    return this;\n  } // Bind given event to listener\n\n\n  on(event, listener, binding, options) {\n    on(this, event, listener, binding, options);\n    return this;\n  }\n\n  removeEventListener() {}\n\n}\nregister(EventTarget, 'EventTarget');\n\nfunction noop() {} // Default animation values\n\nconst timeline = {\n  duration: 400,\n  ease: '>',\n  delay: 0\n}; // Default attribute values\n\nconst attrs = {\n  // fill and stroke\n  'fill-opacity': 1,\n  'stroke-opacity': 1,\n  'stroke-width': 0,\n  'stroke-linejoin': 'miter',\n  'stroke-linecap': 'butt',\n  fill: '#000000',\n  stroke: '#000000',\n  opacity: 1,\n  // position\n  x: 0,\n  y: 0,\n  cx: 0,\n  cy: 0,\n  // size\n  width: 0,\n  height: 0,\n  // radius\n  r: 0,\n  rx: 0,\n  ry: 0,\n  // gradient\n  offset: 0,\n  'stop-opacity': 1,\n  'stop-color': '#000000',\n  // text\n  'text-anchor': 'start'\n};\n\nvar defaults = {\n  __proto__: null,\n  noop: noop,\n  timeline: timeline,\n  attrs: attrs\n};\n\nclass SVGArray extends Array {\n  constructor(...args) {\n    super(...args);\n    this.init(...args);\n  }\n\n  clone() {\n    return new this.constructor(this);\n  }\n\n  init(arr) {\n    // This catches the case, that native map tries to create an array with new Array(1)\n    if (typeof arr === 'number') return this;\n    this.length = 0;\n    this.push(...this.parse(arr));\n    return this;\n  } // Parse whitespace separated string\n\n\n  parse(array = []) {\n    // If already is an array, no need to parse it\n    if (array instanceof Array) return array;\n    return array.trim().split(delimiter).map(parseFloat);\n  }\n\n  toArray() {\n    return Array.prototype.concat.apply([], this);\n  }\n\n  toSet() {\n    return new Set(this);\n  }\n\n  toString() {\n    return this.join(' ');\n  } // Flattens the array if needed\n\n\n  valueOf() {\n    const ret = [];\n    ret.push(...this);\n    return ret;\n  }\n\n}\n\nclass SVGNumber {\n  // Initialize\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  convert(unit) {\n    return new SVGNumber(this.value, unit);\n  } // Divide number\n\n\n  divide(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this / number, this.unit || number.unit);\n  }\n\n  init(value, unit) {\n    unit = Array.isArray(value) ? value[1] : unit;\n    value = Array.isArray(value) ? value[0] : value; // initialize defaults\n\n    this.value = 0;\n    this.unit = unit || ''; // parse value\n\n    if (typeof value === 'number') {\n      // ensure a valid numeric value\n      this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value;\n    } else if (typeof value === 'string') {\n      unit = value.match(numberAndUnit);\n\n      if (unit) {\n        // make value numeric\n        this.value = parseFloat(unit[1]); // normalize\n\n        if (unit[5] === '%') {\n          this.value /= 100;\n        } else if (unit[5] === 's') {\n          this.value *= 1000;\n        } // store unit\n\n\n        this.unit = unit[5];\n      }\n    } else {\n      if (value instanceof SVGNumber) {\n        this.value = value.valueOf();\n        this.unit = value.unit;\n      }\n    }\n\n    return this;\n  } // Subtract number\n\n\n  minus(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this - number, this.unit || number.unit);\n  } // Add number\n\n\n  plus(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this + number, this.unit || number.unit);\n  } // Multiply number\n\n\n  times(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this * number, this.unit || number.unit);\n  }\n\n  toArray() {\n    return [this.value, this.unit];\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n\n  toString() {\n    return (this.unit === '%' ? ~~(this.value * 1e8) / 1e6 : this.unit === 's' ? this.value / 1e3 : this.value) + this.unit;\n  }\n\n  valueOf() {\n    return this.value;\n  }\n\n}\n\nconst hooks = [];\nfunction registerAttrHook(fn) {\n  hooks.push(fn);\n} // Set svg element attribute\n\nfunction attr(attr, val, ns) {\n  // act as full getter\n  if (attr == null) {\n    // get an object of attributes\n    attr = {};\n    val = this.node.attributes;\n\n    for (const node of val) {\n      attr[node.nodeName] = isNumber.test(node.nodeValue) ? parseFloat(node.nodeValue) : node.nodeValue;\n    }\n\n    return attr;\n  } else if (attr instanceof Array) {\n    // loop through array and get all values\n    return attr.reduce((last, curr) => {\n      last[curr] = this.attr(curr);\n      return last;\n    }, {});\n  } else if (typeof attr === 'object' && attr.constructor === Object) {\n    // apply every attribute individually if an object is passed\n    for (val in attr) this.attr(val, attr[val]);\n  } else if (val === null) {\n    // remove value\n    this.node.removeAttribute(attr);\n  } else if (val == null) {\n    // act as a getter if the first and only argument is not an object\n    val = this.node.getAttribute(attr);\n    return val == null ? attrs[attr] : isNumber.test(val) ? parseFloat(val) : val;\n  } else {\n    // Loop through hooks and execute them to convert value\n    val = hooks.reduce((_val, hook) => {\n      return hook(attr, _val, this);\n    }, val); // ensure correct numeric values (also accepts NaN and Infinity)\n\n    if (typeof val === 'number') {\n      val = new SVGNumber(val);\n    } else if (Color.isColor(val)) {\n      // ensure full hex color\n      val = new Color(val);\n    } else if (val.constructor === Array) {\n      // Check for plain arrays and parse array values\n      val = new SVGArray(val);\n    } // if the passed attribute is leading...\n\n\n    if (attr === 'leading') {\n      // ... call the leading method instead\n      if (this.leading) {\n        this.leading(val);\n      }\n    } else {\n      // set given attribute on node\n      typeof ns === 'string' ? this.node.setAttributeNS(ns, attr, val.toString()) : this.node.setAttribute(attr, val.toString());\n    } // rebuild if required\n\n\n    if (this.rebuild && (attr === 'font-size' || attr === 'x')) {\n      this.rebuild();\n    }\n  }\n\n  return this;\n}\n\nclass Dom extends EventTarget {\n  constructor(node, attrs) {\n    super();\n    this.node = node;\n    this.type = node.nodeName;\n\n    if (attrs && node !== attrs) {\n      this.attr(attrs);\n    }\n  } // Add given element at a position\n\n\n  add(element, i) {\n    element = makeInstance(element); // If non-root svg nodes are added we have to remove their namespaces\n\n    if (element.removeNamespace && this.node instanceof globals.window.SVGElement) {\n      element.removeNamespace();\n    }\n\n    if (i == null) {\n      this.node.appendChild(element.node);\n    } else if (element.node !== this.node.childNodes[i]) {\n      this.node.insertBefore(element.node, this.node.childNodes[i]);\n    }\n\n    return this;\n  } // Add element to given container and return self\n\n\n  addTo(parent, i) {\n    return makeInstance(parent).put(this, i);\n  } // Returns all child elements\n\n\n  children() {\n    return new List(map(this.node.children, function (node) {\n      return adopt(node);\n    }));\n  } // Remove all elements in this container\n\n\n  clear() {\n    // remove children\n    while (this.node.hasChildNodes()) {\n      this.node.removeChild(this.node.lastChild);\n    }\n\n    return this;\n  } // Clone element\n\n\n  clone(deep = true, assignNewIds = true) {\n    // write dom data to the dom so the clone can pickup the data\n    this.writeDataToDom(); // clone element\n\n    let nodeClone = this.node.cloneNode(deep);\n\n    if (assignNewIds) {\n      // assign new id\n      nodeClone = assignNewId(nodeClone);\n    }\n\n    return new this.constructor(nodeClone);\n  } // Iterates over all children and invokes a given block\n\n\n  each(block, deep) {\n    const children = this.children();\n    let i, il;\n\n    for (i = 0, il = children.length; i < il; i++) {\n      block.apply(children[i], [i, children]);\n\n      if (deep) {\n        children[i].each(block, deep);\n      }\n    }\n\n    return this;\n  }\n\n  element(nodeName, attrs) {\n    return this.put(new Dom(create(nodeName), attrs));\n  } // Get first child\n\n\n  first() {\n    return adopt(this.node.firstChild);\n  } // Get a element at the given index\n\n\n  get(i) {\n    return adopt(this.node.childNodes[i]);\n  }\n\n  getEventHolder() {\n    return this.node;\n  }\n\n  getEventTarget() {\n    return this.node;\n  } // Checks if the given element is a child\n\n\n  has(element) {\n    return this.index(element) >= 0;\n  }\n\n  html(htmlOrFn, outerHTML) {\n    return this.xml(htmlOrFn, outerHTML, html);\n  } // Get / set id\n\n\n  id(id) {\n    // generate new id if no id set\n    if (typeof id === 'undefined' && !this.node.id) {\n      this.node.id = eid(this.type);\n    } // don't set directly with this.node.id to make `null` work correctly\n\n\n    return this.attr('id', id);\n  } // Gets index of given element\n\n\n  index(element) {\n    return [].slice.call(this.node.childNodes).indexOf(element.node);\n  } // Get the last child\n\n\n  last() {\n    return adopt(this.node.lastChild);\n  } // matches the element vs a css selector\n\n\n  matches(selector) {\n    const el = this.node;\n    const matcher = el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector || null;\n    return matcher && matcher.call(el, selector);\n  } // Returns the parent element instance\n\n\n  parent(type) {\n    let parent = this; // check for parent\n\n    if (!parent.node.parentNode) return null; // get parent element\n\n    parent = adopt(parent.node.parentNode);\n    if (!type) return parent; // loop through ancestors if type is given\n\n    do {\n      if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent;\n    } while (parent = adopt(parent.node.parentNode));\n\n    return parent;\n  } // Basically does the same as `add()` but returns the added element instead\n\n\n  put(element, i) {\n    element = makeInstance(element);\n    this.add(element, i);\n    return element;\n  } // Add element to given container and return container\n\n\n  putIn(parent, i) {\n    return makeInstance(parent).add(this, i);\n  } // Remove element\n\n\n  remove() {\n    if (this.parent()) {\n      this.parent().removeElement(this);\n    }\n\n    return this;\n  } // Remove a given child\n\n\n  removeElement(element) {\n    this.node.removeChild(element.node);\n    return this;\n  } // Replace this with element\n\n\n  replace(element) {\n    element = makeInstance(element);\n\n    if (this.node.parentNode) {\n      this.node.parentNode.replaceChild(element.node, this.node);\n    }\n\n    return element;\n  }\n\n  round(precision = 2, map = null) {\n    const factor = 10 ** precision;\n    const attrs = this.attr(map);\n\n    for (const i in attrs) {\n      if (typeof attrs[i] === 'number') {\n        attrs[i] = Math.round(attrs[i] * factor) / factor;\n      }\n    }\n\n    this.attr(attrs);\n    return this;\n  } // Import / Export raw svg\n\n\n  svg(svgOrFn, outerSVG) {\n    return this.xml(svgOrFn, outerSVG, svg);\n  } // Return id on string conversion\n\n\n  toString() {\n    return this.id();\n  }\n\n  words(text) {\n    // This is faster than removing all children and adding a new one\n    this.node.textContent = text;\n    return this;\n  }\n\n  wrap(node) {\n    const parent = this.parent();\n\n    if (!parent) {\n      return this.addTo(node);\n    }\n\n    const position = parent.index(this);\n    return parent.put(node, position).put(this);\n  } // write svgjs data to the dom\n\n\n  writeDataToDom() {\n    // dump variables recursively\n    this.each(function () {\n      this.writeDataToDom();\n    });\n    return this;\n  } // Import / Export raw svg\n\n\n  xml(xmlOrFn, outerXML, ns) {\n    if (typeof xmlOrFn === 'boolean') {\n      ns = outerXML;\n      outerXML = xmlOrFn;\n      xmlOrFn = null;\n    } // act as getter if no svg string is given\n\n\n    if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n      // The default for exports is, that the outerNode is included\n      outerXML = outerXML == null ? true : outerXML; // write svgjs data to the dom\n\n      this.writeDataToDom();\n      let current = this; // An export modifier was passed\n\n      if (xmlOrFn != null) {\n        current = adopt(current.node.cloneNode(true)); // If the user wants outerHTML we need to process this node, too\n\n        if (outerXML) {\n          const result = xmlOrFn(current);\n          current = result || current; // The user does not want this node? Well, then he gets nothing\n\n          if (result === false) return '';\n        } // Deep loop through all children and apply modifier\n\n\n        current.each(function () {\n          const result = xmlOrFn(this);\n\n          const _this = result || this; // If modifier returns false, discard node\n\n\n          if (result === false) {\n            this.remove(); // If modifier returns new node, use it\n          } else if (result && this !== _this) {\n            this.replace(_this);\n          }\n        }, true);\n      } // Return outer or inner content\n\n\n      return outerXML ? current.node.outerHTML : current.node.innerHTML;\n    } // Act as setter if we got a string\n    // The default for import is, that the current node is not replaced\n\n\n    outerXML = outerXML == null ? false : outerXML; // Create temporary holder\n\n    const well = create('wrapper', ns);\n    const fragment = globals.document.createDocumentFragment(); // Dump raw svg\n\n    well.innerHTML = xmlOrFn; // Transplant nodes into the fragment\n\n    for (let len = well.children.length; len--;) {\n      fragment.appendChild(well.firstElementChild);\n    }\n\n    const parent = this.parent(); // Add the whole fragment at once\n\n    return outerXML ? this.replace(fragment) && parent : this.add(fragment);\n  }\n\n}\nextend(Dom, {\n  attr,\n  find,\n  findOne\n});\nregister(Dom, 'Dom');\n\nclass Element extends Dom {\n  constructor(node, attrs) {\n    super(node, attrs); // initialize data object\n\n    this.dom = {}; // create circular reference\n\n    this.node.instance = this;\n\n    if (node.hasAttribute('svgjs:data')) {\n      // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n      this.setData(JSON.parse(node.getAttribute('svgjs:data')) || {});\n    }\n  } // Move element by its center\n\n\n  center(x, y) {\n    return this.cx(x).cy(y);\n  } // Move by center over x-axis\n\n\n  cx(x) {\n    return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n  } // Move by center over y-axis\n\n\n  cy(y) {\n    return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n  } // Get defs\n\n\n  defs() {\n    const root = this.root();\n    return root && root.defs();\n  } // Relative move over x and y axes\n\n\n  dmove(x, y) {\n    return this.dx(x).dy(y);\n  } // Relative move over x axis\n\n\n  dx(x = 0) {\n    return this.x(new SVGNumber(x).plus(this.x()));\n  } // Relative move over y axis\n\n\n  dy(y = 0) {\n    return this.y(new SVGNumber(y).plus(this.y()));\n  }\n\n  getEventHolder() {\n    return this;\n  } // Set height of element\n\n\n  height(height) {\n    return this.attr('height', height);\n  } // Move element to given x and y values\n\n\n  move(x, y) {\n    return this.x(x).y(y);\n  } // return array of all ancestors of given type up to the root svg\n\n\n  parents(until = this.root()) {\n    const isSelector = typeof until === 'string';\n\n    if (!isSelector) {\n      until = makeInstance(until);\n    }\n\n    const parents = new List();\n    let parent = this;\n\n    while ((parent = parent.parent()) && parent.node !== globals.document && parent.nodeName !== '#document-fragment') {\n      parents.push(parent);\n\n      if (!isSelector && parent.node === until.node) {\n        break;\n      }\n\n      if (isSelector && parent.matches(until)) {\n        break;\n      }\n\n      if (parent.node === this.root().node) {\n        // We worked our way to the root and didn't match `until`\n        return null;\n      }\n    }\n\n    return parents;\n  } // Get referenced element form attribute value\n\n\n  reference(attr) {\n    attr = this.attr(attr);\n    if (!attr) return null;\n    const m = (attr + '').match(reference);\n    return m ? makeInstance(m[1]) : null;\n  } // Get parent document\n\n\n  root() {\n    const p = this.parent(getClass(root));\n    return p && p.root();\n  } // set given data to the elements data property\n\n\n  setData(o) {\n    this.dom = o;\n    return this;\n  } // Set element size to given width and height\n\n\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height));\n  } // Set width of element\n\n\n  width(width) {\n    return this.attr('width', width);\n  } // write svgjs data to the dom\n\n\n  writeDataToDom() {\n    // remove previously set data\n    this.node.removeAttribute('svgjs:data');\n\n    if (Object.keys(this.dom).length) {\n      this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); // see #428\n    }\n\n    return super.writeDataToDom();\n  } // Move over x-axis\n\n\n  x(x) {\n    return this.attr('x', x);\n  } // Move over y-axis\n\n\n  y(y) {\n    return this.attr('y', y);\n  }\n\n}\nextend(Element, {\n  bbox,\n  rbox,\n  inside,\n  point,\n  ctm,\n  screenCTM\n});\nregister(Element, 'Element');\n\nconst sugar = {\n  stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\n  fill: ['color', 'opacity', 'rule'],\n  prefix: function (t, a) {\n    return a === 'color' ? t : t + '-' + a;\n  }\n} // Add sugar for fill and stroke\n;\n['fill', 'stroke'].forEach(function (m) {\n  const extension = {};\n  let i;\n\n  extension[m] = function (o) {\n    if (typeof o === 'undefined') {\n      return this.attr(m);\n    }\n\n    if (typeof o === 'string' || o instanceof Color || Color.isRgb(o) || o instanceof Element) {\n      this.attr(m, o);\n    } else {\n      // set all attributes from sugar.fill and sugar.stroke list\n      for (i = sugar[m].length - 1; i >= 0; i--) {\n        if (o[sugar[m][i]] != null) {\n          this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n        }\n      }\n    }\n\n    return this;\n  };\n\n  registerMethods(['Element', 'Runner'], extension);\n});\nregisterMethods(['Element', 'Runner'], {\n  // Let the user set the matrix directly\n  matrix: function (mat, b, c, d, e, f) {\n    // Act as a getter\n    if (mat == null) {\n      return new Matrix(this);\n    } // Act as a setter, the user can pass a matrix or a set of numbers\n\n\n    return this.attr('transform', new Matrix(mat, b, c, d, e, f));\n  },\n  // Map rotation to transform\n  rotate: function (angle, cx, cy) {\n    return this.transform({\n      rotate: angle,\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map skew to transform\n  skew: function (x, y, cx, cy) {\n    return arguments.length === 1 || arguments.length === 3 ? this.transform({\n      skew: x,\n      ox: y,\n      oy: cx\n    }, true) : this.transform({\n      skew: [x, y],\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  shear: function (lam, cx, cy) {\n    return this.transform({\n      shear: lam,\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map scale to transform\n  scale: function (x, y, cx, cy) {\n    return arguments.length === 1 || arguments.length === 3 ? this.transform({\n      scale: x,\n      ox: y,\n      oy: cx\n    }, true) : this.transform({\n      scale: [x, y],\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map translate to transform\n  translate: function (x, y) {\n    return this.transform({\n      translate: [x, y]\n    }, true);\n  },\n  // Map relative translations to transform\n  relative: function (x, y) {\n    return this.transform({\n      relative: [x, y]\n    }, true);\n  },\n  // Map flip to transform\n  flip: function (direction = 'both', origin = 'center') {\n    if ('xybothtrue'.indexOf(direction) === -1) {\n      origin = direction;\n      direction = 'both';\n    }\n\n    return this.transform({\n      flip: direction,\n      origin: origin\n    }, true);\n  },\n  // Opacity\n  opacity: function (value) {\n    return this.attr('opacity', value);\n  }\n});\nregisterMethods('radius', {\n  // Add x and y radius\n  radius: function (x, y = x) {\n    const type = (this._element || this).type;\n    return type === 'radialGradient' ? this.attr('r', new SVGNumber(x)) : this.rx(x).ry(y);\n  }\n});\nregisterMethods('Path', {\n  // Get path length\n  length: function () {\n    return this.node.getTotalLength();\n  },\n  // Get point at length\n  pointAt: function (length) {\n    return new Point(this.node.getPointAtLength(length));\n  }\n});\nregisterMethods(['Element', 'Runner'], {\n  // Set font\n  font: function (a, v) {\n    if (typeof a === 'object') {\n      for (v in a) this.font(v, a[v]);\n\n      return this;\n    }\n\n    return a === 'leading' ? this.leading(v) : a === 'anchor' ? this.attr('text-anchor', v) : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style' ? this.attr('font-' + a, v) : this.attr(a, v);\n  }\n}); // Add events to elements\n\nconst methods = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'mouseenter', 'mouseleave', 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].reduce(function (last, event) {\n  // add event to Element\n  const fn = function (f) {\n    if (f === null) {\n      this.off(event);\n    } else {\n      this.on(event, f);\n    }\n\n    return this;\n  };\n\n  last[event] = fn;\n  return last;\n}, {});\nregisterMethods('Element', methods);\n\nfunction untransform() {\n  return this.attr('transform', null);\n} // merge the whole transformation chain into one matrix and returns it\n\nfunction matrixify() {\n  const matrix = (this.attr('transform') || '' // split transformations\n  ).split(transforms).slice(0, -1).map(function (str) {\n    // generate key => value pairs\n    const kv = str.trim().split('(');\n    return [kv[0], kv[1].split(delimiter).map(function (str) {\n      return parseFloat(str);\n    })];\n  }).reverse() // merge every transformation into one matrix\n  .reduce(function (matrix, transform) {\n    if (transform[0] === 'matrix') {\n      return matrix.lmultiply(Matrix.fromArray(transform[1]));\n    }\n\n    return matrix[transform[0]].apply(matrix, transform[1]);\n  }, new Matrix());\n  return matrix;\n} // add an element to another parent without changing the visual representation on the screen\n\nfunction toParent(parent, i) {\n  if (this === parent) return this;\n  const ctm = this.screenCTM();\n  const pCtm = parent.screenCTM().inverse();\n  this.addTo(parent, i).untransform().transform(pCtm.multiply(ctm));\n  return this;\n} // same as above with parent equals root-svg\n\nfunction toRoot(i) {\n  return this.toParent(this.root(), i);\n} // Add transformations\n\nfunction transform(o, relative) {\n  // Act as a getter if no object was passed\n  if (o == null || typeof o === 'string') {\n    const decomposed = new Matrix(this).decompose();\n    return o == null ? decomposed : decomposed[o];\n  }\n\n  if (!Matrix.isMatrixLike(o)) {\n    // Set the origin according to the defined transform\n    o = { ...o,\n      origin: getOrigin(o, this)\n    };\n  } // The user can pass a boolean, an Element or an Matrix or nothing\n\n\n  const cleanRelative = relative === true ? this : relative || false;\n  const result = new Matrix(cleanRelative).transform(o);\n  return this.attr('transform', result);\n}\nregisterMethods('Element', {\n  untransform,\n  matrixify,\n  toParent,\n  toRoot,\n  transform\n});\n\nclass Container extends Element {\n  flatten(parent = this, index) {\n    this.each(function () {\n      if (this instanceof Container) {\n        return this.flatten().ungroup();\n      }\n    });\n    return this;\n  }\n\n  ungroup(parent = this.parent(), index = parent.index(this)) {\n    // when parent != this, we want append all elements to the end\n    index = index === -1 ? parent.children().length : index;\n    this.each(function (i, children) {\n      // reverse each\n      return children[children.length - i - 1].toParent(parent, index);\n    });\n    return this.remove();\n  }\n\n}\nregister(Container, 'Container');\n\nclass Defs extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('defs', node), attrs);\n  }\n\n  flatten() {\n    return this;\n  }\n\n  ungroup() {\n    return this;\n  }\n\n}\nregister(Defs, 'Defs');\n\nclass Shape extends Element {}\nregister(Shape, 'Shape');\n\nfunction rx(rx) {\n  return this.attr('rx', rx);\n} // Radius y value\n\nfunction ry(ry) {\n  return this.attr('ry', ry);\n} // Move over x-axis\n\nfunction x$3(x) {\n  return x == null ? this.cx() - this.rx() : this.cx(x + this.rx());\n} // Move over y-axis\n\nfunction y$3(y) {\n  return y == null ? this.cy() - this.ry() : this.cy(y + this.ry());\n} // Move by center over x-axis\n\nfunction cx$1(x) {\n  return this.attr('cx', x);\n} // Move by center over y-axis\n\nfunction cy$1(y) {\n  return this.attr('cy', y);\n} // Set width of element\n\nfunction width$2(width) {\n  return width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2));\n} // Set height of element\n\nfunction height$2(height) {\n  return height == null ? this.ry() * 2 : this.ry(new SVGNumber(height).divide(2));\n}\n\nvar circled = {\n  __proto__: null,\n  rx: rx,\n  ry: ry,\n  x: x$3,\n  y: y$3,\n  cx: cx$1,\n  cy: cy$1,\n  width: width$2,\n  height: height$2\n};\n\nclass Ellipse extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('ellipse', node), attrs);\n  }\n\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2));\n  }\n\n}\nextend(Ellipse, circled);\nregisterMethods('Container', {\n  // Create an ellipse\n  ellipse: wrapWithAttrCheck(function (width = 0, height = width) {\n    return this.put(new Ellipse()).size(width, height).move(0, 0);\n  })\n});\nregister(Ellipse, 'Ellipse');\n\nclass Fragment extends Dom {\n  constructor(node = globals.document.createDocumentFragment()) {\n    super(node);\n  } // Import / Export raw xml\n\n\n  xml(xmlOrFn, outerXML, ns) {\n    if (typeof xmlOrFn === 'boolean') {\n      ns = outerXML;\n      outerXML = xmlOrFn;\n      xmlOrFn = null;\n    } // because this is a fragment we have to put all elements into a wrapper first\n    // before we can get the innerXML from it\n\n\n    if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n      const wrapper = new Dom(create('wrapper', ns));\n      wrapper.add(this.node.cloneNode(true));\n      return wrapper.xml(false, ns);\n    } // Act as setter if we got a string\n\n\n    return super.xml(xmlOrFn, false, ns);\n  }\n\n}\n\nregister(Fragment, 'Fragment');\n\nfunction from(x, y) {\n  return (this._element || this).type === 'radialGradient' ? this.attr({\n    fx: new SVGNumber(x),\n    fy: new SVGNumber(y)\n  }) : this.attr({\n    x1: new SVGNumber(x),\n    y1: new SVGNumber(y)\n  });\n}\nfunction to(x, y) {\n  return (this._element || this).type === 'radialGradient' ? this.attr({\n    cx: new SVGNumber(x),\n    cy: new SVGNumber(y)\n  }) : this.attr({\n    x2: new SVGNumber(x),\n    y2: new SVGNumber(y)\n  });\n}\n\nvar gradiented = {\n  __proto__: null,\n  from: from,\n  to: to\n};\n\nclass Gradient extends Container {\n  constructor(type, attrs) {\n    super(nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type), attrs);\n  } // custom attr to handle transform\n\n\n  attr(a, b, c) {\n    if (a === 'transform') a = 'gradientTransform';\n    return super.attr(a, b, c);\n  }\n\n  bbox() {\n    return new Box();\n  }\n\n  targets() {\n    return baseFind('svg [fill*=' + this.id() + ']');\n  } // Alias string conversion to fill\n\n\n  toString() {\n    return this.url();\n  } // Update gradient\n\n\n  update(block) {\n    // remove all stops\n    this.clear(); // invoke passed block\n\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n\n    return this;\n  } // Return the fill id\n\n\n  url() {\n    return 'url(#' + this.id() + ')';\n  }\n\n}\nextend(Gradient, gradiented);\nregisterMethods({\n  Container: {\n    // Create gradient element in defs\n    gradient(...args) {\n      return this.defs().gradient(...args);\n    }\n\n  },\n  // define gradient\n  Defs: {\n    gradient: wrapWithAttrCheck(function (type, block) {\n      return this.put(new Gradient(type)).update(block);\n    })\n  }\n});\nregister(Gradient, 'Gradient');\n\nclass Pattern extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('pattern', node), attrs);\n  } // custom attr to handle transform\n\n\n  attr(a, b, c) {\n    if (a === 'transform') a = 'patternTransform';\n    return super.attr(a, b, c);\n  }\n\n  bbox() {\n    return new Box();\n  }\n\n  targets() {\n    return baseFind('svg [fill*=' + this.id() + ']');\n  } // Alias string conversion to fill\n\n\n  toString() {\n    return this.url();\n  } // Update pattern by rebuilding\n\n\n  update(block) {\n    // remove content\n    this.clear(); // invoke passed block\n\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n\n    return this;\n  } // Return the fill id\n\n\n  url() {\n    return 'url(#' + this.id() + ')';\n  }\n\n}\nregisterMethods({\n  Container: {\n    // Create pattern element in defs\n    pattern(...args) {\n      return this.defs().pattern(...args);\n    }\n\n  },\n  Defs: {\n    pattern: wrapWithAttrCheck(function (width, height, block) {\n      return this.put(new Pattern()).update(block).attr({\n        x: 0,\n        y: 0,\n        width: width,\n        height: height,\n        patternUnits: 'userSpaceOnUse'\n      });\n    })\n  }\n});\nregister(Pattern, 'Pattern');\n\nclass Image extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('image', node), attrs);\n  } // (re)load image\n\n\n  load(url, callback) {\n    if (!url) return this;\n    const img = new globals.window.Image();\n    on(img, 'load', function (e) {\n      const p = this.parent(Pattern); // ensure image size\n\n      if (this.width() === 0 && this.height() === 0) {\n        this.size(img.width, img.height);\n      }\n\n      if (p instanceof Pattern) {\n        // ensure pattern size if not set\n        if (p.width() === 0 && p.height() === 0) {\n          p.size(this.width(), this.height());\n        }\n      }\n\n      if (typeof callback === 'function') {\n        callback.call(this, e);\n      }\n    }, this);\n    on(img, 'load error', function () {\n      // dont forget to unbind memory leaking events\n      off(img);\n    });\n    return this.attr('href', img.src = url, xlink);\n  }\n\n}\nregisterAttrHook(function (attr, val, _this) {\n  // convert image fill and stroke to patterns\n  if (attr === 'fill' || attr === 'stroke') {\n    if (isImage.test(val)) {\n      val = _this.root().defs().image(val);\n    }\n  }\n\n  if (val instanceof Image) {\n    val = _this.root().defs().pattern(0, 0, pattern => {\n      pattern.add(val);\n    });\n  }\n\n  return val;\n});\nregisterMethods({\n  Container: {\n    // create image element, load image and set its size\n    image: wrapWithAttrCheck(function (source, callback) {\n      return this.put(new Image()).size(0, 0).load(source, callback);\n    })\n  }\n});\nregister(Image, 'Image');\n\nclass PointArray extends SVGArray {\n  // Get bounding box of points\n  bbox() {\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    let minX = Infinity;\n    let minY = Infinity;\n    this.forEach(function (el) {\n      maxX = Math.max(el[0], maxX);\n      maxY = Math.max(el[1], maxY);\n      minX = Math.min(el[0], minX);\n      minY = Math.min(el[1], minY);\n    });\n    return new Box(minX, minY, maxX - minX, maxY - minY);\n  } // Move point string\n\n\n  move(x, y) {\n    const box = this.bbox(); // get relative offset\n\n    x -= box.x;\n    y -= box.y; // move every point\n\n    if (!isNaN(x) && !isNaN(y)) {\n      for (let i = this.length - 1; i >= 0; i--) {\n        this[i] = [this[i][0] + x, this[i][1] + y];\n      }\n    }\n\n    return this;\n  } // Parse point string and flat array\n\n\n  parse(array = [0, 0]) {\n    const points = []; // if it is an array, we flatten it and therefore clone it to 1 depths\n\n    if (array instanceof Array) {\n      array = Array.prototype.concat.apply([], array);\n    } else {\n      // Else, it is considered as a string\n      // parse points\n      array = array.trim().split(delimiter).map(parseFloat);\n    } // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\n    // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\n\n\n    if (array.length % 2 !== 0) array.pop(); // wrap points in two-tuples\n\n    for (let i = 0, len = array.length; i < len; i = i + 2) {\n      points.push([array[i], array[i + 1]]);\n    }\n\n    return points;\n  } // Resize poly string\n\n\n  size(width, height) {\n    let i;\n    const box = this.bbox(); // recalculate position of all points according to new size\n\n    for (i = this.length - 1; i >= 0; i--) {\n      if (box.width) this[i][0] = (this[i][0] - box.x) * width / box.width + box.x;\n      if (box.height) this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n    }\n\n    return this;\n  } // Convert array to line object\n\n\n  toLine() {\n    return {\n      x1: this[0][0],\n      y1: this[0][1],\n      x2: this[1][0],\n      y2: this[1][1]\n    };\n  } // Convert array to string\n\n\n  toString() {\n    const array = []; // convert to a poly point string\n\n    for (let i = 0, il = this.length; i < il; i++) {\n      array.push(this[i].join(','));\n    }\n\n    return array.join(' ');\n  }\n\n  transform(m) {\n    return this.clone().transformO(m);\n  } // transform points with matrix (similar to Point.transform)\n\n\n  transformO(m) {\n    if (!Matrix.isMatrixLike(m)) {\n      m = new Matrix(m);\n    }\n\n    for (let i = this.length; i--;) {\n      // Perform the matrix multiplication\n      const [x, y] = this[i];\n      this[i][0] = m.a * x + m.c * y + m.e;\n      this[i][1] = m.b * x + m.d * y + m.f;\n    }\n\n    return this;\n  }\n\n}\n\nconst MorphArray = PointArray; // Move by left top corner over x-axis\n\nfunction x$2(x) {\n  return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n} // Move by left top corner over y-axis\n\nfunction y$2(y) {\n  return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n} // Set width of element\n\nfunction width$1(width) {\n  const b = this.bbox();\n  return width == null ? b.width : this.size(width, b.height);\n} // Set height of element\n\nfunction height$1(height) {\n  const b = this.bbox();\n  return height == null ? b.height : this.size(b.width, height);\n}\n\nvar pointed = {\n  __proto__: null,\n  MorphArray: MorphArray,\n  x: x$2,\n  y: y$2,\n  width: width$1,\n  height: height$1\n};\n\nclass Line extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('line', node), attrs);\n  } // Get array\n\n\n  array() {\n    return new PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]);\n  } // Move by left top corner\n\n\n  move(x, y) {\n    return this.attr(this.array().move(x, y).toLine());\n  } // Overwrite native plot() method\n\n\n  plot(x1, y1, x2, y2) {\n    if (x1 == null) {\n      return this.array();\n    } else if (typeof y1 !== 'undefined') {\n      x1 = {\n        x1,\n        y1,\n        x2,\n        y2\n      };\n    } else {\n      x1 = new PointArray(x1).toLine();\n    }\n\n    return this.attr(x1);\n  } // Set element size to given width and height\n\n\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.attr(this.array().size(p.width, p.height).toLine());\n  }\n\n}\nextend(Line, pointed);\nregisterMethods({\n  Container: {\n    // Create a line element\n    line: wrapWithAttrCheck(function (...args) {\n      // make sure plot is called as a setter\n      // x1 is not necessarily a number, it can also be an array, a string and a PointArray\n      return Line.prototype.plot.apply(this.put(new Line()), args[0] != null ? args : [0, 0, 0, 0]);\n    })\n  }\n});\nregister(Line, 'Line');\n\nclass Marker extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('marker', node), attrs);\n  } // Set height of element\n\n\n  height(height) {\n    return this.attr('markerHeight', height);\n  }\n\n  orient(orient) {\n    return this.attr('orient', orient);\n  } // Set marker refX and refY\n\n\n  ref(x, y) {\n    return this.attr('refX', x).attr('refY', y);\n  } // Return the fill id\n\n\n  toString() {\n    return 'url(#' + this.id() + ')';\n  } // Update marker\n\n\n  update(block) {\n    // remove all content\n    this.clear(); // invoke passed block\n\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n\n    return this;\n  } // Set width of element\n\n\n  width(width) {\n    return this.attr('markerWidth', width);\n  }\n\n}\nregisterMethods({\n  Container: {\n    marker(...args) {\n      // Create marker element in defs\n      return this.defs().marker(...args);\n    }\n\n  },\n  Defs: {\n    // Create marker\n    marker: wrapWithAttrCheck(function (width, height, block) {\n      // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\n      return this.put(new Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block);\n    })\n  },\n  marker: {\n    // Create and attach markers\n    marker(marker, width, height, block) {\n      let attr = ['marker']; // Build attribute name\n\n      if (marker !== 'all') attr.push(marker);\n      attr = attr.join('-'); // Set marker attribute\n\n      marker = arguments[1] instanceof Marker ? arguments[1] : this.defs().marker(width, height, block);\n      return this.attr(attr, marker);\n    }\n\n  }\n});\nregister(Marker, 'Marker');\n\n/***\nBase Class\n==========\nThe base stepper class that will be\n***/\n\nfunction makeSetterGetter(k, f) {\n  return function (v) {\n    if (v == null) return this[k];\n    this[k] = v;\n    if (f) f.call(this);\n    return this;\n  };\n}\n\nconst easing = {\n  '-': function (pos) {\n    return pos;\n  },\n  '<>': function (pos) {\n    return -Math.cos(pos * Math.PI) / 2 + 0.5;\n  },\n  '>': function (pos) {\n    return Math.sin(pos * Math.PI / 2);\n  },\n  '<': function (pos) {\n    return -Math.cos(pos * Math.PI / 2) + 1;\n  },\n  bezier: function (x1, y1, x2, y2) {\n    // see https://www.w3.org/TR/css-easing-1/#cubic-bezier-algo\n    return function (t) {\n      if (t < 0) {\n        if (x1 > 0) {\n          return y1 / x1 * t;\n        } else if (x2 > 0) {\n          return y2 / x2 * t;\n        } else {\n          return 0;\n        }\n      } else if (t > 1) {\n        if (x2 < 1) {\n          return (1 - y2) / (1 - x2) * t + (y2 - x2) / (1 - x2);\n        } else if (x1 < 1) {\n          return (1 - y1) / (1 - x1) * t + (y1 - x1) / (1 - x1);\n        } else {\n          return 1;\n        }\n      } else {\n        return 3 * t * (1 - t) ** 2 * y1 + 3 * t ** 2 * (1 - t) * y2 + t ** 3;\n      }\n    };\n  },\n  // see https://www.w3.org/TR/css-easing-1/#step-timing-function-algo\n  steps: function (steps, stepPosition = 'end') {\n    // deal with \"jump-\" prefix\n    stepPosition = stepPosition.split('-').reverse()[0];\n    let jumps = steps;\n\n    if (stepPosition === 'none') {\n      --jumps;\n    } else if (stepPosition === 'both') {\n      ++jumps;\n    } // The beforeFlag is essentially useless\n\n\n    return (t, beforeFlag = false) => {\n      // Step is called currentStep in referenced url\n      let step = Math.floor(t * steps);\n      const jumping = t * step % 1 === 0;\n\n      if (stepPosition === 'start' || stepPosition === 'both') {\n        ++step;\n      }\n\n      if (beforeFlag && jumping) {\n        --step;\n      }\n\n      if (t >= 0 && step < 0) {\n        step = 0;\n      }\n\n      if (t <= 1 && step > jumps) {\n        step = jumps;\n      }\n\n      return step / jumps;\n    };\n  }\n};\nclass Stepper {\n  done() {\n    return false;\n  }\n\n}\n/***\nEasing Functions\n================\n***/\n\nclass Ease extends Stepper {\n  constructor(fn = timeline.ease) {\n    super();\n    this.ease = easing[fn] || fn;\n  }\n\n  step(from, to, pos) {\n    if (typeof from !== 'number') {\n      return pos < 1 ? from : to;\n    }\n\n    return from + (to - from) * this.ease(pos);\n  }\n\n}\n/***\nController Types\n================\n***/\n\nclass Controller extends Stepper {\n  constructor(fn) {\n    super();\n    this.stepper = fn;\n  }\n\n  done(c) {\n    return c.done;\n  }\n\n  step(current, target, dt, c) {\n    return this.stepper(current, target, dt, c);\n  }\n\n}\n\nfunction recalculate() {\n  // Apply the default parameters\n  const duration = (this._duration || 500) / 1000;\n  const overshoot = this._overshoot || 0; // Calculate the PID natural response\n\n  const eps = 1e-10;\n  const pi = Math.PI;\n  const os = Math.log(overshoot / 100 + eps);\n  const zeta = -os / Math.sqrt(pi * pi + os * os);\n  const wn = 3.9 / (zeta * duration); // Calculate the Spring values\n\n  this.d = 2 * zeta * wn;\n  this.k = wn * wn;\n}\n\nclass Spring extends Controller {\n  constructor(duration = 500, overshoot = 0) {\n    super();\n    this.duration(duration).overshoot(overshoot);\n  }\n\n  step(current, target, dt, c) {\n    if (typeof current === 'string') return current;\n    c.done = dt === Infinity;\n    if (dt === Infinity) return target;\n    if (dt === 0) return current;\n    if (dt > 100) dt = 16;\n    dt /= 1000; // Get the previous velocity\n\n    const velocity = c.velocity || 0; // Apply the control to get the new position and store it\n\n    const acceleration = -this.d * velocity - this.k * (current - target);\n    const newPosition = current + velocity * dt + acceleration * dt * dt / 2; // Store the velocity\n\n    c.velocity = velocity + acceleration * dt; // Figure out if we have converged, and if so, pass the value\n\n    c.done = Math.abs(target - newPosition) + Math.abs(velocity) < 0.002;\n    return c.done ? target : newPosition;\n  }\n\n}\nextend(Spring, {\n  duration: makeSetterGetter('_duration', recalculate),\n  overshoot: makeSetterGetter('_overshoot', recalculate)\n});\nclass PID extends Controller {\n  constructor(p = 0.1, i = 0.01, d = 0, windup = 1000) {\n    super();\n    this.p(p).i(i).d(d).windup(windup);\n  }\n\n  step(current, target, dt, c) {\n    if (typeof current === 'string') return current;\n    c.done = dt === Infinity;\n    if (dt === Infinity) return target;\n    if (dt === 0) return current;\n    const p = target - current;\n    let i = (c.integral || 0) + p * dt;\n    const d = (p - (c.error || 0)) / dt;\n    const windup = this._windup; // antiwindup\n\n    if (windup !== false) {\n      i = Math.max(-windup, Math.min(i, windup));\n    }\n\n    c.error = p;\n    c.integral = i;\n    c.done = Math.abs(p) < 0.001;\n    return c.done ? target : current + (this.P * p + this.I * i + this.D * d);\n  }\n\n}\nextend(PID, {\n  windup: makeSetterGetter('_windup'),\n  p: makeSetterGetter('P'),\n  i: makeSetterGetter('I'),\n  d: makeSetterGetter('D')\n});\n\nconst segmentParameters = {\n  M: 2,\n  L: 2,\n  H: 1,\n  V: 1,\n  C: 6,\n  S: 4,\n  Q: 4,\n  T: 2,\n  A: 7,\n  Z: 0\n};\nconst pathHandlers = {\n  M: function (c, p, p0) {\n    p.x = p0.x = c[0];\n    p.y = p0.y = c[1];\n    return ['M', p.x, p.y];\n  },\n  L: function (c, p) {\n    p.x = c[0];\n    p.y = c[1];\n    return ['L', c[0], c[1]];\n  },\n  H: function (c, p) {\n    p.x = c[0];\n    return ['H', c[0]];\n  },\n  V: function (c, p) {\n    p.y = c[0];\n    return ['V', c[0]];\n  },\n  C: function (c, p) {\n    p.x = c[4];\n    p.y = c[5];\n    return ['C', c[0], c[1], c[2], c[3], c[4], c[5]];\n  },\n  S: function (c, p) {\n    p.x = c[2];\n    p.y = c[3];\n    return ['S', c[0], c[1], c[2], c[3]];\n  },\n  Q: function (c, p) {\n    p.x = c[2];\n    p.y = c[3];\n    return ['Q', c[0], c[1], c[2], c[3]];\n  },\n  T: function (c, p) {\n    p.x = c[0];\n    p.y = c[1];\n    return ['T', c[0], c[1]];\n  },\n  Z: function (c, p, p0) {\n    p.x = p0.x;\n    p.y = p0.y;\n    return ['Z'];\n  },\n  A: function (c, p) {\n    p.x = c[5];\n    p.y = c[6];\n    return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]];\n  }\n};\nconst mlhvqtcsaz = 'mlhvqtcsaz'.split('');\n\nfor (let i = 0, il = mlhvqtcsaz.length; i < il; ++i) {\n  pathHandlers[mlhvqtcsaz[i]] = function (i) {\n    return function (c, p, p0) {\n      if (i === 'H') c[0] = c[0] + p.x;else if (i === 'V') c[0] = c[0] + p.y;else if (i === 'A') {\n        c[5] = c[5] + p.x;\n        c[6] = c[6] + p.y;\n      } else {\n        for (let j = 0, jl = c.length; j < jl; ++j) {\n          c[j] = c[j] + (j % 2 ? p.y : p.x);\n        }\n      }\n      return pathHandlers[i](c, p, p0);\n    };\n  }(mlhvqtcsaz[i].toUpperCase());\n}\n\nfunction makeAbsolut(parser) {\n  const command = parser.segment[0];\n  return pathHandlers[command](parser.segment.slice(1), parser.p, parser.p0);\n}\n\nfunction segmentComplete(parser) {\n  return parser.segment.length && parser.segment.length - 1 === segmentParameters[parser.segment[0].toUpperCase()];\n}\n\nfunction startNewSegment(parser, token) {\n  parser.inNumber && finalizeNumber(parser, false);\n  const pathLetter = isPathLetter.test(token);\n\n  if (pathLetter) {\n    parser.segment = [token];\n  } else {\n    const lastCommand = parser.lastCommand;\n    const small = lastCommand.toLowerCase();\n    const isSmall = lastCommand === small;\n    parser.segment = [small === 'm' ? isSmall ? 'l' : 'L' : lastCommand];\n  }\n\n  parser.inSegment = true;\n  parser.lastCommand = parser.segment[0];\n  return pathLetter;\n}\n\nfunction finalizeNumber(parser, inNumber) {\n  if (!parser.inNumber) throw new Error('Parser Error');\n  parser.number && parser.segment.push(parseFloat(parser.number));\n  parser.inNumber = inNumber;\n  parser.number = '';\n  parser.pointSeen = false;\n  parser.hasExponent = false;\n\n  if (segmentComplete(parser)) {\n    finalizeSegment(parser);\n  }\n}\n\nfunction finalizeSegment(parser) {\n  parser.inSegment = false;\n\n  if (parser.absolute) {\n    parser.segment = makeAbsolut(parser);\n  }\n\n  parser.segments.push(parser.segment);\n}\n\nfunction isArcFlag(parser) {\n  if (!parser.segment.length) return false;\n  const isArc = parser.segment[0].toUpperCase() === 'A';\n  const length = parser.segment.length;\n  return isArc && (length === 4 || length === 5);\n}\n\nfunction isExponential(parser) {\n  return parser.lastToken.toUpperCase() === 'E';\n}\n\nfunction pathParser(d, toAbsolute = true) {\n  let index = 0;\n  let token = '';\n  const parser = {\n    segment: [],\n    inNumber: false,\n    number: '',\n    lastToken: '',\n    inSegment: false,\n    segments: [],\n    pointSeen: false,\n    hasExponent: false,\n    absolute: toAbsolute,\n    p0: new Point(),\n    p: new Point()\n  };\n\n  while (parser.lastToken = token, token = d.charAt(index++)) {\n    if (!parser.inSegment) {\n      if (startNewSegment(parser, token)) {\n        continue;\n      }\n    }\n\n    if (token === '.') {\n      if (parser.pointSeen || parser.hasExponent) {\n        finalizeNumber(parser, false);\n        --index;\n        continue;\n      }\n\n      parser.inNumber = true;\n      parser.pointSeen = true;\n      parser.number += token;\n      continue;\n    }\n\n    if (!isNaN(parseInt(token))) {\n      if (parser.number === '0' || isArcFlag(parser)) {\n        parser.inNumber = true;\n        parser.number = token;\n        finalizeNumber(parser, true);\n        continue;\n      }\n\n      parser.inNumber = true;\n      parser.number += token;\n      continue;\n    }\n\n    if (token === ' ' || token === ',') {\n      if (parser.inNumber) {\n        finalizeNumber(parser, false);\n      }\n\n      continue;\n    }\n\n    if (token === '-') {\n      if (parser.inNumber && !isExponential(parser)) {\n        finalizeNumber(parser, false);\n        --index;\n        continue;\n      }\n\n      parser.number += token;\n      parser.inNumber = true;\n      continue;\n    }\n\n    if (token.toUpperCase() === 'E') {\n      parser.number += token;\n      parser.hasExponent = true;\n      continue;\n    }\n\n    if (isPathLetter.test(token)) {\n      if (parser.inNumber) {\n        finalizeNumber(parser, false);\n      } else if (!segmentComplete(parser)) {\n        throw new Error('parser Error');\n      } else {\n        finalizeSegment(parser);\n      }\n\n      --index;\n    }\n  }\n\n  if (parser.inNumber) {\n    finalizeNumber(parser, false);\n  }\n\n  if (parser.inSegment && segmentComplete(parser)) {\n    finalizeSegment(parser);\n  }\n\n  return parser.segments;\n}\n\nfunction arrayToString(a) {\n  let s = '';\n\n  for (let i = 0, il = a.length; i < il; i++) {\n    s += a[i][0];\n\n    if (a[i][1] != null) {\n      s += a[i][1];\n\n      if (a[i][2] != null) {\n        s += ' ';\n        s += a[i][2];\n\n        if (a[i][3] != null) {\n          s += ' ';\n          s += a[i][3];\n          s += ' ';\n          s += a[i][4];\n\n          if (a[i][5] != null) {\n            s += ' ';\n            s += a[i][5];\n            s += ' ';\n            s += a[i][6];\n\n            if (a[i][7] != null) {\n              s += ' ';\n              s += a[i][7];\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return s + ' ';\n}\n\nclass PathArray extends SVGArray {\n  // Get bounding box of path\n  bbox() {\n    parser().path.setAttribute('d', this.toString());\n    return new Box(parser.nodes.path.getBBox());\n  } // Move path string\n\n\n  move(x, y) {\n    // get bounding box of current situation\n    const box = this.bbox(); // get relative offset\n\n    x -= box.x;\n    y -= box.y;\n\n    if (!isNaN(x) && !isNaN(y)) {\n      // move every point\n      for (let l, i = this.length - 1; i >= 0; i--) {\n        l = this[i][0];\n\n        if (l === 'M' || l === 'L' || l === 'T') {\n          this[i][1] += x;\n          this[i][2] += y;\n        } else if (l === 'H') {\n          this[i][1] += x;\n        } else if (l === 'V') {\n          this[i][1] += y;\n        } else if (l === 'C' || l === 'S' || l === 'Q') {\n          this[i][1] += x;\n          this[i][2] += y;\n          this[i][3] += x;\n          this[i][4] += y;\n\n          if (l === 'C') {\n            this[i][5] += x;\n            this[i][6] += y;\n          }\n        } else if (l === 'A') {\n          this[i][6] += x;\n          this[i][7] += y;\n        }\n      }\n    }\n\n    return this;\n  } // Absolutize and parse path to array\n\n\n  parse(d = 'M0 0') {\n    if (Array.isArray(d)) {\n      d = Array.prototype.concat.apply([], d).toString();\n    }\n\n    return pathParser(d);\n  } // Resize path string\n\n\n  size(width, height) {\n    // get bounding box of current situation\n    const box = this.bbox();\n    let i, l; // If the box width or height is 0 then we ignore\n    // transformations on the respective axis\n\n    box.width = box.width === 0 ? 1 : box.width;\n    box.height = box.height === 0 ? 1 : box.height; // recalculate position of all points according to new size\n\n    for (i = this.length - 1; i >= 0; i--) {\n      l = this[i][0];\n\n      if (l === 'M' || l === 'L' || l === 'T') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n        this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n      } else if (l === 'H') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n      } else if (l === 'V') {\n        this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n      } else if (l === 'C' || l === 'S' || l === 'Q') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n        this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n        this[i][3] = (this[i][3] - box.x) * width / box.width + box.x;\n        this[i][4] = (this[i][4] - box.y) * height / box.height + box.y;\n\n        if (l === 'C') {\n          this[i][5] = (this[i][5] - box.x) * width / box.width + box.x;\n          this[i][6] = (this[i][6] - box.y) * height / box.height + box.y;\n        }\n      } else if (l === 'A') {\n        // resize radii\n        this[i][1] = this[i][1] * width / box.width;\n        this[i][2] = this[i][2] * height / box.height; // move position values\n\n        this[i][6] = (this[i][6] - box.x) * width / box.width + box.x;\n        this[i][7] = (this[i][7] - box.y) * height / box.height + box.y;\n      }\n    }\n\n    return this;\n  } // Convert array to string\n\n\n  toString() {\n    return arrayToString(this);\n  }\n\n}\n\nconst getClassForType = value => {\n  const type = typeof value;\n\n  if (type === 'number') {\n    return SVGNumber;\n  } else if (type === 'string') {\n    if (Color.isColor(value)) {\n      return Color;\n    } else if (delimiter.test(value)) {\n      return isPathLetter.test(value) ? PathArray : SVGArray;\n    } else if (numberAndUnit.test(value)) {\n      return SVGNumber;\n    } else {\n      return NonMorphable;\n    }\n  } else if (morphableTypes.indexOf(value.constructor) > -1) {\n    return value.constructor;\n  } else if (Array.isArray(value)) {\n    return SVGArray;\n  } else if (type === 'object') {\n    return ObjectBag;\n  } else {\n    return NonMorphable;\n  }\n};\n\nclass Morphable {\n  constructor(stepper) {\n    this._stepper = stepper || new Ease('-');\n    this._from = null;\n    this._to = null;\n    this._type = null;\n    this._context = null;\n    this._morphObj = null;\n  }\n\n  at(pos) {\n    return this._morphObj.morph(this._from, this._to, pos, this._stepper, this._context);\n  }\n\n  done() {\n    const complete = this._context.map(this._stepper.done).reduce(function (last, curr) {\n      return last && curr;\n    }, true);\n\n    return complete;\n  }\n\n  from(val) {\n    if (val == null) {\n      return this._from;\n    }\n\n    this._from = this._set(val);\n    return this;\n  }\n\n  stepper(stepper) {\n    if (stepper == null) return this._stepper;\n    this._stepper = stepper;\n    return this;\n  }\n\n  to(val) {\n    if (val == null) {\n      return this._to;\n    }\n\n    this._to = this._set(val);\n    return this;\n  }\n\n  type(type) {\n    // getter\n    if (type == null) {\n      return this._type;\n    } // setter\n\n\n    this._type = type;\n    return this;\n  }\n\n  _set(value) {\n    if (!this._type) {\n      this.type(getClassForType(value));\n    }\n\n    let result = new this._type(value);\n\n    if (this._type === Color) {\n      result = this._to ? result[this._to[4]]() : this._from ? result[this._from[4]]() : result;\n    }\n\n    if (this._type === ObjectBag) {\n      result = this._to ? result.align(this._to) : this._from ? result.align(this._from) : result;\n    }\n\n    result = result.toConsumable();\n    this._morphObj = this._morphObj || new this._type();\n    this._context = this._context || Array.apply(null, Array(result.length)).map(Object).map(function (o) {\n      o.done = true;\n      return o;\n    });\n    return result;\n  }\n\n}\nclass NonMorphable {\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  init(val) {\n    val = Array.isArray(val) ? val[0] : val;\n    this.value = val;\n    return this;\n  }\n\n  toArray() {\n    return [this.value];\n  }\n\n  valueOf() {\n    return this.value;\n  }\n\n}\nclass TransformBag {\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  init(obj) {\n    if (Array.isArray(obj)) {\n      obj = {\n        scaleX: obj[0],\n        scaleY: obj[1],\n        shear: obj[2],\n        rotate: obj[3],\n        translateX: obj[4],\n        translateY: obj[5],\n        originX: obj[6],\n        originY: obj[7]\n      };\n    }\n\n    Object.assign(this, TransformBag.defaults, obj);\n    return this;\n  }\n\n  toArray() {\n    const v = this;\n    return [v.scaleX, v.scaleY, v.shear, v.rotate, v.translateX, v.translateY, v.originX, v.originY];\n  }\n\n}\nTransformBag.defaults = {\n  scaleX: 1,\n  scaleY: 1,\n  shear: 0,\n  rotate: 0,\n  translateX: 0,\n  translateY: 0,\n  originX: 0,\n  originY: 0\n};\n\nconst sortByKey = (a, b) => {\n  return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;\n};\n\nclass ObjectBag {\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  align(other) {\n    const values = this.values;\n\n    for (let i = 0, il = values.length; i < il; ++i) {\n      // If the type is the same we only need to check if the color is in the correct format\n      if (values[i + 1] === other[i + 1]) {\n        if (values[i + 1] === Color && other[i + 7] !== values[i + 7]) {\n          const space = other[i + 7];\n          const color = new Color(this.values.splice(i + 3, 5))[space]().toArray();\n          this.values.splice(i + 3, 0, ...color);\n        }\n\n        i += values[i + 2] + 2;\n        continue;\n      }\n\n      if (!other[i + 1]) {\n        return this;\n      } // The types differ, so we overwrite the new type with the old one\n      // And initialize it with the types default (e.g. black for color or 0 for number)\n\n\n      const defaultObject = new other[i + 1]().toArray(); // Than we fix the values array\n\n      const toDelete = values[i + 2] + 3;\n      values.splice(i, toDelete, other[i], other[i + 1], other[i + 2], ...defaultObject);\n      i += values[i + 2] + 2;\n    }\n\n    return this;\n  }\n\n  init(objOrArr) {\n    this.values = [];\n\n    if (Array.isArray(objOrArr)) {\n      this.values = objOrArr.slice();\n      return;\n    }\n\n    objOrArr = objOrArr || {};\n    const entries = [];\n\n    for (const i in objOrArr) {\n      const Type = getClassForType(objOrArr[i]);\n      const val = new Type(objOrArr[i]).toArray();\n      entries.push([i, Type, val.length, ...val]);\n    }\n\n    entries.sort(sortByKey);\n    this.values = entries.reduce((last, curr) => last.concat(curr), []);\n    return this;\n  }\n\n  toArray() {\n    return this.values;\n  }\n\n  valueOf() {\n    const obj = {};\n    const arr = this.values; // for (var i = 0, len = arr.length; i < len; i += 2) {\n\n    while (arr.length) {\n      const key = arr.shift();\n      const Type = arr.shift();\n      const num = arr.shift();\n      const values = arr.splice(0, num);\n      obj[key] = new Type(values); // .valueOf()\n    }\n\n    return obj;\n  }\n\n}\nconst morphableTypes = [NonMorphable, TransformBag, ObjectBag];\nfunction registerMorphableType(type = []) {\n  morphableTypes.push(...[].concat(type));\n}\nfunction makeMorphable() {\n  extend(morphableTypes, {\n    to(val) {\n      return new Morphable().type(this.constructor).from(this.toArray()) // this.valueOf())\n      .to(val);\n    },\n\n    fromArray(arr) {\n      this.init(arr);\n      return this;\n    },\n\n    toConsumable() {\n      return this.toArray();\n    },\n\n    morph(from, to, pos, stepper, context) {\n      const mapper = function (i, index) {\n        return stepper.step(i, to[index], pos, context[index], context);\n      };\n\n      return this.fromArray(from.map(mapper));\n    }\n\n  });\n}\n\nclass Path extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('path', node), attrs);\n  } // Get array\n\n\n  array() {\n    return this._array || (this._array = new PathArray(this.attr('d')));\n  } // Clear array cache\n\n\n  clear() {\n    delete this._array;\n    return this;\n  } // Set height of element\n\n\n  height(height) {\n    return height == null ? this.bbox().height : this.size(this.bbox().width, height);\n  } // Move by left top corner\n\n\n  move(x, y) {\n    return this.attr('d', this.array().move(x, y));\n  } // Plot new path\n\n\n  plot(d) {\n    return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new PathArray(d));\n  } // Set element size to given width and height\n\n\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.attr('d', this.array().size(p.width, p.height));\n  } // Set width of element\n\n\n  width(width) {\n    return width == null ? this.bbox().width : this.size(width, this.bbox().height);\n  } // Move by left top corner over x-axis\n\n\n  x(x) {\n    return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n  } // Move by left top corner over y-axis\n\n\n  y(y) {\n    return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n  }\n\n} // Define morphable array\n\nPath.prototype.MorphArray = PathArray; // Add parent method\n\nregisterMethods({\n  Container: {\n    // Create a wrapped path element\n    path: wrapWithAttrCheck(function (d) {\n      // make sure plot is called as a setter\n      return this.put(new Path()).plot(d || new PathArray());\n    })\n  }\n});\nregister(Path, 'Path');\n\nfunction array() {\n  return this._array || (this._array = new PointArray(this.attr('points')));\n} // Clear array cache\n\nfunction clear() {\n  delete this._array;\n  return this;\n} // Move by left top corner\n\nfunction move$2(x, y) {\n  return this.attr('points', this.array().move(x, y));\n} // Plot new path\n\nfunction plot(p) {\n  return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new PointArray(p));\n} // Set element size to given width and height\n\nfunction size$1(width, height) {\n  const p = proportionalSize(this, width, height);\n  return this.attr('points', this.array().size(p.width, p.height));\n}\n\nvar poly = {\n  __proto__: null,\n  array: array,\n  clear: clear,\n  move: move$2,\n  plot: plot,\n  size: size$1\n};\n\nclass Polygon extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('polygon', node), attrs);\n  }\n\n}\nregisterMethods({\n  Container: {\n    // Create a wrapped polygon element\n    polygon: wrapWithAttrCheck(function (p) {\n      // make sure plot is called as a setter\n      return this.put(new Polygon()).plot(p || new PointArray());\n    })\n  }\n});\nextend(Polygon, pointed);\nextend(Polygon, poly);\nregister(Polygon, 'Polygon');\n\nclass Polyline extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('polyline', node), attrs);\n  }\n\n}\nregisterMethods({\n  Container: {\n    // Create a wrapped polygon element\n    polyline: wrapWithAttrCheck(function (p) {\n      // make sure plot is called as a setter\n      return this.put(new Polyline()).plot(p || new PointArray());\n    })\n  }\n});\nextend(Polyline, pointed);\nextend(Polyline, poly);\nregister(Polyline, 'Polyline');\n\nclass Rect extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('rect', node), attrs);\n  }\n\n}\nextend(Rect, {\n  rx,\n  ry\n});\nregisterMethods({\n  Container: {\n    // Create a rect element\n    rect: wrapWithAttrCheck(function (width, height) {\n      return this.put(new Rect()).size(width, height);\n    })\n  }\n});\nregister(Rect, 'Rect');\n\nclass Queue {\n  constructor() {\n    this._first = null;\n    this._last = null;\n  } // Shows us the first item in the list\n\n\n  first() {\n    return this._first && this._first.value;\n  } // Shows us the last item in the list\n\n\n  last() {\n    return this._last && this._last.value;\n  }\n\n  push(value) {\n    // An item stores an id and the provided value\n    const item = typeof value.next !== 'undefined' ? value : {\n      value: value,\n      next: null,\n      prev: null\n    }; // Deal with the queue being empty or populated\n\n    if (this._last) {\n      item.prev = this._last;\n      this._last.next = item;\n      this._last = item;\n    } else {\n      this._last = item;\n      this._first = item;\n    } // Return the current item\n\n\n    return item;\n  } // Removes the item that was returned from the push\n\n\n  remove(item) {\n    // Relink the previous item\n    if (item.prev) item.prev.next = item.next;\n    if (item.next) item.next.prev = item.prev;\n    if (item === this._last) this._last = item.prev;\n    if (item === this._first) this._first = item.next; // Invalidate item\n\n    item.prev = null;\n    item.next = null;\n  }\n\n  shift() {\n    // Check if we have a value\n    const remove = this._first;\n    if (!remove) return null; // If we do, remove it and relink things\n\n    this._first = remove.next;\n    if (this._first) this._first.prev = null;\n    this._last = this._first ? this._last : null;\n    return remove.value;\n  }\n\n}\n\nconst Animator = {\n  nextDraw: null,\n  frames: new Queue(),\n  timeouts: new Queue(),\n  immediates: new Queue(),\n  timer: () => globals.window.performance || globals.window.Date,\n  transforms: [],\n\n  frame(fn) {\n    // Store the node\n    const node = Animator.frames.push({\n      run: fn\n    }); // Request an animation frame if we don't have one\n\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    } // Return the node so we can remove it easily\n\n\n    return node;\n  },\n\n  timeout(fn, delay) {\n    delay = delay || 0; // Work out when the event should fire\n\n    const time = Animator.timer().now() + delay; // Add the timeout to the end of the queue\n\n    const node = Animator.timeouts.push({\n      run: fn,\n      time: time\n    }); // Request another animation frame if we need one\n\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n\n    return node;\n  },\n\n  immediate(fn) {\n    // Add the immediate fn to the end of the queue\n    const node = Animator.immediates.push(fn); // Request another animation frame if we need one\n\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n\n    return node;\n  },\n\n  cancelFrame(node) {\n    node != null && Animator.frames.remove(node);\n  },\n\n  clearTimeout(node) {\n    node != null && Animator.timeouts.remove(node);\n  },\n\n  cancelImmediate(node) {\n    node != null && Animator.immediates.remove(node);\n  },\n\n  _draw(now) {\n    // Run all the timeouts we can run, if they are not ready yet, add them\n    // to the end of the queue immediately! (bad timeouts!!! [sarcasm])\n    let nextTimeout = null;\n    const lastTimeout = Animator.timeouts.last();\n\n    while (nextTimeout = Animator.timeouts.shift()) {\n      // Run the timeout if its time, or push it to the end\n      if (now >= nextTimeout.time) {\n        nextTimeout.run();\n      } else {\n        Animator.timeouts.push(nextTimeout);\n      } // If we hit the last item, we should stop shifting out more items\n\n\n      if (nextTimeout === lastTimeout) break;\n    } // Run all of the animation frames\n\n\n    let nextFrame = null;\n    const lastFrame = Animator.frames.last();\n\n    while (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) {\n      nextFrame.run(now);\n    }\n\n    let nextImmediate = null;\n\n    while (nextImmediate = Animator.immediates.shift()) {\n      nextImmediate();\n    } // If we have remaining timeouts or frames, draw until we don't anymore\n\n\n    Animator.nextDraw = Animator.timeouts.first() || Animator.frames.first() ? globals.window.requestAnimationFrame(Animator._draw) : null;\n  }\n\n};\n\nconst makeSchedule = function (runnerInfo) {\n  const start = runnerInfo.start;\n  const duration = runnerInfo.runner.duration();\n  const end = start + duration;\n  return {\n    start: start,\n    duration: duration,\n    end: end,\n    runner: runnerInfo.runner\n  };\n};\n\nconst defaultSource = function () {\n  const w = globals.window;\n  return (w.performance || w.Date).now();\n};\n\nclass Timeline extends EventTarget {\n  // Construct a new timeline on the given element\n  constructor(timeSource = defaultSource) {\n    super();\n    this._timeSource = timeSource; // Store the timing variables\n\n    this._startTime = 0;\n    this._speed = 1.0; // Determines how long a runner is hold in memory. Can be a dt or true/false\n\n    this._persist = 0; // Keep track of the running animations and their starting parameters\n\n    this._nextFrame = null;\n    this._paused = true;\n    this._runners = [];\n    this._runnerIds = [];\n    this._lastRunnerId = -1;\n    this._time = 0;\n    this._lastSourceTime = 0;\n    this._lastStepTime = 0; // Make sure that step is always called in class context\n\n    this._step = this._stepFn.bind(this, false);\n    this._stepImmediate = this._stepFn.bind(this, true);\n  }\n\n  active() {\n    return !!this._nextFrame;\n  }\n\n  finish() {\n    // Go to end and pause\n    this.time(this.getEndTimeOfTimeline() + 1);\n    return this.pause();\n  } // Calculates the end of the timeline\n\n\n  getEndTime() {\n    const lastRunnerInfo = this.getLastRunnerInfo();\n    const lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0;\n    const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n    return lastStartTime + lastDuration;\n  }\n\n  getEndTimeOfTimeline() {\n    const endTimes = this._runners.map(i => i.start + i.runner.duration());\n\n    return Math.max(0, ...endTimes);\n  }\n\n  getLastRunnerInfo() {\n    return this.getRunnerInfoById(this._lastRunnerId);\n  }\n\n  getRunnerInfoById(id) {\n    return this._runners[this._runnerIds.indexOf(id)] || null;\n  }\n\n  pause() {\n    this._paused = true;\n    return this._continue();\n  }\n\n  persist(dtOrForever) {\n    if (dtOrForever == null) return this._persist;\n    this._persist = dtOrForever;\n    return this;\n  }\n\n  play() {\n    // Now make sure we are not paused and continue the animation\n    this._paused = false;\n    return this.updateTime()._continue();\n  }\n\n  reverse(yes) {\n    const currentSpeed = this.speed();\n    if (yes == null) return this.speed(-currentSpeed);\n    const positive = Math.abs(currentSpeed);\n    return this.speed(yes ? -positive : positive);\n  } // schedules a runner on the timeline\n\n\n  schedule(runner, delay, when) {\n    if (runner == null) {\n      return this._runners.map(makeSchedule);\n    } // The start time for the next animation can either be given explicitly,\n    // derived from the current timeline time or it can be relative to the\n    // last start time to chain animations directly\n\n\n    let absoluteStartTime = 0;\n    const endTime = this.getEndTime();\n    delay = delay || 0; // Work out when to start the animation\n\n    if (when == null || when === 'last' || when === 'after') {\n      // Take the last time and increment\n      absoluteStartTime = endTime;\n    } else if (when === 'absolute' || when === 'start') {\n      absoluteStartTime = delay;\n      delay = 0;\n    } else if (when === 'now') {\n      absoluteStartTime = this._time;\n    } else if (when === 'relative') {\n      const runnerInfo = this.getRunnerInfoById(runner.id);\n\n      if (runnerInfo) {\n        absoluteStartTime = runnerInfo.start + delay;\n        delay = 0;\n      }\n    } else if (when === 'with-last') {\n      const lastRunnerInfo = this.getLastRunnerInfo();\n      const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n      absoluteStartTime = lastStartTime;\n    } else {\n      throw new Error('Invalid value for the \"when\" parameter');\n    } // Manage runner\n\n\n    runner.unschedule();\n    runner.timeline(this);\n    const persist = runner.persist();\n    const runnerInfo = {\n      persist: persist === null ? this._persist : persist,\n      start: absoluteStartTime + delay,\n      runner\n    };\n    this._lastRunnerId = runner.id;\n\n    this._runners.push(runnerInfo);\n\n    this._runners.sort((a, b) => a.start - b.start);\n\n    this._runnerIds = this._runners.map(info => info.runner.id);\n\n    this.updateTime()._continue();\n\n    return this;\n  }\n\n  seek(dt) {\n    return this.time(this._time + dt);\n  }\n\n  source(fn) {\n    if (fn == null) return this._timeSource;\n    this._timeSource = fn;\n    return this;\n  }\n\n  speed(speed) {\n    if (speed == null) return this._speed;\n    this._speed = speed;\n    return this;\n  }\n\n  stop() {\n    // Go to start and pause\n    this.time(0);\n    return this.pause();\n  }\n\n  time(time) {\n    if (time == null) return this._time;\n    this._time = time;\n    return this._continue(true);\n  } // Remove the runner from this timeline\n\n\n  unschedule(runner) {\n    const index = this._runnerIds.indexOf(runner.id);\n\n    if (index < 0) return this;\n\n    this._runners.splice(index, 1);\n\n    this._runnerIds.splice(index, 1);\n\n    runner.timeline(null);\n    return this;\n  } // Makes sure, that after pausing the time doesn't jump\n\n\n  updateTime() {\n    if (!this.active()) {\n      this._lastSourceTime = this._timeSource();\n    }\n\n    return this;\n  } // Checks if we are running and continues the animation\n\n\n  _continue(immediateStep = false) {\n    Animator.cancelFrame(this._nextFrame);\n    this._nextFrame = null;\n    if (immediateStep) return this._stepImmediate();\n    if (this._paused) return this;\n    this._nextFrame = Animator.frame(this._step);\n    return this;\n  }\n\n  _stepFn(immediateStep = false) {\n    // Get the time delta from the last time and update the time\n    const time = this._timeSource();\n\n    let dtSource = time - this._lastSourceTime;\n    if (immediateStep) dtSource = 0;\n    const dtTime = this._speed * dtSource + (this._time - this._lastStepTime);\n    this._lastSourceTime = time; // Only update the time if we use the timeSource.\n    // Otherwise use the current time\n\n    if (!immediateStep) {\n      // Update the time\n      this._time += dtTime;\n      this._time = this._time < 0 ? 0 : this._time;\n    }\n\n    this._lastStepTime = this._time;\n    this.fire('time', this._time); // This is for the case that the timeline was seeked so that the time\n    // is now before the startTime of the runner. That is why we need to set\n    // the runner to position 0\n    // FIXME:\n    // However, resetting in insertion order leads to bugs. Considering the case,\n    // where 2 runners change the same attribute but in different times,\n    // resetting both of them will lead to the case where the later defined\n    // runner always wins the reset even if the other runner started earlier\n    // and therefore should win the attribute battle\n    // this can be solved by resetting them backwards\n\n    for (let k = this._runners.length; k--;) {\n      // Get and run the current runner and ignore it if its inactive\n      const runnerInfo = this._runners[k];\n      const runner = runnerInfo.runner; // Make sure that we give the actual difference\n      // between runner start time and now\n\n      const dtToStart = this._time - runnerInfo.start; // Dont run runner if not started yet\n      // and try to reset it\n\n      if (dtToStart <= 0) {\n        runner.reset();\n      }\n    } // Run all of the runners directly\n\n\n    let runnersLeft = false;\n\n    for (let i = 0, len = this._runners.length; i < len; i++) {\n      // Get and run the current runner and ignore it if its inactive\n      const runnerInfo = this._runners[i];\n      const runner = runnerInfo.runner;\n      let dt = dtTime; // Make sure that we give the actual difference\n      // between runner start time and now\n\n      const dtToStart = this._time - runnerInfo.start; // Dont run runner if not started yet\n\n      if (dtToStart <= 0) {\n        runnersLeft = true;\n        continue;\n      } else if (dtToStart < dt) {\n        // Adjust dt to make sure that animation is on point\n        dt = dtToStart;\n      }\n\n      if (!runner.active()) continue; // If this runner is still going, signal that we need another animation\n      // frame, otherwise, remove the completed runner\n\n      const finished = runner.step(dt).done;\n\n      if (!finished) {\n        runnersLeft = true; // continue\n      } else if (runnerInfo.persist !== true) {\n        // runner is finished. And runner might get removed\n        const endTime = runner.duration() - runner.time() + this._time;\n\n        if (endTime + runnerInfo.persist < this._time) {\n          // Delete runner and correct index\n          runner.unschedule();\n          --i;\n          --len;\n        }\n      }\n    } // Basically: we continue when there are runners right from us in time\n    // when -->, and when runners are left from us when <--\n\n\n    if (runnersLeft && !(this._speed < 0 && this._time === 0) || this._runnerIds.length && this._speed < 0 && this._time > 0) {\n      this._continue();\n    } else {\n      this.pause();\n      this.fire('finished');\n    }\n\n    return this;\n  }\n\n}\nregisterMethods({\n  Element: {\n    timeline: function (timeline) {\n      if (timeline == null) {\n        this._timeline = this._timeline || new Timeline();\n        return this._timeline;\n      } else {\n        this._timeline = timeline;\n        return this;\n      }\n    }\n  }\n});\n\nclass Runner extends EventTarget {\n  constructor(options) {\n    super(); // Store a unique id on the runner, so that we can identify it later\n\n    this.id = Runner.id++; // Ensure a default value\n\n    options = options == null ? timeline.duration : options; // Ensure that we get a controller\n\n    options = typeof options === 'function' ? new Controller(options) : options; // Declare all of the variables\n\n    this._element = null;\n    this._timeline = null;\n    this.done = false;\n    this._queue = []; // Work out the stepper and the duration\n\n    this._duration = typeof options === 'number' && options;\n    this._isDeclarative = options instanceof Controller;\n    this._stepper = this._isDeclarative ? options : new Ease(); // We copy the current values from the timeline because they can change\n\n    this._history = {}; // Store the state of the runner\n\n    this.enabled = true;\n    this._time = 0;\n    this._lastTime = 0; // At creation, the runner is in reset state\n\n    this._reseted = true; // Save transforms applied to this runner\n\n    this.transforms = new Matrix();\n    this.transformId = 1; // Looping variables\n\n    this._haveReversed = false;\n    this._reverse = false;\n    this._loopsDone = 0;\n    this._swing = false;\n    this._wait = 0;\n    this._times = 1;\n    this._frameId = null; // Stores how long a runner is stored after being done\n\n    this._persist = this._isDeclarative ? true : null;\n  }\n\n  static sanitise(duration, delay, when) {\n    // Initialise the default parameters\n    let times = 1;\n    let swing = false;\n    let wait = 0;\n    duration = duration || timeline.duration;\n    delay = delay || timeline.delay;\n    when = when || 'last'; // If we have an object, unpack the values\n\n    if (typeof duration === 'object' && !(duration instanceof Stepper)) {\n      delay = duration.delay || delay;\n      when = duration.when || when;\n      swing = duration.swing || swing;\n      times = duration.times || times;\n      wait = duration.wait || wait;\n      duration = duration.duration || timeline.duration;\n    }\n\n    return {\n      duration: duration,\n      delay: delay,\n      swing: swing,\n      times: times,\n      wait: wait,\n      when: when\n    };\n  }\n\n  active(enabled) {\n    if (enabled == null) return this.enabled;\n    this.enabled = enabled;\n    return this;\n  }\n  /*\n  Private Methods\n  ===============\n  Methods that shouldn't be used externally\n  */\n\n\n  addTransform(transform, index) {\n    this.transforms.lmultiplyO(transform);\n    return this;\n  }\n\n  after(fn) {\n    return this.on('finished', fn);\n  }\n\n  animate(duration, delay, when) {\n    const o = Runner.sanitise(duration, delay, when);\n    const runner = new Runner(o.duration);\n    if (this._timeline) runner.timeline(this._timeline);\n    if (this._element) runner.element(this._element);\n    return runner.loop(o).schedule(o.delay, o.when);\n  }\n\n  clearTransform() {\n    this.transforms = new Matrix();\n    return this;\n  } // TODO: Keep track of all transformations so that deletion is faster\n\n\n  clearTransformsFromQueue() {\n    if (!this.done || !this._timeline || !this._timeline._runnerIds.includes(this.id)) {\n      this._queue = this._queue.filter(item => {\n        return !item.isTransform;\n      });\n    }\n  }\n\n  delay(delay) {\n    return this.animate(0, delay);\n  }\n\n  duration() {\n    return this._times * (this._wait + this._duration) - this._wait;\n  }\n\n  during(fn) {\n    return this.queue(null, fn);\n  }\n\n  ease(fn) {\n    this._stepper = new Ease(fn);\n    return this;\n  }\n  /*\n  Runner Definitions\n  ==================\n  These methods help us define the runtime behaviour of the Runner or they\n  help us make new runners from the current runner\n  */\n\n\n  element(element) {\n    if (element == null) return this._element;\n    this._element = element;\n\n    element._prepareRunner();\n\n    return this;\n  }\n\n  finish() {\n    return this.step(Infinity);\n  }\n\n  loop(times, swing, wait) {\n    // Deal with the user passing in an object\n    if (typeof times === 'object') {\n      swing = times.swing;\n      wait = times.wait;\n      times = times.times;\n    } // Sanitise the values and store them\n\n\n    this._times = times || Infinity;\n    this._swing = swing || false;\n    this._wait = wait || 0; // Allow true to be passed\n\n    if (this._times === true) {\n      this._times = Infinity;\n    }\n\n    return this;\n  }\n\n  loops(p) {\n    const loopDuration = this._duration + this._wait;\n\n    if (p == null) {\n      const loopsDone = Math.floor(this._time / loopDuration);\n      const relativeTime = this._time - loopsDone * loopDuration;\n      const position = relativeTime / this._duration;\n      return Math.min(loopsDone + position, this._times);\n    }\n\n    const whole = Math.floor(p);\n    const partial = p % 1;\n    const time = loopDuration * whole + this._duration * partial;\n    return this.time(time);\n  }\n\n  persist(dtOrForever) {\n    if (dtOrForever == null) return this._persist;\n    this._persist = dtOrForever;\n    return this;\n  }\n\n  position(p) {\n    // Get all of the variables we need\n    const x = this._time;\n    const d = this._duration;\n    const w = this._wait;\n    const t = this._times;\n    const s = this._swing;\n    const r = this._reverse;\n    let position;\n\n    if (p == null) {\n      /*\n      This function converts a time to a position in the range [0, 1]\n      The full explanation can be found in this desmos demonstration\n        https://www.desmos.com/calculator/u4fbavgche\n      The logic is slightly simplified here because we can use booleans\n      */\n      // Figure out the value without thinking about the start or end time\n      const f = function (x) {\n        const swinging = s * Math.floor(x % (2 * (w + d)) / (w + d));\n        const backwards = swinging && !r || !swinging && r;\n        const uncliped = Math.pow(-1, backwards) * (x % (w + d)) / d + backwards;\n        const clipped = Math.max(Math.min(uncliped, 1), 0);\n        return clipped;\n      }; // Figure out the value by incorporating the start time\n\n\n      const endTime = t * (w + d) - w;\n      position = x <= 0 ? Math.round(f(1e-5)) : x < endTime ? f(x) : Math.round(f(endTime - 1e-5));\n      return position;\n    } // Work out the loops done and add the position to the loops done\n\n\n    const loopsDone = Math.floor(this.loops());\n    const swingForward = s && loopsDone % 2 === 0;\n    const forwards = swingForward && !r || r && swingForward;\n    position = loopsDone + (forwards ? p : 1 - p);\n    return this.loops(position);\n  }\n\n  progress(p) {\n    if (p == null) {\n      return Math.min(1, this._time / this.duration());\n    }\n\n    return this.time(p * this.duration());\n  }\n  /*\n  Basic Functionality\n  ===================\n  These methods allow us to attach basic functions to the runner directly\n  */\n\n\n  queue(initFn, runFn, retargetFn, isTransform) {\n    this._queue.push({\n      initialiser: initFn || noop,\n      runner: runFn || noop,\n      retarget: retargetFn,\n      isTransform: isTransform,\n      initialised: false,\n      finished: false\n    });\n\n    const timeline = this.timeline();\n    timeline && this.timeline()._continue();\n    return this;\n  }\n\n  reset() {\n    if (this._reseted) return this;\n    this.time(0);\n    this._reseted = true;\n    return this;\n  }\n\n  reverse(reverse) {\n    this._reverse = reverse == null ? !this._reverse : reverse;\n    return this;\n  }\n\n  schedule(timeline, delay, when) {\n    // The user doesn't need to pass a timeline if we already have one\n    if (!(timeline instanceof Timeline)) {\n      when = delay;\n      delay = timeline;\n      timeline = this.timeline();\n    } // If there is no timeline, yell at the user...\n\n\n    if (!timeline) {\n      throw Error('Runner cannot be scheduled without timeline');\n    } // Schedule the runner on the timeline provided\n\n\n    timeline.schedule(this, delay, when);\n    return this;\n  }\n\n  step(dt) {\n    // If we are inactive, this stepper just gets skipped\n    if (!this.enabled) return this; // Update the time and get the new position\n\n    dt = dt == null ? 16 : dt;\n    this._time += dt;\n    const position = this.position(); // Figure out if we need to run the stepper in this frame\n\n    const running = this._lastPosition !== position && this._time >= 0;\n    this._lastPosition = position; // Figure out if we just started\n\n    const duration = this.duration();\n    const justStarted = this._lastTime <= 0 && this._time > 0;\n    const justFinished = this._lastTime < duration && this._time >= duration;\n    this._lastTime = this._time;\n\n    if (justStarted) {\n      this.fire('start', this);\n    } // Work out if the runner is finished set the done flag here so animations\n    // know, that they are running in the last step (this is good for\n    // transformations which can be merged)\n\n\n    const declarative = this._isDeclarative;\n    this.done = !declarative && !justFinished && this._time >= duration; // Runner is running. So its not in reset state anymore\n\n    this._reseted = false;\n    let converged = false; // Call initialise and the run function\n\n    if (running || declarative) {\n      this._initialise(running); // clear the transforms on this runner so they dont get added again and again\n\n\n      this.transforms = new Matrix();\n      converged = this._run(declarative ? dt : position);\n      this.fire('step', this);\n    } // correct the done flag here\n    // declarative animations itself know when they converged\n\n\n    this.done = this.done || converged && declarative;\n\n    if (justFinished) {\n      this.fire('finished', this);\n    }\n\n    return this;\n  }\n  /*\n  Runner animation methods\n  ========================\n  Control how the animation plays\n  */\n\n\n  time(time) {\n    if (time == null) {\n      return this._time;\n    }\n\n    const dt = time - this._time;\n    this.step(dt);\n    return this;\n  }\n\n  timeline(timeline) {\n    // check explicitly for undefined so we can set the timeline to null\n    if (typeof timeline === 'undefined') return this._timeline;\n    this._timeline = timeline;\n    return this;\n  }\n\n  unschedule() {\n    const timeline = this.timeline();\n    timeline && timeline.unschedule(this);\n    return this;\n  } // Run each initialise function in the runner if required\n\n\n  _initialise(running) {\n    // If we aren't running, we shouldn't initialise when not declarative\n    if (!running && !this._isDeclarative) return; // Loop through all of the initialisers\n\n    for (let i = 0, len = this._queue.length; i < len; ++i) {\n      // Get the current initialiser\n      const current = this._queue[i]; // Determine whether we need to initialise\n\n      const needsIt = this._isDeclarative || !current.initialised && running;\n      running = !current.finished; // Call the initialiser if we need to\n\n      if (needsIt && running) {\n        current.initialiser.call(this);\n        current.initialised = true;\n      }\n    }\n  } // Save a morpher to the morpher list so that we can retarget it later\n\n\n  _rememberMorpher(method, morpher) {\n    this._history[method] = {\n      morpher: morpher,\n      caller: this._queue[this._queue.length - 1]\n    }; // We have to resume the timeline in case a controller\n    // is already done without being ever run\n    // This can happen when e.g. this is done:\n    //    anim = el.animate(new SVG.Spring)\n    // and later\n    //    anim.move(...)\n\n    if (this._isDeclarative) {\n      const timeline = this.timeline();\n      timeline && timeline.play();\n    }\n  } // Try to set the target for a morpher if the morpher exists, otherwise\n  // Run each run function for the position or dt given\n\n\n  _run(positionOrDt) {\n    // Run all of the _queue directly\n    let allfinished = true;\n\n    for (let i = 0, len = this._queue.length; i < len; ++i) {\n      // Get the current function to run\n      const current = this._queue[i]; // Run the function if its not finished, we keep track of the finished\n      // flag for the sake of declarative _queue\n\n      const converged = current.runner.call(this, positionOrDt);\n      current.finished = current.finished || converged === true;\n      allfinished = allfinished && current.finished;\n    } // We report when all of the constructors are finished\n\n\n    return allfinished;\n  } // do nothing and return false\n\n\n  _tryRetarget(method, target, extra) {\n    if (this._history[method]) {\n      // if the last method wasn't even initialised, throw it away\n      if (!this._history[method].caller.initialised) {\n        const index = this._queue.indexOf(this._history[method].caller);\n\n        this._queue.splice(index, 1);\n\n        return false;\n      } // for the case of transformations, we use the special retarget function\n      // which has access to the outer scope\n\n\n      if (this._history[method].caller.retarget) {\n        this._history[method].caller.retarget.call(this, target, extra); // for everything else a simple morpher change is sufficient\n\n      } else {\n        this._history[method].morpher.to(target);\n      }\n\n      this._history[method].caller.finished = false;\n      const timeline = this.timeline();\n      timeline && timeline.play();\n      return true;\n    }\n\n    return false;\n  }\n\n}\nRunner.id = 0;\nclass FakeRunner {\n  constructor(transforms = new Matrix(), id = -1, done = true) {\n    this.transforms = transforms;\n    this.id = id;\n    this.done = done;\n  }\n\n  clearTransformsFromQueue() {}\n\n}\nextend([Runner, FakeRunner], {\n  mergeWith(runner) {\n    return new FakeRunner(runner.transforms.lmultiply(this.transforms), runner.id);\n  }\n\n}); // FakeRunner.emptyRunner = new FakeRunner()\n\nconst lmultiply = (last, curr) => last.lmultiplyO(curr);\n\nconst getRunnerTransform = runner => runner.transforms;\n\nfunction mergeTransforms() {\n  // Find the matrix to apply to the element and apply it\n  const runners = this._transformationRunners.runners;\n  const netTransform = runners.map(getRunnerTransform).reduce(lmultiply, new Matrix());\n  this.transform(netTransform);\n\n  this._transformationRunners.merge();\n\n  if (this._transformationRunners.length() === 1) {\n    this._frameId = null;\n  }\n}\n\nclass RunnerArray {\n  constructor() {\n    this.runners = [];\n    this.ids = [];\n  }\n\n  add(runner) {\n    if (this.runners.includes(runner)) return;\n    const id = runner.id + 1;\n    this.runners.push(runner);\n    this.ids.push(id);\n    return this;\n  }\n\n  clearBefore(id) {\n    const deleteCnt = this.ids.indexOf(id + 1) || 1;\n    this.ids.splice(0, deleteCnt, 0);\n    this.runners.splice(0, deleteCnt, new FakeRunner()).forEach(r => r.clearTransformsFromQueue());\n    return this;\n  }\n\n  edit(id, newRunner) {\n    const index = this.ids.indexOf(id + 1);\n    this.ids.splice(index, 1, id + 1);\n    this.runners.splice(index, 1, newRunner);\n    return this;\n  }\n\n  getByID(id) {\n    return this.runners[this.ids.indexOf(id + 1)];\n  }\n\n  length() {\n    return this.ids.length;\n  }\n\n  merge() {\n    let lastRunner = null;\n\n    for (let i = 0; i < this.runners.length; ++i) {\n      const runner = this.runners[i];\n      const condition = lastRunner && runner.done && lastRunner.done // don't merge runner when persisted on timeline\n      && (!runner._timeline || !runner._timeline._runnerIds.includes(runner.id)) && (!lastRunner._timeline || !lastRunner._timeline._runnerIds.includes(lastRunner.id));\n\n      if (condition) {\n        // the +1 happens in the function\n        this.remove(runner.id);\n        const newRunner = runner.mergeWith(lastRunner);\n        this.edit(lastRunner.id, newRunner);\n        lastRunner = newRunner;\n        --i;\n      } else {\n        lastRunner = runner;\n      }\n    }\n\n    return this;\n  }\n\n  remove(id) {\n    const index = this.ids.indexOf(id + 1);\n    this.ids.splice(index, 1);\n    this.runners.splice(index, 1);\n    return this;\n  }\n\n}\nregisterMethods({\n  Element: {\n    animate(duration, delay, when) {\n      const o = Runner.sanitise(duration, delay, when);\n      const timeline = this.timeline();\n      return new Runner(o.duration).loop(o).element(this).timeline(timeline.play()).schedule(o.delay, o.when);\n    },\n\n    delay(by, when) {\n      return this.animate(0, by, when);\n    },\n\n    // this function searches for all runners on the element and deletes the ones\n    // which run before the current one. This is because absolute transformations\n    // overwrite anything anyway so there is no need to waste time computing\n    // other runners\n    _clearTransformRunnersBefore(currentRunner) {\n      this._transformationRunners.clearBefore(currentRunner.id);\n    },\n\n    _currentTransform(current) {\n      return this._transformationRunners.runners // we need the equal sign here to make sure, that also transformations\n      // on the same runner which execute before the current transformation are\n      // taken into account\n      .filter(runner => runner.id <= current.id).map(getRunnerTransform).reduce(lmultiply, new Matrix());\n    },\n\n    _addRunner(runner) {\n      this._transformationRunners.add(runner); // Make sure that the runner merge is executed at the very end of\n      // all Animator functions. That is why we use immediate here to execute\n      // the merge right after all frames are run\n\n\n      Animator.cancelImmediate(this._frameId);\n      this._frameId = Animator.immediate(mergeTransforms.bind(this));\n    },\n\n    _prepareRunner() {\n      if (this._frameId == null) {\n        this._transformationRunners = new RunnerArray().add(new FakeRunner(new Matrix(this)));\n      }\n    }\n\n  }\n}); // Will output the elements from array A that are not in the array B\n\nconst difference = (a, b) => a.filter(x => !b.includes(x));\n\nextend(Runner, {\n  attr(a, v) {\n    return this.styleAttr('attr', a, v);\n  },\n\n  // Add animatable styles\n  css(s, v) {\n    return this.styleAttr('css', s, v);\n  },\n\n  styleAttr(type, nameOrAttrs, val) {\n    if (typeof nameOrAttrs === 'string') {\n      return this.styleAttr(type, {\n        [nameOrAttrs]: val\n      });\n    }\n\n    let attrs = nameOrAttrs;\n    if (this._tryRetarget(type, attrs)) return this;\n    let morpher = new Morphable(this._stepper).to(attrs);\n    let keys = Object.keys(attrs);\n    this.queue(function () {\n      morpher = morpher.from(this.element()[type](keys));\n    }, function (pos) {\n      this.element()[type](morpher.at(pos).valueOf());\n      return morpher.done();\n    }, function (newToAttrs) {\n      // Check if any new keys were added\n      const newKeys = Object.keys(newToAttrs);\n      const differences = difference(newKeys, keys); // If their are new keys, initialize them and add them to morpher\n\n      if (differences.length) {\n        // Get the values\n        const addedFromAttrs = this.element()[type](differences); // Get the already initialized values\n\n        const oldFromAttrs = new ObjectBag(morpher.from()).valueOf(); // Merge old and new\n\n        Object.assign(oldFromAttrs, addedFromAttrs);\n        morpher.from(oldFromAttrs);\n      } // Get the object from the morpher\n\n\n      const oldToAttrs = new ObjectBag(morpher.to()).valueOf(); // Merge in new attributes\n\n      Object.assign(oldToAttrs, newToAttrs); // Change morpher target\n\n      morpher.to(oldToAttrs); // Make sure that we save the work we did so we don't need it to do again\n\n      keys = newKeys;\n      attrs = newToAttrs;\n    });\n\n    this._rememberMorpher(type, morpher);\n\n    return this;\n  },\n\n  zoom(level, point) {\n    if (this._tryRetarget('zoom', level, point)) return this;\n    let morpher = new Morphable(this._stepper).to(new SVGNumber(level));\n    this.queue(function () {\n      morpher = morpher.from(this.element().zoom());\n    }, function (pos) {\n      this.element().zoom(morpher.at(pos), point);\n      return morpher.done();\n    }, function (newLevel, newPoint) {\n      point = newPoint;\n      morpher.to(newLevel);\n    });\n\n    this._rememberMorpher('zoom', morpher);\n\n    return this;\n  },\n\n  /**\n   ** absolute transformations\n   **/\n  //\n  // M v -----|-----(D M v = F v)------|----->  T v\n  //\n  // 1. define the final state (T) and decompose it (once)\n  //    t = [tx, ty, the, lam, sy, sx]\n  // 2. on every frame: pull the current state of all previous transforms\n  //    (M - m can change)\n  //   and then write this as m = [tx0, ty0, the0, lam0, sy0, sx0]\n  // 3. Find the interpolated matrix F(pos) = m + pos * (t - m)\n  //   - Note F(0) = M\n  //   - Note F(1) = T\n  // 4. Now you get the delta matrix as a result: D = F * inv(M)\n  transform(transforms, relative, affine) {\n    // If we have a declarative function, we should retarget it if possible\n    relative = transforms.relative || relative;\n\n    if (this._isDeclarative && !relative && this._tryRetarget('transform', transforms)) {\n      return this;\n    } // Parse the parameters\n\n\n    const isMatrix = Matrix.isMatrixLike(transforms);\n    affine = transforms.affine != null ? transforms.affine : affine != null ? affine : !isMatrix; // Create a morpher and set its type\n\n    const morpher = new Morphable(this._stepper).type(affine ? TransformBag : Matrix);\n    let origin;\n    let element;\n    let current;\n    let currentAngle;\n    let startTransform;\n\n    function setup() {\n      // make sure element and origin is defined\n      element = element || this.element();\n      origin = origin || getOrigin(transforms, element);\n      startTransform = new Matrix(relative ? undefined : element); // add the runner to the element so it can merge transformations\n\n      element._addRunner(this); // Deactivate all transforms that have run so far if we are absolute\n\n\n      if (!relative) {\n        element._clearTransformRunnersBefore(this);\n      }\n    }\n\n    function run(pos) {\n      // clear all other transforms before this in case something is saved\n      // on this runner. We are absolute. We dont need these!\n      if (!relative) this.clearTransform();\n      const {\n        x,\n        y\n      } = new Point(origin).transform(element._currentTransform(this));\n      let target = new Matrix({ ...transforms,\n        origin: [x, y]\n      });\n      let start = this._isDeclarative && current ? current : startTransform;\n\n      if (affine) {\n        target = target.decompose(x, y);\n        start = start.decompose(x, y); // Get the current and target angle as it was set\n\n        const rTarget = target.rotate;\n        const rCurrent = start.rotate; // Figure out the shortest path to rotate directly\n\n        const possibilities = [rTarget - 360, rTarget, rTarget + 360];\n        const distances = possibilities.map(a => Math.abs(a - rCurrent));\n        const shortest = Math.min(...distances);\n        const index = distances.indexOf(shortest);\n        target.rotate = possibilities[index];\n      }\n\n      if (relative) {\n        // we have to be careful here not to overwrite the rotation\n        // with the rotate method of Matrix\n        if (!isMatrix) {\n          target.rotate = transforms.rotate || 0;\n        }\n\n        if (this._isDeclarative && currentAngle) {\n          start.rotate = currentAngle;\n        }\n      }\n\n      morpher.from(start);\n      morpher.to(target);\n      const affineParameters = morpher.at(pos);\n      currentAngle = affineParameters.rotate;\n      current = new Matrix(affineParameters);\n      this.addTransform(current);\n\n      element._addRunner(this);\n\n      return morpher.done();\n    }\n\n    function retarget(newTransforms) {\n      // only get a new origin if it changed since the last call\n      if ((newTransforms.origin || 'center').toString() !== (transforms.origin || 'center').toString()) {\n        origin = getOrigin(newTransforms, element);\n      } // overwrite the old transformations with the new ones\n\n\n      transforms = { ...newTransforms,\n        origin\n      };\n    }\n\n    this.queue(setup, run, retarget, true);\n    this._isDeclarative && this._rememberMorpher('transform', morpher);\n    return this;\n  },\n\n  // Animatable x-axis\n  x(x, relative) {\n    return this._queueNumber('x', x);\n  },\n\n  // Animatable y-axis\n  y(y) {\n    return this._queueNumber('y', y);\n  },\n\n  dx(x = 0) {\n    return this._queueNumberDelta('x', x);\n  },\n\n  dy(y = 0) {\n    return this._queueNumberDelta('y', y);\n  },\n\n  dmove(x, y) {\n    return this.dx(x).dy(y);\n  },\n\n  _queueNumberDelta(method, to) {\n    to = new SVGNumber(to); // Try to change the target if we have this method already registered\n\n    if (this._tryRetarget(method, to)) return this; // Make a morpher and queue the animation\n\n    const morpher = new Morphable(this._stepper).to(to);\n    let from = null;\n    this.queue(function () {\n      from = this.element()[method]();\n      morpher.from(from);\n      morpher.to(from + to);\n    }, function (pos) {\n      this.element()[method](morpher.at(pos));\n      return morpher.done();\n    }, function (newTo) {\n      morpher.to(from + new SVGNumber(newTo));\n    }); // Register the morpher so that if it is changed again, we can retarget it\n\n    this._rememberMorpher(method, morpher);\n\n    return this;\n  },\n\n  _queueObject(method, to) {\n    // Try to change the target if we have this method already registered\n    if (this._tryRetarget(method, to)) return this; // Make a morpher and queue the animation\n\n    const morpher = new Morphable(this._stepper).to(to);\n    this.queue(function () {\n      morpher.from(this.element()[method]());\n    }, function (pos) {\n      this.element()[method](morpher.at(pos));\n      return morpher.done();\n    }); // Register the morpher so that if it is changed again, we can retarget it\n\n    this._rememberMorpher(method, morpher);\n\n    return this;\n  },\n\n  _queueNumber(method, value) {\n    return this._queueObject(method, new SVGNumber(value));\n  },\n\n  // Animatable center x-axis\n  cx(x) {\n    return this._queueNumber('cx', x);\n  },\n\n  // Animatable center y-axis\n  cy(y) {\n    return this._queueNumber('cy', y);\n  },\n\n  // Add animatable move\n  move(x, y) {\n    return this.x(x).y(y);\n  },\n\n  // Add animatable center\n  center(x, y) {\n    return this.cx(x).cy(y);\n  },\n\n  // Add animatable size\n  size(width, height) {\n    // animate bbox based size for all other elements\n    let box;\n\n    if (!width || !height) {\n      box = this._element.bbox();\n    }\n\n    if (!width) {\n      width = box.width / box.height * height;\n    }\n\n    if (!height) {\n      height = box.height / box.width * width;\n    }\n\n    return this.width(width).height(height);\n  },\n\n  // Add animatable width\n  width(width) {\n    return this._queueNumber('width', width);\n  },\n\n  // Add animatable height\n  height(height) {\n    return this._queueNumber('height', height);\n  },\n\n  // Add animatable plot\n  plot(a, b, c, d) {\n    // Lines can be plotted with 4 arguments\n    if (arguments.length === 4) {\n      return this.plot([a, b, c, d]);\n    }\n\n    if (this._tryRetarget('plot', a)) return this;\n    const morpher = new Morphable(this._stepper).type(this._element.MorphArray).to(a);\n    this.queue(function () {\n      morpher.from(this._element.array());\n    }, function (pos) {\n      this._element.plot(morpher.at(pos));\n\n      return morpher.done();\n    });\n\n    this._rememberMorpher('plot', morpher);\n\n    return this;\n  },\n\n  // Add leading method\n  leading(value) {\n    return this._queueNumber('leading', value);\n  },\n\n  // Add animatable viewbox\n  viewbox(x, y, width, height) {\n    return this._queueObject('viewbox', new Box(x, y, width, height));\n  },\n\n  update(o) {\n    if (typeof o !== 'object') {\n      return this.update({\n        offset: arguments[0],\n        color: arguments[1],\n        opacity: arguments[2]\n      });\n    }\n\n    if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n    if (o.color != null) this.attr('stop-color', o.color);\n    if (o.offset != null) this.attr('offset', o.offset);\n    return this;\n  }\n\n});\nextend(Runner, {\n  rx,\n  ry,\n  from,\n  to\n});\nregister(Runner, 'Runner');\n\nclass Svg extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('svg', node), attrs);\n    this.namespace();\n  } // Creates and returns defs element\n\n\n  defs() {\n    if (!this.isRoot()) return this.root().defs();\n    return adopt(this.node.querySelector('defs')) || this.put(new Defs());\n  }\n\n  isRoot() {\n    return !this.node.parentNode || !(this.node.parentNode instanceof globals.window.SVGElement) && this.node.parentNode.nodeName !== '#document-fragment';\n  } // Add namespaces\n\n\n  namespace() {\n    if (!this.isRoot()) return this.root().namespace();\n    return this.attr({\n      xmlns: svg,\n      version: '1.1'\n    }).attr('xmlns:xlink', xlink, xmlns).attr('xmlns:svgjs', svgjs, xmlns);\n  }\n\n  removeNamespace() {\n    return this.attr({\n      xmlns: null,\n      version: null\n    }).attr('xmlns:xlink', null, xmlns).attr('xmlns:svgjs', null, xmlns);\n  } // Check if this is a root svg\n  // If not, call root() from this element\n\n\n  root() {\n    if (this.isRoot()) return this;\n    return super.root();\n  }\n\n}\nregisterMethods({\n  Container: {\n    // Create nested svg document\n    nested: wrapWithAttrCheck(function () {\n      return this.put(new Svg());\n    })\n  }\n});\nregister(Svg, 'Svg', true);\n\nclass Symbol extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('symbol', node), attrs);\n  }\n\n}\nregisterMethods({\n  Container: {\n    symbol: wrapWithAttrCheck(function () {\n      return this.put(new Symbol());\n    })\n  }\n});\nregister(Symbol, 'Symbol');\n\nfunction plain(text) {\n  // clear if build mode is disabled\n  if (this._build === false) {\n    this.clear();\n  } // create text node\n\n\n  this.node.appendChild(globals.document.createTextNode(text));\n  return this;\n} // Get length of text element\n\nfunction length() {\n  return this.node.getComputedTextLength();\n} // Move over x-axis\n// Text is moved by its bounding box\n// text-anchor does NOT matter\n\nfunction x$1(x, box = this.bbox()) {\n  if (x == null) {\n    return box.x;\n  }\n\n  return this.attr('x', this.attr('x') + x - box.x);\n} // Move over y-axis\n\nfunction y$1(y, box = this.bbox()) {\n  if (y == null) {\n    return box.y;\n  }\n\n  return this.attr('y', this.attr('y') + y - box.y);\n}\nfunction move$1(x, y, box = this.bbox()) {\n  return this.x(x, box).y(y, box);\n} // Move center over x-axis\n\nfunction cx(x, box = this.bbox()) {\n  if (x == null) {\n    return box.cx;\n  }\n\n  return this.attr('x', this.attr('x') + x - box.cx);\n} // Move center over y-axis\n\nfunction cy(y, box = this.bbox()) {\n  if (y == null) {\n    return box.cy;\n  }\n\n  return this.attr('y', this.attr('y') + y - box.cy);\n}\nfunction center(x, y, box = this.bbox()) {\n  return this.cx(x, box).cy(y, box);\n}\nfunction ax(x) {\n  return this.attr('x', x);\n}\nfunction ay(y) {\n  return this.attr('y', y);\n}\nfunction amove(x, y) {\n  return this.ax(x).ay(y);\n} // Enable / disable build mode\n\nfunction build(build) {\n  this._build = !!build;\n  return this;\n}\n\nvar textable = {\n  __proto__: null,\n  plain: plain,\n  length: length,\n  x: x$1,\n  y: y$1,\n  move: move$1,\n  cx: cx,\n  cy: cy,\n  center: center,\n  ax: ax,\n  ay: ay,\n  amove: amove,\n  build: build\n};\n\nclass Text extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('text', node), attrs);\n    this.dom.leading = new SVGNumber(1.3); // store leading value for rebuilding\n\n    this._rebuild = true; // enable automatic updating of dy values\n\n    this._build = false; // disable build mode for adding multiple lines\n  } // Set / get leading\n\n\n  leading(value) {\n    // act as getter\n    if (value == null) {\n      return this.dom.leading;\n    } // act as setter\n\n\n    this.dom.leading = new SVGNumber(value);\n    return this.rebuild();\n  } // Rebuild appearance type\n\n\n  rebuild(rebuild) {\n    // store new rebuild flag if given\n    if (typeof rebuild === 'boolean') {\n      this._rebuild = rebuild;\n    } // define position of all lines\n\n\n    if (this._rebuild) {\n      const self = this;\n      let blankLineOffset = 0;\n      const leading = this.dom.leading;\n      this.each(function (i) {\n        const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n        const dy = leading * new SVGNumber(fontSize);\n\n        if (this.dom.newLined) {\n          this.attr('x', self.attr('x'));\n\n          if (this.text() === '\\n') {\n            blankLineOffset += dy;\n          } else {\n            this.attr('dy', i ? dy + blankLineOffset : 0);\n            blankLineOffset = 0;\n          }\n        }\n      });\n      this.fire('rebuild');\n    }\n\n    return this;\n  } // overwrite method from parent to set data properly\n\n\n  setData(o) {\n    this.dom = o;\n    this.dom.leading = new SVGNumber(o.leading || 1.3);\n    return this;\n  } // Set the text content\n\n\n  text(text) {\n    // act as getter\n    if (text === undefined) {\n      const children = this.node.childNodes;\n      let firstLine = 0;\n      text = '';\n\n      for (let i = 0, len = children.length; i < len; ++i) {\n        // skip textPaths - they are no lines\n        if (children[i].nodeName === 'textPath') {\n          if (i === 0) firstLine = 1;\n          continue;\n        } // add newline if its not the first child and newLined is set to true\n\n\n        if (i !== firstLine && children[i].nodeType !== 3 && adopt(children[i]).dom.newLined === true) {\n          text += '\\n';\n        } // add content of this node\n\n\n        text += children[i].textContent;\n      }\n\n      return text;\n    } // remove existing content\n\n\n    this.clear().build(true);\n\n    if (typeof text === 'function') {\n      // call block\n      text.call(this, this);\n    } else {\n      // store text and make sure text is not blank\n      text = (text + '').split('\\n'); // build new lines\n\n      for (let j = 0, jl = text.length; j < jl; j++) {\n        this.newLine(text[j]);\n      }\n    } // disable build mode and rebuild lines\n\n\n    return this.build(false).rebuild();\n  }\n\n}\nextend(Text, textable);\nregisterMethods({\n  Container: {\n    // Create text element\n    text: wrapWithAttrCheck(function (text = '') {\n      return this.put(new Text()).text(text);\n    }),\n    // Create plain text element\n    plain: wrapWithAttrCheck(function (text = '') {\n      return this.put(new Text()).plain(text);\n    })\n  }\n});\nregister(Text, 'Text');\n\nclass Tspan extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('tspan', node), attrs);\n    this._build = false; // disable build mode for adding multiple lines\n  } // Shortcut dx\n\n\n  dx(dx) {\n    return this.attr('dx', dx);\n  } // Shortcut dy\n\n\n  dy(dy) {\n    return this.attr('dy', dy);\n  } // Create new line\n\n\n  newLine() {\n    // mark new line\n    this.dom.newLined = true; // fetch parent\n\n    const text = this.parent(); // early return in case we are not in a text element\n\n    if (!(text instanceof Text)) {\n      return this;\n    }\n\n    const i = text.index(this);\n    const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n    const dy = text.dom.leading * new SVGNumber(fontSize); // apply new position\n\n    return this.dy(i ? dy : 0).attr('x', text.x());\n  } // Set text content\n\n\n  text(text) {\n    if (text == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '');\n\n    if (typeof text === 'function') {\n      this.clear().build(true);\n      text.call(this, this);\n      this.build(false);\n    } else {\n      this.plain(text);\n    }\n\n    return this;\n  }\n\n}\nextend(Tspan, textable);\nregisterMethods({\n  Tspan: {\n    tspan: wrapWithAttrCheck(function (text = '') {\n      const tspan = new Tspan(); // clear if build mode is disabled\n\n      if (!this._build) {\n        this.clear();\n      } // add new tspan\n\n\n      return this.put(tspan).text(text);\n    })\n  },\n  Text: {\n    newLine: function (text = '') {\n      return this.tspan(text).newLine();\n    }\n  }\n});\nregister(Tspan, 'Tspan');\n\nclass Circle extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('circle', node), attrs);\n  }\n\n  radius(r) {\n    return this.attr('r', r);\n  } // Radius x value\n\n\n  rx(rx) {\n    return this.attr('r', rx);\n  } // Alias radius x value\n\n\n  ry(ry) {\n    return this.rx(ry);\n  }\n\n  size(size) {\n    return this.radius(new SVGNumber(size).divide(2));\n  }\n\n}\nextend(Circle, {\n  x: x$3,\n  y: y$3,\n  cx: cx$1,\n  cy: cy$1,\n  width: width$2,\n  height: height$2\n});\nregisterMethods({\n  Container: {\n    // Create circle element\n    circle: wrapWithAttrCheck(function (size = 0) {\n      return this.put(new Circle()).size(size).move(0, 0);\n    })\n  }\n});\nregister(Circle, 'Circle');\n\nclass ClipPath extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('clipPath', node), attrs);\n  } // Unclip all clipped elements and remove itself\n\n\n  remove() {\n    // unclip all targets\n    this.targets().forEach(function (el) {\n      el.unclip();\n    }); // remove clipPath from parent\n\n    return super.remove();\n  }\n\n  targets() {\n    return baseFind('svg [clip-path*=' + this.id() + ']');\n  }\n\n}\nregisterMethods({\n  Container: {\n    // Create clipping element\n    clip: wrapWithAttrCheck(function () {\n      return this.defs().put(new ClipPath());\n    })\n  },\n  Element: {\n    // Distribute clipPath to svg element\n    clipper() {\n      return this.reference('clip-path');\n    },\n\n    clipWith(element) {\n      // use given clip or create a new one\n      const clipper = element instanceof ClipPath ? element : this.parent().clip().add(element); // apply mask\n\n      return this.attr('clip-path', 'url(#' + clipper.id() + ')');\n    },\n\n    // Unclip element\n    unclip() {\n      return this.attr('clip-path', null);\n    }\n\n  }\n});\nregister(ClipPath, 'ClipPath');\n\nclass ForeignObject extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('foreignObject', node), attrs);\n  }\n\n}\nregisterMethods({\n  Container: {\n    foreignObject: wrapWithAttrCheck(function (width, height) {\n      return this.put(new ForeignObject()).size(width, height);\n    })\n  }\n});\nregister(ForeignObject, 'ForeignObject');\n\nfunction dmove(dx, dy) {\n  this.children().forEach((child, i) => {\n    let bbox; // We have to wrap this for elements that dont have a bbox\n    // e.g. title and other descriptive elements\n\n    try {\n      // Get the childs bbox\n      bbox = child.bbox();\n    } catch (e) {\n      return;\n    } // Get childs matrix\n\n\n    const m = new Matrix(child); // Translate childs matrix by amount and\n    // transform it back into parents space\n\n    const matrix = m.translate(dx, dy).transform(m.inverse()); // Calculate new x and y from old box\n\n    const p = new Point(bbox.x, bbox.y).transform(matrix); // Move element\n\n    child.move(p.x, p.y);\n  });\n  return this;\n}\nfunction dx(dx) {\n  return this.dmove(dx, 0);\n}\nfunction dy(dy) {\n  return this.dmove(0, dy);\n}\nfunction height(height, box = this.bbox()) {\n  if (height == null) return box.height;\n  return this.size(box.width, height, box);\n}\nfunction move(x = 0, y = 0, box = this.bbox()) {\n  const dx = x - box.x;\n  const dy = y - box.y;\n  return this.dmove(dx, dy);\n}\nfunction size(width, height, box = this.bbox()) {\n  const p = proportionalSize(this, width, height, box);\n  const scaleX = p.width / box.width;\n  const scaleY = p.height / box.height;\n  this.children().forEach((child, i) => {\n    const o = new Point(box).transform(new Matrix(child).inverse());\n    child.scale(scaleX, scaleY, o.x, o.y);\n  });\n  return this;\n}\nfunction width(width, box = this.bbox()) {\n  if (width == null) return box.width;\n  return this.size(width, box.height, box);\n}\nfunction x(x, box = this.bbox()) {\n  if (x == null) return box.x;\n  return this.move(x, box.y, box);\n}\nfunction y(y, box = this.bbox()) {\n  if (y == null) return box.y;\n  return this.move(box.x, y, box);\n}\n\nvar containerGeometry = {\n  __proto__: null,\n  dmove: dmove,\n  dx: dx,\n  dy: dy,\n  height: height,\n  move: move,\n  size: size,\n  width: width,\n  x: x,\n  y: y\n};\n\nclass G extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('g', node), attrs);\n  }\n\n}\nextend(G, containerGeometry);\nregisterMethods({\n  Container: {\n    // Create a group element\n    group: wrapWithAttrCheck(function () {\n      return this.put(new G());\n    })\n  }\n});\nregister(G, 'G');\n\nclass A extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('a', node), attrs);\n  } // Link target attribute\n\n\n  target(target) {\n    return this.attr('target', target);\n  } // Link url\n\n\n  to(url) {\n    return this.attr('href', url, xlink);\n  }\n\n}\nextend(A, containerGeometry);\nregisterMethods({\n  Container: {\n    // Create a hyperlink element\n    link: wrapWithAttrCheck(function (url) {\n      return this.put(new A()).to(url);\n    })\n  },\n  Element: {\n    unlink() {\n      const link = this.linker();\n      if (!link) return this;\n      const parent = link.parent();\n\n      if (!parent) {\n        return this.remove();\n      }\n\n      const index = parent.index(link);\n      parent.add(this, index);\n      link.remove();\n      return this;\n    },\n\n    linkTo(url) {\n      // reuse old link if possible\n      let link = this.linker();\n\n      if (!link) {\n        link = new A();\n        this.wrap(link);\n      }\n\n      if (typeof url === 'function') {\n        url.call(link, link);\n      } else {\n        link.to(url);\n      }\n\n      return this;\n    },\n\n    linker() {\n      const link = this.parent();\n\n      if (link && link.node.nodeName.toLowerCase() === 'a') {\n        return link;\n      }\n\n      return null;\n    }\n\n  }\n});\nregister(A, 'A');\n\nclass Mask extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('mask', node), attrs);\n  } // Unmask all masked elements and remove itself\n\n\n  remove() {\n    // unmask all targets\n    this.targets().forEach(function (el) {\n      el.unmask();\n    }); // remove mask from parent\n\n    return super.remove();\n  }\n\n  targets() {\n    return baseFind('svg [mask*=' + this.id() + ']');\n  }\n\n}\nregisterMethods({\n  Container: {\n    mask: wrapWithAttrCheck(function () {\n      return this.defs().put(new Mask());\n    })\n  },\n  Element: {\n    // Distribute mask to svg element\n    masker() {\n      return this.reference('mask');\n    },\n\n    maskWith(element) {\n      // use given mask or create a new one\n      const masker = element instanceof Mask ? element : this.parent().mask().add(element); // apply mask\n\n      return this.attr('mask', 'url(#' + masker.id() + ')');\n    },\n\n    // Unmask element\n    unmask() {\n      return this.attr('mask', null);\n    }\n\n  }\n});\nregister(Mask, 'Mask');\n\nclass Stop extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('stop', node), attrs);\n  } // add color stops\n\n\n  update(o) {\n    if (typeof o === 'number' || o instanceof SVGNumber) {\n      o = {\n        offset: arguments[0],\n        color: arguments[1],\n        opacity: arguments[2]\n      };\n    } // set attributes\n\n\n    if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n    if (o.color != null) this.attr('stop-color', o.color);\n    if (o.offset != null) this.attr('offset', new SVGNumber(o.offset));\n    return this;\n  }\n\n}\nregisterMethods({\n  Gradient: {\n    // Add a color stop\n    stop: function (offset, color, opacity) {\n      return this.put(new Stop()).update(offset, color, opacity);\n    }\n  }\n});\nregister(Stop, 'Stop');\n\nfunction cssRule(selector, rule) {\n  if (!selector) return '';\n  if (!rule) return selector;\n  let ret = selector + '{';\n\n  for (const i in rule) {\n    ret += unCamelCase(i) + ':' + rule[i] + ';';\n  }\n\n  ret += '}';\n  return ret;\n}\n\nclass Style extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('style', node), attrs);\n  }\n\n  addText(w = '') {\n    this.node.textContent += w;\n    return this;\n  }\n\n  font(name, src, params = {}) {\n    return this.rule('@font-face', {\n      fontFamily: name,\n      src: src,\n      ...params\n    });\n  }\n\n  rule(selector, obj) {\n    return this.addText(cssRule(selector, obj));\n  }\n\n}\nregisterMethods('Dom', {\n  style(selector, obj) {\n    return this.put(new Style()).rule(selector, obj);\n  },\n\n  fontface(name, src, params) {\n    return this.put(new Style()).font(name, src, params);\n  }\n\n});\nregister(Style, 'Style');\n\nclass TextPath extends Text {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('textPath', node), attrs);\n  } // return the array of the path track element\n\n\n  array() {\n    const track = this.track();\n    return track ? track.array() : null;\n  } // Plot path if any\n\n\n  plot(d) {\n    const track = this.track();\n    let pathArray = null;\n\n    if (track) {\n      pathArray = track.plot(d);\n    }\n\n    return d == null ? pathArray : this;\n  } // Get the path element\n\n\n  track() {\n    return this.reference('href');\n  }\n\n}\nregisterMethods({\n  Container: {\n    textPath: wrapWithAttrCheck(function (text, path) {\n      // Convert text to instance if needed\n      if (!(text instanceof Text)) {\n        text = this.text(text);\n      }\n\n      return text.path(path);\n    })\n  },\n  Text: {\n    // Create path for text to run on\n    path: wrapWithAttrCheck(function (track, importNodes = true) {\n      const textPath = new TextPath(); // if track is a path, reuse it\n\n      if (!(track instanceof Path)) {\n        // create path element\n        track = this.defs().path(track);\n      } // link textPath to path and add content\n\n\n      textPath.attr('href', '#' + track, xlink); // Transplant all nodes from text to textPath\n\n      let node;\n\n      if (importNodes) {\n        while (node = this.node.firstChild) {\n          textPath.node.appendChild(node);\n        }\n      } // add textPath element as child node and return textPath\n\n\n      return this.put(textPath);\n    }),\n\n    // Get the textPath children\n    textPath() {\n      return this.findOne('textPath');\n    }\n\n  },\n  Path: {\n    // creates a textPath from this path\n    text: wrapWithAttrCheck(function (text) {\n      // Convert text to instance if needed\n      if (!(text instanceof Text)) {\n        text = new Text().addTo(this.parent()).text(text);\n      } // Create textPath from text and path and return\n\n\n      return text.path(this);\n    }),\n\n    targets() {\n      return baseFind('svg textPath').filter(node => {\n        return (node.attr('href') || '').includes(this.id());\n      }); // Does not work in IE11. Use when IE support is dropped\n      // return baseFind('svg textPath[*|href*=' + this.id() + ']')\n    }\n\n  }\n});\nTextPath.prototype.MorphArray = PathArray;\nregister(TextPath, 'TextPath');\n\nclass Use extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('use', node), attrs);\n  } // Use element as a reference\n\n\n  use(element, file) {\n    // Set lined element\n    return this.attr('href', (file || '') + '#' + element, xlink);\n  }\n\n}\nregisterMethods({\n  Container: {\n    // Create a use element\n    use: wrapWithAttrCheck(function (element, file) {\n      return this.put(new Use()).use(element, file);\n    })\n  }\n});\nregister(Use, 'Use');\n\n/* Optional Modules */\nconst SVG = makeInstance;\nextend([Svg, Symbol, Image, Pattern, Marker], getMethodsFor('viewbox'));\nextend([Line, Polyline, Polygon, Path], getMethodsFor('marker'));\nextend(Text, getMethodsFor('Text'));\nextend(Path, getMethodsFor('Path'));\nextend(Defs, getMethodsFor('Defs'));\nextend([Text, Tspan], getMethodsFor('Tspan'));\nextend([Rect, Ellipse, Gradient, Runner], getMethodsFor('radius'));\nextend(EventTarget, getMethodsFor('EventTarget'));\nextend(Dom, getMethodsFor('Dom'));\nextend(Element, getMethodsFor('Element'));\nextend(Shape, getMethodsFor('Shape'));\nextend([Container, Fragment], getMethodsFor('Container'));\nextend(Gradient, getMethodsFor('Gradient'));\nextend(Runner, getMethodsFor('Runner'));\nList.extend(getMethodNames());\nregisterMorphableType([SVGNumber, Color, Box, Matrix, SVGArray, PointArray, PathArray, Point]);\nmakeMorphable();\n\nexport { A, Animator, SVGArray as Array, Box, Circle, ClipPath, Color, Container, Controller, Defs, Dom, Ease, Element, Ellipse, EventTarget, ForeignObject, Fragment, G, Gradient, Image, Line, List, Marker, Mask, Matrix, Morphable, NonMorphable, SVGNumber as Number, ObjectBag, PID, Path, PathArray, Pattern, Point, PointArray, Polygon, Polyline, Queue, Rect, Runner, SVG, Shape, Spring, Stop, Style, Svg, Symbol, Text, TextPath, Timeline, TransformBag, Tspan, Use, adopt, assignNewId, clearEvents, create, defaults, dispatch, easing, eid, extend, baseFind as find, getClass, getEventTarget, getEvents, getWindow, makeInstance, makeMorphable, mockAdopt, namespaces, nodeOrNew, off, on, parser, regex, register, registerMorphableType, registerWindow, restoreWindow, root, saveWindow, utils, windowEvents, withWindow, wrapWithAttrCheck };\n//# sourceMappingURL=svg.esm.js.map\n","\r\nimport { Path, Shape, extend } from '@svgdotjs/svg.js'\n\n// Normalise attributes\nconst normaliseAttributes = (attr) => {\n  for (const a in attr) {\n    if (!/fill|stroke|opacity|transform/.test(a)) { delete attr[a] }\n  }\n\n  return attr\n}\n\nextend(Shape, {\r\n  // Convert element to path\r\n  toPath (replace = true) {\r\n    var d\r\n\r\n    switch (this.type) {\r\n    case 'rect': {\r\n      let {\r\n        width: w,\r\n        height: h,\r\n        rx,\r\n        ry,\r\n        x,\r\n        y\r\n      } = this.attr(['width', 'height', 'rx', 'ry', 'x', 'y'])\r\n\r\n      // normalise radius values, just like the original does it (or should do)\r\n      if (rx < 0) rx = 0\r\n      if (ry < 0) ry = 0\r\n      rx = rx || ry\r\n      ry = ry || rx\r\n      if (rx > w / 2) rx = w / 2\r\n      if (ry > h / 2) ry = h / 2\r\n\r\n      if (rx && ry) {\r\n        // if there are round corners\r\n\r\n        d = [\r\n          ['M', rx + x, y],\r\n          ['h', w - 2 * rx],\r\n          ['a', rx, ry, 0, 0, 1, rx, ry],\r\n          ['v', h - 2 * ry],\r\n          ['a', rx, ry, 0, 0, 1, -rx, ry],\r\n          ['h', -w + 2 * rx],\r\n          ['a', rx, ry, 0, 0, 1, -rx, -ry],\r\n          ['v', -h + 2 * ry],\r\n          ['a', rx, ry, 0, 0, 1, rx, -ry],\r\n          ['z']\r\n        ]\r\n      } else {\r\n        // no round corners, no need to draw arcs\r\n        d = [\r\n          ['M', x, y],\r\n          ['h', w],\r\n          ['v', h],\r\n          ['h', -w],\r\n          ['v', -h],\r\n          ['z']\r\n        ]\r\n      }\r\n\r\n      break\r\n    }\r\n    case 'circle':\r\n    case 'ellipse': {\r\n      let rx = this.rx()\r\n      let ry = this.ry()\r\n      let { cx, cy } = this.attr(['cx', 'cy'])\r\n\r\n      d = [\r\n        ['M', cx - rx, cy],\r\n        ['A', rx, ry, 0, 0, 0, cx + rx, cy],\r\n        ['A', rx, ry, 0, 0, 0, cx - rx, cy],\r\n        ['z']\r\n      ]\r\n\r\n      break\r\n    }\r\n    case 'polygon':\r\n    case 'polyline':\r\n    case 'line':\r\n\r\n      d = this.array().map(function (arr) {\r\n        return ['L'].concat(arr)\r\n      })\r\n\r\n      d[0][0] = 'M'\r\n\r\n      if (this.type === 'polygon') { d.push('Z') }\r\n\r\n      break\r\n    case 'path':\r\n      d = this.array()\r\n      break\r\n    default:\r\n      throw new Error('SVG toPath got unsupported type ' + this.type, this)\r\n    }\r\n\r\n    const path = new Path()\r\n      .plot(d)\r\n      .attr(normaliseAttributes(this.attr()))\r\n\r\n    if (replace) {\r\n      this.replace(path)\r\n    }\r\n\r\n    return path\r\n  }\r\n\r\n})\r\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 23/02/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {Viewmap} from '../viewmap/Viewmap';\nimport {SizeLike} from '../../utils/geometry';\nimport {Svg} from '@svgdotjs/svg.js';\nimport '@svgdotjs/svg.topath.js';\nimport {DrawPass} from './passes/DrawPass';\n\nexport interface SVGDrawPassInfo {\n  name: string;\n  order: number;\n  time: number;\n}\n\nexport class SVGDrawInfo {\n  totalTime = Infinity;\n  passesInfo = new Array<SVGDrawPassInfo>();\n}\n\nexport interface SVGDrawOptions {\n  prettifySVG?: boolean;\n}\n\nexport class SVGDrawHandler {\n  readonly options: Required<SVGDrawOptions> = {\n    prettifySVG: false,\n  };\n  readonly passes = new Array<DrawPass>();\n\n  constructor(options?: SVGDrawOptions) {\n    Object.assign(this.options, options);\n  }\n\n  async drawSVG(\n      viewmap: Viewmap,\n      size: SizeLike,\n      info = new SVGDrawInfo()\n  ): Promise<Svg> {\n\n    const buildStartTime = Date.now();\n\n    const svg = new Svg();\n    svg.width(size.w);\n    svg.height(size.h);\n\n    // Call the draw passes\n    for (let i=0; i<this.passes.length; i++) {\n      const pass = this.passes[i];\n      if (pass.enabled) {\n        const passStartTime = Date.now();\n        await pass.draw(svg, viewmap);\n\n        info.passesInfo.push({\n          name: pass.name,\n          order: i,\n          time: Date.now() - passStartTime,\n        });\n      }\n    }\n\n    info.totalTime = Date.now() - buildStartTime;\n    return svg;\n  }\n}\n\n\n\n\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 16/06/2022\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md \n\nimport {Svg} from '@svgdotjs/svg.js';\nimport {Viewmap} from '../../viewmap/Viewmap';\n\nexport abstract class DrawPass {\n  /**\n   * Name of the draw pass\n   */\n  readonly name: string;\n  /** \n   * Enables/Disables draw pass.\n   * @defaultValue `true` \n  */\n  enabled = true;\n\n  constructor() {\n    this.name = this.constructor.name;\n  }\n  \n  /**\n   * Function automatically called by the `SVGDrawHandler`\n   * @param svg The svg tree being built\n   * @param viewmap The viewmap data structure\n   */\n  abstract draw(svg: Svg, viewmap: Viewmap): Promise<void>;\n}","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 16/06/2022\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {\n  Circle as SVGCircle,\n  Dom,\n  Ellipse as SVGEllipse,\n  FillData,\n  FontData,\n  Image,\n  Image as SVGImage,\n  Number as SVGNumber,\n  NumberAlias as SVGNumberAlias,\n  Path as SVGPath,\n  PathArray as SVGPathArray,\n  PathCommand as SVGPathCommand,\n  Polygon as SVGPolygon,\n  Rect as SVGRect,\n  StrokeData,\n  Text as SVGText\n} from '@svgdotjs/svg.js';\nimport {PointLike, RectLike, round} from '../../utils';\n\nexport function getSVGImage(url: string, rect: RectLike) {\n  const svgImage = new SVGImage();\n  svgImage.load(url);\n  svgImage.x(rect.x);\n  svgImage.y(rect.y);\n  svgImage.width(rect.w);\n  svgImage.height(rect.h)\n  return svgImage;\n}\n\nexport function getSVGText(\n    text: string,\n    x: number,\n    y: number,\n    fontStyle: FontData = {},\n    strokeStyle: StrokeData = {},\n    fillStyle: FillData = {},\n): SVGText {\n  const svgText = new SVGText();\n  svgText.text(text);\n  svgText.x(x);\n  svgText.y(y);\n  svgText.font(fontStyle);\n  svgText.stroke(strokeStyle);\n  svgText.fill(fillStyle);\n  return svgText;\n}\n\nexport function getSVGPath(\n    contour: PointLike[],\n    holes: PointLike[][],\n    closed: boolean,\n    strokeStyle?: StrokeData,\n    fillStyle?: FillData,\n    fillImage?: Image,\n    parent?: Dom,\n): SVGPath {\n  const path = new SVGPath();\n  let cmds = getSVGPathCommands(contour, closed);\n  for (const hole of holes) {\n    cmds = cmds.concat(getSVGPathCommands(hole, closed));\n  }\n\n  path.plot(new SVGPathArray(cmds));\n  if (strokeStyle) {\n    path.stroke(strokeStyle);\n  } else {\n    path.stroke('none');\n  }\n  if(parent){\n    parent.add(path); // required for fillImage\n  }\n  if(fillImage){\n    path.fill(fillImage);\n  } else if (fillStyle) {\n    path.fill({...fillStyle, rule: \"evenodd\"});\n  } else {\n    path.fill('none');\n  }\n  return path;\n}\n\nfunction getSVGPathCommands(points: PointLike[], closed = true): SVGPathCommand[] {\n  const cmds = new Array<SVGPathCommand>();\n  let p;\n  if (points.length > 0) {\n    p = points[0];\n    cmds.push(['M', round(p.x), round(p.y)])\n    for (let i=1; i<points.length; i++) {\n      p = points[i];\n      cmds.push(['L', round(p.x), round(p.y)]);\n    }\n    if (closed) {\n      cmds.push(['Z']);\n    }\n  }\n  return cmds;\n}\n\nexport function getSVGCircle(\n    cx: number,\n    cy: number,\n    radius: number,\n    strokeStyle: StrokeData = {},\n    fillStyle: FillData = {}\n) {\n  const circle = new SVGCircle();\n  circle.center(cx, cy);\n  circle.radius(radius);\n  circle.stroke(strokeStyle);\n  circle.fill(fillStyle);\n  return circle;\n}\n\nconst _ignoredAttributes = [\"x\",\"y\",\"width\",\"height\",\"viewbox\",\"cx\",\"cy\",\"rw\",\"rx\",\"points\"];\nexport function replaceShapeByPath(\n    shape: SVGPolygon | SVGRect | SVGEllipse | SVGCircle\n): SVGPath {\n\n  const path = shape.toPath(true);\n  const attributes = shape.attr();\n  for(const attribute in attributes) {\n    if(!_ignoredAttributes.includes(attribute)) {\n      path.attr(attribute, attributes[attribute]);\n    }\n  }\n  return path;\n}\n\nexport function NumberAliasToNumber(n: SVGNumberAlias): number {\n  switch (typeof n) {\n  case \"number\":\n    return n as number;\n  case \"string\":\n    return Number(n);\n  case typeof SVGNumber:\n    return (n as SVGNumber).value;\n  }\n  return 0;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Wed Dec 14 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nexport function mergeOptions (target: any, source: any) {\n  // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n  for (const key of Object.keys(source)) {\n    if (source[key] instanceof Object) Object.assign(source[key], mergeOptions(target[key], source[key]))\n  }\n\n  // Join `target` and modified `source`\n  Object.assign(target || {}, source)\n  return target\n}","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 16/06/2022\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\n// Modified by repalash <palash@shaders.app>. Added support for cropping and overlaying rendered image, added parameters and other small changes.\n\nimport {DrawPass} from './DrawPass';\nimport {Viewmap} from '../../viewmap/Viewmap';\nimport {Color as SVGColor, Element as SVGElement, G as SVGGroup, Image, Pattern, Svg} from '@svgdotjs/svg.js';\nimport {getSVGCircle, getSVGPath} from '../svgutils';\nimport {Polygon} from '../../viewmap/Polygon';\nimport {mergeOptions} from '../../../utils/objects';\nimport {Box2, Vector2} from 'three'\n\nexport interface FillPassOptions {\n  drawRaycastPoint?: boolean;\n\n  /**\n   * Use a random color for each polygon in the svg. Overwrites\n   * {@link useFixedStyle} if `true`.\n   * @defaultValue `false`\n   */\n  useRandomColors?: boolean;\n  /**\n   * Use a fixed style ()`color` and/or `opacity`) provided by {@link fillStyle}\n   * instead of mesh material.\n   * @defaultValue `false`\n   */\n  useFixedStyle?: boolean;\n  /**\n   * Fixed style to apply to polygons\n   */\n  fillStyle?: FillStyle;\n  strokeStyle?: FillStyle;\n  fillImage?: string;\n}\n\nexport interface FillStyle {\n  /**\n   * Color of the polygons.\n   * @defaultValue `\"#333333\"`\n   */\n  color?: string;\n  /**\n   * Opacity of the polygons.\n   * @defaultValue `1`\n   */\n  opacity?: number;\n}\n\nexport class FillPass extends DrawPass {\n  drawFills = true;\n  drawStrokes = true;\n  drawImageFills = false;\n\n  readonly options: Required<FillPassOptions> = {\n    drawRaycastPoint: false,\n    useRandomColors: false,\n    useFixedStyle: false,\n    fillStyle: {\n      color: \"#333333\",\n      opacity: 1,\n    },\n    strokeStyle: {\n      color: \"#111111\",\n      opacity: 1,\n    },\n    fillImage: '',\n  };\n\n  constructor(options: FillPassOptions = {}) {\n    super();\n    mergeOptions(this.options, options);\n  }\n\n  async draw(svg: Svg, viewmap: Viewmap) {\n    let img = this.options.fillImage && this.drawImageFills ? new window.Image() : undefined\n    if(img) {\n      await new Promise<void>((res, rej) => {\n        img!.onload = () => {\n          res()\n        }\n        img!.onerror = (e) => {\n          console.error('error loading image', e)\n          rej()\n        }\n        img!.src = this.options.fillImage!\n      }).catch((e) => {\n        img = undefined\n        console.error('error loading image', e)\n      })\n    }\n    // debugger\n    const group = new SVGGroup({id: \"fills\"});\n    svg.add(group);\n\n    for (const mesh of viewmap.meshes) {\n\n      if (mesh.drawFills) {\n        const polygons = viewmap.polygons.filter(p => p.mesh === mesh);\n        const objectGroup = new SVGGroup({id: mesh.name});\n        group.add(objectGroup);\n\n        for (const polygon of polygons) {\n\n          let img1 = undefined\n          if(this.options.fillImage && img){ // todo this can be optimized\n            const polygonBounds = new Box2().setFromPoints(polygon.contour);\n            const rootSize = new Vector2(svg.width() as number, svg.height() as number)\n            const polygonSize = polygonBounds.getSize(new Vector2())\n            const polygonCenter = polygonBounds.getCenter(new Vector2())\n            if(polygonSize.length() > rootSize.length()){\n              // use the full image directly.\n              await new Promise<void>((res) => {\n                img1 = svg.image(img!.src, () => {\n                  // this._svgFillImage?.size(20, 20)\n                  res();\n                  // debugger\n                });\n              })\n            }else {\n              if (img.width !== rootSize.x || img.height !== rootSize.y) {\n                console.error('image size does not match svg size')\n              } else {\n                const canvas = document.createElement('canvas')\n                canvas.width = Math.floor(polygonSize.width)\n                canvas.height = Math.floor(polygonSize.height)\n                const context = canvas.getContext('2d')\n                if (context && canvas.width > 0 && canvas.height > 0) {\n                  context.drawImage(img,\n                      Math.floor(polygonCenter.x - polygonSize.width / 2),\n                      Math.floor(polygonCenter.y - polygonSize.height / 2),\n                      Math.floor(polygonSize.width), Math.floor(polygonSize.height),\n                      0, 0, Math.floor(polygonSize.width), Math.floor(polygonSize.height),\n                  )\n                  // canvas.style.position = 'absolute'\n                  // canvas.style.top = '0'\n                  // canvas.style.left = '0'\n                  // document.body.appendChild(canvas)\n                  const croppedImgData = canvas.toDataURL('image/png') // use jpeg if not transparent?\n                  await new Promise<void>((res) => {\n                    img1 = svg.image(croppedImgData, () => {\n                      // this._svgFillImage?.size(20, 20)\n                      res();\n                      // debugger\n                    });\n                  })\n                }\n              }\n            }\n\n          }\n\n          drawPolygon(group, polygon, this.options, img1, this.drawFills, this.drawStrokes);\n        }\n      }\n    }\n\n    if(img){\n      // loop through defs\n      // size w, h for all patterns.\n      // move image out of the pattern\n      // <use xlink:href=\"#SvgjsImage1000\"/>\n\n      const patternAndImages = svg.defs().children().filter(c=>c instanceof Pattern && c.children().length === 1).map(c=>[c,c.children()[0]])\n      // console.log(patternAndImages)\n      patternAndImages.forEach(([pattern, image])=>{\n        pattern.x(0)\n        pattern.y(0)\n        pattern.width(1)\n        pattern.height(1)\n        pattern.attr('patternUnits', 'objectBoundingBox')\n        svg.defs().add(image)\n        pattern.add(svg.use(image))\n      })\n    }\n    // this._svgFillImage = undefined\n  }\n}\n\nfunction drawPolygon(\n    parent: SVGElement,\n    polygon: Polygon,\n    options: FillPassOptions,\n    fillImage?: Image, drawFills = true, drawStroke = true) {\n\n  // Make a copy of the style so we can modify it\n  const style = {...options.fillStyle};\n  const strokeStyle = {...options.strokeStyle};\n\n  // If not using fixed color through the style, use the object color\n  if (!options.useFixedStyle) {\n    style.color = '#'+polygon.color.getHexString();\n    strokeStyle.color = '#'+polygon.color.getHexString();\n  }\n\n  if (options.useRandomColors) {\n    style.color = SVGColor.random().toString();\n    strokeStyle.color = SVGColor.random().toString();\n  }\n\n  const path = getSVGPath(polygon.contour, polygon.holes, true, drawStroke ? strokeStyle : undefined, drawFills ? style : undefined, fillImage, parent);\n  path.id(\"fill-\"+polygon.id);\n  // parent.add(path);\n\n  if (options.drawRaycastPoint) {\n    drawPolygonRaycastPoint(parent, polygon);\n  }\n}\n\nfunction drawPolygonRaycastPoint(parent: SVGElement, polygon: Polygon) {\n  const strokeStyle = {color: \"black\"};\n  const fillStyle = {color: \"white\"};\n  const cx = polygon.insidePoint.x;\n  const cy = polygon.insidePoint.y;\n  const point = getSVGCircle(cx, cy, 2, strokeStyle, fillStyle);\n  point.id('raycast-point');\n  parent.add(point);\n}\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 16/06/2022\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md \n\nimport {DrawPass} from './DrawPass';\nimport {Viewmap} from '../../viewmap/Viewmap';\nimport {Svg, G as SVGGroup} from '@svgdotjs/svg.js';\nimport {ChainVisibility} from '../../viewmap/Chain';\nimport {getSVGCircle, getSVGText} from '../svgutils';\nimport { ViewVertexSingularity } from '../../viewmap/ViewVertex';\n\nconst ViewVertexSingularities = Object.values(ViewVertexSingularity)\n  .filter(singularity => singularity !== ViewVertexSingularity.None);\n\nconst ViewVertexSingularityColor = {\n  [ViewVertexSingularity.None]: \"\",\n  [ViewVertexSingularity.ImageIntersection]: \"green\",\n  [ViewVertexSingularity.MeshIntersection]: \"red\",\n  [ViewVertexSingularity.CurtainFold]: \"blue\",\n  [ViewVertexSingularity.Bifurcation]: \"orange\",\n}\n\nexport interface SingularityPointPassOptions {\n  drawLegend?: boolean;\n  pointSize?: number;\n  drawVisiblePoints?: boolean;\n  drawHiddenPoints?: boolean;\n}\n\nexport class SingularityPointPass extends DrawPass {\n  readonly options: Required<SingularityPointPassOptions> = {\n    drawVisiblePoints: true,\n    drawHiddenPoints: false,\n    drawLegend: true,\n    pointSize: 2,\n  };\n\n  constructor(options: SingularityPointPassOptions = {}) {\n    super();\n    Object.assign(this.options, options);\n  }\n\n  async draw(svg: Svg, viewmap: Viewmap) {\n    // Update point visibility to avoid drawing point on hidden chains if only\n    // visible chains are drawn\n\n    for (const chain of viewmap.chains) {\n      for (const p of chain.vertices) {\n        p.visible = p.visible || chain.visibility === ChainVisibility.Visible;\n      }\n    }\n\n    const visibilities = [];\n    if (this.options.drawVisiblePoints) {\n      visibilities.push(true);\n    }\n    if (this.options.drawHiddenPoints) {\n      visibilities.push(false);\n    }\n\n    const group = new SVGGroup({id: \"singularity-points\"});\n    svg.add(group);\n\n\n    const strokeStyle = {\n      color: 'black'\n    };\n    const fillStyle = {\n      color: \"\",\n    };\n\n    const singularityPoints = Array.from(viewmap.viewVertexMap.values())\n      .filter(p => p.singularity != ViewVertexSingularity.None);\n\n    for (const visibility of visibilities) {\n\n      const visibilityGroup = new SVGGroup({id: visibility? \"visible\" : \"hidden\"})\n      group.add(visibilityGroup);\n\n      for (const singularity of ViewVertexSingularities) {\n        \n        const points = singularityPoints\n          .filter(p => p.singularity === singularity && p.visible === visibility);\n\n        const singularityGroup = new SVGGroup({id: singularity});\n        visibilityGroup.add(singularityGroup);\n\n        fillStyle.color = ViewVertexSingularityColor[singularity];\n        for (const p of points) {\n          const svgPoint = getSVGCircle(p.pos2d.x, p.pos2d.y, this.options.pointSize, strokeStyle, fillStyle);\n          singularityGroup.add(svgPoint);\n        }\n      }\n    }\n\n    if (this.options.drawLegend) {\n      group.add(getLegend());\n    }\n  }\n}\n\nfunction getLegend() {\n  const legend = new SVGGroup({id: \"singularity-legend\"});\n  \n  legend.add(getSVGText(\"Singularities\", 10, 10, {size: 15, anchor: 'start'}))\n\n  let y = 40;\n  for (const singularity of ViewVertexSingularities) {\n    const fillColor = ViewVertexSingularityColor[singularity];\n    \n    legend.add(getSVGCircle(15, y, 8, {color: \"black\"}, {color: fillColor}));\n    legend.add(getSVGText(singularity, 30, y-10, {size: 15, anchor: 'start'}));\n\n    y += 20;\n  }\n\n  return legend;\n}\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 16/06/2022\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md \n\nimport {DrawPass} from './DrawPass';\nimport {Viewmap} from '../../viewmap/Viewmap';\nimport {Svg, G as SVGGroup, Element as SVGElement, Color as SVGColor,\n} from '@svgdotjs/svg.js';\nimport {Chain, ChainVisibility} from '../../viewmap/Chain';\nimport {ViewEdgeNature} from '../../viewmap/ViewEdge';\nimport {getSVGPath, getSVGCircle, getSVGText} from '../svgutils';\nimport { SVGMesh } from '../../SVGMesh';\nimport { mergeOptions } from '../../../utils/objects';\n\nconst ViewEdgesNatures = Object.values(ViewEdgeNature);\n\nexport interface StrokeNatureOptions {\n  enable?: boolean;\n\n  renderOrder?: number;\n}\n\nexport interface ChainPassOptions {\n  /** \n   * Draw each chains in the svg with random colors. \n   * @defaultValue `false`\n   */\n  useRandomColors?: boolean;\n  \n  /**\n   * Draw the raycasting point used to determine visibility in the svg.\n   * @defaultValue `false`\n   */\n  drawRaycastPoint?: boolean;\n  \n  /**\n   * Draw the legend showing the mapping between color and nature for chains.\n   * Useful only if {@link colorByNature} is true.\n   */\n  drawLegend?: boolean;\n\n  /**\n   * Default style applied to strokes\n   */\n  defaultStyle?: StrokeStyle,\n\n  /**\n   * Customize stroke styles depending on their nature, if value are set, \n   * they overide default style\n   */\n  styles?: {\n    [ViewEdgeNature.Silhouette]: PassStrokeStyle,\n    [ViewEdgeNature.MeshIntersection]: PassStrokeStyle,\n    [ViewEdgeNature.Crease]: PassStrokeStyle,\n    [ViewEdgeNature.Boundary]: PassStrokeStyle,\n    [ViewEdgeNature.Material]: PassStrokeStyle,\n  };\n}\n\nexport interface StrokeStyle {\n  /**\n   * Color of the stroke in hex format.\n   * @defaultValue `\"#000000\"'\n   */\n  color?: string;\n  /**\n   * Width of the stroke\n   * @defaultValue `1`\n   */\n  width?: number;\n  /**\n   * Opacity of the stroke\n   * @defaultValue `1`\n   */\n  opacity?: number;\n  /**\n   * Pattern of dashes and gaps used for the stroke e.g. `\"2,2\"`\n   * @defaultValue `\"\"`\n   */\n  dasharray?: string;\n  /**\n   * Shape to be used at the ends of stroke\n   * @defaultValue `\"butt\"`\n   */\n  linecap?: 'butt' | 'round' | 'square';\n  /**\n   * Shape to use at the corners of stroke\n   * @defaultValue `\"miter\"`\n   */\n  linejoin?: 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';\n  /**\n   * Offset to use before starting dash-array\n   * @defaultValue `0`\n   */\n  dashoffset?: number;\n}\n\n/**\n * Stroke Style interface with options specific to the Chain Pass\n */\nexport interface PassStrokeStyle extends StrokeStyle {\n  /**\n   * Draw order of the stroke in the svg. High order are drawn on top\n   * @defaultValue Silhouette 5, Boundary 4, MeshIntersection 3, Crease 2, Material 1\n   * \n   */\n  drawOrder?: number;\n  /**\n   * Enable the edge nature type to be drawn in the svg\n   */\n  enabled?: boolean;\n}\n\n\n\nexport abstract class ChainPass extends DrawPass {\n  /** Options of the draw pass */\n  readonly options : Required<ChainPassOptions> = {\n    drawRaycastPoint: false,\n    useRandomColors: false,\n    drawLegend: false,\n\n    defaultStyle: {\n      color: \"#000000\",\n      width: 1,\n      dasharray: \"\",\n      linecap: \"butt\",\n      linejoin: \"miter\",\n      opacity: 1,\n      dashoffset: 0,\n    },  \n    styles: {\n      [ViewEdgeNature.Silhouette]: {enabled: true, drawOrder: 5},\n      [ViewEdgeNature.Boundary]: {enabled: true, drawOrder: 4},\n      [ViewEdgeNature.MeshIntersection]: {enabled: true, drawOrder: 3},\n      [ViewEdgeNature.Crease]: {enabled: true, drawOrder: 2},\n      [ViewEdgeNature.Material]: {enabled: true, drawOrder: 1}\n    }\n  }\n\n  /**\n   * \n   * @param strokeStyle Default style applied to the strokes\n   * @param options \n   */\n  constructor(options: ChainPassOptions = {}) {\n    super();\n    \n    mergeOptions(this.options, options);\n  }\n}\n\nexport class VisibleChainPass extends ChainPass {\n\n  constructor(options: Partial<ChainPassOptions> = {}) {\n    super(options);\n  }\n\n  async draw(svg: Svg, viewmap: Viewmap) {\n\n    const chains = viewmap.chains\n      .filter(c => c.visibility === ChainVisibility.Visible);\n\n    const meshes = Array.from(viewmap.meshes).filter(m => m.drawVisibleContours);\n\n    const group = new SVGGroup({id: \"visible-contours\"});\n    drawChains(group, meshes, chains, this.options);\n    svg.add(group);\n  }\n}\n\nexport class HiddenChainPass extends ChainPass {\n\n  constructor(options: Partial<ChainPassOptions> = {}) {\n\n    const {defaultStyle, ...otherOptions} = options;\n\n    options = {\n      defaultStyle: {\n        color: \"#FF0000\",\n        dasharray: \"2,2\",\n        ...defaultStyle,\n      },\n      ...otherOptions\n    }\n\n    super(options);\n  }\n\n  async draw(svg: Svg, viewmap: Viewmap) {\n \n    const chains = viewmap.chains.filter(\n      c => c.visibility === ChainVisibility.Hidden\n    );\n\n    const meshes = Array.from(viewmap.meshes).filter(m => m.drawHiddenContours);\n\n    const group = new SVGGroup({id: \"hidden-contours\"});\n    svg.add(group);\n\n    drawChains(group, meshes, chains, this.options);\n  }\n}\n\nfunction drawChains(\n    parent: SVGElement,\n    meshes: SVGMesh[],\n    chains: Chain[],\n    options: Required<ChainPassOptions>) {\n\n  const {defaultStyle, styles} = options;\n\n  // Order natures depending on the draw order\n  ViewEdgesNatures.sort(\n    (n1, n2) => (styles[n1].drawOrder ?? 0) - (styles[n2].drawOrder ?? 0)\n  );\n\n  // Group the contours by mesh\n  for (const mesh of meshes) {\n    const objectChains = chains.filter(c => c.object === mesh);\n    const objectGroup = new SVGGroup({id: mesh.name});\n    parent.add(objectGroup);\n\n    for (const nature of ViewEdgesNatures) {\n\n      if (styles[nature]?.enabled) {\n\n        const strokeStyle = {...defaultStyle, ...styles[nature]};\n\n        const natureChains = objectChains.filter(c => c.nature === nature);\n        const natureGroup = new SVGGroup({id: nature});\n        objectGroup.add(natureGroup);\n\n        for (const chain of natureChains) {\n          drawChain(natureGroup, chain, options, strokeStyle);\n        }\n      }\n    }\n  }\n\n  if (options.drawLegend) {\n    parent.add(getLegend(options));\n  }\n\n}\n\nfunction drawChain(\n    parent: SVGElement, \n    chain: Chain,\n    options: Required<ChainPassOptions>,\n    style: StrokeStyle = {}\n) {\n\n  // Make a copy of the style so we can modify it\n  style = {...style};\n\n  if (options.useRandomColors) {\n    style.color = SVGColor.random().toString();\n  }\n\n  const path = getSVGPath(chain.vertices, [], false, style);\n  parent.add(path);\n\n  if (options.drawRaycastPoint) {\n    drawContourRaycastPoint(parent, chain);\n  }\n}\n\nfunction drawContourRaycastPoint(parent: SVGElement, chain: Chain) {\n  const strokeStyle = {color: \"black\"};\n  const fillStyle = {color: \"white\"};\n  const cx = chain.raycastPoint.x;\n  const cy = chain.raycastPoint.y;\n  const point = getSVGCircle(cx, cy, 2, strokeStyle, fillStyle);\n  point.id('raycast-point');\n  parent.add(point);\n}\n\nfunction getLegend(options: Required<ChainPassOptions>) {\n  const legend = new SVGGroup({id: \"edges-nature-legend\"});\n  \n  legend.add(getSVGText(\"Natures\", 10, 140, {size: 15, anchor: 'start'}))\n\n  let y = 170;\n  for (const nature of ViewEdgesNatures) {\n    const fillColor = options.styles[nature].color ?? 'black';\n    \n    legend.add(getSVGCircle(15, y, 8, {color: \"black\"}, {color: fillColor}));\n    legend.add(getSVGText(nature, 30, y-10, {size: 15, anchor: 'start'}));\n\n    y += 20;\n  }\n\n  return legend;\n}","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 06/09/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {Matrix4, Vector3} from 'three';\n\nconst EPSILON = 1e-10;\n\n// See https://hal.inria.fr/hal-02189483 appendix C.2 Orientation test\nconst _matrix = new Matrix4();\nexport function orient3D(a: Vector3, b: Vector3, c: Vector3, d: Vector3) {\n  _matrix.set(\n    a.x, a.y, a.z, 1,\n    b.x, b.y, b.z, 1,\n    c.x, c.y, c.z, 1,\n    d.x, d.y, d.z, 1\n  );\n  const det = _matrix.determinant();\n\n  if (det > EPSILON) {\n    return 1;\n  } else if (det < -EPSILON) {\n    return -1;\n  }\n  return 0;\n}\n\n// See https://hal.inria.fr/hal-02189483 appendix C.2 Orientation test\nexport function frontSide(a: Vector3, b: Vector3, c: Vector3, d: Vector3) {\n  return orient3D(d, b, c, a);\n}\n\n// See https://hal.inria.fr/hal-02189483 appendix C.2 Orientation test\nexport function sameSide(a: Vector3, b: Vector3, c: Vector3, d: Vector3, e: Vector3) {\n  return (orient3D(a,b,c,d) > 0) === (orient3D(a,b,c,e) > 0);\n}","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 23/02/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md \n\nimport { Line3, Vector3 } from 'three';\nimport { Face } from './Face';\nimport { Vertex } from './Vertex';\nimport { frontSide } from '../utils/geometry';\n\nconst _u = new Vector3();\nconst _v = new Vector3();\nconst _line = new Line3();\n\nexport class Halfedge {\n\n  vertex: Vertex;\n\n  // Set during the stucture build phase\n\n  face: Face | null = null;\n  declare twin: Halfedge;\n  declare prev: Halfedge;\n  declare next: Halfedge;\n\n  constructor(vertex: Vertex) {\n    this.vertex = vertex;\n  }\n\n  get id() {\n    return this.vertex.id + '-'+ this.twin.vertex.id;\n  }\n\n  containsPoint(point: Vector3, tolerance = 1e-10): boolean {\n    _u.subVectors(this.vertex.position, point)\n    _v.subVectors(this.next.vertex.position, point)\n    _line.set(this.vertex.position, this.next.vertex.position);\n    _line.closestPointToPoint(point, true, _u);\n    return _u.distanceTo(point) < tolerance;\n  }\n\n  /**\n   * Indicates whether the halfedge is free (i.e. no connected face)\n   *\n   * @type       {boolean}\n   */\n  isFree() {\n    return this.face === null;\n  }\n\n  /**\n   * Indicated wetcher the halfedge is a boundary (i.e. no connected face but\n   * twin has a face)\n   */\n  isBoundary() {\n    return this.face === null && this.twin.face !== null;\n  }\n\n  /**\n   * Returns true if the halfedge is concave, false if convexe.\n   * IMPORTANT: Returns false if halfedge has no twin.\n   *\n   * @type       {boolean}\n   */\n  get isConcave() {\n    if (this.twin) {\n      return frontSide(\n        this.vertex.position,\n        this.next.vertex.position,\n        this.prev.vertex.position,\n        this.twin.prev.vertex.position) > 0;\n    }\n    return false;\n  }\n\n  /**\n   * Returns a generator looping over all the next halfedges\n   */\n  *nextLoop() {\n    const start: Halfedge = this;\n    let curr: Halfedge = start;\n    do {\n      yield curr;\n      curr = curr.next;\n    } while(curr !== start);\n    return null;\n  }\n\n  /**\n   * Returns a generator looping over all the previous halfedges\n   */\n  *prevLoop() {\n    const start: Halfedge = this;\n    let curr: Halfedge = start;\n    do {\n      yield curr;\n      curr = curr.next;\n    } while(curr !== start);\n    return null;\n  }\n\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Oct 25 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {Halfedge} from \"../core/Halfedge\";\nimport {HalfedgeDS} from \"../core/HalfedgeDS\";\nimport {Vertex} from \"../core/Vertex\";\n\nexport function addEdge(\n    struct: HalfedgeDS,\n    v1: Vertex,\n    v2: Vertex,\n    allowParallels = false) {\n\n  if (v1 === v2) {\n    throw new Error('Vertices v1 and v2 should be different');\n  }\n\n  if (!allowParallels) {\n    // Check if v1 and v2 are already connected\n    const currentHalfEdge = v1.getHalfedgeToVertex(v2);\n    if (currentHalfEdge) {\n      return currentHalfEdge;\n    }\n  }\n\n  if (!v1.isFree() || !v2.isFree()) {\n    throw new Error('Vertices v1 and v2 are not free');\n  }\n\n  // Create new halfedges, by default twin halfedges are connected together\n  // as prev/next in case vertices are isolated\n  const h1 = new Halfedge(v1);\n  const h2 = new Halfedge(v2);\n  h1.twin = h2;\n  h1.next = h2;\n  h1.prev = h2;\n  h2.twin = h1;\n  h2.next = h1;\n  h2.prev = h1;\n\n  /*\n   *        ↖       ↙\n   *   out2   ↖   ↙   in2\n   *            v2\n   *            ⇅\n   *            ⇅\n   *        h1  ⇅  h2\n   *            ⇅\n   *            ⇅\n   *            v1\n   *    in1  ↗     ↘  out1\n   *       ↗         ↘\n   *\n   */\n\n\n  // Update refs around v1 if not isolated\n  const in1 = v1.freeHalfedgesInLoop().next().value;\n  if (in1) {\n    const out1 = in1.next;\n    h1.prev = in1;\n    in1.next = h1;\n\n    h2.next = out1;\n    out1.prev = h2;\n  } else {\n    v1.halfedge = h1;\n  }\n\n  // Update refs around v2 if not isolated\n  const in2 = v2.freeHalfedgesInLoop().next().value;\n  if (in2) {\n\n    const out2 = in2.next;\n    h2.prev = in2;\n    in2.next = h2;\n\n    h1.next = out2;\n    out2.prev = h1;\n  } else {\n    v2.halfedge = h2;\n  }\n\n  struct.halfedges.push(h1);\n  struct.halfedges.push(h2);\n\n  return h1;\n}\n\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 17/03/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md \n\nimport { Vector3, Triangle } from 'three';\nimport { Vertex } from './Vertex';\nimport { Halfedge } from './Halfedge';\n\nconst _viewVector = new Vector3();\nconst _normal = new Vector3();\nconst _triangle = new Triangle();\nconst _vec = new Vector3();\n\nexport class Face {\n\n  halfedge: Halfedge;\n\n  constructor(halfEdge: Halfedge) {\n    this.halfedge = halfEdge;\n  }\n\n  getNormal(target: Vector3) {\n    _triangle.set(\n      this.halfedge.prev.vertex.position,\n      this.halfedge.vertex.position,\n      this.halfedge.next.vertex.position\n    );\n    _triangle.getNormal(target);\n  }\n\n  getMidpoint(target: Vector3) {\n    _triangle.set(\n      this.halfedge.prev.vertex.position,\n      this.halfedge.vertex.position,\n      this.halfedge.next.vertex.position\n    );\n    _triangle.getNormal(target);\n  }\n\n  /**\n   * Returns wether the face facing the given position\n   *\n   * @param position  The position\n   * @return `true` if face is front facing, `false` otherwise.\n   */\n  isFront(position: Vector3) {\n    this.getNormal(_normal);\n    return _viewVector\n      .subVectors(position, this.halfedge.vertex.position)\n      .normalize()\n      .dot(_normal) >= 0;\n  }\n\n  /**\n   * Returns the face halfedge containing the given position.\n   * @param position Target position\n   * @param tolerance Tolerance\n   * @returns `HalfEdge` if found, `null` otherwise\n   */\n  halfedgeFromPosition(position: Vector3, tolerance = 1e-10): Halfedge | null {\n\n    for (const he of this.halfedge.nextLoop()) {\n      if (he.containsPoint(position, tolerance)) {\n        return he;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns the face vertex that matches the given position within the tolerance\n   * @param position \n   * @param tolerance \n   * @returns \n   */\n  vertexFromPosition(position: Vector3, tolerance = 1e-10): Vertex | null {\n\n    for (const he of this.halfedge.nextLoop()) {\n      // Check if position is close enough to the vertex position within the\n      // provided tolerance\n      _vec.subVectors(he.vertex.position, position);\n\n      if (_vec.length() < tolerance) {\n        return he.vertex;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns the face halfedge starting from the given vertex\n\n   * @param vertex \n   * @returns \n   */\n  halfedgeFromVertex(vertex: Vertex) {\n    \n    for (const he of this.halfedge.nextLoop()) {\n      if (he.vertex === vertex) {\n        return he;\n      }\n    }\n    return null;\n  }\n\n  hasVertex(vertex: Vertex) {\n    for (const he of this.halfedge.nextLoop()) {\n      if (he.vertex === vertex) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Fri Nov 04 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {Face} from \"../core/Face\";\nimport {Halfedge} from \"../core/Halfedge\";\nimport {HalfedgeDS} from \"../core/HalfedgeDS\";\n\nexport function addFace(struct: HalfedgeDS, halfedges: Halfedge[]) {\n\n  const size = halfedges.length;\n  if (size < 2) {\n    throw new Error(\"At least 3 halfedges required to build a face.\");\n  }\n\n  // Make some checks before changing topology\n  for (let i=0; i<size; i++) {\n\n    const curr = halfedges[i];\n    const next = halfedges[(i+1) % size];\n\n    if (curr.face) {\n      throw new Error(\"Halfedge already has a face\");\n    }\n\n    if (curr.twin.vertex !== next.vertex) {\n      throw new Error(\"Halfedges do not form a chain\");\n    }\n  }\n\n  // Add the face\n  for (let i = 0; i<size; i++) {\n\n    const curr = halfedges[i];\n    const next = halfedges[(i+1) % size];\n\n    if (!makeHalfedgesAdjacent(curr, next)) {\n      throw new Error('Face cannot be created: mesh would be non manifold.');\n    }\n  }\n\n  const face = new Face(halfedges[0]);\n  for (const halfedge of halfedges) {\n    halfedge.face = face;\n  }\n\n  struct.faces.push(face);\n  return face;\n}\n\n/**\n *\n *\n * @see https://kaba.hilvi.org/homepage/blog/halfedge/halfedge.htm\n *\n * @param\n * @param out\n * @returns\n */\nfunction makeHalfedgesAdjacent(\n    halfIn: Halfedge,\n    halfOut: Halfedge): boolean {\n\n  if (halfIn.next === halfOut) {\n    // Adjacency is alrady correct\n    return true;\n  }\n\n  // Find a boundary halfedge different from out.twin and in\n  let g: Halfedge | null = null;\n  const loop = halfOut.vertex.freeHalfedgesInLoop(halfOut);\n  let he = loop.next();\n  while (!g && !he.done) {\n    if (he.value !== halfIn) {\n      g = he.value;\n    }\n    he = loop.next();\n  }\n\n  if (!g) {\n    return false;\n  }\n\n  const b = halfIn.next;\n  const d = halfOut.prev;\n  const h = g.next;\n\n  halfIn.next = halfOut;\n  halfOut.prev = halfIn;\n\n  g.next = b;\n  b.prev = g;\n\n  d.next = h;\n  h.prev = d;\n\n  return true;\n}\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 17/03/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {Vector3} from 'three';\nimport type {Face} from './Face';\nimport {Halfedge} from './Halfedge';\n\nconst _u = new Vector3();\nlet _idCount = 0;\n\nexport class Vertex {\n  /** Vertex position */\n  readonly position: Vector3 = new Vector3();\n\n  /** Reference to one halfedge starting from the vertex */\n  halfedge: Halfedge | null = null;\n\n  id: number;\n\n  constructor() {\n    this.id = _idCount;\n    _idCount++;\n  }\n\n  /**\n   * Returns a generator of free halfedges starting from this vertex.\n   * @param start The halfedge to start, default is vertex halfedge\n   */\n  *freeHalfedgesOutLoop(start = this.halfedge) {\n    for (const halfedge of this.loopCW(start)) {\n      if (halfedge.isFree()) {\n        yield halfedge;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns a generator of free halfedges arriving to this vertex.\n   * @param start The halfedge to start, default is vertex halfedge\n  */\n  *freeHalfedgesInLoop(start = this.halfedge) {\n    for (const halfedge of this.loopCW(start)) {\n      if (halfedge.twin.isFree()) {\n        yield halfedge.twin;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns a generator of boundary halfedges starting from this vertex.\n   * @param start The halfedge to start, default is vertex halfedge\n   */\n  *boundaryHalfedgesOutLoop(start = this.halfedge) {\n    for (const halfedge of this.loopCW(start)) {\n      if (halfedge.isBoundary()) {\n        yield halfedge;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns a generator of boundary halfedges arriving to this vertex.\n   * @param start The halfedge to start, default is vertex halfedge\n  */\n  *boundaryHalfedgesInLoop(start = this.halfedge) {\n    for (const halfedge of this.loopCW(start)) {\n      if (halfedge.twin.isBoundary()) {\n        yield halfedge.twin;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns whether the vertex is free, i.e. on of its ongoing halfedge has no\n   * face.\n   *\n   * @ref https://kaba.hilvi.org/homepage/blog/halfedge/halfedge.htm\n   *\n   * @returns `true` if free, `false` otherwise\n   */\n  isFree() {\n    if (this.isIsolated()) {\n      return true;\n    }\n    for (const halfEdge of this.loopCW()) {\n      if (halfEdge.isFree()) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  isIsolated() {\n    return this.halfedge === null;\n  }\n\n  commonFacesWithVertex(other: Vertex) {\n    const faces = new Array<Face>();\n    for (const halfedge of this.loopCW()) {\n      if (halfedge.face && halfedge.face.hasVertex(other)) {\n        faces.push(halfedge.face);\n      }\n    }\n    return faces;\n  }\n\n  /**\n   * Checkes whether the vertex matches the given position\n   *\n   * @param      {Vector3}  position           The position\n   * @param      {number}   [tolerance=1e-10]  The tolerance\n   * @return     {boolean}\n   */\n  matchesPosition(position: Vector3, tolerance = 1e-10): boolean {\n    _u.subVectors(position, this.position);\n    return _u.length() < tolerance;\n  }\n\n  /**\n   * Returns the halfedge going from *this* vertex to *other* vertex if any.\n   * @param other The other vertex\n   * @returns `HalfEdge` if found, `null` otherwise.\n   */\n  getHalfedgeToVertex(other: Vertex): Halfedge | null {\n    for (const halfEdge of this.loopCW()) {\n      if (halfEdge.twin.vertex === other) {\n        return halfEdge;\n      }\n    }\n    return null;\n  }\n\n  isConnectedToVertex(other: Vertex) {\n    return this.getHalfedgeToVertex(other) !== null;\n  }\n\n  static MAX_LOOP = Infinity;\n  /**\n   * Returns a generator of halfedges starting from this vertex in CW order.\n   * @param start The halfedge to start looping, default is vertex halfedge\n   */\n  *loopCW(start = this.halfedge, maxLoop?: number) {\n    let i = 0\n    if (start && start.vertex === this) {\n      let curr: Halfedge = start;\n      do {\n        yield curr;\n        curr = curr.twin.next;\n        i++;\n        if(i>(maxLoop||Vertex.MAX_LOOP)){\n          break;\n        }\n      } while(curr != start);\n    }\n    return null;\n  }\n\n  /**\n   * Returns a generator of halfedges starting from this vertex in CCW order.\n   * @param start The halfedge to start, default is vertex halfedge\n   */\n  *loopCCW(start = this.halfedge, maxLoop?: number) {\n    let i = 0\n    if (start && start.vertex === this) {\n      let curr: Halfedge = start;\n      do {\n        yield curr;\n        curr = curr.prev.twin;\n        i++;\n        if(i>(maxLoop||Vertex.MAX_LOOP)){\n          break;\n        }\n      } while(curr != start);\n    }\n    return null;\n  }\n}\n\n\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Oct 25 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Vector3 } from \"three\";\nimport { HalfedgeDS } from \"../core/HalfedgeDS\";\nimport { Vertex } from \"../core/Vertex\";\n\nexport function addVertex(\n    struct: HalfedgeDS,\n    position: Vector3,\n    checkDuplicates = false,\n    tolerance = 1e-10) {\n\n  // Check if position matches one face vertex and returns it\n  if (checkDuplicates) {\n    for (const vertex of struct.vertices) {\n      if (vertex.matchesPosition(position, tolerance)) {\n        return vertex;\n      }\n    }\n  }\n  \n  const v = new Vertex();\n  v.position.copy(position);\n  struct.vertices.push(v);\n  return v;\n}","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Fri Nov 04 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Face } from \"../core/Face\";\nimport { HalfedgeDS } from \"../core/HalfedgeDS\";\n\nexport function removeFace(\n    struct: HalfedgeDS,\n    face: Face) {\n  \n  if (!struct.faces.remove(face)) {\n    return;\n  }\n\n  // Remove face ref from halfedges loop\n  for (const halfedge of face.halfedge.nextLoop()) {\n    halfedge.face = null;\n  }  \n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Thu Nov 03 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Halfedge } from \"../core/Halfedge\";\nimport { HalfedgeDS } from \"../core/HalfedgeDS\";\nimport { removeFace } from \"./removeFace\";\n\nexport function removeEdge(\n    struct: HalfedgeDS,\n    halfedge: Halfedge,\n    mergeFaces = true) {\n  \n  /*\n   *      ↖           ↙\n   *        ↖       ↙\n   *          ↖   ↙\n   *            v2           \n   *            ⇅        \n   *            ⇅   \n   *        he  ⇅  twin\n   *            ⇅  \n   *            v1\n   *         ↗     ↘ \n   *       ↗         ↘\n   *     ↗             ↘\n   *                \n   */\n\n  const twin = halfedge.twin;\n\n  if (mergeFaces && halfedge.face && twin.face) {\n    // Keep only one face in both faces for halfedge and twin exist, and update\n    // ref\n    removeFace(struct, twin.face);\n    halfedge.face.halfedge = halfedge.prev;\n  } else {\n    // Remove both faces\n    if (halfedge.face) {\n      removeFace(struct, halfedge.face);\n    }\n\n    if (twin.face) {\n      removeFace(struct, twin.face);\n    }\n  }\n\n  // Update topology around v1\n  const v1 = halfedge.vertex;\n  if (twin.next === halfedge) {\n    // v1 is now isolated\n    v1.halfedge = null;\n  } else {\n    v1.halfedge = twin.next;\n    halfedge.prev.next = twin.next;\n    twin.next.prev = halfedge.prev;\n  }\n\n  // Update topology around v2\n  const v2 = twin.vertex;\n  if (halfedge.next === twin) {\n    // v2 is now isolated\n    v2.halfedge = null;\n  } else {\n    v2.halfedge = halfedge.next;\n    halfedge.next.prev = twin.prev;\n    twin.prev.next = halfedge.next\n  }\n\n  // Remove halfedges from struct\n  struct.halfedges.remove(halfedge);\n  struct.halfedges.remove(twin);\n\n}","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Oct 25 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { HalfedgeDS } from \"../core/HalfedgeDS\";\nimport { Vertex } from \"../core/Vertex\";\nimport { removeEdge } from \"./removeEdge\";\n\n/*\n *         From                            To    \n * \n * \n *            o                              o          \n *          ↙ ⇅ ↖                          ↙   ↖        \n *        ↙   ⇅   ↖                      ↙       ↖      \n *      ↙ f1  ⇅  f4 ↖                  ↙           ↖    \n *    ↙       ⇅       ↖              ↙               ↖  \n *  o ⇄ ⇄ ⇄ ⇄ v ⇄ ⇄ ⇄ ⇄ o          o         f         o\n *    ↘       ⇅       ↗              ↘               ↗  \n *      ↘ f2  ⇅  f3 ↗                  ↘           ↗    \n *        ↘   ⇅   ↗                      ↘       ↗      \n *          ↘ ⇅ ↗                          ↘   ↗        \n *            o                              o  \n * \n * If all halfedges starting from vertex v to delete are connected to a face, \n * then we create a new face v. \n * If some of the halfedges starting from v are boundaries (i.e. no face), \n * then we can't create a new face.\n *         \n */  \n\n\nexport function removeVertex(\n    struct: HalfedgeDS,\n    vertex: Vertex,\n    mergeFaces = true) {\n\n  for (const halfedge of vertex.loopCW()) {\n    removeEdge(struct, halfedge, mergeFaces);\n  }\n\n  struct.vertices.remove(vertex);\n}","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Thu Nov 03 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Face } from \"../core/Face\";\nimport { Halfedge } from \"../core/Halfedge\";\nimport { HalfedgeDS } from \"../core/HalfedgeDS\";\nimport { Vertex } from \"../core/Vertex\";\n\nexport function cutFace(\n    struct: HalfedgeDS,\n    face: Face,\n    v1: Vertex,\n    v2: Vertex,\n    createNewFace = true){\n  \n  if (v1 === v2) {\n    throw new Error('Vertices v1 and v2 should be different');\n  }\n\n  let out1 = face.halfedgeFromVertex(v1);\n  if (!out1 && !v1.isFree()) {\n    throw new Error('Vertices v1 does not belong to face nor is free');\n  }\n\n  let out2 = face.halfedgeFromVertex(v2);\n  if (!out2 && !v2.isFree()) {\n    throw new Error('Vertices v2 does not belong to face nor is free');\n  }\n\n  // Check if v1 is already connected to v2 in the face\n  if ((out1 && out1.next.vertex === v2) || (out2 && out2.next.vertex === v1)) {\n    throw new Error(\"Vertices v1 and v2 are already connected\");\n  }\n\n  /*\n   *          From                    To\n   *\n   *    o → → → v1 → → → o       o → → → v1 → → → o              \n   *      ↖            ↙           ↖  f  ↓↑  f' ↙       \n   *        ↖    f   ↙               ↖   ↓↑   ↙    \n   *          ↖    ↙                   ↖ ↓↑ ↙  \n   *            v2                       v2\n   * \n   *                        or\n   *\n   *    o → → → o → → → o        o → → → v1 → → → o              \n   *      ↖   f ↓↑     ↙           ↖  f  ↓↑  f' ↙       \n   *        ↖   v1   ↙               ↖   ↓↑   ↙    \n   *          ↖    ↙                   ↖ ↓↑ ↙  \n   *            v2                       v2\n   * \n   *  --------------------------------------\n   * \n   *        ↖       ↙\n   *   out2   ↖   ↙   in2\n   *            v2           \n   *            ⇅        \n   *            ⇅   \n   *        h1  ⇅  h2     \n   *            ⇅  \n   *            ⇅  \n   *            v1\n   *    in1  ↗     ↘  out1\n   *       ↗         ↘\n   *            \n   */\n\n  // Create new halfedges\n  const h1 = new Halfedge(v1);\n  const h2 = new Halfedge(v2);\n  h1.face = face;\n  h2.face = face;\n  h1.twin = h2;\n  h1.next = h2;\n  h1.prev = h2;\n  h2.twin = h1;\n  h2.next = h1;\n  h2.prev = h1;\n\n  // If v1 is not part of face, get any outgoing halfedge\n  out1 = out1 ?? v1.freeHalfedgesOutLoop().next().value;\n\n  // Update refs around v1 if not isolated\n  if (out1) {\n    const in1 = out1.prev;\n    h1.prev = in1;\n    in1.next = h1;\n\n    h2.next = out1;\n    out1.prev = h2;\n  } else {\n    v1.halfedge = h1;\n  }\n\n  // If v2 is not part of face, get any outgoing halfedge\n  out2 = out2 ?? v2.freeHalfedgesOutLoop().next().value;\n\n  // Update refs around v2 if not isolated\n  if (out2) {\n\n    const in2 = out2.prev;\n    h2.prev = in2;\n    in2.next = h2;\n\n    h1.next = out2;\n    out2.prev = h1;  \n  } else {\n    v2.halfedge = h2;\n  }\n\n  struct.halfedges.push(h1);\n  struct.halfedges.push(h2);\n\n  // In the case where we connect isolated halfedge (without face) to this face, \n  // We update face ref loop\n  for (const he of face.halfedge.nextLoop()){\n    he.face = face;\n  }\n\n  // Check if h1 and h2 (twin halfedges) are on the same loop, if there aren't,\n  // it means we created a new halfedges loop, i.e. new face\n  let found = false;\n  const loop = h1.nextLoop();\n  let h = loop.next();\n  while(!found && !h.done) {\n    found = h.value === h2;\n    h = loop.next();\n  }\n\n  if (!found) {\n    // h2 is on a different loop than h1\n\n    // Update initial face halfedge reference in case it changed loop \n    face.halfedge = h1;\n\n    let newFace = null;\n\n    if (createNewFace) {\n      newFace = new Face(h2);\n      struct.faces.push(newFace);\n    }\n\n    // Update the face ref for each halfedge of the new loop either a new face\n    // or null\n    for (const h of h2.nextLoop()) {\n      h.face = newFace;\n    }\n  }\n\n  return h1;\n}","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Tue Oct 25 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189 \n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport { Vector3 } from \"three\";\nimport { Halfedge } from \"../core/Halfedge\";\nimport { HalfedgeDS } from \"../core/HalfedgeDS\";\nimport { Vertex } from \"../core/Vertex\";\n\nexport function splitEdge(\n    struct: HalfedgeDS,\n    halfedge: Halfedge,\n    position: Vector3, \n    tolerance = 1e-10) {\n\n  /**\n   * From\n   *            A -------------- he -------------> B \n   *            A <------------ twin ------------- B \n   * To         \n   *            A ---- he ----> v ---- newhe ----> B\n   *            A <--- twin --- v <--- newtwin --- B\n   */\n\n  const twin = halfedge.twin;\n  const A = halfedge.vertex;\n  const B = twin.vertex;\n\n  // No need to split if position matches A or B\n  if (A.matchesPosition(position, tolerance)) {\n    return A;\n  }\n  if (B.matchesPosition(position, tolerance)) {\n    return B;\n  }\n\n  const newVertex = new Vertex();\n  newVertex.position.copy(position);\n\n  // Create the new halfegdes\n  const newHalfedge = new Halfedge(newVertex);\n  const newTwin = new Halfedge(B);\n  newHalfedge.twin = newTwin;\n  newTwin.twin = newHalfedge;\n\n  // Update vertices halfedge refs\n  A.halfedge = halfedge;\n  newVertex.halfedge = newHalfedge;\n  B.halfedge = newTwin;\n\n\n  // Copy the face refs\n  newHalfedge.face = halfedge.face;\n  newTwin.face = twin.face;\n  \n  // Update next and prev refs\n  newHalfedge.next = halfedge.next;\n  newHalfedge.prev = halfedge;\n  halfedge.next = newHalfedge;\n  newTwin.next = twin;\n  newTwin.prev = twin.prev;\n  twin.prev = newTwin;\n\n  // Update structure\n  struct.vertices.push(newVertex);\n  struct.halfedges.push(newHalfedge);\n  struct.halfedges.push(newTwin);\n\n  return newVertex;\n}\n","/*\n * Author: Axel Antoine\n * mail: ax.antoine@gmail.com\n * website: http://axantoine.com\n * Created on Fri Nov 18 2022\n *\n * Loki, Inria project-team with Université de Lille\n * within the Joint Research Unit UMR 9189\n * CNRS - Centrale Lille - Université de Lille, CRIStAL\n * https://loki.lille.inria.fr\n *\n * Licence: Licence.md\n */\n\nimport {BufferAttribute, BufferGeometry, InterleavedBufferAttribute, Vector3} from \"three\";\nimport {Halfedge} from \"../core/Halfedge\";\nimport {HalfedgeDS} from \"../core/HalfedgeDS\";\nimport {Vertex} from \"../core/Vertex\";\n\nconst pos_ = new Vector3();\n\nexport function setFromGeometry(\n    struct: HalfedgeDS,\n    geometry: BufferGeometry,\n    tolerance= 1e-10) {\n\n  struct.clear();\n\n  // Check position and normal attributes\n  if (!geometry.hasAttribute(\"position\")) {\n    throw new Error(\"BufferGeometry does not have a position BufferAttribute.\");\n  }\n\n  // console.log(geometry)\n  const positions = geometry.getAttribute('position');\n\n  // Get the merged vertices Array\n  const indexVertexArray = computeVerticesIndexArray(positions, tolerance);\n\n  // If the geometry is not indexed, we get the indexes of faces vertices from\n  // the position buffer attribute directly in group of 3\n  let nbOfFaces = positions.count/3;\n  let getVertexIndex = function(bufferIndex: number) {\n    return indexVertexArray[bufferIndex];\n  }\n  // Otherwise, if the geometry is indexed, we get the index of faces vertices\n  // from the index buffer in group of 3\n  const indexBuffer = geometry.getIndex();\n  if (indexBuffer) {\n    nbOfFaces = indexBuffer.count/3;\n    getVertexIndex = function(bufferIndex: number) {\n      return indexVertexArray[indexBuffer.array[bufferIndex]];\n    }\n  }\n\n  // Save halfedges in a map where with a hash <src-vertex-id>\n  // their hash is index1-index2, so that it is easier to find the twin\n  const halfedgeMap = new Map<string, Halfedge>();\n  const vertexMap = new Map<number, Vertex>();\n\n\n  for (let faceIndex = 0; faceIndex < nbOfFaces; faceIndex++) {\n    let loopHalfedges = [] as Halfedge[]\n    let addedVertex = [] as Vertex[]\n    let addedEdges = [] as Halfedge[]\n\n    for (let i=0; i<3; i++) {\n\n      // Get the source vertex v1\n      const i1 = getVertexIndex(faceIndex*3 + i);\n      let v1 = vertexMap.get(i1);\n      // if(!v1?.isFree()) break\n      if (!v1) {\n        pos_.fromBufferAttribute(positions, i1);\n        v1 = struct.addVertex(pos_);\n        addedVertex.push(v1);\n        vertexMap.set(i1, v1);\n      }\n      // if(!v1.isFree()) break\n\n      // Get the destitation vertex\n      const i2 = getVertexIndex(faceIndex*3 + (i+1)%3);\n      let v2 = vertexMap.get(i2);\n      // if(!v2?.isFree()) break\n      if (!v2) {\n        pos_.fromBufferAttribute(positions, i2);\n        v2 = struct.addVertex(pos_);\n        addedVertex.push(v1);\n        vertexMap.set(i2, v2);\n      }\n      // if(!v2.isFree()) break\n\n      // Get the halfedge from v1 to v2\n      const hash1 = i1+'-'+i2;\n      let h1 = halfedgeMap.get(hash1);\n      if(h1?.face) h1 = undefined\n\n      if (!h1) {\n\n        try {\n          // console.log(h1)\n          h1 = struct.addEdge(v1, v2);\n          addedEdges.push(h1);\n          const h2 = h1.twin;\n          const hash2 = i2 + '-' + i1;\n          halfedgeMap.set(hash1, h1);\n          halfedgeMap.set(hash2, h2);\n          // console.log(h1.face)\n        }catch (e){\n          // console.error(e);\n        }\n      }\n\n      if(h1) loopHalfedges.push(h1);\n      else break;\n    }\n\n    try {\n      if(loopHalfedges.length < 3) throw 'need 3 for face'\n        struct.addFace(loopHalfedges);\n    }catch (e){\n      // console.error(e);\n      // for (const addedEdge of addedEdges) {\n      //   struct.removeEdge(addedEdge);\n      // }\n      // if(!addedEdges.length)\n      //   for (const addedVert of addedVertex) {\n      //       struct.removeVertex(addedVert);\n      //   }\n    }\n  }\n}\n\n\n\n/**\n * Returns an array where each index points to its new index in the buffer\n * attribute\n *\n * @param positions Vertices positions buffer\n * @param tolerance Distance tolerance of the vertices to merge\n * @returns\n */\nexport function computeVerticesIndexArray(\n    positions: BufferAttribute | InterleavedBufferAttribute,\n    tolerance = 1e-10){\n\n  const decimalShift = Math.log10(1 / tolerance);\n  const shiftMultiplier = Math.pow(10, decimalShift);\n\n  const hashMap = new Map<string, number>();\n  const indexArray = new Array<number>();\n\n  for (let i=0; i < positions.count; i++) {\n    // Compute a hash based on the vertex position rounded to a given precision\n    let hash = \"\";\n    for (let j=0; j<3; j++) {\n      hash += `${Math.round(positions.array[i*3+j] * shiftMultiplier)}`;\n    }\n\n    // If hash already exist, then set the buffer index to the existing vertex,\n    // otherwise, create it\n    let vertexIndex = hashMap.get(hash);\n    if (vertexIndex === undefined) {\n      vertexIndex = i;\n      hashMap.set(hash, i);\n    }\n    indexArray.push(vertexIndex);\n  }\n  return indexArray;\n}\n\n\n\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 23/02/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\n// LICENCE: Licence.md\nimport {BufferGeometry, Vector3} from 'three';\nimport {Face} from './Face';\nimport {Vertex} from './Vertex';\nimport {Halfedge} from './Halfedge';\nimport {addEdge} from '../operations/addEdge';\nimport {addFace} from '../operations/addFace';\nimport {addVertex} from '../operations/addVertex';\nimport {removeVertex} from '../operations/removeVertex';\nimport {removeEdge} from '../operations/removeEdge';\nimport {removeFace} from '../operations/removeFace';\nimport {cutFace} from '../operations/cutFace';\nimport {splitEdge} from '../operations/splitEdge';\nimport {setFromGeometry} from '../operations/setFromGeometry';\n\n\n/**\n * Class representing an Halfedge Data Structure\n */\nexport class HalfedgeDS {\n\n  /** @readonly Faces */\n  readonly faces = new Array<Face>();\n  /** @readonly Vertices */\n  readonly vertices = new Array<Vertex>();\n  /** @readonly Halfedges */\n  readonly halfedges = new Array<Halfedge>();\n\n  /**\n   * Sets the halfedge structure from a BufferGeometry.\n   * @param geometry BufferGeometry to read\n   * @param tolerance Tolerance distance from which positions are considered equal\n   */\n  setFromGeometry(geometry: BufferGeometry, tolerance = 1e-10) {\n    return setFromGeometry(this, geometry, tolerance);\n  }\n\n  /**\n   * Returns an array of all the halfedge loops in the structure.\n   *\n   * *Note: Actually returns an array of halfedges from which loop generator\n   * can be called*\n   *\n   * @returns\n   */\n  loops() {\n    const loops = new Array<Halfedge>();\n\n    const handled = new Set<Halfedge>();\n\n    for (const halfedge of this.halfedges) {\n      if (!handled.has(halfedge)) {\n\n        for (const he of halfedge.nextLoop()) {\n          handled.add(he);\n        }\n        loops.push(halfedge);\n      }\n    }\n    return loops;\n  }\n\n  /**\n   * Clear the structure data\n   */\n  clear() {\n    this.faces.clear();\n    this.vertices.clear();\n    this.halfedges.clear();\n  }\n\n  /**\n   * Adds a new vertex to the structure at the given position and returns it.\n   * If checkDuplicates is true, returns any existing vertex that matches the\n   * given position.\n   *\n   * @param position New vertex position\n   * @param checkDuplicates Enable/disable existing vertex matching, default false\n   * @param tolerance Tolerance used for vertices position comparison\n   * @returns\n   */\n  addVertex(\n      position: Vector3,\n      checkDuplicates = false,\n      tolerance = 1e-10) {\n    return addVertex(this, position, checkDuplicates, tolerance);\n  }\n\n  /**\n   * Adds an edge (i.e. a pair of halfedges) between the given vertices.\n   * Requires vertices to be free, i.e., there is at least one free halfedge\n   * (i.e. without face) in their neighborhood.\n   *\n   * @param v1 First vertex to link\n   * @param v2 Second vertex to link\n   * @param allowParallels Allows multiple pair of halfedges between vertices, default false\n   * @returns Existing or new halfedge\n   */\n  addEdge(v1: Vertex, v2: Vertex, allowParallels = false) {\n    return addEdge(this, v1, v2, allowParallels)\n  }\n\n  /**\n   * Adds a face to an existing halfedge loop\n   * @param halfedge\n   * @returns\n   */\n  addFace(halfedges: Halfedge[]) {\n    return addFace(this, halfedges);\n  }\n\n  /**\n   * Removes a vertex from the structure\n   * @param vertex Vertex to remove\n   * @param mergeFaces If true, merges connected faces if any, otherwise removes them. Default true\n   */\n  removeVertex(vertex: Vertex, mergeFaces = true) {\n    return removeVertex(this, vertex, mergeFaces);\n  }\n\n  /**\n   * Removes an edge from the structrure\n   * @param halfedge Halfedge to remove\n   * @param mergeFaces If true, merges connected faces if any, otherwise removes them. Default true\n   */\n  removeEdge(halfedge: Halfedge, mergeFaces = true) {\n    return removeEdge(this, halfedge, mergeFaces);\n  }\n\n  /**\n   * Removes a face from the structure.\n   * @param face Face to remove\n   */\n  removeFace(face: Face) {\n    return removeFace(this, face);\n  }\n\n  /**ts\n   * Cuts the `face` between the vertices `v1` and `v2`.\n   * v1 and v2 must either be vertices of the face or isolated vertices.\n   *\n   * To test if a new face is created, simply do\n   * ```\n   *    const halfedge = struct.cutFace(face, v1, v2, true);\n   *    if (halfedge.face !== halfedge.twin.face) {\n   *      // Halfedge are on different faces / loops\n   *      const existingFace = halfedge.face;\n   *      const newFace = halfedge.twin.face;\n   *    }\n   * ```\n   *\n   *\n   * @param face Face to cut\n   * @param v1 1st vertex\n   * @param v2 2nd vertex\n   * @param createNewFace wether to create a new face or not when cutting\n   * @returns the cutting halfedge\n   */\n  cutFace(face: Face, v1: Vertex, v2: Vertex, createNewFace = true) {\n    return cutFace(this, face, v1, v2, createNewFace);\n  }\n\n  /**\n   * Splits the halfedge at position and returns the new vertex\n   * @param halfEdge The HalfEdge to be splitted\n   * @param position Position of the split vertex\n   * @returns the new created vertex\n   */\n  splitEdge(halfedge: Halfedge, position: Vector3, tolerance = 1e-10) {\n    return splitEdge(this, halfedge, position, tolerance);\n  }\n\n}\n\n\n\n\n\n\n\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 24/05/2022\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\ndeclare global {\n  interface Array<T> {\n    clear(): Array<T>;\n    remove(t: T): boolean;\n  }\n}\n\nArray.prototype.clear = function() {\n  this.splice(0, this.length);\n  return this;\n}\n\nArray.prototype.remove = function<T>(t: T) {\n  const idx = this.indexOf(t);\n  if (idx === -1) {\n    return false;\n  }\n  this.splice(idx, 1);\n  return true;\n}\n\nexport {}\n\n","// Split strategy constants\nexport const CENTER = 0;\nexport const AVERAGE = 1;\nexport const SAH = 2;\n\n// Traversal constants\nexport const NOT_INTERSECTED = 0;\nexport const INTERSECTED = 1;\nexport const CONTAINED = 2;\n\n// SAH cost constants\n// TODO: hone these costs more. The relative difference between them should be the\n// difference in measured time to perform a triangle intersection vs traversing\n// bounds.\nexport const TRIANGLE_INTERSECT_COST = 1.25;\nexport const TRAVERSAL_COST = 1;\n\n\n// Build constants\nexport const BYTES_PER_NODE = 6 * 4 + 4 + 4;\nexport const IS_LEAFNODE_FLAG = 0xFFFF;\n\n// EPSILON for computing floating point error during build\n// https://en.wikipedia.org/wiki/Machine_epsilon#Values_for_standard_hardware_floating_point_arithmetics\nexport const FLOAT32_EPSILON = Math.pow( 2, - 24 );\n\nexport const SKIP_GENERATION = Symbol( 'SKIP_GENERATION' );\n","import { BufferAttribute } from 'three';\n\nexport function getVertexCount( geo ) {\n\n\treturn geo.index ? geo.index.count : geo.attributes.position.count;\n\n}\n\nexport function getTriCount( geo ) {\n\n\treturn getVertexCount( geo ) / 3;\n\n}\n\nexport function getIndexArray( vertexCount, BufferConstructor = ArrayBuffer ) {\n\n\tif ( vertexCount > 65535 ) {\n\n\t\treturn new Uint32Array( new BufferConstructor( 4 * vertexCount ) );\n\n\t} else {\n\n\t\treturn new Uint16Array( new BufferConstructor( 2 * vertexCount ) );\n\n\t}\n\n}\n\n// ensures that an index is present on the geometry\nexport function ensureIndex( geo, options ) {\n\n\tif ( ! geo.index ) {\n\n\t\tconst vertexCount = geo.attributes.position.count;\n\t\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\t\tconst index = getIndexArray( vertexCount, BufferConstructor );\n\t\tgeo.setIndex( new BufferAttribute( index, 1 ) );\n\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tindex[ i ] = i;\n\n\t\t}\n\n\t}\n\n}\n\n// Computes the set of { offset, count } ranges which need independent BVH roots. Each\n// region in the geometry index that belongs to a different set of material groups requires\n// a separate BVH root, so that triangles indices belonging to one group never get swapped\n// with triangle indices belongs to another group. For example, if the groups were like this:\n//\n// [-------------------------------------------------------------]\n// |__________________|\n//   g0 = [0, 20]  |______________________||_____________________|\n//                      g1 = [16, 40]           g2 = [41, 60]\n//\n// we would need four BVH roots: [0, 15], [16, 20], [21, 40], [41, 60].\nexport function getFullGeometryRange( geo ) {\n\n\tconst triCount = getTriCount( geo );\n\tconst drawRange = geo.drawRange;\n\tconst start = drawRange.start / 3;\n\tconst end = ( drawRange.start + drawRange.count ) / 3;\n\n\tconst offset = Math.max( 0, start );\n\tconst count = Math.min( triCount, end ) - offset;\n\treturn [ {\n\t\toffset: Math.floor( offset ),\n\t\tcount: Math.floor( count ),\n\t} ];\n\n}\n\nexport function getRootIndexRanges( geo ) {\n\n\tif ( ! geo.groups || ! geo.groups.length ) {\n\n\t\treturn getFullGeometryRange( geo );\n\n\t}\n\n\tconst ranges = [];\n\tconst rangeBoundaries = new Set();\n\n\tconst drawRange = geo.drawRange;\n\tconst drawRangeStart = drawRange.start / 3;\n\tconst drawRangeEnd = ( drawRange.start + drawRange.count ) / 3;\n\tfor ( const group of geo.groups ) {\n\n\t\tconst groupStart = group.start / 3;\n\t\tconst groupEnd = ( group.start + group.count ) / 3;\n\t\trangeBoundaries.add( Math.max( drawRangeStart, groupStart ) );\n\t\trangeBoundaries.add( Math.min( drawRangeEnd, groupEnd ) );\n\n\t}\n\n\n\t// note that if you don't pass in a comparator, it sorts them lexicographically as strings :-(\n\tconst sortedBoundaries = Array.from( rangeBoundaries.values() ).sort( ( a, b ) => a - b );\n\tfor ( let i = 0; i < sortedBoundaries.length - 1; i ++ ) {\n\n\t\tconst start = sortedBoundaries[ i ];\n\t\tconst end = sortedBoundaries[ i + 1 ];\n\n\t\tranges.push( {\n\t\t\toffset: Math.floor( start ),\n\t\t\tcount: Math.floor( end - start ),\n\t\t} );\n\n\t}\n\n\treturn ranges;\n\n}\n\nexport function hasGroupGaps( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\treturn false;\n\n\t}\n\n\tconst vertexCount = getTriCount( geometry );\n\tconst groups = getRootIndexRanges( geometry )\n\t\t.sort( ( a, b ) => a.offset - b.offset );\n\n\tconst finalGroup = groups[ groups.length - 1 ];\n\tfinalGroup.count = Math.min( vertexCount - finalGroup.offset, finalGroup.count );\n\n\tlet total = 0;\n\tgroups.forEach( ( { count } ) => total += count );\n\treturn vertexCount !== total;\n\n}\n","import { FLOAT32_EPSILON } from '../Constants.js';\nimport { getTriCount } from './geometryUtils.js';\n\n// computes the union of the bounds of all of the given triangles and puts the resulting box in \"target\".\n// A bounding box is computed for the centroids of the triangles, as well, and placed in \"centroidTarget\".\n// These are computed together to avoid redundant accesses to bounds array.\nexport function getBounds( triangleBounds, offset, count, target, centroidTarget ) {\n\n\tlet minx = Infinity;\n\tlet miny = Infinity;\n\tlet minz = Infinity;\n\tlet maxx = - Infinity;\n\tlet maxy = - Infinity;\n\tlet maxz = - Infinity;\n\n\tlet cminx = Infinity;\n\tlet cminy = Infinity;\n\tlet cminz = Infinity;\n\tlet cmaxx = - Infinity;\n\tlet cmaxy = - Infinity;\n\tlet cmaxz = - Infinity;\n\n\tfor ( let i = offset * 6, end = ( offset + count ) * 6; i < end; i += 6 ) {\n\n\t\tconst cx = triangleBounds[ i + 0 ];\n\t\tconst hx = triangleBounds[ i + 1 ];\n\t\tconst lx = cx - hx;\n\t\tconst rx = cx + hx;\n\t\tif ( lx < minx ) minx = lx;\n\t\tif ( rx > maxx ) maxx = rx;\n\t\tif ( cx < cminx ) cminx = cx;\n\t\tif ( cx > cmaxx ) cmaxx = cx;\n\n\t\tconst cy = triangleBounds[ i + 2 ];\n\t\tconst hy = triangleBounds[ i + 3 ];\n\t\tconst ly = cy - hy;\n\t\tconst ry = cy + hy;\n\t\tif ( ly < miny ) miny = ly;\n\t\tif ( ry > maxy ) maxy = ry;\n\t\tif ( cy < cminy ) cminy = cy;\n\t\tif ( cy > cmaxy ) cmaxy = cy;\n\n\t\tconst cz = triangleBounds[ i + 4 ];\n\t\tconst hz = triangleBounds[ i + 5 ];\n\t\tconst lz = cz - hz;\n\t\tconst rz = cz + hz;\n\t\tif ( lz < minz ) minz = lz;\n\t\tif ( rz > maxz ) maxz = rz;\n\t\tif ( cz < cminz ) cminz = cz;\n\t\tif ( cz > cmaxz ) cmaxz = cz;\n\n\t}\n\n\ttarget[ 0 ] = minx;\n\ttarget[ 1 ] = miny;\n\ttarget[ 2 ] = minz;\n\n\ttarget[ 3 ] = maxx;\n\ttarget[ 4 ] = maxy;\n\ttarget[ 5 ] = maxz;\n\n\tcentroidTarget[ 0 ] = cminx;\n\tcentroidTarget[ 1 ] = cminy;\n\tcentroidTarget[ 2 ] = cminz;\n\n\tcentroidTarget[ 3 ] = cmaxx;\n\tcentroidTarget[ 4 ] = cmaxy;\n\tcentroidTarget[ 5 ] = cmaxz;\n\n}\n\n// precomputes the bounding box for each triangle; required for quickly calculating tree splits.\n// result is an array of size tris.length * 6 where triangle i maps to a\n// [x_center, x_delta, y_center, y_delta, z_center, z_delta] tuple starting at index i * 6,\n// representing the center and half-extent in each dimension of triangle i\nexport function computeTriangleBounds( geo, target = null, offset = null, count = null ) {\n\n\tconst posAttr = geo.attributes.position;\n\tconst index = geo.index ? geo.index.array : null;\n\tconst triCount = getTriCount( geo );\n\tconst normalized = posAttr.normalized;\n\tlet triangleBounds;\n\tif ( target === null ) {\n\n\t\ttriangleBounds = new Float32Array( triCount * 6 * 4 );\n\t\toffset = 0;\n\t\tcount = triCount;\n\n\t} else {\n\n\t\ttriangleBounds = target;\n\t\toffset = offset || 0;\n\t\tcount = count || triCount;\n\n\t}\n\n\t// used for non-normalized positions\n\tconst posArr = posAttr.array;\n\n\t// support for an interleaved position buffer\n\tconst bufferOffset = posAttr.offset || 0;\n\tlet stride = 3;\n\tif ( posAttr.isInterleavedBufferAttribute ) {\n\n\t\tstride = posAttr.data.stride;\n\n\t}\n\n\t// used for normalized positions\n\tconst getters = [ 'getX', 'getY', 'getZ' ];\n\n\tfor ( let tri = offset; tri < offset + count; tri ++ ) {\n\n\t\tconst tri3 = tri * 3;\n\t\tconst tri6 = tri * 6;\n\n\t\tlet ai = tri3 + 0;\n\t\tlet bi = tri3 + 1;\n\t\tlet ci = tri3 + 2;\n\n\t\tif ( index ) {\n\n\t\t\tai = index[ ai ];\n\t\t\tbi = index[ bi ];\n\t\t\tci = index[ ci ];\n\n\t\t}\n\n\t\t// we add the stride and offset here since we access the array directly\n\t\t// below for the sake of performance\n\t\tif ( ! normalized ) {\n\n\t\t\tai = ai * stride + bufferOffset;\n\t\t\tbi = bi * stride + bufferOffset;\n\t\t\tci = ci * stride + bufferOffset;\n\n\t\t}\n\n\t\tfor ( let el = 0; el < 3; el ++ ) {\n\n\t\t\tlet a, b, c;\n\n\t\t\tif ( normalized ) {\n\n\t\t\t\ta = posAttr[ getters[ el ] ]( ai );\n\t\t\t\tb = posAttr[ getters[ el ] ]( bi );\n\t\t\t\tc = posAttr[ getters[ el ] ]( ci );\n\n\t\t\t} else {\n\n\t\t\t\ta = posArr[ ai + el ];\n\t\t\t\tb = posArr[ bi + el ];\n\t\t\t\tc = posArr[ ci + el ];\n\n\t\t\t}\n\n\t\t\tlet min = a;\n\t\t\tif ( b < min ) min = b;\n\t\t\tif ( c < min ) min = c;\n\n\t\t\tlet max = a;\n\t\t\tif ( b > max ) max = b;\n\t\t\tif ( c > max ) max = c;\n\n\t\t\t// Increase the bounds size by float32 epsilon to avoid precision errors when\n\t\t\t// converting to 32 bit float. Scale the epsilon by the size of the numbers being\n\t\t\t// worked with.\n\t\t\tconst halfExtents = ( max - min ) / 2;\n\t\t\tconst el2 = el * 2;\n\t\t\ttriangleBounds[ tri6 + el2 + 0 ] = min + halfExtents;\n\t\t\ttriangleBounds[ tri6 + el2 + 1 ] = halfExtents + ( Math.abs( min ) + halfExtents ) * FLOAT32_EPSILON;\n\n\t\t}\n\n\t}\n\n\treturn triangleBounds;\n\n}\n","export function arrayToBox( nodeIndex32, array, target ) {\n\n\ttarget.min.x = array[ nodeIndex32 ];\n\ttarget.min.y = array[ nodeIndex32 + 1 ];\n\ttarget.min.z = array[ nodeIndex32 + 2 ];\n\n\ttarget.max.x = array[ nodeIndex32 + 3 ];\n\ttarget.max.y = array[ nodeIndex32 + 4 ];\n\ttarget.max.z = array[ nodeIndex32 + 5 ];\n\n\treturn target;\n\n}\n\nexport function makeEmptyBounds( target ) {\n\n\ttarget[ 0 ] = target[ 1 ] = target[ 2 ] = Infinity;\n\ttarget[ 3 ] = target[ 4 ] = target[ 5 ] = - Infinity;\n\n}\n\nexport function getLongestEdgeIndex( bounds ) {\n\n\tlet splitDimIdx = - 1;\n\tlet splitDist = - Infinity;\n\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\tconst dist = bounds[ i + 3 ] - bounds[ i ];\n\t\tif ( dist > splitDist ) {\n\n\t\t\tsplitDist = dist;\n\t\t\tsplitDimIdx = i;\n\n\t\t}\n\n\t}\n\n\treturn splitDimIdx;\n\n}\n\n// copies bounds a into bounds b\nexport function copyBounds( source, target ) {\n\n\ttarget.set( source );\n\n}\n\n// sets bounds target to the union of bounds a and b\nexport function unionBounds( a, b, target ) {\n\n\tlet aVal, bVal;\n\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\tconst d3 = d + 3;\n\n\t\t// set the minimum values\n\t\taVal = a[ d ];\n\t\tbVal = b[ d ];\n\t\ttarget[ d ] = aVal < bVal ? aVal : bVal;\n\n\t\t// set the max values\n\t\taVal = a[ d3 ];\n\t\tbVal = b[ d3 ];\n\t\ttarget[ d3 ] = aVal > bVal ? aVal : bVal;\n\n\t}\n\n}\n\n// expands the given bounds by the provided triangle bounds\nexport function expandByTriangleBounds( startIndex, triangleBounds, bounds ) {\n\n\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\tconst tCenter = triangleBounds[ startIndex + 2 * d ];\n\t\tconst tHalf = triangleBounds[ startIndex + 2 * d + 1 ];\n\n\t\tconst tMin = tCenter - tHalf;\n\t\tconst tMax = tCenter + tHalf;\n\n\t\tif ( tMin < bounds[ d ] ) {\n\n\t\t\tbounds[ d ] = tMin;\n\n\t\t}\n\n\t\tif ( tMax > bounds[ d + 3 ] ) {\n\n\t\t\tbounds[ d + 3 ] = tMax;\n\n\t\t}\n\n\t}\n\n}\n\n// compute bounds surface area\nexport function computeSurfaceArea( bounds ) {\n\n\tconst d0 = bounds[ 3 ] - bounds[ 0 ];\n\tconst d1 = bounds[ 4 ] - bounds[ 1 ];\n\tconst d2 = bounds[ 5 ] - bounds[ 2 ];\n\n\treturn 2 * ( d0 * d1 + d1 * d2 + d2 * d0 );\n\n}\n","import { getLongestEdgeIndex, computeSurfaceArea, copyBounds, unionBounds, expandByTriangleBounds } from '../../utils/ArrayBoxUtilities.js';\nimport { CENTER, AVERAGE, SAH, TRIANGLE_INTERSECT_COST, TRAVERSAL_COST } from '../Constants.js';\n\nconst BIN_COUNT = 32;\nconst binsSort = ( a, b ) => a.candidate - b.candidate;\nconst sahBins = new Array( BIN_COUNT ).fill().map( () => {\n\n\treturn {\n\n\t\tcount: 0,\n\t\tbounds: new Float32Array( 6 ),\n\t\trightCacheBounds: new Float32Array( 6 ),\n\t\tleftCacheBounds: new Float32Array( 6 ),\n\t\tcandidate: 0,\n\n\t};\n\n} );\nconst leftBounds = new Float32Array( 6 );\n\nexport function getOptimalSplit( nodeBoundingData, centroidBoundingData, triangleBounds, offset, count, strategy ) {\n\n\tlet axis = - 1;\n\tlet pos = 0;\n\n\t// Center\n\tif ( strategy === CENTER ) {\n\n\t\taxis = getLongestEdgeIndex( centroidBoundingData );\n\t\tif ( axis !== - 1 ) {\n\n\t\t\tpos = ( centroidBoundingData[ axis ] + centroidBoundingData[ axis + 3 ] ) / 2;\n\n\t\t}\n\n\t} else if ( strategy === AVERAGE ) {\n\n\t\taxis = getLongestEdgeIndex( nodeBoundingData );\n\t\tif ( axis !== - 1 ) {\n\n\t\t\tpos = getAverage( triangleBounds, offset, count, axis );\n\n\t\t}\n\n\t} else if ( strategy === SAH ) {\n\n\t\tconst rootSurfaceArea = computeSurfaceArea( nodeBoundingData );\n\t\tlet bestCost = TRIANGLE_INTERSECT_COST * count;\n\n\t\t// iterate over all axes\n\t\tconst cStart = offset * 6;\n\t\tconst cEnd = ( offset + count ) * 6;\n\t\tfor ( let a = 0; a < 3; a ++ ) {\n\n\t\t\tconst axisLeft = centroidBoundingData[ a ];\n\t\t\tconst axisRight = centroidBoundingData[ a + 3 ];\n\t\t\tconst axisLength = axisRight - axisLeft;\n\t\t\tconst binWidth = axisLength / BIN_COUNT;\n\n\t\t\t// If we have fewer triangles than we're planning to split then just check all\n\t\t\t// the triangle positions because it will be faster.\n\t\t\tif ( count < BIN_COUNT / 4 ) {\n\n\t\t\t\t// initialize the bin candidates\n\t\t\t\tconst truncatedBins = [ ...sahBins ];\n\t\t\t\ttruncatedBins.length = count;\n\n\t\t\t\t// set the candidates\n\t\t\t\tlet b = 0;\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6, b ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ b ];\n\t\t\t\t\tbin.candidate = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tbin.count = 0;\n\n\t\t\t\t\tconst {\n\t\t\t\t\t\tbounds,\n\t\t\t\t\t\tleftCacheBounds,\n\t\t\t\t\t\trightCacheBounds,\n\t\t\t\t\t} = bin;\n\t\t\t\t\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\t\t\t\t\trightCacheBounds[ d ] = Infinity;\n\t\t\t\t\t\trightCacheBounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t\tleftCacheBounds[ d ] = Infinity;\n\t\t\t\t\t\tleftCacheBounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t\tbounds[ d ] = Infinity;\n\t\t\t\t\t\tbounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t}\n\n\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bounds );\n\n\t\t\t\t}\n\n\t\t\t\ttruncatedBins.sort( binsSort );\n\n\t\t\t\t// remove redundant splits\n\t\t\t\tlet splitCount = count;\n\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\twhile ( bi + 1 < splitCount && truncatedBins[ bi + 1 ].candidate === bin.candidate ) {\n\n\t\t\t\t\t\ttruncatedBins.splice( bi + 1, 1 );\n\t\t\t\t\t\tsplitCount --;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// find the appropriate bin for each triangle and expand the bounds.\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6 ) {\n\n\t\t\t\t\tconst center = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\t\tif ( center >= bin.candidate ) {\n\n\t\t\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.rightCacheBounds );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.leftCacheBounds );\n\t\t\t\t\t\t\tbin.count ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// expand all the bounds\n\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\tconst leftCount = bin.count;\n\t\t\t\t\tconst rightCount = count - bin.count;\n\n\t\t\t\t\t// check the cost of this split\n\t\t\t\t\tconst leftBounds = bin.leftCacheBounds;\n\t\t\t\t\tconst rightBounds = bin.rightCacheBounds;\n\n\t\t\t\t\tlet leftProb = 0;\n\t\t\t\t\tif ( leftCount !== 0 ) {\n\n\t\t\t\t\t\tleftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet rightProb = 0;\n\t\t\t\t\tif ( rightCount !== 0 ) {\n\n\t\t\t\t\t\trightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (\n\t\t\t\t\t\tleftProb * leftCount + rightProb * rightCount\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( cost < bestCost ) {\n\n\t\t\t\t\t\taxis = a;\n\t\t\t\t\t\tbestCost = cost;\n\t\t\t\t\t\tpos = bin.candidate;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// reset the bins\n\t\t\t\tfor ( let i = 0; i < BIN_COUNT; i ++ ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tbin.count = 0;\n\t\t\t\t\tbin.candidate = axisLeft + binWidth + i * binWidth;\n\n\t\t\t\t\tconst bounds = bin.bounds;\n\t\t\t\t\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\t\t\t\t\tbounds[ d ] = Infinity;\n\t\t\t\t\t\tbounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over all center positions\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6 ) {\n\n\t\t\t\t\tconst triCenter = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tconst relativeCenter = triCenter - axisLeft;\n\n\t\t\t\t\t// in the partition function if the centroid lies on the split plane then it is\n\t\t\t\t\t// considered to be on the right side of the split\n\t\t\t\t\tlet binIndex = ~ ~ ( relativeCenter / binWidth );\n\t\t\t\t\tif ( binIndex >= BIN_COUNT ) binIndex = BIN_COUNT - 1;\n\n\t\t\t\t\tconst bin = sahBins[ binIndex ];\n\t\t\t\t\tbin.count ++;\n\n\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.bounds );\n\n\t\t\t\t}\n\n\t\t\t\t// cache the unioned bounds from right to left so we don't have to regenerate them each time\n\t\t\t\tconst lastBin = sahBins[ BIN_COUNT - 1 ];\n\t\t\t\tcopyBounds( lastBin.bounds, lastBin.rightCacheBounds );\n\t\t\t\tfor ( let i = BIN_COUNT - 2; i >= 0; i -- ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tconst nextBin = sahBins[ i + 1 ];\n\t\t\t\t\tunionBounds( bin.bounds, nextBin.rightCacheBounds, bin.rightCacheBounds );\n\n\t\t\t\t}\n\n\t\t\t\tlet leftCount = 0;\n\t\t\t\tfor ( let i = 0; i < BIN_COUNT - 1; i ++ ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tconst binCount = bin.count;\n\t\t\t\t\tconst bounds = bin.bounds;\n\n\t\t\t\t\tconst nextBin = sahBins[ i + 1 ];\n\t\t\t\t\tconst rightBounds = nextBin.rightCacheBounds;\n\n\t\t\t\t\t// don't do anything with the bounds if the new bounds have no triangles\n\t\t\t\t\tif ( binCount !== 0 ) {\n\n\t\t\t\t\t\tif ( leftCount === 0 ) {\n\n\t\t\t\t\t\t\tcopyBounds( bounds, leftBounds );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tunionBounds( bounds, leftBounds, leftBounds );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tleftCount += binCount;\n\n\t\t\t\t\t// check the cost of this split\n\t\t\t\t\tlet leftProb = 0;\n\t\t\t\t\tlet rightProb = 0;\n\n\t\t\t\t\tif ( leftCount !== 0 ) {\n\n\t\t\t\t\t\tleftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rightCount = count - leftCount;\n\t\t\t\t\tif ( rightCount !== 0 ) {\n\n\t\t\t\t\t\trightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (\n\t\t\t\t\t\tleftProb * leftCount + rightProb * rightCount\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( cost < bestCost ) {\n\n\t\t\t\t\t\taxis = a;\n\t\t\t\t\t\tbestCost = cost;\n\t\t\t\t\t\tpos = bin.candidate;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\tconsole.warn( `MeshBVH: Invalid build strategy value ${ strategy } used.` );\n\n\t}\n\n\treturn { axis, pos };\n\n}\n\n// returns the average coordinate on the specified axis of the all the provided triangles\nfunction getAverage( triangleBounds, offset, count, axis ) {\n\n\tlet avg = 0;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tavg += triangleBounds[ i * 6 + axis * 2 ];\n\n\t}\n\n\treturn avg / count;\n\n}\n","export class MeshBVHNode {\n\n\tconstructor() {\n\n\t\t// internal nodes have boundingData, left, right, and splitAxis\n\t\t// leaf nodes have offset and count (referring to primitives in the mesh geometry)\n\n\t\tthis.boundingData = new Float32Array( 6 );\n\n\t}\n\n}\n","/********************************************************/\n/* This file is generated from \"sortUtils.template.js\". */\n/********************************************************/\n// reorders `tris` such that for `count` elements after `offset`, elements on the left side of the split\n// will be on the left and elements on the right side of the split will be on the right. returns the index\n// of the first element on the right side, or offset + count if there are no elements on the right side.\nfunction partition( indirectBuffer, index, triangleBounds, offset, count, split ) {\n\n\tlet left = offset;\n\tlet right = offset + count - 1;\n\tconst pos = split.pos;\n\tconst axisOffset = split.axis * 2;\n\n\t// hoare partitioning, see e.g. https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\n\twhile ( true ) {\n\n\t\twhile ( left <= right && triangleBounds[ left * 6 + axisOffset ] < pos ) {\n\n\t\t\tleft ++;\n\n\t\t}\n\n\t\t// if a triangle center lies on the partition plane it is considered to be on the right side\n\t\twhile ( left <= right && triangleBounds[ right * 6 + axisOffset ] >= pos ) {\n\n\t\t\tright --;\n\n\t\t}\n\n\t\tif ( left < right ) {\n\n\t\t\t// we need to swap all of the information associated with the triangles at index\n\t\t\t// left and right; that's the verts in the geometry index, the bounds,\n\t\t\t// and perhaps the SAH planes\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tlet t0 = index[ left * 3 + i ];\n\t\t\t\tindex[ left * 3 + i ] = index[ right * 3 + i ];\n\t\t\t\tindex[ right * 3 + i ] = t0;\n\n\t\t\t}\n\n\n\t\t\t// swap bounds\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tlet tb = triangleBounds[ left * 6 + i ];\n\t\t\t\ttriangleBounds[ left * 6 + i ] = triangleBounds[ right * 6 + i ];\n\t\t\t\ttriangleBounds[ right * 6 + i ] = tb;\n\n\t\t\t}\n\n\t\t\tleft ++;\n\t\t\tright --;\n\n\t\t} else {\n\n\t\t\treturn left;\n\n\t\t}\n\n\t}\n\n}\n\nexport { partition };\n","/********************************************************/\n/* This file is generated from \"sortUtils.template.js\". */\n/********************************************************/\n// reorders `tris` such that for `count` elements after `offset`, elements on the left side of the split\n// will be on the left and elements on the right side of the split will be on the right. returns the index\n// of the first element on the right side, or offset + count if there are no elements on the right side.\nfunction partition_indirect( indirectBuffer, index, triangleBounds, offset, count, split ) {\n\n\tlet left = offset;\n\tlet right = offset + count - 1;\n\tconst pos = split.pos;\n\tconst axisOffset = split.axis * 2;\n\n\t// hoare partitioning, see e.g. https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\n\twhile ( true ) {\n\n\t\twhile ( left <= right && triangleBounds[ left * 6 + axisOffset ] < pos ) {\n\n\t\t\tleft ++;\n\n\t\t}\n\n\t\t// if a triangle center lies on the partition plane it is considered to be on the right side\n\t\twhile ( left <= right && triangleBounds[ right * 6 + axisOffset ] >= pos ) {\n\n\t\t\tright --;\n\n\t\t}\n\n\t\tif ( left < right ) {\n\n\t\t\t// we need to swap all of the information associated with the triangles at index\n\t\t\t// left and right; that's the verts in the geometry index, the bounds,\n\t\t\t// and perhaps the SAH planes\n\t\t\tlet t = indirectBuffer[ left ];\n\t\t\tindirectBuffer[ left ] = indirectBuffer[ right ];\n\t\t\tindirectBuffer[ right ] = t;\n\n\n\t\t\t// swap bounds\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tlet tb = triangleBounds[ left * 6 + i ];\n\t\t\t\ttriangleBounds[ left * 6 + i ] = triangleBounds[ right * 6 + i ];\n\t\t\t\ttriangleBounds[ right * 6 + i ] = tb;\n\n\t\t\t}\n\n\t\t\tleft ++;\n\t\t\tright --;\n\n\t\t} else {\n\n\t\t\treturn left;\n\n\t\t}\n\n\t}\n\n}\n\nexport { partition_indirect };\n","export function IS_LEAF( n16, uint16Array ) {\n\n\treturn uint16Array[ n16 + 15 ] === 0xFFFF;\n\n}\n\nexport function OFFSET( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 6 ];\n\n}\n\nexport function COUNT( n16, uint16Array ) {\n\n\treturn uint16Array[ n16 + 14 ];\n\n}\n\nexport function LEFT_NODE( n32 ) {\n\n\treturn n32 + 8;\n\n}\n\nexport function RIGHT_NODE( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 6 ];\n\n}\n\nexport function SPLIT_AXIS( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 7 ];\n\n}\n\nexport function BOUNDING_DATA_INDEX( n32 ) {\n\n\treturn n32;\n\n}\n","import { BYTES_PER_NODE, IS_LEAFNODE_FLAG } from '../Constants.js';\nimport { IS_LEAF } from '../utils/nodeBufferUtils.js';\n\nlet float32Array, uint32Array, uint16Array, uint8Array;\nconst MAX_POINTER = Math.pow( 2, 32 );\n\nexport function countNodes( node ) {\n\n\tif ( 'count' in node ) {\n\n\t\treturn 1;\n\n\t} else {\n\n\t\treturn 1 + countNodes( node.left ) + countNodes( node.right );\n\n\t}\n\n}\n\nexport function populateBuffer( byteOffset, node, buffer ) {\n\n\tfloat32Array = new Float32Array( buffer );\n\tuint32Array = new Uint32Array( buffer );\n\tuint16Array = new Uint16Array( buffer );\n\tuint8Array = new Uint8Array( buffer );\n\n\treturn _populateBuffer( byteOffset, node );\n\n}\n\n// pack structure\n// boundingData  \t\t\t\t: 6 float32\n// right / offset \t\t\t\t: 1 uint32\n// splitAxis / isLeaf + count \t: 1 uint32 / 2 uint16\nfunction _populateBuffer( byteOffset, node ) {\n\n\tconst stride4Offset = byteOffset / 4;\n\tconst stride2Offset = byteOffset / 2;\n\tconst isLeaf = 'count' in node;\n\tconst boundingData = node.boundingData;\n\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\tfloat32Array[ stride4Offset + i ] = boundingData[ i ];\n\n\t}\n\n\tif ( isLeaf ) {\n\n\t\tif ( node.buffer ) {\n\n\t\t\tconst buffer = node.buffer;\n\t\t\tuint8Array.set( new Uint8Array( buffer ), byteOffset );\n\n\t\t\tfor ( let offset = byteOffset, l = byteOffset + buffer.byteLength; offset < l; offset += BYTES_PER_NODE ) {\n\n\t\t\t\tconst offset2 = offset / 2;\n\t\t\t\tif ( ! IS_LEAF( offset2, uint16Array ) ) {\n\n\t\t\t\t\tuint32Array[ ( offset / 4 ) + 6 ] += stride4Offset;\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn byteOffset + buffer.byteLength;\n\n\t\t} else {\n\n\t\t\tconst offset = node.offset;\n\t\t\tconst count = node.count;\n\t\t\tuint32Array[ stride4Offset + 6 ] = offset;\n\t\t\tuint16Array[ stride2Offset + 14 ] = count;\n\t\t\tuint16Array[ stride2Offset + 15 ] = IS_LEAFNODE_FLAG;\n\t\t\treturn byteOffset + BYTES_PER_NODE;\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = node.left;\n\t\tconst right = node.right;\n\t\tconst splitAxis = node.splitAxis;\n\n\t\tlet nextUnusedPointer;\n\t\tnextUnusedPointer = _populateBuffer( byteOffset + BYTES_PER_NODE, left );\n\n\t\tif ( ( nextUnusedPointer / 4 ) > MAX_POINTER ) {\n\n\t\t\tthrow new Error( 'MeshBVH: Cannot store child pointer greater than 32 bits.' );\n\n\t\t}\n\n\t\tuint32Array[ stride4Offset + 6 ] = nextUnusedPointer / 4;\n\t\tnextUnusedPointer = _populateBuffer( nextUnusedPointer, right );\n\n\t\tuint32Array[ stride4Offset + 7 ] = splitAxis;\n\t\treturn nextUnusedPointer;\n\n\t}\n\n}\n","import { ensureIndex, getFullGeometryRange, getRootIndexRanges, getTriCount, hasGroupGaps, } from './geometryUtils.js';\nimport { getBounds, computeTriangleBounds } from './computeBoundsUtils.js';\nimport { getOptimalSplit } from './splitUtils.js';\nimport { MeshBVHNode } from '../MeshBVHNode.js';\nimport { BYTES_PER_NODE } from '../Constants.js';\n\nimport { partition } from './sortUtils.generated.js';\nimport { partition_indirect } from './sortUtils_indirect.generated.js';\nimport { countNodes, populateBuffer } from './buildUtils.js';\n\nexport function generateIndirectBuffer( geometry, useSharedArrayBuffer ) {\n\n\tconst triCount = ( geometry.index ? geometry.index.count : geometry.attributes.position.count ) / 3;\n\tconst useUint32 = triCount > 2 ** 16;\n\tconst byteCount = useUint32 ? 4 : 2;\n\n\tconst buffer = useSharedArrayBuffer ? new SharedArrayBuffer( triCount * byteCount ) : new ArrayBuffer( triCount * byteCount );\n\tconst indirectBuffer = useUint32 ? new Uint32Array( buffer ) : new Uint16Array( buffer );\n\tfor ( let i = 0, l = indirectBuffer.length; i < l; i ++ ) {\n\n\t\tindirectBuffer[ i ] = i;\n\n\t}\n\n\treturn indirectBuffer;\n\n}\n\nexport function buildTree( bvh, triangleBounds, offset, count, options ) {\n\n\t// epxand variables\n\tconst {\n\t\tmaxDepth,\n\t\tverbose,\n\t\tmaxLeafTris,\n\t\tstrategy,\n\t\tonProgress,\n\t\tindirect,\n\t} = options;\n\tconst indirectBuffer = bvh._indirectBuffer;\n\tconst geometry = bvh.geometry;\n\tconst indexArray = geometry.index ? geometry.index.array : null;\n\tconst partionFunc = indirect ? partition_indirect : partition;\n\n\t// generate intermediate variables\n\tconst totalTriangles = getTriCount( geometry );\n\tconst cacheCentroidBoundingData = new Float32Array( 6 );\n\tlet reachedMaxDepth = false;\n\n\tconst root = new MeshBVHNode();\n\tgetBounds( triangleBounds, offset, count, root.boundingData, cacheCentroidBoundingData );\n\tsplitNode( root, offset, count, cacheCentroidBoundingData );\n\treturn root;\n\n\tfunction triggerProgress( trianglesProcessed ) {\n\n\t\tif ( onProgress ) {\n\n\t\t\tonProgress( trianglesProcessed / totalTriangles );\n\n\t\t}\n\n\t}\n\n\t// either recursively splits the given node, creating left and right subtrees for it, or makes it a leaf node,\n\t// recording the offset and count of its triangles and writing them into the reordered geometry index.\n\tfunction splitNode( node, offset, count, centroidBoundingData = null, depth = 0 ) {\n\n\t\tif ( ! reachedMaxDepth && depth >= maxDepth ) {\n\n\t\t\treachedMaxDepth = true;\n\t\t\tif ( verbose ) {\n\n\t\t\t\tconsole.warn( `MeshBVH: Max depth of ${ maxDepth } reached when generating BVH. Consider increasing maxDepth.` );\n\t\t\t\tconsole.warn( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// early out if we've met our capacity\n\t\tif ( count <= maxLeafTris || depth >= maxDepth ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\t\t\treturn node;\n\n\t\t}\n\n\t\t// Find where to split the volume\n\t\tconst split = getOptimalSplit( node.boundingData, centroidBoundingData, triangleBounds, offset, count, strategy );\n\t\tif ( split.axis === - 1 ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\t\t\treturn node;\n\n\t\t}\n\n\t\tconst splitOffset = partionFunc( indirectBuffer, indexArray, triangleBounds, offset, count, split );\n\n\t\t// create the two new child nodes\n\t\tif ( splitOffset === offset || splitOffset === offset + count ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\n\t\t} else {\n\n\t\t\tnode.splitAxis = split.axis;\n\n\t\t\t// create the left child and compute its bounding box\n\t\t\tconst left = new MeshBVHNode();\n\t\t\tconst lstart = offset;\n\t\t\tconst lcount = splitOffset - offset;\n\t\t\tnode.left = left;\n\n\t\t\tgetBounds( triangleBounds, lstart, lcount, left.boundingData, cacheCentroidBoundingData );\n\t\t\tsplitNode( left, lstart, lcount, cacheCentroidBoundingData, depth + 1 );\n\n\t\t\t// repeat for right\n\t\t\tconst right = new MeshBVHNode();\n\t\t\tconst rstart = splitOffset;\n\t\t\tconst rcount = count - lcount;\n\t\t\tnode.right = right;\n\n\t\t\tgetBounds( triangleBounds, rstart, rcount, right.boundingData, cacheCentroidBoundingData );\n\t\t\tsplitNode( right, rstart, rcount, cacheCentroidBoundingData, depth + 1 );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n}\n\nexport function buildPackedTree( bvh, options ) {\n\n\tconst geometry = bvh.geometry;\n\tif ( options.indirect ) {\n\n\t\tbvh._indirectBuffer = generateIndirectBuffer( geometry, options.useSharedArrayBuffer );\n\n\t\tif ( hasGroupGaps( geometry ) && ! options.verbose ) {\n\n\t\t\tconsole.warn(\n\t\t\t\t'MeshBVH: Provided geometry contains groups that do not fully span the vertex contents while using the \"indirect\" option. ' +\n\t\t\t\t'BVH may incorrectly report intersections on unrendered portions of the geometry.'\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\tif ( ! bvh._indirectBuffer ) {\n\n\t\tensureIndex( geometry, options );\n\n\t}\n\n\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\n\tconst triangleBounds = computeTriangleBounds( geometry );\n\tconst geometryRanges = options.indirect ? getFullGeometryRange( geometry ) : getRootIndexRanges( geometry );\n\tbvh._roots = geometryRanges.map( range => {\n\n\t\tconst root = buildTree( bvh, triangleBounds, range.offset, range.count, options );\n\t\tconst nodeCount = countNodes( root );\n\t\tconst buffer = new BufferConstructor( BYTES_PER_NODE * nodeCount );\n\t\tpopulateBuffer( 0, root, buffer );\n\t\treturn buffer;\n\n\t} );\n\n}\n","import { Vector3 } from 'three';\n\nexport class SeparatingAxisBounds {\n\n\tconstructor() {\n\n\t\tthis.min = Infinity;\n\t\tthis.max = - Infinity;\n\n\t}\n\n\tsetFromPointsField( points, field ) {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tconst val = p[ field ];\n\t\t\tmin = val < min ? val : min;\n\t\t\tmax = val > max ? val : max;\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tsetFromPoints( axis, points ) {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tconst val = axis.dot( p );\n\t\t\tmin = val < min ? val : min;\n\t\t\tmax = val > max ? val : max;\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tisSeparated( other ) {\n\n\t\treturn this.min > other.max || other.min > this.max;\n\n\t}\n\n}\n\nSeparatingAxisBounds.prototype.setFromBox = ( function () {\n\n\tconst p = new Vector3();\n\treturn function setFromBox( axis, box ) {\n\n\t\tconst boxMin = box.min;\n\t\tconst boxMax = box.max;\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tp.x = boxMin.x * x + boxMax.x * ( 1 - x );\n\t\t\t\t\tp.y = boxMin.y * y + boxMax.y * ( 1 - y );\n\t\t\t\t\tp.z = boxMin.z * z + boxMax.z * ( 1 - z );\n\n\t\t\t\t\tconst val = axis.dot( p );\n\t\t\t\t\tmin = Math.min( val, min );\n\t\t\t\t\tmax = Math.max( val, max );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t};\n\n} )();\n\nexport const areIntersecting = ( function () {\n\n\tconst cacheSatBounds = new SeparatingAxisBounds();\n\treturn function areIntersecting( shape1, shape2 ) {\n\n\t\tconst points1 = shape1.points;\n\t\tconst satAxes1 = shape1.satAxes;\n\t\tconst satBounds1 = shape1.satBounds;\n\n\t\tconst points2 = shape2.points;\n\t\tconst satAxes2 = shape2.satAxes;\n\t\tconst satBounds2 = shape2.satBounds;\n\n\t\t// check axes of the first shape\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds1[ i ];\n\t\t\tconst sa = satAxes1[ i ];\n\t\t\tcacheSatBounds.setFromPoints( sa, points2 );\n\t\t\tif ( sb.isSeparated( cacheSatBounds ) ) return false;\n\n\t\t}\n\n\t\t// check axes of the second shape\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds2[ i ];\n\t\t\tconst sa = satAxes2[ i ];\n\t\t\tcacheSatBounds.setFromPoints( sa, points1 );\n\t\t\tif ( sb.isSeparated( cacheSatBounds ) ) return false;\n\n\t\t}\n\n\t};\n\n} )();\n","import { Vector3, Vector2, Plane, Line3 } from 'three';\n\nexport const closestPointLineToLine = ( function () {\n\n\t// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/Line.cpp#L56\n\tconst dir1 = new Vector3();\n\tconst dir2 = new Vector3();\n\tconst v02 = new Vector3();\n\treturn function closestPointLineToLine( l1, l2, result ) {\n\n\t\tconst v0 = l1.start;\n\t\tconst v10 = dir1;\n\t\tconst v2 = l2.start;\n\t\tconst v32 = dir2;\n\n\t\tv02.subVectors( v0, v2 );\n\t\tdir1.subVectors( l1.end, l1.start );\n\t\tdir2.subVectors( l2.end, l2.start );\n\n\t\t// float d0232 = v02.Dot(v32);\n\t\tconst d0232 = v02.dot( v32 );\n\n\t\t// float d3210 = v32.Dot(v10);\n\t\tconst d3210 = v32.dot( v10 );\n\n\t\t// float d3232 = v32.Dot(v32);\n\t\tconst d3232 = v32.dot( v32 );\n\n\t\t// float d0210 = v02.Dot(v10);\n\t\tconst d0210 = v02.dot( v10 );\n\n\t\t// float d1010 = v10.Dot(v10);\n\t\tconst d1010 = v10.dot( v10 );\n\n\t\t// float denom = d1010*d3232 - d3210*d3210;\n\t\tconst denom = d1010 * d3232 - d3210 * d3210;\n\n\t\tlet d, d2;\n\t\tif ( denom !== 0 ) {\n\n\t\t\td = ( d0232 * d3210 - d0210 * d3232 ) / denom;\n\n\t\t} else {\n\n\t\t\td = 0;\n\n\t\t}\n\n\t\td2 = ( d0232 + d * d3210 ) / d3232;\n\n\t\tresult.x = d;\n\t\tresult.y = d2;\n\n\t};\n\n} )();\n\nexport const closestPointsSegmentToSegment = ( function () {\n\n\t// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/LineSegment.cpp#L187\n\tconst paramResult = new Vector2();\n\tconst temp1 = new Vector3();\n\tconst temp2 = new Vector3();\n\treturn function closestPointsSegmentToSegment( l1, l2, target1, target2 ) {\n\n\t\tclosestPointLineToLine( l1, l2, paramResult );\n\n\t\tlet d = paramResult.x;\n\t\tlet d2 = paramResult.y;\n\t\tif ( d >= 0 && d <= 1 && d2 >= 0 && d2 <= 1 ) {\n\n\t\t\tl1.at( d, target1 );\n\t\t\tl2.at( d2, target2 );\n\n\t\t\treturn;\n\n\t\t} else if ( d >= 0 && d <= 1 ) {\n\n\t\t\t// Only d2 is out of bounds.\n\t\t\tif ( d2 < 0 ) {\n\n\t\t\t\tl2.at( 0, target2 );\n\n\t\t\t} else {\n\n\t\t\t\tl2.at( 1, target2 );\n\n\t\t\t}\n\n\t\t\tl1.closestPointToPoint( target2, true, target1 );\n\t\t\treturn;\n\n\t\t} else if ( d2 >= 0 && d2 <= 1 ) {\n\n\t\t\t// Only d is out of bounds.\n\t\t\tif ( d < 0 ) {\n\n\t\t\t\tl1.at( 0, target1 );\n\n\t\t\t} else {\n\n\t\t\t\tl1.at( 1, target1 );\n\n\t\t\t}\n\n\t\t\tl2.closestPointToPoint( target1, true, target2 );\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// Both u and u2 are out of bounds.\n\t\t\tlet p;\n\t\t\tif ( d < 0 ) {\n\n\t\t\t\tp = l1.start;\n\n\t\t\t} else {\n\n\t\t\t\tp = l1.end;\n\n\t\t\t}\n\n\t\t\tlet p2;\n\t\t\tif ( d2 < 0 ) {\n\n\t\t\t\tp2 = l2.start;\n\n\t\t\t} else {\n\n\t\t\t\tp2 = l2.end;\n\n\t\t\t}\n\n\t\t\tconst closestPoint = temp1;\n\t\t\tconst closestPoint2 = temp2;\n\t\t\tl1.closestPointToPoint( p2, true, temp1 );\n\t\t\tl2.closestPointToPoint( p, true, temp2 );\n\n\t\t\tif ( closestPoint.distanceToSquared( p2 ) <= closestPoint2.distanceToSquared( p ) ) {\n\n\t\t\t\ttarget1.copy( closestPoint );\n\t\t\t\ttarget2.copy( p2 );\n\t\t\t\treturn;\n\n\t\t\t} else {\n\n\t\t\t\ttarget1.copy( p );\n\t\t\t\ttarget2.copy( closestPoint2 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n} )();\n\n\nexport const sphereIntersectTriangle = ( function () {\n\n\t// https://stackoverflow.com/questions/34043955/detect-collision-between-sphere-and-triangle-in-three-js\n\tconst closestPointTemp = new Vector3();\n\tconst projectedPointTemp = new Vector3();\n\tconst planeTemp = new Plane();\n\tconst lineTemp = new Line3();\n\treturn function sphereIntersectTriangle( sphere, triangle ) {\n\n\t\tconst { radius, center } = sphere;\n\t\tconst { a, b, c } = triangle;\n\n\t\t// phase 1\n\t\tlineTemp.start = a;\n\t\tlineTemp.end = b;\n\t\tconst closestPoint1 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint1.distanceTo( center ) <= radius ) return true;\n\n\t\tlineTemp.start = a;\n\t\tlineTemp.end = c;\n\t\tconst closestPoint2 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint2.distanceTo( center ) <= radius ) return true;\n\n\t\tlineTemp.start = b;\n\t\tlineTemp.end = c;\n\t\tconst closestPoint3 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint3.distanceTo( center ) <= radius ) return true;\n\n\t\t// phase 2\n\t\tconst plane = triangle.getPlane( planeTemp );\n\t\tconst dp = Math.abs( plane.distanceToPoint( center ) );\n\t\tif ( dp <= radius ) {\n\n\t\t\tconst pp = plane.projectPoint( center, projectedPointTemp );\n\t\t\tconst cp = triangle.containsPoint( pp );\n\t\t\tif ( cp ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t};\n\n} )();\n","import { Triangle, Vector3, Line3, Sphere, Plane } from 'three';\nimport { SeparatingAxisBounds } from './SeparatingAxisBounds.js';\nimport { closestPointsSegmentToSegment, sphereIntersectTriangle } from './MathUtilities.js';\n\nconst ZERO_EPSILON = 1e-15;\nfunction isNearZero( value ) {\n\n\treturn Math.abs( value ) < ZERO_EPSILON;\n\n}\n\nexport class ExtendedTriangle extends Triangle {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isExtendedTriangle = true;\n\t\tthis.satAxes = new Array( 4 ).fill().map( () => new Vector3() );\n\t\tthis.satBounds = new Array( 4 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.points = [ this.a, this.b, this.c ];\n\t\tthis.sphere = new Sphere();\n\t\tthis.plane = new Plane();\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphereIntersectTriangle( sphere, this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst a = this.a;\n\t\tconst b = this.b;\n\t\tconst c = this.c;\n\t\tconst points = this.points;\n\n\t\tconst satAxes = this.satAxes;\n\t\tconst satBounds = this.satBounds;\n\n\t\tconst axis0 = satAxes[ 0 ];\n\t\tconst sab0 = satBounds[ 0 ];\n\t\tthis.getNormal( axis0 );\n\t\tsab0.setFromPoints( axis0, points );\n\n\t\tconst axis1 = satAxes[ 1 ];\n\t\tconst sab1 = satBounds[ 1 ];\n\t\taxis1.subVectors( a, b );\n\t\tsab1.setFromPoints( axis1, points );\n\n\t\tconst axis2 = satAxes[ 2 ];\n\t\tconst sab2 = satBounds[ 2 ];\n\t\taxis2.subVectors( b, c );\n\t\tsab2.setFromPoints( axis2, points );\n\n\t\tconst axis3 = satAxes[ 3 ];\n\t\tconst sab3 = satBounds[ 3 ];\n\t\taxis3.subVectors( c, a );\n\t\tsab3.setFromPoints( axis3, points );\n\n\t\tthis.sphere.setFromPoints( this.points );\n\t\tthis.plane.setFromNormalAndCoplanarPoint( axis0, a );\n\t\tthis.needsUpdate = false;\n\n\t}\n\n}\n\nExtendedTriangle.prototype.closestPointToSegment = ( function () {\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\tconst edge = new Line3();\n\n\treturn function distanceToSegment( segment, target1 = null, target2 = null ) {\n\n\t\tconst { start, end } = segment;\n\t\tconst points = this.points;\n\t\tlet distSq;\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check the triangle edges\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst nexti = ( i + 1 ) % 3;\n\t\t\tedge.start.copy( points[ i ] );\n\t\t\tedge.end.copy( points[ nexti ] );\n\n\t\t\tclosestPointsSegmentToSegment( edge, segment, point1, point2 );\n\n\t\t\tdistSq = point1.distanceToSquared( point2 );\n\t\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = distSq;\n\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// check end points\n\t\tthis.closestPointToPoint( start, point1 );\n\t\tdistSq = start.distanceToSquared( point1 );\n\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\tclosestDistanceSq = distSq;\n\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\tif ( target2 ) target2.copy( start );\n\n\t\t}\n\n\t\tthis.closestPointToPoint( end, point1 );\n\t\tdistSq = end.distanceToSquared( point1 );\n\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\tclosestDistanceSq = distSq;\n\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\tif ( target2 ) target2.copy( end );\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n\nExtendedTriangle.prototype.intersectsTriangle = ( function () {\n\n\tconst saTri2 = new ExtendedTriangle();\n\tconst arr1 = new Array( 3 );\n\tconst arr2 = new Array( 3 );\n\tconst cachedSatBounds = new SeparatingAxisBounds();\n\tconst cachedSatBounds2 = new SeparatingAxisBounds();\n\tconst cachedAxis = new Vector3();\n\tconst dir = new Vector3();\n\tconst dir1 = new Vector3();\n\tconst dir2 = new Vector3();\n\tconst tempDir = new Vector3();\n\tconst edge = new Line3();\n\tconst edge1 = new Line3();\n\tconst edge2 = new Line3();\n\tconst tempPoint = new Vector3();\n\n\tfunction triIntersectPlane( tri, plane, targetEdge ) {\n\n\t\t// find the edge that intersects the other triangle plane\n\t\tconst points = tri.points;\n\t\tlet count = 0;\n\t\tlet startPointIntersection = - 1;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst { start, end } = edge;\n\t\t\tstart.copy( points[ i ] );\n\t\t\tend.copy( points[ ( i + 1 ) % 3 ] );\n\t\t\tedge.delta( dir );\n\n\t\t\tconst startIntersects = isNearZero( plane.distanceToPoint( start ) );\n\t\t\tif ( isNearZero( plane.normal.dot( dir ) ) && startIntersects ) {\n\n\t\t\t\t// if the edge lies on the plane then take the line\n\t\t\t\ttargetEdge.copy( edge );\n\t\t\t\tcount = 2;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// check if the start point is near the plane because \"intersectLine\" is not robust to that case\n\t\t\tconst doesIntersect = plane.intersectLine( edge, tempPoint );\n\t\t\tif ( ! doesIntersect && startIntersects ) {\n\n\t\t\t\ttempPoint.copy( start );\n\n\t\t\t}\n\n\t\t\t// ignore the end point\n\t\t\tif ( ( doesIntersect || startIntersects ) && ! isNearZero( tempPoint.distanceTo( end ) ) ) {\n\n\t\t\t\tif ( count <= 1 ) {\n\n\t\t\t\t\t// assign to the start or end point and save which index was snapped to\n\t\t\t\t\t// the start point if necessary\n\t\t\t\t\tconst point = count === 1 ? targetEdge.start : targetEdge.end;\n\t\t\t\t\tpoint.copy( tempPoint );\n\t\t\t\t\tif ( startIntersects ) {\n\n\t\t\t\t\t\tstartPointIntersection = count;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( count >= 2 ) {\n\n\t\t\t\t\t// if we're here that means that there must have been one point that had\n\t\t\t\t\t// snapped to the start point so replace it here\n\t\t\t\t\tconst point = startPointIntersection === 1 ? targetEdge.start : targetEdge.end;\n\t\t\t\t\tpoint.copy( tempPoint );\n\t\t\t\t\tcount = 2;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcount ++;\n\t\t\t\tif ( count === 2 && startPointIntersection === - 1 ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn count;\n\n\t}\n\n\t// TODO: If the triangles are coplanar and intersecting the target is nonsensical. It should at least\n\t// be a line contained by both triangles if not a different special case somehow represented in the return result.\n\treturn function intersectsTriangle( other, target = null, suppressLog = false ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( ! other.isExtendedTriangle ) {\n\n\t\t\tsaTri2.copy( other );\n\t\t\tsaTri2.update();\n\t\t\tother = saTri2;\n\n\t\t} else if ( other.needsUpdate ) {\n\n\t\t\tother.update();\n\n\t\t}\n\n\t\tconst plane1 = this.plane;\n\t\tconst plane2 = other.plane;\n\n\t\tif ( Math.abs( plane1.normal.dot( plane2.normal ) ) > 1.0 - 1e-10 ) {\n\n\t\t\t// perform separating axis intersection test only for coplanar triangles\n\t\t\tconst satBounds1 = this.satBounds;\n\t\t\tconst satAxes1 = this.satAxes;\n\t\t\tarr2[ 0 ] = other.a;\n\t\t\tarr2[ 1 ] = other.b;\n\t\t\tarr2[ 2 ] = other.c;\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sb = satBounds1[ i ];\n\t\t\t\tconst sa = satAxes1[ i ];\n\t\t\t\tcachedSatBounds.setFromPoints( sa, arr2 );\n\t\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t\t}\n\n\t\t\tconst satBounds2 = other.satBounds;\n\t\t\tconst satAxes2 = other.satAxes;\n\t\t\tarr1[ 0 ] = this.a;\n\t\t\tarr1[ 1 ] = this.b;\n\t\t\tarr1[ 2 ] = this.c;\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sb = satBounds2[ i ];\n\t\t\t\tconst sa = satAxes2[ i ];\n\t\t\t\tcachedSatBounds.setFromPoints( sa, arr1 );\n\t\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t\t}\n\n\t\t\t// check crossed axes\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sa1 = satAxes1[ i ];\n\t\t\t\tfor ( let i2 = 0; i2 < 4; i2 ++ ) {\n\n\t\t\t\t\tconst sa2 = satAxes2[ i2 ];\n\t\t\t\t\tcachedAxis.crossVectors( sa1, sa2 );\n\t\t\t\t\tcachedSatBounds.setFromPoints( cachedAxis, arr1 );\n\t\t\t\t\tcachedSatBounds2.setFromPoints( cachedAxis, arr2 );\n\t\t\t\t\tif ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( target ) {\n\n\t\t\t\t// TODO find two points that intersect on the edges and make that the result\n\t\t\t\tif ( ! suppressLog ) {\n\n\t\t\t\t\tconsole.warn( 'ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0.' );\n\n\t\t\t\t}\n\n\t\t\t\ttarget.start.set( 0, 0, 0 );\n\t\t\t\ttarget.end.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\t// find the edge that intersects the other triangle plane\n\t\t\tconst count1 = triIntersectPlane( this, plane2, edge1 );\n\t\t\tif ( count1 === 1 && other.containsPoint( edge1.end ) ) {\n\n\t\t\t\tif ( target ) {\n\n\t\t\t\t\ttarget.start.copy( edge1.end );\n\t\t\t\t\ttarget.end.copy( edge1.end );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else if ( count1 !== 2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// find the other triangles edge that intersects this plane\n\t\t\tconst count2 = triIntersectPlane( other, plane1, edge2 );\n\t\t\tif ( count2 === 1 && this.containsPoint( edge2.end ) ) {\n\n\t\t\t\tif ( target ) {\n\n\t\t\t\t\ttarget.start.copy( edge2.end );\n\t\t\t\t\ttarget.end.copy( edge2.end );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else if ( count2 !== 2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// find swap the second edge so both lines are running the same direction\n\t\t\tedge1.delta( dir1 );\n\t\t\tedge2.delta( dir2 );\n\n\t\t\tif ( dir1.dot( dir2 ) < 0 ) {\n\n\t\t\t\tlet tmp = edge2.start;\n\t\t\t\tedge2.start = edge2.end;\n\t\t\t\tedge2.end = tmp;\n\n\t\t\t}\n\n\t\t\t// check if the edges are overlapping\n\t\t\tconst s1 = edge1.start.dot( dir1 );\n\t\t\tconst e1 = edge1.end.dot( dir1 );\n\t\t\tconst s2 = edge2.start.dot( dir1 );\n\t\t\tconst e2 = edge2.end.dot( dir1 );\n\t\t\tconst separated1 = e1 < s2;\n\t\t\tconst separated2 = s1 < e2;\n\n\t\t\tif ( s1 !== e2 && s2 !== e1 && separated1 === separated2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// assign the target output\n\t\t\tif ( target ) {\n\n\t\t\t\ttempDir.subVectors( edge1.start, edge2.start );\n\t\t\t\tif ( tempDir.dot( dir1 ) > 0 ) {\n\n\t\t\t\t\ttarget.start.copy( edge1.start );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttarget.start.copy( edge2.start );\n\n\t\t\t\t}\n\n\t\t\t\ttempDir.subVectors( edge1.end, edge2.end );\n\t\t\t\tif ( tempDir.dot( dir1 ) < 0 ) {\n\n\t\t\t\t\ttarget.end.copy( edge1.end );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttarget.end.copy( edge2.end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t};\n\n} )();\n\n\nExtendedTriangle.prototype.distanceToPoint = ( function () {\n\n\tconst target = new Vector3();\n\treturn function distanceToPoint( point ) {\n\n\t\tthis.closestPointToPoint( point, target );\n\t\treturn point.distanceTo( target );\n\n\t};\n\n} )();\n\n\nExtendedTriangle.prototype.distanceToTriangle = ( function () {\n\n\tconst point = new Vector3();\n\tconst point2 = new Vector3();\n\tconst cornerFields = [ 'a', 'b', 'c' ];\n\tconst line1 = new Line3();\n\tconst line2 = new Line3();\n\n\treturn function distanceToTriangle( other, target1 = null, target2 = null ) {\n\n\t\tconst lineTarget = target1 || target2 ? line1 : null;\n\t\tif ( this.intersectsTriangle( other, lineTarget ) ) {\n\n\t\t\tif ( target1 || target2 ) {\n\n\t\t\t\tif ( target1 ) lineTarget.getCenter( target1 );\n\t\t\t\tif ( target2 ) lineTarget.getCenter( target2 );\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check all point distances\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tlet dist;\n\t\t\tconst field = cornerFields[ i ];\n\t\t\tconst otherVec = other[ field ];\n\t\t\tthis.closestPointToPoint( otherVec, point );\n\n\t\t\tdist = otherVec.distanceToSquared( point );\n\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( point );\n\t\t\t\tif ( target2 ) target2.copy( otherVec );\n\n\t\t\t}\n\n\n\t\t\tconst thisVec = this[ field ];\n\t\t\tother.closestPointToPoint( thisVec, point );\n\n\t\t\tdist = thisVec.distanceToSquared( point );\n\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( thisVec );\n\t\t\t\tif ( target2 ) target2.copy( point );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst f11 = cornerFields[ i ];\n\t\t\tconst f12 = cornerFields[ ( i + 1 ) % 3 ];\n\t\t\tline1.set( this[ f11 ], this[ f12 ] );\n\t\t\tfor ( let i2 = 0; i2 < 3; i2 ++ ) {\n\n\t\t\t\tconst f21 = cornerFields[ i2 ];\n\t\t\t\tconst f22 = cornerFields[ ( i2 + 1 ) % 3 ];\n\t\t\t\tline2.set( other[ f21 ], other[ f22 ] );\n\n\t\t\t\tclosestPointsSegmentToSegment( line1, line2, point, point2 );\n\n\t\t\t\tconst dist = point.distanceToSquared( point2 );\n\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\tif ( target1 ) target1.copy( point );\n\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n","import { Vector3, Matrix4, Line3 } from 'three';\nimport { SeparatingAxisBounds } from './SeparatingAxisBounds.js';\nimport { ExtendedTriangle } from './ExtendedTriangle.js';\nimport { closestPointsSegmentToSegment } from './MathUtilities.js';\n\nexport class OrientedBox {\n\n\tconstructor( min, max, matrix ) {\n\n\t\tthis.isOrientedBox = true;\n\t\tthis.min = new Vector3();\n\t\tthis.max = new Vector3();\n\t\tthis.matrix = new Matrix4();\n\t\tthis.invMatrix = new Matrix4();\n\t\tthis.points = new Array( 8 ).fill().map( () => new Vector3() );\n\t\tthis.satAxes = new Array( 3 ).fill().map( () => new Vector3() );\n\t\tthis.satBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.alignedSatBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.needsUpdate = false;\n\n\t\tif ( min ) this.min.copy( min );\n\t\tif ( max ) this.max.copy( max );\n\t\tif ( matrix ) this.matrix.copy( matrix );\n\n\t}\n\n\tset( min, max, matrix ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\t\tthis.matrix.copy( matrix );\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.min.copy( other.min );\n\t\tthis.max.copy( other.max );\n\t\tthis.matrix.copy( other.matrix );\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nOrientedBox.prototype.update = ( function () {\n\n\treturn function update() {\n\n\t\tconst matrix = this.matrix;\n\t\tconst min = this.min;\n\t\tconst max = this.max;\n\n\t\tconst points = this.points;\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tconst i = ( ( 1 << 0 ) * x ) | ( ( 1 << 1 ) * y ) | ( ( 1 << 2 ) * z );\n\t\t\t\t\tconst v = points[ i ];\n\t\t\t\t\tv.x = x ? max.x : min.x;\n\t\t\t\t\tv.y = y ? max.y : min.y;\n\t\t\t\t\tv.z = z ? max.z : min.z;\n\n\t\t\t\t\tv.applyMatrix4( matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\t\tconst minVec = points[ 0 ];\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst axis = satAxes[ i ];\n\t\t\tconst sb = satBounds[ i ];\n\t\t\tconst index = 1 << i;\n\t\t\tconst pi = points[ index ];\n\n\t\t\taxis.subVectors( minVec, pi );\n\t\t\tsb.setFromPoints( axis, points );\n\n\t\t}\n\n\t\tconst alignedSatBounds = this.alignedSatBounds;\n\t\talignedSatBounds[ 0 ].setFromPointsField( points, 'x' );\n\t\talignedSatBounds[ 1 ].setFromPointsField( points, 'y' );\n\t\talignedSatBounds[ 2 ].setFromPointsField( points, 'z' );\n\n\t\tthis.invMatrix.copy( this.matrix ).invert();\n\t\tthis.needsUpdate = false;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.intersectsBox = ( function () {\n\n\tconst aabbBounds = new SeparatingAxisBounds();\n\treturn function intersectsBox( box ) {\n\n\t\t// TODO: should this be doing SAT against the AABB?\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tconst min = box.min;\n\t\tconst max = box.max;\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\t\tconst alignedSatBounds = this.alignedSatBounds;\n\n\t\taabbBounds.min = min.x;\n\t\taabbBounds.max = max.x;\n\t\tif ( alignedSatBounds[ 0 ].isSeparated( aabbBounds ) ) return false;\n\n\t\taabbBounds.min = min.y;\n\t\taabbBounds.max = max.y;\n\t\tif ( alignedSatBounds[ 1 ].isSeparated( aabbBounds ) ) return false;\n\n\t\taabbBounds.min = min.z;\n\t\taabbBounds.max = max.z;\n\t\tif ( alignedSatBounds[ 2 ].isSeparated( aabbBounds ) ) return false;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst axis = satAxes[ i ];\n\t\t\tconst sb = satBounds[ i ];\n\t\t\taabbBounds.setFromBox( axis, box );\n\t\t\tif ( sb.isSeparated( aabbBounds ) ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.intersectsTriangle = ( function () {\n\n\tconst saTri = new ExtendedTriangle();\n\tconst pointsArr = new Array( 3 );\n\tconst cachedSatBounds = new SeparatingAxisBounds();\n\tconst cachedSatBounds2 = new SeparatingAxisBounds();\n\tconst cachedAxis = new Vector3();\n\treturn function intersectsTriangle( triangle ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( ! triangle.isExtendedTriangle ) {\n\n\t\t\tsaTri.copy( triangle );\n\t\t\tsaTri.update();\n\t\t\ttriangle = saTri;\n\n\t\t} else if ( triangle.needsUpdate ) {\n\n\t\t\ttriangle.update();\n\n\t\t}\n\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\n\t\tpointsArr[ 0 ] = triangle.a;\n\t\tpointsArr[ 1 ] = triangle.b;\n\t\tpointsArr[ 2 ] = triangle.c;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds[ i ];\n\t\t\tconst sa = satAxes[ i ];\n\t\t\tcachedSatBounds.setFromPoints( sa, pointsArr );\n\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t}\n\n\t\tconst triSatBounds = triangle.satBounds;\n\t\tconst triSatAxes = triangle.satAxes;\n\t\tconst points = this.points;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = triSatBounds[ i ];\n\t\t\tconst sa = triSatAxes[ i ];\n\t\t\tcachedSatBounds.setFromPoints( sa, points );\n\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t}\n\n\t\t// check crossed axes\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sa1 = satAxes[ i ];\n\t\t\tfor ( let i2 = 0; i2 < 4; i2 ++ ) {\n\n\t\t\t\tconst sa2 = triSatAxes[ i2 ];\n\t\t\t\tcachedAxis.crossVectors( sa1, sa2 );\n\t\t\t\tcachedSatBounds.setFromPoints( cachedAxis, pointsArr );\n\t\t\t\tcachedSatBounds2.setFromPoints( cachedAxis, points );\n\t\t\t\tif ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.closestPointToPoint = ( function () {\n\n\treturn function closestPointToPoint( point, target1 ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\ttarget1\n\t\t\t.copy( point )\n\t\t\t.applyMatrix4( this.invMatrix )\n\t\t\t.clamp( this.min, this.max )\n\t\t\t.applyMatrix4( this.matrix );\n\n\t\treturn target1;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.distanceToPoint = ( function () {\n\n\tconst target = new Vector3();\n\treturn function distanceToPoint( point ) {\n\n\t\tthis.closestPointToPoint( point, target );\n\t\treturn point.distanceTo( target );\n\n\t};\n\n} )();\n\nOrientedBox.prototype.distanceToBox = ( function () {\n\n\tconst xyzFields = [ 'x', 'y', 'z' ];\n\tconst segments1 = new Array( 12 ).fill().map( () => new Line3() );\n\tconst segments2 = new Array( 12 ).fill().map( () => new Line3() );\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\n\t// early out if we find a value below threshold\n\treturn function distanceToBox( box, threshold = 0, target1 = null, target2 = null ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( this.intersectsBox( box ) ) {\n\n\t\t\tif ( target1 || target2 ) {\n\n\t\t\t\tbox.getCenter( point2 );\n\t\t\t\tthis.closestPointToPoint( point2, point1 );\n\t\t\t\tbox.closestPointToPoint( point1, point2 );\n\n\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tconst threshold2 = threshold * threshold;\n\t\tconst min = box.min;\n\t\tconst max = box.max;\n\t\tconst points = this.points;\n\n\n\t\t// iterate over every edge and compare distances\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check over all these points\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tpoint2.copy( p ).clamp( min, max );\n\n\t\t\tconst dist = p.distanceToSquared( point2 );\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( p );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate and check all line segment distances\n\t\tlet count = 0;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let i1 = 0; i1 <= 1; i1 ++ ) {\n\n\t\t\t\tfor ( let i2 = 0; i2 <= 1; i2 ++ ) {\n\n\t\t\t\t\tconst nextIndex = ( i + 1 ) % 3;\n\t\t\t\t\tconst nextIndex2 = ( i + 2 ) % 3;\n\n\t\t\t\t\t// get obb line segments\n\t\t\t\t\tconst index = i1 << nextIndex | i2 << nextIndex2;\n\t\t\t\t\tconst index2 = 1 << i | i1 << nextIndex | i2 << nextIndex2;\n\t\t\t\t\tconst p1 = points[ index ];\n\t\t\t\t\tconst p2 = points[ index2 ];\n\t\t\t\t\tconst line1 = segments1[ count ];\n\t\t\t\t\tline1.set( p1, p2 );\n\n\n\t\t\t\t\t// get aabb line segments\n\t\t\t\t\tconst f1 = xyzFields[ i ];\n\t\t\t\t\tconst f2 = xyzFields[ nextIndex ];\n\t\t\t\t\tconst f3 = xyzFields[ nextIndex2 ];\n\t\t\t\t\tconst line2 = segments2[ count ];\n\t\t\t\t\tconst start = line2.start;\n\t\t\t\t\tconst end = line2.end;\n\n\t\t\t\t\tstart[ f1 ] = min[ f1 ];\n\t\t\t\t\tstart[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];\n\t\t\t\t\tstart[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];\n\n\t\t\t\t\tend[ f1 ] = max[ f1 ];\n\t\t\t\t\tend[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];\n\t\t\t\t\tend[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];\n\n\t\t\t\t\tcount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// check all the other boxes point\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tpoint2.x = x ? max.x : min.x;\n\t\t\t\t\tpoint2.y = y ? max.y : min.y;\n\t\t\t\t\tpoint2.z = z ? max.z : min.z;\n\n\t\t\t\t\tthis.closestPointToPoint( point2, point1 );\n\t\t\t\t\tconst dist = point2.distanceToSquared( point1 );\n\t\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 12; i ++ ) {\n\n\t\t\tconst l1 = segments1[ i ];\n\t\t\tfor ( let i2 = 0; i2 < 12; i2 ++ ) {\n\n\t\t\t\tconst l2 = segments2[ i2 ];\n\t\t\t\tclosestPointsSegmentToSegment( l1, l2, point1, point2 );\n\t\t\t\tconst dist = point1.distanceToSquared( point2 );\n\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n","export class PrimitivePool {\n\n\tconstructor( getNewPrimitive ) {\n\n\t\tthis._getNewPrimitive = getNewPrimitive;\n\t\tthis._primitives = [];\n\n\t}\n\n\tgetPrimitive() {\n\n\t\tconst primitives = this._primitives;\n\t\tif ( primitives.length === 0 ) {\n\n\t\t\treturn this._getNewPrimitive();\n\n\t\t} else {\n\n\t\t\treturn primitives.pop();\n\n\t\t}\n\n\t}\n\n\treleasePrimitive( primitive ) {\n\n\t\tthis._primitives.push( primitive );\n\n\t}\n\n}\n","import { ExtendedTriangle } from '../math/ExtendedTriangle.js';\nimport { PrimitivePool } from './PrimitivePool.js';\n\nclass ExtendedTrianglePoolBase extends PrimitivePool {\n\n\tconstructor() {\n\n\t\tsuper( () => new ExtendedTriangle() );\n\n\t}\n\n}\n\nexport const ExtendedTrianglePool = /* @__PURE__ */ new ExtendedTrianglePoolBase();\n","class _BufferStack {\n\n\tconstructor() {\n\n\t\tthis.float32Array = null;\n\t\tthis.uint16Array = null;\n\t\tthis.uint32Array = null;\n\n\t\tconst stack = [];\n\t\tlet prevBuffer = null;\n\t\tthis.setBuffer = buffer => {\n\n\t\t\tif ( prevBuffer ) {\n\n\t\t\t\tstack.push( prevBuffer );\n\n\t\t\t}\n\n\t\t\tprevBuffer = buffer;\n\t\t\tthis.float32Array = new Float32Array( buffer );\n\t\t\tthis.uint16Array = new Uint16Array( buffer );\n\t\t\tthis.uint32Array = new Uint32Array( buffer );\n\n\t\t};\n\n\t\tthis.clearBuffer = () => {\n\n\t\t\tprevBuffer = null;\n\t\t\tthis.float32Array = null;\n\t\t\tthis.uint16Array = null;\n\t\t\tthis.uint32Array = null;\n\n\t\t\tif ( stack.length !== 0 ) {\n\n\t\t\t\tthis.setBuffer( stack.pop() );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\nexport const BufferStack = new _BufferStack();\n","import { Box3 } from 'three';\nimport { CONTAINED } from '../Constants.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { PrimitivePool } from '../../utils/PrimitivePool.js';\nimport { COUNT, OFFSET, LEFT_NODE, RIGHT_NODE, IS_LEAF, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\nlet _box1, _box2;\nconst boxStack = [];\nconst boxPool = /* @__PURE__ */ new PrimitivePool( () => new Box3() );\n\nexport function shapecast( bvh, root, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset ) {\n\n\t// setup\n\t_box1 = boxPool.getPrimitive();\n\t_box2 = boxPool.getPrimitive();\n\tboxStack.push( _box1, _box2 );\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\n\tconst result = shapecastTraverse( 0, bvh.geometry, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset );\n\n\t// cleanup\n\tBufferStack.clearBuffer();\n\tboxPool.releasePrimitive( _box1 );\n\tboxPool.releasePrimitive( _box2 );\n\tboxStack.pop();\n\tboxStack.pop();\n\n\tconst length = boxStack.length;\n\tif ( length > 0 ) {\n\n\t\t_box2 = boxStack[ length - 1 ];\n\t\t_box1 = boxStack[ length - 2 ];\n\n\t}\n\n\treturn result;\n\n}\n\nfunction shapecastTraverse(\n\tnodeIndex32,\n\tgeometry,\n\tintersectsBoundsFunc,\n\tintersectsRangeFunc,\n\tnodeScoreFunc = null,\n\tnodeIndexByteOffset = 0, // offset for unique node identifier\n\tdepth = 0\n) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, _box1 );\n\t\treturn intersectsRangeFunc( offset, count, false, depth, nodeIndexByteOffset + nodeIndex32, _box1 );\n\n\t} else {\n\n\t\tconst left = LEFT_NODE( nodeIndex32 );\n\t\tconst right = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tlet c1 = left;\n\t\tlet c2 = right;\n\n\t\tlet score1, score2;\n\t\tlet box1, box2;\n\t\tif ( nodeScoreFunc ) {\n\n\t\t\tbox1 = _box1;\n\t\t\tbox2 = _box2;\n\n\t\t\t// bounding data is not offset\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );\n\n\t\t\tscore1 = nodeScoreFunc( box1 );\n\t\t\tscore2 = nodeScoreFunc( box2 );\n\n\t\t\tif ( score2 < score1 ) {\n\n\t\t\t\tc1 = right;\n\t\t\t\tc2 = left;\n\n\t\t\t\tconst temp = score1;\n\t\t\t\tscore1 = score2;\n\t\t\t\tscore2 = temp;\n\n\t\t\t\tbox1 = box2;\n\t\t\t\t// box2 is always set before use below\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Check box 1 intersection\n\t\tif ( ! box1 ) {\n\n\t\t\tbox1 = _box1;\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );\n\n\t\t}\n\n\t\tconst isC1Leaf = IS_LEAF( c1 * 2, uint16Array );\n\t\tconst c1Intersection = intersectsBoundsFunc( box1, isC1Leaf, score1, depth + 1, nodeIndexByteOffset + c1 );\n\n\t\tlet c1StopTraversal;\n\t\tif ( c1Intersection === CONTAINED ) {\n\n\t\t\tconst offset = getLeftOffset( c1 );\n\t\t\tconst end = getRightEndOffset( c1 );\n\t\t\tconst count = end - offset;\n\n\t\t\tc1StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c1, box1 );\n\n\t\t} else {\n\n\t\t\tc1StopTraversal =\n\t\t\t\tc1Intersection &&\n\t\t\t\tshapecastTraverse(\n\t\t\t\t\tc1,\n\t\t\t\t\tgeometry,\n\t\t\t\t\tintersectsBoundsFunc,\n\t\t\t\t\tintersectsRangeFunc,\n\t\t\t\t\tnodeScoreFunc,\n\t\t\t\t\tnodeIndexByteOffset,\n\t\t\t\t\tdepth + 1\n\t\t\t\t);\n\n\t\t}\n\n\t\tif ( c1StopTraversal ) return true;\n\n\t\t// Check box 2 intersection\n\t\t// cached box2 will have been overwritten by previous traversal\n\t\tbox2 = _box2;\n\t\tarrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );\n\n\t\tconst isC2Leaf = IS_LEAF( c2 * 2, uint16Array );\n\t\tconst c2Intersection = intersectsBoundsFunc( box2, isC2Leaf, score2, depth + 1, nodeIndexByteOffset + c2 );\n\n\t\tlet c2StopTraversal;\n\t\tif ( c2Intersection === CONTAINED ) {\n\n\t\t\tconst offset = getLeftOffset( c2 );\n\t\t\tconst end = getRightEndOffset( c2 );\n\t\t\tconst count = end - offset;\n\n\t\t\tc2StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c2, box2 );\n\n\t\t} else {\n\n\t\t\tc2StopTraversal =\n\t\t\t\tc2Intersection &&\n\t\t\t\tshapecastTraverse(\n\t\t\t\t\tc2,\n\t\t\t\t\tgeometry,\n\t\t\t\t\tintersectsBoundsFunc,\n\t\t\t\t\tintersectsRangeFunc,\n\t\t\t\t\tnodeScoreFunc,\n\t\t\t\t\tnodeIndexByteOffset,\n\t\t\t\t\tdepth + 1\n\t\t\t\t);\n\n\t\t}\n\n\t\tif ( c2StopTraversal ) return true;\n\n\t\treturn false;\n\n\t\t// Define these inside the function so it has access to the local variables needed\n\t\t// when converting to the buffer equivalents\n\t\tfunction getLeftOffset( nodeIndex32 ) {\n\n\t\t\tconst { uint16Array, uint32Array } = BufferStack;\n\t\t\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t// traverse until we find a leaf\n\t\t\twhile ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\t\tnodeIndex32 = LEFT_NODE( nodeIndex32 );\n\t\t\t\tnodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t}\n\n\t\t\treturn OFFSET( nodeIndex32, uint32Array );\n\n\t\t}\n\n\t\tfunction getRightEndOffset( nodeIndex32 ) {\n\n\t\t\tconst { uint16Array, uint32Array } = BufferStack;\n\t\t\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t// traverse until we find a leaf\n\t\t\twhile ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\t\t// adjust offset to point to the right node\n\t\t\t\tnodeIndex32 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\t\tnodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t}\n\n\t\t\t// return the end offset of the triangle range\n\t\t\treturn OFFSET( nodeIndex32, uint32Array ) + COUNT( nodeIndex16, uint16Array );\n\n\t\t}\n\n\t}\n\n}\n","import { Vector3 } from 'three';\n\nconst temp = /* @__PURE__ */ new Vector3();\nconst temp1 = /* @__PURE__ */ new Vector3();\n\nexport function closestPointToPoint(\n\tbvh,\n\tpoint,\n\ttarget = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\t// early out if under minThreshold\n\t// skip checking if over maxThreshold\n\t// set minThreshold = maxThreshold to quickly check if a point is within a threshold\n\t// returns Infinity if no value found\n\tconst minThresholdSq = minThreshold * minThreshold;\n\tconst maxThresholdSq = maxThreshold * maxThreshold;\n\tlet closestDistanceSq = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tbvh.shapecast(\n\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\ttemp.copy( point ).clamp( box.min, box.max );\n\t\t\t\treturn temp.distanceToSquared( point );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\treturn score < closestDistanceSq && score < maxThresholdSq;\n\n\t\t\t},\n\n\t\t\tintersectsTriangle: ( tri, triIndex ) => {\n\n\t\t\t\ttri.closestPointToPoint( point, temp );\n\t\t\t\tconst distSq = point.distanceToSquared( temp );\n\t\t\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\t\t\ttemp1.copy( temp );\n\t\t\t\t\tclosestDistanceSq = distSq;\n\t\t\t\t\tclosestDistanceTriIndex = triIndex;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distSq < minThresholdSq ) {\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tif ( closestDistanceSq === Infinity ) return null;\n\n\tconst closestDistance = Math.sqrt( closestDistanceSq );\n\n\tif ( ! target.point ) target.point = temp1.clone();\n\telse target.point.copy( temp1 );\n\ttarget.distance = closestDistance,\n\ttarget.faceIndex = closestDistanceTriIndex;\n\n\treturn target;\n\n}\n","import { Vector3, Vector2, Triangle, DoubleSide, BackSide } from 'three';\n\n// Ripped and modified From THREE.js Mesh raycast\n// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L115\nconst _vA = /* @__PURE__ */ new Vector3();\nconst _vB = /* @__PURE__ */ new Vector3();\nconst _vC = /* @__PURE__ */ new Vector3();\n\nconst _uvA = /* @__PURE__ */ new Vector2();\nconst _uvB = /* @__PURE__ */ new Vector2();\nconst _uvC = /* @__PURE__ */ new Vector2();\n\nconst _normalA = /* @__PURE__ */ new Vector3();\nconst _normalB = /* @__PURE__ */ new Vector3();\nconst _normalC = /* @__PURE__ */ new Vector3();\n\nconst _intersectionPoint = /* @__PURE__ */ new Vector3();\nfunction checkIntersection( ray, pA, pB, pC, point, side ) {\n\n\tlet intersect;\n\tif ( side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\tconst distance = ray.origin.distanceTo( point );\n\n\treturn {\n\n\t\tdistance: distance,\n\t\tpoint: point.clone(),\n\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( ray, position, normal, uv, uv1, a, b, c, side ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst intersection = checkIntersection( ray, _vA, _vB, _vC, _intersectionPoint, side );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv1, a );\n\t\t\t_uvB.fromBufferAttribute( uv1, b );\n\t\t\t_uvC.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _normalA, _normalB, _normalC, new Vector3() );\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\t\tintersection.faceIndex = a;\n\n\t}\n\n\treturn intersection;\n\n}\n\n// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L258\nfunction intersectTri( geo, side, ray, tri, intersections ) {\n\n\tconst triOffset = tri * 3;\n\tlet a = triOffset + 0;\n\tlet b = triOffset + 1;\n\tlet c = triOffset + 2;\n\n\tconst index = geo.index;\n\tif ( geo.index ) {\n\n\t\ta = index.getX( a );\n\t\tb = index.getX( b );\n\t\tc = index.getX( c );\n\n\t}\n\n\tconst { position, normal, uv, uv1 } = geo.attributes;\n\tconst intersection = checkBufferGeometryIntersection( ray, position, normal, uv, uv1, a, b, c, side );\n\n\tif ( intersection ) {\n\n\t\tintersection.faceIndex = tri;\n\t\tif ( intersections ) intersections.push( intersection );\n\t\treturn intersection;\n\n\t}\n\n\treturn null;\n\n}\n\nexport { intersectTri };\n","\nimport { Vector2, Vector3, Triangle } from 'three';\n\n// sets the vertices of triangle `tri` with the 3 vertices after i\nexport function setTriangle( tri, i, index, pos ) {\n\n\tconst ta = tri.a;\n\tconst tb = tri.b;\n\tconst tc = tri.c;\n\n\tlet i0 = i;\n\tlet i1 = i + 1;\n\tlet i2 = i + 2;\n\tif ( index ) {\n\n\t\ti0 = index.getX( i0 );\n\t\ti1 = index.getX( i1 );\n\t\ti2 = index.getX( i2 );\n\n\t}\n\n\tta.x = pos.getX( i0 );\n\tta.y = pos.getY( i0 );\n\tta.z = pos.getZ( i0 );\n\n\ttb.x = pos.getX( i1 );\n\ttb.y = pos.getY( i1 );\n\ttb.z = pos.getZ( i1 );\n\n\ttc.x = pos.getX( i2 );\n\ttc.y = pos.getY( i2 );\n\ttc.z = pos.getZ( i2 );\n\n}\n\nconst tempV1 = /* @__PURE__ */ new Vector3();\nconst tempV2 = /* @__PURE__ */ new Vector3();\nconst tempV3 = /* @__PURE__ */ new Vector3();\nconst tempUV1 = /* @__PURE__ */ new Vector2();\nconst tempUV2 = /* @__PURE__ */ new Vector2();\nconst tempUV3 = /* @__PURE__ */ new Vector2();\n\nexport function getTriangleHitPointInfo( point, geometry, triangleIndex, target ) {\n\n\tconst indices = geometry.getIndex().array;\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst uvs = geometry.getAttribute( 'uv' );\n\n\tconst a = indices[ triangleIndex * 3 ];\n\tconst b = indices[ triangleIndex * 3 + 1 ];\n\tconst c = indices[ triangleIndex * 3 + 2 ];\n\n\ttempV1.fromBufferAttribute( positions, a );\n\ttempV2.fromBufferAttribute( positions, b );\n\ttempV3.fromBufferAttribute( positions, c );\n\n\t// find the associated material index\n\tlet materialIndex = 0;\n\tconst groups = geometry.groups;\n\tconst firstVertexIndex = triangleIndex * 3;\n\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\t\tconst { start, count } = group;\n\t\tif ( firstVertexIndex >= start && firstVertexIndex < start + count ) {\n\n\t\t\tmaterialIndex = group.materialIndex;\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t// extract uvs\n\tlet uv = null;\n\tif ( uvs ) {\n\n\t\ttempUV1.fromBufferAttribute( uvs, a );\n\t\ttempUV2.fromBufferAttribute( uvs, b );\n\t\ttempUV3.fromBufferAttribute( uvs, c );\n\n\t\tif ( target && target.uv ) uv = target.uv;\n\t\telse uv = new Vector2();\n\n\t\tTriangle.getInterpolation( point, tempV1, tempV2, tempV3, tempUV1, tempUV2, tempUV3, uv );\n\n\t}\n\n\t// adjust the provided target or create a new one\n\tif ( target ) {\n\n\t\tif ( ! target.face ) target.face = { };\n\t\ttarget.face.a = a;\n\t\ttarget.face.b = b;\n\t\ttarget.face.c = c;\n\t\ttarget.face.materialIndex = materialIndex;\n\t\tif ( ! target.face.normal ) target.face.normal = new Vector3();\n\t\tTriangle.getNormal( tempV1, tempV2, tempV3, target.face.normal );\n\n\t\tif ( uv ) target.uv = uv;\n\n\t\treturn target;\n\n\t} else {\n\n\t\treturn {\n\t\t\tface: {\n\t\t\t\ta: a,\n\t\t\t\tb: b,\n\t\t\t\tc: c,\n\t\t\t\tmaterialIndex: materialIndex,\n\t\t\t\tnormal: Triangle.getNormal( tempV1, tempV2, tempV3, new Vector3() )\n\t\t\t},\n\t\t\tuv: uv\n\t\t};\n\n\t}\n\n}\n","import { intersectTri } from '../../utils/ThreeRayIntersectUtilities.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\n\n/*************************************************************/\n/* This file is generated from \"iterationUtils.template.js\". */\n/*************************************************************/\n/* eslint-disable indent */\n\nfunction intersectTris( bvh, side, ray, offset, count, intersections ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\n\t\tintersectTri( geometry, side, ray, i, intersections );\n\n\n\t}\n\n}\n\nfunction intersectClosestTri( bvh, side, ray, offset, count ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tlet dist = Infinity;\n\tlet res = null;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet intersection;\n\n\t\tintersection = intersectTri( geometry, side, ray, i );\n\n\n\t\tif ( intersection && intersection.distance < dist ) {\n\n\t\t\tres = intersection;\n\t\t\tdist = intersection.distance;\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\nfunction iterateOverTriangles(\n\toffset,\n\tcount,\n\tbvh,\n\tintersectsTriangleFunc,\n\tcontained,\n\tdepth,\n\ttriangle\n) {\n\n\tconst { geometry } = bvh;\n\tconst { index } = geometry;\n\tconst pos = geometry.attributes.position;\n\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\tlet tri;\n\n\t\ttri = i;\n\n\t\tsetTriangle( triangle, tri * 3, index, pos );\n\t\ttriangle.needsUpdate = true;\n\n\t\tif ( intersectsTriangleFunc( triangle, tri, contained, depth ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport { intersectClosestTri, intersectTris, iterateOverTriangles };\n","import { IS_LEAFNODE_FLAG } from '../Constants.js';\n\n/****************************************************/\n/* This file is generated from \"refit.template.js\". */\n/****************************************************/\n\nfunction refit( bvh, nodeIndices = null ) {\n\n\tif ( nodeIndices && Array.isArray( nodeIndices ) ) {\n\n\t\tnodeIndices = new Set( nodeIndices );\n\n\t}\n\n\tconst geometry = bvh.geometry;\n\tconst indexArr = geometry.index ? geometry.index.array : null;\n\tconst posAttr = geometry.attributes.position;\n\n\tlet buffer, uint32Array, uint16Array, float32Array;\n\tlet byteOffset = 0;\n\tconst roots = bvh._roots;\n\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\tbuffer = roots[ i ];\n\t\tuint32Array = new Uint32Array( buffer );\n\t\tuint16Array = new Uint16Array( buffer );\n\t\tfloat32Array = new Float32Array( buffer );\n\n\t\t_traverse( 0, byteOffset );\n\t\tbyteOffset += buffer.byteLength;\n\n\t}\n\n\tfunction _traverse( node32Index, byteOffset, force = false ) {\n\n\t\tconst node16Index = node32Index * 2;\n\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\tif ( isLeaf ) {\n\n\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\n\t\t\tlet minx = Infinity;\n\t\t\tlet miny = Infinity;\n\t\t\tlet minz = Infinity;\n\t\t\tlet maxx = - Infinity;\n\t\t\tlet maxy = - Infinity;\n\t\t\tlet maxz = - Infinity;\n\n\n\t\t\tfor ( let i = 3 * offset, l = 3 * ( offset + count ); i < l; i ++ ) {\n\n\t\t\t\tlet index = indexArr[ i ];\n\t\t\t\tconst x = posAttr.getX( index );\n\t\t\t\tconst y = posAttr.getY( index );\n\t\t\t\tconst z = posAttr.getZ( index );\n\n\t\t\t\tif ( x < minx ) minx = x;\n\t\t\t\tif ( x > maxx ) maxx = x;\n\n\t\t\t\tif ( y < miny ) miny = y;\n\t\t\t\tif ( y > maxy ) maxy = y;\n\n\t\t\t\tif ( z < minz ) minz = z;\n\t\t\t\tif ( z > maxz ) maxz = z;\n\n\t\t\t}\n\n\n\t\t\tif (\n\t\t\t\tfloat32Array[ node32Index + 0 ] !== minx ||\n\t\t\t\tfloat32Array[ node32Index + 1 ] !== miny ||\n\t\t\t\tfloat32Array[ node32Index + 2 ] !== minz ||\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] !== maxx ||\n\t\t\t\tfloat32Array[ node32Index + 4 ] !== maxy ||\n\t\t\t\tfloat32Array[ node32Index + 5 ] !== maxz\n\t\t\t) {\n\n\t\t\t\tfloat32Array[ node32Index + 0 ] = minx;\n\t\t\t\tfloat32Array[ node32Index + 1 ] = miny;\n\t\t\t\tfloat32Array[ node32Index + 2 ] = minz;\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] = maxx;\n\t\t\t\tfloat32Array[ node32Index + 4 ] = maxy;\n\t\t\t\tfloat32Array[ node32Index + 5 ] = maxz;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst left = node32Index + 8;\n\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\n\t\t\t// the identifying node indices provided by the shapecast function include offsets of all\n\t\t\t// root buffers to guarantee they're unique between roots so offset left and right indices here.\n\t\t\tconst offsetLeft = left + byteOffset;\n\t\t\tconst offsetRight = right + byteOffset;\n\t\t\tlet forceChildren = force;\n\t\t\tlet includesLeft = false;\n\t\t\tlet includesRight = false;\n\n\t\t\tif ( nodeIndices ) {\n\n\t\t\t\t// if we see that neither the left or right child are included in the set that need to be updated\n\t\t\t\t// then we assume that all children need to be updated.\n\t\t\t\tif ( ! forceChildren ) {\n\n\t\t\t\t\tincludesLeft = nodeIndices.has( offsetLeft );\n\t\t\t\t\tincludesRight = nodeIndices.has( offsetRight );\n\t\t\t\t\tforceChildren = ! includesLeft && ! includesRight;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tincludesLeft = true;\n\t\t\t\tincludesRight = true;\n\n\t\t\t}\n\n\t\t\tconst traverseLeft = forceChildren || includesLeft;\n\t\t\tconst traverseRight = forceChildren || includesRight;\n\n\t\t\tlet leftChange = false;\n\t\t\tif ( traverseLeft ) {\n\n\t\t\t\tleftChange = _traverse( left, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tlet rightChange = false;\n\t\t\tif ( traverseRight ) {\n\n\t\t\t\trightChange = _traverse( right, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tconst didChange = leftChange || rightChange;\n\t\t\tif ( didChange ) {\n\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\tconst lefti = left + i;\n\t\t\t\t\tconst righti = right + i;\n\t\t\t\t\tconst minLeftValue = float32Array[ lefti ];\n\t\t\t\t\tconst maxLeftValue = float32Array[ lefti + 3 ];\n\t\t\t\t\tconst minRightValue = float32Array[ righti ];\n\t\t\t\t\tconst maxRightValue = float32Array[ righti + 3 ];\n\n\t\t\t\t\tfloat32Array[ node32Index + i ] = minLeftValue < minRightValue ? minLeftValue : minRightValue;\n\t\t\t\t\tfloat32Array[ node32Index + i + 3 ] = maxLeftValue > maxRightValue ? maxLeftValue : maxRightValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn didChange;\n\n\t\t}\n\n\t}\n\n}\n\nexport { refit };\n","/**\n * This function performs intersection tests similar to Ray.intersectBox in three.js,\n * with the difference that the box values are read from an array to improve performance.\n */\nexport function intersectRay( nodeIndex32, array, ray ) {\n\n\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\tconst invdirx = 1 / ray.direction.x,\n\t\tinvdiry = 1 / ray.direction.y,\n\t\tinvdirz = 1 / ray.direction.z;\n\n\tconst ox = ray.origin.x;\n\tconst oy = ray.origin.y;\n\tconst oz = ray.origin.z;\n\n\tlet minx = array[ nodeIndex32 ];\n\tlet maxx = array[ nodeIndex32 + 3 ];\n\n\tlet miny = array[ nodeIndex32 + 1 ];\n\tlet maxy = array[ nodeIndex32 + 3 + 1 ];\n\n\tlet minz = array[ nodeIndex32 + 2 ];\n\tlet maxz = array[ nodeIndex32 + 3 + 2 ];\n\n\tif ( invdirx >= 0 ) {\n\n\t\ttmin = ( minx - ox ) * invdirx;\n\t\ttmax = ( maxx - ox ) * invdirx;\n\n\t} else {\n\n\t\ttmin = ( maxx - ox ) * invdirx;\n\t\ttmax = ( minx - ox ) * invdirx;\n\n\t}\n\n\tif ( invdiry >= 0 ) {\n\n\t\ttymin = ( miny - oy ) * invdiry;\n\t\ttymax = ( maxy - oy ) * invdiry;\n\n\t} else {\n\n\t\ttymin = ( maxy - oy ) * invdiry;\n\t\ttymax = ( miny - oy ) * invdiry;\n\n\t}\n\n\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return false;\n\n\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\tif ( invdirz >= 0 ) {\n\n\t\ttzmin = ( minz - oz ) * invdirz;\n\t\ttzmax = ( maxz - oz ) * invdirz;\n\n\t} else {\n\n\t\ttzmin = ( maxz - oz ) * invdirz;\n\t\ttzmax = ( minz - oz ) * invdirz;\n\n\t}\n\n\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return false;\n\n\t// if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; // Uncomment this line if add the distance check\n\n\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t//return point closest to the ray (positive side)\n\n\tif ( tmax < 0 ) return false;\n\n\treturn true;\n\n}\n","import { intersectTri } from '../../utils/ThreeRayIntersectUtilities.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\n\n/*************************************************************/\n/* This file is generated from \"iterationUtils.template.js\". */\n/*************************************************************/\n/* eslint-disable indent */\n\nfunction intersectTris_indirect( bvh, side, ray, offset, count, intersections ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet vi = _indirectBuffer ? _indirectBuffer[ i ] : i;\n\t\tintersectTri( geometry, side, ray, vi, intersections );\n\n\n\t}\n\n}\n\nfunction intersectClosestTri_indirect( bvh, side, ray, offset, count ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tlet dist = Infinity;\n\tlet res = null;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet intersection;\n\t\tintersection = intersectTri( geometry, side, ray, _indirectBuffer ? _indirectBuffer[ i ] : i );\n\n\n\t\tif ( intersection && intersection.distance < dist ) {\n\n\t\t\tres = intersection;\n\t\t\tdist = intersection.distance;\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\nfunction iterateOverTriangles_indirect(\n\toffset,\n\tcount,\n\tbvh,\n\tintersectsTriangleFunc,\n\tcontained,\n\tdepth,\n\ttriangle\n) {\n\n\tconst { geometry } = bvh;\n\tconst { index } = geometry;\n\tconst pos = geometry.attributes.position;\n\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\tlet tri;\n\t\ttri = bvh.resolveTriangleIndex( i );\n\n\t\tsetTriangle( triangle, tri * 3, index, pos );\n\t\ttriangle.needsUpdate = true;\n\n\t\tif ( intersectsTriangleFunc( triangle, tri, contained, depth ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport { intersectClosestTri_indirect, intersectTris_indirect, iterateOverTriangles_indirect };\n","import { intersectRay } from '../utils/intersectUtils.js';\nimport { IS_LEAF, OFFSET, COUNT, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectTris } from '../utils/iterationUtils.generated.js';\nimport '../utils/iterationUtils_indirect.generated.js';\n\n/******************************************************/\n/* This file is generated from \"raycast.template.js\". */\n/******************************************************/\n\nfunction raycast( bvh, root, side, ray, intersects ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\t_raycast( 0, bvh, side, ray, intersects );\n\tBufferStack.clearBuffer();\n\n}\n\nfunction _raycast( nodeIndex32, bvh, side, ray, intersects ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tconst nodeIndex16 = nodeIndex32 * 2;\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\n\t\tintersectTris( bvh, side, ray, offset, count, intersects );\n\n\n\t} else {\n\n\t\tconst leftIndex = LEFT_NODE( nodeIndex32 );\n\t\tif ( intersectRay( leftIndex, float32Array, ray ) ) {\n\n\t\t\t_raycast( leftIndex, bvh, side, ray, intersects );\n\n\t\t}\n\n\t\tconst rightIndex = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tif ( intersectRay( rightIndex, float32Array, ray ) ) {\n\n\t\t\t_raycast( rightIndex, bvh, side, ray, intersects );\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycast };\n","import { IS_LEAF, OFFSET, COUNT, SPLIT_AXIS, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectRay } from '../utils/intersectUtils.js';\nimport { intersectClosestTri } from '../utils/iterationUtils.generated.js';\nimport '../utils/iterationUtils_indirect.generated.js';\n\n/***********************************************************/\n/* This file is generated from \"raycastFirst.template.js\". */\n/***********************************************************/\n\nconst _xyzFields = [ 'x', 'y', 'z' ];\n\nfunction raycastFirst( bvh, root, side, ray ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _raycastFirst( 0, bvh, side, ray );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _raycastFirst( nodeIndex32, bvh, side, ray ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\n\t\treturn intersectClosestTri( bvh, side, ray, offset, count );\n\n\n\t} else {\n\n\t\t// consider the position of the split plane with respect to the oncoming ray; whichever direction\n\t\t// the ray is coming from, look for an intersection among that side of the tree first\n\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\t\tconst xyzAxis = _xyzFields[ splitAxis ];\n\t\tconst rayDir = ray.direction[ xyzAxis ];\n\t\tconst leftToRight = rayDir >= 0;\n\n\t\t// c1 is the child to check first\n\t\tlet c1, c2;\n\t\tif ( leftToRight ) {\n\n\t\t\tc1 = LEFT_NODE( nodeIndex32 );\n\t\t\tc2 = RIGHT_NODE( nodeIndex32, uint32Array );\n\n\t\t} else {\n\n\t\t\tc1 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\tc2 = LEFT_NODE( nodeIndex32 );\n\n\t\t}\n\n\t\tconst c1Intersection = intersectRay( c1, float32Array, ray );\n\t\tconst c1Result = c1Intersection ? _raycastFirst( c1, bvh, side, ray ) : null;\n\n\t\t// if we got an intersection in the first node and it's closer than the second node's bounding\n\t\t// box, we don't need to consider the second node because it couldn't possibly be a better result\n\t\tif ( c1Result ) {\n\n\t\t\t// check if the point is within the second bounds\n\t\t\t// \"point\" is in the local frame of the bvh\n\t\t\tconst point = c1Result.point[ xyzAxis ];\n\t\t\tconst isOutside = leftToRight ?\n\t\t\t\tpoint <= float32Array[ c2 + splitAxis ] : // min bounding data\n\t\t\t\tpoint >= float32Array[ c2 + splitAxis + 3 ]; // max bounding data\n\n\t\t\tif ( isOutside ) {\n\n\t\t\t\treturn c1Result;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// either there was no intersection in the first node, or there could still be a closer\n\t\t// intersection in the second, so check the second node and then take the better of the two\n\t\tconst c2Intersection = intersectRay( c2, float32Array, ray );\n\t\tconst c2Result = c2Intersection ? _raycastFirst( c2, bvh, side, ray ) : null;\n\n\t\tif ( c1Result && c2Result ) {\n\n\t\t\treturn c1Result.distance <= c2Result.distance ? c1Result : c2Result;\n\n\t\t} else {\n\n\t\t\treturn c1Result || c2Result || null;\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycastFirst };\n","import { Box3, Matrix4 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { ExtendedTriangle } from '../../math/ExtendedTriangle.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { IS_LEAF, OFFSET, COUNT, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\n/*****************************************************************/\n/* This file is generated from \"intersectsGeometry.template.js\". */\n/*****************************************************************/\n/* eslint-disable indent */\n\nconst boundingBox = /* @__PURE__ */ new Box3();\nconst triangle = /* @__PURE__ */ new ExtendedTriangle();\nconst triangle2 = /* @__PURE__ */ new ExtendedTriangle();\nconst invertedMat = /* @__PURE__ */ new Matrix4();\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\n\nfunction intersectsGeometry( bvh, root, otherGeometry, geometryToBvh ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _intersectsGeometry( 0, bvh, otherGeometry, geometryToBvh );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _intersectsGeometry( nodeIndex32, bvh, otherGeometry, geometryToBvh, cachedObb = null ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tif ( cachedObb === null ) {\n\n\t\tif ( ! otherGeometry.boundingBox ) {\n\n\t\t\totherGeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\t\tcachedObb = obb;\n\n\t}\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst thisGeometry = bvh.geometry;\n\t\tconst thisIndex = thisGeometry.index;\n\t\tconst thisPos = thisGeometry.attributes.position;\n\n\t\tconst index = otherGeometry.index;\n\t\tconst pos = otherGeometry.attributes.position;\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\t// get the inverse of the geometry matrix so we can transform our triangles into the\n\t\t// geometry space we're trying to test. We assume there are fewer triangles being checked\n\t\t// here.\n\t\tinvertedMat.copy( geometryToBvh ).invert();\n\n\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t// if there's a bounds tree\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, obb2 );\n\t\t\tobb2.matrix.copy( invertedMat );\n\t\t\tobb2.needsUpdate = true;\n\n\t\t\t// TODO: use a triangle iteration function here\n\t\t\tconst res = otherGeometry.boundsTree.shapecast( {\n\n\t\t\t\tintersectsBounds: box => obb2.intersectsBox( box ),\n\n\t\t\t\tintersectsTriangle: tri => {\n\n\t\t\t\t\ttri.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.needsUpdate = true;\n\n\n\t\t\t\t\tfor ( let i = offset * 3, l = ( count + offset ) * 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\t\t\tsetTriangle( triangle2, i, thisIndex, thisPos );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\t\t\t\t\t\tif ( tri.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn res;\n\n\t\t} else {\n\n\t\t\t// if we're just dealing with raw geometry\n\n\t\t\tfor ( let i = offset * 3, l = ( count + offset ) * 3; i < l; i += 3 ) {\n\n\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\tsetTriangle( triangle, i, thisIndex, thisPos );\n\n\n\t\t\t\ttriangle.a.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.b.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.c.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\tfor ( let i2 = 0, l2 = index.count; i2 < l2; i2 += 3 ) {\n\n\t\t\t\t\tsetTriangle( triangle2, i2, index, pos );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tif ( triangle.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = nodeIndex32 + 8;\n\t\tconst right = uint32Array[ nodeIndex32 + 6 ];\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( left ), float32Array, boundingBox );\n\t\tconst leftIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( left, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( leftIntersection ) return true;\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( right ), float32Array, boundingBox );\n\t\tconst rightIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( right, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( rightIntersection ) return true;\n\n\t\treturn false;\n\n\t}\n\n}\n\nexport { intersectsGeometry };\n","import { Matrix4, Vector3 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { getTriCount } from '../build/geometryUtils.js';\nimport { ExtendedTrianglePool } from '../../utils/ExtendedTrianglePool.js';\n\n/*********************************************************************/\n/* This file is generated from \"closestPointToGeometry.template.js\". */\n/*********************************************************************/\n\nconst tempMatrix = /* @__PURE__ */ new Matrix4();\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\nconst temp1 = /* @__PURE__ */ new Vector3();\nconst temp2 = /* @__PURE__ */ new Vector3();\nconst temp3 = /* @__PURE__ */ new Vector3();\nconst temp4 = /* @__PURE__ */ new Vector3();\n\nfunction closestPointToGeometry(\n\tbvh,\n\totherGeometry,\n\tgeometryToBvh,\n\ttarget1 = { },\n\ttarget2 = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\tif ( ! otherGeometry.boundingBox ) {\n\n\t\totherGeometry.computeBoundingBox();\n\n\t}\n\n\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\tobb.needsUpdate = true;\n\n\tconst geometry = bvh.geometry;\n\tconst pos = geometry.attributes.position;\n\tconst index = geometry.index;\n\tconst otherPos = otherGeometry.attributes.position;\n\tconst otherIndex = otherGeometry.index;\n\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\n\tlet tempTarget1 = temp1;\n\tlet tempTargetDest1 = temp2;\n\tlet tempTarget2 = null;\n\tlet tempTargetDest2 = null;\n\n\tif ( target2 ) {\n\n\t\ttempTarget2 = temp3;\n\t\ttempTargetDest2 = temp4;\n\n\t}\n\n\tlet closestDistance = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tlet closestDistanceOtherTriIndex = null;\n\ttempMatrix.copy( geometryToBvh ).invert();\n\tobb2.matrix.copy( tempMatrix );\n\tbvh.shapecast(\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\treturn obb.distanceToBox( box );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\tif ( score < closestDistance && score < maxThreshold ) {\n\n\t\t\t\t\t// if we know the triangles of this bounds will be intersected next then\n\t\t\t\t\t// save the bounds to use during triangle checks.\n\t\t\t\t\tif ( isLeaf ) {\n\n\t\t\t\t\t\tobb2.min.copy( box.min );\n\t\t\t\t\t\tobb2.max.copy( box.max );\n\t\t\t\t\t\tobb2.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\tintersectsRange: ( offset, count ) => {\n\n\t\t\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t\t\t// if the other geometry has a bvh then use the accelerated path where we use shapecast to find\n\t\t\t\t\t// the closest bounds in the other geometry to check.\n\t\t\t\t\tconst otherBvh = otherGeometry.boundsTree;\n\t\t\t\t\treturn otherBvh.shapecast( {\n\t\t\t\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\t\t\t\treturn obb2.distanceToBox( box );\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\t\t\t\treturn score < closestDistance && score < maxThreshold;\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsRange: ( otherOffset, otherCount ) => {\n\n\t\t\t\t\t\t\tfor ( let i2 = otherOffset, l2 = otherOffset + otherCount; i2 < l2; i2 ++ ) {\n\n\n\t\t\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\n\t\t\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\n\t\t\t\t\t\t\t\t\tsetTriangle( triangle, 3 * i, index, pos );\n\n\t\t\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// If no bounds tree then we'll just check every triangle.\n\t\t\t\t\tconst triCount = getTriCount( otherGeometry );\n\t\t\t\t\tfor ( let i2 = 0, l2 = triCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\n\t\t\t\t\t\t\tsetTriangle( triangle, 3 * i, index, pos );\n\n\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tExtendedTrianglePool.releasePrimitive( triangle );\n\tExtendedTrianglePool.releasePrimitive( triangle2 );\n\n\tif ( closestDistance === Infinity ) {\n\n\t\treturn null;\n\n\t}\n\n\tif ( ! target1.point ) {\n\n\t\ttarget1.point = tempTargetDest1.clone();\n\n\t} else {\n\n\t\ttarget1.point.copy( tempTargetDest1 );\n\n\t}\n\n\ttarget1.distance = closestDistance,\n\ttarget1.faceIndex = closestDistanceTriIndex;\n\n\tif ( target2 ) {\n\n\t\tif ( ! target2.point ) target2.point = tempTargetDest2.clone();\n\t\telse target2.point.copy( tempTargetDest2 );\n\t\ttarget2.point.applyMatrix4( tempMatrix );\n\t\ttempTargetDest1.applyMatrix4( tempMatrix );\n\t\ttarget2.distance = tempTargetDest1.sub( target2.point ).length();\n\t\ttarget2.faceIndex = closestDistanceOtherTriIndex;\n\n\t}\n\n\treturn target1;\n\n}\n\nexport { closestPointToGeometry };\n","import { IS_LEAFNODE_FLAG } from '../Constants.js';\n\n/****************************************************/\n/* This file is generated from \"refit.template.js\". */\n/****************************************************/\n\nfunction refit_indirect( bvh, nodeIndices = null ) {\n\n\tif ( nodeIndices && Array.isArray( nodeIndices ) ) {\n\n\t\tnodeIndices = new Set( nodeIndices );\n\n\t}\n\n\tconst geometry = bvh.geometry;\n\tconst indexArr = geometry.index ? geometry.index.array : null;\n\tconst posAttr = geometry.attributes.position;\n\n\tlet buffer, uint32Array, uint16Array, float32Array;\n\tlet byteOffset = 0;\n\tconst roots = bvh._roots;\n\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\tbuffer = roots[ i ];\n\t\tuint32Array = new Uint32Array( buffer );\n\t\tuint16Array = new Uint16Array( buffer );\n\t\tfloat32Array = new Float32Array( buffer );\n\n\t\t_traverse( 0, byteOffset );\n\t\tbyteOffset += buffer.byteLength;\n\n\t}\n\n\tfunction _traverse( node32Index, byteOffset, force = false ) {\n\n\t\tconst node16Index = node32Index * 2;\n\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\tif ( isLeaf ) {\n\n\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\n\t\t\tlet minx = Infinity;\n\t\t\tlet miny = Infinity;\n\t\t\tlet minz = Infinity;\n\t\t\tlet maxx = - Infinity;\n\t\t\tlet maxy = - Infinity;\n\t\t\tlet maxz = - Infinity;\n\n\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\tconst t = 3 * bvh.resolveTriangleIndex( i );\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tlet index = t + j;\n\t\t\t\t\tindex = indexArr ? indexArr[ index ] : index;\n\n\t\t\t\t\tconst x = posAttr.getX( index );\n\t\t\t\t\tconst y = posAttr.getY( index );\n\t\t\t\t\tconst z = posAttr.getZ( index );\n\n\t\t\t\t\tif ( x < minx ) minx = x;\n\t\t\t\t\tif ( x > maxx ) maxx = x;\n\n\t\t\t\t\tif ( y < miny ) miny = y;\n\t\t\t\t\tif ( y > maxy ) maxy = y;\n\n\t\t\t\t\tif ( z < minz ) minz = z;\n\t\t\t\t\tif ( z > maxz ) maxz = z;\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tif (\n\t\t\t\tfloat32Array[ node32Index + 0 ] !== minx ||\n\t\t\t\tfloat32Array[ node32Index + 1 ] !== miny ||\n\t\t\t\tfloat32Array[ node32Index + 2 ] !== minz ||\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] !== maxx ||\n\t\t\t\tfloat32Array[ node32Index + 4 ] !== maxy ||\n\t\t\t\tfloat32Array[ node32Index + 5 ] !== maxz\n\t\t\t) {\n\n\t\t\t\tfloat32Array[ node32Index + 0 ] = minx;\n\t\t\t\tfloat32Array[ node32Index + 1 ] = miny;\n\t\t\t\tfloat32Array[ node32Index + 2 ] = minz;\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] = maxx;\n\t\t\t\tfloat32Array[ node32Index + 4 ] = maxy;\n\t\t\t\tfloat32Array[ node32Index + 5 ] = maxz;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst left = node32Index + 8;\n\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\n\t\t\t// the identifying node indices provided by the shapecast function include offsets of all\n\t\t\t// root buffers to guarantee they're unique between roots so offset left and right indices here.\n\t\t\tconst offsetLeft = left + byteOffset;\n\t\t\tconst offsetRight = right + byteOffset;\n\t\t\tlet forceChildren = force;\n\t\t\tlet includesLeft = false;\n\t\t\tlet includesRight = false;\n\n\t\t\tif ( nodeIndices ) {\n\n\t\t\t\t// if we see that neither the left or right child are included in the set that need to be updated\n\t\t\t\t// then we assume that all children need to be updated.\n\t\t\t\tif ( ! forceChildren ) {\n\n\t\t\t\t\tincludesLeft = nodeIndices.has( offsetLeft );\n\t\t\t\t\tincludesRight = nodeIndices.has( offsetRight );\n\t\t\t\t\tforceChildren = ! includesLeft && ! includesRight;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tincludesLeft = true;\n\t\t\t\tincludesRight = true;\n\n\t\t\t}\n\n\t\t\tconst traverseLeft = forceChildren || includesLeft;\n\t\t\tconst traverseRight = forceChildren || includesRight;\n\n\t\t\tlet leftChange = false;\n\t\t\tif ( traverseLeft ) {\n\n\t\t\t\tleftChange = _traverse( left, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tlet rightChange = false;\n\t\t\tif ( traverseRight ) {\n\n\t\t\t\trightChange = _traverse( right, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tconst didChange = leftChange || rightChange;\n\t\t\tif ( didChange ) {\n\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\tconst lefti = left + i;\n\t\t\t\t\tconst righti = right + i;\n\t\t\t\t\tconst minLeftValue = float32Array[ lefti ];\n\t\t\t\t\tconst maxLeftValue = float32Array[ lefti + 3 ];\n\t\t\t\t\tconst minRightValue = float32Array[ righti ];\n\t\t\t\t\tconst maxRightValue = float32Array[ righti + 3 ];\n\n\t\t\t\t\tfloat32Array[ node32Index + i ] = minLeftValue < minRightValue ? minLeftValue : minRightValue;\n\t\t\t\t\tfloat32Array[ node32Index + i + 3 ] = maxLeftValue > maxRightValue ? maxLeftValue : maxRightValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn didChange;\n\n\t\t}\n\n\t}\n\n}\n\nexport { refit_indirect };\n","import { intersectRay } from '../utils/intersectUtils.js';\nimport { IS_LEAF, OFFSET, COUNT, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport '../utils/iterationUtils.generated.js';\nimport { intersectTris_indirect } from '../utils/iterationUtils_indirect.generated.js';\n\n/******************************************************/\n/* This file is generated from \"raycast.template.js\". */\n/******************************************************/\n\nfunction raycast_indirect( bvh, root, side, ray, intersects ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\t_raycast( 0, bvh, side, ray, intersects );\n\tBufferStack.clearBuffer();\n\n}\n\nfunction _raycast( nodeIndex32, bvh, side, ray, intersects ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tconst nodeIndex16 = nodeIndex32 * 2;\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\tintersectTris_indirect( bvh, side, ray, offset, count, intersects );\n\n\n\t} else {\n\n\t\tconst leftIndex = LEFT_NODE( nodeIndex32 );\n\t\tif ( intersectRay( leftIndex, float32Array, ray ) ) {\n\n\t\t\t_raycast( leftIndex, bvh, side, ray, intersects );\n\n\t\t}\n\n\t\tconst rightIndex = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tif ( intersectRay( rightIndex, float32Array, ray ) ) {\n\n\t\t\t_raycast( rightIndex, bvh, side, ray, intersects );\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycast_indirect };\n","import { IS_LEAF, OFFSET, COUNT, SPLIT_AXIS, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectRay } from '../utils/intersectUtils.js';\nimport '../utils/iterationUtils.generated.js';\nimport { intersectClosestTri_indirect } from '../utils/iterationUtils_indirect.generated.js';\n\n/***********************************************************/\n/* This file is generated from \"raycastFirst.template.js\". */\n/***********************************************************/\n\nconst _xyzFields = [ 'x', 'y', 'z' ];\n\nfunction raycastFirst_indirect( bvh, root, side, ray ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _raycastFirst( 0, bvh, side, ray );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _raycastFirst( nodeIndex32, bvh, side, ray ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\treturn intersectClosestTri_indirect( bvh, side, ray, offset, count );\n\n\n\t} else {\n\n\t\t// consider the position of the split plane with respect to the oncoming ray; whichever direction\n\t\t// the ray is coming from, look for an intersection among that side of the tree first\n\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\t\tconst xyzAxis = _xyzFields[ splitAxis ];\n\t\tconst rayDir = ray.direction[ xyzAxis ];\n\t\tconst leftToRight = rayDir >= 0;\n\n\t\t// c1 is the child to check first\n\t\tlet c1, c2;\n\t\tif ( leftToRight ) {\n\n\t\t\tc1 = LEFT_NODE( nodeIndex32 );\n\t\t\tc2 = RIGHT_NODE( nodeIndex32, uint32Array );\n\n\t\t} else {\n\n\t\t\tc1 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\tc2 = LEFT_NODE( nodeIndex32 );\n\n\t\t}\n\n\t\tconst c1Intersection = intersectRay( c1, float32Array, ray );\n\t\tconst c1Result = c1Intersection ? _raycastFirst( c1, bvh, side, ray ) : null;\n\n\t\t// if we got an intersection in the first node and it's closer than the second node's bounding\n\t\t// box, we don't need to consider the second node because it couldn't possibly be a better result\n\t\tif ( c1Result ) {\n\n\t\t\t// check if the point is within the second bounds\n\t\t\t// \"point\" is in the local frame of the bvh\n\t\t\tconst point = c1Result.point[ xyzAxis ];\n\t\t\tconst isOutside = leftToRight ?\n\t\t\t\tpoint <= float32Array[ c2 + splitAxis ] : // min bounding data\n\t\t\t\tpoint >= float32Array[ c2 + splitAxis + 3 ]; // max bounding data\n\n\t\t\tif ( isOutside ) {\n\n\t\t\t\treturn c1Result;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// either there was no intersection in the first node, or there could still be a closer\n\t\t// intersection in the second, so check the second node and then take the better of the two\n\t\tconst c2Intersection = intersectRay( c2, float32Array, ray );\n\t\tconst c2Result = c2Intersection ? _raycastFirst( c2, bvh, side, ray ) : null;\n\n\t\tif ( c1Result && c2Result ) {\n\n\t\t\treturn c1Result.distance <= c2Result.distance ? c1Result : c2Result;\n\n\t\t} else {\n\n\t\t\treturn c1Result || c2Result || null;\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycastFirst_indirect };\n","import { Box3, Matrix4 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { ExtendedTriangle } from '../../math/ExtendedTriangle.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { IS_LEAF, OFFSET, COUNT, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\n/*****************************************************************/\n/* This file is generated from \"intersectsGeometry.template.js\". */\n/*****************************************************************/\n/* eslint-disable indent */\n\nconst boundingBox = /* @__PURE__ */ new Box3();\nconst triangle = /* @__PURE__ */ new ExtendedTriangle();\nconst triangle2 = /* @__PURE__ */ new ExtendedTriangle();\nconst invertedMat = /* @__PURE__ */ new Matrix4();\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\n\nfunction intersectsGeometry_indirect( bvh, root, otherGeometry, geometryToBvh ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _intersectsGeometry( 0, bvh, otherGeometry, geometryToBvh );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _intersectsGeometry( nodeIndex32, bvh, otherGeometry, geometryToBvh, cachedObb = null ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tif ( cachedObb === null ) {\n\n\t\tif ( ! otherGeometry.boundingBox ) {\n\n\t\t\totherGeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\t\tcachedObb = obb;\n\n\t}\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst thisGeometry = bvh.geometry;\n\t\tconst thisIndex = thisGeometry.index;\n\t\tconst thisPos = thisGeometry.attributes.position;\n\n\t\tconst index = otherGeometry.index;\n\t\tconst pos = otherGeometry.attributes.position;\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\t// get the inverse of the geometry matrix so we can transform our triangles into the\n\t\t// geometry space we're trying to test. We assume there are fewer triangles being checked\n\t\t// here.\n\t\tinvertedMat.copy( geometryToBvh ).invert();\n\n\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t// if there's a bounds tree\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, obb2 );\n\t\t\tobb2.matrix.copy( invertedMat );\n\t\t\tobb2.needsUpdate = true;\n\n\t\t\t// TODO: use a triangle iteration function here\n\t\t\tconst res = otherGeometry.boundsTree.shapecast( {\n\n\t\t\t\tintersectsBounds: box => obb2.intersectsBox( box ),\n\n\t\t\t\tintersectsTriangle: tri => {\n\n\t\t\t\t\ttri.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.needsUpdate = true;\n\n\t\t\t\t\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\t\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * bvh.resolveTriangleIndex( i ), thisIndex, thisPos );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\t\t\t\t\t\tif ( tri.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn res;\n\n\t\t} else {\n\n\t\t\t// if we're just dealing with raw geometry\n\t\t\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\tsetTriangle( triangle, 3 * ti, thisIndex, thisPos );\n\n\n\t\t\t\ttriangle.a.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.b.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.c.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\tfor ( let i2 = 0, l2 = index.count; i2 < l2; i2 += 3 ) {\n\n\t\t\t\t\tsetTriangle( triangle2, i2, index, pos );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tif ( triangle.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = nodeIndex32 + 8;\n\t\tconst right = uint32Array[ nodeIndex32 + 6 ];\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( left ), float32Array, boundingBox );\n\t\tconst leftIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( left, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( leftIntersection ) return true;\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( right ), float32Array, boundingBox );\n\t\tconst rightIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( right, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( rightIntersection ) return true;\n\n\t\treturn false;\n\n\t}\n\n}\n\nexport { intersectsGeometry_indirect };\n","import { Matrix4, Vector3 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { getTriCount } from '../build/geometryUtils.js';\nimport { ExtendedTrianglePool } from '../../utils/ExtendedTrianglePool.js';\n\n/*********************************************************************/\n/* This file is generated from \"closestPointToGeometry.template.js\". */\n/*********************************************************************/\n\nconst tempMatrix = /* @__PURE__ */ new Matrix4();\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\nconst temp1 = /* @__PURE__ */ new Vector3();\nconst temp2 = /* @__PURE__ */ new Vector3();\nconst temp3 = /* @__PURE__ */ new Vector3();\nconst temp4 = /* @__PURE__ */ new Vector3();\n\nfunction closestPointToGeometry_indirect(\n\tbvh,\n\totherGeometry,\n\tgeometryToBvh,\n\ttarget1 = { },\n\ttarget2 = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\tif ( ! otherGeometry.boundingBox ) {\n\n\t\totherGeometry.computeBoundingBox();\n\n\t}\n\n\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\tobb.needsUpdate = true;\n\n\tconst geometry = bvh.geometry;\n\tconst pos = geometry.attributes.position;\n\tconst index = geometry.index;\n\tconst otherPos = otherGeometry.attributes.position;\n\tconst otherIndex = otherGeometry.index;\n\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\n\tlet tempTarget1 = temp1;\n\tlet tempTargetDest1 = temp2;\n\tlet tempTarget2 = null;\n\tlet tempTargetDest2 = null;\n\n\tif ( target2 ) {\n\n\t\ttempTarget2 = temp3;\n\t\ttempTargetDest2 = temp4;\n\n\t}\n\n\tlet closestDistance = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tlet closestDistanceOtherTriIndex = null;\n\ttempMatrix.copy( geometryToBvh ).invert();\n\tobb2.matrix.copy( tempMatrix );\n\tbvh.shapecast(\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\treturn obb.distanceToBox( box );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\tif ( score < closestDistance && score < maxThreshold ) {\n\n\t\t\t\t\t// if we know the triangles of this bounds will be intersected next then\n\t\t\t\t\t// save the bounds to use during triangle checks.\n\t\t\t\t\tif ( isLeaf ) {\n\n\t\t\t\t\t\tobb2.min.copy( box.min );\n\t\t\t\t\t\tobb2.max.copy( box.max );\n\t\t\t\t\t\tobb2.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\tintersectsRange: ( offset, count ) => {\n\n\t\t\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t\t\t// if the other geometry has a bvh then use the accelerated path where we use shapecast to find\n\t\t\t\t\t// the closest bounds in the other geometry to check.\n\t\t\t\t\tconst otherBvh = otherGeometry.boundsTree;\n\t\t\t\t\treturn otherBvh.shapecast( {\n\t\t\t\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\t\t\t\treturn obb2.distanceToBox( box );\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\t\t\t\treturn score < closestDistance && score < maxThreshold;\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsRange: ( otherOffset, otherCount ) => {\n\n\t\t\t\t\t\t\tfor ( let i2 = otherOffset, l2 = otherOffset + otherCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\t\t\tconst ti2 = otherBvh.resolveTriangleIndex( i2 );\n\t\t\t\t\t\t\t\tsetTriangle( triangle2, 3 * ti2, otherIndex, otherPos );\n\n\t\t\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\t\t\t\t\t\tsetTriangle( triangle, 3 * ti, index, pos );\n\n\t\t\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// If no bounds tree then we'll just check every triangle.\n\t\t\t\t\tconst triCount = getTriCount( otherGeometry );\n\t\t\t\t\tfor ( let i2 = 0, l2 = triCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\t\t\t\tsetTriangle( triangle, 3 * ti, index, pos );\n\n\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tExtendedTrianglePool.releasePrimitive( triangle );\n\tExtendedTrianglePool.releasePrimitive( triangle2 );\n\n\tif ( closestDistance === Infinity ) {\n\n\t\treturn null;\n\n\t}\n\n\tif ( ! target1.point ) {\n\n\t\ttarget1.point = tempTargetDest1.clone();\n\n\t} else {\n\n\t\ttarget1.point.copy( tempTargetDest1 );\n\n\t}\n\n\ttarget1.distance = closestDistance,\n\ttarget1.faceIndex = closestDistanceTriIndex;\n\n\tif ( target2 ) {\n\n\t\tif ( ! target2.point ) target2.point = tempTargetDest2.clone();\n\t\telse target2.point.copy( tempTargetDest2 );\n\t\ttarget2.point.applyMatrix4( tempMatrix );\n\t\ttempTargetDest1.applyMatrix4( tempMatrix );\n\t\ttarget2.distance = tempTargetDest1.sub( target2.point ).length();\n\t\ttarget2.faceIndex = closestDistanceOtherTriIndex;\n\n\t}\n\n\treturn target1;\n\n}\n\nexport { closestPointToGeometry_indirect };\n","export function isSharedArrayBufferSupported() {\n\n\treturn typeof SharedArrayBuffer !== 'undefined';\n\n}\n\nexport function convertToBufferType( array, BufferConstructor ) {\n\n\tif ( array === null ) {\n\n\t\treturn array;\n\n\t} else if ( array.buffer ) {\n\n\t\tconst buffer = array.buffer;\n\t\tif ( buffer.constructor === BufferConstructor ) {\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tconst ArrayConstructor = array.constructor;\n\t\tconst result = new ArrayConstructor( new BufferConstructor( buffer.byteLength ) );\n\t\tresult.set( array );\n\t\treturn result;\n\n\t} else {\n\n\t\tif ( array.constructor === BufferConstructor ) {\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tconst result = new BufferConstructor( array.byteLength );\n\t\tnew Uint8Array( result ).set( new Uint8Array( array ) );\n\t\treturn result;\n\n\t}\n\n}\n","import { Box3, Matrix4 } from 'three';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { BOUNDING_DATA_INDEX, COUNT, IS_LEAF, LEFT_NODE, OFFSET, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { PrimitivePool } from '../../utils/PrimitivePool.js';\n\nconst _bufferStack1 = new BufferStack.constructor();\nconst _bufferStack2 = new BufferStack.constructor();\nconst _boxPool = new PrimitivePool( () => new Box3() );\nconst _leftBox1 = new Box3();\nconst _rightBox1 = new Box3();\n\nconst _leftBox2 = new Box3();\nconst _rightBox2 = new Box3();\n\nlet _active = false;\n\nexport function bvhcast( bvh, otherBvh, matrixToLocal, intersectsRanges ) {\n\n\tif ( _active ) {\n\n\t\tthrow new Error( 'MeshBVH: Recursive calls to bvhcast not supported.' );\n\n\t}\n\n\t_active = true;\n\n\tconst roots = bvh._roots;\n\tconst otherRoots = otherBvh._roots;\n\tlet result;\n\tlet offset1 = 0;\n\tlet offset2 = 0;\n\tconst invMat = new Matrix4().copy( matrixToLocal ).invert();\n\n\t// iterate over the first set of roots\n\tfor ( let i = 0, il = roots.length; i < il; i ++ ) {\n\n\t\t_bufferStack1.setBuffer( roots[ i ] );\n\t\toffset2 = 0;\n\n\t\t// prep the initial root box\n\t\tconst localBox = _boxPool.getPrimitive();\n\t\tarrayToBox( BOUNDING_DATA_INDEX( 0 ), _bufferStack1.float32Array, localBox );\n\t\tlocalBox.applyMatrix4( invMat );\n\n\t\t// iterate over the second set of roots\n\t\tfor ( let j = 0, jl = otherRoots.length; j < jl; j ++ ) {\n\n\t\t\t_bufferStack2.setBuffer( otherRoots[ i ] );\n\n\t\t\tresult = _traverse(\n\t\t\t\t0, 0, matrixToLocal, invMat, intersectsRanges,\n\t\t\t\toffset1, offset2, 0, 0,\n\t\t\t\tlocalBox,\n\t\t\t);\n\n\t\t\t_bufferStack2.clearBuffer();\n\t\t\toffset2 += otherRoots[ j ].length;\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// release stack info\n\t\t_boxPool.releasePrimitive( localBox );\n\t\t_bufferStack1.clearBuffer();\n\t\toffset1 += roots[ i ].length;\n\n\t\tif ( result ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t_active = false;\n\treturn result;\n\n}\n\nfunction _traverse(\n\tnode1Index32,\n\tnode2Index32,\n\tmatrix2to1,\n\tmatrix1to2,\n\tintersectsRangesFunc,\n\n\t// offsets for ids\n\tnode1IndexByteOffset = 0,\n\tnode2IndexByteOffset = 0,\n\n\t// tree depth\n\tdepth1 = 0,\n\tdepth2 = 0,\n\n\tcurrBox = null,\n\treversed = false,\n\n) {\n\n\t// get the buffer stacks associated with the current indices\n\tlet bufferStack1, bufferStack2;\n\tif ( reversed ) {\n\n\t\tbufferStack1 = _bufferStack2;\n\t\tbufferStack2 = _bufferStack1;\n\n\t} else {\n\n\t\tbufferStack1 = _bufferStack1;\n\t\tbufferStack2 = _bufferStack2;\n\n\t}\n\n\t// get the local instances of the typed buffers\n\tconst\n\t\tfloat32Array1 = bufferStack1.float32Array,\n\t\tuint32Array1 = bufferStack1.uint32Array,\n\t\tuint16Array1 = bufferStack1.uint16Array,\n\t\tfloat32Array2 = bufferStack2.float32Array,\n\t\tuint32Array2 = bufferStack2.uint32Array,\n\t\tuint16Array2 = bufferStack2.uint16Array;\n\n\tconst node1Index16 = node1Index32 * 2;\n\tconst node2Index16 = node2Index32 * 2;\n\tconst isLeaf1 = IS_LEAF( node1Index16, uint16Array1 );\n\tconst isLeaf2 = IS_LEAF( node2Index16, uint16Array2 );\n\tlet result = false;\n\tif ( isLeaf2 && isLeaf1 ) {\n\n\t\t// if both bounds are leaf nodes then fire the callback if the boxes intersect\n\t\tif ( reversed ) {\n\n\t\t\tresult = intersectsRangesFunc(\n\t\t\t\tOFFSET( node2Index32, uint32Array2 ), COUNT( node2Index32 * 2, uint16Array2 ),\n\t\t\t\tOFFSET( node1Index32, uint32Array1 ), COUNT( node1Index32 * 2, uint16Array1 ),\n\t\t\t\tdepth2, node2IndexByteOffset + node2Index32,\n\t\t\t\tdepth1, node1IndexByteOffset + node1Index32,\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tresult = intersectsRangesFunc(\n\t\t\t\tOFFSET( node1Index32, uint32Array1 ), COUNT( node1Index32 * 2, uint16Array1 ),\n\t\t\t\tOFFSET( node2Index32, uint32Array2 ), COUNT( node2Index32 * 2, uint16Array2 ),\n\t\t\t\tdepth1, node1IndexByteOffset + node1Index32,\n\t\t\t\tdepth2, node2IndexByteOffset + node2Index32,\n\t\t\t);\n\n\t\t}\n\n\t} else if ( isLeaf2 ) {\n\n\t\t// SWAP\n\t\t// If we've traversed to the leaf node on the other bvh then we need to swap over\n\t\t// to traverse down the first one\n\n\t\t// get the new box to use\n\t\tconst newBox = _boxPool.getPrimitive();\n\t\tarrayToBox( BOUNDING_DATA_INDEX( node2Index32 ), float32Array2, newBox );\n\t\tnewBox.applyMatrix4( matrix2to1 );\n\n\t\t// get the child bounds to check before traversal\n\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\tresult = (\n\t\t\tintersectCl1 && _traverse(\n\t\t\t\tnode2Index32, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\tnewBox, ! reversed,\n\t\t\t)\n\t\t) || (\n\t\t\tintersectCr1 && _traverse(\n\t\t\t\tnode2Index32, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\tnewBox, ! reversed,\n\t\t\t)\n\t\t);\n\n\t\t_boxPool.releasePrimitive( newBox );\n\n\t} else {\n\n\t\t// if neither are leaves then we should swap if one of the children does not\n\t\t// intersect with the current bounds\n\n\t\t// get the child bounds to check\n\t\tconst cl2 = LEFT_NODE( node2Index32 );\n\t\tconst cr2 = RIGHT_NODE( node2Index32, uint32Array2 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cl2 ), float32Array2, _leftBox2 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cr2 ), float32Array2, _rightBox2 );\n\n\t\tconst leftIntersects = currBox.intersectsBox( _leftBox2 );\n\t\tconst rightIntersects = currBox.intersectsBox( _rightBox2 );\n\t\tif ( leftIntersects && rightIntersects ) {\n\n\t\t\t// continue to traverse both children if they both intersect\n\t\t\tresult = _traverse(\n\t\t\t\tnode1Index32, cl2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\tcurrBox, reversed,\n\t\t\t) || _traverse(\n\t\t\t\tnode1Index32, cr2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\tcurrBox, reversed,\n\t\t\t);\n\n\t\t} else if ( leftIntersects ) {\n\n\t\t\tif ( isLeaf1 ) {\n\n\t\t\t\t// if the current box is a leaf then just continue\n\t\t\t\tresult = _traverse(\n\t\t\t\t\tnode1Index32, cl2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\t\tcurrBox, reversed,\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\t// SWAP\n\t\t\t\t// if only one box intersects then we have to swap to the other bvh to continue\n\t\t\t\tconst newBox = _boxPool.getPrimitive();\n\t\t\t\tnewBox.copy( _leftBox2 ).applyMatrix4( matrix2to1 );\n\n\t\t\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\t\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\t\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\t\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\t\t\tresult = (\n\t\t\t\t\tintersectCl1 && _traverse(\n\t\t\t\t\t\tcl2, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t) || (\n\t\t\t\t\tintersectCr1 && _traverse(\n\t\t\t\t\t\tcl2, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t_boxPool.releasePrimitive( newBox );\n\n\t\t\t}\n\n\t\t} else if ( rightIntersects ) {\n\n\t\t\tif ( isLeaf1 ) {\n\n\t\t\t\t// if the current box is a leaf then just continue\n\t\t\t\tresult = _traverse(\n\t\t\t\t\tnode1Index32, cr2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\t\tcurrBox, reversed,\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\t// SWAP\n\t\t\t\t// if only one box intersects then we have to swap to the other bvh to continue\n\t\t\t\tconst newBox = _boxPool.getPrimitive();\n\t\t\t\tnewBox.copy( _rightBox2 ).applyMatrix4( matrix2to1 );\n\n\t\t\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\t\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\t\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\t\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\t\t\tresult = (\n\t\t\t\t\tintersectCl1 && _traverse(\n\t\t\t\t\t\tcr2, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t) || (\n\t\t\t\t\tintersectCr1 && _traverse(\n\t\t\t\t\t\tcr2, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t_boxPool.releasePrimitive( newBox );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n","import { BufferAttribute, Box3, FrontSide } from 'three';\nimport { CENTER, BYTES_PER_NODE, IS_LEAFNODE_FLAG, SKIP_GENERATION } from './Constants.js';\nimport { buildPackedTree } from './build/buildTree.js';\nimport { OrientedBox } from '../math/OrientedBox.js';\nimport { arrayToBox } from '../utils/ArrayBoxUtilities.js';\nimport { ExtendedTrianglePool } from '../utils/ExtendedTrianglePool.js';\nimport { shapecast } from './cast/shapecast.js';\nimport { closestPointToPoint } from './cast/closestPointToPoint.js';\n\nimport { iterateOverTriangles } from './utils/iterationUtils.generated.js';\nimport { refit } from './cast/refit.generated.js';\nimport { raycast } from './cast/raycast.generated.js';\nimport { raycastFirst } from './cast/raycastFirst.generated.js';\nimport { intersectsGeometry } from './cast/intersectsGeometry.generated.js';\nimport { closestPointToGeometry } from './cast/closestPointToGeometry.generated.js';\n\nimport { iterateOverTriangles_indirect } from './utils/iterationUtils_indirect.generated.js';\nimport { refit_indirect } from './cast/refit_indirect.generated.js';\nimport { raycast_indirect } from './cast/raycast_indirect.generated.js';\nimport { raycastFirst_indirect } from './cast/raycastFirst_indirect.generated.js';\nimport { intersectsGeometry_indirect } from './cast/intersectsGeometry_indirect.generated.js';\nimport { closestPointToGeometry_indirect } from './cast/closestPointToGeometry_indirect.generated.js';\nimport { isSharedArrayBufferSupported } from '../utils/BufferUtils.js';\nimport { setTriangle } from '../utils/TriangleUtilities.js';\nimport { bvhcast } from './cast/bvhcast.js';\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst tempBox = /* @__PURE__ */ new Box3();\nexport const DEFAULT_OPTIONS = {\n\tstrategy: CENTER,\n\tmaxDepth: 40,\n\tmaxLeafTris: 10,\n\tuseSharedArrayBuffer: false,\n\tsetBoundingBox: true,\n\tonProgress: null,\n\tindirect: false,\n\tverbose: true,\n};\n\nexport class MeshBVH {\n\n\tstatic serialize( bvh, options = {} ) {\n\n\t\toptions = {\n\t\t\tcloneBuffers: true,\n\t\t\t...options,\n\t\t};\n\n\t\tconst geometry = bvh.geometry;\n\t\tconst rootData = bvh._roots;\n\t\tconst indirectBuffer = bvh._indirectBuffer;\n\t\tconst indexAttribute = geometry.getIndex();\n\t\tlet result;\n\t\tif ( options.cloneBuffers ) {\n\n\t\t\tresult = {\n\t\t\t\troots: rootData.map( root => root.slice() ),\n\t\t\t\tindex: indexAttribute ? indexAttribute.array.slice() : null,\n\t\t\t\tindirectBuffer: indirectBuffer ? indirectBuffer.slice() : null,\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tresult = {\n\t\t\t\troots: rootData,\n\t\t\t\tindex: indexAttribute ? indexAttribute.array : null,\n\t\t\t\tindirectBuffer: indirectBuffer,\n\t\t\t};\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tstatic deserialize( data, geometry, options = {} ) {\n\n\t\toptions = {\n\t\t\tsetIndex: true,\n\t\t\tindirect: Boolean( data.indirectBuffer ),\n\t\t\t...options,\n\t\t};\n\n\t\tconst { index, roots, indirectBuffer } = data;\n\t\tconst bvh = new MeshBVH( geometry, { ...options, [ SKIP_GENERATION ]: true } );\n\t\tbvh._roots = roots;\n\t\tbvh._indirectBuffer = indirectBuffer || null;\n\n\t\tif ( options.setIndex ) {\n\n\t\t\tconst indexAttribute = geometry.getIndex();\n\t\t\tif ( indexAttribute === null ) {\n\n\t\t\t\tconst newIndex = new BufferAttribute( data.index, 1, false );\n\t\t\t\tgeometry.setIndex( newIndex );\n\n\t\t\t} else if ( indexAttribute.array !== index ) {\n\n\t\t\t\tindexAttribute.array.set( index );\n\t\t\t\tindexAttribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bvh;\n\n\t}\n\n\tget indirect() {\n\n\t\treturn ! ! this._indirectBuffer;\n\n\t}\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tif ( ! geometry.isBufferGeometry ) {\n\n\t\t\tthrow new Error( 'MeshBVH: Only BufferGeometries are supported.' );\n\n\t\t} else if ( geometry.index && geometry.index.isInterleavedBufferAttribute ) {\n\n\t\t\tthrow new Error( 'MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.' );\n\n\t\t}\n\n\t\t// default options\n\t\toptions = Object.assign( {\n\n\t\t\t...DEFAULT_OPTIONS,\n\n\t\t\t// undocumented options\n\n\t\t\t// Whether to skip generating the tree. Used for deserialization.\n\t\t\t[ SKIP_GENERATION ]: false,\n\n\t\t}, options );\n\n\t\tif ( options.useSharedArrayBuffer && ! isSharedArrayBufferSupported() ) {\n\n\t\t\tthrow new Error( 'MeshBVH: SharedArrayBuffer is not available.' );\n\n\t\t}\n\n\t\t// retain references to the geometry so we can use them it without having to\n\t\t// take a geometry reference in every function.\n\t\tthis.geometry = geometry;\n\t\tthis._roots = null;\n\t\tthis._indirectBuffer = null;\n\t\tif ( ! options[ SKIP_GENERATION ] ) {\n\n\t\t\tbuildPackedTree( this, options );\n\n\t\t\tif ( ! geometry.boundingBox && options.setBoundingBox ) {\n\n\t\t\t\tgeometry.boundingBox = this.getBoundingBox( new Box3() );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst { _indirectBuffer } = this;\n\t\tthis.resolveTriangleIndex = options.indirect ? i => _indirectBuffer[ i ] : i => i;\n\n\t}\n\n\trefit( nodeIndices = null ) {\n\n\t\tconst refitFunc = this.indirect ? refit_indirect : refit;\n\t\treturn refitFunc( this, nodeIndices );\n\n\t}\n\n\ttraverse( callback, rootIndex = 0 ) {\n\n\t\tconst buffer = this._roots[ rootIndex ];\n\t\tconst uint32Array = new Uint32Array( buffer );\n\t\tconst uint16Array = new Uint16Array( buffer );\n\t\t_traverse( 0 );\n\n\t\tfunction _traverse( node32Index, depth = 0 ) {\n\n\t\t\tconst node16Index = node32Index * 2;\n\t\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\t\tif ( isLeaf ) {\n\n\t\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\t\t\t\tcallback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), offset, count );\n\n\t\t\t} else {\n\n\t\t\t\t// TODO: use node functions here\n\t\t\t\tconst left = node32Index + BYTES_PER_NODE / 4;\n\t\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\t\t\t\tconst splitAxis = uint32Array[ node32Index + 7 ];\n\t\t\t\tconst stopTraversal = callback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), splitAxis );\n\n\t\t\t\tif ( ! stopTraversal ) {\n\n\t\t\t\t\t_traverse( left, depth + 1 );\n\t\t\t\t\t_traverse( right, depth + 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/* Core Cast Functions */\n\traycast( ray, materialOrSide = FrontSide ) {\n\n\t\tconst roots = this._roots;\n\t\tconst geometry = this.geometry;\n\t\tconst intersects = [];\n\t\tconst isMaterial = materialOrSide.isMaterial;\n\t\tconst isArrayMaterial = Array.isArray( materialOrSide );\n\n\t\tconst groups = geometry.groups;\n\t\tconst side = isMaterial ? materialOrSide.side : materialOrSide;\n\t\tconst raycastFunc = this.indirect ? raycast_indirect : raycast;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;\n\t\t\tconst startCount = intersects.length;\n\n\t\t\traycastFunc( this, i, materialSide, ray, intersects );\n\n\t\t\tif ( isArrayMaterial ) {\n\n\t\t\t\tconst materialIndex = groups[ i ].materialIndex;\n\t\t\t\tfor ( let j = startCount, jl = intersects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tintersects[ j ].face.materialIndex = materialIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn intersects;\n\n\t}\n\n\traycastFirst( ray, materialOrSide = FrontSide ) {\n\n\t\tconst roots = this._roots;\n\t\tconst geometry = this.geometry;\n\t\tconst isMaterial = materialOrSide.isMaterial;\n\t\tconst isArrayMaterial = Array.isArray( materialOrSide );\n\n\t\tlet closestResult = null;\n\n\t\tconst groups = geometry.groups;\n\t\tconst side = isMaterial ? materialOrSide.side : materialOrSide;\n\t\tconst raycastFirstFunc = this.indirect ? raycastFirst_indirect : raycastFirst;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;\n\t\t\tconst result = raycastFirstFunc( this, i, materialSide, ray );\n\t\t\tif ( result != null && ( closestResult == null || result.distance < closestResult.distance ) ) {\n\n\t\t\t\tclosestResult = result;\n\t\t\t\tif ( isArrayMaterial ) {\n\n\t\t\t\t\tresult.face.materialIndex = groups[ i ].materialIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn closestResult;\n\n\t}\n\n\tintersectsGeometry( otherGeometry, geomToMesh ) {\n\n\t\tlet result = false;\n\t\tconst roots = this._roots;\n\t\tconst intersectsGeometryFunc = this.indirect ? intersectsGeometry_indirect : intersectsGeometry;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tresult = intersectsGeometryFunc( this, i, otherGeometry, geomToMesh );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tshapecast( callbacks ) {\n\n\t\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\t\tconst iterateFunc = this.indirect ? iterateOverTriangles_indirect : iterateOverTriangles;\n\t\tlet {\n\t\t\tboundsTraverseOrder,\n\t\t\tintersectsBounds,\n\t\t\tintersectsRange,\n\t\t\tintersectsTriangle,\n\t\t} = callbacks;\n\n\t\t// wrap the intersectsRange function\n\t\tif ( intersectsRange && intersectsTriangle ) {\n\n\t\t\tconst originalIntersectsRange = intersectsRange;\n\t\t\tintersectsRange = ( offset, count, contained, depth, nodeIndex ) => {\n\n\t\t\t\tif ( ! originalIntersectsRange( offset, count, contained, depth, nodeIndex ) ) {\n\n\t\t\t\t\treturn iterateFunc( offset, count, this, intersectsTriangle, contained, depth, triangle );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t};\n\n\t\t} else if ( ! intersectsRange ) {\n\n\t\t\tif ( intersectsTriangle ) {\n\n\t\t\t\tintersectsRange = ( offset, count, contained, depth ) => {\n\n\t\t\t\t\treturn iterateFunc( offset, count, this, intersectsTriangle, contained, depth, triangle );\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tintersectsRange = ( offset, count, contained ) => {\n\n\t\t\t\t\treturn contained;\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// run shapecast\n\t\tlet result = false;\n\t\tlet byteOffset = 0;\n\t\tconst roots = this._roots;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst root = roots[ i ];\n\t\t\tresult = shapecast( this, i, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tbyteOffset += root.byteLength;\n\n\t\t}\n\n\t\tExtendedTrianglePool.releasePrimitive( triangle );\n\n\t\treturn result;\n\n\t}\n\n\tbvhcast( otherBvh, matrixToLocal, callbacks ) {\n\n\t\tlet {\n\t\t\tintersectsRanges,\n\t\t\tintersectsTriangles,\n\t\t} = callbacks;\n\n\t\tconst triangle1 = ExtendedTrianglePool.getPrimitive();\n\t\tconst indexAttr1 = this.geometry.index;\n\t\tconst positionAttr1 = this.geometry.attributes.position;\n\t\tconst assignTriangle1 = this.indirect ?\n\t\t\ti1 => {\n\n\n\t\t\t\tconst ti = this.resolveTriangleIndex( i1 );\n\t\t\t\tsetTriangle( triangle1, ti * 3, indexAttr1, positionAttr1 );\n\n\t\t\t} :\n\t\t\ti1 => {\n\n\t\t\t\tsetTriangle( triangle1, i1 * 3, indexAttr1, positionAttr1 );\n\n\t\t\t};\n\n\t\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\t\tconst indexAttr2 = otherBvh.geometry.index;\n\t\tconst positionAttr2 = otherBvh.geometry.attributes.position;\n\t\tconst assignTriangle2 = otherBvh.indirect ?\n\t\t\ti2 => {\n\n\t\t\t\tconst ti2 = otherBvh.resolveTriangleIndex( i2 );\n\t\t\t\tsetTriangle( triangle2, ti2 * 3, indexAttr2, positionAttr2 );\n\n\t\t\t} :\n\t\t\ti2 => {\n\n\t\t\t\tsetTriangle( triangle2, i2 * 3, indexAttr2, positionAttr2 );\n\n\t\t\t};\n\n\t\t// generate triangle callback if needed\n\t\tif ( intersectsTriangles ) {\n\n\t\t\tconst iterateOverDoubleTriangles = ( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) => {\n\n\t\t\t\tfor ( let i2 = offset2, l2 = offset2 + count2; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\tassignTriangle2( i2 );\n\n\t\t\t\t\ttriangle2.a.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.b.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.c.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tfor ( let i1 = offset1, l1 = offset1 + count1; i1 < l1; i1 ++ ) {\n\n\t\t\t\t\t\tassignTriangle1( i1 );\n\n\t\t\t\t\t\ttriangle1.needsUpdate = true;\n\n\t\t\t\t\t\tif ( intersectsTriangles( triangle1, triangle2, i1, i2, depth1, index1, depth2, index2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t\tif ( intersectsRanges ) {\n\n\t\t\t\tconst originalIntersectsRanges = intersectsRanges;\n\t\t\t\tintersectsRanges = function ( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) {\n\n\t\t\t\t\tif ( ! originalIntersectsRanges( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) ) {\n\n\t\t\t\t\t\treturn iterateOverDoubleTriangles( offset1, count1, offset2, count2, depth1, index1, depth2, index2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tintersectsRanges = iterateOverDoubleTriangles;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bvhcast( this, otherBvh, matrixToLocal, intersectsRanges );\n\n\t}\n\n\n\t/* Derived Cast Functions */\n\tintersectsBox( box, boxToMesh ) {\n\n\t\tobb.set( box.min, box.max, boxToMesh );\n\t\tobb.needsUpdate = true;\n\n\t\treturn this.shapecast(\n\t\t\t{\n\t\t\t\tintersectsBounds: box => obb.intersectsBox( box ),\n\t\t\t\tintersectsTriangle: tri => obb.intersectsTriangle( tri )\n\t\t\t}\n\t\t);\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.shapecast(\n\t\t\t{\n\t\t\t\tintersectsBounds: box => sphere.intersectsBox( box ),\n\t\t\t\tintersectsTriangle: tri => tri.intersectsSphere( sphere )\n\t\t\t}\n\t\t);\n\n\t}\n\n\tclosestPointToGeometry( otherGeometry, geometryToBvh, target1 = { }, target2 = { }, minThreshold = 0, maxThreshold = Infinity ) {\n\n\t\tconst closestPointToGeometryFunc = this.indirect ? closestPointToGeometry_indirect : closestPointToGeometry;\n\t\treturn closestPointToGeometryFunc(\n\t\t\tthis,\n\t\t\totherGeometry,\n\t\t\tgeometryToBvh,\n\t\t\ttarget1,\n\t\t\ttarget2,\n\t\t\tminThreshold,\n\t\t\tmaxThreshold,\n\t\t);\n\n\t}\n\n\tclosestPointToPoint( point, target = { }, minThreshold = 0, maxThreshold = Infinity ) {\n\n\t\treturn closestPointToPoint(\n\t\t\tthis,\n\t\t\tpoint,\n\t\t\ttarget,\n\t\t\tminThreshold,\n\t\t\tmaxThreshold,\n\t\t);\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\ttarget.makeEmpty();\n\n\t\tconst roots = this._roots;\n\t\troots.forEach( buffer => {\n\n\t\t\tarrayToBox( 0, new Float32Array( buffer ), tempBox );\n\t\t\ttarget.union( tempBox );\n\n\t\t} );\n\n\t\treturn target;\n\n\t}\n\n}\n","// converts the given BVH raycast intersection to align with the three.js raycast\n// structure (include object, world space distance and point).\nexport function convertRaycastIntersect( hit, object, raycaster ) {\n\n\tif ( hit === null ) {\n\n\t\treturn null;\n\n\t}\n\n\thit.point.applyMatrix4( object.matrixWorld );\n\thit.distance = hit.point.distanceTo( raycaster.ray.origin );\n\thit.object = object;\n\n\tif ( hit.distance < raycaster.near || hit.distance > raycaster.far ) {\n\n\t\treturn null;\n\n\t} else {\n\n\t\treturn hit;\n\n\t}\n\n}\n","import { Ray, Matrix4, Mesh } from 'three';\nimport { convertRaycastIntersect } from './GeometryRayIntersectUtilities.js';\nimport { MeshBVH } from '../core/MeshBVH.js';\n\nconst ray = /* @__PURE__ */ new Ray();\nconst tmpInverseMatrix = /* @__PURE__ */ new Matrix4();\nconst origMeshRaycastFunc = Mesh.prototype.raycast;\n\nexport function acceleratedRaycast( raycaster, intersects ) {\n\n\tif ( this.geometry.boundsTree ) {\n\n\t\tif ( this.material === undefined ) return;\n\n\t\ttmpInverseMatrix.copy( this.matrixWorld ).invert();\n\t\tray.copy( raycaster.ray ).applyMatrix4( tmpInverseMatrix );\n\n\t\tconst bvh = this.geometry.boundsTree;\n\t\tif ( raycaster.firstHitOnly === true ) {\n\n\t\t\tconst hit = convertRaycastIntersect( bvh.raycastFirst( ray, this.material ), this, raycaster );\n\t\t\tif ( hit ) {\n\n\t\t\t\tintersects.push( hit );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst hits = bvh.raycast( ray, this.material );\n\t\t\tfor ( let i = 0, l = hits.length; i < l; i ++ ) {\n\n\t\t\t\tconst hit = convertRaycastIntersect( hits[ i ], this, raycaster );\n\t\t\t\tif ( hit ) {\n\n\t\t\t\t\tintersects.push( hit );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\torigMeshRaycastFunc.call( this, raycaster, intersects );\n\n\t}\n\n}\n\nexport function computeBoundsTree( options ) {\n\n\tthis.boundsTree = new MeshBVH( this, options );\n\treturn this.boundsTree;\n\n}\n\nexport function disposeBoundsTree() {\n\n\tthis.boundsTree = null;\n\n}\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 09/12/2021\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {Color, Material, Mesh, Vector3} from 'three';\nimport {HalfedgeDS} from '../../three-mesh-halfedge';\nimport {\n  acceleratedRaycast,\n  CENTER,\n  computeBoundsTree,\n  disposeBoundsTree,\n  MeshBVH,\n  MeshBVHOptions\n} from 'three-mesh-bvh';\nimport {computeMorphedGeometry, disposeMesh} from '../utils/buffergeometry';\n\ntype ColorMaterial = Material & {color: Color};\n\nexport interface SVGMeshOptions {\n  bvhOptions?: MeshBVHOptions;\n}\n\n/**\n * SVGTexture allows to add a texture to a SVGMesh.\n * Raster image (.jpeg, .png) or vector graphics (.svg) are supported.\n */\nexport interface SVGTexture {\n  /**\n   * Name of the texture\n   */\n  name: string;\n  /**\n   * DataUrl to the image and vector graphics texture\n   */\n  url: string;\n}\n\ndeclare module 'three/src/core/BufferGeometry.js' {\n  export interface BufferGeometry {\n    boundsTree?: MeshBVH;\n    computeBoundsTree: typeof computeBoundsTree;\n    disposeBoundsTree: typeof disposeBoundsTree;\n  }\n}\n\n\n/**\n * Mesh object that can be rendered as SVG.\n * Wrapper class around three mesh object that duplicates geometry if needed (i.e.\n * for SkinnedMesh) and computes BVH and HalfEdgeStructure on demand)\n */\nexport class SVGMesh {\n\n  readonly sourceMesh: Mesh;\n  readonly threeMesh = new Mesh();\n  readonly hes: HalfedgeDS;\n  readonly bvhOptions: MeshBVHOptions;\n  bvh: MeshBVH;\n  drawFills = true;\n  drawVisibleContours = true;\n  drawHiddenContours = true;\n  isUsingBVHForRaycasting = false;\n  texture?: SVGTexture;\n\n  constructor(mesh: Mesh, options: SVGMeshOptions = {}) {\n    this.sourceMesh = mesh;\n    this.threeMesh.copy(mesh);\n    // if(this.sourceMesh.geometry.index){\n    //   this.threeMesh.geometry = this.sourceMesh.geometry.toNonIndexed();\n    // }else {\n      this.threeMesh.geometry = this.sourceMesh.geometry.clone();\n    // }\n    // this.threeMesh.geometry = toIndexedGeometry(this.sourceMesh.geometry, 1);\n\n    // Setup HES\n    this.hes = new HalfedgeDS();\n    // const t = this.hes.addEdge\n    // this.hes.addEdge = (...args)=>{\n    //   try{\n    //     return t.call(this.hes, ...args)\n    //   }catch(e){\n    //     console.error(e)\n    //     console.log('args', args)\n    //   }\n    // }\n\n    // Setup BVH\n    const bvhOptions = {\n      maxLeafTris: 1,\n      strategy: CENTER,\n      ...options?.bvhOptions\n    }\n\n    this.bvhOptions = bvhOptions\n    this.bvh = new MeshBVH(this.threeMesh.geometry, bvhOptions);\n    this.threeMesh.geometry.boundsTree = this.bvh;\n    this.threeMesh.raycast = acceleratedRaycast;\n  }\n\n  /**\n   * Adds a SVGtexture to the mesh.\n   *\n   * @param texture The image or vector graphics texture to use.\n   */\n  addTexture(texture: SVGTexture) {\n    this.texture = texture;\n  }\n\n  updateMorphGeometry() {\n    computeMorphedGeometry(this.sourceMesh, this.threeMesh.geometry);\n  }\n\n  // private _i= 0\n  updateBVH(updateMorphGeometry = true) {\n    // if(this._i) return\n    // this._i++\n    updateMorphGeometry && this.updateMorphGeometry();\n    this.bvh.refit();\n  }\n\n  updateHES(updateMorphGeometry = true) {\n    // if(!force && this.hes.faces.length) return\n    updateMorphGeometry && this.updateMorphGeometry();\n    this.hes.setFromGeometry(this.threeMesh.geometry, 1e-10);\n  }\n\n  localToWorld(target: Vector3): Vector3 {\n    return this.threeMesh.localToWorld(target);\n  }\n\n  colorForFaceIndex(faceIndex: number): null | Color {\n\n    if (Array.isArray(this.material)) {\n      for (const group of this.threeMesh.geometry.groups) {\n        if (group.start <= faceIndex &&\n            faceIndex < (group.start + group.count) &&\n            group.materialIndex != undefined &&\n            group.materialIndex < this.material.length) {\n          return colorForMaterial(this.material[group.materialIndex]);\n        }\n      }\n      return null;\n    }\n    return colorForMaterial(this.material);\n  }\n\n  dispose() {\n    disposeMesh(this.threeMesh);\n  }\n\n  get material() { return this.threeMesh.material; }\n  get matrixWorld() { return this.threeMesh.matrixWorld; }\n  get name() { return this.threeMesh.name; }\n  set name(name: string) { this.threeMesh.name = name; }\n\n  updateObject(){\n    // const g = this.sourceMesh.geometry;\n    // const ud = this.sourceMesh.userData;\n    // this.sourceMesh.userData = {};\n    // this.threeMesh.copy(this.sourceMesh, false);\n    // this.sourceMesh.userData = ud;\n    // this.threeMesh.geometry = g;\n    this.threeMesh.position.copy(this.sourceMesh.position);\n    this.threeMesh.quaternion.copy(this.sourceMesh.quaternion);\n    this.threeMesh.scale.copy(this.sourceMesh.scale);\n    this.threeMesh.updateMatrix();\n    this.threeMesh.updateMatrixWorld();\n  }\n\n  remakeBVH(){\n    this.bvh = new MeshBVH(this.threeMesh.geometry, this.bvhOptions);\n    this.threeMesh.geometry.boundsTree = this.bvh;\n  }\n}\n\nfunction colorForMaterial(material: Material) {\n  const colorMaterial = material as ColorMaterial;\n  return colorMaterial.color;\n}\n\n","// Author: Axel Antoine\n// mail: ax.antoine@gmail.com\n// website: https://axantoine.com\n// 14/06/2022\n\n// Loki, Inria project-team with Université de Lille\n// within the Joint Research Unit UMR 9189 CNRS-Centrale\n// Lille-Université de Lille, CRIStAL.\n// https://loki.lille.inria.fr\n\n// LICENCE: Licence.md\n\nimport {PerspectiveCamera} from 'three';\nimport {DrawPass, SVGDrawHandler, SVGDrawInfo, SVGDrawOptions, Viewmap, ViewmapBuildInfo, ViewmapOptions} from './core';\nimport {SVGMesh} from './core/SVGMesh';\nimport {Svg} from '@svgdotjs/svg.js';\n\n// import format from 'xml-formatter';\n\nexport interface ExportOptions {\n  prettify?: boolean;\n}\n\nexport class SVGRenderInfo {\n  resolution = {w: Infinity, h: Infinity};\n  renderingTime = Infinity;\n  readonly svgDrawInfo = new SVGDrawInfo();\n  readonly viewmapInfo = new ViewmapBuildInfo();\n}\n\nexport interface ProgressInfo {\n  currentStepName: string;\n  currentStep: number;\n  totalSteps: number;\n}\n\n/**\n *\n */\nexport class SVGRenderer {\n\n  readonly viewmap;\n  readonly drawHandler;\n\n\n  constructor(vOptions?: ViewmapOptions, sOptions?: SVGDrawOptions) {\n    this.viewmap = new Viewmap(vOptions);\n    this.drawHandler = new SVGDrawHandler(sOptions);\n  }\n\n\n  /**\n   * Render a SVG file from the given meshes and returns it.\n   * @param meshes Mehses to render\n   * @param camera Camera used to compute the perspective\n   * @param size Size of the render (will be scaled by camera aspect ratio)\n   * @param options Options to customize the render\n   * @param info Object containing info (e.g. times) on the rendering process\n   * @returns SVG object from the Svgdotjs lib\n   */\n  async generateSVG(\n      meshes: Array<SVGMesh>,\n      camera: PerspectiveCamera,\n      size: {w: number, h: number},\n      info = new SVGRenderInfo()): Promise<Svg> {\n\n    const renderStartTime = Date.now();\n\n    // Setup camera keeping\n    const renderSize = {w: size.w, h: size.w/camera.aspect};\n    info.resolution = renderSize;\n\n    // Viewmap Build\n    await this.viewmap.build(\n      meshes, camera, renderSize, info.viewmapInfo\n    );\n\n    // SVG Buid\n    const svg = await this.drawHandler.drawSVG(\n      this.viewmap, renderSize, info.svgDrawInfo\n    );\n\n    info.renderingTime = Date.now() - renderStartTime;\n\n    // console.log(JSON.parse(JSON.stringify(info)));\n\n    return svg;\n  }\n\n  /**\n   * Adds a pass to the SVG rendering pipeline.\n   * @param pass\n   */\n  addPass(pass: DrawPass) {\n    if (!this.drawHandler.passes.includes(pass)) {\n      this.drawHandler.passes.push(pass);\n    }\n  }\n\n  /**\n   * Removes a pass from the SVG rendering pipeline\n   * @param pass\n   */\n  removePass(pass: DrawPass) {\n    this.drawHandler.passes.remove(pass);\n  }\n\n  /**\n   * Removes all the passes from the SVG rendering pipeline.\n   */\n  clearPasses() {\n    this.drawHandler.passes.clear();\n  }\n\n\n  // static exportSVG(svg: Svg, filename: string, options?: ExportOptions) {\n  //\n  //   const opt = {\n  //     prettify: false,\n  //     ...options,\n  //   }\n  //\n  //   let text = svg.svg();\n  //   if (opt.prettify) {\n  //     text = (text, {});\n  //   }\n  //   const svgBlob = new Blob([text], {type:\"image/svg+xml;charset=utf-8\"});\n  //   const svgUrl = URL.createObjectURL(svgBlob);\n  //   const downloadLink = document.createElement(\"a\");\n  //   downloadLink.href = svgUrl;\n  //   downloadLink.download = filename;\n  //   document.body.appendChild(downloadLink);\n  //   downloadLink.click();\n  //   document.body.removeChild(downloadLink);\n  // }\n\n\n\n\n\n}\n","import {\n    AViewerPluginSync,\n    IObject3D,\n    type IViewerEvent,\n    Mesh,\n    onChange,\n    PerspectiveCamera2,\n    ThreeViewer,\n    timeout,\n    uiButton,\n    uiFolderContainer,\n    uiToggle,\n    uiVector,\n    Vector2,\n} from 'threepipe'\nimport {FillPass, HiddenChainPass, SVGMesh, SVGRenderer, VisibleChainPass} from './three-svg-renderer'\nimport {Vertex} from './three-mesh-halfedge'\n\n/**\n* SVG Rendering from 3d scenes helper plugin using [three-svg-renderer](https://www.npmjs.com/package/three-svg-renderer) (GPLV3 Licenced)\n*/\n@uiFolderContainer('SVG Renderer')\nexport class ThreeSVGRendererPlugin extends AViewerPluginSync {\n    static readonly PluginType = 'ThreeSVGRendererPlugin'\n\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        enabled = true\n    /**\n     * Automatically render when camera or any object changes.\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        autoRender = true\n\n    /**\n     * Use the fill pass to draw polygons.(both fills and strokes)\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        drawPolygons = true\n    /**\n     * Draw polygon fills. (fill color from material.color)\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        drawPolygonFills = true\n    /**\n     * Draw polygon strokes. (stroke color from material.color)\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        drawPolygonStrokes = true\n    /**\n     * Draw image fills. (fill image from rendered canvas image).\n     * Make sure canvas is rendered(and render pipeline has a render pass) before calling this.\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        drawImageFills = false\n    /**\n     * Draw visible contours of meshes.\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        drawVisibleContours = true\n    /**\n     * Draw hidden contours of meshes.\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        drawHiddenContours = true\n\n    /**\n     * Update meshes on every render. If this is false, meshes will only be updated when they change. (tracked using objectUpdate event)\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        alwaysUpdateMeshes = true\n\n    /**\n     * Min and Max Crease angle for mesh edges.\n     */\n    @uiVector()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        creaseAngle = new Vector2(80, 100)\n\n    /**\n     * Automatically create SVG objects for all meshes in the scene.\n     * If this is false, you will have to manually create SVG objects for meshes using `makeSVGObject` method.\n     */\n    @uiToggle()\n    @onChange(ThreeSVGRendererPlugin.prototype.setDirty)\n        autoMakeSvgObjects = true\n\n    readonly renderer = new SVGRenderer()\n    readonly svgNodeContainer = document.createElement('div')\n    protected readonly _fillPass: FillPass\n\n    setDirty(...args: any[]): any {\n        if (args[0] === 'enabled') {\n            const last = args[2]\n            const current = args[1]\n            if (last !== current && this._meshes?.size) {\n                this._toggleMaterialRendering([...this._meshes.values()], !current)\n            }\n            if (this.svgNodeContainer) {\n                this.svgNodeContainer.style.display = current ? '' : 'none'\n            }\n        }\n        this._viewer?.setDirty()\n    }\n\n    /**\n     * @param enabled\n     * @param autoAddToContainer - automatically add the svg to the viewer container and style it same as the viewer is position is absolute\n     */\n    constructor(enabled = true, readonly autoAddToContainer = true) {\n        super()\n        this._onResize = this._onResize.bind(this)\n        this._onMeshDispose = this._onMeshDispose.bind(this)\n        this._onMeshUpdate = this._onMeshUpdate.bind(this)\n        this.updateMeshes = this.updateMeshes.bind(this)\n        this.enabled = enabled\n        this.svgNodeContainer.style.position = 'absolute'\n        this.svgNodeContainer.style.display = 'none'\n        // This pass will draw fills for meshes using the three.js material color\n        this._fillPass = new FillPass()\n\n        // This pass will draw visible contours of meshes on top of fills\n        // using black color and solid line of width 1\n        const visibleChainPass = new VisibleChainPass({\n            // color: '#000000',\n            // width: 1,\n        })\n\n        // This pass will draw hidden contours on top of visible and fills\n        // using red color, dash line of width 1\n        const hiddenChainPass = new HiddenChainPass({\n            // color: '#FF0000',\n            // width: 1,\n            // dasharray: '2,2',\n        })\n\n        this.renderer.addPass(this._fillPass)\n        this.renderer.addPass(visibleChainPass)\n        this.renderer.addPass(hiddenChainPass)\n\n        Vertex.MAX_LOOP = 10000 // todo; this is for large models that get stuck.\n        // this.renderer.addPass(new SingularityPointPass())\n        // this.renderer.addPass(new TexturePass())\n    }\n\n    protected _lastStyles?: string = undefined\n    onAdded(viewer: ThreeViewer) {\n        super.onAdded(viewer)\n        // this.renderer.setSize(viewer.canvas.clientWidth, viewer.canvas.clientHeight)\n        // this._refreshParams() // this is done before rendering\n        if (this.autoAddToContainer) {\n            viewer.container.prepend(this.svgNodeContainer) // behind the canvas so that we get pointer events and see other stuff\n            this.svgNodeContainer.style.pointerEvents = 'none'\n            const canvasStyles = getComputedStyle(viewer.canvas)\n            if (canvasStyles.position === 'absolute') {\n                this._lastStyles = this.svgNodeContainer.style.cssText\n                // copy styles from canvas to svg so it looks the same.\n                this.svgNodeContainer.style.top = canvasStyles.top\n                this.svgNodeContainer.style.left = canvasStyles.left\n                this.svgNodeContainer.style.width = canvasStyles.width\n                this.svgNodeContainer.style.height = canvasStyles.height\n                // this.svgNodeContainer.style.zIndex = '999999' // svg should be behind the canvas\n            } else {\n                this._viewer?.console.warn('ThreeSVGRendererPlugin: canvas position should be absolute for proper rendering')\n            }\n            viewer.renderManager.addEventListener('resize', this._onResize)\n        }\n        this.svgNodeContainer.style.display = this.enabled ? '' : 'none'\n        viewer.scene.modelRoot.addEventListener('objectUpdate', this.updateMeshes)\n    }\n\n    private _meshesNeedsUpdate = true\n    updateMeshes() {\n        console.log('updateMeshes')\n        this._meshesNeedsUpdate = true\n    }\n\n    onRemove(viewer: ThreeViewer) {\n        super.onRemove(viewer)\n        if (this.autoAddToContainer) {\n            viewer.container.removeChild(this.svgNodeContainer)\n        }\n        if (this._lastStyles !== undefined) {\n            this.svgNodeContainer.style.cssText = this._lastStyles\n            this._lastStyles = undefined\n        }\n        viewer.renderManager.removeEventListener('resize', this._onResize)\n        this._meshes.clear() // ?\n        this.svgNodeContainer.style.display = 'none'\n        viewer.scene.modelRoot.removeEventListener('objectUpdate', this.updateMeshes)\n    }\n\n    protected _onMeshDispose(ev: any) {\n        if (!ev.target) return\n        const mesh = ev.target as Mesh\n        const svgMesh = this._meshes.get(mesh.uuid)\n        if (!svgMesh) return\n        svgMesh.dispose()\n        this._meshes.delete(mesh.uuid)\n        mesh.removeEventListener('dispose', this._onMeshDispose)\n        mesh.removeEventListener('objectUpdate', this._onMeshUpdate)\n    }\n    protected _onMeshUpdate(ev: any) {\n        if (!ev.target) return\n        const mesh = ev.target as Mesh\n        const svgMesh = this._meshes.get(mesh.uuid)\n        if (!svgMesh) return\n        svgMesh.updateObject()\n    }\n    protected _meshes = new Map<string, SVGMesh>()\n    protected _refreshMeshes(root?: IObject3D) {\n        if (!this.autoMakeSvgObjects) return []\n        if (!root && this._viewer) root = this._viewer.scene.modelRoot\n        if (!root) return []\n        root.traverse(o=>{\n            this.makeSVGObject(o)\n        })\n    }\n\n    makeSVGObject(o: IObject3D) {\n        if (!(o.isMesh && !this._meshes.has(o.uuid))) return\n        const ud = o.userData\n        o.userData = {}\n        const svgMesh = new SVGMesh(o as any as Mesh)\n        o.userData = ud\n        this._meshes.set(o.uuid, svgMesh)\n        this._toggleMaterialRendering([svgMesh], !this.enabled)\n        o.addEventListener('dispose', this._onMeshDispose)\n        o.addEventListener('objectUpdate', this._onMeshUpdate) // todo: check if we need to do object update everytime and what actions specifically.\n        this._meshesNeedsUpdate = true // because we have a new mesh\n    }\n\n    private _rendering = false\n\n    static SVG_RENDER_TIMEOUT = 2000\n\n    protected _toggleMaterialRendering(meshes: SVGMesh[], enable: boolean) {\n        const materials = []\n        for (const mesh of meshes) {\n            materials.push(...Array.isArray(mesh.material) ? mesh.material : [mesh.material])\n        }\n        // enable rendering of material colors\n        for (const mat of materials) {\n            if (mat.colorWrite !== undefined) {\n                if (enable && !mat.colorWrite) {\n                    mat.colorWrite = true\n                    delete mat.userData.forcedLinearDepth\n                    // mat.userData._colorWriteSet = true\n                } else if (!enable /* && mat.userData._colorWriteSet*/) {\n                    mat.colorWrite = false\n                    mat.userData.forcedLinearDepth = 1 // for gbuffer plugin\n                    // delete mat.userData._colorWriteSet\n                }\n            }\n        }\n\n    }\n\n    @uiButton()\n    async render() {\n        if (!this._viewer || !this._viewer.renderEnabled) return\n        if (this.isDisabled()) return\n        if (this._rendering) return\n        this._rendering = true\n        this._refreshParams()\n        this._refreshMeshes()\n\n        const meshes = [...this._meshes.values()]\n        // todo: make sure all meshes are in the scene\n        // todo only use meshes that should be rendered.\n        if (!meshes.length) {\n            this._rendering = false\n            return ''\n        }\n        const camera = this._viewer.scene.mainCamera as PerspectiveCamera2\n        try {\n            if (this.drawImageFills) {\n                this._toggleMaterialRendering(meshes, true)\n                this._viewer.setDirty()\n                this._viewer.canvas.style.opacity = '0'\n                await this._viewer.doOnce('preFrame') // because we are already in postRender or postFrame.\n                await this._viewer.doOnce('postFrame') // todo wait for progressive also maybe\n\n                await this._viewer.doOnce('postFrame') // once more\n                this._fillPass.options.fillImage = this._viewer.canvas.toDataURL('image/png')\n\n                // disable rendering of material colors\n                this._toggleMaterialRendering(meshes, false)\n\n                this._viewer.setDirty()\n                await this._viewer.doOnce('preFrame') // already in postFrame\n                await this._viewer.doOnce('postFrame')\n                this._viewer.canvas.style.opacity = '1'\n            }\n\n            // this._fillPass.options.fillImage = this._viewer.canvas.toDataURL('image/png')\n            // this._viewer.renderEnabled = false\n            this.renderer.viewmap.skipActions = false\n            const svgPromise = this.renderer.generateSVG(meshes, camera, {\n                w: this._viewer.canvas.width,\n                h: this._viewer.canvas.height,\n            })\n            let svgResolved = false\n            timeout(ThreeSVGRendererPlugin.SVG_RENDER_TIMEOUT).then(()=>{ // todo: make support in libs to cancel the promise. this will just wait for an action to complete.\n                if (!svgResolved) {\n                    console.warn('timeout')\n                    this.renderer.viewmap.skipActions = true\n                }\n            })\n            const svg = await svgPromise\n            svgResolved = true\n            this.renderer.viewmap.skipActions = false\n            // this._viewer.renderEnabled = true\n            this.svgNodeContainer.innerHTML = svg.node.outerHTML\n            this._rendering = false\n            return svg.svg()\n        } catch (e) {\n            console.error(e)\n        }\n        this._rendering = false\n        return ''\n    }\n\n    @uiButton()\n    download() {\n        const svg = this.svgNodeContainer.innerHTML\n        const blob = new Blob([svg], {type: 'image/svg+xml'})\n        this._viewer?.exportBlob(blob, 'scene.svg')\n    }\n\n    protected _viewerListeners = {\n        postRender: (_: IViewerEvent)=>{\n            if (this.autoRender) this.render()\n        },\n    }\n\n    get svgNode() {\n        if (!this.svgNodeContainer.children.length) return undefined\n        if (this.svgNodeContainer.children.length > 1) {\n            this._viewer?.console.warn('ThreeSVGRenderer: Multiple svg nodes in container, should not be possible')\n        }\n        return this.svgNodeContainer.children[0]\n    }\n\n    protected _refreshParams() {\n        if (this.isDisabled()) return\n        if (this._meshesNeedsUpdate) {\n            this.renderer.viewmap.options.updateMeshes = true\n            this._meshesNeedsUpdate = false\n        } else this.renderer.viewmap.options.updateMeshes = this.alwaysUpdateMeshes\n        this.renderer.viewmap.options.creaseAngle.min = this.creaseAngle.x\n        this.renderer.viewmap.options.creaseAngle.max = this.creaseAngle.y\n\n        const passes = this.renderer.drawHandler.passes\n        const fillPass = passes.find(p=>p instanceof FillPass)!\n        const visibleContourPass = passes.find(p=>p instanceof VisibleChainPass)!\n        const hiddenContourPass = passes.find(p=>p instanceof HiddenChainPass)!\n        if (fillPass) {\n            fillPass.enabled = this.drawPolygons && (this.drawPolygonFills || this.drawPolygonStrokes || this.drawImageFills)\n            fillPass.drawFills = this.drawPolygonFills\n            fillPass.drawStrokes = this.drawPolygonStrokes\n            fillPass.drawImageFills = this.drawImageFills\n        }\n        if (visibleContourPass) {\n            visibleContourPass.enabled = this.drawVisibleContours\n        }\n        if (hiddenContourPass) {\n            hiddenContourPass.enabled = this.drawHiddenContours\n        }\n\n    }\n    protected _onResize() {\n        if (!this._viewer) return\n        // this.renderer.setSize(this._viewer.canvas.clientWidth, this._viewer.canvas.clientHeight)\n    }\n\n}\n\n\n// adding here since they dont show up in dependencies.txt somehow\n/**\n * @license\n * three-svg-renderer\n *\n * GNU GENERAL PUBLIC LICENSE\n * Version 3, 29 June 2007\n *\n * Copyright (c) 2022 Axel Antoine\n */\n/**\n * @license\n * three-mesh-halfedge\n *\n * MIT License\n *\n * Copyright (c) 2022 Axel Antoine\n */\n"],"names":["Color","_line","position","x","y","b","c","_vector4","_v2","_color","_normal","width","height","k","U","C","R","f","G","SVGRenderer","__decorateClass","uiToggle","uiNumber","uiDropdown","onChange2","uiFolderContainer","_","svg","ViewEdgeNature","v","_u","Vector3","point","size","_matrix","Matrix4","orient3D","frontSide","ViewVertexSingularity","Vector2","ChainVisibility","Arrangement2D","err","data","readBinary","readAsync","array","buffer","max","exports","prev","compare","date","off","length","getClass","self","Point","Polygon","_v","_raycaster","DoubleSide","EPSILON","_u$1","_v$1","_inter","Intersection","v1","v2","Node","N","root","Tree","this$1","keys","values","Flatbush","add","temp","A","B","checkIntersection","_vec","methods","next","attr","hex","round","h","min","_a","_b","_c","color","rx","ry","cx","cy","dx","dy","node","box","bbox","el","rbox","attrs","find","map","str","matrix","transform","ctm","from","to","i","parser","clear","remove","runnerInfo","timeline","transforms","Symbol","build","SVGText","SVGPath","SVGPathArray","SVGCircle","SVGGroup","Box2","SVGColor","Triangle","center","leftBounds","split","uint16Array","uint32Array","offset","count","range","closestPointLineToLine","temp1","temp2","closestPointsSegmentToSegment","Line3","sphereIntersectTriangle","triangle","point2","update","closestPointToPoint","float32Array","nodeIndex32","nodeIndex16","ray","_traverse","byteOffset","_raycast","_xyzFields","_raycastFirst","boundingBox","triangle2","invertedMat","obb","obb2","_intersectsGeometry","tempMatrix","temp3","temp4","Mesh"],"mappings":"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","x_google_ignoreList":[0,1,2,3,13,19,24,28,29,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91]}