{"version":3,"file":"index.umd.cjs","sources":["../src/utils/hashUtils.js","../src/core/HalfEdgeMap.js","../src/core/utils.js","../src/core/Brush.js","../src/core/IntersectionMap.js","../src/core/constants.js","../src/core/operationsUtils.js","../src/core/TriangleSplitter.js","../src/core/TypeBackedArray.js","../src/core/TypedAttributeData.js","../src/core/OperationDebugData.js","../src/core/operations.js","../src/core/Evaluator.js","../src/core/Operation.js","../src/core/OperationGroup.js","../src/materials/shaderUtils.js","../src/materials/GridMaterial.js","../src/core/debugUtils.js","../src/objects/TriangleSetHelper.js","../src/objects/EdgesHelper.js","../src/objects/PointsHelper.js","../src/objects/HalfEdgeHelper.js","../src/utils/computeMeshVolume.js"],"sourcesContent":["const HASH_MULTIPLIER = ( 1 + 1e-7 ) * 1e6;\n\nexport function hashNumber( v ) {\n\n\treturn ~ ~ ( v * HASH_MULTIPLIER );\n\n}\n\nexport function hashVertex( v ) {\n\n\treturn `${ hashNumber( v.x ) },${ hashNumber( v.y ) },${ hashNumber( v.z ) }`;\n\n}\n","import { Vector3 } from 'three';\nimport { hashVertex } from '../utils/hashUtils.js';\n\nconst _vertices = [ new Vector3(), new Vector3(), new Vector3() ];\n\nexport class HalfEdgeMap {\n\n\tconstructor( geometry = null ) {\n\n\t\tthis.data = null;\n\t\tthis.unmatchedEdges = null;\n\t\tthis.matchedEdges = null;\n\t\tthis.useDrawRange = true;\n\n\t\tif ( geometry ) {\n\n\t\t\tthis.updateFrom( geometry );\n\n\t\t}\n\n\t}\n\n\tgetSiblingTriangleIndex( triIndex, edgeIndex ) {\n\n\t\tconst otherIndex = this.data[ triIndex * 3 + edgeIndex ];\n\t\treturn otherIndex === - 1 ? - 1 : ~ ~ ( otherIndex / 3 );\n\n\t}\n\n\tgetSiblingEdgeIndex( triIndex, edgeIndex ) {\n\n\t\tconst otherIndex = this.data[ triIndex * 3 + edgeIndex ];\n\t\treturn otherIndex === - 1 ? - 1 : ( otherIndex % 3 );\n\n\t}\n\n\tupdateFrom( geometry ) {\n\n\t\t// runs on the assumption that there is a 1 : 1 match of edges\n\t\tconst map = new Map();\n\n\t\t// attributes\n\t\tconst { attributes } = geometry;\n\t\tconst indexAttr = geometry.index;\n\t\tconst posAttr = attributes.position;\n\n\t\t// get the potential number of triangles\n\t\tlet triCount = indexAttr ? indexAttr.count / 3 : posAttr.count / 3;\n\t\tconst maxTriCount = triCount;\n\n\t\t// get the real number of triangles from the based on the draw range\n\t\tlet offset = 0;\n\t\tif ( this.useDrawRange ) {\n\n\t\t\toffset = geometry.drawRange.start;\n\t\t\tif ( geometry.drawRange.count !== Infinity ) {\n\n\t\t\t\ttriCount = ~ ~ ( geometry.drawRange.count / 3 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// initialize the connectivity buffer - 1 means no connectivity\n\t\tlet data = this.data;\n\t\tif ( ! data || data.length < 3 * maxTriCount ) {\n\n\t\t\tdata = new Int32Array( 3 * maxTriCount );\n\n\t\t}\n\n\t\tdata.fill( - 1 );\n\n\t\t// iterate over all triangles\n\t\tlet unmatchedEdges = 0;\n\t\tlet matchedEdges = 0;\n\t\tfor ( let i = 0; i < triCount; i ++ ) {\n\n\t\t\tconst i3 = 3 * i + offset;\n\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\tlet i0 = i3 + e;\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\ti0 = indexAttr.getX( i0 );\n\n\t\t\t\t}\n\n\t\t\t\t_vertices[ e ].fromBufferAttribute( posAttr, i0 );\n\n\t\t\t}\n\n\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\tconst _vec0 = _vertices[ e ];\n\t\t\t\tconst _vec1 = _vertices[ nextE ];\n\n\t\t\t\tconst vh0 = hashVertex( _vec0 );\n\t\t\t\tconst vh1 = hashVertex( _vec1 );\n\n\t\t\t\tconst reverseHash = `${ vh1 }_${ vh0 }`;\n\t\t\t\tif ( map.has( reverseHash ) ) {\n\n\t\t\t\t\t// create a reference between the two triangles and clear the hash\n\t\t\t\t\tconst otherIndex = map.get( reverseHash );\n\t\t\t\t\tdata[ i3 + e ] = otherIndex;\n\t\t\t\t\tdata[ otherIndex ] = i3 + e;\n\t\t\t\t\tmap.delete( reverseHash );\n\t\t\t\t\tunmatchedEdges --;\n\t\t\t\t\tmatchedEdges ++;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// save the triangle and triangle edge index captured in one value\n\t\t\t\t\t// triIndex = ~ ~ ( i0 / 3 );\n\t\t\t\t\t// edgeIndex = i0 % 3;\n\t\t\t\t\tconst hash = `${ vh0 }_${ vh1 }`;\n\t\t\t\t\tmap.set( hash, i3 + e );\n\t\t\t\t\tunmatchedEdges ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.matchedEdges = matchedEdges;\n\t\tthis.unmatchedEdges = unmatchedEdges;\n\t\tthis.data = data;\n\n\t}\n\n}\n","export function areSharedArrayBuffersSupported() {\n\n\treturn typeof SharedArrayBuffer !== 'undefined';\n\n}\n\nexport function convertToSharedArrayBuffer( array ) {\n\n\tif ( array.buffer instanceof SharedArrayBuffer ) {\n\n\t\treturn array;\n\n\t}\n\n\tconst cons = array.constructor;\n\tconst buffer = array.buffer;\n\tconst sharedBuffer = new SharedArrayBuffer( buffer.byteLength );\n\n\tconst uintArray = new Uint8Array( buffer );\n\tconst sharedUintArray = new Uint8Array( sharedBuffer );\n\tsharedUintArray.set( uintArray, 0 );\n\n\treturn new cons( sharedBuffer );\n\n}\n","import { Mesh, Matrix4 } from 'three';\nimport { MeshBVH } from 'three-mesh-bvh';\nimport { HalfEdgeMap } from './HalfEdgeMap.js';\nimport { areSharedArrayBuffersSupported, convertToSharedArrayBuffer } from './utils.js';\n\nexport class Brush extends Mesh {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isBrush = true;\n\t\tthis._previousMatrix = new Matrix4();\n\t\tthis._previousMatrix.elements.fill( 0 );\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tthis._previousMatrix.copy( this.matrix );\n\n\t}\n\n\tisDirty() {\n\n\t\tconst { matrix, _previousMatrix } = this;\n\t\tconst el1 = matrix.elements;\n\t\tconst el2 = _previousMatrix.elements;\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( el1[ i ] !== el2[ i ] ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tprepareGeometry() {\n\n\t\t// generate shared array buffers\n\t\tconst geometry = this.geometry;\n\t\tconst attributes = geometry.attributes;\n\t\tif ( areSharedArrayBuffersSupported() ) {\n\n\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ key ];\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tthrow new Error( 'Brush: InterleavedBufferAttributes are not supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tattribute.array = convertToSharedArrayBuffer( attribute.array );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate bounds tree\n\t\tif ( ! geometry.boundsTree ) {\n\n\t\t\tgeometry.boundsTree = new MeshBVH( geometry, { maxLeafTris: 3 } );\n\t\t\tif ( geometry.halfEdges ) {\n\n\t\t\t\tgeometry.halfEdges.updateFrom( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate half edges\n\t\tif ( ! geometry.halfEdges ) {\n\n\t\t\tgeometry.halfEdges = new HalfEdgeMap( geometry );\n\n\t\t}\n\n\t\t// save group indices for materials\n\t\tif ( ! geometry.groupIndices ) {\n\n\t\t\tconst triCount = geometry.index.count / 3;\n\t\t\tconst array = new Uint16Array( triCount );\n\t\t\tconst groups = geometry.groups;\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tconst { start, count } = groups[ i ];\n\t\t\t\tfor ( let g = start / 3, lg = ( start + count ) / 3; g < lg; g ++ ) {\n\n\t\t\t\t\tarray[ g ] = i;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.groupIndices = array;\n\n\t\t}\n\n\t}\n\n\tdisposeCacheData() {\n\n\t\tconst { geometry } = this;\n\t\tgeometry.halfEdges = null;\n\t\tgeometry.boundsTree = null;\n\t\tgeometry.groupIndices = null;\n\n\t}\n\n}\n","export class IntersectionMap {\n\n\tconstructor() {\n\n\t\tthis.intersectionSet = {};\n\t\tthis.ids = [];\n\n\t}\n\n\tadd( id, intersectionId ) {\n\n\t\tconst { intersectionSet, ids } = this;\n\t\tif ( ! intersectionSet[ id ] ) {\n\n\t\t\tintersectionSet[ id ] = [];\n\t\t\tids.push( id );\n\n\t\t}\n\n\t\tintersectionSet[ id ].push( intersectionId );\n\n\t}\n\n}\n","export const ADDITION = 0;\nexport const SUBTRACTION = 1;\nexport const DIFFERENCE = 3;\nexport const INTERSECTION = 4;\n","import { Ray, Matrix4, DoubleSide, Vector3, Vector4, Triangle, Line3 } from 'three';\nimport { IntersectionMap } from './IntersectionMap.js';\nimport { ADDITION, SUBTRACTION, INTERSECTION, DIFFERENCE } from './constants.js';\n\nconst _ray = new Ray();\nconst _matrix = new Matrix4();\nconst _tri = new Triangle();\nconst _vec3 = new Vector3();\nconst _vec4a = new Vector4();\nconst _vec4b = new Vector4();\nconst _vec4c = new Vector4();\nconst _vec4_0 = new Vector4();\nconst _vec4_1 = new Vector4();\nconst _vec4_2 = new Vector4();\nconst _edge = new Line3();\nconst _normal = new Vector3();\nconst JITTER_EPSILON = 1e-8;\nconst OFFSET_EPSILON = 1e-15;\n\nexport const BACK_SIDE = - 1;\nexport const FRONT_SIDE = 1;\nexport const COPLANAR_OPPOSITE = - 2;\nexport const COPLANAR_ALIGNED = 2;\n\nexport const INVERT_TRI = 0;\nexport const ADD_TRI = 1;\nexport const SKIP_TRI = 2;\n\nlet _debugContext = null;\nexport function setDebugContext( debugData ) {\n\n\t_debugContext = debugData;\n\n}\n\nexport function getHitSide( tri, bvh ) {\n\n\t// random function that returns [ - 0.5, 0.5 ];\n\tfunction rand() {\n\n\t\treturn Math.random() - 0.5;\n\n\t}\n\n\t// get the ray the check the triangle for\n\ttri.getNormal( _normal );\n\t_ray.direction.copy( _normal );\n\ttri.getMidpoint( _ray.origin );\n\n\tconst total = 3;\n\tlet count = 0;\n\tlet minDistance = Infinity;\n\tfor ( let i = 0; i < total; i ++ ) {\n\n\t\t// jitter the ray slightly\n\t\t_ray.direction.x += rand() * JITTER_EPSILON;\n\t\t_ray.direction.y += rand() * JITTER_EPSILON;\n\t\t_ray.direction.z += rand() * JITTER_EPSILON;\n\n\t\t// and invert it so we can account for floating point error by checking both directions\n\t\t// to catch coplanar distances\n\t\t_ray.direction.multiplyScalar( - 1 );\n\n\t\t// check if the ray hit the backside\n\t\tconst hit = bvh.raycastFirst( _ray, DoubleSide );\n\t\tlet hitBackSide = Boolean( hit && _ray.direction.dot( hit.face.normal ) > 0 );\n\t\tif ( hitBackSide ) {\n\n\t\t\tcount ++;\n\n\t\t}\n\n\t\tif ( hit !== null ) {\n\n\t\t\tminDistance = Math.min( minDistance, hit.distance );\n\n\t\t}\n\n\t\t// if we're right up against another face then we're coplanar\n\t\tif ( minDistance <= OFFSET_EPSILON ) {\n\n\t\t\treturn hit.face.normal.dot( _normal ) > 0 ? COPLANAR_ALIGNED : COPLANAR_OPPOSITE;\n\n\t\t}\n\n\t\t// if our current casts meet our requirements then early out\n\t\tif ( count / total > 0.5 || ( i - count + 1 ) / total > 0.5 ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn count / total > 0.5 ? BACK_SIDE : FRONT_SIDE;\n\n}\n\n// returns the intersected triangles and returns objects mapping triangle indices to\n// the other triangles intersected\nexport function collectIntersectingTriangles( a, b ) {\n\n\tconst aIntersections = new IntersectionMap();\n\tconst bIntersections = new IntersectionMap();\n\n\t_matrix\n\t\t.copy( a.matrixWorld )\n\t\t.invert()\n\t\t.multiply( b.matrixWorld );\n\n\ta.geometry.boundsTree.bvhcast( b.geometry.boundsTree, _matrix, {\n\n\t\tintersectsTriangles( triangleA, triangleB, ia, ib ) {\n\n\t\t\tif ( triangleA.intersectsTriangle( triangleB, _edge, true ) ) {\n\n\t\t\t\t// if the edge distance is zero (and not from being coplanar) then exit early and don't include the\n\t\t\t\t// triangle in the set of intersecting triangles\n\t\t\t\tif ( _edge.distanceSq() === 0 && triangleA.plane.normal.dot( triangleB.plane.normal ) < 1.0 - 1e-10 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\taIntersections.add( ia, ib );\n\t\t\t\tbIntersections.add( ib, ia );\n\n\t\t\t\tif ( _debugContext ) {\n\n\t\t\t\t\t_debugContext.addEdge( _edge );\n\t\t\t\t\t_debugContext.addIntersectingTriangles( ia, triangleA, ib, triangleB );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t} );\n\n\treturn { aIntersections, bIntersections };\n\n}\n\n// Add the barycentric interpolated values fro the triangle into the new attribute data\nexport function appendAttributeFromTriangle(\n\ttriIndex,\n\tbaryCoordTri,\n\tgeometry,\n\tmatrixWorld,\n\tnormalMatrix,\n\tattributeInfo,\n\tinvert = false,\n) {\n\n\tconst attributes = geometry.attributes;\n\tconst indexAttr = geometry.index;\n\tconst i3 = triIndex * 3;\n\tconst i0 = indexAttr.getX( i3 + 0 );\n\tconst i1 = indexAttr.getX( i3 + 1 );\n\tconst i2 = indexAttr.getX( i3 + 2 );\n\n\tfor ( const key in attributeInfo ) {\n\n\t\t// check if the key we're asking for is in the geometry at all\n\t\tconst attr = attributes[ key ];\n\t\tconst arr = attributeInfo[ key ];\n\t\tif ( ! ( key in attributes ) ) {\n\n\t\t\tthrow new Error( `CSG Operations: Attribute ${ key } not available on geometry.` );\n\n\t\t}\n\n\t\t// handle normals and positions specially because they require transforming\n\t\t// TODO: handle tangents\n\t\tconst itemSize = attr.itemSize;\n\t\tif ( key === 'position' ) {\n\n\t\t\t_tri.a.fromBufferAttribute( attr, i0 ).applyMatrix4( matrixWorld );\n\t\t\t_tri.b.fromBufferAttribute( attr, i1 ).applyMatrix4( matrixWorld );\n\t\t\t_tri.c.fromBufferAttribute( attr, i2 ).applyMatrix4( matrixWorld );\n\n\t\t\tpushBarycoordInterpolatedValues( _tri.a, _tri.b, _tri.c, baryCoordTri, 3, arr, invert );\n\n\t\t} else if ( key === 'normal' ) {\n\n\t\t\t_tri.a.fromBufferAttribute( attr, i0 ).applyNormalMatrix( normalMatrix );\n\t\t\t_tri.b.fromBufferAttribute( attr, i1 ).applyNormalMatrix( normalMatrix );\n\t\t\t_tri.c.fromBufferAttribute( attr, i2 ).applyNormalMatrix( normalMatrix );\n\n\t\t\tif ( invert ) {\n\n\t\t\t\t_tri.a.multiplyScalar( - 1 );\n\t\t\t\t_tri.b.multiplyScalar( - 1 );\n\t\t\t\t_tri.c.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t\tpushBarycoordInterpolatedValues( _tri.a, _tri.b, _tri.c, baryCoordTri, 3, arr, invert, true );\n\n\t\t} else {\n\n\t\t\t_vec4a.fromBufferAttribute( attr, i0 );\n\t\t\t_vec4b.fromBufferAttribute( attr, i1 );\n\t\t\t_vec4c.fromBufferAttribute( attr, i2 );\n\n\t\t\tpushBarycoordInterpolatedValues( _vec4a, _vec4b, _vec4c, baryCoordTri, itemSize, arr, invert );\n\n\t\t}\n\n\t}\n\n}\n\n// Append all the values of the attributes for the triangle onto the new attribute arrays\nexport function appendAttributesFromIndices(\n\ti0,\n\ti1,\n\ti2,\n\tattributes,\n\tmatrixWorld,\n\tnormalMatrix,\n\tattributeInfo,\n\tinvert = false,\n) {\n\n\tappendAttributeFromIndex( i0, attributes, matrixWorld, normalMatrix, attributeInfo, invert );\n\tappendAttributeFromIndex( invert ? i2 : i1, attributes, matrixWorld, normalMatrix, attributeInfo, invert );\n\tappendAttributeFromIndex( invert ? i1 : i2, attributes, matrixWorld, normalMatrix, attributeInfo, invert );\n\n}\n\n// Returns the triangle to add when performing an operation\nexport function getOperationAction( operation, hitSide, invert = false ) {\n\n\tswitch ( operation ) {\n\n\t\tcase ADDITION:\n\n\t\t\tif ( hitSide === FRONT_SIDE || ( hitSide === COPLANAR_ALIGNED && ! invert ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase SUBTRACTION:\n\n\t\t\tif ( invert ) {\n\n\t\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\t\treturn INVERT_TRI;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( hitSide === FRONT_SIDE || hitSide === COPLANAR_OPPOSITE ) {\n\n\t\t\t\t\treturn ADD_TRI;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase DIFFERENCE:\n\n\t\t\tif ( hitSide === BACK_SIDE ) {\n\n\t\t\t\treturn INVERT_TRI;\n\n\t\t\t} else if ( hitSide === FRONT_SIDE ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase INTERSECTION:\n\t\t\tif ( hitSide === BACK_SIDE || ( hitSide === COPLANAR_ALIGNED && ! invert ) ) {\n\n\t\t\t\treturn ADD_TRI;\n\n\t\t\t}\n\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error( `Unrecognized CSG operation enum \"${ operation }\".` );\n\n\t}\n\n\treturn SKIP_TRI;\n\n}\n\n// takes a set of barycentric values in the form of a triangle, a set of vectors, number of components,\n// and whether to invert the result and pushes the new values onto the provided attribute array\nfunction pushBarycoordInterpolatedValues( v0, v1, v2, baryCoordTri, itemSize, attrArr, invert = false, normalize = false ) {\n\n\t// adds the appropriate number of values for the vector onto the array\n\tconst addValues = v => {\n\n\t\tattrArr.push( v.x );\n\t\tif ( itemSize > 1 ) attrArr.push( v.y );\n\t\tif ( itemSize > 2 ) attrArr.push( v.z );\n\t\tif ( itemSize > 3 ) attrArr.push( v.w );\n\n\t};\n\n\t// barycentric interpolate the first component\n\t_vec4_0.set( 0, 0, 0, 0 )\n\t\t.addScaledVector( v0, baryCoordTri.a.x )\n\t\t.addScaledVector( v1, baryCoordTri.a.y )\n\t\t.addScaledVector( v2, baryCoordTri.a.z );\n\n\t_vec4_1.set( 0, 0, 0, 0 )\n\t\t.addScaledVector( v0, baryCoordTri.b.x )\n\t\t.addScaledVector( v1, baryCoordTri.b.y )\n\t\t.addScaledVector( v2, baryCoordTri.b.z );\n\n\t_vec4_2.set( 0, 0, 0, 0 )\n\t\t.addScaledVector( v0, baryCoordTri.c.x )\n\t\t.addScaledVector( v1, baryCoordTri.c.y )\n\t\t.addScaledVector( v2, baryCoordTri.c.z );\n\n\tif ( normalize ) {\n\n\t\t_vec4_0.normalize();\n\t\t_vec4_1.normalize();\n\t\t_vec4_2.normalize();\n\n\t}\n\n\t// if the face is inverted then add the values in an inverted order\n\taddValues( _vec4_0 );\n\n\tif ( invert ) {\n\n\t\taddValues( _vec4_2 );\n\t\taddValues( _vec4_1 );\n\n\t} else {\n\n\t\taddValues( _vec4_1 );\n\t\taddValues( _vec4_2 );\n\n\t}\n\n}\n\n// Adds the values for the given vertex index onto the new attribute arrays\nfunction appendAttributeFromIndex(\n\tindex,\n\tattributes,\n\tmatrixWorld,\n\tnormalMatrix,\n\tattributeInfo,\n\tinvert = false,\n) {\n\n\tfor ( const key in attributeInfo ) {\n\n\t\t// check if the key we're asking for is in the geometry at all\n\t\tconst attr = attributes[ key ];\n\t\tconst arr = attributeInfo[ key ];\n\t\tif ( ! ( key in attributes ) ) {\n\n\t\t\tthrow new Error( `CSG Operations: Attribute ${ key } no available on geometry.` );\n\n\t\t}\n\n\t\t// specially handle the position and normal attributes because they require transforms\n\t\t// TODO: handle tangents\n\t\tconst itemSize = attr.itemSize;\n\t\tif ( key === 'position' ) {\n\n\t\t\t_vec3.fromBufferAttribute( attr, index ).applyMatrix4( matrixWorld );\n\t\t\tarr.push( _vec3.x, _vec3.y, _vec3.z );\n\n\t\t} else if ( key === 'normal' ) {\n\n\t\t\t_vec3.fromBufferAttribute( attr, index ).applyNormalMatrix( normalMatrix );\n\t\t\tif ( invert ) {\n\n\t\t\t\t_vec3.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t\tarr.push( _vec3.x, _vec3.y, _vec3.z );\n\n\t\t} else {\n\n\t\t\tarr.push( attr.getX( index ) );\n\t\t\tif ( itemSize > 1 ) arr.push( attr.getY( index ) );\n\t\t\tif ( itemSize > 2 ) arr.push( attr.getZ( index ) );\n\t\t\tif ( itemSize > 3 ) arr.push( attr.getW( index ) );\n\n\t\t}\n\n\t}\n\n}\n","import { Triangle, Line3, Vector3, Plane } from 'three';\nimport { ExtendedTriangle } from 'three-mesh-bvh';\nimport { BACK_SIDE, FRONT_SIDE } from './operationsUtils.js';\n\nconst EPSILON = 1e-14;\nconst COPLANAR_EPSILON = 1e-10;\nconst _edge = new Line3();\nconst _foundEdge = new Line3();\nconst _vec = new Vector3();\nconst _planeNormal = new Vector3();\nconst _plane = new Plane();\nconst _exTriangle = new ExtendedTriangle();\n\nexport function isTriDegenerate( tri ) {\n\n\treturn tri.a.distanceToSquared( tri.b ) < EPSILON ||\n\t\ttri.a.distanceToSquared( tri.c ) < EPSILON ||\n\t\ttri.b.distanceToSquared( tri.c ) < EPSILON;\n\n}\n\n// A pool of triangles to avoid unnecessary triangle creation\nclass TrianglePool {\n\n\tconstructor() {\n\n\t\tthis._pool = [];\n\t\tthis._index = 0;\n\n\t}\n\n\tgetTriangle() {\n\n\t\tif ( this._index >= this._pool.length ) {\n\n\t\t\tthis._pool.push( new Triangle() );\n\n\t\t}\n\n\t\treturn this._pool[ this._index ++ ];\n\n\t}\n\n\tclear() {\n\n\t\tthis._index = 0;\n\n\t}\n\n\treset() {\n\n\t\tthis._pool.length = 0;\n\t\tthis._index = 0;\n\n\t}\n\n}\n\n// Utility class for splitting triangles\nexport class TriangleSplitter {\n\n\tconstructor() {\n\n\t\tthis.trianglePool = new TrianglePool();\n\t\tthis.triangles = [];\n\t\tthis.normal = new Vector3();\n\n\t}\n\n\t// initialize the class with a triangle\n\tinitialize( tri ) {\n\n\t\tconst { triangles, trianglePool, normal } = this;\n\t\ttriangles.length = 0;\n\t\ttrianglePool.clear();\n\n\t\tif ( Array.isArray( tri ) ) {\n\n\t\t\tfor ( let i = 0, l = tri.length; i < l; i ++ ) {\n\n\t\t\t\tconst t = tri[ i ];\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tt.getNormal( normal );\n\n\t\t\t\t} else if ( Math.abs( 1.0 - t.getNormal( _vec ).dot( normal ) ) > EPSILON ) {\n\n\t\t\t\t\tthrow new Error( 'Triangle Splitter: Cannot initialize with triangles that have different normals.' );\n\n\t\t\t\t}\n\n\t\t\t\tconst poolTri = trianglePool.getTriangle();\n\t\t\t\tpoolTri.copy( t );\n\t\t\t\ttriangles.push( poolTri );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\ttri.getNormal( normal );\n\n\t\t\tconst poolTri = trianglePool.getTriangle();\n\t\t\tpoolTri.copy( tri );\n\t\t\ttriangles.push( poolTri );\n\n\t\t}\n\n\t}\n\n\t// Split the current set of triangles by passing a single triangle in. If the triangle is\n\t// coplanar it will attempt to split by the triangle edge planes\n\tsplitByTriangle( triangle ) {\n\n\t\tconst { normal, triangles } = this;\n\t\ttriangle.getPlane( _plane );\n\n\t\tif ( Math.abs( 1.0 - Math.abs( _plane.normal.dot( normal ) ) ) < COPLANAR_EPSILON ) {\n\n\t\t\t// if the triangle is coplanar then split by the edge planes\n\t\t\tconst arr = [ triangle.a, triangle.b, triangle.c ];\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst nexti = ( i + 1 ) % 3;\n\n\t\t\t\tconst v0 = arr[ i ];\n\t\t\t\tconst v1 = arr[ nexti ];\n\n\t\t\t\t_vec.subVectors( v1, v0 ).normalize();\n\t\t\t\t_planeNormal.crossVectors( normal, _vec );\n\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _planeNormal, v0 );\n\n\t\t\t\tthis.splitByPlane( _plane, triangle, i );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\t\tconst t = triangles[ i ];\n\t\t\t\tt.coplanarCount = 0;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// otherwise split by the triangle plane\n\t\t\tthis.splitByPlane( _plane, triangle );\n\n\t\t}\n\n\t}\n\n\t// Split the triangles by the given plan. If a triangle is provided then we ensure we\n\t// intersect the triangle before splitting the plane\n\tsplitByPlane( plane, triangle = null, coplanarIndex = - 1 ) {\n\n\t\tconst { triangles, trianglePool } = this;\n\n\t\t// init our triangle to check for intersection\n\t\tlet splittingTriangle = null;\n\t\tif ( triangle !== null ) {\n\n\t\t\tsplittingTriangle = _exTriangle;\n\t\t\tsplittingTriangle.copy( triangle );\n\t\t\tsplittingTriangle.needsUpdate = true;\n\n\t\t}\n\n\t\t// try to split every triangle in the class\n\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\tconst tri = triangles[ i ];\n\t\t\tconst { a, b, c } = tri;\n\n\t\t\t// skip the triangle if we don't intersect with it\n\t\t\tif ( splittingTriangle ) {\n\n\t\t\t\tif ( ! splittingTriangle.intersectsTriangle( tri, _edge, true ) ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet intersects = 0;\n\t\t\tlet vertexSplitEnd = - 1;\n\t\t\tlet positiveSide = 0;\n\t\t\tlet coplanarEdge = false;\n\t\t\tconst arr = [ a, b, c ];\n\t\t\tfor ( let t = 0; t < 3; t ++ ) {\n\n\t\t\t\t// get the triangle edge\n\t\t\t\tconst tNext = ( t + 1 ) % 3;\n\t\t\t\t_edge.start.copy( arr[ t ] );\n\t\t\t\t_edge.end.copy( arr[ tNext ] );\n\n\t\t\t\t// track if the start point sits on the plane or if it's on the positive side of it\n\t\t\t\t// so we can use that information to determine whether to split later.\n\t\t\t\tconst startDist = plane.distanceToPoint( _edge.start );\n\t\t\t\tconst endDist = plane.distanceToPoint( _edge.end );\n\t\t\t\tif ( Math.abs( startDist ) < COPLANAR_EPSILON && Math.abs( endDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\tcoplanarEdge = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// we only don't consider this an intersection if the start points hits the plane\n\t\t\t\tif ( Math.abs( startDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tif ( startDist > 0 ) {\n\n\t\t\t\t\tpositiveSide ++;\n\n\t\t\t\t}\n\n\t\t\t\t// double check the end point since the \"intersectLine\" function sometimes does not\n\t\t\t\t// return it as an intersection (see issue #28)\n\t\t\t\t// Because we ignore the start point intersection above we have to make sure we check the end\n\t\t\t\t// point intersection here.\n\t\t\t\tlet didIntersect = ! ! plane.intersectLine( _edge, _vec );\n\t\t\t\tif ( ! didIntersect && Math.abs( endDist ) < COPLANAR_EPSILON ) {\n\n\t\t\t\t\t_vec.copy( _edge.end );\n\t\t\t\t\tdidIntersect = true;\n\n\t\t\t\t}\n\n\t\t\t\t// check if we intersect the plane (ignoring the start point so we don't double count)\n\t\t\t\tif ( didIntersect && ! ( _vec.distanceTo( _edge.start ) < EPSILON ) ) {\n\n\t\t\t\t\t// if we intersect at the end point then we track that point as one that we\n\t\t\t\t\t// have to split down the middle\n\t\t\t\t\tif ( _vec.distanceTo( _edge.end ) < EPSILON ) {\n\n\t\t\t\t\t\tvertexSplitEnd = t;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// track the split edge\n\t\t\t\t\tif ( intersects === 0 ) {\n\n\t\t\t\t\t\t_foundEdge.start.copy( _vec );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_foundEdge.end.copy( _vec );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersects ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( coplanarEdge ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// skip splitting if:\n\t\t\t// - we have two points on the plane then the plane intersects the triangle exactly on an edge\n\t\t\t// - the plane does not intersect on 2 points\n\t\t\t// - the intersection edge is too small\n\t\t\tif ( intersects === 2 && _foundEdge.distance() > COPLANAR_EPSILON ) {\n\n\t\t\t\tif ( vertexSplitEnd !== - 1 ) {\n\n\t\t\t\t\tvertexSplitEnd = ( vertexSplitEnd + 1 ) % 3;\n\n\t\t\t\t\t// we're splitting along a vertex\n\t\t\t\t\tlet otherVert1 = 0;\n\t\t\t\t\tif ( otherVert1 === vertexSplitEnd ) otherVert1 = ( otherVert1 + 1 ) % 3;\n\n\t\t\t\t\tlet otherVert2 = otherVert1 + 1;\n\t\t\t\t\tif ( otherVert2 === vertexSplitEnd ) otherVert2 = ( otherVert2 + 1 ) % 3;\n\n\t\t\t\t\tconst nextTri = trianglePool.getTriangle();\n\t\t\t\t\tnextTri.a.copy( arr[ otherVert2 ] );\n\t\t\t\t\tnextTri.b.copy( _foundEdge.end );\n\t\t\t\t\tnextTri.c.copy( _foundEdge.start );\n\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.a.copy( arr[ otherVert1 ] );\n\t\t\t\t\ttri.b.copy( _foundEdge.start );\n\t\t\t\t\ttri.c.copy( _foundEdge.end );\n\n\t\t\t\t\tif ( isTriDegenerate( tri ) ) {\n\n\t\t\t\t\t\ttriangles.splice( i, 1 );\n\t\t\t\t\t\ti --;\n\t\t\t\t\t\tl --;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// we're splitting with a quad and a triangle\n\t\t\t\t\tconst singleVert = arr.findIndex( v => {\n\n\t\t\t\t\t\tif ( positiveSide >= 2 ) {\n\n\t\t\t\t\t\t\treturn plane.distanceToPoint( v ) < 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\treturn plane.distanceToPoint( v ) > 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( singleVert === 0 ) {\n\n\t\t\t\t\t\tlet tmp = _foundEdge.start;\n\t\t\t\t\t\t_foundEdge.start = _foundEdge.end;\n\t\t\t\t\t\t_foundEdge.end = tmp;\n\n\t\t\t\t\t} else if ( singleVert === - 1 ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst nextVert1 = ( singleVert + 1 ) % 3;\n\t\t\t\t\tconst nextVert2 = ( singleVert + 2 ) % 3;\n\n\t\t\t\t\tconst nextTri1 = trianglePool.getTriangle();\n\t\t\t\t\tconst nextTri2 = trianglePool.getTriangle();\n\n\t\t\t\t\t// choose the triangle that has the larger areas (shortest split distance)\n\t\t\t\t\tif ( arr[ nextVert1 ].distanceToSquared( _foundEdge.start ) < arr[ nextVert2 ].distanceToSquared( _foundEdge.end ) ) {\n\n\t\t\t\t\t\tnextTri1.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri1.b.copy( _foundEdge.start );\n\t\t\t\t\t\tnextTri1.c.copy( _foundEdge.end );\n\n\t\t\t\t\t\tnextTri2.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri2.b.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri2.c.copy( _foundEdge.start );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnextTri1.a.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri1.b.copy( _foundEdge.start );\n\t\t\t\t\t\tnextTri1.c.copy( _foundEdge.end );\n\n\t\t\t\t\t\tnextTri2.a.copy( arr[ nextVert1 ] );\n\t\t\t\t\t\tnextTri2.b.copy( arr[ nextVert2 ] );\n\t\t\t\t\t\tnextTri2.c.copy( _foundEdge.end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.a.copy( arr[ singleVert ] );\n\t\t\t\t\ttri.b.copy( _foundEdge.end );\n\t\t\t\t\ttri.c.copy( _foundEdge.start );\n\n\t\t\t\t\t// don't add degenerate triangles to the list\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri1 ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! isTriDegenerate( nextTri2 ) ) {\n\n\t\t\t\t\t\ttriangles.push( nextTri2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isTriDegenerate( tri ) ) {\n\n\t\t\t\t\t\ttriangles.splice( i, 1 );\n\t\t\t\t\t\ti --;\n\t\t\t\t\t\tl --;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( intersects === 3 ) {\n\n\t\t\t\tconsole.warn( 'TriangleClipper: Coplanar clip not handled' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treset() {\n\n\t\tthis.triangles.length = 0;\n\n\t}\n\n}\n","import { areSharedArrayBuffersSupported } from './utils.js';\n\n// Make a new array wrapper class that more easily affords expansion when reaching it's max capacity\nexport class TypeBackedArray {\n\n\tconstructor( type, initialSize = 500 ) {\n\n\t\tconst bufferType = areSharedArrayBuffersSupported() ? SharedArrayBuffer : ArrayBuffer;\n\n\t\tthis.expansionFactor = 1.5;\n\t\tthis.type = type;\n\t\tthis.array = new type( new bufferType( initialSize * type.BYTES_PER_ELEMENT ) );\n\t\tthis.length = 0;\n\n\t}\n\n\texpand( size = null ) {\n\n\t\tconst { type, array, expansionFactor } = this;\n\n\t\tif ( size === null ) {\n\n\t\t\tsize = ~ ~ ( array.length * expansionFactor );\n\n\t\t}\n\n\t\tconst newArray = new type( size );\n\t\tnewArray.set( array, 0 );\n\t\tthis.array = newArray;\n\n\t}\n\n\tpush( ...args ) {\n\n\t\tlet { array, length } = this;\n\t\tif ( length + args.length > array.length ) {\n\n\t\t\tthis.expand();\n\t\t\tarray = this.array;\n\n\t\t}\n\n\t\tfor ( let i = 0, l = args.length; i < l; i ++ ) {\n\n\t\t\tarray[ length + i ] = args[ i ];\n\n\t\t}\n\n\t\tthis.length += args.length;\n\n\t}\n\n\tclear() {\n\n\t\tthis.length = 0;\n\n\t}\n\n}\n","import { TypeBackedArray } from './TypeBackedArray.js';\n\n// utility class for for tracking attribute data in type-backed arrays\nexport class TypedAttributeData {\n\n\tconstructor() {\n\n\t\tthis.groupAttributes = [ {} ];\n\t\tthis.groupCount = 0;\n\n\t}\n\n\tgetType( name ) {\n\n\t\treturn this.groupAttributes[ 0 ][ name ].type;\n\n\t}\n\n\tgetTotalLength( name ) {\n\n\t\tconst { groupCount, groupAttributes } = this;\n\n\t\tlet length = 0;\n\t\tfor ( let i = 0; i < groupCount; i ++ ) {\n\n\t\t\tconst attrSet = groupAttributes[ i ];\n\t\t\tlength += attrSet[ name ].length;\n\n\t\t}\n\n\t\treturn length;\n\n\t}\n\n\tgetGroupSet( index = 0 ) {\n\n\t\t// throw an error if we've never\n\t\tconst { groupAttributes } = this;\n\t\tif ( groupAttributes[ index ] ) {\n\n\t\t\tthis.groupCount = Math.max( this.groupCount, index + 1 );\n\t\t\treturn groupAttributes[ index ];\n\n\t\t}\n\n\t\t// add any new group sets required\n\t\tconst rootAttrSet = groupAttributes[ 0 ];\n\t\tthis.groupCount = Math.max( this.groupCount, index + 1 );\n\t\twhile ( index >= groupAttributes.length ) {\n\n\t\t\tconst newAttrSet = {};\n\t\t\tgroupAttributes.push( newAttrSet );\n\t\t\tfor ( const key in rootAttrSet ) {\n\n\t\t\t\tnewAttrSet[ key ] = new TypeBackedArray( rootAttrSet[ key ].type );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn groupAttributes[ index ];\n\n\t}\n\n\tgetGroupArray( name, index = 0 ) {\n\n\t\t// throw an error if we've never\n\t\tconst { groupAttributes } = this;\n\t\tconst rootAttrSet = groupAttributes[ 0 ];\n\t\tconst referenceAttr = rootAttrSet[ name ];\n\t\tif ( ! referenceAttr ) {\n\n\t\t\tthrow new Error( `TypedAttributeData: Attribute with \"${ name }\" has not been initialized` );\n\n\t\t}\n\n\t\treturn this.getGroupSet( index )[ name ];\n\n\t}\n\n\t// initializes an attribute array with the given name, type, and size\n\tinitializeArray( name, type ) {\n\n\t\tconst { groupAttributes } = this;\n\t\tconst rootSet = groupAttributes[ 0 ];\n\t\tconst referenceAttr = rootSet[ name ];\n\t\tif ( referenceAttr ) {\n\n\t\t\tif ( referenceAttr.type !== type ) {\n\n\t\t\t\tthrow new Error( `TypedAttributeData: Array ${ name } already initialized with a different type.` );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = groupAttributes.length; i < l; i ++ ) {\n\n\t\t\t\tgroupAttributes[ i ][ name ] = new TypeBackedArray( type );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclear() {\n\n\t\tthis.groupCount = 0;\n\n\t\tconst { groupAttributes } = this;\n\t\tgroupAttributes.forEach( attrSet => {\n\n\t\t\tfor ( const key in attrSet ) {\n\n\t\t\t\tattrSet[ key ].clear();\n\n\t\t\t}\n\n\n\t\t} );\n\n\t}\n\n\tdelete( key ) {\n\n\t\tthis.groupAttributes.forEach( attrSet => {\n\n\t\t\tdelete attrSet[ key ];\n\n\t\t} );\n\n\t}\n\n\treset() {\n\n\t\tthis.groupAttributes = [];\n\n\t}\n\n}\n","import { Triangle } from 'three';\n\nclass TriangleIntersectData {\n\n\tconstructor( tri ) {\n\n\t\tthis.triangle = new Triangle().copy( tri );\n\t\tthis.intersects = {};\n\n\t}\n\n\taddTriangle( index, tri ) {\n\n\t\tthis.intersects[ index ] = new Triangle().copy( tri );\n\n\t}\n\n\tgetIntersectArray() {\n\n\t\tconst array = [];\n\t\tconst { intersects } = this;\n\t\tfor ( const key in intersects ) {\n\n\t\t\tarray.push( intersects[ key ] );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n}\n\nclass TriangleIntersectionSets {\n\n\tconstructor() {\n\n\t\tthis.data = {};\n\n\t}\n\n\taddTriangleIntersection( ia, triA, ib, triB ) {\n\n\t\tconst { data } = this;\n\t\tif ( ! data[ ia ] ) {\n\n\t\t\tdata[ ia ] = new TriangleIntersectData( triA );\n\n\t\t}\n\n\t\tdata[ ia ].addTriangle( ib, triB );\n\n\t}\n\n\tgetTrianglesAsArray( id = null ) {\n\n\t\tconst { data } = this;\n\t\tconst arr = [];\n\n\t\tif ( id !== null ) {\n\n\t\t\tif ( id in data ) {\n\n\t\t\t\tarr.push( data[ id ].triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( const key in data ) {\n\n\t\t\t\tarr.push( data[ key ].triangle );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn arr;\n\n\t}\n\n\tgetTriangleIndices() {\n\n\t\treturn Object.keys( this.data ).map( i => parseInt( i ) );\n\n\t}\n\n\tgetIntersectionIndices( id ) {\n\n\t\tconst { data } = this;\n\t\tif ( ! data[ id ] ) {\n\n\t\t\treturn [];\n\n\t\t} else {\n\n\t\t\treturn Object.keys( data[ id ].intersects ).map( i => parseInt( i ) );\n\n\n\t\t}\n\n\t}\n\n\tgetIntersectionsAsArray( id = null, id2 = null ) {\n\n\t\tconst { data } = this;\n\t\tconst triSet = new Set();\n\t\tconst arr = [];\n\n\t\tconst addTriangles = key => {\n\n\t\t\tif ( ! data[ key ] ) return;\n\n\t\t\tif ( id2 !== null ) {\n\n\t\t\t\tif ( data[ key ].intersects[ id2 ] ) {\n\n\t\t\t\t\tarr.push( data[ key ].intersects[ id2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst intersects = data[ key ].intersects;\n\t\t\t\tfor ( const key2 in intersects ) {\n\n\t\t\t\t\tif ( ! triSet.has( key2 ) ) {\n\n\t\t\t\t\t\ttriSet.add( key2 );\n\t\t\t\t\t\tarr.push( intersects[ key2 ] );\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\tif ( id !== null ) {\n\n\t\t\taddTriangles( id );\n\n\t\t} else {\n\n\t\t\tfor ( const key in data ) {\n\n\t\t\t\taddTriangles( key );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn arr;\n\n\t}\n\n\treset() {\n\n\t\tthis.data = {};\n\n\t}\n\n}\n\nexport class OperationDebugData {\n\n\tconstructor() {\n\n\t\tthis.enabled = false;\n\t\tthis.triangleIntersectsA = new TriangleIntersectionSets();\n\t\tthis.triangleIntersectsB = new TriangleIntersectionSets();\n\t\tthis.intersectionEdges = [];\n\n\t}\n\n\taddIntersectingTriangles( ia, triA, ib, triB ) {\n\n\t\tconst { triangleIntersectsA, triangleIntersectsB } = this;\n\t\ttriangleIntersectsA.addTriangleIntersection( ia, triA, ib, triB );\n\t\ttriangleIntersectsB.addTriangleIntersection( ib, triB, ia, triA );\n\n\t}\n\n\taddEdge( edge ) {\n\n\t\tthis.intersectionEdges.push( edge.clone() );\n\n\t}\n\n\treset() {\n\n\t\tthis.triangleIntersectsA.reset();\n\t\tthis.triangleIntersectsB.reset();\n\t\tthis.intersectionEdges = [];\n\n\t}\n\n}\n","import { Matrix4, Matrix3, Triangle } from 'three';\nimport {\n\tgetHitSide,\n\tcollectIntersectingTriangles,\n\tappendAttributeFromTriangle,\n\tappendAttributesFromIndices,\n\tgetOperationAction,\n\tSKIP_TRI, INVERT_TRI,\n} from './operationsUtils.js';\n\nconst _matrix = new Matrix4();\nconst _normalMatrix = new Matrix3();\nconst _triA = new Triangle();\nconst _triB = new Triangle();\nconst _tri = new Triangle();\nconst _barycoordTri = new Triangle();\n\nfunction getFirstIdFromSet( set ) {\n\n\tfor ( const id of set ) return id;\n\n}\n\n// runs the given operation against a and b using the splitter and appending data to the\n// typedAttributeData object.\nexport function performOperation( a, b, operation, splitter, typedAttributeData, options ) {\n\n\tconst { useGroups = true } = options;\n\tconst { aIntersections, bIntersections } = collectIntersectingTriangles( a, b );\n\n\tconst resultGroups = [];\n\tlet resultMaterials = null;\n\n\tlet groupOffset;\n\tgroupOffset = useGroups ? 0 : - 1;\n\tperformWholeTriangleOperations( a, b, aIntersections, operation, false, typedAttributeData, groupOffset );\n\tperformSplitTriangleOperations( a, b, aIntersections, operation, false, splitter, typedAttributeData, groupOffset );\n\n\tgroupOffset = useGroups ? a.geometry.groups.length || 1 : - 1;\n\tperformWholeTriangleOperations( b, a, bIntersections, operation, true, typedAttributeData, groupOffset );\n\tperformSplitTriangleOperations( b, a, bIntersections, operation, true, splitter, typedAttributeData, groupOffset );\n\n\treturn {\n\t\tgroups: resultGroups,\n\t\tmaterials: resultMaterials\n\t};\n\n}\n\n// perform triangle splitting and CSG operations on the set of split triangles\nfunction performSplitTriangleOperations( a, b, intersectionMap, operation, invert, splitter, attributeInfo, groupOffset = 0 ) {\n\n\tconst invertedGeometry = a.matrixWorld.determinant() < 0;\n\n\t// transforms into the local frame of matrix b\n\t_matrix\n\t\t.copy( b.matrixWorld )\n\t\t.invert()\n\t\t.multiply( a.matrixWorld );\n\n\t_normalMatrix\n\t\t.getNormalMatrix( a.matrixWorld )\n\t\t.multiplyScalar( invertedGeometry ? - 1 : 1 );\n\n\tconst groupIndices = a.geometry.groupIndices;\n\tconst aIndex = a.geometry.index;\n\tconst aPosition = a.geometry.attributes.position;\n\n\tconst bBVH = b.geometry.boundsTree;\n\tconst bIndex = b.geometry.index;\n\tconst bPosition = b.geometry.attributes.position;\n\tconst splitIds = intersectionMap.ids;\n\tconst intersectionSet = intersectionMap.intersectionSet;\n\n\t// iterate over all split triangle indices\n\tfor ( let i = 0, l = splitIds.length; i < l; i ++ ) {\n\n\t\tconst ia = splitIds[ i ];\n\t\tconst groupIndex = groupOffset === - 1 ? 0 : groupIndices[ ia ] + groupOffset;\n\t\tconst attrSet = attributeInfo.getGroupSet( groupIndex );\n\n\t\t// get the triangle in the geometry B local frame\n\t\tconst ia3 = 3 * ia;\n\t\tconst ia0 = aIndex.getX( ia3 + 0 );\n\t\tconst ia1 = aIndex.getX( ia3 + 1 );\n\t\tconst ia2 = aIndex.getX( ia3 + 2 );\n\t\t_triA.a.fromBufferAttribute( aPosition, ia0 ).applyMatrix4( _matrix );\n\t\t_triA.b.fromBufferAttribute( aPosition, ia1 ).applyMatrix4( _matrix );\n\t\t_triA.c.fromBufferAttribute( aPosition, ia2 ).applyMatrix4( _matrix );\n\n\t\t// initialize the splitter with the triangle from geometry A\n\t\tsplitter.initialize( _triA );\n\n\t\t// split the triangle with the intersecting triangles from B\n\t\tconst intersectingIndices = intersectionSet[ ia ];\n\t\tfor ( let ib = 0, l = intersectingIndices.length; ib < l; ib ++ ) {\n\n\t\t\tconst ib3 = 3 * intersectingIndices[ ib ];\n\t\t\tconst ib0 = bIndex.getX( ib3 + 0 );\n\t\t\tconst ib1 = bIndex.getX( ib3 + 1 );\n\t\t\tconst ib2 = bIndex.getX( ib3 + 2 );\n\t\t\t_triB.a.fromBufferAttribute( bPosition, ib0 );\n\t\t\t_triB.b.fromBufferAttribute( bPosition, ib1 );\n\t\t\t_triB.c.fromBufferAttribute( bPosition, ib2 );\n\t\t\tsplitter.splitByTriangle( _triB );\n\n\t\t}\n\n\t\t// for all triangles in the split result\n\t\tconst triangles = splitter.triangles;\n\t\tfor ( let ib = 0, l = triangles.length; ib < l; ib ++ ) {\n\n\t\t\t// get the barycentric coordinates of the clipped triangle to add\n\t\t\tconst clippedTri = triangles[ ib ];\n\n\t\t\t// try to use the side derived from the clipping but if it turns out to be\n\t\t\t// uncertain then fall back to the raycasting approach\n\t\t\tconst hitSide = getHitSide( clippedTri, bBVH );\n\t\t\tconst action = getOperationAction( operation, hitSide, invert );\n\t\t\tif ( action !== SKIP_TRI ) {\n\n\t\t\t\t_triA.getBarycoord( clippedTri.a, _barycoordTri.a );\n\t\t\t\t_triA.getBarycoord( clippedTri.b, _barycoordTri.b );\n\t\t\t\t_triA.getBarycoord( clippedTri.c, _barycoordTri.c );\n\n\t\t\t\tconst invertTri = action === INVERT_TRI;\n\t\t\t\tappendAttributeFromTriangle( ia, _barycoordTri, a.geometry, a.matrixWorld, _normalMatrix, attrSet, invertedGeometry !== invertTri );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn splitIds.length;\n\n}\n\n// perform CSG operations on the set of whole triangles using a half edge structure\n// at the moment this isn't always faster due to overhead of building the half edge structure\n// and degraded connectivity due to split triangles.\n\nfunction performWholeTriangleOperations( a, b, splitTriSet, operation, invert, attributeInfo, groupOffset = 0 ) {\n\n\tconst invertedGeometry = a.matrixWorld.determinant() < 0;\n\n\t// matrix for transforming into the local frame of geometry b\n\t_matrix\n\t\t.copy( b.matrixWorld )\n\t\t.invert()\n\t\t.multiply( a.matrixWorld );\n\n\t_normalMatrix\n\t\t.getNormalMatrix( a.matrixWorld )\n\t\t.multiplyScalar( invertedGeometry ? - 1 : 1 );\n\n\tconst bBVH = b.geometry.boundsTree;\n\tconst groupIndices = a.geometry.groupIndices;\n\tconst aIndex = a.geometry.index;\n\tconst aAttributes = a.geometry.attributes;\n\tconst aPosition = aAttributes.position;\n\n\tconst stack = [];\n\tconst halfEdges = a.geometry.halfEdges;\n\tconst traverseSet = new Set();\n\tfor ( let i = 0, l = aIndex.count / 3; i < l; i ++ ) {\n\n\t\tif ( ! ( i in splitTriSet.intersectionSet ) ) {\n\n\t\t\ttraverseSet.add( i );\n\n\t\t}\n\n\t}\n\n\twhile ( traverseSet.size > 0 ) {\n\n\t\tconst id = getFirstIdFromSet( traverseSet );\n\t\ttraverseSet.delete( id );\n\n\t\tstack.push( id );\n\n\t\t// get the vertex indices\n\t\tconst i3 = 3 * id;\n\t\tconst i0 = aIndex.getX( i3 + 0 );\n\t\tconst i1 = aIndex.getX( i3 + 1 );\n\t\tconst i2 = aIndex.getX( i3 + 2 );\n\n\t\t// get the vertex position in the frame of geometry b so we can\n\t\t// perform hit testing\n\t\t_tri.a.fromBufferAttribute( aPosition, i0 ).applyMatrix4( _matrix );\n\t\t_tri.b.fromBufferAttribute( aPosition, i1 ).applyMatrix4( _matrix );\n\t\t_tri.c.fromBufferAttribute( aPosition, i2 ).applyMatrix4( _matrix );\n\n\t\t// get the side and decide if we need to cull the triangle based on the operation\n\t\tconst hitSide = getHitSide( _tri, bBVH );\n\t\tconst action = getOperationAction( operation, hitSide, invert );\n\n\t\twhile ( stack.length > 0 ) {\n\n\t\t\tconst currId = stack.pop();\n\t\t\tconst groupIndex = groupOffset === - 1 ? 0 : groupIndices[ currId ] + groupOffset;\n\t\t\tconst attrSet = attributeInfo.getGroupSet( groupIndex );\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tconst sid = halfEdges.getSiblingTriangleIndex( currId, i );\n\t\t\t\tif ( sid !== - 1 && traverseSet.has( sid ) ) {\n\n\t\t\t\t\tstack.push( sid );\n\t\t\t\t\ttraverseSet.delete( sid );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( action === SKIP_TRI ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst i3 = 3 * currId;\n\t\t\tconst i0 = aIndex.getX( i3 + 0 );\n\t\t\tconst i1 = aIndex.getX( i3 + 1 );\n\t\t\tconst i2 = aIndex.getX( i3 + 2 );\n\t\t\tconst invertTri = action === INVERT_TRI;\n\t\t\tappendAttributesFromIndices( i0, i1, i2, aAttributes, a.matrixWorld, _normalMatrix, attrSet, invertTri !== invertedGeometry );\n\n\t\t}\n\n\t}\n\n}\n\n","import { BufferAttribute } from 'three';\nimport { TriangleSplitter } from './TriangleSplitter.js';\nimport { TypedAttributeData } from './TypedAttributeData.js';\nimport { OperationDebugData } from './OperationDebugData.js';\nimport { performOperation } from './operations.js';\nimport { setDebugContext } from './operationsUtils.js';\nimport { Brush } from './Brush.js';\n\n// applies the given set of attribute data to the provided geometry. If the attributes are\n// not large enough to hold the new set of data then new attributes will be created. Otherwise\n// the existing attributes will be used and draw range updated to accommodate the new size.\nfunction applyToGeometry( geometry, referenceGeometry, groups, attributeInfo ) {\n\n\tlet needsDisposal = false;\n\tlet drawRange = - 1;\n\tconst groupCount = attributeInfo.groupCount;\n\n\t// set the data\n\tconst attributes = geometry.attributes;\n\tconst rootAttrSet = attributeInfo.groupAttributes[ 0 ];\n\tfor ( const key in rootAttrSet ) {\n\n\t\tconst requiredLength = attributeInfo.getTotalLength( key, groupCount );\n\t\tconst type = rootAttrSet[ key ].type;\n\t\tlet attr = attributes[ key ];\n\t\tif ( ! attr || attr.array.length < requiredLength ) {\n\n\t\t\t// create the attribute if it doesn't exist yet\n\t\t\tconst refAttr = referenceGeometry.attributes[ key ];\n\t\t\tattr = new BufferAttribute( new type( requiredLength ), refAttr.itemSize, refAttr.normalized );\n\t\t\tgeometry.setAttribute( key, attr );\n\t\t\tneedsDisposal = true;\n\n\t\t}\n\n\t\tlet offset = 0;\n\t\tfor ( let i = 0; i < groupCount; i ++ ) {\n\n\t\t\tconst { array, type, length } = attributeInfo.groupAttributes[ i ][ key ];\n\t\t\tconst trimmedArray = new type( array.buffer, 0, length );\n\t\t\tattr.array.set( trimmedArray, offset );\n\t\t\toffset += trimmedArray.length;\n\n\t\t}\n\n\t\tattr.needsUpdate = true;\n\t\tdrawRange = requiredLength / attr.itemSize;\n\n\t}\n\n\t// update the draw range\n\tgeometry.setDrawRange( 0, drawRange );\n\tgeometry.clearGroups();\n\n\tlet groupOffset = 0;\n\tfor ( let i = 0; i < groupCount; i ++ ) {\n\n\t\tconst posCount = attributeInfo.getGroupArray( 'position', i ).length / 3;\n\t\tif ( posCount !== 0 ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry.addGroup( groupOffset, posCount, group.materialIndex );\n\t\t\tgroupOffset += posCount;\n\n\t\t}\n\n\t}\n\n\t// remove or update the index appropriately\n\tif ( geometry.index ) {\n\n\t\tconst indexArray = geometry.index.array;\n\t\tif ( indexArray.length < drawRange ) {\n\n\t\t\tgeometry.index = null;\n\t\t\tneedsDisposal = true;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = indexArray.length; i < l; i ++ ) {\n\n\t\t\t\tindexArray[ i ] = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove the bounds tree if it exists because its now out of date\n\t// TODO: can we have this dispose in the same way that a brush does?\n\tgeometry.boundsTree = null;\n\n\tif ( needsDisposal ) {\n\n\t\tgeometry.dispose();\n\n\t}\n\n\treturn geometry;\n\n}\n\nfunction getMaterialList( groups, materials ) {\n\n\tlet result = materials;\n\tif ( ! Array.isArray( materials ) ) {\n\n\t\tresult = [];\n\t\tgroups.forEach( g => {\n\n\t\t\tresult[ g.materialIndex ] = materials;\n\n\t\t} );\n\n\t}\n\n\treturn result;\n\n}\n\n// Utility class for performing CSG operations\nexport class Evaluator {\n\n\tconstructor() {\n\n\t\tthis.triangleSplitter = new TriangleSplitter();\n\t\tthis.attributeData = new TypedAttributeData();\n\t\tthis.attributes = [ 'position', 'uv', 'normal' ];\n\t\tthis.useGroups = true;\n\t\tthis.debug = new OperationDebugData();\n\n\t}\n\n\tevaluate( a, b, operation, targetBrush = new Brush() ) {\n\n\t\ta.prepareGeometry();\n\t\tb.prepareGeometry();\n\n\t\tconst { triangleSplitter, attributeData, attributes, useGroups, debug } = this;\n\t\tconst targetGeometry = targetBrush.geometry;\n\t\tconst aAttributes = a.geometry.attributes;\n\t\tfor ( let i = 0, l = attributes.length; i < l; i ++ ) {\n\n\t\t\tconst key = attributes[ i ];\n\t\t\tconst attr = aAttributes[ key ];\n\t\t\tattributeData.initializeArray( key, attr.array.constructor );\n\n\t\t}\n\n\t\tfor ( const key in attributeData.attributes ) {\n\n\t\t\tif ( ! attributes.includes( key ) ) {\n\n\t\t\t\tattributeData.delete( key );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const key in targetGeometry.attributes ) {\n\n\t\t\tif ( ! attributes.includes( key ) ) {\n\n\t\t\t\ttargetGeometry.deleteAttribute( key );\n\t\t\t\ttargetGeometry.dispose();\n\n\t\t\t}\n\n\t\t}\n\n\t\tattributeData.clear();\n\n\t\tif ( debug.enabled ) {\n\n\t\t\tdebug.reset();\n\t\t\tsetDebugContext( debug );\n\n\t\t}\n\n\t\tperformOperation( a, b, operation, triangleSplitter, attributeData, { useGroups } );\n\n\t\tif ( debug.enabled ) {\n\n\t\t\tsetDebugContext( null );\n\n\t\t}\n\n\t\t// structure the groups appropriately\n\t\tconst aGroups = ! useGroups || a.geometry.groups.length === 0 ?\n\t\t\t[ { start: 0, count: Infinity, materialIndex: 0 } ] :\n\t\t\ta.geometry.groups.map( group => ( { ...group } ) );\n\n\t\tconst bGroups = ! useGroups || b.geometry.groups.length === 0 ?\n\t\t\t[ { start: 0, count: Infinity, materialIndex: 0 } ] :\n\t\t\tb.geometry.groups.map( group => ( { ...group } ) );\n\n\t\t// get the materials\n\t\tconst aMaterials = getMaterialList( aGroups, a.material );\n\t\tconst bMaterials = getMaterialList( bGroups, b.material );\n\n\t\t// adjust the material index\n\t\tbGroups.forEach( g => {\n\n\t\t\tg.materialIndex += aMaterials.length;\n\n\t\t} );\n\n\t\t// apply groups and attribute data to the geometry\n\t\tapplyToGeometry( targetGeometry, a.geometry, [ ...aGroups, ...bGroups ], attributeData );\n\n\t\t// generate the minimum set of materials needed for the list of groups and adjust the groups\n\t\t// if they're needed\n\t\tconst groups = targetGeometry.groups;\n\t\tif ( useGroups ) {\n\n\t\t\tconst materialMap = new Map();\n\t\t\tconst allMaterials = [ ...aMaterials, ...bMaterials ];\n\n\t\t\t// create a map from old to new index and remove materials that aren't used\n\t\t\tlet newIndex = 0;\n\t\t\tfor ( let i = 0, l = allMaterials.length; i < l; i ++ ) {\n\n\t\t\t\tconst foundGroup = Boolean( groups.find( group => group.materialIndex === i ) );\n\t\t\t\tif ( ! foundGroup ) {\n\n\t\t\t\t\tallMaterials[ i ] = null;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterialMap.set( i, newIndex );\n\t\t\t\t\tnewIndex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// adjust the groups indices\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\t\t\t\tgroup.materialIndex = materialMap.get( group.materialIndex );\n\n\t\t\t}\n\n\t\t\ttargetBrush.material = allMaterials.filter( material => material );\n\n\t\t}\n\n\t\treturn targetBrush;\n\n\t}\n\n\tevaluateHierarchy( root, target = new Brush() ) {\n\n\t\troot.updateMatrixWorld( true );\n\n\t\tconst flatTraverse = ( obj, cb ) => {\n\n\t\t\tconst children = obj.children;\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tif ( child.isOperationGroup ) {\n\n\t\t\t\t\tflatTraverse( child, cb );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcb( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\n\t\tconst traverse = brush => {\n\n\t\t\tconst children = brush.children;\n\t\t\tlet didChange = false;\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tdidChange = traverse( child ) || didChange;\n\n\t\t\t}\n\n\t\t\tconst isDirty = brush.isDirty();\n\t\t\tif ( isDirty ) {\n\n\t\t\t\tbrush.markUpdated();\n\n\t\t\t}\n\n\t\t\tif ( didChange && ! brush.isOperationGroup ) {\n\n\t\t\t\tlet result;\n\t\t\t\tflatTraverse( brush, child => {\n\n\t\t\t\t\tif ( ! result ) {\n\n\t\t\t\t\t\tresult = this.evaluate( brush, child, child.operation );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tresult = this.evaluate( result, child, child.operation );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tbrush._cachedGeometry = result.geometry;\n\t\t\t\tbrush._cachedMaterials = result.material;\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn didChange || isDirty;\n\n\t\t\t}\n\n\t\t};\n\n\t\ttraverse( root );\n\n\t\ttarget.geometry = root._cachedGeometry;\n\t\ttarget.material = root._cachedMaterials;\n\n\t\treturn target;\n\n\t}\n\n\treset() {\n\n\t\tthis.triangleSplitter.reset();\n\n\t}\n\n}\n","import { BufferGeometry } from 'three';\nimport { Brush } from './Brush.js';\nimport { ADDITION } from './constants.js';\n\nexport class Operation extends Brush {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isOperation = true;\n\t\tthis.operation = ADDITION;\n\n\t\tthis._cachedGeometry = new BufferGeometry();\n\t\tthis._cachedMaterials = null;\n\t\tthis._previousOperation = null;\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tsuper.markUpdated();\n\t\tthis._previousOperation = this.operation;\n\n\t}\n\n\tisDirty() {\n\n\t\treturn this.operation !== this._previousOperation || super.isDirty();\n\n\t}\n\n\tinsertBefore( brush ) {\n\n\t\tconst parent = this.parent;\n\t\tconst index = parent.children.indexOf( this );\n\t\tparent.children.splice( index, 0, brush );\n\n\t}\n\n\tinsertAfter( brush ) {\n\n\t\tconst parent = this.parent;\n\t\tconst index = parent.children.indexOf( this );\n\t\tparent.children.splice( index + 1, 0, brush );\n\n\t}\n\n}\n","import { Group, Matrix4 } from 'three';\n\nexport class OperationGroup extends Group {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis.isOperationGroup = true;\n\t\tthis._previousMatrix = new Matrix4();\n\n\t}\n\n\tmarkUpdated() {\n\n\t\tthis._previousMatrix.copy( this.matrix );\n\n\t}\n\n\tisDirty() {\n\n\t\tconst { matrix, _previousMatrix } = this;\n\t\tconst el1 = matrix.elements;\n\t\tconst el2 = _previousMatrix.elements;\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( el1[ i ] !== el2[ i ] ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n}\n","import { Color } from 'three';\n\nfunction addWorldPosition( shader ) {\n\n\tif ( /varying\\s+vec3\\s+wPosition/.test( shader.vertexShader ) ) return;\n\n\tshader.vertexShader = `\n\t\t\tvarying vec3 wPosition;\n\t\t\t${shader.vertexShader}\n\t\t`.replace(\n\t\t/#include <displacementmap_vertex>/,\n\t\tv =>\n\t\t\t`${v}\n\t\t\t\twPosition = (modelMatrix * vec4( transformed, 1.0 )).xyz;\n\t\t\t\t`,\n\t);\n\n\tshader.fragmentShader = `\n\t\tvarying vec3 wPosition;\n\t\t${shader.fragmentShader}\n\t\t`;\n\n\treturn shader;\n\n}\n\nexport function csgGridShaderMixin( shader ) {\n\n\tshader.uniforms = {\n\t\t...shader.uniforms,\n\t\tcheckerboardColor: { value: new Color( 0x111111 ) }\n\t};\n\n\taddWorldPosition( shader );\n\n\tshader.defines = { CSG_GRID: 1 };\n\n\tshader.fragmentShader = shader.fragmentShader.replace(\n\t\t/#include <common>/,\n\t\tv =>\n\t\t/* glsl */`\n\t\t\t${v}\n\n\t\t\tuniform vec3 checkerboardColor;\n\t\t\tfloat getCheckerboard( vec2 p, float scale ) {\n\n\t\t\t\tp /= scale;\n\t\t\t\tp += vec2( 0.5 );\n\n\t\t\t\tvec2 line = mod( p, 2.0 ) - vec2( 1.0 );\n\t\t\t\tline = abs( line );\n\n\t\t\t\tvec2 pWidth = fwidth( line );\n\t\t\t\tvec2 value = smoothstep( 0.5 - pWidth / 2.0, 0.5 + pWidth / 2.0, line );\n\t\t\t\tfloat result = value.x * value.y + ( 1.0 - value.x ) * ( 1.0 - value.y );\n\n\t\t\t\treturn result;\n\n\t\t\t}\n\n\t\t\tfloat getGrid( vec2 p, float scale, float thickness ) {\n\n\t\t\t\tp /= 0.5 * scale;\n\n\t\t\t\tvec2 stride = mod( p, 2.0 ) - vec2( 1.0 );\n\t\t\t\tstride = abs( stride );\n\n\t\t\t\tvec2 pWidth = fwidth( p );\n\t\t\t\tvec2 line = smoothstep( 1.0 - pWidth / 2.0, 1.0 + pWidth / 2.0, stride + thickness * pWidth );\n\n\t\t\t\treturn max( line.x, line.y );\n\n\t\t\t}\n\n\t\t\tvec3 getFaceColor( vec2 p, vec3 color ) {\n\n\t\t\t\tfloat checkLarge = getCheckerboard( p, 1.0 );\n\t\t\t\tfloat checkSmall = abs( getCheckerboard( p, 0.1 ) );\n\t\t\t\tfloat lines = getGrid( p, 10.0, 1.0 );\n\n\t\t\t\tvec3 checkColor = mix(\n\t\t\t\t\tvec3( 0.7 ) * color,\n\t\t\t\t\tvec3( 1.0 ) * color,\n\t\t\t\t\tcheckSmall * 0.4 + checkLarge * 0.6\n\t\t\t\t);\n\n\t\t\t\tvec3 gridColor = vec3( 1.0 );\n\n\t\t\t\treturn mix( checkColor, gridColor, lines );\n\n\t\t\t}\n\n\t\t\tfloat angleBetween( vec3 a, vec3 b ) {\n\n\t\t\t\treturn acos( abs( dot( a, b ) ) );\n\n\t\t\t}\n\n\t\t\tvec3 planeProject( vec3 norm, vec3 other ) {\n\n\t\t\t\tfloat d = dot( norm, other );\n\t\t\t\treturn normalize( other - norm * d );\n\n\t\t\t}\n\n\t\t\tvec3 getBlendFactors( vec3 norm ) {\n\n\t\t\t\tvec3 xVec = vec3( 1.0, 0.0, 0.0 );\n\t\t\t\tvec3 yVec = vec3( 0.0, 1.0, 0.0 );\n\t\t\t\tvec3 zVec = vec3( 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 projX = planeProject( xVec, norm );\n\t\t\t\tvec3 projY = planeProject( yVec, norm );\n\t\t\t\tvec3 projZ = planeProject( zVec, norm );\n\n\t\t\t\tfloat xAngle = max(\n\t\t\t\t\tangleBetween( xVec, projY ),\n\t\t\t\t\tangleBetween( xVec, projZ )\n\t\t\t\t);\n\n\t\t\t\tfloat yAngle = max(\n\t\t\t\t\tangleBetween( yVec, projX ),\n\t\t\t\t\tangleBetween( yVec, projZ )\n\t\t\t\t);\n\n\t\t\t\tfloat zAngle = max(\n\t\t\t\t\tangleBetween( zVec, projX ),\n\t\t\t\t\tangleBetween( zVec, projY )\n\t\t\t\t);\n\n\t\t\t\treturn vec3( xAngle, yAngle, zAngle ) / ( 0.5 * PI );\n\n\t\t\t}\n\t\t` ).replace(\n\t\t/#include <normal_fragment_maps>/,\n\t\tv =>\n\t\t/* glsl */`${v}\n\t\t\t\t#if CSG_GRID\n\t\t\t\t{\n\n\t\t\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t\t\t\tfloat yCont = abs( dot( vec3( 0.0, 1.0, 0.0 ), worldNormal ) );\n\t\t\t\t\tfloat zCont = abs( dot( vec3( 0.0, 0.0, 1.0 ), worldNormal ) );\n\t\t\t\t\tfloat xCont = abs( dot( vec3( 1.0, 0.0, 0.0 ), worldNormal ) );\n\n\t\t\t\t\tvec3 factors = getBlendFactors( worldNormal );\n\t\t\t\t\tfactors = smoothstep( vec3( 0.475 ), vec3( 0.525 ), vec3( 1.0 ) - factors );\n\n\t\t\t\t\tfloat weight = factors.x + factors.y + factors.z;\n\t\t\t\t\tfactors /= weight;\n\n\t\t\t\t\tvec3 color =\n\t\t\t\t\t\tgetFaceColor( wPosition.yz, diffuseColor.rgb ) * factors.x +\n\t\t\t\t\t\tgetFaceColor( wPosition.xz, diffuseColor.rgb ) * factors.y +\n\t\t\t\t\t\tgetFaceColor( wPosition.xy, diffuseColor.rgb ) * factors.z;\n\n\t\t\t\t\tdiffuseColor.rgb = color;\n\n\t\t\t\t}\n\t\t\t\t#endif\n\t\t\t\t`,\n\t);\n\n\treturn shader;\n\n}\n","import { MeshPhongMaterial } from 'three';\nimport { csgGridShaderMixin } from './shaderUtils.js';\n\nexport class GridMaterial extends MeshPhongMaterial {\n\n\tget enableGrid() {\n\n\t\treturn Boolean( this._enableGrid );\n\n\t}\n\n\tset enableGrid( v ) {\n\n\t\tif ( this._enableGrid !== v ) {\n\n\t\t\tthis._enableGrid = v;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\t\tthis.enableGrid = true;\n\n\t}\n\n\tonBeforeCompile( shader ) {\n\n\t\tcsgGridShaderMixin( shader );\n\t\tshader.defines.CSG_GRID = Number( this.enableGrid );\n\n\t}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.enableGrid.toString();\n\n\t}\n\n}\n","import { BufferAttribute, Color, MathUtils } from 'three';\n\nexport function getTriangleDefinitions( ...triangles ) {\n\n\tfunction getVectorDefinition( v ) {\n\n\t\treturn /* js */`new THREE.Vector3( ${ v.x }, ${ v.y }, ${ v.z } )`;\n\n\t}\n\n\treturn triangles.map( t => {\n\n\t\treturn /* js */`\n\t\t\tnew THREE.Triangle(\n\t\t\t\t${ getVectorDefinition( t.a ) },\n\t\t\t\t${ getVectorDefinition( t.b ) },\n\t\t\t\t${ getVectorDefinition( t.c ) },\n\t\t\t)`.substring( 1 );\n\n\t} );\n\n}\n\nexport function logTriangleDefinitions( ...triangles ) {\n\n\tconsole.log( getTriangleDefinitions( ...triangles ).join( ',\\n' ) );\n\n}\n\nexport function generateRandomTriangleColors( geometry ) {\n\n\tconst position = geometry.attributes.position;\n\tconst array = new Float32Array( position.count * 3 );\n\n\tconst color = new Color();\n\tfor ( let i = 0, l = array.length; i < l; i += 9 ) {\n\n\t\tcolor.setHSL(\n\t\t\tMath.random(),\n\t\t\tMathUtils.lerp( 0.5, 1.0, Math.random() ),\n\t\t\tMathUtils.lerp( 0.5, 0.75, Math.random() ),\n\t\t);\n\n\t\tarray[ i + 0 ] = color.r;\n\t\tarray[ i + 1 ] = color.g;\n\t\tarray[ i + 2 ] = color.b;\n\n\t\tarray[ i + 3 ] = color.r;\n\t\tarray[ i + 4 ] = color.g;\n\t\tarray[ i + 5 ] = color.b;\n\n\t\tarray[ i + 6 ] = color.r;\n\t\tarray[ i + 7 ] = color.g;\n\t\tarray[ i + 8 ] = color.b;\n\n\t}\n\n\tgeometry.setAttribute( 'color', new BufferAttribute( array, 3 ) );\n\n}\n","import { Group, Mesh, LineSegments, LineBasicMaterial, MeshPhongMaterial, BufferGeometry, BufferAttribute } from 'three';\n\nexport class TriangleSetHelper extends Group {\n\n\tget color() {\n\n\t\treturn this._mesh.material.color;\n\n\t}\n\n\tget side() {\n\n\t\treturn this._mesh.material.side;\n\n\t}\n\n\tset side( v ) {\n\n\t\tthis._mesh.material.side = v;\n\n\t}\n\n\tconstructor( triangles = [] ) {\n\n\t\tsuper();\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst lineGeom = new BufferGeometry();\n\t\tthis._mesh = new Mesh( geometry, new MeshPhongMaterial( {\n\t\t\tflatShading: true,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.25,\n\t\t} ) );\n\t\tthis._lines = new LineSegments( lineGeom, new LineBasicMaterial() );\n\t\tthis._mesh.material.color = this._lines.material.color;\n\n\t\tthis._lines.frustumCulled = false;\n\t\tthis._mesh.frustumCulled = false;\n\n\t\tthis.add( this._lines, this._mesh );\n\n\t\tthis.setTriangles( triangles );\n\n\t}\n\n\tsetTriangles( triangles ) {\n\n\t\tconst triPositions = new Float32Array( 3 * 3 * triangles.length );\n\t\tconst linePositions = new Float32Array( 6 * 3 * triangles.length );\n\t\tfor ( let i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\tconst i9 = 9 * i;\n\t\t\tconst i18 = 18 * i;\n\t\t\tconst tri = triangles[ i ];\n\n\t\t\ttri.a.toArray( triPositions, i9 + 0 );\n\t\t\ttri.b.toArray( triPositions, i9 + 3 );\n\t\t\ttri.c.toArray( triPositions, i9 + 6 );\n\n\n\t\t\ttri.a.toArray( linePositions, i18 + 0 );\n\t\t\ttri.b.toArray( linePositions, i18 + 3 );\n\n\t\t\ttri.b.toArray( linePositions, i18 + 6 );\n\t\t\ttri.c.toArray( linePositions, i18 + 9 );\n\n\t\t\ttri.c.toArray( linePositions, i18 + 12 );\n\t\t\ttri.a.toArray( linePositions, i18 + 15 );\n\n\t\t}\n\n\t\tthis._mesh.geometry.dispose();\n\t\tthis._mesh.geometry.setAttribute( 'position', new BufferAttribute( triPositions, 3 ) );\n\n\t\tthis._lines.geometry.dispose();\n\t\tthis._lines.geometry.setAttribute( 'position', new BufferAttribute( linePositions, 3 ) );\n\n\t}\n\n}\n","import { LineSegments } from 'three';\n\nexport class EdgesHelper extends LineSegments {\n\n\tget color() {\n\n\t\treturn this.material.color;\n\n\t}\n\n\tconstructor( edges = [] ) {\n\n\t\tsuper();\n\t\tthis.frustumCulled = false;\n\t\tthis.setEdges( edges );\n\n\t}\n\n\tsetEdges( edges ) {\n\n\t\tconst { geometry } = this;\n\t\tconst points = edges.flatMap( e => [ e.start, e.end ] );\n\t\tgeometry.dispose();\n\t\tgeometry.setFromPoints( points );\n\n\t}\n\n}\n","import { InstancedMesh, SphereBufferGeometry, MeshBasicMaterial, Matrix4 } from 'three';\n\nconst _matrix = new Matrix4();\nexport class PointsHelper extends InstancedMesh {\n\n\tget color() {\n\n\t\treturn this.material.color;\n\n\t}\n\n\tconstructor( count = 1000, points = [] ) {\n\n\t\tsuper( new SphereBufferGeometry( 0.025 ), new MeshBasicMaterial(), count );\n\t\tthis.frustumCulled = false;\n\t\tthis.setPoints( points );\n\n\t}\n\n\tsetPoints( points ) {\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\t_matrix.makeTranslation( point.x, point.y, point.z );\n\t\t\tthis.setMatrixAt( i, _matrix );\n\n\t\t}\n\n\t\tthis.count = points.length;\n\n\t}\n\n}\n","import { Line3, Triangle, Vector3, Plane } from 'three';\nimport { EdgesHelper } from './EdgesHelper.js';\n\nconst _tri1 = new Triangle();\nconst _tri2 = new Triangle();\nconst _center = new Vector3();\nconst _center2 = new Vector3();\nconst _edgeCenter = new Vector3();\nconst _edgeCenter2 = new Vector3();\nconst _projected = new Vector3();\nconst _projected2 = new Vector3();\nconst _projectedDir = new Vector3();\nconst _projectedDir2 = new Vector3();\nconst _edgeDir = new Vector3();\nconst _edgeDir2 = new Vector3();\nconst _vec = new Vector3();\nconst _vec2 = new Vector3();\nconst _finalPoint = new Vector3();\nconst _finalPoint2 = new Vector3();\nconst _plane = new Plane();\nconst _plane2 = new Plane();\n\nfunction getTriangle( geometry, triIndex, target ) {\n\n\tconst i3 = 3 * triIndex;\n\tlet i0 = i3 + 0;\n\tlet i1 = i3 + 1;\n\tlet i2 = i3 + 2;\n\n\tconst indexAttr = geometry.index;\n\tconst posAttr = geometry.attributes.position;\n\tif ( indexAttr ) {\n\n\t\ti0 = indexAttr.getX( i0 );\n\t\ti1 = indexAttr.getX( i1 );\n\t\ti2 = indexAttr.getX( i2 );\n\n\t}\n\n\ttarget.a.fromBufferAttribute( posAttr, i0 );\n\ttarget.b.fromBufferAttribute( posAttr, i1 );\n\ttarget.c.fromBufferAttribute( posAttr, i2 );\n\n\treturn target;\n\n}\n\nexport class HalfEdgeHelper extends EdgesHelper {\n\n\tconstructor( geometry = null, halfEdges = null ) {\n\n\t\tsuper();\n\n\t\tif ( geometry && halfEdges ) {\n\n\t\t\tthis.setHalfEdges( geometry, halfEdges );\n\n\t\t}\n\n\t}\n\n\tsetHalfEdges( geometry, halfEdges ) {\n\n\t\tconst indexAttr = geometry.index;\n\t\tconst posAttr = geometry.attributes.position;\n\n\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\tconst edges = [];\n\t\tconst triCount = indexAttr ? indexAttr.count / 3 : posAttr.count / 3;\n\t\tfor ( let triIndex = 0; triIndex < triCount; triIndex ++ ) {\n\n\t\t\tgetTriangle( geometry, triIndex, _tri1 );\n\t\t\t_tri1.getMidpoint( _center );\n\t\t\t_tri1.getPlane( _plane );\n\t\t\tfor ( let e = 0; e < 3; e ++ ) {\n\n\t\t\t\tconst otherTriIndex = halfEdges.getSiblingTriangleIndex( triIndex, e );\n\t\t\t\tconst otherEdgeIndex = halfEdges.getSiblingEdgeIndex( triIndex, e );\n\t\t\t\tif ( otherTriIndex === - 1 ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// get other triangle\n\t\t\t\tgetTriangle( geometry, otherTriIndex, _tri2 );\n\t\t\t\t_tri2.getPlane( _plane2 );\n\n\t\t\t\t// get triangle center\n\t\t\t\t_tri2.getMidpoint( _center2 );\n\n\t\t\t\t// get edge centers\n\t\t\t\t{\n\n\t\t\t\t\tconst nextE = ( e + 1 ) % 3;\n\t\t\t\t\tconst v0 = _tri1[ vertKeys[ e ] ];\n\t\t\t\t\tconst v1 = _tri1[ vertKeys[ nextE ] ];\n\t\t\t\t\t_edgeCenter.lerpVectors( v0, v1, 0.5 );\n\n\t\t\t\t}\n\n\t\t\t\t{\n\n\t\t\t\t\tconst nextE = ( otherEdgeIndex + 1 ) % 3;\n\t\t\t\t\tconst v0 = _tri2[ vertKeys[ otherEdgeIndex ] ];\n\t\t\t\t\tconst v1 = _tri2[ vertKeys[ nextE ] ];\n\t\t\t\t\t_edgeCenter2.lerpVectors( v0, v1, 0.5 );\n\n\t\t\t\t}\n\n\t\t\t\t// get the projected centers\n\t\t\t\t_plane.projectPoint( _center2, _projected );\n\t\t\t\t_plane2.projectPoint( _center, _projected2 );\n\n\t\t\t\t// get the directions so we can flip them if needed\n\t\t\t\t_projectedDir.subVectors( _projected, _center );\n\t\t\t\t_projectedDir2.subVectors( _projected2, _center2 );\n\n\t\t\t\t// get the directions so we can flip them if needed\n\t\t\t\t_edgeDir.subVectors( _edgeCenter, _center );\n\t\t\t\t_edgeDir2.subVectors( _edgeCenter2, _center2 );\n\n\t\t\t\tif ( _projectedDir.dot( _edgeDir ) < 0 ) {\n\n\t\t\t\t\t_projectedDir.multiplyScalar( - 1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _projectedDir2.dot( _edgeDir2 ) < 0 ) {\n\n\t\t\t\t\t_projectedDir2.multiplyScalar( - 1 );\n\n\t\t\t\t}\n\n\t\t\t\t// find the new points after inversion\n\t\t\t\t_vec.addVectors( _center, _projectedDir );\n\t\t\t\t_vec2.addVectors( _center2, _projectedDir2 );\n\n\t\t\t\t// project the points onto the triangle edge. This would be better\n\t\t\t\t// if we clipped instead of chose the closest point\n\t\t\t\t_tri1.closestPointToPoint( _vec, _finalPoint );\n\t\t\t\t_tri2.closestPointToPoint( _vec2, _finalPoint2 );\n\n\t\t\t\tconst edge = new Line3();\n\t\t\t\tedge.start.copy( _center );\n\t\t\t\tedge.end.lerpVectors( _finalPoint, _finalPoint2, 0.5 );\n\t\t\t\tedges.push( edge );\n\n\t\t\t}\n\n\t\t}\n\n\t\tsuper.setEdges( edges );\n\n\t}\n\n}\n","import { Vector3 } from 'three';\nimport { Triangle } from 'three';\n\n// https://stackoverflow.com/questions/1406029/how-to-calculate-the-volume-of-a-3d-mesh-object-the-surface-of-which-is-made-up\nconst _tri = new Triangle();\nconst _normal = new Vector3();\nconst _relPoint = new Vector3();\nexport function computeMeshVolume( mesh ) {\n\n\t// grab the matrix and the geometry\n\tlet geometry;\n\tlet matrix;\n\tif ( mesh.isBufferGeometry ) {\n\n\t\tgeometry = mesh;\n\t\tmatrix = null;\n\n\t} else {\n\n\t\tgeometry = mesh.geometry;\n\t\tmatrix = Math.abs( mesh.matrixWorld.determinant() - 1.0 ) < 1e-15 ? null : mesh.matrixWorld;\n\n\t}\n\n\t// determine the number of relevant draw range elements to use\n\tconst index = geometry.index;\n\tconst pos = geometry.attributes.position;\n\tconst drawRange = geometry.drawRange;\n\tconst triCount = Math.min( ( index ? index.count : pos.count ) / 3, drawRange.count / 3 );\n\n\t// get a point relative to the position of the geometry to avoid floating point error\n\t_tri.setFromAttributeAndIndices( pos, 0, 1, 2 );\n\tapplyMatrix4ToTri( _tri, matrix );\n\t_tri.getNormal( _normal );\n\t_tri.getMidpoint( _relPoint ).add( _normal );\n\n\t// iterate over all triangles\n\tlet volume = 0;\n\tconst startIndex = drawRange.start / 3;\n\tfor ( let i = startIndex, l = startIndex + triCount; i < l; i ++ ) {\n\n\t\tlet i0 = 3 * i + 0;\n\t\tlet i1 = 3 * i + 1;\n\t\tlet i2 = 3 * i + 2;\n\t\tif ( index ) {\n\n\t\t\ti0 = index.getX( i0 );\n\t\t\ti1 = index.getX( i1 );\n\t\t\ti2 = index.getX( i2 );\n\n\t\t}\n\n\t\t// get the triangle\n\t\t_tri.setFromAttributeAndIndices( pos, i0, i1, i2 );\n\t\tapplyMatrix4ToTri( _tri, matrix );\n\t\tsubVectorFromTri( _tri, _relPoint );\n\n\t\t// add the signed volume\n\t\tvolume += signedVolumeOfTriangle( _tri.a, _tri.b, _tri.c );\n\n\t}\n\n\treturn Math.abs( volume );\n\n}\n\nfunction signedVolumeOfTriangle( p1, p2, p3 ) {\n\n\tconst v321 = p3.x * p2.y * p1.z;\n\tconst v231 = p2.x * p3.y * p1.z;\n\tconst v312 = p3.x * p1.y * p2.z;\n\tconst v132 = p1.x * p3.y * p2.z;\n\tconst v213 = p2.x * p1.y * p3.z;\n\tconst v123 = p1.x * p2.y * p3.z;\n\treturn ( 1 / 6 ) * ( - v321 + v231 + v312 - v132 - v213 + v123 );\n\n}\n\nfunction subVectorFromTri( tri, pos ) {\n\n\ttri.a.sub( pos );\n\ttri.b.sub( pos );\n\ttri.c.sub( pos );\n\n}\n\nfunction applyMatrix4ToTri( tri, mat = null ) {\n\n\tif ( mat !== null ) {\n\n\t\ttri.a.applyMatrix4( mat );\n\t\ttri.b.applyMatrix4( mat );\n\t\ttri.c.applyMatrix4( mat );\n\n\t}\n\n}\n"],"names":["Vector3","Mesh","Matrix4","MeshBVH","Ray","_matrix","_tri","Triangle","Vector4","_edge","Line3","_normal","DoubleSide","_vec","_plane","Plane","ExtendedTriangle","Matrix3","BufferAttribute","BufferGeometry","Group","Color","MeshPhongMaterial","MathUtils","LineSegments","LineBasicMaterial","InstancedMesh","SphereBufferGeometry","MeshBasicMaterial"],"mappings":";;;;;;CAAA,MAAM,eAAe,GAAG,EAAE,CAAC,GAAG,IAAI,KAAK,GAAG,CAAC;AAC3C;CACO,SAAS,UAAU,EAAE,CAAC,GAAG;AAChC;CACA,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC;AACpC;CACA,CAAC;AACD;CACO,SAAS,UAAU,EAAE,CAAC,GAAG;AAChC;CACA,CAAC,OAAO,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/E;CACA;;CCTA,MAAM,SAAS,GAAG,EAAE,IAAIA,aAAO,EAAE,EAAE,IAAIA,aAAO,EAAE,EAAE,IAAIA,aAAO,EAAE,EAAE,CAAC;AAClE;CACO,MAAM,WAAW,CAAC;AACzB;CACA,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI,GAAG;AAChC;CACA,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;CACnB,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;CAC7B,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;CAC3B,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC3B;CACA,EAAE,KAAK,QAAQ,GAAG;AAClB;CACA,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC/B;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,uBAAuB,EAAE,QAAQ,EAAE,SAAS,GAAG;AAChD;CACA,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC;CAC3D,EAAE,OAAO,UAAU,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;AAC3D;CACA,EAAE;AACF;CACA,CAAC,mBAAmB,EAAE,QAAQ,EAAE,SAAS,GAAG;AAC5C;CACA,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC;CAC3D,EAAE,OAAO,UAAU,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;AACvD;CACA,EAAE;AACF;CACA,CAAC,UAAU,EAAE,QAAQ,GAAG;AACxB;CACA;CACA,EAAE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AACxB;CACA;CACA,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;CAClC,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;CACnC,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;AACtC;CACA;CACA,EAAE,IAAI,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;CACrE,EAAE,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC/B;CACA;CACA,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;CACjB,EAAE,KAAK,IAAI,CAAC,YAAY,GAAG;AAC3B;CACA,GAAG,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;CACrC,GAAG,KAAK,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,QAAQ,GAAG;AAChD;CACA,IAAI,QAAQ,GAAG,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;AACpD;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA;CACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;CACvB,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG;AACjD;CACA,GAAG,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC;AAC5C;CACA,GAAG;AACH;CACA,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACnB;CACA;CACA,EAAE,IAAI,cAAc,GAAG,CAAC,CAAC;CACzB,EAAE,IAAI,YAAY,GAAG,CAAC,CAAC;CACvB,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,GAAG;AACxC;CACA,GAAG,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;CAC7B,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAClC;CACA,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACpB,IAAI,KAAK,SAAS,GAAG;AACrB;CACA,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/B;CACA,KAAK;AACL;CACA,IAAI,SAAS,EAAE,CAAC,EAAE,CAAC,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACtD;CACA,IAAI;AACJ;CACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAClC;CACA,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;CAChC,IAAI,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;CACjC,IAAI,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC;AACrC;CACA,IAAI,MAAM,GAAG,GAAG,UAAU,EAAE,KAAK,EAAE,CAAC;CACpC,IAAI,MAAM,GAAG,GAAG,UAAU,EAAE,KAAK,EAAE,CAAC;AACpC;CACA,IAAI,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;CAC5C,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG;AAClC;CACA;CACA,KAAK,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC;CAC/C,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC;CACjC,KAAK,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACjC,KAAK,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;CAC/B,KAAK,cAAc,GAAG,CAAC;CACvB,KAAK,YAAY,GAAG,CAAC;AACrB;CACA,KAAK,MAAM;AACX;CACA;CACA;CACA;CACA,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;CACtC,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B,KAAK,cAAc,GAAG,CAAC;AACvB;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;CACnC,EAAE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;CACvC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB;CACA,EAAE;AACF;CACA;;CCrIO,SAAS,8BAA8B,GAAG;AACjD;CACA,CAAC,OAAO,OAAO,iBAAiB,KAAK,WAAW,CAAC;AACjD;CACA,CAAC;AACD;CACO,SAAS,0BAA0B,EAAE,KAAK,GAAG;AACpD;CACA,CAAC,KAAK,KAAK,CAAC,MAAM,YAAY,iBAAiB,GAAG;AAClD;CACA,EAAE,OAAO,KAAK,CAAC;AACf;CACA,EAAE;AACF;CACA,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;CAChC,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;CAC7B,CAAC,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AACjE;CACA,CAAC,MAAM,SAAS,GAAG,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;CAC5C,CAAC,MAAM,eAAe,GAAG,IAAI,UAAU,EAAE,YAAY,EAAE,CAAC;CACxD,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AACrC;CACA,CAAC,OAAO,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;AACjC;CACA;;CCnBO,MAAM,KAAK,SAASC,UAAI,CAAC;AAChC;CACA,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG;AACxB;CACA,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;AACnB;CACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;CACtB,EAAE,IAAI,CAAC,eAAe,GAAG,IAAIC,aAAO,EAAE,CAAC;CACvC,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1C;CACA,EAAE;AACF;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3C;CACA,EAAE;AACF;CACA,CAAC,OAAO,GAAG;AACX;CACA,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CAC3C,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;CAC9B,EAAE,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC;CACvC,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG;AAClC;CACA,GAAG,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,EAAE,GAAG;AAChC;CACA,IAAI,OAAO,IAAI,CAAC;AAChB;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,OAAO,KAAK,CAAC;AACf;CACA,EAAE;AACF;CACA,CAAC,eAAe,GAAG;AACnB;CACA;CACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;CACjC,EAAE,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;CACzC,EAAE,KAAK,8BAA8B,EAAE,GAAG;AAC1C;CACA,GAAG,MAAM,MAAM,GAAG,IAAI,UAAU,GAAG;AACnC;CACA,IAAI,MAAM,SAAS,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC;CACxC,IAAI,KAAK,SAAS,CAAC,4BAA4B,GAAG;AAClD;CACA,KAAK,MAAM,IAAI,KAAK,EAAE,uDAAuD,EAAE,CAAC;AAChF;CACA,KAAK;AACL;CACA,IAAI,SAAS,CAAC,KAAK,GAAG,0BAA0B,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACpE;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA;CACA,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,GAAG;AAC/B;CACA,GAAG,QAAQ,CAAC,UAAU,GAAG,IAAIC,oBAAO,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;CACrE,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG;AAC7B;CACA,IAAI,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC9C;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA;CACA,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,GAAG;AAC9B;CACA,GAAG,QAAQ,CAAC,SAAS,GAAG,IAAI,WAAW,EAAE,QAAQ,EAAE,CAAC;AACpD;CACA,GAAG;AACH;CACA;CACA,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,GAAG;AACjC;CACA,GAAG,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;CAC7C,GAAG,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,QAAQ,EAAE,CAAC;CAC7C,GAAG,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;CAClC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACrD;CACA,IAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;CACzC,IAAI,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG;AACxE;CACA,KAAK,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACpB;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;AACjC;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,gBAAgB,GAAG;AACpB;CACA,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;CAC5B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;CAC5B,EAAE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;CAC7B,EAAE,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/B;CACA,EAAE;AACF;CACA;;CCnHO,MAAM,eAAe,CAAC;AAC7B;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;CAC5B,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAChB;CACA,EAAE;AACF;CACA,CAAC,GAAG,EAAE,EAAE,EAAE,cAAc,GAAG;AAC3B;CACA,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACxC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG;AACjC;CACA,GAAG,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;CAC9B,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;AAClB;CACA,GAAG;AACH;CACA,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;AAC/C;CACA,EAAE;AACF;CACA;;ACvBY,OAAC,QAAQ,GAAG,EAAE;AACd,OAAC,WAAW,GAAG,EAAE;AACjB,OAAC,UAAU,GAAG,EAAE;AAChB,OAAC,YAAY,GAAG;;CCC5B,MAAM,IAAI,GAAG,IAAIC,SAAG,EAAE,CAAC;CACvB,MAAMC,SAAO,GAAG,IAAIH,aAAO,EAAE,CAAC;CAC9B,MAAMI,MAAI,GAAG,IAAIC,cAAQ,EAAE,CAAC;CAC5B,MAAM,KAAK,GAAG,IAAIP,aAAO,EAAE,CAAC;CAC5B,MAAM,MAAM,GAAG,IAAIQ,aAAO,EAAE,CAAC;CAC7B,MAAM,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;CAC7B,MAAM,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;CAC7B,MAAM,OAAO,GAAG,IAAIA,aAAO,EAAE,CAAC;CAC9B,MAAM,OAAO,GAAG,IAAIA,aAAO,EAAE,CAAC;CAC9B,MAAM,OAAO,GAAG,IAAIA,aAAO,EAAE,CAAC;CAC9B,MAAMC,OAAK,GAAG,IAAIC,WAAK,EAAE,CAAC;CAC1B,MAAMC,SAAO,GAAG,IAAIX,aAAO,EAAE,CAAC;CAC9B,MAAM,cAAc,GAAG,IAAI,CAAC;CAC5B,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B;CACO,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC;CACtB,MAAM,UAAU,GAAG,CAAC,CAAC;CACrB,MAAM,iBAAiB,GAAG,EAAE,CAAC,CAAC;CAC9B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC;CACO,MAAM,UAAU,GAAG,CAAC,CAAC;CACrB,MAAM,OAAO,GAAG,CAAC,CAAC;CAClB,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B;CACA,IAAI,aAAa,GAAG,IAAI,CAAC;CAClB,SAAS,eAAe,EAAE,SAAS,GAAG;AAC7C;CACA,CAAC,aAAa,GAAG,SAAS,CAAC;AAC3B;CACA,CAAC;AACD;CACO,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG;AACvC;CACA;CACA,CAAC,SAAS,IAAI,GAAG;AACjB;CACA,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;AAC7B;CACA,EAAE;AACF;CACA;CACA,CAAC,GAAG,CAAC,SAAS,EAAEW,SAAO,EAAE,CAAC;CAC1B,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAEA,SAAO,EAAE,CAAC;CAChC,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChC;CACA,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;CACjB,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;CACf,CAAC,IAAI,WAAW,GAAG,QAAQ,CAAC;CAC5B,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG;AACpC;CACA;CACA,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,cAAc,CAAC;CAC9C,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,cAAc,CAAC;CAC9C,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,cAAc,CAAC;AAC9C;CACA;CACA;CACA,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AACvC;CACA;CACA,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAEC,gBAAU,EAAE,CAAC;CACnD,EAAE,IAAI,WAAW,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAChF,EAAE,KAAK,WAAW,GAAG;AACrB;CACA,GAAG,KAAK,GAAG,CAAC;AACZ;CACA,GAAG;AACH;CACA,EAAE,KAAK,GAAG,KAAK,IAAI,GAAG;AACtB;CACA,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvD;CACA,GAAG;AACH;CACA;CACA,EAAE,KAAK,WAAW,IAAI,cAAc,GAAG;AACvC;CACA,GAAG,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAED,SAAO,EAAE,GAAG,CAAC,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AACpF;CACA,GAAG;AACH;CACA;CACA,EAAE,KAAK,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,GAAG,GAAG,GAAG;AAChE;CACA,GAAG,MAAM;AACT;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,OAAO,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,SAAS,GAAG,UAAU,CAAC;AACrD;CACA,CAAC;AACD;CACA;CACA;CACO,SAAS,4BAA4B,EAAE,CAAC,EAAE,CAAC,GAAG;AACrD;CACA,CAAC,MAAM,cAAc,GAAG,IAAI,eAAe,EAAE,CAAC;CAC9C,CAAC,MAAM,cAAc,GAAG,IAAI,eAAe,EAAE,CAAC;AAC9C;CACA,CAACN,SAAO;CACR,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;CACxB,GAAG,MAAM,EAAE;CACX,GAAG,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7B;CACA,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAEA,SAAO,EAAE;AAChE;CACA,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG;AACtD;CACA,GAAG,KAAK,SAAS,CAAC,kBAAkB,EAAE,SAAS,EAAEI,OAAK,EAAE,IAAI,EAAE,GAAG;AACjE;CACA;CACA;CACA,IAAI,KAAKA,OAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG;AAC1G;CACA,KAAK,OAAO,KAAK,CAAC;AAClB;CACA,KAAK;AACL;CACA,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CACjC,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACjC;CACA,IAAI,KAAK,aAAa,GAAG;AACzB;CACA,KAAK,aAAa,CAAC,OAAO,EAAEA,OAAK,EAAE,CAAC;CACpC,KAAK,aAAa,CAAC,wBAAwB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;AAC5E;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,OAAO,KAAK,CAAC;AAChB;CACA,GAAG;AACH;CACA,EAAE,EAAE,CAAC;AACL;CACA,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC3C;CACA,CAAC;AACD;CACA;CACO,SAAS,2BAA2B;CAC3C,CAAC,QAAQ;CACT,CAAC,YAAY;CACb,CAAC,QAAQ;CACT,CAAC,WAAW;CACZ,CAAC,YAAY;CACb,CAAC,aAAa;CACd,CAAC,MAAM,GAAG,KAAK;CACf,EAAE;AACF;CACA,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;CACxC,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;CAClC,CAAC,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC;CACzB,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CACrC,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CACrC,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AACrC;CACA,CAAC,MAAM,MAAM,GAAG,IAAI,aAAa,GAAG;AACpC;CACA;CACA,EAAE,MAAM,IAAI,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC;CACjC,EAAE,MAAM,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,CAAC;CACnC,EAAE,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE,GAAG;AACjC;CACA,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,0BAA0B,GAAG,GAAG,EAAE,2BAA2B,CAAC,EAAE,CAAC;AACtF;CACA,GAAG;AACH;CACA;CACA;CACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;CACjC,EAAE,KAAK,GAAG,KAAK,UAAU,GAAG;AAC5B;CACA,GAAGH,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;CACtE,GAAGA,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;CACtE,GAAGA,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;AACtE;CACA,GAAG,+BAA+B,EAAEA,MAAI,CAAC,CAAC,EAAEA,MAAI,CAAC,CAAC,EAAEA,MAAI,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC3F;CACA,GAAG,MAAM,KAAK,GAAG,KAAK,QAAQ,GAAG;AACjC;CACA,GAAGA,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,CAAC;CAC5E,GAAGA,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,CAAC;CAC5E,GAAGA,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,CAAC;AAC5E;CACA,GAAG,KAAK,MAAM,GAAG;AACjB;CACA,IAAIA,MAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;CACjC,IAAIA,MAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;CACjC,IAAIA,MAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AACjC;CACA,IAAI;AACJ;CACA,GAAG,+BAA+B,EAAEA,MAAI,CAAC,CAAC,EAAEA,MAAI,CAAC,CAAC,EAAEA,MAAI,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjG;CACA,GAAG,MAAM;AACT;CACA,GAAG,MAAM,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;CAC1C,GAAG,MAAM,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;CAC1C,GAAG,MAAM,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC1C;CACA,GAAG,+BAA+B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAClG;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC;AACD;CACA;CACO,SAAS,2BAA2B;CAC3C,CAAC,EAAE;CACH,CAAC,EAAE;CACH,CAAC,EAAE;CACH,CAAC,UAAU;CACX,CAAC,WAAW;CACZ,CAAC,YAAY;CACb,CAAC,aAAa;CACd,CAAC,MAAM,GAAG,KAAK;CACf,EAAE;AACF;CACA,CAAC,wBAAwB,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;CAC9F,CAAC,wBAAwB,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;CAC5G,CAAC,wBAAwB,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;AAC5G;CACA,CAAC;AACD;CACA;CACO,SAAS,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG;AACzE;CACA,CAAC,SAAS,SAAS;AACnB;CACA,EAAE,KAAK,QAAQ;AACf;CACA,GAAG,KAAK,OAAO,KAAK,UAAU,MAAM,OAAO,KAAK,gBAAgB,IAAI,EAAE,MAAM,EAAE,GAAG;AACjF;CACA,IAAI,OAAO,OAAO,CAAC;AACnB;CACA,IAAI;AACJ;CACA,GAAG,MAAM;CACT,EAAE,KAAK,WAAW;AAClB;CACA,GAAG,KAAK,MAAM,GAAG;AACjB;CACA,IAAI,KAAK,OAAO,KAAK,SAAS,GAAG;AACjC;CACA,KAAK,OAAO,UAAU,CAAC;AACvB;CACA,KAAK;AACL;CACA,IAAI,MAAM;AACV;CACA,IAAI,KAAK,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,iBAAiB,GAAG;AACnE;CACA,KAAK,OAAO,OAAO,CAAC;AACpB;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,MAAM;CACT,EAAE,KAAK,UAAU;AACjB;CACA,GAAG,KAAK,OAAO,KAAK,SAAS,GAAG;AAChC;CACA,IAAI,OAAO,UAAU,CAAC;AACtB;CACA,IAAI,MAAM,KAAK,OAAO,KAAK,UAAU,GAAG;AACxC;CACA,IAAI,OAAO,OAAO,CAAC;AACnB;CACA,IAAI;AACJ;CACA,GAAG,MAAM;CACT,EAAE,KAAK,YAAY;CACnB,GAAG,KAAK,OAAO,KAAK,SAAS,MAAM,OAAO,KAAK,gBAAgB,IAAI,EAAE,MAAM,EAAE,GAAG;AAChF;CACA,IAAI,OAAO,OAAO,CAAC;AACnB;CACA,IAAI;AACJ;CACA,GAAG,MAAM;CACT,EAAE;CACF,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,iCAAiC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1E;CACA,EAAE;AACF;CACA,CAAC,OAAO,QAAQ,CAAC;AACjB;CACA,CAAC;AACD;CACA;CACA;CACA,SAAS,+BAA+B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG;AAC3H;CACA;CACA,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI;AACxB;CACA,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACtB,EAAE,KAAK,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC1C,EAAE,KAAK,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC1C,EAAE,KAAK,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C;CACA,EAAE,CAAC;AACH;CACA;CACA,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;CAC1B,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;CAC1C,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;CAC1C,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C;CACA,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;CAC1B,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;CAC1C,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;CAC1C,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C;CACA,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;CAC1B,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;CAC1C,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;CAC1C,GAAG,eAAe,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C;CACA,CAAC,KAAK,SAAS,GAAG;AAClB;CACA,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;CACtB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;CACtB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AACtB;CACA,EAAE;AACF;CACA;CACA,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB;CACA,CAAC,KAAK,MAAM,GAAG;AACf;CACA,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;CACvB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACvB;CACA,EAAE,MAAM;AACR;CACA,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;CACvB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACvB;CACA,EAAE;AACF;CACA,CAAC;AACD;CACA;CACA,SAAS,wBAAwB;CACjC,CAAC,KAAK;CACN,CAAC,UAAU;CACX,CAAC,WAAW;CACZ,CAAC,YAAY;CACb,CAAC,aAAa;CACd,CAAC,MAAM,GAAG,KAAK;CACf,EAAE;AACF;CACA,CAAC,MAAM,MAAM,GAAG,IAAI,aAAa,GAAG;AACpC;CACA;CACA,EAAE,MAAM,IAAI,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC;CACjC,EAAE,MAAM,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,CAAC;CACnC,EAAE,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE,GAAG;AACjC;CACA,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,0BAA0B,GAAG,GAAG,EAAE,0BAA0B,CAAC,EAAE,CAAC;AACrF;CACA,GAAG;AACH;CACA;CACA;CACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;CACjC,EAAE,KAAK,GAAG,KAAK,UAAU,GAAG;AAC5B;CACA,GAAG,KAAK,CAAC,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;CACxE,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACzC;CACA,GAAG,MAAM,KAAK,GAAG,KAAK,QAAQ,GAAG;AACjC;CACA,GAAG,KAAK,CAAC,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,CAAC;CAC9E,GAAG,KAAK,MAAM,GAAG;AACjB;CACA,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAChC;CACA,IAAI;AACJ;CACA,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACzC;CACA,GAAG,MAAM;AACT;CACA,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;CAClC,GAAG,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;CACtD,GAAG,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;CACtD,GAAG,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AACtD;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA;;CCjZA,MAAM,OAAO,GAAG,KAAK,CAAC;CACtB,MAAM,gBAAgB,GAAG,KAAK,CAAC;CAC/B,MAAM,KAAK,GAAG,IAAII,WAAK,EAAE,CAAC;CAC1B,MAAM,UAAU,GAAG,IAAIA,WAAK,EAAE,CAAC;CAC/B,MAAMG,MAAI,GAAG,IAAIb,aAAO,EAAE,CAAC;CAC3B,MAAM,YAAY,GAAG,IAAIA,aAAO,EAAE,CAAC;CACnC,MAAMc,QAAM,GAAG,IAAIC,WAAK,EAAE,CAAC;CAC3B,MAAM,WAAW,GAAG,IAAIC,6BAAgB,EAAE,CAAC;AAC3C;CACO,SAAS,eAAe,EAAE,GAAG,GAAG;AACvC;CACA,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO;CAClD,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO;CAC5C,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC;AAC7C;CACA,CAAC;AACD;CACA;CACA,MAAM,YAAY,CAAC;AACnB;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;CAClB,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB;CACA,EAAE;AACF;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;AAC1C;CACA,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAIT,cAAQ,EAAE,EAAE,CAAC;AACrC;CACA,GAAG;AACH;CACA,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACtC;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;CACxB,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB;CACA,EAAE;AACF;CACA,CAAC;AACD;CACA;CACO,MAAM,gBAAgB,CAAC;AAC9B;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;CACzC,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;CACtB,EAAE,IAAI,CAAC,MAAM,GAAG,IAAIP,aAAO,EAAE,CAAC;AAC9B;CACA,EAAE;AACF;CACA;CACA,CAAC,UAAU,EAAE,GAAG,GAAG;AACnB;CACA,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACnD,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;CACvB,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB;CACA,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG;AAC9B;CACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAClD;CACA,IAAI,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;CACvB,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG;AACnB;CACA,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;AAC3B;CACA,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,SAAS,EAAEa,MAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,GAAG;AAChF;CACA,KAAK,MAAM,IAAI,KAAK,EAAE,kFAAkF,EAAE,CAAC;AAC3G;CACA,KAAK;AACL;CACA,IAAI,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;CAC/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;CACtB,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9B;CACA,IAAI;AACJ;CACA,GAAG,MAAM;AACT;CACA,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;AAC3B;CACA,GAAG,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;CAC9C,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;CACvB,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAC7B;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA;CACA;CACA,CAAC,eAAe,EAAE,QAAQ,GAAG;AAC7B;CACA,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;CACrC,EAAE,QAAQ,CAAC,QAAQ,EAAEC,QAAM,EAAE,CAAC;AAC9B;CACA,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAEA,QAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,gBAAgB,GAAG;AACtF;CACA;CACA,GAAG,MAAM,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;CACtD,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAClC;CACA,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChC;CACA,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;CACxB,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC;AAC5B;CACA,IAAID,MAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;CAC1C,IAAI,YAAY,CAAC,YAAY,EAAE,MAAM,EAAEA,MAAI,EAAE,CAAC;CAC9C,IAAIC,QAAM,CAAC,6BAA6B,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC7D;CACA,IAAI,IAAI,CAAC,YAAY,EAAEA,QAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAC7C;CACA,IAAI;AACJ;CACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACxD;CACA,IAAI,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;CAC7B,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACxB;CACA,IAAI;AACJ;CACA,GAAG,MAAM;AACT;CACA;CACA,GAAG,IAAI,CAAC,YAAY,EAAEA,QAAM,EAAE,QAAQ,EAAE,CAAC;AACzC;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA;CACA;CACA,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,aAAa,GAAG,EAAE,CAAC,GAAG;AAC7D;CACA,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;AAC3C;CACA;CACA,EAAE,IAAI,iBAAiB,GAAG,IAAI,CAAC;CAC/B,EAAE,KAAK,QAAQ,KAAK,IAAI,GAAG;AAC3B;CACA,GAAG,iBAAiB,GAAG,WAAW,CAAC;CACnC,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;CACtC,GAAG,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC;AACxC;CACA,GAAG;AACH;CACA;CACA,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACvD;CACA,GAAG,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC;CAC9B,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;AAC3B;CACA;CACA,GAAG,KAAK,iBAAiB,GAAG;AAC5B;CACA,IAAI,KAAK,EAAE,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG;AACtE;CACA,KAAK,SAAS;AACd;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,IAAI,UAAU,GAAG,CAAC,CAAC;CACtB,GAAG,IAAI,cAAc,GAAG,EAAE,CAAC,CAAC;CAC5B,GAAG,IAAI,YAAY,GAAG,CAAC,CAAC;CACxB,GAAG,IAAI,YAAY,GAAG,KAAK,CAAC;CAC5B,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC3B,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAClC;CACA;CACA,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;CAChC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;CACjC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;AACnC;CACA;CACA;CACA,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;CAC3D,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;CACvD,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,gBAAgB,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,gBAAgB,GAAG;AAC9F;CACA,KAAK,YAAY,GAAG,IAAI,CAAC;CACzB,KAAK,MAAM;AACX;CACA,KAAK;AACL;CACA;CACA,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,gBAAgB,GAAG;AACpD;CACA,KAAK,SAAS;AACd;CACA,KAAK;AACL;CACA,IAAI,KAAK,SAAS,GAAG,CAAC,GAAG;AACzB;CACA,KAAK,YAAY,GAAG,CAAC;AACrB;CACA,KAAK;AACL;CACA;CACA;CACA;CACA;CACA,IAAI,IAAI,YAAY,GAAG,EAAE,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,EAAED,MAAI,EAAE,CAAC;CAC9D,IAAI,KAAK,EAAE,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,gBAAgB,GAAG;AACpE;CACA,KAAKA,MAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;CAC5B,KAAK,YAAY,GAAG,IAAI,CAAC;AACzB;CACA,KAAK;AACL;CACA;CACA,IAAI,KAAK,YAAY,IAAI,IAAIA,MAAI,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG;AAC1E;CACA;CACA;CACA,KAAK,KAAKA,MAAI,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG;AACnD;CACA,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB;CACA,MAAM;AACN;CACA;CACA,KAAK,KAAK,UAAU,KAAK,CAAC,GAAG;AAC7B;CACA,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAEA,MAAI,EAAE,CAAC;AACpC;CACA,MAAM,MAAM;AACZ;CACA,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAEA,MAAI,EAAE,CAAC;AAClC;CACA,MAAM;AACN;CACA,KAAK,UAAU,GAAG,CAAC;AACnB;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,KAAK,YAAY,GAAG;AACvB;CACA,IAAI,SAAS;AACb;CACA,IAAI;AACJ;CACA;CACA;CACA;CACA;CACA,GAAG,KAAK,UAAU,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,GAAG,gBAAgB,GAAG;AACvE;CACA,IAAI,KAAK,cAAc,KAAK,EAAE,CAAC,GAAG;AAClC;CACA,KAAK,cAAc,GAAG,EAAE,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC;AACjD;CACA;CACA,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;CACxB,KAAK,KAAK,UAAU,KAAK,cAAc,GAAG,UAAU,GAAG,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9E;CACA,KAAK,IAAI,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;CACrC,KAAK,KAAK,UAAU,KAAK,cAAc,GAAG,UAAU,GAAG,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9E;CACA,KAAK,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;CAChD,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC;CACzC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC;CACtC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;AACxC;CACA,KAAK,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG;AACzC;CACA,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC;CACA,MAAM;AACN;CACA,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC;CACrC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;CACpC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC;AAClC;CACA,KAAK,KAAK,eAAe,EAAE,GAAG,EAAE,GAAG;AACnC;CACA,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC/B,MAAM,CAAC,GAAG,CAAC;CACX,MAAM,CAAC,GAAG,CAAC;AACX;CACA,MAAM;AACN;CACA,KAAK,MAAM;AACX;CACA;CACA,KAAK,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI;AAC5C;CACA,MAAM,KAAK,YAAY,IAAI,CAAC,GAAG;AAC/B;CACA,OAAO,OAAO,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C;CACA,OAAO,MAAM;AACb;CACA,OAAO,OAAO,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C;CACA,OAAO;AACP;CACA,MAAM,EAAE,CAAC;AACT;CACA,KAAK,KAAK,UAAU,KAAK,CAAC,GAAG;AAC7B;CACA,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;CACjC,MAAM,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;CACxC,MAAM,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;AAC3B;CACA,MAAM,MAAM,KAAK,UAAU,KAAK,EAAE,CAAC,GAAG;AACtC;CACA,MAAM,SAAS;AACf;CACA,MAAM;AACN;CACA,KAAK,MAAM,SAAS,GAAG,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;CAC9C,KAAK,MAAM,SAAS,GAAG,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9C;CACA,KAAK,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;CACjD,KAAK,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;AACjD;CACA;CACA,KAAK,KAAK,GAAG,EAAE,SAAS,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG;AAC1H;CACA,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC;AACxC;CACA,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;AAC1C;CACA,MAAM,MAAM;AACZ;CACA,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC;AACxC;CACA,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CAC1C,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC;AACxC;CACA,MAAM;AACN;CACA,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC;CACrC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC;CAClC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;AACpC;CACA;CACA,KAAK,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG;AAC1C;CACA,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACjC;CACA,MAAM;AACN;CACA,KAAK,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG;AAC1C;CACA,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACjC;CACA,MAAM;AACN;CACA,KAAK,KAAK,eAAe,EAAE,GAAG,EAAE,GAAG;AACnC;CACA,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC/B,MAAM,CAAC,GAAG,CAAC;CACX,MAAM,CAAC,GAAG,CAAC;AACX;CACA,MAAM;AACN;CACA,KAAK;AACL;CACA,IAAI,MAAM,KAAK,UAAU,KAAK,CAAC,GAAG;AAClC;CACA,IAAI,OAAO,CAAC,IAAI,EAAE,4CAA4C,EAAE,CAAC;AACjE;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B;CACA,EAAE;AACF;CACA;;CCrZA;CACO,MAAM,eAAe,CAAC;AAC7B;CACA,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,GAAG,GAAG;AACxC;CACA,EAAE,MAAM,UAAU,GAAG,8BAA8B,EAAE,GAAG,iBAAiB,GAAG,WAAW,CAAC;AACxF;CACA,EAAE,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;CAC7B,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;CACnB,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;CAClF,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB;CACA,EAAE;AACF;CACA,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG;AACvB;CACA,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;AAChD;CACA,EAAE,KAAK,IAAI,KAAK,IAAI,GAAG;AACvB;CACA,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;AACjD;CACA,GAAG;AACH;CACA,EAAE,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;CACpC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;CAC3B,EAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;AACxB;CACA,EAAE;AACF;CACA,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG;AACjB;CACA,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/B,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG;AAC7C;CACA,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;CACjB,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACtB;CACA,GAAG;AACH;CACA,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAClD;CACA,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;AACnC;CACA,GAAG;AACH;CACA,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;AAC7B;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClB;CACA,EAAE;AACF;CACA;;CCxDA;CACO,MAAM,kBAAkB,CAAC;AAChC;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,eAAe,GAAG,EAAE,EAAE,EAAE,CAAC;CAChC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACtB;CACA,EAAE;AACF;CACA,CAAC,OAAO,EAAE,IAAI,GAAG;AACjB;CACA,EAAE,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;AAChD;CACA,EAAE;AACF;CACA,CAAC,cAAc,EAAE,IAAI,GAAG;AACxB;CACA,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;AAC/C;CACA,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;CACjB,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,GAAG;AAC1C;CACA,GAAG,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC,EAAE,CAAC;CACxC,GAAG,MAAM,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC;AACpC;CACA,GAAG;AACH;CACA,EAAE,OAAO,MAAM,CAAC;AAChB;CACA,EAAE;AACF;CACA,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG;AAC1B;CACA;CACA,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACnC,EAAE,KAAK,eAAe,EAAE,KAAK,EAAE,GAAG;AAClC;CACA,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;CAC5D,GAAG,OAAO,eAAe,EAAE,KAAK,EAAE,CAAC;AACnC;CACA,GAAG;AACH;CACA;CACA,EAAE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC,EAAE,CAAC;CAC3C,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;CAC3D,EAAE,QAAQ,KAAK,IAAI,eAAe,CAAC,MAAM,GAAG;AAC5C;CACA,GAAG,MAAM,UAAU,GAAG,EAAE,CAAC;CACzB,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;CACtC,GAAG,MAAM,MAAM,GAAG,IAAI,WAAW,GAAG;AACpC;CACA,IAAI,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;AACvE;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,OAAO,eAAe,EAAE,KAAK,EAAE,CAAC;AAClC;CACA,EAAE;AACF;CACA,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,GAAG;AAClC;CACA;CACA,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACnC,EAAE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC,EAAE,CAAC;CAC3C,EAAE,MAAM,aAAa,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC;CAC5C,EAAE,KAAK,EAAE,aAAa,GAAG;AACzB;CACA,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,oCAAoC,GAAG,IAAI,EAAE,0BAA0B,CAAC,EAAE,CAAC;AAChG;CACA,GAAG;AACH;CACA,EAAE,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;AAC3C;CACA,EAAE;AACF;CACA;CACA,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG;AAC/B;CACA,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACnC,EAAE,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC,EAAE,CAAC;CACvC,EAAE,MAAM,aAAa,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;CACxC,EAAE,KAAK,aAAa,GAAG;AACvB;CACA,GAAG,KAAK,aAAa,CAAC,IAAI,KAAK,IAAI,GAAG;AACtC;CACA,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC,0BAA0B,GAAG,IAAI,EAAE,2CAA2C,CAAC,EAAE,CAAC;AACxG;CACA,IAAI;AACJ;CACA,GAAG,MAAM;AACT;CACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAC9D;CACA,IAAI,eAAe,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,eAAe,EAAE,IAAI,EAAE,CAAC;AAC/D;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACtB;CACA,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACnC,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,IAAI;AACtC;CACA,GAAG,MAAM,MAAM,GAAG,IAAI,OAAO,GAAG;AAChC;CACA,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAC3B;CACA,IAAI;AACJ;AACA;CACA,GAAG,EAAE,CAAC;AACN;CACA,EAAE;AACF;CACA,CAAC,MAAM,EAAE,GAAG,GAAG;AACf;CACA,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,IAAI;AAC3C;CACA,GAAG,OAAO,OAAO,EAAE,GAAG,EAAE,CAAC;AACzB;CACA,GAAG,EAAE,CAAC;AACN;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC5B;CACA,EAAE;AACF;CACA;;CC1IA,MAAM,qBAAqB,CAAC;AAC5B;CACA,CAAC,WAAW,EAAE,GAAG,GAAG;AACpB;CACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAIN,cAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;CAC7C,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACvB;CACA,EAAE;AACF;CACA,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,GAAG;AAC3B;CACA,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,IAAIA,cAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;AACxD;CACA,EAAE;AACF;CACA,CAAC,iBAAiB,GAAG;AACrB;CACA,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;CACnB,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;CAC9B,EAAE,MAAM,MAAM,GAAG,IAAI,UAAU,GAAG;AAClC;CACA,GAAG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC;AACnC;CACA,GAAG;AACH;CACA,EAAE,OAAO,KAAK,CAAC;AACf;CACA,EAAE;AACF;CACA,CAAC;AACD;CACA,MAAM,wBAAwB,CAAC;AAC/B;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACjB;CACA,EAAE;AACF;CACA,CAAC,uBAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG;AAC/C;CACA,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;CACxB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG;AACtB;CACA,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,qBAAqB,EAAE,IAAI,EAAE,CAAC;AAClD;CACA,GAAG;AACH;CACA,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACrC;CACA,EAAE;AACF;CACA,CAAC,mBAAmB,EAAE,EAAE,GAAG,IAAI,GAAG;AAClC;CACA,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;CACxB,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjB;CACA,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG;AACrB;CACA,GAAG,KAAK,EAAE,IAAI,IAAI,GAAG;AACrB;CACA,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;AACpC;CACA,IAAI;AACJ;CACA,GAAG,MAAM;AACT;CACA,GAAG,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG;AAC7B;CACA,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AACrC;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,OAAO,GAAG,CAAC;AACb;CACA,EAAE;AACF;CACA,CAAC,kBAAkB,GAAG;AACtB;CACA,EAAE,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5D;CACA,EAAE;AACF;CACA,CAAC,sBAAsB,EAAE,EAAE,GAAG;AAC9B;CACA,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;CACxB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG;AACtB;CACA,GAAG,OAAO,EAAE,CAAC;AACb;CACA,GAAG,MAAM;AACT;CACA,GAAG,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;AACzE;AACA;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,uBAAuB,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG;AAClD;CACA,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;CACxB,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;CAC3B,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjB;CACA,EAAE,MAAM,YAAY,GAAG,GAAG,IAAI;AAC9B;CACA,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO;AAC/B;CACA,GAAG,KAAK,GAAG,KAAK,IAAI,GAAG;AACvB;CACA,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG;AACzC;CACA,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC;AAC/C;CACA,KAAK;AACL;CACA,IAAI,MAAM;AACV;CACA,IAAI,MAAM,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;CAC9C,IAAI,MAAM,MAAM,IAAI,IAAI,UAAU,GAAG;AACrC;CACA,KAAK,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG;AACjC;CACA,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;CACzB,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;AACrC;CACA,MAAM;AACN;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,CAAC;AACJ;CACA,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG;AACrB;CACA,GAAG,YAAY,EAAE,EAAE,EAAE,CAAC;AACtB;CACA,GAAG,MAAM;AACT;CACA,GAAG,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG;AAC7B;CACA,IAAI,YAAY,EAAE,GAAG,EAAE,CAAC;AACxB;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,OAAO,GAAG,CAAC;AACb;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACjB;CACA,EAAE;AACF;CACA,CAAC;AACD;CACO,MAAM,kBAAkB,CAAC;AAChC;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;CACvB,EAAE,IAAI,CAAC,mBAAmB,GAAG,IAAI,wBAAwB,EAAE,CAAC;CAC5D,EAAE,IAAI,CAAC,mBAAmB,GAAG,IAAI,wBAAwB,EAAE,CAAC;CAC5D,EAAE,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC9B;CACA,EAAE;AACF;CACA,CAAC,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG;AAChD;CACA,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;CAC5D,EAAE,mBAAmB,CAAC,uBAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;CACpE,EAAE,mBAAmB,CAAC,uBAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACpE;CACA,EAAE;AACF;CACA,CAAC,OAAO,EAAE,IAAI,GAAG;AACjB;CACA,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9C;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;CACnC,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;CACnC,EAAE,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC9B;CACA,EAAE;AACF;CACA;;CC5LA,MAAMF,SAAO,GAAG,IAAIH,aAAO,EAAE,CAAC;CAC9B,MAAM,aAAa,GAAG,IAAIe,aAAO,EAAE,CAAC;CACpC,MAAM,KAAK,GAAG,IAAIV,cAAQ,EAAE,CAAC;CAC7B,MAAM,KAAK,GAAG,IAAIA,cAAQ,EAAE,CAAC;CAC7B,MAAMD,MAAI,GAAG,IAAIC,cAAQ,EAAE,CAAC;CAC5B,MAAM,aAAa,GAAG,IAAIA,cAAQ,EAAE,CAAC;AACrC;CACA,SAAS,iBAAiB,EAAE,GAAG,GAAG;AAClC;CACA,CAAC,MAAM,MAAM,EAAE,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;AACnC;CACA,CAAC;AACD;CACA;CACA;CACO,SAAS,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,GAAG;AAC3F;CACA,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;CACtC,CAAC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,4BAA4B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjF;CACA,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;CACzB,CAAC,IAAI,eAAe,GAAG,IAAI,CAAC;AAC5B;CACA,CAAC,IAAI,WAAW,CAAC;CACjB,CAAC,WAAW,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;CACnC,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;CAC3G,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;AACrH;CACA,CAAC,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;CAC/D,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;CAC1G,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;AACpH;CACA,CAAC,OAAO;CACR,EAAE,MAAM,EAAE,YAAY;CACtB,EAAE,SAAS,EAAE,eAAe;CAC5B,EAAE,CAAC;AACH;CACA,CAAC;AACD;CACA;CACA,SAAS,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,GAAG,CAAC,GAAG;AAC9H;CACA,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1D;CACA;CACA,CAACF,SAAO;CACR,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;CACxB,GAAG,MAAM,EAAE;CACX,GAAG,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7B;CACA,CAAC,aAAa;CACd,GAAG,eAAe,EAAE,CAAC,CAAC,WAAW,EAAE;CACnC,GAAG,cAAc,EAAE,gBAAgB,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAChD;CACA,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;CAC9C,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;CACjC,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;AAClD;CACA,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;CACpC,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;CACjC,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;CAClD,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC;CACtC,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;AACzD;CACA;CACA,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACrD;CACA,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC,EAAE,CAAC;CAC3B,EAAE,MAAM,UAAU,GAAG,WAAW,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC;CAChF,EAAE,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;AAC1D;CACA;CACA,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;CACrB,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;CACrC,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;CACrC,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;CACrC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,EAAEA,SAAO,EAAE,CAAC;CACxE,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,EAAEA,SAAO,EAAE,CAAC;CACxE,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,EAAEA,SAAO,EAAE,CAAC;AACxE;CACA;CACA,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/B;CACA;CACA,EAAE,MAAM,mBAAmB,GAAG,eAAe,EAAE,EAAE,EAAE,CAAC;CACpD,EAAE,MAAM,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG;AACpE;CACA,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,mBAAmB,EAAE,EAAE,EAAE,CAAC;CAC7C,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;CACtC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;CACtC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;CACtC,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;CACjD,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;CACjD,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;CACjD,GAAG,QAAQ,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;AACrC;CACA,GAAG;AACH;CACA;CACA,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;CACvC,EAAE,MAAM,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG;AAC1D;CACA;CACA,GAAG,MAAM,UAAU,GAAG,SAAS,EAAE,EAAE,EAAE,CAAC;AACtC;CACA;CACA;CACA,GAAG,MAAM,OAAO,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;CAClD,GAAG,MAAM,MAAM,GAAG,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnE,GAAG,KAAK,MAAM,KAAK,QAAQ,GAAG;AAC9B;CACA,IAAI,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;CACxD,IAAI,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;CACxD,IAAI,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;AACxD;CACA,IAAI,MAAM,SAAS,GAAG,MAAM,KAAK,UAAU,CAAC;CAC5C,IAAI,2BAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,KAAK,SAAS,EAAE,CAAC;AACxI;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC;AACxB;CACA,CAAC;AACD;CACA;CACA;CACA;AACA;CACA,SAAS,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,CAAC,GAAG;AAChH;CACA,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1D;CACA;CACA,CAACA,SAAO;CACR,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;CACxB,GAAG,MAAM,EAAE;CACX,GAAG,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7B;CACA,CAAC,aAAa;CACd,GAAG,eAAe,EAAE,CAAC,CAAC,WAAW,EAAE;CACnC,GAAG,cAAc,EAAE,gBAAgB,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAChD;CACA,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;CACpC,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;CAC9C,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;CACjC,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;CAC3C,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC;AACxC;CACA,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;CAClB,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;CACxC,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;CAC/B,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACtD;CACA,EAAE,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,GAAG;AAChD;CACA,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AACxB;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA,CAAC,QAAQ,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG;AAChC;CACA,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,CAAC;CAC9C,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;AAC3B;CACA,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;AACnB;CACA;CACA,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;CACpB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CACnC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CACnC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AACnC;CACA;CACA;CACA,EAAEC,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,YAAY,EAAED,SAAO,EAAE,CAAC;CACtE,EAAEC,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,YAAY,EAAED,SAAO,EAAE,CAAC;CACtE,EAAEC,MAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,YAAY,EAAED,SAAO,EAAE,CAAC;AACtE;CACA;CACA,EAAE,MAAM,OAAO,GAAG,UAAU,EAAEC,MAAI,EAAE,IAAI,EAAE,CAAC;CAC3C,EAAE,MAAM,MAAM,GAAG,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAClE;CACA,EAAE,QAAQ,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG;AAC7B;CACA,GAAG,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;CAC9B,GAAG,MAAM,UAAU,GAAG,WAAW,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;CACrF,GAAG,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;AAC3D;CACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAClC;CACA,IAAI,MAAM,GAAG,GAAG,SAAS,CAAC,uBAAuB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;CAC/D,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;AACjD;CACA,KAAK,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;CACvB,KAAK,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/B;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,KAAK,MAAM,KAAK,QAAQ,GAAG;AAC9B;CACA,IAAI,SAAS;AACb;CACA,IAAI;AACJ;CACA,GAAG,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;CACzB,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CACpC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CACpC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;CACpC,GAAG,MAAM,SAAS,GAAG,MAAM,KAAK,UAAU,CAAC;CAC3C,GAAG,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,KAAK,gBAAgB,EAAE,CAAC;AACjI;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA;;CCjOA;CACA;CACA;CACA,SAAS,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG;AAC/E;CACA,CAAC,IAAI,aAAa,GAAG,KAAK,CAAC;CAC3B,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC;CACrB,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC;AAC7C;CACA;CACA,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;CACxC,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;CACxD,CAAC,MAAM,MAAM,GAAG,IAAI,WAAW,GAAG;AAClC;CACA,EAAE,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;CACzE,EAAE,MAAM,IAAI,GAAG,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;CACvC,EAAE,IAAI,IAAI,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC;CAC/B,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,GAAG;AACtD;CACA;CACA,GAAG,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;CACvD,GAAG,IAAI,GAAG,IAAIY,qBAAe,EAAE,IAAI,IAAI,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;CAClG,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;CACtC,GAAG,aAAa,GAAG,IAAI,CAAC;AACxB;CACA,GAAG;AACH;CACA,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;CACjB,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,GAAG;AAC1C;CACA,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;CAC7E,GAAG,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5D,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1C,GAAG,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC;AACjC;CACA,GAAG;AACH;CACA,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;CAC1B,EAAE,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7C;CACA,EAAE;AACF;CACA;CACA,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;CACvC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AACxB;CACA,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC;CACrB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,GAAG;AACzC;CACA,EAAE,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;CAC3E,EAAE,KAAK,QAAQ,KAAK,CAAC,GAAG;AACxB;CACA,GAAG,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;CAC7B,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;CACnE,GAAG,WAAW,IAAI,QAAQ,CAAC;AAC3B;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA;CACA,CAAC,KAAK,QAAQ,CAAC,KAAK,GAAG;AACvB;CACA,EAAE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;CAC1C,EAAE,KAAK,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG;AACvC;CACA,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;CACzB,GAAG,aAAa,GAAG,IAAI,CAAC;AACxB;CACA,GAAG,MAAM;AACT;CACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACzD;CACA,IAAI,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACxB;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE;AACF;CACA;CACA;CACA,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAC5B;CACA,CAAC,KAAK,aAAa,GAAG;AACtB;CACA,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;AACrB;CACA,EAAE;AACF;CACA,CAAC,OAAO,QAAQ,CAAC;AACjB;CACA,CAAC;AACD;CACA,SAAS,eAAe,EAAE,MAAM,EAAE,SAAS,GAAG;AAC9C;CACA,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC;CACxB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;AACrC;CACA,EAAE,MAAM,GAAG,EAAE,CAAC;CACd,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI;AACvB;CACA,GAAG,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;AACzC;CACA,GAAG,EAAE,CAAC;AACN;CACA,EAAE;AACF;CACA,CAAC,OAAO,MAAM,CAAC;AACf;CACA,CAAC;AACD;CACA;CACO,MAAM,SAAS,CAAC;AACvB;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;CACjD,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;CAChD,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;CACnD,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;CACxB,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACxC;CACA,EAAE;AACF;CACA,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,KAAK,EAAE,GAAG;AACxD;CACA,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;CACtB,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;AACtB;CACA,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;CACjF,EAAE,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC;CAC9C,EAAE,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;CAC5C,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACxD;CACA,GAAG,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC;CAC/B,GAAG,MAAM,IAAI,GAAG,WAAW,EAAE,GAAG,EAAE,CAAC;CACnC,GAAG,aAAa,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAChE;CACA,GAAG;AACH;CACA,EAAE,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,UAAU,GAAG;AAChD;CACA,GAAG,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG;AACvC;CACA,IAAI,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;AAChC;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,UAAU,GAAG;AACjD;CACA,GAAG,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG;AACvC;CACA,IAAI,cAAc,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC;CAC1C,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;AAC7B;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB;CACA,EAAE,KAAK,KAAK,CAAC,OAAO,GAAG;AACvB;CACA,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;CACjB,GAAG,eAAe,EAAE,KAAK,EAAE,CAAC;AAC5B;CACA,GAAG;AACH;CACA,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;AACtF;CACA,EAAE,KAAK,KAAK,CAAC,OAAO,GAAG;AACvB;CACA,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;AAC3B;CACA,GAAG;AACH;CACA;CACA,EAAE,MAAM,OAAO,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;CAC/D,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE;CACtD,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC;AACtD;CACA,EAAE,MAAM,OAAO,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;CAC/D,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE;CACtD,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC;AACtD;CACA;CACA,EAAE,MAAM,UAAU,GAAG,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;CAC5D,EAAE,MAAM,UAAU,GAAG,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5D;CACA;CACA,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI;AACxB;CACA,GAAG,CAAC,CAAC,aAAa,IAAI,UAAU,CAAC,MAAM,CAAC;AACxC;CACA,GAAG,EAAE,CAAC;AACN;CACA;CACA,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC;AAC3F;CACA;CACA;CACA,EAAE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;CACvC,EAAE,KAAK,SAAS,GAAG;AACnB;CACA,GAAG,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;CACjC,GAAG,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;AACzD;CACA;CACA,GAAG,IAAI,QAAQ,GAAG,CAAC,CAAC;CACpB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AAC3D;CACA,IAAI,MAAM,UAAU,GAAG,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,EAAE,EAAE,CAAC;CACpF,IAAI,KAAK,EAAE,UAAU,GAAG;AACxB;CACA,KAAK,YAAY,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;AAC9B;CACA,KAAK,MAAM;AACX;CACA,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;CACpC,KAAK,QAAQ,GAAG,CAAC;AACjB;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA;CACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACrD;CACA,IAAI,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;CAC9B,IAAI,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;AACjE;CACA,IAAI;AACJ;CACA,GAAG,WAAW,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACtE;CACA,GAAG;AACH;CACA,EAAE,OAAO,WAAW,CAAC;AACrB;CACA,EAAE;AACF;CACA,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,EAAE,GAAG;AACjD;CACA,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;AACjC;CACA,EAAE,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM;AACtC;CACA,GAAG,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;CACjC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACvD;CACA,IAAI,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,EAAE,CAAC;CAChC,IAAI,KAAK,KAAK,CAAC,gBAAgB,GAAG;AAClC;CACA,KAAK,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC/B;CACA,KAAK,MAAM;AACX;CACA,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;AACjB;CACA,KAAK;AACL;CACA,IAAI;AACJ;CACA,GAAG,CAAC;AACJ;AACA;CACA,EAAE,MAAM,QAAQ,GAAG,KAAK,IAAI;AAC5B;CACA,GAAG,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;CACnC,GAAG,IAAI,SAAS,GAAG,KAAK,CAAC;CACzB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACvD;CACA,IAAI,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,EAAE,CAAC;CAChC,IAAI,SAAS,GAAG,QAAQ,EAAE,KAAK,EAAE,IAAI,SAAS,CAAC;AAC/C;CACA,IAAI;AACJ;CACA,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;CACnC,GAAG,KAAK,OAAO,GAAG;AAClB;CACA,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AACxB;CACA,IAAI;AACJ;CACA,GAAG,KAAK,SAAS,IAAI,EAAE,KAAK,CAAC,gBAAgB,GAAG;AAChD;CACA,IAAI,IAAI,MAAM,CAAC;CACf,IAAI,YAAY,EAAE,KAAK,EAAE,KAAK,IAAI;AAClC;CACA,KAAK,KAAK,EAAE,MAAM,GAAG;AACrB;CACA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAC9D;CACA,MAAM,MAAM;AACZ;CACA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAC/D;CACA,MAAM;AACN;CACA,KAAK,EAAE,CAAC;AACR;CACA,IAAI,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC;CAC5C,IAAI,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;CAC7C,IAAI,OAAO,IAAI,CAAC;AAChB;CACA,IAAI,MAAM;AACV;CACA,IAAI,OAAO,SAAS,IAAI,OAAO,CAAC;AAChC;CACA,IAAI;AACJ;CACA,GAAG,CAAC;AACJ;CACA,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACnB;CACA,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;CACzC,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC1C;CACA,EAAE,OAAO,MAAM,CAAC;AAChB;CACA,EAAE;AACF;CACA,CAAC,KAAK,GAAG;AACT;CACA,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAChC;CACA,EAAE;AACF;CACA;;CChVO,MAAM,SAAS,SAAS,KAAK,CAAC;AACrC;CACA,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG;AACxB;CACA,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;AACnB;CACA,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;CAC1B,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC5B;CACA,EAAE,IAAI,CAAC,eAAe,GAAG,IAAIC,oBAAc,EAAE,CAAC;CAC9C,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAC/B,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACjC;CACA,EAAE;AACF;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;CACtB,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3C;CACA,EAAE;AACF;CACA,CAAC,OAAO,GAAG;AACX;CACA,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACvE;CACA,EAAE;AACF;CACA,CAAC,YAAY,EAAE,KAAK,GAAG;AACvB;CACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;CAC7B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;CAChD,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAC5C;CACA,EAAE;AACF;CACA,CAAC,WAAW,EAAE,KAAK,GAAG;AACtB;CACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;CAC7B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;CAChD,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAChD;CACA,EAAE;AACF;CACA;;CC9CO,MAAM,cAAc,SAASC,WAAK,CAAC;AAC1C;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,KAAK,EAAE,CAAC;CACV,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAC/B,EAAE,IAAI,CAAC,eAAe,GAAG,IAAIlB,aAAO,EAAE,CAAC;AACvC;CACA,EAAE;AACF;CACA,CAAC,WAAW,GAAG;AACf;CACA,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3C;CACA,EAAE;AACF;CACA,CAAC,OAAO,GAAG;AACX;CACA,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CAC3C,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;CAC9B,EAAE,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC;CACvC,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG;AAClC;CACA,GAAG,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,EAAE,GAAG;AAChC;CACA,IAAI,OAAO,IAAI,CAAC;AAChB;CACA,IAAI;AACJ;CACA,GAAG;AACH;CACA,EAAE,OAAO,KAAK,CAAC;AACf;CACA,EAAE;AACF;CACA;;CCnCA,SAAS,gBAAgB,EAAE,MAAM,GAAG;AACpC;CACA,CAAC,KAAK,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,OAAO;AACxE;CACA,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;AACxB;AACA,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC;AACzB,EAAE,CAAC,CAAC,OAAO;CACX,EAAE,mCAAmC;CACrC,EAAE,CAAC;CACH,GAAG,CAAC,EAAE,CAAC,CAAC;AACR;AACA,IAAI,CAAC;CACL,EAAE,CAAC;AACH;CACA,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC;AAC1B;AACA,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC;AAC1B,EAAE,CAAC,CAAC;AACJ;CACA,CAAC,OAAO,MAAM,CAAC;AACf;CACA,CAAC;AACD;CACO,SAAS,kBAAkB,EAAE,MAAM,GAAG;AAC7C;CACA,CAAC,MAAM,CAAC,QAAQ,GAAG;CACnB,EAAE,GAAG,MAAM,CAAC,QAAQ;CACpB,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAImB,WAAK,EAAE,QAAQ,EAAE,EAAE;CACrD,EAAE,CAAC;AACH;CACA,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;AAC5B;CACA,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAClC;CACA,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO;CACtD,EAAE,mBAAmB;CACrB,EAAE,CAAC;CACH,YAAY,CAAC;AACb,GAAG,EAAE,CAAC,CAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,CAAC,OAAO;CACb,EAAE,iCAAiC;CACnC,EAAE,CAAC;CACH,YAAY,CAAC,EAAE,CAAC,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;CACL,EAAE,CAAC;AACH;CACA,CAAC,OAAO,MAAM,CAAC;AACf;CA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"}