@mlightcad/geometry-engine 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- (function(Y,te){typeof exports=="object"&&typeof module<"u"?te(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],te):(Y=typeof globalThis<"u"?globalThis:Y||self,te(Y["geometry-engine"]={},Y.common))})(this,function(Y,te){"use strict";const Ht=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let Ur=1234567;const hr=Math.PI/180,lr=180/Math.PI;function Rr(){const E=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0,a=Math.random()*4294967295|0;return(Ht[E&255]+Ht[E>>8&255]+Ht[E>>16&255]+Ht[E>>24&255]+"-"+Ht[e&255]+Ht[e>>8&255]+"-"+Ht[e>>16&15|64]+Ht[e>>24&255]+"-"+Ht[i&63|128]+Ht[i>>8&255]+"-"+Ht[i>>16&255]+Ht[i>>24&255]+Ht[a&255]+Ht[a>>8&255]+Ht[a>>16&255]+Ht[a>>24&255]).toLowerCase()}function Be(E,e,i){return Math.max(e,Math.min(i,E))}function ur(E,e){return(E%e+e)%e}function Vr(E,e,i,a,u){return a+(E-e)*(u-a)/(i-e)}function Dr(E,e,i){return E!==e?(i-E)/(e-E):0}function cr(E,e,i){return(1-i)*E+i*e}function Fr(E,e,i,a){return cr(E,e,1-Math.exp(-i*a))}function Or(E,e=1){return e-Math.abs(ur(E,e*2)-e)}function qr(E,e,i){return E<=e?0:E>=i?1:(E=(E-e)/(i-e),E*E*(3-2*E))}function Gr(E,e,i){return E<=e?0:E>=i?1:(E=(E-e)/(i-e),E*E*E*(E*(E*6-15)+10))}function Kr(E,e){return E+Math.floor(Math.random()*(e-E+1))}function jr(E,e){return E+Math.random()*(e-E)}function Xr(E){return E*(.5-Math.random())}function Wr(E){E!==void 0&&(Ur=E);let e=Ur+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function Zr(E){return E*hr}function Yr(E){return E*lr}function Hr(E){return(E&E-1)===0&&E!==0}function Qr(E){return Math.pow(2,Math.ceil(Math.log(E)/Math.LN2))}function Jr(E){return Math.pow(2,Math.floor(Math.log(E)/Math.LN2))}function Mn(E){const e=Math.PI*2;return(E%e+e)%e}function $r(E,e,i){return E>e&&E<i||E>i&&E<e}function ti(E,e,i,a=!1){return E=Mn(E),e=Mn(e),i=Mn(i),a?e>i?E<=e&&E>=i:E<=e||E>=i:e<i?E>=e&&E<=i:E>=e||E<=i}function vr(E){return E=Math.abs(E),E<1?0:Math.ceil(Math.log10(Math.abs(E)+1))}function ei(E,e=1e-7){const i=vr(E);return Math.max(Math.pow(10,i)*e,e)}const Ut={DEG2RAD:hr,RAD2DEG:lr,generateUUID:Rr,clamp:Be,euclideanModulo:ur,mapLinear:Vr,inverseLerp:Dr,lerp:cr,damp:Fr,pingpong:Or,smoothstep:qr,smootherstep:Gr,randInt:Kr,randFloat:jr,randFloatSpread:Xr,seededRandom:Wr,degToRad:Zr,radToDeg:Yr,isPowerOfTwo:Hr,ceilPowerOfTwo:Qr,floorPowerOfTwo:Jr,normalizeAngle:Mn,isBetween:$r,isBetweenAngle:ti,intPartLength:vr,relativeEps:ei},Nn=class Nn{constructor(e,i){this.x=0,this.y=0;const a=+(e!==void 0)+ +(i!==void 0);if(a!==0){if(a===1&&e instanceof Array){this.x=e[0],this.y=e[1];return}if(a===1){const{x:u,y:_}=e;this.x=u,this.y=_;return}if(a===2){this.x=e,this.y=i;return}throw te.AcCmErrors.ILLEGAL_PARAMETERS}}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,i){return this.x=e,this.y=i,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,i){switch(e){case 0:this.x=i;break;case 1:this.y=i;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new Nn(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,i){return this.x=e.x+i.x,this.y=e.y+i.y,this}addScaledVector(e,i){return this.x+=e.x*i,this.y+=e.y*i,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,i){return this.x=e.x-i.x,this.y=e.y-i.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix2d(e){const i=this.x,a=this.y,u=e.elements;return this.x=u[0]*i+u[3]*a+u[6],this.y=u[1]*i+u[4]*a+u[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,i){return this.x=Math.max(e.x,Math.min(i.x,this.x)),this.y=Math.max(e.y,Math.min(i.y,this.y)),this}clampScalar(e,i){return this.x=Math.max(e,Math.min(i,this.x)),this.y=Math.max(e,Math.min(i,this.y)),this}clampLength(e,i){const a=this.length();return this.divideScalar(a||1).multiplyScalar(Math.max(e,Math.min(i,a)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const i=Math.sqrt(this.lengthSq()*e.lengthSq());if(i===0)return Math.PI/2;const a=this.dot(e)/i;return Math.acos(Math.max(-1,Math.min(1,a)))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const i=this.x-e.x,a=this.y-e.y;return i*i+a*a}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,i){return this.x+=(e.x-this.x)*i,this.y+=(e.y-this.y)*i,this}lerpVectors(e,i,a){return this.x=e.x+(i.x-e.x)*a,this.y=e.y+(i.y-e.y)*a,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,i=0){return this.x=e[i],this.y=e[i+1],this}toArray(e=[],i=0){return e[i]=this.x,e[i+1]=this.y,e}rotateAround(e,i){const a=Math.cos(i),u=Math.sin(i),_=this.x-e.x,y=this.y-e.y;return this.x=_*a-y*u+e.x,this.y=_*u+y*a+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(e=1e-7){return Math.min(Ut.relativeEps(this.x,e),Ut.relativeEps(this.y,e))}*[Symbol.iterator](){yield this.x,yield this.y}};Nn.EMPTY=Object.freeze(new Nn(0,0));let Bt=Nn;const En=class En{constructor(e,i,a,u,_,y,g,x,f){this.elements=[1,0,0,0,1,0,0,0,1],e!=null&&i!=null&&a!=null&&u!=null&&_!=null&&y!=null&&g!=null&&x!=null&&f!=null&&this.set(e,i,a,u,_,y,g,x,f)}set(e,i,a,u,_,y,g,x,f){const A=this.elements;return A[0]=e,A[1]=u,A[2]=g,A[3]=i,A[4]=_,A[5]=x,A[6]=a,A[7]=y,A[8]=f,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const i=this.elements,a=e.elements;return i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[8]=a[8],this}extractBasis(e,i,a){return e.setFromMatrix3Column(this,0),i.setFromMatrix3Column(this,1),a.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const i=e.elements;return this.set(i[0],i[4],i[8],i[1],i[5],i[9],i[2],i[6],i[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,i){const a=e.elements,u=i.elements,_=this.elements,y=a[0],g=a[3],x=a[6],f=a[1],A=a[4],p=a[7],N=a[2],k=a[5],U=a[8],K=u[0],H=u[3],W=u[6],wt=u[1],Pt=u[4],mt=u[7],Z=u[2],ct=u[5],lt=u[8];return _[0]=y*K+g*wt+x*Z,_[3]=y*H+g*Pt+x*ct,_[6]=y*W+g*mt+x*lt,_[1]=f*K+A*wt+p*Z,_[4]=f*H+A*Pt+p*ct,_[7]=f*W+A*mt+p*lt,_[2]=N*K+k*wt+U*Z,_[5]=N*H+k*Pt+U*ct,_[8]=N*W+k*mt+U*lt,this}multiplyScalar(e){const i=this.elements;return i[0]*=e,i[3]*=e,i[6]*=e,i[1]*=e,i[4]*=e,i[7]*=e,i[2]*=e,i[5]*=e,i[8]*=e,this}determinant(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],y=e[4],g=e[5],x=e[6],f=e[7],A=e[8];return i*y*A-i*g*f-a*_*A+a*g*x+u*_*f-u*y*x}invert(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],y=e[4],g=e[5],x=e[6],f=e[7],A=e[8],p=A*y-g*f,N=g*x-A*_,k=f*_-y*x,U=i*p+a*N+u*k;if(U===0)return this.set(0,0,0,0,0,0,0,0,0);const K=1/U;return e[0]=p*K,e[1]=(u*f-A*a)*K,e[2]=(g*a-u*y)*K,e[3]=N*K,e[4]=(A*i-u*x)*K,e[5]=(u*_-g*i)*K,e[6]=k*K,e[7]=(a*x-f*i)*K,e[8]=(y*i-a*_)*K,this}transpose(){let e;const i=this.elements;return e=i[1],i[1]=i[3],i[3]=e,e=i[2],i[2]=i[6],i[6]=e,e=i[5],i[5]=i[7],i[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const i=this.elements;return e.elements[0]=i[0],e.elements[1]=i[3],e.elements[2]=i[6],e.elements[3]=i[1],e.elements[4]=i[4],e.elements[5]=i[7],e.elements[6]=i[2],e.elements[7]=i[5],e.elements[8]=i[8],this}setUvTransform(e,i,a,u,_,y,g){const x=Math.cos(_),f=Math.sin(_);return this.set(a*x,a*f,-a*(x*y+f*g)+y+e,-u*f,u*x,-u*(-f*y+x*g)+g+i,0,0,1),this}scale(e,i){return this.premultiply(_r.makeScale(e,i)),this}rotate(e){return this.premultiply(_r.makeRotation(-e)),this}translate(e,i){return this.premultiply(_r.makeTranslation(e,i)),this}makeTranslation(e,i){return e instanceof Bt?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,i,0,0,1),this}makeRotation(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,-a,0,a,i,0,0,0,1),this}makeScale(e,i){return this.set(e,0,0,0,i,0,0,0,1),this}equals(e){const i=this.elements,a=e.elements;for(let u=0;u<9;u++)if(i[u]!==a[u])return!1;return!0}fromArray(e,i=0){for(let a=0;a<9;a++)this.elements[a]=e[a+i];return this}toArray(e=[],i=0){const a=this.elements;return e[i]=a[0],e[i+1]=a[1],e[i+2]=a[2],e[i+3]=a[3],e[i+4]=a[4],e[i+5]=a[5],e[i+6]=a[6],e[i+7]=a[7],e[i+8]=a[8],e}clone(){return new En().fromArray(this.elements)}};En.IDENTITY=Object.freeze(new En);let sn=En;const _r=new sn,He=1e-6,Kt=2*Math.PI,Bi={x:0,y:0},dr={x:0,y:0,z:0};class fr{constructor(){this.equalPointTol=He,this.equalVectorTol=He}equalPoint2d(e,i){return new Bt(e).sub(i).length()<this.equalPointTol}equalPoint3d(e,i){return new Q(e).sub(i).length()<this.equalPointTol}static equalToZero(e,i=He){return e<i&&e>-i}static equal(e,i,a=He){return Math.abs(e-i)<a}static great(e,i,a=He){return e-i>a}static less(e,i,a=He){return e-i<a}}const mr=new fr;function gr(E,e,i=!1){const a=E.x,u=E.y;let _=!1;const y=e.length;for(let g=0,x=y-1;g<y;x=g++){const f=e[g].x,A=e[g].y,p=e[x].x,N=e[x].y;let k=A>u!=N>u;i&&(k=A>=u!=N>=u),k&&a<(p-f)*(u-A)/(N-A)+f&&(_=!_)}return _}function ni(E,e){if(E.length===0||e.length===0)return!1;const i=new de().setFromPoints(E),a=new de().setFromPoints(e);if(!i.intersectsBox(a))return!1;for(let u=0;u<E.length;){if(gr(E[u],e,!0))return!0;u<E.length-1&&mr.equalPoint2d(E[u+1],E[u])&&++u,++u}return!1}const ri={isPointInPolygon:gr,isPolygonIntersect:ni};function ii(E,e){const i=[],a=e-1,u=E;for(let _=0;_<=u;_++)i.push(0);for(let _=1;_<=a-u;_++)i.push(_);for(let _=0;_<=u;_++)i.push(a-u+1);return i}function si(E,e){const i=e.length-1,a=E,u=[0];let _=0;for(let g=1;g<=i;g++){const x=e[g][0]-e[g-1][0],f=e[g][1]-e[g-1][1],A=e[g][2]-e[g-1][2],p=Math.sqrt(x*x+f*f+A*A);_+=p,u.push(_)}const y=[];for(let g=0;g<=a;g++)y.push(0);for(let g=1;g<=i-a;g++){const x=u[g]/_;y.push(x*(i-a+1))}for(let g=0;g<=a;g++)y.push(i-a+1);return y}function ai(E,e){const i=e.length-1,a=E,u=[0];let _=0;for(let g=1;g<=i;g++){const x=e[g][0]-e[g-1][0],f=e[g][1]-e[g-1][1],A=e[g][2]-e[g-1][2],p=Math.sqrt(x*x+f*f+A*A),N=Math.sqrt(p);_+=N,u.push(_)}const y=[];for(let g=0;g<=a;g++)y.push(0);for(let g=1;g<=i-a;g++){const x=u[g]/_;y.push(x*(i-a+1))}for(let g=0;g<=a;g++)y.push(i-a+1);return y}function nr(E,e,i,a){if(e===0)return i>=a[E]&&i<a[E+1]?1:0;const u=a[E+e]-a[E],_=a[E+e+1]-a[E+1],y=u>1e-10?(i-a[E])/u:0,g=_>1e-10?(a[E+e+1]-i)/_:0;return y*nr(E,e-1,i,a)+g*nr(E+1,e-1,i,a)}function Pn(E,e,i,a,u){const _=a.length-1,y=e;if(E=Math.max(i[y],Math.min(i[_+1],E)),Math.abs(E-i[_+1])<1e-8)return[...a[_]];if(Math.abs(E-i[y])<1e-8)return[...a[0]];const g=[0,0,0];let x=0;for(let f=0;f<=_;f++){const A=nr(f,y,E,i),p=u[f]*A;g[0]+=a[f][0]*p,g[1]+=a[f][1]*p,g[2]+=a[f][2]*p,x+=p}if(x<1e-10){const f=i[i.length-y-1];if(Math.abs(E-f)<1e-8)return[...a[_]];if(Math.abs(E-i[y])<1e-8)return[...a[0]]}return x>1e-10&&(g[0]/=x,g[1]/=x,g[2]/=x),g}function oi(E,e,i,a){const u=E,_=e[u],y=e[e.length-u-1];let g=0;const x=1e3,f=(y-_)/x;let A=Pn(_,E,e,i,a);for(let K=1;K<=x;K++){const H=_+K*f,W=Pn(H,E,e,i,a),wt=W[0]-A[0],Pt=W[1]-A[1],mt=W[2]-A[2];g+=Math.sqrt(wt*wt+Pt*Pt+mt*mt),A=W}const p=Pn(y,E,e,i,a),N=p[0]-A[0],k=p[1]-A[1],U=p[2]-A[2];return g+=Math.sqrt(N*N+k*k+U*U),g}function Li(E){return E.map(e=>[...e])}class An{constructor(e=0,i=0,a=0,u=1){this._x=e,this._y=i,this._z=a,this._w=u}static slerpFlat(e,i,a,u,_,y,g){let x=a[u+0],f=a[u+1],A=a[u+2],p=a[u+3];const N=_[y+0],k=_[y+1],U=_[y+2],K=_[y+3];if(g===0){e[i+0]=x,e[i+1]=f,e[i+2]=A,e[i+3]=p;return}if(g===1){e[i+0]=N,e[i+1]=k,e[i+2]=U,e[i+3]=K;return}if(p!==K||x!==N||f!==k||A!==U){let H=1-g;const W=x*N+f*k+A*U+p*K,wt=W>=0?1:-1,Pt=1-W*W;if(Pt>Number.EPSILON){const Z=Math.sqrt(Pt),ct=Math.atan2(Z,W*wt);H=Math.sin(H*ct)/Z,g=Math.sin(g*ct)/Z}const mt=g*wt;if(x=x*H+N*mt,f=f*H+k*mt,A=A*H+U*mt,p=p*H+K*mt,H===1-g){const Z=1/Math.sqrt(x*x+f*f+A*A+p*p);x*=Z,f*=Z,A*=Z,p*=Z}}e[i]=x,e[i+1]=f,e[i+2]=A,e[i+3]=p}static multiplyQuaternionsFlat(e,i,a,u,_,y){const g=a[u],x=a[u+1],f=a[u+2],A=a[u+3],p=_[y],N=_[y+1],k=_[y+2],U=_[y+3];return e[i]=g*U+A*p+x*k-f*N,e[i+1]=x*U+A*N+f*p-g*k,e[i+2]=f*U+A*k+g*N-x*p,e[i+3]=A*U-g*p-x*N-f*k,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,i,a,u){return this._x=e,this._y=i,this._z=a,this._w=u,this._onChangeCallback(),this}clone(){return new An(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,i=!0){const a=e.x,u=e.y,_=e.z,y=e.order,g=Math.cos,x=Math.sin,f=g(a/2),A=g(u/2),p=g(_/2),N=x(a/2),k=x(u/2),U=x(_/2);switch(y){case"XYZ":this._x=N*A*p+f*k*U,this._y=f*k*p-N*A*U,this._z=f*A*U+N*k*p,this._w=f*A*p-N*k*U;break;case"YXZ":this._x=N*A*p+f*k*U,this._y=f*k*p-N*A*U,this._z=f*A*U-N*k*p,this._w=f*A*p+N*k*U;break;case"ZXY":this._x=N*A*p-f*k*U,this._y=f*k*p+N*A*U,this._z=f*A*U+N*k*p,this._w=f*A*p-N*k*U;break;case"ZYX":this._x=N*A*p-f*k*U,this._y=f*k*p+N*A*U,this._z=f*A*U-N*k*p,this._w=f*A*p+N*k*U;break;case"YZX":this._x=N*A*p+f*k*U,this._y=f*k*p+N*A*U,this._z=f*A*U-N*k*p,this._w=f*A*p-N*k*U;break;case"XZY":this._x=N*A*p-f*k*U,this._y=f*k*p-N*A*U,this._z=f*A*U+N*k*p,this._w=f*A*p+N*k*U;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+y)}return i===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,i){const a=i/2,u=Math.sin(a);return this._x=e.x*u,this._y=e.y*u,this._z=e.z*u,this._w=Math.cos(a),this._onChangeCallback(),this}setFromRotationMatrix(e){const i=e.elements,a=i[0],u=i[4],_=i[8],y=i[1],g=i[5],x=i[9],f=i[2],A=i[6],p=i[10],N=a+g+p;if(N>0){const k=.5/Math.sqrt(N+1);this._w=.25/k,this._x=(A-x)*k,this._y=(_-f)*k,this._z=(y-u)*k}else if(a>g&&a>p){const k=2*Math.sqrt(1+a-g-p);this._w=(A-x)/k,this._x=.25*k,this._y=(u+y)/k,this._z=(_+f)/k}else if(g>p){const k=2*Math.sqrt(1+g-a-p);this._w=(_-f)/k,this._x=(u+y)/k,this._y=.25*k,this._z=(x+A)/k}else{const k=2*Math.sqrt(1+p-a-g);this._w=(y-u)/k,this._x=(_+f)/k,this._y=(x+A)/k,this._z=.25*k}return this._onChangeCallback(),this}setFromUnitVectors(e,i){let a=e.dot(i)+1;return a<Number.EPSILON?(a=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=a):(this._x=0,this._y=-e.z,this._z=e.y,this._w=a)):(this._x=e.y*i.z-e.z*i.y,this._y=e.z*i.x-e.x*i.z,this._z=e.x*i.y-e.y*i.x,this._w=a),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Be(this.dot(e),-1,1)))}rotateTowards(e,i){const a=this.angleTo(e);if(a===0)return this;const u=Math.min(1,i/a);return this.slerp(e,u),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,i){const a=e._x,u=e._y,_=e._z,y=e._w,g=i._x,x=i._y,f=i._z,A=i._w;return this._x=a*A+y*g+u*f-_*x,this._y=u*A+y*x+_*g-a*f,this._z=_*A+y*f+a*x-u*g,this._w=y*A-a*g-u*x-_*f,this._onChangeCallback(),this}slerp(e,i){if(i===0)return this;if(i===1)return this.copy(e);const a=this._x,u=this._y,_=this._z,y=this._w;let g=y*e._w+a*e._x+u*e._y+_*e._z;if(g<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,g=-g):this.copy(e),g>=1)return this._w=y,this._x=a,this._y=u,this._z=_,this;const x=1-g*g;if(x<=Number.EPSILON){const k=1-i;return this._w=k*y+i*this._w,this._x=k*a+i*this._x,this._y=k*u+i*this._y,this._z=k*_+i*this._z,this.normalize(),this}const f=Math.sqrt(x),A=Math.atan2(f,g),p=Math.sin((1-i)*A)/f,N=Math.sin(i*A)/f;return this._w=y*p+this._w*N,this._x=a*p+this._x*N,this._y=u*p+this._y*N,this._z=_*p+this._z*N,this._onChangeCallback(),this}slerpQuaternions(e,i,a){return this.copy(e).slerp(i,a)}random(){const e=2*Math.PI*Math.random(),i=2*Math.PI*Math.random(),a=Math.random(),u=Math.sqrt(1-a),_=Math.sqrt(a);return this.set(u*Math.sin(e),u*Math.cos(e),_*Math.sin(i),_*Math.cos(i))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,i=0){return this._x=e[i],this._y=e[i+1],this._z=e[i+2],this._w=e[i+3],this._onChangeCallback(),this}toArray(e=[],i=0){return e[i]=this._x,e[i+1]=this._y,e[i+2]=this._z,e[i+3]=this._w,e}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const ee=class ee{constructor(e,i,a){this.x=0,this.y=0,this.z=0;const u=+(e!==void 0)+ +(i!==void 0)+ +(a!==void 0);if(u!==0){if(u===1&&e instanceof Array){this.x=e[0],this.y=e[1],this.z=e[2];return}if(u===1){const{x:_,y,z:g}=e;this.x=_,this.y=y,this.z=g||0;return}if(u===3){this.x=e,this.y=i,this.z=a;return}throw te.AcCmErrors.ILLEGAL_PARAMETERS}}set(e,i,a){return a===void 0&&(a=this.z),this.x=e,this.y=i,this.z=a,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,i){switch(e){case 0:this.x=i;break;case 1:this.y=i;break;case 2:this.z=i;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new ee(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z||0,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z||0,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,i){return this.x=e.x+i.x,this.y=e.y+i.y,this.z=e.z+i.z,this}addScaledVector(e,i){return this.x+=e.x*i,this.y+=e.y*i,this.z+=e.z*i,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,i){return this.x=e.x-i.x,this.y=e.y-i.y,this.z=e.z-i.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,i){return this.x=e.x*i.x,this.y=e.y*i.y,this.z=e.z*i.z,this}applyEuler(e){return this.applyQuaternion(hi.setFromEuler(e))}applyAxisAngle(e,i){return this.applyQuaternion(hi.setFromAxisAngle(e,i))}applyMatrix3(e){const i=this.x,a=this.y,u=this.z,_=e.elements;return this.x=_[0]*i+_[3]*a+_[6]*u,this.y=_[1]*i+_[4]*a+_[7]*u,this.z=_[2]*i+_[5]*a+_[8]*u,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix3d(e){const i=this.x,a=this.y,u=this.z,_=e.elements,y=1/(_[3]*i+_[7]*a+_[11]*u+_[15]);return this.x=(_[0]*i+_[4]*a+_[8]*u+_[12])*y,this.y=(_[1]*i+_[5]*a+_[9]*u+_[13])*y,this.z=(_[2]*i+_[6]*a+_[10]*u+_[14])*y,this}applyQuaternion(e){const i=this.x,a=this.y,u=this.z,_=e.x,y=e.y,g=e.z,x=e.w,f=2*(y*u-g*a),A=2*(g*i-_*u),p=2*(_*a-y*i);return this.x=i+x*f+y*p-g*A,this.y=a+x*A+g*f-_*p,this.z=u+x*p+_*A-y*f,this}transformDirection(e){const i=this.x,a=this.y,u=this.z,_=e.elements;return this.x=_[0]*i+_[4]*a+_[8]*u,this.y=_[1]*i+_[5]*a+_[9]*u,this.z=_[2]*i+_[6]*a+_[10]*u,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,i){return this.x=Math.max(e.x,Math.min(i.x,this.x)),this.y=Math.max(e.y,Math.min(i.y,this.y)),this.z=Math.max(e.z,Math.min(i.z,this.z)),this}clampScalar(e,i){return this.x=Math.max(e,Math.min(i,this.x)),this.y=Math.max(e,Math.min(i,this.y)),this.z=Math.max(e,Math.min(i,this.z)),this}clampLength(e,i){const a=this.length();return this.divideScalar(a||1).multiplyScalar(Math.max(e,Math.min(i,a)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}isParallelTo(e){const i=this.dot(e),a=this.length(),u=e.length();return Math.abs(i)===a*u}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,i){return this.x+=(e.x-this.x)*i,this.y+=(e.y-this.y)*i,this.z+=(e.z-this.z)*i,this}lerpVectors(e,i,a){return this.x=e.x+(i.x-e.x)*a,this.y=e.y+(i.y-e.y)*a,this.z=e.z+(i.z-e.z)*a,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,i){const a=e.x,u=e.y,_=e.z,y=i.x,g=i.y,x=i.z;return this.x=u*x-_*g,this.y=_*y-a*x,this.z=a*g-u*y,this}projectOnVector(e){const i=e.lengthSq();if(i===0)return this.set(0,0,0);const a=e.dot(this)/i;return this.copy(e).multiplyScalar(a)}projectOnPlane(e){return pr.copy(this).projectOnVector(e),this.sub(pr)}reflect(e){return this.sub(pr.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const i=Math.sqrt(this.lengthSq()*e.lengthSq());if(i===0)return Math.PI/2;const a=this.dot(e)/i;return Math.acos(Math.max(-1,Math.min(1,a)))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const i=this.x-e.x,a=this.y-e.y,u=this.z-e.z;return i*i+a*a+u*u}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromMatrixPosition(e){const i=e.elements;return this.x=i[12],this.y=i[13],this.z=i[14],this}setFromMatrixScale(e){const i=this.setFromMatrixColumn(e,0).length(),a=this.setFromMatrixColumn(e,1).length(),u=this.setFromMatrixColumn(e,2).length();return this.x=i,this.y=a,this.z=u,this}setFromMatrixColumn(e,i){return this.fromArray(e.elements,i*4)}setFromMatrix3Column(e,i){return this.fromArray(e.elements,i*3)}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,i=0){return this.x=e[i],this.y=e[i+1],this.z=e[i+2],this}toArray(e=[],i=0){return e[i]=this.x,e[i+1]=this.y,e[i+2]=this.z,e}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,i=Math.random()*2-1,a=Math.sqrt(1-i*i);return this.x=a*Math.cos(e),this.y=i,this.z=a*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};ee.X_AXIS=Object.freeze(new ee(1,0,0)),ee.NEGATIVE_X_AXIS=Object.freeze(new ee(-1,0,0)),ee.Y_AXIS=Object.freeze(new ee(0,1,0)),ee.NEGATIVE_Y_AXIS=Object.freeze(new ee(0,-1,0)),ee.Z_AXIS=Object.freeze(new ee(0,0,1)),ee.NEGATIVE_Z_AXIS=Object.freeze(new ee(0,0,-1));let Q=ee;const pr=new Q,hi=new An,Bn=class Bn{constructor(e,i,a,u,_,y,g,x,f,A,p,N,k,U,K,H){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!=null&&i!=null&&a!=null&&u!=null&&_!=null&&y!=null&&g!=null&&x!=null&&f!=null&&A!=null&&p!=null&&N!=null&&k!=null&&U!=null&&K!=null&&H!=null&&this.set(e,i,a,u,_,y,g,x,f,A,p,N,k,U,K,H)}set(e,i,a,u,_,y,g,x,f,A,p,N,k,U,K,H){const W=this.elements;return W[0]=e,W[4]=i,W[8]=a,W[12]=u,W[1]=_,W[5]=y,W[9]=g,W[13]=x,W[2]=f,W[6]=A,W[10]=p,W[14]=N,W[3]=k,W[7]=U,W[11]=K,W[15]=H,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Bn().fromArray(this.elements)}copy(e){const i=this.elements,a=e.elements;return i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[8]=a[8],i[9]=a[9],i[10]=a[10],i[11]=a[11],i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15],this}copyPosition(e){const i=this.elements,a=e.elements;return i[12]=a[12],i[13]=a[13],i[14]=a[14],this}setFromMatrix3(e){const i=e.elements;return this.set(i[0],i[3],i[6],0,i[1],i[4],i[7],0,i[2],i[5],i[8],0,0,0,0,1),this}setFromExtrusionDirection(e){if(mr.equalPoint3d(e,Q.Z_AXIS))this.identity();else{const i=new Q(1,0,0);Math.abs(e.x)<1/64&&Math.abs(e.y)<1/64?i.crossVectors(Q.Y_AXIS,e).normalize():i.crossVectors(Q.Z_AXIS,e).normalize();const a=e.clone().cross(i).normalize();this.set(i.x,i.y,i.z,0,a.x,a.y,a.z,0,e.x,e.y,e.z,0,0,0,0,1)}return this}extractBasis(e,i,a){return e.setFromMatrixColumn(this,0),i.setFromMatrixColumn(this,1),a.setFromMatrixColumn(this,2),this}makeBasis(e,i,a){return this.set(e.x,i.x,a.x,0,e.y,i.y,a.y,0,e.z,i.z,a.z,0,0,0,0,1),this}extractRotation(e){const i=this.elements,a=e.elements,u=1/on.setFromMatrixColumn(e,0).length(),_=1/on.setFromMatrixColumn(e,1).length(),y=1/on.setFromMatrixColumn(e,2).length();return i[0]=a[0]*u,i[1]=a[1]*u,i[2]=a[2]*u,i[3]=0,i[4]=a[4]*_,i[5]=a[5]*_,i[6]=a[6]*_,i[7]=0,i[8]=a[8]*y,i[9]=a[9]*y,i[10]=a[10]*y,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Ti,e,Ui)}lookAt(e,i,a){const u=this.elements;return ae.subVectors(e,i),ae.lengthSq()===0&&(ae.z=1),ae.normalize(),De.crossVectors(a,ae),De.lengthSq()===0&&(Math.abs(a.z)===1?ae.x+=1e-4:ae.z+=1e-4,ae.normalize(),De.crossVectors(a,ae)),De.normalize(),rr.crossVectors(ae,De),u[0]=De.x,u[4]=rr.x,u[8]=ae.x,u[1]=De.y,u[5]=rr.y,u[9]=ae.y,u[2]=De.z,u[6]=rr.z,u[10]=ae.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,i){const a=e.elements,u=i.elements,_=this.elements,y=a[0],g=a[4],x=a[8],f=a[12],A=a[1],p=a[5],N=a[9],k=a[13],U=a[2],K=a[6],H=a[10],W=a[14],wt=a[3],Pt=a[7],mt=a[11],Z=a[15],ct=u[0],lt=u[4],Rt=u[8],Xt=u[12],Vt=u[1],jt=u[5],Qt=u[9],oe=u[13],he=u[2],le=u[6],Ft=u[10],Wt=u[14],j=u[3],bt=u[7],Zt=u[11],Se=u[15];return _[0]=y*ct+g*Vt+x*he+f*j,_[4]=y*lt+g*jt+x*le+f*bt,_[8]=y*Rt+g*Qt+x*Ft+f*Zt,_[12]=y*Xt+g*oe+x*Wt+f*Se,_[1]=A*ct+p*Vt+N*he+k*j,_[5]=A*lt+p*jt+N*le+k*bt,_[9]=A*Rt+p*Qt+N*Ft+k*Zt,_[13]=A*Xt+p*oe+N*Wt+k*Se,_[2]=U*ct+K*Vt+H*he+W*j,_[6]=U*lt+K*jt+H*le+W*bt,_[10]=U*Rt+K*Qt+H*Ft+W*Zt,_[14]=U*Xt+K*oe+H*Wt+W*Se,_[3]=wt*ct+Pt*Vt+mt*he+Z*j,_[7]=wt*lt+Pt*jt+mt*le+Z*bt,_[11]=wt*Rt+Pt*Qt+mt*Ft+Z*Zt,_[15]=wt*Xt+Pt*oe+mt*Wt+Z*Se,this}multiplyScalar(e){const i=this.elements;return i[0]*=e,i[4]*=e,i[8]*=e,i[12]*=e,i[1]*=e,i[5]*=e,i[9]*=e,i[13]*=e,i[2]*=e,i[6]*=e,i[10]*=e,i[14]*=e,i[3]*=e,i[7]*=e,i[11]*=e,i[15]*=e,this}determinant(){const e=this.elements,i=e[0],a=e[4],u=e[8],_=e[12],y=e[1],g=e[5],x=e[9],f=e[13],A=e[2],p=e[6],N=e[10],k=e[14],U=e[3],K=e[7],H=e[11],W=e[15];return U*(+_*x*p-u*f*p-_*g*N+a*f*N+u*g*k-a*x*k)+K*(+i*x*k-i*f*N+_*y*N-u*y*k+u*f*A-_*x*A)+H*(+i*f*p-i*g*k-_*y*p+a*y*k+_*g*A-a*f*A)+W*(-u*g*A-i*x*p+i*g*N+u*y*p-a*y*N+a*x*A)}transpose(){const e=this.elements;let i;return i=e[1],e[1]=e[4],e[4]=i,i=e[2],e[2]=e[8],e[8]=i,i=e[6],e[6]=e[9],e[9]=i,i=e[3],e[3]=e[12],e[12]=i,i=e[7],e[7]=e[13],e[13]=i,i=e[11],e[11]=e[14],e[14]=i,this}setPosition(e,i,a){const u=this.elements;return e instanceof Q?(u[12]=e.x,u[13]=e.y,u[14]=e.z):(u[12]=e,u[13]=i,u[14]=a),this}invert(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],y=e[4],g=e[5],x=e[6],f=e[7],A=e[8],p=e[9],N=e[10],k=e[11],U=e[12],K=e[13],H=e[14],W=e[15],wt=p*H*f-K*N*f+K*x*k-g*H*k-p*x*W+g*N*W,Pt=U*N*f-A*H*f-U*x*k+y*H*k+A*x*W-y*N*W,mt=A*K*f-U*p*f+U*g*k-y*K*k-A*g*W+y*p*W,Z=U*p*x-A*K*x-U*g*N+y*K*N+A*g*H-y*p*H,ct=i*wt+a*Pt+u*mt+_*Z;if(ct===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const lt=1/ct;return e[0]=wt*lt,e[1]=(K*N*_-p*H*_-K*u*k+a*H*k+p*u*W-a*N*W)*lt,e[2]=(g*H*_-K*x*_+K*u*f-a*H*f-g*u*W+a*x*W)*lt,e[3]=(p*x*_-g*N*_-p*u*f+a*N*f+g*u*k-a*x*k)*lt,e[4]=Pt*lt,e[5]=(A*H*_-U*N*_+U*u*k-i*H*k-A*u*W+i*N*W)*lt,e[6]=(U*x*_-y*H*_-U*u*f+i*H*f+y*u*W-i*x*W)*lt,e[7]=(y*N*_-A*x*_+A*u*f-i*N*f-y*u*k+i*x*k)*lt,e[8]=mt*lt,e[9]=(U*p*_-A*K*_-U*a*k+i*K*k+A*a*W-i*p*W)*lt,e[10]=(y*K*_-U*g*_+U*a*f-i*K*f-y*a*W+i*g*W)*lt,e[11]=(A*g*_-y*p*_-A*a*f+i*p*f+y*a*k-i*g*k)*lt,e[12]=Z*lt,e[13]=(A*K*u-U*p*u+U*a*N-i*K*N-A*a*H+i*p*H)*lt,e[14]=(U*g*u-y*K*u-U*a*x+i*K*x+y*a*H-i*g*H)*lt,e[15]=(y*p*u-A*g*u+A*a*x-i*p*x-y*a*N+i*g*N)*lt,this}scale(e){const i=this.elements,a=e.x,u=e.y,_=e.z;return i[0]*=a,i[4]*=u,i[8]*=_,i[1]*=a,i[5]*=u,i[9]*=_,i[2]*=a,i[6]*=u,i[10]*=_,i[3]*=a,i[7]*=u,i[11]*=_,this}getMaxScaleOnAxis(){const e=this.elements,i=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],a=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],u=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(i,a,u))}makeTranslation(e,i,a){return e instanceof Q?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,i,0,0,1,a,0,0,0,1),this}makeRotationX(e){const i=Math.cos(e),a=Math.sin(e);return this.set(1,0,0,0,0,i,-a,0,0,a,i,0,0,0,0,1),this}makeRotationY(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,0,a,0,0,1,0,0,-a,0,i,0,0,0,0,1),this}makeRotationZ(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,-a,0,0,a,i,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,i){const a=Math.cos(i),u=Math.sin(i),_=1-a,y=e.x,g=e.y,x=e.z,f=_*y,A=_*g;return this.set(f*y+a,f*g-u*x,f*x+u*g,0,f*g+u*x,A*g+a,A*x-u*y,0,f*x-u*g,A*x+u*y,_*x*x+a,0,0,0,0,1),this}makeScale(e,i,a){return this.set(e,0,0,0,0,i,0,0,0,0,a,0,0,0,0,1),this}makeShear(e,i,a,u,_,y){return this.set(1,a,_,0,e,1,y,0,i,u,1,0,0,0,0,1),this}compose(e,i,a){const u=this.elements,_=i.x,y=i.y,g=i.z,x=i.w,f=_+_,A=y+y,p=g+g,N=_*f,k=_*A,U=_*p,K=y*A,H=y*p,W=g*p,wt=x*f,Pt=x*A,mt=x*p,Z=a.x,ct=a.y,lt=a.z;return u[0]=(1-(K+W))*Z,u[1]=(k+mt)*Z,u[2]=(U-Pt)*Z,u[3]=0,u[4]=(k-mt)*ct,u[5]=(1-(N+W))*ct,u[6]=(H+wt)*ct,u[7]=0,u[8]=(U+Pt)*lt,u[9]=(H-wt)*lt,u[10]=(1-(N+K))*lt,u[11]=0,u[12]=e.x,u[13]=e.y,u[14]=e.z,u[15]=1,this}decompose(e,i,a){const u=this.elements;let _=on.set(u[0],u[1],u[2]).length();const y=on.set(u[4],u[5],u[6]).length(),g=on.set(u[8],u[9],u[10]).length();this.determinant()<0&&(_=-_),e.x=u[12],e.y=u[13],e.z=u[14],pe.copy(this);const f=1/_,A=1/y,p=1/g;return pe.elements[0]*=f,pe.elements[1]*=f,pe.elements[2]*=f,pe.elements[4]*=A,pe.elements[5]*=A,pe.elements[6]*=A,pe.elements[8]*=p,pe.elements[9]*=p,pe.elements[10]*=p,i.setFromRotationMatrix(pe),a.x=_,a.y=y,a.z=g,this}equals(e){const i=this.elements,a=e.elements;for(let u=0;u<16;u++)if(i[u]!==a[u])return!1;return!0}fromArray(e,i=0){for(let a=0;a<16;a++)this.elements[a]=e[a+i];return this}toArray(e=[],i=0){const a=this.elements;return e[i]=a[0],e[i+1]=a[1],e[i+2]=a[2],e[i+3]=a[3],e[i+4]=a[4],e[i+5]=a[5],e[i+6]=a[6],e[i+7]=a[7],e[i+8]=a[8],e[i+9]=a[9],e[i+10]=a[10],e[i+11]=a[11],e[i+12]=a[12],e[i+13]=a[13],e[i+14]=a[14],e[i+15]=a[15],e}};Bn.IDENTITY=Object.freeze(new Bn);let an=Bn;const on=new Q,pe=new an,Ti=new Q(0,0,0),Ui=new Q(1,1,1),De=new Q,rr=new Q,ae=new Q;class ze{constructor(e=void 0,i=void 0){this.min=e==null?new Q(1/0,1/0,1/0):new Q(e.x,e.y,e.z),this.max=i==null?new Q(-1/0,-1/0,-1/0):new Q(i.x,i.y,i.z)}set(e,i){return this.min.copy(e),this.max.copy(i),this}setFromArray(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i+=3)this.expandByPoint(yr.fromArray(e,i));return this}setFromPoints(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i++)this.expandByPoint(e[i]);return this}setFromCenterAndSize(e,i){const a=yr.copy(i).multiplyScalar(.5);return this.min.copy(e).sub(a),this.max.copy(e).add(a),this}clone(){return new ze().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new Q(0,0,0):new Q(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new Q(0,0,0):new Q(0,0,0).subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,i){return i.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsPlane(e){let i,a;return e.normal.x>0?(i=e.normal.x*this.min.x,a=e.normal.x*this.max.x):(i=e.normal.x*this.max.x,a=e.normal.x*this.min.x),e.normal.y>0?(i+=e.normal.y*this.min.y,a+=e.normal.y*this.max.y):(i+=e.normal.y*this.max.y,a+=e.normal.y*this.min.y),e.normal.z>0?(i+=e.normal.z*this.min.z,a+=e.normal.z*this.max.z):(i+=e.normal.z*this.max.z,a+=e.normal.z*this.min.z),i<=-e.constant&&a>=-e.constant}clampPoint(e,i){return i.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,yr).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Le[0].set(this.min.x,this.min.y,this.min.z).applyMatrix3d(e),Le[1].set(this.min.x,this.min.y,this.max.z).applyMatrix3d(e),Le[2].set(this.min.x,this.max.y,this.min.z).applyMatrix3d(e),Le[3].set(this.min.x,this.max.y,this.max.z).applyMatrix3d(e),Le[4].set(this.max.x,this.min.y,this.min.z).applyMatrix3d(e),Le[5].set(this.max.x,this.min.y,this.max.z).applyMatrix3d(e),Le[6].set(this.max.x,this.max.y,this.min.z).applyMatrix3d(e),Le[7].set(this.max.x,this.max.y,this.max.z).applyMatrix3d(e),this.setFromPoints(Le),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const Le=[new Q,new Q,new Q,new Q,new Q,new Q,new Q,new Q],yr=new Q,li=new Bt;class de{constructor(e=void 0,i=void 0){this.min=e==null?new Bt(1/0,1/0):new Bt(e.x,e.y),this.max=i==null?new Bt(-1/0,-1/0):new Bt(i.x,i.y)}set(e,i){return this.min.copy(e),this.max.copy(i),this}setFromPoints(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i++)this.expandByPoint(e[i]);return this}setFromCenterAndSize(e,i){const a=li.copy(i).multiplyScalar(.5);return this.min.copy(e).sub(a),this.max.copy(e).add(a),this}clone(){return new de().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(e){return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new Bt(0,0):new Bt(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new Bt(0,0):new Bt(0,0).subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,i){return i.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y)}clampPoint(e,i){return i.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,li).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const ui=new Q,Ri=new Q,Vi=new sn;class zn{constructor(e=new Q(1,0,0),i=0){this.normal=e,this.constant=i}set(e,i){return this.normal.copy(e),this.constant=i,this}setComponents(e,i,a,u){return this.normal.set(e,i,a),this.constant=u,this}setFromNormalAndCoplanarPoint(e,i){return this.normal.copy(e),this.constant=-i.dot(this.normal),this}setFromCoplanarPoints(e,i,a){const u=ui.subVectors(a,i).cross(Ri.subVectors(e,i)).normalize();return this.setFromNormalAndCoplanarPoint(u,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}projectPoint(e,i){return i.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectsBox(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,i){const a=i||Vi.getNormalMatrix(e),u=this.coplanarPoint(ui).applyMatrix3d(e),_=this.normal.applyMatrix3(a).normalize();return this.constant=-u.dot(_),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new zn().copy(this)}}class Lt extends Bt{static pointArrayToNumberArray(e){const i=new Array(e.length*2);return e.forEach((a,u)=>{a.toArray(i,u*2)}),i}}class St extends Q{static pointArrayToNumberArray(e,i=!0){const a=i?3:2,u=new Array(e.length*a);return e.forEach((_,y)=>{_.toArray(u,y*a)}),u}}const ci=new an,vi=new An,Ln=class Ln{constructor(e=0,i=0,a=0,u=Ln.DEFAULT_ORDER){this._x=e,this._y=i,this._z=a,this._order=u}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,i,a,u=this._order){return this._x=e,this._y=i,this._z=a,this._order=u,this._onChangeCallback(),this}clone(){return new Ln(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,i=this._order,a=!0){const u=e.elements,_=u[0],y=u[4],g=u[8],x=u[1],f=u[5],A=u[9],p=u[2],N=u[6],k=u[10];switch(i){case"XYZ":this._y=Math.asin(Be(g,-1,1)),Math.abs(g)<.9999999?(this._x=Math.atan2(-A,k),this._z=Math.atan2(-y,_)):(this._x=Math.atan2(N,f),this._z=0);break;case"YXZ":this._x=Math.asin(-Be(A,-1,1)),Math.abs(A)<.9999999?(this._y=Math.atan2(g,k),this._z=Math.atan2(x,f)):(this._y=Math.atan2(-p,_),this._z=0);break;case"ZXY":this._x=Math.asin(Be(N,-1,1)),Math.abs(N)<.9999999?(this._y=Math.atan2(-p,k),this._z=Math.atan2(-y,f)):(this._y=0,this._z=Math.atan2(x,_));break;case"ZYX":this._y=Math.asin(-Be(p,-1,1)),Math.abs(p)<.9999999?(this._x=Math.atan2(N,k),this._z=Math.atan2(x,_)):(this._x=0,this._z=Math.atan2(-y,f));break;case"YZX":this._z=Math.asin(Be(x,-1,1)),Math.abs(x)<.9999999?(this._x=Math.atan2(-A,f),this._y=Math.atan2(-p,_)):(this._x=0,this._y=Math.atan2(g,k));break;case"XZY":this._z=Math.asin(-Be(y,-1,1)),Math.abs(y)<.9999999?(this._x=Math.atan2(N,f),this._y=Math.atan2(g,_)):(this._x=Math.atan2(-A,k),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+i)}return this._order=i,a===!0&&this._onChangeCallback(),this}setFromQuaternion(e,i,a=!0){return ci.makeRotationFromQuaternion(e),this.setFromRotationMatrix(ci,i,a)}setFromVector3(e,i=this._order){return this.set(e.x,e.y,e.z,i)}reorder(e){return vi.setFromEuler(this),this.setFromQuaternion(vi,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],i=0){return e[i]=this._x,e[i+1]=this._y,e[i+2]=this._z,e[i+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Ln.DEFAULT_ORDER="XYZ";let wr=Ln;class _i{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class br extends _i{translate(e){return this.transform(new sn().makeTranslation(e.x,e.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Di extends br{constructor(){super(),this._loops=[]}add(e){this._loops.push(e),this._boundingBoxNeedsUpdate=!0}get loops(){return this._loops}get outter(){if(this._loops.length>0)return this._loops[0]}calculateBoundingBox(){const e=this.outter;return e?e.box:new de}transform(e){return this._boundingBoxNeedsUpdate=!0,this}getPoints(e){const i=[];for(let a=0;a<this.loops.length;++a){const _=this.loops[a].getPoints(e);i.push(_)}return i}buildHierarchy(){var g;const e=this.getPoints(100),i=this.calculateBoundaryBoxes(e),a=this.sortBoundaryBoxesByAreas(i),u=new Map,_=a.length;for(let x=0;x<_;x++)u.set(a[x],{index:a[x],children:[]});const y={index:-1,children:[]};for(let x=0;x<_;x++){const f=a[x],A=e[f],p=i[f];let N=x+1;for(;N<_;N++){const k=a[N],U=e[k];if(i[k].containsBox(p)&&ri.isPointInPolygon(A[Ut.randInt(0,A.length-1)],U)){(g=u.get(k))==null||g.children.push(u.get(f));break}}N===_&&y.children.push(u.get(f))}return y}calculateBoundaryBoxes(e){const i=[];return e.forEach(a=>{i.push(new de().setFromPoints(a))}),i}sortBoundaryBoxesByAreas(e){const i=[];e.forEach((u,_)=>{const y=u.size,g=y.width*y.height;i.push({area:g,index:_})}),i.sort((u,_)=>u.area-_.area);const a=[];return i.forEach(u=>{a.push(u.index)}),a}}class hn extends br{constructor(){super(),this.arcLengthDivisions=100}get startPoint(){return this.getPoint(0)}get endPoint(){return this.getPoint(1)}get length(){return this.getLength()}getPoint(e){throw new Error("AcGeCurve2d: .getPoint() not implemented.")}getPointAt(e){const i=this.getUtoTmapping(e);return this.getPoint(i)}getPoints(e=5){const i=[];for(let a=0;a<=e;a++)i.push(this.getPoint(a/e));return i}getSpacedPoints(e=5){const i=[];for(let a=0;a<=e;a++)i.push(this.getPointAt(a/e));return i}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){const i=[];let a,u=this.getPoint(0),_=0;i.push(0);for(let y=1;y<=e;y++)a=this.getPoint(y/e),_+=a.distanceTo(u),i.push(_),u=a;return i}getUtoTmapping(e,i){const a=this.getLengths();let u=0;const _=a.length;let y;i?y=i:y=e*a[_-1];let g=0,x=_-1,f;for(;g<=x;)if(u=Math.floor(g+(x-g)/2),f=a[u]-y,f<0)g=u+1;else if(f>0)x=u-1;else{x=u;break}if(u=x,a[u]===y)return u/(_-1);const A=a[u],N=a[u+1]-A,k=(y-A)/N;return(u+k)/(_-1)}getTangent(e){let a=e-1e-4,u=e+1e-4;a<0&&(a=0),u>1&&(u=1);const _=this.getPoint(a),y=this.getPoint(u),g=new Lt;return g.copy(y).sub(_).normalize(),g}getTangentAt(e){const i=this.getUtoTmapping(e);return this.getTangent(i)}}class Sn extends hn{constructor(e,i,a,u,_){super();const y=+(e!==void 0)+ +(i!==void 0)+ +(a!==void 0)+ +(u!==void 0)+ +(_!==void 0);if(y==3)typeof e=="object"&&typeof i=="object"&&typeof a=="object"?this.createByThreePoints(e,i,a):this.createByStartEndPointsAndBulge(e,i,a);else if(y==5){const g=e;this.center=new Lt(g.x,g.y),this.radius=i,this.startAngle=a,this.endAngle=u,this.clockwise=_}else throw te.AcCmErrors.ILLEGAL_PARAMETERS}createByThreePoints(e,i,a){const u=(lt,Rt)=>({x:(lt.x+Rt.x)/2,y:(lt.y+Rt.y)/2}),_=(lt,Rt)=>(Rt.y-lt.y)/(Rt.x-lt.x),y=lt=>-1/lt,g=u(e,i),x=u(i,a),f=_(e,i),A=_(i,a),p=y(f),N=y(A),k=(lt,Rt,Xt,Vt)=>{const jt=(Vt-Rt)/(lt-Xt),Qt=lt*jt+Rt;return{x:jt,y:Qt}},U=g.y-p*g.x,K=x.y-N*x.x,H=k(p,U,N,K),W=Math.sqrt(Math.pow(e.x-H.x,2)+Math.pow(e.y-H.y,2)),wt=(lt,Rt)=>Math.atan2(lt.y-Rt.y,lt.x-Rt.x),Pt=wt(e,H),mt=wt(i,H),Z=wt(a,H),ct=Z>Pt&&Z<mt||Pt>Z&&Pt<mt||mt>Z&&mt<Pt;this.center=H,this.radius=W,this.startAngle=Pt,this.endAngle=Z,this.clockwise=!ct}createByStartEndPointsAndBulge(e,i,a){let u,_,y;a<0?(u=Math.atan(-a)*4,_=new Bt(e),y=new Bt(i)):(u=Math.atan(a)*4,_=new Bt(i),y=new Bt(e));const g=new Bt().subVectors(y,_),x=g.length(),f=new Bt().addVectors(_,g.multiplyScalar(.5)),A=Math.abs(x/2/Math.tan(u/2)),p=g.normalize();let N;if(u<Math.PI){const k=new Bt(p.x*Math.cos(Math.PI/2)-p.y*Math.sin(Math.PI/2),p.y*Math.cos(Math.PI/2)+p.x*Math.sin(Math.PI/2));N=f.add(k.multiplyScalar(-A))}else{const k=new Bt(p.x*Math.cos(Math.PI/2)-p.y*Math.sin(Math.PI/2),p.y*Math.cos(Math.PI/2)+p.x*Math.sin(Math.PI/2));N=f.add(k.multiplyScalar(A))}a<0?(this.startAngle=Math.atan2(_.y-N.y,_.x-N.x),this.endAngle=Math.atan2(y.y-N.y,y.x-N.x)):(this.startAngle=Math.atan2(y.y-N.y,y.x-N.x),this.endAngle=Math.atan2(_.y-N.y,_.x-N.x)),this.clockwise=a<0,this.center=N,this.radius=y.sub(N).length()}get center(){return this._center}set center(e){this._center=new Lt(e.x,e.y),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(e){this._radius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return this.clockwise?Ut.normalizeAngle(this.startAngle-this.endAngle):Ut.normalizeAngle(this.endAngle-this.startAngle)}get clockwise(){return this._clockwise}set clockwise(e){this._clockwise=e,this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this.startAngle)}get endPoint(){return this.getPointAtAngle(this.endAngle)}get midPoint(){const e=Ut.normalizeAngle((this.startAngle+this.endAngle)/2);return this.getPointAtAngle(e)}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}calculateBoundingBox(){const e=[this.startPoint,this.endPoint],i=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const _ of i)Ut.isBetweenAngle(_,this.startAngle,this.endAngle,this.clockwise)&&e.push(this.getPointAtAngle(_));const a=e.map(_=>_.x),u=e.map(_=>_.y);return new de(new Lt(Math.min(...a),Math.min(...u)),new Lt(Math.max(...a),Math.max(...u)))}get length(){return Math.abs(this.deltaAngle*this.radius)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}clone(){return new Sn(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.clockwise)}getPointAtAngle(e){const i=this.center.x+this.radius*Math.cos(e),a=this.center.y+this.radius*Math.sin(e);return new Lt(i,a)}getPoints(e=100){const i=[];let a=this.deltaAngle,u=this.startAngle;if(this.closed&&(a=Kt,u=0),this.clockwise)for(let _=0;_<=e;_++){const y=u-a*(_/e),g=this.getPointAtAngle(y);i.push(new Lt(g.x,g.y))}else for(let _=0;_<=e;_++){const y=u+a*(_/e),g=this.getPointAtAngle(y);i.push(new Lt(g.x,g.y))}return i}}class Fi extends _i{translate(e){return this.transform(new an().makeTranslation(e.x,e.y,e.z))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Cn extends Fi{}class kn extends Cn{constructor(e,i){super(),this._start=new St(e),this._end=new St(i)}get startPoint(){return this._start}set startPoint(e){this._start.copy(e),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(e){this._end.copy(e),this._boundingBoxNeedsUpdate=!0}get direction(){return new Q().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new St((this._start.x+this._end.x)/2,(this._start.y+this._end.y)/2,(this._start.z+this._end.z)/2)}get length(){return this.startPoint.distanceTo(this.endPoint)}isPointOnLine(e){return this.project(e).distanceTo(e)<1e-6}at(e,i){return this.delta(i).multiplyScalar(e).add(this._start)}atLength(e,i=!1){if(i){const a=this.delta(Qe).normalize();return new St(this._start).addScaledVector(a,e)}else{const a=this.delta(Qe).normalize();return new St(this._end).addScaledVector(a,e)}}extend(e,i=!1){if(i){const a=Qe.subVectors(this._start,this._end).normalize();this._start=new St(this._start).addScaledVector(a,e)}else{const a=this.delta(Qe).normalize();this._end=new St(this._end).addScaledVector(a,e)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(e,i){di.subVectors(e,this._start),ir.subVectors(this.endPoint,this.startPoint);const a=ir.dot(ir);let _=ir.dot(di)/a;return i&&(_=Ut.clamp(_,0,1)),_}closestPointToPoint(e,i,a){const u=this.closestPointToPointParameter(e,i);return this.delta(a).multiplyScalar(u).add(this._start)}delta(e){return e.subVectors(this._end,this._start)}distanceSq(){return this._start.distanceToSquared(this._end)}distance(){return this._start.distanceTo(this._end)}project(e){const i=this.direction,u=Qe.subVectors(e,this.startPoint).dot(i);return new St().copy(i).multiplyScalar(u).add(this.startPoint)}perpPoint(e){const i=this.direction,a=this.startPoint,_=Qe.subVectors(e,a).dot(i),y=Qe.copy(i).multiplyScalar(_);return new St().addVectors(a,y)}calculateBoundingBox(){const e=new St(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y),Math.min(this._start.z,this._end.z)),i=new St(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y),Math.max(this._start.z,this._end.z));return new ze(e,i)}transform(e){return this._start.applyMatrix3d(e),this._end.applyMatrix3d(e),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(e){return this.startPoint=e.startPoint,this.endPoint=e.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new kn(this._start.clone(),this._end.clone())}}const Qe=new Q,di=new Q,ir=new Q;class In extends Cn{static computeCenterPoint(e,i,a){const u=new Q().addVectors(e,i).multiplyScalar(.5),_=new Q().addVectors(e,a).multiplyScalar(.5),y=new Q().subVectors(i,e),g=new Q().subVectors(a,e),x=new Q().crossVectors(y,g).normalize();if(x.lengthSq()===0)return console.error("Points are collinear and cannot form a valid arc."),null;const f=new Q().crossVectors(y,x).normalize(),A=new Q().crossVectors(g,x).normalize(),p=f.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),N=A.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),k=new kn(u,u.clone().add(p)),U=new kn(_,_.clone().add(N)),K=new Q;return k.closestPointToPoint(U.startPoint,!0,K)?K:(console.error("Cannot find a valid center for the arc."),null)}static createByThreePoints(e,i,a){const u=In.computeCenterPoint(e,i,a);if(u){const _=u.distanceTo(e),y=new Q().subVectors(e,u),g=new Q().subVectors(i,u),x=Math.atan2(y.y,y.x),f=Math.atan2(g.y,g.x);return new In(u,_,x,f,Q.Z_AXIS)}}constructor(e,i,a,u,_,y=Q.X_AXIS){super(),this.center=e,this.radius=i,this.startAngle=a,this.endAngle=u,this.normal=_,this.refVec=y,(u-a)%Kt==0?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=a,this.endAngle=u)}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._radius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return Ut.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(e){this._normal=new Q(e.x,e.y,e.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(e){this._refVec=new Q(e.x,e.y,e.z),this._refVec.normalize(),this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get length(){return Math.abs(this.deltaAngle*this.radius)}calculateBoundingBox(){const e=[this.startAngle,this.endAngle];for(let x=0;x<2*Math.PI;x+=Math.PI/2)Ut.isBetweenAngle(x,this.startAngle,this.endAngle)&&e.push(x);let i=1/0,a=1/0,u=1/0,_=-1/0,y=-1/0,g=-1/0;for(const x of e){const f=this.getPointAtAngle(x);f.x<i&&(i=f.x),f.y<a&&(a=f.y),f.z<u&&(u=f.z),f.x>_&&(_=f.x),f.y>y&&(y=f.y),f.z>g&&(g=f.z)}return new ze({x:i,y:a,z:u},{x:_,y,z:g})}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}getPoints(e){const i=[];let a=this.deltaAngle,u=this.startAngle;this.closed&&(a=Kt,u=0);for(let _=0;_<=e;_++){const y=u+a*(_/e),g=this.getPointAtAngle(y);i.push(g)}return i}transform(e){const i=xr.copy(this.refVec).applyAxisAngle(this.normal,this.startAngle).multiplyScalar(this.radius),a=xr.copy(this.refVec).applyAxisAngle(this.normal,this.endAngle).multiplyScalar(this.radius);return this.center.applyMatrix3d(e),i.applyMatrix3d(e),a.applyMatrix3d(e),this.normal.applyMatrix3d(e).normalize(),this.refVec.applyMatrix3d(e).normalize(),this.startAngle=this.getAngle(i),this.endAngle=this.getAngle(a),this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.radius=e.radius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.normal=e.normal,this.refVec=e.refVec,this._boundingBoxNeedsUpdate=!0,this}clone(){return new In(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(e){return e.sub(this.center),Math.atan2(e.dot(xr.crossVectors(this.refVec,this.normal)),e.dot(this.refVec))}getPointAtAngle(e){const i=this.normal,a=this.refVec,u={x:i.y*a.z-i.z*a.y,y:i.z*a.x-i.x*a.z,z:i.x*a.y-i.y*a.x},_=this.center,y=this.radius;return new St(_.x+y*(a.x*Math.cos(e)+u.x*Math.sin(e)),_.y+y*(a.y*Math.cos(e)+u.y*Math.sin(e)),_.z+y*(a.z*Math.cos(e)+u.z*Math.sin(e)))}get plane(){const e=new Q(this.center).distanceTo(dr);return new zn(this.normal,e)}}const xr=new Q;class Mr extends hn{constructor(e,i,a,u=0,_=Kt,y=!1,g=0){super(),this.center=e,this.majorAxisRadius=i,this.minorAxisRadius=a,(_-u)%Kt==0?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=u,this.endAngle=_),this.clockwise=y,this.rotation=g}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get clockwise(){return this._clockwise}set clockwise(e){this._clockwise=e,this._boundingBoxNeedsUpdate=!0}get rotation(){return this._rotation}set rotation(e){this._rotation=e,this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return Ut.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}calculateBoundingBox(){let i=1/0,a=1/0,u=-1/0,_=-1/0;for(let y=0;y<=100;y++){const g=this.getPoint(y/100);i=Math.min(i,g.x),a=Math.min(a,g.y),u=Math.max(u,g.x),_=Math.max(_,g.y)}return new de({x:i,y:a},{x:u,y:_})}get closed(){return this.deltaAngle==0}getPoint(e){const i=Math.PI*2;let a=this.endAngle-this.startAngle;const u=Math.abs(a)<Number.EPSILON;for(;a<0;)a+=i;for(;a>i;)a-=i;a<Number.EPSILON&&(u?a=0:a=i),this.clockwise===!0&&!u&&(a===i?a=-i:a=a-i);const _=this.startAngle+e*a;let y=this.center.x+this.majorAxisRadius*Math.cos(_),g=this.center.y+this.minorAxisRadius*Math.sin(_);if(this.rotation!==0){const x=Math.cos(this.rotation),f=Math.sin(this.rotation),A=y-this.center.x,p=g-this.center.y;y=A*x-p*f+this.center.x,g=A*f+p*x+this.center.y}return new Lt(y,g)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.majorAxisRadius=e.majorAxisRadius,this.minorAxisRadius=e.minorAxisRadius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.clockwise=e.clockwise,this.rotation=e.rotation,this}clone(){return new Mr(this.center,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle,this.clockwise,this.rotation)}}class Pr extends Cn{constructor(e,i,a,u,_,y=0,g=Kt){super(),this.center=e,this.normal=i,this.majorAxis=a,this.majorAxisRadius=u,this.minorAxisRadius=_;const x=Math.abs(g-y);Math.abs(x-Kt)<1e-10||Math.abs(x-2*Kt)<1e-10?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=y,this.endAngle=g)}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const e=this.endAngle-this.startAngle;return Math.abs(e-Kt)<1e-10?Kt:Ut.normalizeAngle(e)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(e){this._normal=new Q(e.x,e.y,e.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(e){this._majorAxis=new Q(e.x,e.y,e.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new Q().crossVectors(this.normal,this.majorAxis).normalize()}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get isCircular(){return fr.equal(this.majorAxisRadius,this.minorAxisRadius)}get length(){if(this.isCircular)return this.majorAxisRadius*Math.abs(this.deltaAngle);const e=1e3,i=this.deltaAngle/e;let a=0,u=this.getPointAtAngle(this.startAngle);for(let _=1;_<=e;_++){const y=this.startAngle+_*i,g=this.getPointAtAngle(y),x=g.x-u.x,f=g.y-u.y,A=g.z-u.z;a+=Math.sqrt(x*x+f*f+A*A),u=g}return a}calculateBoundingBox(){if(this.majorAxis.equals(Q.X_AXIS)||this.majorAxis.equals(Q.Y_AXIS)||this.majorAxis.isParallelTo(Q.X_AXIS)||this.majorAxis.isParallelTo(Q.Y_AXIS)){const e=[this.startAngle,this.endAngle];for(let x=0;x<2*Math.PI;x+=Math.PI/2)Ut.isBetweenAngle(x,this.startAngle,this.endAngle)&&e.push(x);let i=1/0,a=1/0,u=1/0,_=-1/0,y=-1/0,g=-1/0;for(const x of e){const f=this.getPointAtAngle(x);f.x<i&&(i=f.x),f.y<a&&(a=f.y),f.z<u&&(u=f.z),f.x>_&&(_=f.x),f.y>y&&(y=f.y),f.z>g&&(g=f.z)}return new ze({x:i,y:a,z:u},{x:_,y,z:g})}else{let i=1/0,a=1/0,u=1/0,_=-1/0,y=-1/0,g=-1/0;for(let x=0;x<=100;x++){const f=this.startAngle+this.deltaAngle*(x/100),A=this.getPointAtAngle(f);i=Math.min(i,A.x),a=Math.min(a,A.y),u=Math.min(u,A.z),_=Math.max(_,A.x),y=Math.max(y,A.y),g=Math.max(g,A.z)}return new ze({x:i,y:a,z:u},{x:_,y,z:g})}}get closed(){return this.deltaAngle==0}getPoints(e=100){const i=[];let a=this.deltaAngle,u=this.startAngle;this.closed&&(a=Kt,u=0);for(let _=0;_<=e;_++){const y=u+a*(_/e),g=this.getPointAtAngle(y);i.push(g)}return i}getPointAtAngle(e){const i=Math.cos(e),a=Math.sin(e),u=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(a),_=this.majorAxis.clone().multiplyScalar(i*this.majorAxisRadius).add(u);return new St(this.center.x+_.x,this.center.y+_.y,this.center.z+_.z)}contains(e){const i=new Q(e).sub(this.center),a=i.dot(this.majorAxis),u=i.dot(this.minorAxis),_=a/this.majorAxisRadius,y=u/this.minorAxisRadius;return _*_+y*y<=1}transform(e){return this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.normal=e.normal,this.majorAxis=e.majorAxis,this.majorAxisRadius=e.majorAxisRadius,this.minorAxisRadius=e.minorAxisRadius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this._boundingBoxNeedsUpdate=!0,this}clone(){return new Pr(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const e=new Q(this.center).distanceTo(dr);return new zn(this.normal,e)}}class Oi extends hn{constructor(e=null,i=!1){super(),this._vertices=e||new Array,this._closed=i}get numberOfVertices(){return this._vertices.length}get closed(){return this._closed}get startPoint(){if(this.numberOfVertices>0){const e=this._vertices[0];return new Lt(e.x,e.y)}throw new Error("Start point does not exist in an empty polyline.")}get endPoint(){const e=this.numberOfVertices;if(e>0)if(this.closed){const i=this._vertices[0];return new Lt(i.x,i.y)}else{const i=this._vertices[e-1];return new Lt(i.x,i.y)}throw new Error("End point does not exist in an empty polyline.")}get length(){let e=0;const i=this._vertices.length;for(let a=0;a<i;++a){const u=this._vertices[a];let _=null;if(a<i-1?_=this._vertices[a+1]:a==i-1&&this.closed&&(_=this._vertices[0]),_)if(u.bulge){const y=new Sn(u,_,u.bulge);e+=y.length}else e+=new Lt(u.x,u.y).distanceTo(_)}return e}set closed(e){this._closed=e,this._boundingBoxNeedsUpdate=!0}addVertexAt(e,i){e<=0?this._vertices.unshift(i):this._vertices.splice(e,0,i),this._boundingBoxNeedsUpdate=!0}getPointAt(e){const i=this._vertices[e];return new Lt(i.x,i.y)}calculateBoundingBox(){const e=this.getPoints(100);return new de().setFromPoints(e)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}getPoints3d(e,i){const a=[];return this.getPoints(e).forEach(_=>a.push(new St().set(_.x,_.y,i))),a}getPoints(e){const i=[],a=this._vertices.length;for(let u=0;u<a;++u){const _=this._vertices[u];if(_.bulge){let y=null;if(u<a-1?y=this._vertices[u+1]:u==a-1&&this.closed&&(y=this._vertices[0]),y){const x=new Sn(_,y,_.bulge).getPoints(e),f=x.length;for(let A=0;A<f;++A){const p=x[A];i.push(new Lt(p.x,p.y))}}}else i.push(new Lt(_.x,_.y)),u==a-1&&this.closed&&i.push(i[0])}return i}}class Ar extends hn{constructor(e,i){super(),this._start=new Lt(e),this._end=new Lt(i)}get startPoint(){return this._start}set startPoint(e){this._start.copy(e),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(e){this._end.copy(e),this._boundingBoxNeedsUpdate=!0}getPoints(){return[this.startPoint,this.endPoint]}get length(){return this.startPoint.distanceTo(this.endPoint)}calculateBoundingBox(){const e=new Lt(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y)),i=new Lt(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y));return new de(e,i)}transform(e){return this._start.applyMatrix2d(e),this._end.applyMatrix2d(e),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(e){return this.startPoint=e.startPoint,this.endPoint=e.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new Ar(this._start.clone(),this._end.clone())}}class qi extends hn{constructor(e=[]){super(),this._curves=e}get curves(){return this._curves}add(e){this._curves.push(e),this._boundingBoxNeedsUpdate=!0}get numberOfEdges(){return this._curves.length}get startPoint(){if(this._curves.length>0){const e=this._curves[0].startPoint;return new Lt(e.x,e.y)}throw new Error("Start point does not exist in an empty loop.")}get endPoint(){return this.startPoint}get length(){let e=0;return this._curves.forEach(i=>{e+=i.length}),e}calculateBoundingBox(){const e=this.getPoints(100),i=new de;return i.setFromPoints(e),i}transform(e){return this._boundingBoxNeedsUpdate=!0,this}get closed(){return!0}getPoints(e){const i=[];return this.curves.forEach(a=>{a.getPoints(e).forEach(u=>{i.push(new Lt(u.x,u.y))})}),i}}function Gi(E){return E&&E.__esModule&&Object.prototype.hasOwnProperty.call(E,"default")?E.default:E}var fi={exports:{}};(function(E,e){(function(i){E.exports=i()})(function(){var i={},a=this;new Function("try {return this===window;}catch(e){ return false;}");var u=new Function("try {return this===global;}catch(e){return false;}"),_=new Function("try {return typeof importScripts === 'function';}catch(e){return false;}");if(u()&&_(),u()||_()){var y=a;if(_()){var g=function(x,f){var A=a;return x.split(".").forEach(function(p){A&&(A=A[p])}),A?A[f]:null};onmessage=function(x){if(!(!x.data.className||!x.data.methodName)){var f=g(x.data.className,x.data.methodName);if(!f)return console.error("could not find "+x.data.className+"."+x.data.methodName);postMessage({result:f.apply(null,x.data.args),id:x.data.id})}}}}return function(x,f,A){f.geom=f.geom||{},f.exe=f.exe||{},f.eval=f.eval||{},f.core=f.core||{},f.promhx=f.promhx||{};var p={},N=function(){return bt.__string_rec(this,"")};function k(t,n){function r(){}r.prototype=t;var s=new r;for(var o in n)s[o]=n[o];return n.toString!==Object.prototype.toString&&(s.toString=n.toString),s}var U=function(){};p.HxOverrides=U,U.__name__=["HxOverrides"],U.strDate=function(t){var n=t.length;switch(n){case 8:var r=t.split(":"),s=new Date;return s.setTime(0),s.setUTCHours(r[0]),s.setUTCMinutes(r[1]),s.setUTCSeconds(r[2]),s;case 10:var o=t.split("-");return new Date(o[0],o[1]-1,o[2],0,0,0);case 19:var h=t.split(" "),c=h[0].split("-"),v=h[1].split(":");return new Date(c[0],c[1]-1,c[2],v[0],v[1],v[2]);default:throw new j("Invalid date format : "+t)}},U.cca=function(t,n){var r=t.charCodeAt(n);if(r==r)return r},U.substr=function(t,n,r){return n!=null&&n!=0&&r!=null&&r<0?"":(r==null&&(r=t.length),n<0?(n=t.length+n,n<0&&(n=0)):r<0&&(r=t.length+r-n),t.substr(n,r))},U.iter=function(t){return{cur:0,arr:t,hasNext:function(){return this.cur<this.arr.length},next:function(){return this.arr[this.cur++]}}};var K=function(){};p.Lambda=K,K.__name__=["Lambda"],K.fold=function(t,n,r){for(var s=be(t)();s.hasNext();){var o=s.next();r=n(o,r)}return r};var H=function(){this.length=0};p.List=H,H.__name__=["List"],H.prototype={add:function(t){var n=[t];this.h==null?this.h=n:this.q[1]=n,this.q=n,this.length++},pop:function(){if(this.h==null)return null;var t=this.h[0];return this.h=this.h[1],this.h==null&&(this.q=null),this.length--,t},isEmpty:function(){return this.h==null},__class__:H},Math.__name__=["Math"];var W=function(){};p.Reflect=W,W.__name__=["Reflect"],W.field=function(t,n){try{return t[n]}catch(r){return r instanceof j&&(r=r.val),null}},W.callMethod=function(t,n,r){return n.apply(t,r)},W.fields=function(t){var n=[];if(t!=null){var r=Object.prototype.hasOwnProperty;for(var s in t)s!="__id__"&&s!="hx__closures__"&&r.call(t,s)&&n.push(s)}return n},W.isFunction=function(t){return typeof t=="function"&&!(t.__name__||t.__ename__)},W.deleteField=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)?(delete t[n],!0):!1};var wt=function(){};p.Std=wt,wt.__name__=["Std"],wt.string=function(t){return bt.__string_rec(t,"")},wt.parseFloat=function(t){return parseFloat(t)};var Pt=function(){this.b=""};p.StringBuf=Pt,Pt.__name__=["StringBuf"],Pt.prototype={add:function(t){this.b+=wt.string(t)},__class__:Pt};var mt=function(){};p.StringTools=mt,mt.__name__=["StringTools"],mt.fastCodeAt=function(t,n){return t.charCodeAt(n)};var Z=p.ValueType={__ename__:["ValueType"],__constructs__:["TNull","TInt","TFloat","TBool","TObject","TFunction","TClass","TEnum","TUnknown"]};Z.TNull=["TNull",0],Z.TNull.toString=N,Z.TNull.__enum__=Z,Z.TInt=["TInt",1],Z.TInt.toString=N,Z.TInt.__enum__=Z,Z.TFloat=["TFloat",2],Z.TFloat.toString=N,Z.TFloat.__enum__=Z,Z.TBool=["TBool",3],Z.TBool.toString=N,Z.TBool.__enum__=Z,Z.TObject=["TObject",4],Z.TObject.toString=N,Z.TObject.__enum__=Z,Z.TFunction=["TFunction",5],Z.TFunction.toString=N,Z.TFunction.__enum__=Z,Z.TClass=function(t){var n=["TClass",6,t];return n.__enum__=Z,n.toString=N,n},Z.TEnum=function(t){var n=["TEnum",7,t];return n.__enum__=Z,n.toString=N,n},Z.TUnknown=["TUnknown",8],Z.TUnknown.toString=N,Z.TUnknown.__enum__=Z;var ct=function(){};p.Type=ct,ct.__name__=["Type"],ct.getClassName=function(t){var n=t.__name__;return n==null?null:n.join(".")},ct.getEnumName=function(t){var n=t.__ename__;return n.join(".")},ct.resolveClass=function(t){var n=p[t];return n==null||!n.__name__?null:n},ct.resolveEnum=function(t){var n=p[t];return n==null||!n.__ename__?null:n},ct.createEmptyInstance=function(t){function n(){}return n.prototype=t.prototype,new n},ct.createEnum=function(t,n,r){var s=W.field(t,n);if(s==null)throw new j("No such constructor "+n);if(W.isFunction(s)){if(r==null)throw new j("Constructor "+n+" need parameters");return W.callMethod(t,s,r)}if(r!=null&&r.length!=0)throw new j("Constructor "+n+" does not need parameters");return s},ct.getEnumConstructs=function(t){var n=t.__constructs__;return n.slice()},ct.typeof=function(t){var n=typeof t;switch(n){case"boolean":return Z.TBool;case"string":return Z.TClass(String);case"number":return Math.ceil(t)==t%2147483648?Z.TInt:Z.TFloat;case"object":if(t==null)return Z.TNull;var r=t.__enum__;if(r!=null)return Z.TEnum(r);var s=bt.getClass(t);return s!=null?Z.TClass(s):Z.TObject;case"function":return t.__name__||t.__ename__?Z.TObject:Z.TFunction;case"undefined":return Z.TNull;default:return Z.TUnknown}};var lt=function(){};p["haxe.IMap"]=lt,lt.__name__=["haxe","IMap"];var Rt=function(t,n){this.high=t,this.low=n};p["haxe._Int64.___Int64"]=Rt,Rt.__name__=["haxe","_Int64","___Int64"],Rt.prototype={__class__:Rt};var Xt=function(){this.buf=new Pt,this.cache=[],this.useCache=Xt.USE_CACHE,this.useEnumIndex=Xt.USE_ENUM_INDEX,this.shash=new he,this.scount=0};p["haxe.Serializer"]=Xt,Xt.__name__=["haxe","Serializer"],Xt.prototype={toString:function(){return this.buf.b},serializeString:function(t){var n=this.shash.get(t);if(n!=null){this.buf.b+="R",n==null?this.buf.b+="null":this.buf.b+=""+n;return}this.shash.set(t,this.scount++),this.buf.b+="y",t=encodeURIComponent(t),t.length==null?this.buf.b+="null":this.buf.b+=""+t.length,this.buf.b+=":",t==null?this.buf.b+="null":this.buf.b+=""+t},serializeRef:function(t){for(var n=typeof t,r=0,s=this.cache.length;r<s;){var o=r++,h=this.cache[o];if(typeof h==n&&h==t)return this.buf.b+="r",o==null?this.buf.b+="null":this.buf.b+=""+o,!0}return this.cache.push(t),!1},serializeFields:function(t){for(var n=0,r=W.fields(t);n<r.length;){var s=r[n];++n,this.serializeString(s),this.serialize(W.field(t,s))}this.buf.b+="g"},serialize:function(t){{var n=ct.typeof(t);switch(n[1]){case 0:this.buf.b+="n";break;case 1:var r=t;if(r==0){this.buf.b+="z";return}this.buf.b+="i",r==null?this.buf.b+="null":this.buf.b+=""+r;break;case 2:var s=t;isNaN(s)?this.buf.b+="k":isFinite(s)?(this.buf.b+="d",s==null?this.buf.b+="null":this.buf.b+=""+s):s<0?this.buf.b+="m":this.buf.b+="p";break;case 3:t?this.buf.b+="t":this.buf.b+="f";break;case 6:var o=n[2];if(o==String){this.serializeString(t);return}if(this.useCache&&this.serializeRef(t))return;switch(o){case Array:var h=0;this.buf.b+="a";for(var c=t.length,v=0;v<c;){var d=v++;t[d]==null?h++:(h>0&&(h==1?this.buf.b+="n":(this.buf.b+="u",h==null?this.buf.b+="null":this.buf.b+=""+h),h=0),this.serialize(t[d]))}h>0&&(h==1?this.buf.b+="n":(this.buf.b+="u",h==null?this.buf.b+="null":this.buf.b+=""+h)),this.buf.b+="h";break;case H:this.buf.b+="l";for(var m=t,b=m.h,w=null;b!=null;){var M;w=b[0],b=b[1],M=w,this.serialize(M)}this.buf.b+="h";break;case Date:var P=t;this.buf.b+="v",this.buf.add(P.getTime());break;case he:this.buf.b+="b";for(var z=t,I=z.keys();I.hasNext();){var C=I.next();this.serializeString(C),this.serialize(Ir[C]!=null?z.getReserved(C):z.h[C])}this.buf.b+="h";break;case jt:this.buf.b+="q";for(var L=t,B=L.keys();B.hasNext();){var T=B.next();this.buf.b+=":",T==null?this.buf.b+="null":this.buf.b+=""+T,this.serialize(L.h[T])}this.buf.b+="h";break;case Qt:this.buf.b+="M";for(var R=t,F=R.keys();F.hasNext();){var X=F.next(),D=W.field(X,"__id__");W.deleteField(X,"__id__"),this.serialize(X),X.__id__=D,this.serialize(R.h[X.__id__])}this.buf.b+="h";break;case le:for(var V=t,q=0,J=V.length-2,$=new Pt,nt=Xt.BASE64;q<J;){var st=V.get(q++),rt=V.get(q++),at=V.get(q++);$.add(nt.charAt(st>>2)),$.add(nt.charAt((st<<4|rt>>4)&63)),$.add(nt.charAt((rt<<2|at>>6)&63)),$.add(nt.charAt(at&63))}if(q==J){var et=V.get(q++),ot=V.get(q++);$.add(nt.charAt(et>>2)),$.add(nt.charAt((et<<4|ot>>4)&63)),$.add(nt.charAt(ot<<2&63))}else if(q==J+1){var O=V.get(q++);$.add(nt.charAt(O>>2)),$.add(nt.charAt(O<<4&63))}var ut=$.b;this.buf.b+="s",ut.length==null?this.buf.b+="null":this.buf.b+=""+ut.length,this.buf.b+=":",ut==null?this.buf.b+="null":this.buf.b+=""+ut;break;default:this.useCache&&this.cache.pop(),t.hxSerialize!=null?(this.buf.b+="C",this.serializeString(ct.getClassName(o)),this.useCache&&this.cache.push(t),t.hxSerialize(this),this.buf.b+="g"):(this.buf.b+="c",this.serializeString(ct.getClassName(o)),this.useCache&&this.cache.push(t),this.serializeFields(t))}break;case 4:if(bt.__instanceof(t,yi)){var gt=ct.getClassName(t);this.buf.b+="A",this.serializeString(gt)}else if(bt.__instanceof(t,wi))this.buf.b+="B",this.serializeString(ct.getEnumName(t));else{if(this.useCache&&this.serializeRef(t))return;this.buf.b+="o",this.serializeFields(t)}break;case 7:var It=n[2];if(this.useCache){if(this.serializeRef(t))return;this.cache.pop()}this.useEnumIndex?this.buf.b+="j":this.buf.b+="w",this.serializeString(ct.getEnumName(It)),this.useEnumIndex?(this.buf.b+=":",this.buf.b+=wt.string(t[1])):this.serializeString(t[0]),this.buf.b+=":";var Et=t.length;this.buf.b+=wt.string(Et-2);for(var Ct=2;Ct<Et;){var Tt=Ct++;this.serialize(t[Tt])}this.useCache&&this.cache.push(t);break;case 5:throw new j("Cannot serialize function");default:throw new j("Cannot serialize "+wt.string(t))}}},__class__:Xt};var Vt=function(t){this.buf=t,this.length=t.length,this.pos=0,this.scache=[],this.cache=[];var n=Vt.DEFAULT_RESOLVER;n==null&&(n=ct,Vt.DEFAULT_RESOLVER=n),this.setResolver(n)};p["haxe.Unserializer"]=Vt,Vt.__name__=["haxe","Unserializer"],Vt.initCodes=function(){for(var t=[],n=0,r=Vt.BASE64.length;n<r;){var s=n++;t[Vt.BASE64.charCodeAt(s)]=s}return t},Vt.prototype={setResolver:function(t){t==null?this.resolver={resolveClass:function(n){return null},resolveEnum:function(n){return null}}:this.resolver=t},get:function(t){return this.buf.charCodeAt(t)},readDigits:function(){for(var t=0,n=!1,r=this.pos;;){var s=this.buf.charCodeAt(this.pos);if(s!=s)break;if(s==45){if(this.pos!=r)break;n=!0,this.pos++;continue}if(s<48||s>57)break;t=t*10+(s-48),this.pos++}return n&&(t*=-1),t},readFloat:function(){for(var t=this.pos;;){var n=this.buf.charCodeAt(this.pos);if(n>=43&&n<58||n==101||n==69)this.pos++;else break}return wt.parseFloat(U.substr(this.buf,t,this.pos-t))},unserializeObject:function(t){for(;;){if(this.pos>=this.length)throw new j("Invalid object");if(this.buf.charCodeAt(this.pos)==103)break;var n=this.unserialize();if(typeof n!="string")throw new j("Invalid object key");var r=this.unserialize();t[n]=r}this.pos++},unserializeEnum:function(t,n){if(this.get(this.pos++)!=58)throw new j("Invalid enum format");var r=this.readDigits();if(r==0)return ct.createEnum(t,n);for(var s=[];r-- >0;)s.push(this.unserialize());return ct.createEnum(t,n,s)},unserialize:function(){var t=this.get(this.pos++);switch(t){case 110:return null;case 116:return!0;case 102:return!1;case 122:return 0;case 105:return this.readDigits();case 100:return this.readFloat();case 121:var n=this.readDigits();if(this.get(this.pos++)!=58||this.length-this.pos<n)throw new j("Invalid string length");var r=U.substr(this.buf,this.pos,n);return this.pos+=n,r=decodeURIComponent(r.split("+").join(" ")),this.scache.push(r),r;case 107:return NaN;case 109:return-1/0;case 112:return 1/0;case 97:this.buf;var s=[];for(this.cache.push(s);;){var o=this.buf.charCodeAt(this.pos);if(o==104){this.pos++;break}if(o==117){this.pos++;var h=this.readDigits();s[s.length+h-1]=null}else s.push(this.unserialize())}return s;case 111:var c={};return this.cache.push(c),this.unserializeObject(c),c;case 114:var v=this.readDigits();if(v<0||v>=this.cache.length)throw new j("Invalid reference");return this.cache[v];case 82:var d=this.readDigits();if(d<0||d>=this.scache.length)throw new j("Invalid string reference");return this.scache[d];case 120:throw new j(this.unserialize());case 99:var m=this.unserialize(),b=this.resolver.resolveClass(m);if(b==null)throw new j("Class not found "+m);var w=ct.createEmptyInstance(b);return this.cache.push(w),this.unserializeObject(w),w;case 119:var M=this.unserialize(),P=this.resolver.resolveEnum(M);if(P==null)throw new j("Enum not found "+M);var z=this.unserializeEnum(P,this.unserialize());return this.cache.push(z),z;case 106:var I=this.unserialize(),C=this.resolver.resolveEnum(I);if(C==null)throw new j("Enum not found "+I);this.pos++;var L=this.readDigits(),B=ct.getEnumConstructs(C)[L];if(B==null)throw new j("Unknown enum index "+I+"@"+L);var T=this.unserializeEnum(C,B);return this.cache.push(T),T;case 108:var R=new H;for(this.cache.push(R),this.buf;this.buf.charCodeAt(this.pos)!=104;)R.add(this.unserialize());return this.pos++,R;case 98:var F=new he;for(this.cache.push(F),this.buf;this.buf.charCodeAt(this.pos)!=104;){var X=this.unserialize();F.set(X,this.unserialize())}return this.pos++,F;case 113:var D=new jt;this.cache.push(D),this.buf;for(var V=this.get(this.pos++);V==58;){var q=this.readDigits();D.set(q,this.unserialize()),V=this.get(this.pos++)}if(V!=104)throw new j("Invalid IntMap format");return D;case 77:var J=new Qt;for(this.cache.push(J),this.buf;this.buf.charCodeAt(this.pos)!=104;){var $=this.unserialize();J.set($,this.unserialize())}return this.pos++,J;case 118:var nt;if(this.buf.charCodeAt(this.pos)>=48&&this.buf.charCodeAt(this.pos)<=57&&this.buf.charCodeAt(this.pos+1)>=48&&this.buf.charCodeAt(this.pos+1)<=57&&this.buf.charCodeAt(this.pos+2)>=48&&this.buf.charCodeAt(this.pos+2)<=57&&this.buf.charCodeAt(this.pos+3)>=48&&this.buf.charCodeAt(this.pos+3)<=57&&this.buf.charCodeAt(this.pos+4)==45){var st=U.substr(this.buf,this.pos,19);nt=U.strDate(st),this.pos+=19}else{var rt=this.readFloat(),at=new Date;at.setTime(rt),nt=at}return this.cache.push(nt),nt;case 115:var et=this.readDigits(),ot=this.buf;if(this.get(this.pos++)!=58||this.length-this.pos<et)throw new j("Invalid bytes length");var O=Vt.CODES;O==null&&(O=Vt.initCodes(),Vt.CODES=O);var ut=this.pos,gt=et&3,It;It=(et>>2)*3+(gt>=2?gt-1:0);for(var Et=ut+(et-gt),Ct=le.alloc(It),Tt=0;ut<Et;){var ie=O[mt.fastCodeAt(ot,ut++)],ge=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,ie<<2|ge>>4);var ne=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,ge<<4|ne>>2);var $t=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,ne<<6|$t)}if(gt>=2){var se=O[mt.fastCodeAt(ot,ut++)],_e=O[mt.fastCodeAt(ot,ut++)];if(Ct.set(Tt++,se<<2|_e>>4),gt==3){var xe=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,_e<<4|xe>>2)}}return this.pos+=et,this.cache.push(Ct),Ct;case 67:var Ee=this.unserialize(),Me=this.resolver.resolveClass(Ee);if(Me==null)throw new j("Class not found "+Ee);var Pe=ct.createEmptyInstance(Me);if(this.cache.push(Pe),Pe.hxUnserialize(this),this.get(this.pos++)!=103)throw new j("Invalid custom data");return Pe;case 65:var Ae=this.unserialize(),Re=this.resolver.resolveClass(Ae);if(Re==null)throw new j("Class not found "+Ae);return Re;case 66:var bn=this.unserialize(),en=this.resolver.resolveEnum(bn);if(en==null)throw new j("Enum not found "+bn);return en}throw this.pos--,new j("Invalid char "+this.buf.charAt(this.pos)+" at position "+this.pos)},__class__:Vt};var jt=function(){this.h={}};p["haxe.ds.IntMap"]=jt,jt.__name__=["haxe","ds","IntMap"],jt.__interfaces__=[lt],jt.prototype={set:function(t,n){this.h[t]=n},remove:function(t){return this.h.hasOwnProperty(t)?(delete this.h[t],!0):!1},keys:function(){var t=[];for(var n in this.h)this.h.hasOwnProperty(n)&&t.push(n|0);return U.iter(t)},__class__:jt};var Qt=function(){this.h={},this.h.__keys__={}};p["haxe.ds.ObjectMap"]=Qt,Qt.__name__=["haxe","ds","ObjectMap"],Qt.__interfaces__=[lt],Qt.prototype={set:function(t,n){var r=t.__id__||(t.__id__=++Qt.count);this.h[r]=n,this.h.__keys__[r]=t},keys:function(){var t=[];for(var n in this.h.__keys__)this.h.hasOwnProperty(n)&&t.push(this.h.__keys__[n]);return U.iter(t)},__class__:Qt};var oe=p["haxe.ds.Option"]={__ename__:["haxe","ds","Option"],__constructs__:["Some","None"]};oe.Some=function(t){var n=["Some",0,t];return n.__enum__=oe,n.toString=N,n},oe.None=["None",1],oe.None.toString=N,oe.None.__enum__=oe;var he=function(){this.h={}};p["haxe.ds.StringMap"]=he,he.__name__=["haxe","ds","StringMap"],he.__interfaces__=[lt],he.prototype={set:function(t,n){Ir[t]!=null?this.setReserved(t,n):this.h[t]=n},get:function(t){return Ir[t]!=null?this.getReserved(t):this.h[t]},setReserved:function(t,n){this.rh==null&&(this.rh={}),this.rh["$"+t]=n},getReserved:function(t){return this.rh==null?null:this.rh["$"+t]},keys:function(){var t=this.arrayKeys();return U.iter(t)},arrayKeys:function(){var t=[];for(var n in this.h)this.h.hasOwnProperty(n)&&t.push(n);if(this.rh!=null)for(var n in this.rh)n.charCodeAt(0)==36&&t.push(n.substr(1));return t},__class__:he};var le=function(t){this.length=t.byteLength,this.b=new Nr(t),this.b.bufferValue=t,t.hxBytes=this,t.bytes=this.b};p["haxe.io.Bytes"]=le,le.__name__=["haxe","io","Bytes"],le.alloc=function(t){return new le(new or(t))},le.prototype={get:function(t){return this.b[t]},set:function(t,n){this.b[t]=n&255},__class__:le};var Ft=p["haxe.io.Error"]={__ename__:["haxe","io","Error"],__constructs__:["Blocked","Overflow","OutsideBounds","Custom"]};Ft.Blocked=["Blocked",0],Ft.Blocked.toString=N,Ft.Blocked.__enum__=Ft,Ft.Overflow=["Overflow",1],Ft.Overflow.toString=N,Ft.Overflow.__enum__=Ft,Ft.OutsideBounds=["OutsideBounds",2],Ft.OutsideBounds.toString=N,Ft.OutsideBounds.__enum__=Ft,Ft.Custom=function(t){var n=["Custom",3,t];return n.__enum__=Ft,n.toString=N,n};var Wt=function(){};p["haxe.io.FPHelper"]=Wt,Wt.__name__=["haxe","io","FPHelper"],Wt.i32ToFloat=function(t){var n=1-(t>>>31<<1),r=t>>>23&255,s=t&8388607;return s==0&&r==0?0:n*(1+Math.pow(2,-23)*s)*Math.pow(2,r-127)},Wt.floatToI32=function(t){if(t==0)return 0;var n;t<0?n=-t:n=t;var r=Math.floor(Math.log(n)/.6931471805599453);r<-127?r=-127:r>128&&(r=128);var s=Math.round((n/Math.pow(2,r)-1)*8388608)&8388607;return(t<0?-2147483648:0)|r+127<<23|s},Wt.i64ToDouble=function(t,n){var r=1-(n>>>31<<1),s=(n>>20&2047)-1023,o=(n&1048575)*4294967296+(t>>>31)*2147483648+(t&2147483647);return o==0&&s==-1023?0:r*(1+Math.pow(2,-52)*o)*Math.pow(2,s)},Wt.doubleToI64=function(t){var n=Wt.i64tmp;if(t==0)n.low=0,n.high=0;else{var r;t<0?r=-t:r=t;var s=Math.floor(Math.log(r)/.6931471805599453),o,h=(r/Math.pow(2,s)-1)*4503599627370496;o=Math.round(h);var c=o|0,v=o/4294967296|0;n.low=c,n.high=(t<0?-2147483648:0)|s+1023<<20|v}return n};var j=function(t){Error.call(this),this.val=t,this.message=String(t),Error.captureStackTrace&&Error.captureStackTrace(this,j)};p["js._Boot.HaxeError"]=j,j.__name__=["js","_Boot","HaxeError"],j.__super__=Error,j.prototype=k(Error.prototype,{__class__:j});var bt=function(){};p["js.Boot"]=bt,bt.__name__=["js","Boot"],bt.getClass=function(t){if(t instanceof Array&&t.__enum__==null)return Array;var n=t.__class__;if(n!=null)return n;var r=bt.__nativeClassName(t);return r!=null?bt.__resolveNativeClass(r):null},bt.__string_rec=function(t,n){if(t==null)return"null";if(n.length>=5)return"<...>";var r=typeof t;switch(r=="function"&&(t.__name__||t.__ename__)&&(r="object"),r){case"object":if(t instanceof Array){if(t.__enum__){if(t.length==2)return t[0];var s=t[0]+"(";n+=" ";for(var o=2,h=t.length;o<h;){var c=o++;c!=2?s+=","+bt.__string_rec(t[c],n):s+=bt.__string_rec(t[c],n)}return s+")"}var v=t.length,d="[";n+=" ";for(var m=0;m<v;){var b=m++;d+=(b>0?",":"")+bt.__string_rec(t[b],n)}return d+="]",d}var w;try{w=t.toString}catch(C){return C instanceof j&&(C=C.val),"???"}if(w!=null&&w!=Object.toString&&typeof w=="function"){var M=t.toString();if(M!="[object Object]")return M}var P=null,z=`{
2
- `;n+=" ";var I=t.hasOwnProperty!=null;for(var P in t)I&&!t.hasOwnProperty(P)||P=="prototype"||P=="__class__"||P=="__super__"||P=="__interfaces__"||P=="__properties__"||(z.length!=2&&(z+=`,
3
- `),z+=n+P+" : "+bt.__string_rec(t[P],n));return n=n.substring(1),z+=`
4
- `+n+"}",z;case"function":return"<function>";case"string":return t;default:return String(t)}},bt.__interfLoop=function(t,n){if(t==null)return!1;if(t==n)return!0;var r=t.__interfaces__;if(r!=null)for(var s=0,o=r.length;s<o;){var h=s++,c=r[h];if(c==n||bt.__interfLoop(c,n))return!0}return bt.__interfLoop(t.__super__,n)},bt.__instanceof=function(t,n){if(n==null)return!1;switch(n){case Xi:return(t|0)===t;case gi:return typeof t=="number";case pi:return typeof t=="boolean";case String:return typeof t=="string";case Array:return t instanceof Array&&t.__enum__==null;case Wi:return!0;default:if(t!=null){if(typeof n=="function"){if(t instanceof n||bt.__interfLoop(bt.getClass(t),n))return!0}else if(typeof n=="object"&&bt.__isNativeObj(n)&&t instanceof n)return!0}else return!1;return n==yi&&t.__name__!=null||n==wi&&t.__ename__!=null?!0:t.__enum__==n}},bt.__nativeClassName=function(t){var n=bt.__toStr.call(t).slice(8,-1);return n=="Object"||n=="Function"||n=="Math"||n=="JSON"?null:n},bt.__isNativeObj=function(t){return bt.__nativeClassName(t)!=null},bt.__resolveNativeClass=function(t){return A[t]};var Zt=function(t){if(t instanceof Array&&t.__enum__==null)this.a=t,this.byteLength=t.length;else{var n=t;this.a=[];for(var r=0;r<n;){var s=r++;this.a[s]=0}this.byteLength=n}};p["js.html.compat.ArrayBuffer"]=Zt,Zt.__name__=["js","html","compat","ArrayBuffer"],Zt.sliceImpl=function(t,n){var r=new Nr(this,t,n==null?null:n-t),s=new or(r.byteLength),o=new Nr(s);return o.set(r),s},Zt.prototype={slice:function(t,n){return new Zt(this.a.slice(t,n))},__class__:Zt};var Se=function(t,n,r){if(this.buf=t,n==null?this.offset=0:this.offset=n,r==null?this.length=t.byteLength-this.offset:this.length=r,this.offset<0||this.length<0||this.offset+this.length>t.byteLength)throw new j(Ft.OutsideBounds)};p["js.html.compat.DataView"]=Se,Se.__name__=["js","html","compat","DataView"],Se.prototype={getInt8:function(t){var n=this.buf.a[this.offset+t];return n>=128?n-256:n},getUint8:function(t){return this.buf.a[this.offset+t]},getInt16:function(t,n){var r=this.getUint16(t,n);return r>=32768?r-65536:r},getUint16:function(t,n){return n?this.buf.a[this.offset+t]|this.buf.a[this.offset+t+1]<<8:this.buf.a[this.offset+t]<<8|this.buf.a[this.offset+t+1]},getInt32:function(t,n){var r=this.offset+t,s=this.buf.a[r++],o=this.buf.a[r++],h=this.buf.a[r++],c=this.buf.a[r++];return n?s|o<<8|h<<16|c<<24:c|h<<8|o<<16|s<<24},getUint32:function(t,n){var r=this.getInt32(t,n);return r<0?r+4294967296:r},getFloat32:function(t,n){return Wt.i32ToFloat(this.getInt32(t,n))},getFloat64:function(t,n){var r=this.getInt32(t,n),s=this.getInt32(t+4,n);return Wt.i64ToDouble(n?r:s,n?s:r)},setInt8:function(t,n){n<0?this.buf.a[t+this.offset]=n+128&255:this.buf.a[t+this.offset]=n&255},setUint8:function(t,n){this.buf.a[t+this.offset]=n&255},setInt16:function(t,n,r){this.setUint16(t,n<0?n+65536:n,r)},setUint16:function(t,n,r){var s=t+this.offset;r?(this.buf.a[s]=n&255,this.buf.a[s++]=n>>8&255):(this.buf.a[s++]=n>>8&255,this.buf.a[s]=n&255)},setInt32:function(t,n,r){this.setUint32(t,n,r)},setUint32:function(t,n,r){var s=t+this.offset;r?(this.buf.a[s++]=n&255,this.buf.a[s++]=n>>8&255,this.buf.a[s++]=n>>16&255,this.buf.a[s++]=n>>>24):(this.buf.a[s++]=n>>>24,this.buf.a[s++]=n>>16&255,this.buf.a[s++]=n>>8&255,this.buf.a[s++]=n&255)},setFloat32:function(t,n,r){this.setUint32(t,Wt.floatToI32(n),r)},setFloat64:function(t,n,r){var s=Wt.doubleToI64(n);r?(this.setUint32(t,s.low),this.setUint32(t,s.high)):(this.setUint32(t,s.high),this.setUint32(t,s.low))},__class__:Se};var Ce=function(){};p["js.html.compat.Uint8Array"]=Ce,Ce.__name__=["js","html","compat","Uint8Array"],Ce._new=function(t,n,r){var s;if(typeof t=="number"){s=[];for(var o=0;o<t;){var h=o++;s[h]=0}s.byteLength=s.length,s.byteOffset=0,s.buffer=new Zt(s)}else if(bt.__instanceof(t,Zt)){var c=t;n==null&&(n=0),r==null&&(r=c.byteLength-n),n==0?s=c.a:s=c.a.slice(n,n+r),s.byteLength=s.length,s.byteOffset=n,s.buffer=c}else if(t instanceof Array&&t.__enum__==null)s=t.slice(),s.byteLength=s.length,s.byteOffset=0,s.buffer=new Zt(s);else throw new j("TODO "+wt.string(t));return s.subarray=Ce._subarray,s.set=Ce._set,s},Ce._set=function(t,n){var r=this;if(bt.__instanceof(t.buffer,Zt)){var s=t;if(t.byteLength+n>r.byteLength)throw new j("set() outside of range");for(var o=0,h=t.byteLength;o<h;){var c=o++;r[c+n]=s[c]}}else if(t instanceof Array&&t.__enum__==null){var v=t;if(v.length+n>r.byteLength)throw new j("set() outside of range");for(var d=0,m=v.length;d<m;){var b=d++;r[b+n]=v[b]}}else throw new j("TODO")},Ce._subarray=function(t,n){var r=this,s=Ce._new(r.slice(t,n));return s.byteOffset=t,s};var yt=function(t){this._resolved=!1,this._pending=!1,this._errorPending=!1,this._fulfilled=!1,this._update=[],this._error=[],this._errored=!1,t!=null&&yt.link(t,this,function(n){return n})};p["promhx.base.AsyncBase"]=yt,yt.__name__=["promhx","base","AsyncBase"],yt.link=function(t,n,r){t._update.push({async:n,linkf:function(s){n.handleResolve(r(s))}}),yt.immediateLinkUpdate(t,n,r)},yt.immediateLinkUpdate=function(t,n,r){if(t._errored&&!t._errorPending&&!(t._error.length>0)&&n.handleError(t._errorVal),t._resolved&&!t._pending)try{n.handleResolve(r(t._val))}catch(s){s instanceof j&&(s=s.val),n.handleError(s)}},yt.linkAll=function(t,n){for(var r=function(h,c,v){if(h.length==0||yt.allFulfilled(h)){for(var d,m=[],b=be(t)();b.hasNext();){var w=b.next();m.push(w==c?v:w._val)}d=m,n.handleResolve(d)}},s=be(t)();s.hasNext();){var o=s.next();o._update.push({async:n,linkf:function(h,c,v){return function(d){h(c,v,d)}}(r,function(h){for(var c,v=[],d=be(t)();d.hasNext();){var m=d.next();m!=o&&v.push(m)}return c=v,c}(),o)})}yt.allFulfilled(t)&&n.handleResolve(function(h){for(var c,v=[],d=be(t)();d.hasNext();){var m=d.next();v.push(m._val)}return c=v,c}())},yt.pipeLink=function(t,n,r){var s=!1,o=function(h){if(!s){s=!0;var c=r(h);c._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(c,n,function(v){return v})}};if(t._update.push({async:n,linkf:o}),t._resolved&&!t._pending)try{o(t._val)}catch(h){h instanceof j&&(h=h.val),n.handleError(h)}},yt.allResolved=function(t){for(var n=be(t)();n.hasNext();){var r=n.next();if(!r._resolved)return!1}return!0},yt.allFulfilled=function(t){for(var n=be(t)();n.hasNext();){var r=n.next();if(!r._fulfilled)return!1}return!0},yt.prototype={catchError:function(t){return this._error.push(t),this},errorThen:function(t){return this._errorMap=t,this},isResolved:function(){return this._resolved},isErrored:function(){return this._errored},isErrorHandled:function(){return this._error.length>0},isErrorPending:function(){return this._errorPending},isFulfilled:function(){return this._fulfilled},isPending:function(){return this._pending},handleResolve:function(t){this._resolve(t)},_resolve:function(t){var n=this;this._pending?ft.enqueue(function(r,s){return function(){r(s)}}(ve(this,this._resolve),t)):(this._resolved=!0,this._pending=!0,ft.queue.add(function(){n._val=t;for(var r=0,s=n._update;r<s.length;){var o=s[r];++r;try{o.linkf(t)}catch(h){h instanceof j&&(h=h.val),o.async.handleError(h)}}n._fulfilled=!0,n._pending=!1}),ft.continueOnNextLoop())},handleError:function(t){this._handleError(t)},_handleError:function(t){var n=this,r=function(s){if(n._error.length>0)for(var o=0,h=n._error;o<h.length;){var c=h[o];++o,c(s)}else if(n._update.length>0)for(var v=0,d=n._update;v<d.length;){var m=d[v];++v,m.async.handleError(s)}else throw new j(s);n._errorPending=!1};this._errorPending||(this._errorPending=!0,this._errored=!0,this._errorVal=t,ft.queue.add(function(){if(n._errorMap!=null)try{n._resolve(n._errorMap(t))}catch(s){s instanceof j&&(s=s.val),r(s)}else r(t)}),ft.continueOnNextLoop())},then:function(t){var n=new yt(null);return yt.link(this,n,t),n},unlink:function(t){var n=this;ft.queue.add(function(){n._update=n._update.filter(function(r){return r.async!=t})}),ft.continueOnNextLoop()},isLinked:function(t){for(var n=!1,r=0,s=this._update;r<s.length;){var o=s[r];if(++r,o.async==t)return!0}return n},__class__:yt};var un=f.promhx.Deferred=function(){yt.call(this)};p["promhx.Deferred"]=un,un.__name__=["promhx","Deferred"],un.__super__=yt,un.prototype=k(yt.prototype,{resolve:function(t){this.handleResolve(t)},throwError:function(t){this.handleError(t)},promise:function(){return new Jt(this)},stream:function(){return new Nt(this)},publicStream:function(){return new Fe(this)},__class__:un});var Jt=f.promhx.Promise=function(t){yt.call(this,t),this._rejected=!1};p["promhx.Promise"]=Jt,Jt.__name__=["promhx","Promise"],Jt.whenAll=function(t){var n=new Jt(null);return yt.linkAll(t,n),n},Jt.promise=function(t){var n=new Jt;return n.handleResolve(t),n},Jt.__super__=yt,Jt.prototype=k(yt.prototype,{isRejected:function(){return this._rejected},reject:function(t){this._rejected=!0,this.handleError(t)},handleResolve:function(t){if(this._resolved){var n="Promise has already been resolved";throw new j(cn.AlreadyResolved(n))}this._resolve(t)},then:function(t){var n=new Jt(null);return yt.link(this,n,t),n},unlink:function(t){var n=this;ft.queue.add(function(){if(n._fulfilled)n._update=n._update.filter(function(s){return s.async!=t});else{var r="Downstream Promise is not fullfilled";n.handleError(cn.DownstreamNotFullfilled(r))}}),ft.continueOnNextLoop()},handleError:function(t){this._rejected=!0,this._handleError(t)},pipe:function(t){var n=new Jt(null);return yt.pipeLink(this,n,t),n},errorPipe:function(t){var n=new Jt;return this.catchError(function(r){var s=t(r);s.then(ve(n,n._resolve))}),this.then(ve(n,n._resolve)),n},__class__:Jt});var Nt=f.promhx.Stream=function(t){yt.call(this,t),this._end_promise=new Jt};p["promhx.Stream"]=Nt,Nt.__name__=["promhx","Stream"],Nt.foreach=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.handleResolve(s)}return n.end(),n},Nt.wheneverAll=function(t){var n=new Nt(null);return yt.linkAll(t,n),n},Nt.concatAll=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.concat(s)}return n},Nt.mergeAll=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.merge(s)}return n},Nt.stream=function(t){var n=new Nt(null);return n.handleResolve(t),n},Nt.__super__=yt,Nt.prototype=k(yt.prototype,{then:function(t){var n=new Nt(null);return yt.link(this,n,t),this._end_promise._update.push({async:n._end_promise,linkf:function(r){n.end()}}),n},detachStream:function(t){for(var n=[],r=!1,s=0,o=this._update;s<o.length;){var h=o[s];++s,h.async==t?(this._end_promise._update=this._end_promise._update.filter(function(c){return c.async!=t._end_promise}),r=!0):n.push(h)}return this._update=n,r},first:function(){var t=new Jt(null);return this.then(function(n){t._resolved||t.handleResolve(n)}),t},handleResolve:function(t){!this._end&&!this._pause&&this._resolve(t)},pause:function(t){t==null&&(t=!this._pause),this._pause=t},pipe:function(t){var n=new Nt(null);return yt.pipeLink(this,n,t),this._end_promise.then(function(r){n.end()}),n},errorPipe:function(t){var n=new Nt(null);return this.catchError(function(r){var s=t(r);s.then(ve(n,n._resolve)),s._end_promise.then((kr=n._end_promise,ve(kr,kr._resolve)))}),this.then(ve(n,n._resolve)),this._end_promise.then(function(r){n.end()}),n},handleEnd:function(){if(this._pending)ft.queue.add(ve(this,this.handleEnd)),ft.continueOnNextLoop();else{if(this._end_promise._resolved)return;this._end=!0;var t;this._resolved?t=oe.Some(this._val):t=oe.None,this._end_promise.handleResolve(t),this._update=[],this._error=[]}},end:function(){return ft.queue.add(ve(this,this.handleEnd)),ft.continueOnNextLoop(),this},endThen:function(t){return this._end_promise.then(t)},filter:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:function(r){t(r)&&n.handleResolve(r)}}),yt.immediateLinkUpdate(this,n,function(r){return r}),n},concat:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(this,n,function(r){return r}),this._end_promise.then(function(r){t.pipe(function(s){return n.handleResolve(s),n}),t._end_promise.then(function(s){n.end()})}),n},merge:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:ve(n,n.handleResolve)}),t._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(this,n,function(r){return r}),yt.immediateLinkUpdate(t,n,function(r){return r}),n},__class__:Nt});var Fe=f.promhx.PublicStream=function(t){Nt.call(this,t)};p["promhx.PublicStream"]=Fe,Fe.__name__=["promhx","PublicStream"],Fe.publicstream=function(t){var n=new Fe(null);return n.handleResolve(t),n},Fe.__super__=Nt,Fe.prototype=k(Nt.prototype,{resolve:function(t){this.handleResolve(t)},throwError:function(t){this.handleError(t)},update:function(t){this.handleResolve(t)},__class__:Fe});var ft=function(){};p["promhx.base.EventLoop"]=ft,ft.__name__=["promhx","base","EventLoop"],ft.enqueue=function(t){ft.queue.add(t),ft.continueOnNextLoop()},ft.set_nextLoop=function(t){if(ft.nextLoop!=null)throw new j("nextLoop has already been set");return ft.nextLoop=t,ft.nextLoop},ft.queueEmpty=function(){return ft.queue.isEmpty()},ft.finish=function(t){t==null&&(t=1e3);for(var n=null;t-- >0&&(n=ft.queue.pop())!=null;)n();return ft.queue.isEmpty()},ft.clear=function(){ft.queue=new H},ft.f=function(){var t=ft.queue.pop();t!=null&&t(),ft.queue.isEmpty()||ft.continueOnNextLoop()},ft.continueOnNextLoop=function(){ft.nextLoop!=null?ft.nextLoop(ft.f):setImmediate(ft.f)};var cn=p["promhx.error.PromiseError"]={__ename__:["promhx","error","PromiseError"],__constructs__:["AlreadyResolved","DownstreamNotFullfilled"]};cn.AlreadyResolved=function(t){var n=["AlreadyResolved",0,t];return n.__enum__=cn,n.toString=N,n},cn.DownstreamNotFullfilled=function(t){var n=["DownstreamNotFullfilled",1,t];return n.__enum__=cn,n.toString=N,n};var sr=function(){};p["verb.Verb"]=sr,sr.__name__=["verb","Verb"],sr.main=function(){x.log("verb 2.1.0")};var G=function(){};p["verb.core.ArrayExtensions"]=G,G.__name__=["verb","core","ArrayExtensions"],G.alloc=function(t,n){if(!(n<0))for(;t.length<n;)t.push(null)},G.reversed=function(t){var n=t.slice();return n.reverse(),n},G.last=function(t){return t[t.length-1]},G.first=function(t){return t[0]},G.spliceAndInsert=function(t,n,r,s){t.splice(n,r),t.splice(n,0,s)},G.left=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(0,n)},G.right=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(n)},G.rightWithPivot=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(n-1)},G.unique=function(t,n){if(t.length==0)return[];for(var r=[t.pop()];t.length>0;){for(var s=t.pop(),o=!0,h=0;h<r.length;){var c=r[h];if(++h,n(s,c)){o=!1;break}}o&&r.push(s)}return r};var zt=function(){};p["verb.core.Binomial"]=zt,zt.__name__=["verb","core","Binomial"],zt.get=function(t,n){if(n==0)return 1;if(t==0||n>t)return 0;if(n>t-n&&(n=t-n),zt.memo_exists(t,n))return zt.get_memo(t,n);for(var r=1,s=t,o=1,h=n+1;o<h;){var c=o++;if(zt.memo_exists(s,c)){t--,r=zt.get_memo(s,c);continue}r*=t--,r/=c,zt.memoize(s,c,r)}return r},zt.get_no_memo=function(t,n){if(n==0)return 1;if(t==0||n>t)return 0;n>t-n&&(n=t-n);for(var r=1,s=1,o=n+1;s<o;){var h=s++;r*=t--,r/=h}return r},zt.memo_exists=function(t,n){return zt.memo.h.hasOwnProperty(t)&&zt.memo.h[t].h.hasOwnProperty(n)},zt.get_memo=function(t,n){return zt.memo.h[t].h[n]},zt.memoize=function(t,n,r){zt.memo.h.hasOwnProperty(t)||zt.memo.set(t,new jt),zt.memo.h[t].h[n]=r};var ue=f.core.BoundingBox=function(t){this.max=null,this.min=null,this.dim=3,this.initialized=!1,t!=null&&this.addRange(t)};p["verb.core.BoundingBox"]=ue,ue.__name__=["verb","core","BoundingBox"],ue.intervalsOverlap=function(t,n,r,s,o){o==null&&(o=-1);var h;o<-.5?h=tt.TOLERANCE:h=o;var c=Math.min(t,n)-h,v=Math.max(t,n)+h,d=Math.min(r,s)-h,m=Math.max(r,s)+h;return c>=d&&c<=m||v>=d&&v<=m||d>=c&&d<=v||m>=c&&m<=v},ue.prototype={fromPoint:function(t){return new ue([t])},add:function(t){if(!this.initialized)return this.dim=t.length,this.min=t.slice(0),this.max=t.slice(0),this.initialized=!0,this;for(var n=0,r=this.dim;n<r;){var s=n++;t[s]>this.max[s]&&(this.max[s]=t[s]),t[s]<this.min[s]&&(this.min[s]=t[s])}return this},addRange:function(t){for(var n=t.length,r=0;r<n;){var s=r++;this.add(t[s])}return this},contains:function(t,n){return n==null&&(n=-1),this.initialized?this.intersects(new ue([t]),n):!1},intersects:function(t,n){if(n==null&&(n=-1),!this.initialized||!t.initialized)return!1;for(var r=this.min,s=this.max,o=t.min,h=t.max,c=0,v=this.dim;c<v;){var d=c++;if(!ue.intervalsOverlap(r[d],s[d],o[d],h[d],n))return!1}return!0},clear:function(){return this.initialized=!1,this},getLongestAxis:function(){for(var t=0,n=0,r=0,s=this.dim;r<s;){var o=r++,h=this.getAxisLength(o);h>t&&(t=h,n=o)}return n},getAxisLength:function(t){return t<0||t>this.dim-1?0:Math.abs(this.min[t]-this.max[t])},intersect:function(t,n){if(!this.initialized)return null;var r=this.min,s=this.max,o=t.min,h=t.max;if(!this.intersects(t,n))return null;for(var c=[],v=[],d=0,m=this.dim;d<m;){var b=d++;c.push(Math.min(s[b],h[b])),v.push(Math.max(r[b],o[b]))}return new ue([v,c])},__class__:ue};var tt=f.core.Constants=function(){};p["verb.core.Constants"]=tt,tt.__name__=["verb","core","Constants"];var Dt=f.core.SerializableBase=function(){};p["verb.core.SerializableBase"]=Dt,Dt.__name__=["verb","core","SerializableBase"],Dt.prototype={serialize:function(){var t=new Xt;return t.serialize(this),t.toString()},__class__:Dt};var Tn=f.core.Plane=function(t,n){this.origin=t,this.normal=n};p["verb.core.Plane"]=Tn,Tn.__name__=["verb","core","Plane"],Tn.__super__=Dt,Tn.prototype=k(Dt.prototype,{__class__:Tn});var vn=f.core.Ray=function(t,n){this.origin=t,this.dir=n};p["verb.core.Ray"]=vn,vn.__name__=["verb","core","Ray"],vn.__super__=Dt,vn.prototype=k(Dt.prototype,{__class__:vn});var kt=f.core.NurbsCurveData=function(t,n,r){this.degree=t,this.controlPoints=r,this.knots=n};p["verb.core.NurbsCurveData"]=kt,kt.__name__=["verb","core","NurbsCurveData"],kt.__super__=Dt,kt.prototype=k(Dt.prototype,{__class__:kt});var Ot=f.core.NurbsSurfaceData=function(t,n,r,s,o){this.degreeU=t,this.degreeV=n,this.knotsU=r,this.knotsV=s,this.controlPoints=o};p["verb.core.NurbsSurfaceData"]=Ot,Ot.__name__=["verb","core","NurbsSurfaceData"],Ot.__super__=Dt,Ot.prototype=k(Dt.prototype,{__class__:Ot});var ye=f.core.MeshData=function(t,n,r,s){this.faces=t,this.points=n,this.normals=r,this.uvs=s};p["verb.core.MeshData"]=ye,ye.__name__=["verb","core","MeshData"],ye.empty=function(){return new ye([],[],[],[])},ye.__super__=Dt,ye.prototype=k(Dt.prototype,{__class__:ye});var Un=f.core.PolylineData=function(t,n){this.points=t,this.params=n};p["verb.core.PolylineData"]=Un,Un.__name__=["verb","core","PolylineData"],Un.__super__=Dt,Un.prototype=k(Dt.prototype,{__class__:Un});var Rn=f.core.VolumeData=function(t,n,r,s,o,h,c){this.degreeU=t,this.degreeV=n,this.degreeW=r,this.knotsU=s,this.knotsV=o,this.knotsW=h,this.controlPoints=c};p["verb.core.VolumeData"]=Rn,Rn.__name__=["verb","core","VolumeData"],Rn.__super__=Dt,Rn.prototype=k(Dt.prototype,{__class__:Rn});var qt=f.core.Pair=function(t,n){this.item0=t,this.item1=n};p["verb.core.Pair"]=qt,qt.__name__=["verb","core","Pair"],qt.prototype={__class__:qt};var re=f.core.Interval=function(t,n){this.min=t,this.max=n};p["verb.core.Interval"]=re,re.__name__=["verb","core","Interval"],re.prototype={__class__:re};var $e=f.core.CurveCurveIntersection=function(t,n,r,s){this.point0=t,this.point1=n,this.u0=r,this.u1=s};p["verb.core.CurveCurveIntersection"]=$e,$e.__name__=["verb","core","CurveCurveIntersection"],$e.prototype={__class__:$e};var Vn=f.core.CurveSurfaceIntersection=function(t,n,r,s){this.u=t,this.uv=n,this.curvePoint=r,this.surfacePoint=s};p["verb.core.CurveSurfaceIntersection"]=Vn,Vn.__name__=["verb","core","CurveSurfaceIntersection"],Vn.prototype={__class__:Vn};var Oe=f.core.MeshIntersectionPoint=function(t,n,r,s,o){this.visited=!1,this.adj=null,this.opp=null,this.uv0=t,this.uv1=n,this.point=r,this.faceIndex0,this.faceIndex1};p["verb.core.MeshIntersectionPoint"]=Oe,Oe.__name__=["verb","core","MeshIntersectionPoint"],Oe.prototype={__class__:Oe};var Dn=f.core.PolylineMeshIntersection=function(t,n,r,s,o){this.point=t,this.u=n,this.uv=r,this.polylineIndex=s,this.faceIndex=o};p["verb.core.PolylineMeshIntersection"]=Dn,Dn.__name__=["verb","core","PolylineMeshIntersection"],Dn.prototype={__class__:Dn};var Fn=f.core.SurfaceSurfaceIntersectionPoint=function(t,n,r,s){this.uv0=t,this.uv1=n,this.point=r,this.dist=s};p["verb.core.SurfaceSurfaceIntersectionPoint"]=Fn,Fn.__name__=["verb","core","SurfaceSurfaceIntersectionPoint"],Fn.prototype={__class__:Fn};var On=f.core.TriSegmentIntersection=function(t,n,r,s){this.point=t,this.s=n,this.t=r,this.p=s};p["verb.core.TriSegmentIntersection"]=On,On.__name__=["verb","core","TriSegmentIntersection"],On.prototype={__class__:On};var _n=f.core.CurveTriPoint=function(t,n,r){this.u=t,this.point=n,this.uv=r};p["verb.core.CurveTriPoint"]=_n,_n.__name__=["verb","core","CurveTriPoint"],_n.prototype={__class__:_n};var fe=function(t,n,r,s,o){o==null&&(o=!1),s==null&&(s=-1),this.uv=r,this.point=t,this.normal=n,this.id=s,this.degen=o};p["verb.core.SurfacePoint"]=fe,fe.__name__=["verb","core","SurfacePoint"],fe.fromUv=function(t,n){return new fe(null,null,[t,n])},fe.prototype={__class__:fe};var ar=f.core.CurvePoint=function(t,n){this.u=t,this.pt=n};p["verb.core.CurvePoint"]=ar,ar.__name__=["verb","core","CurvePoint"],ar.prototype={__class__:ar};var qn=f.core.KdTree=function(t,n){this.dim=3,this.points=t,this.distanceFunction=n,this.dim=t[0].point.length,this.root=this.buildTree(t,0,null)};p["verb.core.KdTree"]=qn,qn.__name__=["verb","core","KdTree"],qn.prototype={buildTree:function(t,n,r){var s=n%this.dim,o,h;return t.length==0?null:t.length==1?new fn(t[0],s,r):(t.sort(function(c,v){var d=c.point[s]-v.point[s];return d==0?0:d>0?1:-1}),o=Math.floor(t.length/2),h=new fn(t[o],s,r),h.left=this.buildTree(t.slice(0,o),n+1,h),h.right=this.buildTree(t.slice(o+1),n+1,h),h)},nearest:function(t,n,r){var s=this,o=new Gn(function(w){return-w.item1}),h,c=null;c=function(w){for(var M,P=w.dimension,z=s.distanceFunction(t,w.kdPoint.point),I,C=[],L=0,B=s.dim;L<B;)L++,C.push(0);I=C;for(var T,R,F=function(q,J){o.push(new qt(q,J)),o.size()>n&&o.pop()},X=0,D=s.dim;X<D;){var V=X++;V==w.dimension?I[V]=t[V]:I[V]=w.kdPoint.point[V]}if(T=s.distanceFunction(I,w.kdPoint.point),w.right==null&&w.left==null){(o.size()<n||z<o.peek().item1)&&F(w,z);return}w.right==null?M=w.left:w.left==null?M=w.right:t[P]<w.kdPoint.point[P]?M=w.left:M=w.right,c(M),(o.size()<n||z<o.peek().item1)&&F(w,z),(o.size()<n||Math.abs(T)<o.peek().item1)&&(M==w.left?R=w.right:R=w.left,R!=null&&c(R))},h=c;for(var v=0;v<n;)v++,o.push(new qt(null,r));h(this.root);for(var d=[],m=0;m<n;){var b=m++;o.content[b].item0!=null&&d.push(new qt(o.content[b].item0.kdPoint,o.content[b].item1))}return d},__class__:qn};var Gn=function(t){this.content=[],this.scoreFunction=t};p["verb.core.BinaryHeap"]=Gn,Gn.__name__=["verb","core","BinaryHeap"],Gn.prototype={push:function(t){this.content.push(t),this.bubbleUp(this.content.length-1)},pop:function(){var t=this.content[0],n=this.content.pop();return this.content.length>0&&(this.content[0]=n,this.sinkDown(0)),t},peek:function(){return this.content[0]},remove:function(t){for(var n=this.content.length,r=0;r<n;){var s=r++;if(this.content[s]==t){var o=this.content.pop();s!=n-1&&(this.content[s]=o,this.scoreFunction(o)<this.scoreFunction(t)?this.bubbleUp(s):this.sinkDown(s));return}}throw new j("Node not found.")},size:function(){return this.content.length},bubbleUp:function(t){for(var n=this.content[t];t>0;){var r=Math.floor((t+1)/2)-1,s=this.content[r];if(this.scoreFunction(n)<this.scoreFunction(s))this.content[r]=n,this.content[t]=s,t=r;else break}},sinkDown:function(t){for(var n=this.content.length,r=this.content[t],s=this.scoreFunction(r);;){var o=(t+1)*2,h=o-1,c=-1,v=0;if(h<n){var d=this.content[h];v=this.scoreFunction(d),v<s&&(c=h)}if(o<n){var m=this.content[o],b=this.scoreFunction(m);b<(c==-1?s:v)&&(c=o)}if(c!=-1)this.content[t]=this.content[c],this.content[c]=r,t=c;else break}},__class__:Gn};var dn=f.core.KdPoint=function(t,n){this.point=t,this.obj=n};p["verb.core.KdPoint"]=dn,dn.__name__=["verb","core","KdPoint"],dn.prototype={__class__:dn};var fn=f.core.KdNode=function(t,n,r){this.kdPoint=t,this.left=null,this.right=null,this.parent=r,this.dimension=n};p["verb.core.KdNode"]=fn,fn.__name__=["verb","core","KdNode"],fn.prototype={__class__:fn};var Te=function(){};p["verb.eval.IBoundingBoxTree"]=Te,Te.__name__=["verb","eval","IBoundingBoxTree"],Te.prototype={__class__:Te};var ke=function(t,n){this._boundingBox=null,this._curve=t,n==null&&(n=l.domain(this._curve.knots)/64),this._knotTol=n};p["verb.core.LazyCurveBoundingBoxTree"]=ke,ke.__name__=["verb","core","LazyCurveBoundingBoxTree"],ke.__interfaces__=[Te],ke.prototype={split:function(){var t=G.first(this._curve.knots),n=G.last(this._curve.knots),r=n-t,s=Yt.curveSplit(this._curve,(n+t)/2+r*.1*Math.random());return new qt(new ke(s[0],this._knotTol),new ke(s[1],this._knotTol))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=new ue(S.dehomogenize1d(this._curve.controlPoints))),this._boundingBox},yield:function(){return this._curve},indivisible:function(t){return l.domain(this._curve.knots)<this._knotTol},empty:function(){return!1},__class__:ke};var Ie=function(t,n){if(this._boundingBox=null,this._mesh=t,n==null){for(var r=[],s=0,o=t.faces.length;s<o;){var h=s++;r.push(h)}n=r}this._faceIndices=n};p["verb.core.LazyMeshBoundingBoxTree"]=Ie,Ie.__name__=["verb","core","LazyMeshBoundingBoxTree"],Ie.__interfaces__=[Te],Ie.prototype={split:function(){var t=Gt.sortTrianglesOnLongestAxis(this.boundingBox(),this._mesh,this._faceIndices),n=G.left(t),r=G.right(t);return new qt(new Ie(this._mesh,n),new Ie(this._mesh,r))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=Gt.makeMeshAabb(this._mesh,this._faceIndices)),this._boundingBox},yield:function(){return this._faceIndices[0]},indivisible:function(t){return this._faceIndices.length==1},empty:function(){return this._faceIndices.length==0},__class__:Ie};var Ne=function(t,n){this._boundingBox=null,this._polyline=t,n==null&&(n=new re(0,t.points.length!=0?t.points.length-1:0)),this._interval=n};p["verb.core.LazyPolylineBoundingBoxTree"]=Ne,Ne.__name__=["verb","core","LazyPolylineBoundingBoxTree"],Ne.__interfaces__=[Te],Ne.prototype={split:function(){var t=this._interval.min,n=this._interval.max,r=t+Math.ceil((n-t)/2),s=new re(t,r),o=new re(r,n);return new qt(new Ne(this._polyline,s),new Ne(this._polyline,o))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=new ue(this._polyline.points)),this._boundingBox},yield:function(){return this._interval.min},indivisible:function(t){return this._interval.max-this._interval.min==1},empty:function(){return this._interval.max-this._interval.min==0},__class__:Ne};var qe=function(t,n,r,s){n==null&&(n=!1),this._boundingBox=null,this._surface=t,this._splitV=n,r==null&&(r=l.domain(t.knotsU)/16),s==null&&(s=l.domain(t.knotsV)/16),this._knotTolU=r,this._knotTolV=s};p["verb.core.LazySurfaceBoundingBoxTree"]=qe,qe.__name__=["verb","core","LazySurfaceBoundingBoxTree"],qe.__interfaces__=[Te],qe.prototype={split:function(){var t,n;this._splitV?(t=G.first(this._surface.knotsV),n=G.last(this._surface.knotsV)):(t=G.first(this._surface.knotsU),n=G.last(this._surface.knotsU));var r=(t+n)/2,s=Yt.surfaceSplit(this._surface,r,this._splitV);return new qt(new qe(s[0],!this._splitV,this._knotTolU,this._knotTolV),new qe(s[1],!this._splitV,this._knotTolU,this._knotTolV))},boundingBox:function(){if(this._boundingBox==null){this._boundingBox=new ue;for(var t=0,n=this._surface.controlPoints;t<n.length;){var r=n[t];++t,this._boundingBox.addRange(S.dehomogenize1d(r))}}return this._boundingBox},yield:function(){return this._surface},indivisible:function(t){return l.domain(this._surface.knotsV)<this._knotTolV&&l.domain(this._surface.knotsU)<this._knotTolU},empty:function(){return!1},__class__:qe};var Mt=f.core.Mat=function(){};p["verb.core.Mat"]=Mt,Mt.__name__=["verb","core","Mat"],Mt.mul=function(t,n){for(var r=[],s=0,o=n.length;s<o;){var h=s++;r.push(l.mul(t,n[h]))}return r},Mt.mult=function(t,n){var r,s,o,h,c,v,d,m;r=t.length,s=n.length,o=n[0].length,h=[];for(var b=r-1,w=0,M=0;b>=0;){for(c=[],v=t[b],M=o-1;M>=0;){for(d=v[s-1]*n[s-1][M],w=s-2;w>=1;)m=w-1,d+=v[w]*n[w][M]+v[m]*n[m][M],w-=2;w==0&&(d+=v[0]*n[0][M]),c[M]=d,M--}h[b]=c,b--}return h},Mt.add=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.add(t[h],n[h]))}return r},Mt.div=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.div(t[h],n))}return r},Mt.sub=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.sub(t[h],n[h]))}return r},Mt.dot=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.dot(t[h],n))}return r},Mt.identity=function(t){for(var n=l.zeros2d(t,t),r=0;r<t;){var s=r++;n[s][s]=1}return n},Mt.transpose=function(t){if(t.length==0)return[];for(var n=[],r=0,s=t[0].length;r<s;){var o=r++;n.push(function(h){for(var c,v=[],d=0,m=t.length;d<m;){var b=d++;v.push(t[b][o])}return c=v,c}())}return n},Mt.solve=function(t,n){return Mt.LUsolve(Mt.LU(t),n)},Mt.LUsolve=function(t,n){var r,s,o=t.LU,h=o.length,c=n.slice(),v=t.P,d,m,b;for(r=h-1;r!=-1;)c[r]=n[r],--r;for(r=0;r<h;){for(d=v[r],v[r]!=r&&(b=c[r],c[r]=c[d],c[d]=b),m=o[r],s=0;s<r;)c[r]-=c[s]*m[s],++s;++r}for(r=h-1;r>=0;){for(m=o[r],s=r+1;s<h;)c[r]-=c[s]*m[s],++s;c[r]/=m[r],--r}return c},Mt.LU=function(t){for(var n,r,s,o,h,c,v,d,m,b=[],w=0,M=t.length;w<M;){var P=w++;b.push(t[P].slice())}t=b;var z=t.length,I=z-1,C=[];for(s=0;s<z;){for(v=s,c=t[s],m=Math.abs(c[s]),r=s+1;r<z;)o=Math.abs(t[r][s]),m<o&&(m=o,v=r),++r;for(C[s]=v,v!=s&&(t[s]=t[v],t[v]=c,c=t[s]),h=c[s],n=s+1;n<z;)t[n][s]/=h,++n;for(n=s+1;n<z;){for(d=t[n],r=s+1;r<I;)d[r]-=d[s]*c[r],++r,d[r]-=d[s]*c[r],++r;r==I&&(d[r]-=d[s]*c[r]),++n}++s}return new Kn(t,C)};var Kn=function(t,n){this.LU=t,this.P=n};p["verb.core._Mat.LUDecomp"]=Kn,Kn.__name__=["verb","core","_Mat","LUDecomp"],Kn.prototype={__class__:Kn};var Gt=f.core.Mesh=function(){};p["verb.core.Mesh"]=Gt,Gt.__name__=["verb","core","Mesh"],Gt.getTriangleNorm=function(t,n){var r=t[n[0]],s=t[n[1]],o=t[n[2]],h=l.sub(s,r),c=l.sub(o,r),v=l.cross(h,c);return l.mul(1/l.norm(v),v)},Gt.makeMeshAabb=function(t,n){for(var r=new ue,s=0;s<n.length;){var o=n[s];++s,r.add(t.points[t.faces[o][0]]),r.add(t.points[t.faces[o][1]]),r.add(t.points[t.faces[o][2]])}return r},Gt.sortTrianglesOnLongestAxis=function(t,n,r){for(var s=t.getLongestAxis(),o=[],h=0;h<r.length;){var c=r[h];++h;var v=Gt.getMinCoordOnAxis(n.points,n.faces[c],s);o.push(new qt(v,c))}o.sort(function(M,P){var z=M.item0,I=P.item0;return z==I?0:z>I?1:-1});for(var d=[],m=0,b=o.length;m<b;){var w=m++;d.push(o[w].item1)}return d},Gt.getMinCoordOnAxis=function(t,n,r){for(var s=1/0,o=0;o<3;){var h=o++,c=t[n[h]][r];c<s&&(s=c)}return s},Gt.getTriangleCentroid=function(t,n){for(var r=[0,0,0],s=0;s<3;)for(var o=s++,h=0;h<3;){var c=h++;r[c]+=t[n[o]][c]}for(var v=0;v<3;){var d=v++;r[d]/=3}return r},Gt.triangleUVFromPoint=function(t,n,r){var s=t.faces[n],o=t.points[s[0]],h=t.points[s[1]],c=t.points[s[2]],v=t.uvs[s[0]],d=t.uvs[s[1]],m=t.uvs[s[2]],b=l.sub(o,r),w=l.sub(h,r),M=l.sub(c,r),P=l.norm(l.cross(l.sub(o,h),l.sub(o,c))),z=l.norm(l.cross(w,M))/P,I=l.norm(l.cross(M,b))/P,C=l.norm(l.cross(b,w))/P;return l.add(l.mul(z,v),l.add(l.mul(I,d),l.mul(C,m)))};var Ge=function(t,n){if(this._empty=!1,this._face=-1,n==null){for(var r=[],s=0,o=t.faces.length;s<o;){var h=s++;r.push(h)}n=r}if(this._boundingBox=Gt.makeMeshAabb(t,n),n.length<1){this._empty=!0;return}else if(n.length<2){this._face=n[0];return}var c=Gt.sortTrianglesOnLongestAxis(this._boundingBox,t,n),v=G.left(c),d=G.right(c);this._children=new qt(new Ge(t,v),new Ge(t,d))};p["verb.core.MeshBoundingBoxTree"]=Ge,Ge.__name__=["verb","core","MeshBoundingBoxTree"],Ge.__interfaces__=[Te],Ge.prototype={split:function(){return this._children},boundingBox:function(){return this._boundingBox},yield:function(){return this._face},indivisible:function(t){return this._children==null},empty:function(){return this._empty},__class__:Ge};var we=f.core.Minimizer=function(){};p["verb.core.Minimizer"]=we,we.__name__=["verb","core","Minimizer"],we.uncmin=function(t,n,r,s,o){r==null&&(r=1e-8),s==null&&(s=function(X){return we.numericalGradient(t,X)}),o==null&&(o=1e3),n=n.slice(0);var h=n.length,c=t(n),v=c,d;if(isNaN(c))throw new j("uncmin: f(x0) is a NaN!");r=Math.max(r,tt.EPSILON);var m,b,w,M=Mt.identity(h),P=0,z=[],I,C,L,B,T,R,F="";for(b=s(n);P<o;){if(!l.all(l.finite(b))){F="Gradient has Infinity or NaN";break}if(m=l.neg(Mt.dot(M,b)),!l.all(l.finite(m))){F="Search direction has Infinity or NaN";break}if(R=l.norm(m),R<r){F="Newton step smaller than tol";break}for(T=1,d=l.dot(b,m),I=n;P<o&&!(T*R<r);){if(z=l.mul(T,m),I=l.add(n,z),v=t(I),v-c>=.1*T*d||isNaN(v)){T*=.5,++P;continue}break}if(T*R<r){F="Line search step size smaller than tol";break}if(P==o){F="maxit reached during line search";break}w=s(I),C=l.sub(w,b),B=l.dot(C,z),L=Mt.dot(M,C),M=Mt.sub(Mt.add(M,Mt.mul((B+l.dot(C,L))/(B*B),we.tensor(z,z))),Mt.div(Mt.add(we.tensor(L,z),we.tensor(z,L)),B)),n=I,c=v,b=w,++P}return new jn(n,c,b,M,P,F)},we.numericalGradient=function(t,n){var r=n.length,s=t(n);if(s==NaN)throw new j("gradient: f(x) is a NaN!");for(var o=n.slice(0),h,c,v=[],d,m=.001,b,w,M,P=0,z,I,C,L=0;L<r;)for(var B=L++,T=Math.max(1e-6*s,1e-8);;){if(++P,P>20)throw new j("Numerical gradient fails");if(o[B]=n[B]+T,h=t(o),o[B]=n[B]-T,c=t(o),o[B]=n[B],isNaN(h)||isNaN(c)){T/=16;continue}if(v[B]=(h-c)/(2*T),b=n[B]-T,w=n[B],M=n[B]+T,z=(h-s)/T,I=(s-c)/T,C=l.max([Math.abs(v[B]),Math.abs(s),Math.abs(h),Math.abs(c),Math.abs(b),Math.abs(w),Math.abs(M),1e-8]),d=Math.min(l.max([Math.abs(z-v[B]),Math.abs(I-v[B]),Math.abs(z-I)])/C,T/C),d>m)T/=16;else break}return v},we.tensor=function(t,n){for(var r=t.length,s=n.length,o=[],h,c,v=r-1;v>=0;){h=[],c=t[v];for(var d=s-1;d>=3;)h[d]=c*n[d],--d,h[d]=c*n[d],--d,h[d]=c*n[d],--d,h[d]=c*n[d],--d;for(;d>=0;)h[d]=c*n[d],--d;o[v]=h,v--}return o};var jn=function(t,n,r,s,o,h){this.solution=t,this.value=n,this.gradient=r,this.invHessian=s,this.iterations=o,this.message=h};p["verb.core.MinimizationResult"]=jn,jn.__name__=["verb","core","MinimizationResult"],jn.prototype={__class__:jn};var mn=function(){};p["verb.core.ISerializable"]=mn,mn.__name__=["verb","core","ISerializable"],mn.prototype={__class__:mn};var Cr=f.core.Deserializer=function(){};p["verb.core.Deserializer"]=Cr,Cr.__name__=["verb","core","Deserializer"],Cr.deserialize=function(t){var n=new Vt(t),r=n.unserialize();return r};var ce=f.core.Trig=function(){};p["verb.core.Trig"]=ce,ce.__name__=["verb","core","Trig"],ce.isPointInPlane=function(t,n,r){return Math.abs(l.dot(l.sub(t,n.origin),n.normal))<r},ce.distToSegment=function(t,n,r){var s=ce.segmentClosestPoint(n,t,r,0,1);return l.dist(n,s.pt)},ce.rayClosestPoint=function(t,n,r){var s=l.sub(t,n),o=l.dot(s,r),h=l.add(n,l.mul(o,r));return h},ce.distToRay=function(t,n,r){var s=ce.rayClosestPoint(t,n,r),o=l.sub(s,t);return l.norm(o)},ce.threePointsAreFlat=function(t,n,r,s){var o=l.sub(n,t),h=l.sub(r,t),c=l.cross(o,h),v=l.dot(c,c);return v<s},ce.segmentClosestPoint=function(t,n,r,s,o){var h=l.sub(r,n),c=l.norm(h);if(c<tt.EPSILON)return{u:s,pt:n};var v=n,d=l.mul(1/c,h),m=l.sub(t,v),b=l.dot(m,d);return b<0?{u:s,pt:n}:b>c?{u:o,pt:r}:{u:s+(o-s)*b/c,pt:l.add(v,l.mul(b,d))}};var l=f.core.Vec=function(){};p["verb.core.Vec"]=l,l.__name__=["verb","core","Vec"],l.angleBetween=function(t,n){return Math.acos(l.dot(t,n)/(l.norm(t)*l.norm(n)))},l.positiveAngleBetween=function(t,n,r){var s=l.cross(t,n),o=l.norm(t),h=l.norm(n),c=o*h,v=l.dot(t,n),d=l.norm(s)/c,m=v/c,b=Math.atan2(d,m),w=l.dot(r,s);return Math.abs(w)<tt.EPSILON||w>0?b:-b},l.signedAngleBetween=function(t,n,r){var s=l.cross(t,n),o=l.norm(t),h=l.norm(n),c=o*h,v=l.dot(t,n),d=l.norm(s)/c,m=v/c,b=Math.atan2(d,m),w=l.dot(r,s);return w>0?b:2*Math.PI-b},l.angleBetweenNormalized2d=function(t,n){var r=t[0]*n[1]-t[1]*n[0];return Math.atan2(r,l.dot(t,n))},l.domain=function(t){return G.last(t)-G.first(t)},l.range=function(t){for(var n=[],r=0,s=0;s<t;)s++,n.push(r),r+=1;return n},l.span=function(t,n,r){if(r==null)return[];if(r<tt.EPSILON)return[];if(t>n&&r>0)return[];if(n>t&&r<0)return[];for(var s=[],o=t;o<=n;)s.push(o),o+=r;return s},l.neg=function(t){return t.map(function(n){return-n})},l.min=function(t){return K.fold(t,function(n,r){return Math.min(n,r)},1/0)},l.max=function(t){return K.fold(t,function(n,r){return Math.max(n,r)},-1/0)},l.all=function(t){return K.fold(t,function(n,r){return r&&n},!0)},l.finite=function(t){return t.map(function(n){return isFinite(n)})},l.onRay=function(t,n,r){return l.add(t,l.mul(r,n))},l.lerp=function(t,n,r){return l.add(l.mul(t,n),l.mul(1-t,r))},l.normalized=function(t){return l.div(t,l.norm(t))},l.cross=function(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]},l.dist=function(t,n){return l.norm(l.sub(t,n))},l.distSquared=function(t,n){return l.normSquared(l.sub(t,n))},l.sum=function(t){return K.fold(t,function(n,r){return r+n},0)},l.addAll=function(t){var n=be(t)();if(!n.hasNext())return null;var r=n.next().length;return K.fold(t,function(s,o){return l.add(o,s)},l.rep(r,0))},l.addAllMutate=function(t){for(var n=t[0],r=1,s=t.length;r<s;){var o=r++;l.addMutate(n,t[o])}},l.addMulMutate=function(t,n,r){for(var s=0,o=t.length;s<o;){var h=s++;t[h]=t[h]+n*r[h]}},l.subMulMutate=function(t,n,r){for(var s=0,o=t.length;s<o;){var h=s++;t[h]=t[h]-n*r[h]}},l.addMutate=function(t,n){for(var r=0,s=t.length;r<s;){var o=r++;t[o]=t[o]+n[o]}},l.subMutate=function(t,n){for(var r=0,s=t.length;r<s;){var o=r++;t[o]=t[o]-n[o]}},l.mulMutate=function(t,n){for(var r=0,s=n.length;r<s;){var o=r++;n[o]=n[o]*t}},l.norm=function(t){var n=l.normSquared(t);return n!=0?Math.sqrt(n):n},l.normSquared=function(t){return K.fold(t,function(n,r){return r+n*n},0)},l.rep=function(t,n){for(var r=[],s=0;s<t;)s++,r.push(n);return r},l.zeros1d=function(t){for(var n=[],r=0;r<t;)r++,n.push(0);return n},l.zeros2d=function(t,n){for(var r=[],s=0;s<t;)s++,r.push(l.zeros1d(n));return r},l.zeros3d=function(t,n,r){for(var s=[],o=0;o<t;)o++,s.push(l.zeros2d(n,r));return s},l.dot=function(t,n){for(var r=0,s=0,o=t.length;s<o;){var h=s++;r+=t[h]*n[h]}return r},l.add=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]+n[h])}return r},l.mul=function(t,n){for(var r=[],s=0,o=n.length;s<o;){var h=s++;r.push(t*n[h])}return r},l.div=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]/n)}return r},l.sub=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]-n[h])}return r},l.isZero=function(t){for(var n=0,r=t.length;n<r;){var s=n++;if(Math.abs(t[s])>tt.TOLERANCE)return!1}return!0},l.sortedSetUnion=function(t,n){for(var r=[],s=0,o=0;s<t.length||o<n.length;){if(s>=t.length){r.push(n[o]),o++;continue}else if(o>=n.length){r.push(t[s]),s++;continue}var h=t[s]-n[o];if(Math.abs(h)<tt.EPSILON){r.push(t[s]),s++,o++;continue}if(h>0){r.push(n[o]),o++;continue}r.push(t[s]),s++}return r},l.sortedSetSub=function(t,n){for(var r=[],s=0,o=0;s<t.length;){if(o>=n.length){r.push(t[s]),s++;continue}if(Math.abs(t[s]-n[o])<tt.EPSILON){s++,o++;continue}r.push(t[s]),s++}return r};var _t=f.eval.Analyze=function(){};p["verb.eval.Analyze"]=_t,_t.__name__=["verb","eval","Analyze"],_t.knotMultiplicities=function(t){for(var n=[new gn(t[0],0)],r=n[0],s=0;s<t.length;){var o=t[s];++s,Math.abs(o-r.knot)>tt.EPSILON&&(r=new gn(o,0),n.push(r)),r.inc()}return n},_t.isRationalSurfaceClosed=function(t,n){n==null&&(n=!0);var r;n?r=t.controlPoints:r=Mt.transpose(t.controlPoints);for(var s=0,o=r[0].length;s<o;){var h=s++,c=l.dist(G.first(r)[h],G.last(r)[h])<tt.EPSILON;if(!c)return!1}return!0},_t.rationalSurfaceClosestPoint=function(t,n){var r=_t.rationalSurfaceClosestParam(t,n);return S.rationalSurfacePoint(t,r[0],r[1])},_t.rationalSurfaceClosestParam=function(t,n){for(var r=5,s=0,o,h=1e-4,c=5e-4,v,d=t.knotsU[0],m=G.last(t.knotsU),b=t.knotsV[0],w=G.last(t.knotsV),M=_t.isRationalSurfaceClosed(t),P=_t.isRationalSurfaceClosed(t,!1),z,I=At.rationalSurfaceAdaptive(t,new Ke),C=1/0,L=0,B=I.points.length;L<B;){var T=L++,R=I.points[T],F=l.normSquared(l.sub(n,R));F<C&&(C=F,z=I.uvs[T])}for(var X=function(It){return S.rationalSurfaceDerivatives(t,It[0],It[1],2)},D=function(It,Et,Ct){var Tt=Et[1][0],ie=Et[0][1],ge=Et[2][0],ne=Et[0][2],$t=Et[1][1],se=Et[1][1],_e=l.dot(Tt,Ct),xe=l.dot(ie,Ct),Ee=[-_e,-xe],Me=l.dot(Tt,Tt)+l.dot(ge,Ct),Pe=l.dot(Tt,ie)+l.dot($t,Ct),Ae=l.dot(Tt,ie)+l.dot(se,Ct),Re=l.dot(ie,ie)+l.dot(ne,Ct),bn=[[Me,Pe],[Ae,Re]],en=Mt.solve(bn,Ee);return l.add(en,It)};s<r;){o=X(z),v=l.sub(o[0][0],n);var V=l.norm(v),q=l.dot(o[1][0],v),J=l.norm(o[1][0])*V,$=l.dot(o[0][1],v),nt=l.norm(o[0][1])*V,st=q/J,rt=$/nt,at=V<h,et=st<c,ot=rt<c;if(at&&et&&ot)return z;var O=D(z,o,v);O[0]<d?M?O=[m-(O[0]-d),O[1]]:O=[d+tt.EPSILON,O[1]]:O[0]>m&&(M?O=[d+(O[0]-m),O[1]]:O=[m-tt.EPSILON,O[1]]),O[1]<b?P?O=[O[0],w-(O[1]-b)]:O=[O[0],b+tt.EPSILON]:O[1]>w&&(P?O=[O[0],b+(O[0]-w)]:O=[O[0],w-tt.EPSILON]);var ut=l.norm(l.mul(O[0]-z[0],o[1][0])),gt=l.norm(l.mul(O[1]-z[1],o[0][1]));if(ut+gt<h)return z;z=O,s++}return z},_t.rationalCurveClosestPoint=function(t,n){return S.rationalCurvePoint(t,_t.rationalCurveClosestParam(t,n))},_t.rationalCurveClosestParam=function(t,n){for(var r=1/0,s=0,o=At.rationalCurveRegularSample(t,t.controlPoints.length*t.degree,!0),h=0,c=o.length-1;h<c;){var v=h++,d=o[v][0],m=o[v+1][0],b=o[v].slice(1),w=o[v+1].slice(1),M=ce.segmentClosestPoint(n,b,w,d,m),P=l.norm(l.sub(n,M.pt));P<r&&(r=P,s=M.u)}for(var z=5,I=0,C,L=1e-4,B=5e-4,T,R=t.knots[0],F=G.last(t.knots),X=l.normSquared(l.sub(t.controlPoints[0],G.last(t.controlPoints)))<tt.EPSILON,D=s,V=function(O){return S.rationalCurveDerivatives(t,O,2)},q=function(O,ut,gt){var It=l.dot(ut[1],gt),Et=l.dot(ut[2],gt),Ct=l.dot(ut[1],ut[1]),Tt=Et+Ct;return O-It/Tt};I<z;){C=V(D),T=l.sub(C[0],n);var J=l.norm(T),$=l.dot(C[1],T),nt=l.norm(C[1])*J,st=$/nt,rt=J<L,at=Math.abs(st)<B;if(rt&&at)return D;var et=q(D,C,T);et<R?X?et=F-(et-R):et=R:et>F&&(X?et=R+(et-F):et=F);var ot=l.norm(l.mul(et-D,C[1]));if(ot<L)return D;D=et,I++}return D},_t.rationalCurveParamAtArcLength=function(t,n,r,s,o){if(r==null&&(r=.001),n<tt.EPSILON)return t.knots[0];var h;s!=null?h=s:h=vt.decomposeCurveIntoBeziers(t);var c=0;h[c];var v=-tt.EPSILON,d;for(o!=null?d=o:d=[];v<n&&c<h.length;){if(c<d.length?d[c]=d[c]:d[c]=_t.rationalBezierCurveArcLength(t),v+=d[c],n<v+tt.EPSILON)return _t.rationalBezierCurveParamAtArcLength(t,n,r,d[c]);c++}return-1},_t.rationalBezierCurveParamAtArcLength=function(t,n,r,s){if(n<0)return t.knots[0];var o;if(s!=null?o=s:o=_t.rationalBezierCurveArcLength(t),n>o)return G.last(t.knots);var h=t.knots[0],c=0,v=G.last(t.knots),d=o,m=0,b=0,w;for(r!=null?w=r:w=tt.TOLERANCE*2;d-c>w;)m=(h+v)/2,b=_t.rationalBezierCurveArcLength(t,m),b>n?(v=m,d=b):(h=m,c=b);return(h+v)/2},_t.rationalCurveArcLength=function(t,n,r){r==null&&(r=16),n==null?n=G.last(t.knots):n=n;for(var s=vt.decomposeCurveIntoBeziers(t),o=0,h=s[0],c=0;o<s.length&&h.knots[0]+tt.EPSILON<n;){var v=Math.min(G.last(h.knots),n);c+=_t.rationalBezierCurveArcLength(h,v,r),h=s[++o]}return c},_t.rationalBezierCurveArcLength=function(t,n,r){r==null&&(r=16);var s;n==null?s=G.last(t.knots):s=n;for(var o=(s-t.knots[0])/2,h=0,c=t.degree+r,v,d,m=0;m<c;){var b=m++;v=o*_t.Tvalues[c][b]+o+t.knots[0],d=S.rationalCurveDerivatives(t,v,1),h+=_t.Cvalues[c][b]*l.norm(d[1])}return o*h};var gn=f.eval.KnotMultiplicity=function(t,n){this.knot=t,this.mult=n};p["verb.eval.KnotMultiplicity"]=gn,gn.__name__=["verb","eval","KnotMultiplicity"],gn.prototype={inc:function(){this.mult++},__class__:gn};var me=f.eval.Check=function(){};p["verb.eval.Check"]=me,me.__name__=["verb","eval","Check"],me.isValidKnotVector=function(t,n){if(t.length==0||t.length<(n+1)*2)return!1;for(var r=G.first(t),s=0,o=n+1;s<o;){var h=s++;if(Math.abs(t[h]-r)>tt.EPSILON)return!1}r=G.last(t);for(var c=t.length-n-1,v=t.length;c<v;){var d=c++;if(Math.abs(t[d]-r)>tt.EPSILON)return!1}return me.isNonDecreasing(t)},me.isNonDecreasing=function(t){for(var n=G.first(t),r=0,s=t.length;r<s;){var o=r++;if(t[o]<n-tt.EPSILON)return!1;n=t[o]}return!0},me.isValidNurbsCurveData=function(t){if(t.controlPoints==null)throw new j("Control points array cannot be null!");if(t.degree==null)throw new j("Degree cannot be null!");if(t.degree<1)throw new j("Degree must be greater than 1!");if(t.knots==null)throw new j("Knots cannot be null!");if(t.knots.length!=t.controlPoints.length+t.degree+1)throw new j("controlPoints.length + degree + 1 must equal knots.length!");if(!me.isValidKnotVector(t.knots,t.degree))throw new j("Invalid knot vector format! Should begin with degree + 1 repeats and end with degree + 1 repeats!");return t},me.isValidNurbsSurfaceData=function(t){if(t.controlPoints==null)throw new j("Control points array cannot be null!");if(t.degreeU==null)throw new j("DegreeU cannot be null!");if(t.degreeV==null)throw new j("DegreeV cannot be null!");if(t.degreeU<1)throw new j("DegreeU must be greater than 1!");if(t.degreeV<1)throw new j("DegreeV must be greater than 1!");if(t.knotsU==null)throw new j("KnotsU cannot be null!");if(t.knotsV==null)throw new j("KnotsV cannot be null!");if(t.knotsU.length!=t.controlPoints.length+t.degreeU+1)throw new j("controlPointsU.length + degreeU + 1 must equal knotsU.length!");if(t.knotsV.length!=t.controlPoints[0].length+t.degreeV+1)throw new j("controlPointsV.length + degreeV + 1 must equal knotsV.length!");if(!me.isValidKnotVector(t.knotsU,t.degreeU)||!me.isValidKnotVector(t.knotsV,t.degreeV))throw new j("Invalid knot vector format! Should begin with degree + 1 repeats and end with degree + 1 repeats!");return t};var Yt=f.eval.Divide=function(){};p["verb.eval.Divide"]=Yt,Yt.__name__=["verb","eval","Divide"],Yt.surfaceSplit=function(t,n,r){r==null&&(r=!1);var s,o,h;r?(h=t.controlPoints,s=t.knotsV,o=t.degreeV):(h=Mt.transpose(t.controlPoints),s=t.knotsU,o=t.degreeU);for(var c,v=[],d=0,m=o+1;d<m;)d++,v.push(n);c=v;for(var b=[],w=[],M=S.knotSpan(o,n,s),P=null,z=0;z<h.length;){var I=h[z];++z,P=vt.curveKnotRefine(new kt(o,s,I),c),b.push(P.controlPoints.slice(0,M+1)),w.push(P.controlPoints.slice(M+1))}var C=P.knots.slice(0,M+o+2),L=P.knots.slice(M+1);return r?[new Ot(t.degreeU,o,t.knotsU.slice(),C,b),new Ot(t.degreeU,o,t.knotsU.slice(),L,w)]:(b=Mt.transpose(b),w=Mt.transpose(w),[new Ot(o,t.degreeV,C,t.knotsV.slice(),b),new Ot(o,t.degreeV,L,t.knotsV.slice(),w)])},Yt.curveSplit=function(t,n){var r=t.degree;t.controlPoints;for(var s=t.knots,o,h=[],c=0,v=r+1;c<v;)c++,h.push(n);o=h;var d=vt.curveKnotRefine(t,o),m=S.knotSpan(r,n,s),b=d.knots.slice(0,m+r+2),w=d.knots.slice(m+1),M=d.controlPoints.slice(0,m+1),P=d.controlPoints.slice(m+1);return[new kt(r,b,M),new kt(r,w,P)]},Yt.rationalCurveByEqualArcLength=function(t,n){var r=_t.rationalCurveArcLength(t),s=r/n;return Yt.rationalCurveByArcLength(t,s)},Yt.rationalCurveByArcLength=function(t,n){var r=vt.decomposeCurveIntoBeziers(t),s=r.map(function(M){return _t.rationalBezierCurveArcLength(M)}),o=l.sum(s),h=[new pn(t.knots[0],0)];if(n>o)return h;for(var c=n,v=0,d=c,m=0,b=0,w;v<r.length;){for(m+=s[v];d<m+tt.EPSILON;)w=_t.rationalBezierCurveParamAtArcLength(r[v],d-b,tt.TOLERANCE,s[v]),h.push(new pn(w,d)),d+=c;b+=s[v],v++}return h};var pn=f.eval.CurveLengthSample=function(t,n){this.u=t,this.len=n};p["verb.eval.CurveLengthSample"]=pn,pn.__name__=["verb","eval","CurveLengthSample"],pn.prototype={__class__:pn};var S=f.eval.Eval=function(){};p["verb.eval.Eval"]=S,S.__name__=["verb","eval","Eval"],S.rationalCurveTangent=function(t,n){var r=S.rationalCurveDerivatives(t,n,1);return r[1]},S.rationalSurfaceNormal=function(t,n,r){var s=S.rationalSurfaceDerivatives(t,n,r,1);return l.cross(s[1][0],s[0][1])},S.rationalSurfaceDerivatives=function(t,n,r,s){s==null&&(s=1);for(var o=S.surfaceDerivatives(t,n,r,s),h=S.rational2d(o),c=S.weight2d(o),v=[],d=h[0][0].length,m=0,b=s+1;m<b;){var w=m++;v.push([]);for(var M=0,P=s-w+1;M<P;){for(var z=M++,I=h[w][z],C=1,L=z+1;C<L;){var B=C++;l.subMulMutate(I,zt.get(z,B)*c[0][B],v[w][z-B])}for(var T=1,R=w+1;T<R;){var F=T++;l.subMulMutate(I,zt.get(w,F)*c[F][0],v[w-F][z]);for(var X=l.zeros1d(d),D=1,V=z+1;D<V;){var q=D++;l.addMulMutate(X,zt.get(z,q)*c[F][q],v[w-F][z-q])}l.subMulMutate(I,zt.get(w,F),X)}l.mulMutate(1/c[0][0],I),v[w].push(I)}}return v},S.rationalSurfacePoint=function(t,n,r){return S.dehomogenize(S.surfacePoint(t,n,r))},S.rationalCurveDerivatives=function(t,n,r){r==null&&(r=1);for(var s=S.curveDerivatives(t,n,r),o=S.rational1d(s),h=S.weight1d(s),c=[],v=0,d=r+1;v<d;){for(var m=v++,b=o[m],w=1,M=m+1;w<M;){var P=w++;l.subMulMutate(b,zt.get(m,P)*h[P],c[m-P])}l.mulMutate(1/h[0],b),c.push(b)}return c},S.rationalCurvePoint=function(t,n){return S.dehomogenize(S.curvePoint(t,n))},S.surfaceDerivatives=function(t,n,r,s){var o=t.knotsU.length-t.degreeU-2,h=t.knotsV.length-t.degreeV-2;return S.surfaceDerivativesGivenNM(o,h,t,n,r,s)},S.surfaceDerivativesGivenNM=function(t,n,r,s,o,h){var c=r.degreeU,v=r.degreeV,d=r.controlPoints,m=r.knotsU,b=r.knotsV;if(!S.areValidRelations(c,d.length,m.length)||!S.areValidRelations(v,d[0].length,b.length))throw new j("Invalid relations between control points, knot vector, and n");var w=d[0][0].length,M;h<c?M=h:M=c;var P;h<v?P=h:P=v;for(var z=l.zeros3d(h+1,h+1,w),I=S.knotSpanGivenN(t,c,s,m),C=S.knotSpanGivenN(n,v,o,b),L=S.derivativeBasisFunctionsGivenNI(I,s,c,t,m),B=S.derivativeBasisFunctionsGivenNI(C,o,v,n,b),T=l.zeros2d(v+1,w),R=0,F=0,X=M+1;F<X;){for(var D=F++,V=0,q=v+1;V<q;){var J=V++;T[J]=l.zeros1d(w);for(var $=0,nt=c+1;$<nt;){var st=$++;l.addMulMutate(T[J],L[D][st],d[I-c+st][C-v+J])}}var rt=h-D;rt<P?R=rt:R=P;for(var at=0,et=R+1;at<et;){var ot=at++;z[D][ot]=l.zeros1d(w);for(var O=0,ut=v+1;O<ut;){var gt=O++;l.addMulMutate(z[D][ot],B[ot][gt],T[gt])}}}return z},S.surfacePoint=function(t,n,r){var s=t.knotsU.length-t.degreeU-2,o=t.knotsV.length-t.degreeV-2;return S.surfacePointGivenNM(s,o,t,n,r)},S.surfacePointGivenNM=function(t,n,r,s,o){var h=r.degreeU,c=r.degreeV,v=r.controlPoints,d=r.knotsU,m=r.knotsV;if(!S.areValidRelations(h,v.length,d.length)||!S.areValidRelations(c,v[0].length,m.length))throw new j("Invalid relations between control points, knot vector, and n");for(var b=v[0][0].length,w=S.knotSpanGivenN(t,h,s,d),M=S.knotSpanGivenN(n,c,o,m),P=S.basisFunctionsGivenKnotSpanIndex(w,s,h,d),z=S.basisFunctionsGivenKnotSpanIndex(M,o,c,m),I=w-h,C=M,L=l.zeros1d(b),B=l.zeros1d(b),T=0,R=c+1;T<R;){var F=T++;B=l.zeros1d(b),C=M-c+F;for(var X=0,D=h+1;X<D;){var V=X++;l.addMulMutate(B,P[V],v[I+V][C])}l.addMulMutate(L,z[F],B)}return L},S.curveRegularSamplePoints=function(t,n){for(var r=S.curveDerivatives(t,t.knots[0],t.degree),s=1/n,o=s*s,h=r[0],c=l.mul(s,r[1]),v=l.mul(o*.5,r[2]),d=l.mul(o*s*.5,r[3]),m=l.add(v,v),b=l.add(d,d),w=l.mul(.3333333333333333,d),M=[],P=0,z=n+1;P<z;)P++,M.push(S.dehomogenize(h)),l.addAllMutate([h,c,v,w]),l.addAllMutate([c,m,d]),l.addAllMutate([m,b]),l.addAllMutate([v,d]);return M},S.curveRegularSamplePoints2=function(t,n){for(var r=S.curveDerivatives(t,t.knots[0],t.degree),s=1/n,o=s*s,h=r[0],c=l.mul(s,r[1]),v=l.mul(o*.5,r[2]),d=l.mul(o*s*.5,r[3]),m=l.add(v,v),b=l.add(d,d),w=l.mul(.3333333333333333,d),M=[],P=0,z=n+1;P<z;)P++,M.push(S.dehomogenize(h)),l.addAllMutate([h,c,v,w]),l.addAllMutate([c,m,d]),l.addAllMutate([m,b]),l.addAllMutate([v,d]);return M},S.rationalSurfaceRegularSampleDerivatives=function(t,n,r,s){for(var o=S.surfaceRegularSampleDerivatives(t,n,r,s),h=[],c=n+1,v=r+1,d=s+1,m=0;m<c;){var b=m++,w=[];h.push(w);for(var M=0;M<v;){for(var P=M++,z=o[b][P],I=S.rational2d(z),C=S.weight2d(z),L=[],B=I[0][0].length,T=0;T<d;){var R=T++;L.push([]);for(var F=0,X=d-R;F<X;){for(var D=F++,V=I[R][D],q=1,J=D+1;q<J;){var $=q++;l.subMulMutate(V,zt.get(D,$)*C[0][$],L[R][D-$])}for(var nt=1,st=R+1;nt<st;){var rt=nt++;l.subMulMutate(V,zt.get(R,rt)*C[rt][0],L[R-rt][D]);for(var at=l.zeros1d(B),et=1,ot=D+1;et<ot;){var O=et++;l.addMulMutate(at,zt.get(D,O)*C[rt][O],L[R-rt][D-O])}l.subMulMutate(V,zt.get(R,rt),at)}l.mulMutate(1/C[0][0],V),L[R].push(V)}}w.push(L)}}return h},S.surfaceRegularSampleDerivatives=function(t,n,r,s){var o=t.degreeU,h=t.degreeV,c=t.controlPoints,v=t.knotsU,d=t.knotsV,m=c[0][0].length;(G.last(v)-v[0])/n,(G.last(d)-d[0])/r;for(var b=S.regularlySpacedDerivativeBasisFunctions(o,v,n),w=b.item0,M=b.item1,P=S.regularlySpacedDerivativeBasisFunctions(h,d,r),z=P.item0,I=P.item1,C=[],L=n+1,B=r+1,T=0;T<L;){var R=T++,F=[];C.push(F);for(var X=0;X<B;){var D=X++;F.push(S.surfaceDerivativesGivenBasesKnotSpans(o,h,c,w[R],z[D],M[R],I[D],m,s))}}return C},S.rationalSurfaceRegularSamplePoints=function(t,n,r){return S.dehomogenize2d(S.surfaceRegularSamplePoints(t,n,r))},S.surfaceRegularSamplePoints=function(t,n,r){var s=t.degreeU,o=t.degreeV,h=t.controlPoints,c=t.knotsU,v=t.knotsV,d=h[0][0].length;(G.last(c)-c[0])/n,(G.last(v)-v[0])/r;for(var m=S.regularlySpacedBasisFunctions(s,c,n),b=m.item0,w=m.item1,M=S.regularlySpacedBasisFunctions(o,v,r),P=M.item0,z=M.item1,I=[],C=n+1,L=r+1,B=0;B<C;){var T=B++,R=[];I.push(R);for(var F=0;F<L;){var X=F++;R.push(S.surfacePointGivenBasesKnotSpans(s,o,h,b[T],P[X],w[T],z[X],d))}}return I},S.regularlySpacedBasisFunctions=function(t,n,r){for(var s=n.length-t-2,o=(G.last(n)-n[0])/r,h=[],c=[],v=n[0],d=S.knotSpanGivenN(s,t,v,n),m=r+1,b=0;b<m;){for(b++;v>=n[d+1];)d++;c.push(d),h.push(S.basisFunctionsGivenKnotSpanIndex(d,v,t,n)),v+=o}return new qt(c,h)},S.regularlySpacedDerivativeBasisFunctions=function(t,n,r){for(var s=n.length-t-2,o=(G.last(n)-n[0])/r,h=[],c=[],v=n[0],d=S.knotSpanGivenN(s,t,v,n),m=r+1,b=0;b<m;){for(b++;v>=n[d+1];)d++;c.push(d),h.push(S.derivativeBasisFunctionsGivenNI(d,v,t,s,n)),v+=o}return new qt(c,h)},S.surfacePointGivenBasesKnotSpans=function(t,n,r,s,o,h,c,v){for(var d=l.zeros1d(v),m,b=s-t,w=o-n,M=0,P=n+1;M<P;){var z=M++;m=l.zeros1d(v);for(var I=0,C=t+1;I<C;){var L=I++;l.addMulMutate(m,h[L],r[b+L][w])}w++,l.addMulMutate(d,c[z],m)}return d},S.surfaceDerivativesGivenBasesKnotSpans=function(t,n,r,s,o,h,c,v,d){var m=r[0][0].length,b;d<t?b=d:b=t;var w;d<n?w=d:w=n;for(var M=l.zeros3d(b+1,w+1,m),P=l.zeros2d(n+1,m),z=0,I=0,C=b+1;I<C;){for(var L=I++,B=0,T=n+1;B<T;){var R=B++;P[R]=l.zeros1d(m);for(var F=0,X=t+1;F<X;){var D=F++;l.addMulMutate(P[R],h[L][D],r[s-t+D][o-n+R])}}var V=d-L;V<w?z=V:z=w;for(var q=0,J=z+1;q<J;){var $=q++;M[L][$]=l.zeros1d(m);for(var nt=0,st=n+1;nt<st;){var rt=nt++;l.addMulMutate(M[L][$],c[$][rt],P[rt])}}}return M},S.curveDerivatives=function(t,n,r){var s=t.knots.length-t.degree-2;return S.curveDerivativesGivenN(s,t,n,r)},S.curveDerivativesGivenN=function(t,n,r,s){var o=n.degree,h=n.controlPoints,c=n.knots;if(!S.areValidRelations(o,h.length,c.length))throw new j("Invalid relations between control points, knot vector, and n");var v=h[0].length,d;s<o?d=s:d=o;for(var m=l.zeros2d(s+1,v),b=S.knotSpanGivenN(t,o,r,c),w=S.derivativeBasisFunctionsGivenNI(b,r,o,d,c),M=0,P=d+1;M<P;)for(var z=M++,I=0,C=o+1;I<C;){var L=I++;l.addMulMutate(m[z],w[z][L],h[b-o+L])}return m},S.curvePoint=function(t,n){var r=t.knots.length-t.degree-2;return S.curvePointGivenN(r,t,n)},S.areValidRelations=function(t,n,r){return n+t+1-r==0},S.curvePointGivenN=function(t,n,r){var s=n.degree,o=n.controlPoints,h=n.knots;if(!S.areValidRelations(s,o.length,h.length))throw new j("Invalid relations between control points, knot Array, and n");for(var c=S.knotSpanGivenN(t,s,r,h),v=S.basisFunctionsGivenKnotSpanIndex(c,r,s,h),d=l.zeros1d(o[0].length),m=0,b=s+1;m<b;){var w=m++;l.addMulMutate(d,v[w],o[c-s+w])}return d},S.volumePoint=function(t,n,r,s){var o=t.knotsU.length-t.degreeU-2,h=t.knotsV.length-t.degreeV-2,c=t.knotsW.length-t.degreeW-2;return S.volumePointGivenNML(t,o,h,c,n,r,s)},S.volumePointGivenNML=function(t,n,r,s,o,h,c){if(!S.areValidRelations(t.degreeU,t.controlPoints.length,t.knotsU.length)||!S.areValidRelations(t.degreeV,t.controlPoints[0].length,t.knotsV.length)||!S.areValidRelations(t.degreeW,t.controlPoints[0][0].length,t.knotsW.length))throw new j("Invalid relations between control points and knot vector");for(var v=t.controlPoints,d=t.degreeU,m=t.degreeV,b=t.degreeW,w=t.knotsU,M=t.knotsV,P=t.knotsW,z=v[0][0][0].length,I=S.knotSpanGivenN(n,d,o,w),C=S.knotSpanGivenN(r,m,h,M),L=S.knotSpanGivenN(s,b,c,P),B=S.basisFunctionsGivenKnotSpanIndex(I,o,d,w),T=S.basisFunctionsGivenKnotSpanIndex(C,h,m,M),R=S.basisFunctionsGivenKnotSpanIndex(L,c,b,P),F=I-d,X=l.zeros1d(z),D=l.zeros1d(z),V=l.zeros1d(z),q=0,J=b+1;q<J;){var $=q++;V=l.zeros1d(z);for(var nt=L-b+$,st=0,rt=m+1;st<rt;){var at=st++;D=l.zeros1d(z);for(var et=C-m+at,ot=0,O=d+1;ot<O;){var ut=ot++;l.addMulMutate(D,B[ut],v[F+ut][et][nt])}l.addMulMutate(V,T[at],D)}l.addMulMutate(X,R[$],V)}return X},S.derivativeBasisFunctions=function(t,n,r){var s=S.knotSpan(n,t,r),o=r.length-1,h=o-n-1;return S.derivativeBasisFunctionsGivenNI(s,t,n,h,r)},S.derivativeBasisFunctionsGivenNI=function(t,n,r,s,o){var h=l.zeros2d(r+1,r+1),c=l.zeros1d(r+1),v=l.zeros1d(r+1),d=0,m=0;h[0][0]=1;for(var b=1,w=r+1;b<w;){var M=b++;c[M]=n-o[t+1-M],v[M]=o[t+M]-n,d=0;for(var P=0;P<M;){var z=P++;h[M][z]=v[z+1]+c[M-z],m=h[z][M-1]/h[M][z],h[z][M]=d+v[z+1]*m,d=c[M-z]*m}h[M][M]=d}for(var I=l.zeros2d(s+1,r+1),C=l.zeros2d(2,r+1),L=0,B=1,T=0,R=0,F=0,X=0,D=0,V=0,q=r+1;V<q;){var J=V++;I[0][J]=h[J][r]}for(var $=0,nt=r+1;$<nt;){var st=$++;L=0,B=1,C[0][0]=1;for(var rt=1,at=s+1;rt<at;){var et=rt++;T=0,R=st-et,F=r-et,st>=et&&(C[B][0]=C[L][0]/h[F+1][R],T=C[B][0]*h[R][F]),R>=-1?X=1:X=-R,st-1<=F?D=et-1:D=r-st;for(var ot=X,O=D+1;ot<O;){var ut=ot++;C[B][ut]=(C[L][ut]-C[L][ut-1])/h[F+1][R+ut],T+=C[B][ut]*h[R+ut][F]}st<=F&&(C[B][et]=-C[L][et-1]/h[F+1][st],T+=C[B][et]*h[st][F]),I[et][st]=T;var gt=L;L=B,B=gt}}for(var It=r,Et=1,Ct=s+1;Et<Ct;){for(var Tt=Et++,ie=0,ge=r+1;ie<ge;){var ne=ie++;I[Tt][ne]*=It}It*=r-Tt}return I},S.basisFunctions=function(t,n,r){var s=S.knotSpan(n,t,r);return S.basisFunctionsGivenKnotSpanIndex(s,t,n,r)},S.basisFunctionsGivenKnotSpanIndex=function(t,n,r,s){var o=l.zeros1d(r+1),h=l.zeros1d(r+1),c=l.zeros1d(r+1),v=0,d=0;o[0]=1;for(var m=1,b=r+1;m<b;){var w=m++;h[w]=n-s[t+1-w],c[w]=s[t+w]-n,v=0;for(var M=0;M<w;){var P=M++;d=o[P]/(c[P+1]+h[w-P]),o[P]=v+c[P+1]*d,v=h[w-P]*d}o[w]=v}return o},S.knotSpan=function(t,n,r){return S.knotSpanGivenN(r.length-t-2,t,n,r)},S.knotSpanGivenN=function(t,n,r,s){if(r>s[t+1]-tt.EPSILON)return t;if(r<s[n]+tt.EPSILON)return n;for(var o=n,h=t+1,c=Math.floor((o+h)/2);r<s[c]||r>=s[c+1];)r<s[c]?h=c:o=c,c=Math.floor((o+h)/2);return c},S.dehomogenize=function(t){for(var n=t.length,r=[],s=t[n-1],o=t.length-1,h=0;h<o;){var c=h++;r.push(t[c]/s)}return r},S.rational1d=function(t){var n=t[0].length-1;return t.map(function(r){return r.slice(0,n)})},S.rational2d=function(t){return t.map(S.rational1d)},S.weight1d=function(t){var n=t[0].length-1;return t.map(function(r){return r[n]})},S.weight2d=function(t){return t.map(S.weight1d)},S.dehomogenize1d=function(t){return t.map(S.dehomogenize)},S.dehomogenize2d=function(t){return t.map(S.dehomogenize1d)},S.homogenize1d=function(t,n){var r=t.length,s=t[0].length,o=[],h=0,c=[],v;n!=null?v=n:v=l.rep(t.length,1);for(var d=0;d<r;){var m=d++,b=[];c=t[m],h=v[m];for(var w=0;w<s;){var M=w++;b.push(c[M]*h)}b.push(h),o.push(b)}return o},S.homogenize2d=function(t,n){var r=t.length,s=[],o;if(n!=null)o=n;else{for(var h=[],c=0;c<r;)c++,h.push(l.rep(t[0].length,1));o=h}for(var v=0;v<r;){var d=v++;s.push(S.homogenize1d(t[d],o[d]))}return s};var it=f.eval.Intersect=function(){};p["verb.eval.Intersect"]=it,it.__name__=["verb","eval","Intersect"],it.surfaces=function(t,n,r){var s=At.rationalSurfaceAdaptive(t),o=At.rationalSurfaceAdaptive(n),h=it.meshes(s,o),c=h.map(function(v){return v.map(function(d){return it.surfacesAtPointWithEstimate(t,n,d.uv0,d.uv1,r)})});return c.map(function(v){return ht.rationalInterpCurve(v.map(function(d){return d.point}),3)})},it.surfacesAtPointWithEstimate=function(t,n,r,s,o){var h,c,v,d,m,b,w,M,P,z,I,C,L,B=5,T=0;do{if(h=S.rationalSurfaceDerivatives(t,r[0],r[1],1),c=h[0][0],d=h[1][0],m=h[0][1],v=l.normalized(l.cross(d,m)),b=l.dot(v,c),w=S.rationalSurfaceDerivatives(n,s[0],s[1],1),M=w[0][0],z=w[1][0],I=w[0][1],P=l.normalized(l.cross(z,I)),C=l.dot(P,M),L=l.distSquared(c,M),L<o*o)break;var R=l.normalized(l.cross(v,P)),F=l.dot(R,c),X=it.threePlanes(v,b,P,C,R,F);if(X==null)throw new j("panic!");var D=l.sub(X,c),V=l.sub(X,M),q=l.cross(d,v),J=l.cross(m,v),$=l.cross(z,P),nt=l.cross(I,P),st=l.dot(J,D)/l.dot(J,d),rt=l.dot(q,D)/l.dot(q,m),at=l.dot(nt,V)/l.dot(nt,z),et=l.dot($,V)/l.dot($,I);r=l.add([st,rt],r),s=l.add([at,et],s),T++}while(T<B);return new Fn(r,s,c,L)},it.meshes=function(t,n,r,s){r==null&&(r=new Ie(t)),s==null&&(s=new Ie(n));var o=it.boundingBoxTrees(r,s,0),h=G.unique(o.map(function(c){return it.triangles(t,c.item0,n,c.item1)}).filter(function(c){return c!=null}).filter(function(c){return l.distSquared(c.min.point,c.max.point)>tt.EPSILON}),function(c,v){var d=l.sub(c.min.uv0,v.min.uv0),m=l.dot(d,d),b=l.sub(c.max.uv0,v.max.uv0),w=l.dot(b,b),M=l.sub(c.min.uv0,v.max.uv0),P=l.dot(M,M),z=l.sub(c.max.uv0,v.min.uv0),I=l.dot(z,z);return m<tt.EPSILON&&w<tt.EPSILON||P<tt.EPSILON&&I<tt.EPSILON});return it.makeMeshIntersectionPolylines(h)},it.meshSlices=function(t,n,r,s){for(var o=new Ge(t),h=o.boundingBox(),c=h.min[0],v=h.min[1],d=h.max[0],m=h.max[1],b=l.span(n,r,s),w=[],M=0;M<b.length;){var P=b[M];++M;var z=[[c,v,P],[d,v,P],[d,m,P],[c,m,P]],I=[[0,0],[1,0],[1,1],[0,1]],C=[[0,1,2],[0,2,3]],L=new ye(C,z,null,I);w.push(it.meshes(t,L,o))}return w},it.makeMeshIntersectionPolylines=function(t){if(t.length==0)return[];for(var n=0;n<t.length;){var r=t[n];++n,r.max.opp=r.min,r.min.opp=r.max}for(var s=it.kdTreeFromSegments(t),o=[],h=0;h<t.length;){var c=t[h];++h,o.push(c.min),o.push(c.max)}for(var v=0;v<o.length;){var d=o[v];if(++v,d.adj==null){var m=it.lookupAdjacentSegment(d,s,t.length);m!=null&&m.adj==null&&(d.adj=m,m.adj=d)}}var b=o.filter(function(B){return B.adj==null});b.length==0&&(b=o);for(var w=[],M=0,P=!1;b.length!=0;){var z=b.pop();if(!z.visited){for(var I=[],C=z;C!=null&&!(C.visited||(C.visited=!0,C.opp.visited=!0,I.push(C),M+=2,C=C.opp.adj,C==z)););I.length>0&&(I.push(I[I.length-1].opp),w.push(I))}if(b.length==0&&o.length>0&&(P||M<o.length)){P=!0;var L=o.pop();b.push(L)}}return w},it.kdTreeFromSegments=function(t){for(var n=[],r=0;r<t.length;){var s=t[r];++r,n.push(new dn(s.min.point,s.min)),n.push(new dn(s.max.point,s.max))}return new qn(n,l.distSquared)},it.lookupAdjacentSegment=function(t,n,r){var s=n.nearest(t.point,r,tt.EPSILON).filter(function(o){return t!=o.item0.obj}).map(function(o){return o.item0.obj});return s.length==1?s[0]:null},it.curveAndSurface=function(t,n,r,s,o){r==null&&(r=.001),s!=null?s=s:s=new ke(t),o!=null?o=o:o=new qe(n);var h=it.boundingBoxTrees(s,o,r);return G.unique(h.map(function(c){var v=c.item0,d=c.item1,m=G.first(v.knots),b=G.last(v.knots),w=(m+b)/2,M=G.first(d.knotsU),P=G.last(d.knotsU),z=G.first(d.knotsV),I=G.last(d.knotsV),C=[(M+P)/2,(z+I)/2];return it.curveAndSurfaceWithEstimate(v,d,[w].concat(C),r)}).filter(function(c){return l.distSquared(c.curvePoint,c.surfacePoint)<r*r}),function(c,v){return Math.abs(c.u-v.u)<.5*r})},it.curveAndSurfaceWithEstimate=function(t,n,r,s){s==null&&(s=.001);var o=function(d){var m=S.rationalCurvePoint(t,d[0]),b=S.rationalSurfacePoint(n,d[1],d[2]),w=l.sub(m,b);return l.dot(w,w)},h=function(d){var m=S.rationalCurveDerivatives(t,d[0],1),b=S.rationalSurfaceDerivatives(n,d[1],d[2],1),w=l.sub(b[0][0],m[0]),M=l.mul(-1,m[1]),P=b[1][0],z=b[0][1];return[2*l.dot(M,w),2*l.dot(P,w),2*l.dot(z,w)]},c=we.uncmin(o,r,s*s,h),v=c.solution;return new Vn(v[0],[v[1],v[2]],S.rationalCurvePoint(t,v[0]),S.rationalSurfacePoint(n,v[1],v[2]))},it.polylineAndMesh=function(t,n,r){for(var s=it.boundingBoxTrees(new Ne(t),new Ie(n),r),o=[],h=0;h<s.length;){var c=s[h];++h;var v=c.item0,d=c.item1,m=it.segmentWithTriangle(t.points[v],t.points[v+1],n.points,n.faces[d]);if(m!=null){var b=m.point,w=l.lerp(m.p,[t.params[v]],[t.params[v+1]])[0],M=Gt.triangleUVFromPoint(n,d,b);o.push(new Dn(b,w,M,v,d))}}return o},it.boundingBoxTrees=function(t,n,r){r==null&&(r=1e-9);var s=[],o=[];s.push(t),o.push(n);for(var h=[];s.length>0;){var c=s.pop(),v=o.pop();if(!(c.empty()||v.empty())&&c.boundingBox().intersects(v.boundingBox(),r)){var d=c.indivisible(r),m=v.indivisible(r);if(d&&m){h.push(new qt(c.yield(),v.yield()));continue}else if(d&&!m){var b=v.split();s.push(c),o.push(b.item1),s.push(c),o.push(b.item0);continue}else if(!d&&m){var w=c.split();s.push(w.item1),o.push(v),s.push(w.item0),o.push(v);continue}var M=c.split(),P=v.split();s.push(M.item1),o.push(P.item1),s.push(M.item1),o.push(P.item0),s.push(M.item0),o.push(P.item1),s.push(M.item0),o.push(P.item0)}}return h},it.curves=function(t,n,r){var s=it.boundingBoxTrees(new ke(t),new ke(n),0);return G.unique(s.map(function(o){return it.curvesWithEstimate(t,n,G.first(o.item0.knots),G.first(o.item1.knots),r)}).filter(function(o){return l.distSquared(o.point0,o.point1)<r}),function(o,h){return Math.abs(o.u0-h.u0)<r*5})},it.curvesWithEstimate=function(t,n,r,s,o){var h=function(M){var P=S.rationalCurvePoint(t,M[0]),z=S.rationalCurvePoint(n,M[1]),I=l.sub(P,z);return l.dot(I,I)},c=function(M){var P=S.rationalCurveDerivatives(t,M[0],1),z=S.rationalCurveDerivatives(n,M[1],1),I=l.sub(P[0],z[0]),C=P[1],L=l.mul(-1,z[1]);return[2*l.dot(C,I),2*l.dot(L,I)]},v=we.uncmin(h,[r,s],o*o,c),d=v.solution[0],m=v.solution[1],b=S.rationalCurvePoint(t,d),w=S.rationalCurvePoint(n,m);return new $e(b,w,d,m)},it.triangles=function(t,n,r,s){var o=t.faces[n],h=r.faces[s],c=Gt.getTriangleNorm(t.points,o),v=Gt.getTriangleNorm(r.points,h),d=t.points[o[0]],m=r.points[h[0]],b=it.planes(d,c,m,v);if(b==null)return null;var w=it.clipRayInCoplanarTriangle(b,t,n);if(w==null)return null;var M=it.clipRayInCoplanarTriangle(b,r,s);if(M==null)return null;var P=it.mergeTriangleClipIntervals(w,M,t,n,r,s);return P==null?null:new re(new Oe(P.min.uv0,P.min.uv1,P.min.point,n,s),new Oe(P.max.uv0,P.max.uv1,P.max.point,n,s))},it.clipRayInCoplanarTriangle=function(t,n,r){for(var s=n.faces[r],o=[n.points[s[0]],n.points[s[1]],n.points[s[2]]],h=[n.uvs[s[0]],n.uvs[s[1]],n.uvs[s[2]]],c=[l.sub(h[1],h[0]),l.sub(h[2],h[1]),l.sub(h[0],h[2])],v=[l.sub(o[1],o[0]),l.sub(o[2],o[1]),l.sub(o[0],o[2])],d=v.map(l.normalized),m=v.map(l.norm),b=null,w=null,M=0;M<3;){var P=M++,z=o[P],I=d[P],C=it.rays(z,I,t.origin,t.dir);if(C!=null){var L=C.u0,B=C.u1;L<-tt.EPSILON||L>m[P]+tt.EPSILON||((b==null||B<b.u)&&(b=new _n(B,l.onRay(t.origin,t.dir,B),l.onRay(h[P],c[P],L/m[P]))),(w==null||B>w.u)&&(w=new _n(B,l.onRay(t.origin,t.dir,B),l.onRay(h[P],c[P],L/m[P]))))}}return w==null||b==null?null:new re(b,w)},it.mergeTriangleClipIntervals=function(t,n,r,s,o,h){if(n.min.u>t.max.u+tt.EPSILON||t.min.u>n.max.u+tt.EPSILON)return null;var c;t.min.u>n.min.u?c=new qt(t.min,0):c=new qt(n.min,1);var v;t.max.u<n.max.u?v=new qt(t.max,0):v=new qt(n.max,1);var d=new re(new Oe(null,null,c.item0.point,s,h),new Oe(null,null,v.item0.point,s,h));return c.item1==0?(d.min.uv0=c.item0.uv,d.min.uv1=Gt.triangleUVFromPoint(o,h,c.item0.point)):(d.min.uv0=Gt.triangleUVFromPoint(r,s,c.item0.point),d.min.uv1=c.item0.uv),v.item1==0?(d.max.uv0=v.item0.uv,d.max.uv1=Gt.triangleUVFromPoint(o,h,v.item0.point)):(d.max.uv0=Gt.triangleUVFromPoint(r,s,v.item0.point),d.max.uv1=v.item0.uv),d},it.planes=function(t,n,r,s){var o=l.cross(n,s);if(l.dot(o,o)<tt.EPSILON)return null;var h=0,c=Math.abs(o[0]),v=Math.abs(o[1]),d=Math.abs(o[2]);v>c&&(h=1,c=v),d>c&&(h=2,c=d);var m,b,w,M;h==0?(m=n[1],b=n[2],w=s[1],M=s[2]):h==1?(m=n[0],b=n[2],w=s[0],M=s[2]):(m=n[0],b=n[1],w=s[0],M=s[1]);var P=-l.dot(t,n),z=-l.dot(r,s),I=m*M-b*w,C=(b*z-P*M)/I,L=(P*w-m*z)/I,B;return h==0?B=[0,C,L]:h==1?B=[C,0,L]:B=[C,L,0],new vn(B,l.normalized(o))},it.threePlanes=function(t,n,r,s,o,h){var c=l.cross(r,o),v=l.dot(t,c);if(Math.abs(v)<tt.EPSILON)return null;var d=l.sub(l.mul(h,r),l.mul(s,o)),m=l.add(l.mul(n,c),l.cross(t,d));return l.mul(1/v,m)},it.polylines=function(t,n,r){for(var s=it.boundingBoxTrees(new Ne(t),new Ne(n),r),o=[],h=0;h<s.length;){var c=s[h];++h;var v=c.item0,d=c.item1,m=it.segments(t.points[v],t.points[v+1],n.points[d],n.points[d+1],r);m!=null&&(m.u0=l.lerp(m.u0,[t.params[v]],[t.params[v+1]])[0],m.u1=l.lerp(m.u1,[n.params[d]],[n.params[d+1]])[0],o.push(m))}return o},it.segments=function(t,n,r,s,o){var h=l.sub(n,t),c=Math.sqrt(l.dot(h,h)),v=l.mul(1/c,h),d=l.sub(s,r),m=Math.sqrt(l.dot(d,d)),b=l.mul(1/m,d),w=it.rays(t,v,r,b);if(w!=null){var M=Math.min(Math.max(0,w.u0/c),1),P=Math.min(Math.max(0,w.u1/m),1),z=l.onRay(t,h,M),I=l.onRay(r,d,P),C=l.distSquared(z,I);if(C<o*o)return new $e(z,I,M,P)}return null},it.rays=function(t,n,r,s){var o=l.dot(n,s),h=l.dot(n,r),c=l.dot(n,t),v=l.dot(s,r),d=l.dot(s,t),m=l.dot(n,n),b=l.dot(s,s),w=m*b-o*o;if(Math.abs(w)<tt.EPSILON)return null;var M=o*(h-c)-m*(v-d),P=M/w,z=(h-c+P*o)/m,I=l.onRay(t,n,z),C=l.onRay(r,s,P);return new $e(I,C,z,P)},it.segmentWithTriangle=function(t,n,r,s){var o=r[s[0]],h=r[s[1]],c=r[s[2]],v=l.sub(h,o),d=l.sub(c,o),m=l.cross(v,d),b=l.sub(n,t),w=l.sub(t,o),M=-l.dot(m,w),P=l.dot(m,b);if(Math.abs(P)<tt.EPSILON)return null;var z=M/P;if(z<0||z>1)return null;var I=l.add(t,l.mul(z,b)),C=l.dot(v,d),L=l.dot(v,v),B=l.dot(d,d),T=l.sub(I,o),R=l.dot(T,v),F=l.dot(T,d),X=C*C-L*B;if(Math.abs(X)<tt.EPSILON)return null;var D=(C*F-B*R)/X,V=(C*R-L*F)/X;return D>1+tt.EPSILON||V>1+tt.EPSILON||V<-tt.EPSILON||D<-tt.EPSILON||D+V>1+tt.EPSILON?null:new On(I,D,V,z)},it.segmentAndPlane=function(t,n,r,s){var o=l.dot(s,l.sub(n,t));if(Math.abs(o)<tt.EPSILON)return null;var h=l.dot(s,l.sub(r,t)),c=h/o;return c>1+tt.EPSILON||c<-tt.EPSILON?null:{p:c}};var ht=f.eval.Make=function(){};p["verb.eval.Make"]=ht,ht.__name__=["verb","eval","Make"],ht.rationalTranslationalSurface=function(t,n){for(var r=S.rationalCurvePoint(n,G.first(n.knots)),s=G.first(n.knots),o=G.last(n.knots),h=2*n.controlPoints.length,c=(o-s)/(h-1),v=[],d=0;d<h;){var m=d++,b=l.sub(S.rationalCurvePoint(n,s+m*c),r),w=vt.rationalCurveTransform(t,[[1,0,0,b[0]],[0,1,0,b[1]],[0,0,1,b[2]],[0,0,0,1]]);v.push(w)}return ht.loftedSurface(v)},ht.surfaceBoundaryCurves=function(t){var n=ht.surfaceIsocurve(t,G.first(t.knotsU),!1),r=ht.surfaceIsocurve(t,G.last(t.knotsU),!1),s=ht.surfaceIsocurve(t,G.first(t.knotsV),!0),o=ht.surfaceIsocurve(t,G.last(t.knotsV),!0);return[n,r,s,o]},ht.surfaceIsocurve=function(t,n,r){r==null&&(r=!1);var s;r?s=t.knotsV:s=t.knotsU;var o;r?o=t.degreeV:o=t.degreeU;for(var h=_t.knotMultiplicities(s),c=-1,v=0,d=h.length;v<d;){var m=v++;if(Math.abs(n-h[m].knot)<tt.EPSILON){c=m;break}}var b=o+1;c>=0&&(b=b-h[c].mult);var w;b>0?w=vt.surfaceKnotRefine(t,l.rep(b,n),r):w=t;var M=S.knotSpan(o,n,s);return Math.abs(n-G.first(s))<tt.EPSILON?M=0:Math.abs(n-G.last(s))<tt.EPSILON&&(M=(r?w.controlPoints[0].length:w.controlPoints.length)-1),r?new kt(w.degreeU,w.knotsU,function(P){for(var z,I=[],C=0,L=w.controlPoints;C<L.length;){var B=L[C];++C,I.push(B[M])}return z=I,z}()):new kt(w.degreeV,w.knotsV,w.controlPoints[M])},ht.loftedSurface=function(t,n){t=vt.unifyCurveKnotVectors(t);var r=t[0].degree;n==null&&(n=3),n>t.length-1&&(n=t.length-1);for(var s=t[0].knots,o=[],h=[],c=0,v=t[0].controlPoints.length;c<v;){var d=[c++],m=t.map(function(w){return function(M){return M.controlPoints[w[0]]}}(d)),b=ht.rationalInterpCurve(m,n,!0);h.push(b.controlPoints),o=b.knots}return new Ot(r,n,s,o,h)},ht.clonedCurve=function(t){return new kt(t.degree,t.knots.slice(),t.controlPoints.map(function(n){return n.slice()}))},ht.rationalBezierCurve=function(t,n){for(var r=t.length-1,s=[],o=0,h=r+1;o<h;)o++,s.push(0);for(var c=0,v=r+1;c<v;)c++,s.push(1);return n==null&&(n=l.rep(t.length,1)),new kt(r,s,S.homogenize1d(t,n))},ht.fourPointSurface=function(t,n,r,s,o){o==null&&(o=3);for(var h=o,c=[],v=0,d=o+1;v<d;){for(var m=v++,b=[],w=0,M=o+1;w<M;){var P=w++,z=1-m/h,I=l.lerp(z,t,n),C=l.lerp(z,s,r),L=l.lerp(1-P/h,I,C);L.push(1),b.push(L)}c.push(b)}var B=l.rep(o+1,0),T=l.rep(o+1,1);return new Ot(o,o,B.concat(T),B.concat(T),c)},ht.ellipseArc=function(t,n,r,s,o){var h=l.norm(n),c=l.norm(r);n=l.normalized(n),r=l.normalized(r),o<s&&(o=2*Math.PI+s);var v=o-s,d=0;v<=Math.PI/2?d=1:v<=Math.PI?d=2:v<=3*Math.PI/2?d=3:d=4;var m=v/d,b=Math.cos(m/2),w=l.add(t,l.add(l.mul(h*Math.cos(s),n),l.mul(c*Math.sin(s),r))),M=l.sub(l.mul(Math.cos(s),r),l.mul(Math.sin(s),n)),P=[],z=l.zeros1d(2*d+3),I=0,C=s,L=l.zeros1d(d*2);P[0]=w,L[0]=1;for(var B=1,T=d+1;B<T;){var R=B++;C+=m;var F=l.add(t,l.add(l.mul(h*Math.cos(C),n),l.mul(c*Math.sin(C),r)));L[I+2]=1,P[I+2]=F;var X=l.sub(l.mul(Math.cos(C),r),l.mul(Math.sin(C),n)),D=it.rays(w,l.mul(1/l.norm(M),M),F,l.mul(1/l.norm(X),X)),V=l.add(w,l.mul(D.u0,M));L[I+1]=b,P[I+1]=V,I+=2,R<d&&(w=F,M=X)}for(var q=2*d+1,J=0;J<3;){var $=J++;z[$]=0,z[$+q]=1}switch(d){case 2:z[3]=z[4]=.5;break;case 3:z[3]=z[4]=.3333333333333333,z[5]=z[6]=.6666666666666666;break;case 4:z[3]=z[4]=.25,z[5]=z[6]=.5,z[7]=z[8]=.75;break}return new kt(2,z,S.homogenize1d(P,L))},ht.arc=function(t,n,r,s,o,h){return ht.ellipseArc(t,l.mul(s,l.normalized(n)),l.mul(s,l.normalized(r)),o,h)},ht.polyline=function(t){for(var n=[0,0],r=0,s=0,o=t.length-1;s<o;){var h=s++;r+=l.dist(t[h],t[h+1]),n.push(r)}n.push(r),n=l.mul(1/r,n);for(var c,v=[],d=0,m=t.length;d<m;)d++,v.push(1);return c=v,new kt(1,n,S.homogenize1d(t.slice(0),c))},ht.extrudedSurface=function(t,n,r){for(var s=[[],[],[]],o=[[],[],[]],h=S.dehomogenize1d(r.controlPoints),c=S.weight1d(r.controlPoints),v=l.mul(n,t),d=l.mul(.5*n,t),m=0,b=h.length;m<b;){var w=m++;s[2][w]=h[w],s[1][w]=l.add(d,h[w]),s[0][w]=l.add(v,h[w]),o[0][w]=c[w],o[1][w]=c[w],o[2][w]=c[w]}return new Ot(2,r.degree,[0,0,0,1,1,1],r.knots,S.homogenize2d(s,o))},ht.cylindricalSurface=function(t,n,r,s,o){var h=l.cross(t,n),c=ht.arc(r,n,h,o,0,2*Math.PI);return ht.extrudedSurface(t,s,c)},ht.revolvedSurface=function(t,n,r,s){var o=S.dehomogenize1d(t.controlPoints),h=S.weight1d(t.controlPoints),c,v;s<=Math.PI/2?(c=1,v=l.zeros1d(6+2*(c-1))):s<=Math.PI?(c=2,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.5):s<=3*Math.PI/2?(c=3,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.3333333333333333,v[5]=v[6]=.6666666666666666):(c=4,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.25,v[5]=v[6]=.5,v[7]=v[8]=.75);for(var d=s/c,m=3+2*(c-1),b=0;b<3;){var w=b++;v[w]=0,v[m+w]=1}for(var M=Math.cos(d/2),P=0,z=l.zeros1d(c+1),I=l.zeros1d(c+1),C=l.zeros3d(2*c+1,o.length,3),L=l.zeros2d(2*c+1,o.length),B=1,T=c+1;B<T;){var R=B++;P+=d,I[R]=Math.cos(P),z[R]=Math.sin(P)}for(var F=0,X=o.length;F<X;){var D=F++,V=ce.rayClosestPoint(o[D],n,r),q=l.sub(o[D],V),J=l.norm(q),$=l.cross(r,q);J>tt.EPSILON&&(q=l.mul(1/J,q),$=l.mul(1/J,$)),C[0][D]=o[D];var nt=o[D];L[0][D]=h[D];for(var st=$,rt=0,at=1,et=c+1;at<et;){var ot=at++,O;J==0?O=V:O=l.add(V,l.add(l.mul(J*I[ot],q),l.mul(J*z[ot],$))),C[rt+2][D]=O,L[rt+2][D]=h[D];var ut=l.sub(l.mul(I[ot],$),l.mul(z[ot],q));if(J==0)C[rt+1][D]=V;else{var gt=it.rays(nt,l.mul(1/l.norm(st),st),O,l.mul(1/l.norm(ut),ut)),It=l.add(nt,l.mul(gt.u0,st));C[rt+1][D]=It}L[rt+1][D]=M*h[D],rt+=2,ot<c&&(nt=O,st=ut)}}return new Ot(2,t.degree,v,t.knots,S.homogenize2d(C,L))},ht.sphericalSurface=function(t,n,r,s){var o=ht.arc(t,l.mul(-1,n),r,s,0,Math.PI);return ht.revolvedSurface(o,t,n,2*Math.PI)},ht.conicalSurface=function(t,n,r,s,o){var h=2*Math.PI,c=1,v=[l.add(r,l.mul(s,t)),l.add(r,l.mul(o,n))],d=[0,0,1,1],m=[1,1],b=new kt(c,d,S.homogenize1d(v,m));return ht.revolvedSurface(b,r,t,h)},ht.rationalInterpCurve=function(t,n,r,s,o){if(r==null&&(r=!1),n==null&&(n=3),t.length<n+1)throw new j("You need to supply at least degree + 1 points! You only supplied "+t.length+" points.");for(var h=[0],c=1,v=t.length;c<v;){var d=c++,m=l.norm(l.sub(t[d],t[d-1])),b=h[h.length-1];h.push(b+m)}for(var w=h[h.length-1],M=0,P=h.length;M<P;){var z=M++;h[z]=h[z]/w}var I=l.rep(n+1,0),C=s!=null&&o!=null,L;C?L=0:L=1;var B;C?B=h.length-n+1:B=h.length-n;for(var T=L;T<B;){for(var R=T++,F=0,X=0;X<n;){var D=X++;F+=h[R+D]}I.push(1/n*F)}var V=I.concat(l.rep(n+1,1)),q=[],J;C?J=t.length+1:J=t.length-1;var $;C?$=t.length-(n-1):$=t.length-(n+1);for(var nt=0;nt<h.length;){var st=h[nt];++nt;var rt=S.knotSpanGivenN(J,n,st,V),at=S.basisFunctionsGivenKnotSpanIndex(rt,st,n,V),et=rt-n,ot=l.zeros1d(et),O=l.zeros1d($-et);q.push(ot.concat(at).concat(O))}if(C){var ut=q[0].length-2,gt=[-1,1].concat(l.zeros1d(ut)),It=l.zeros1d(ut).concat([-1,1]);G.spliceAndInsert(q,1,0,gt),G.spliceAndInsert(q,q.length-1,0,It)}for(var Et=t[0].length,Ct=[],Tt=(1-V[V.length-n-2])/n,ie=V[n+1]/n,ge=0;ge<Et;){var ne=[ge++],$t;if(!C)$t=t.map(function(Ae){return function(Re){return Re[Ae[0]]}}(ne));else{$t=[t[0][ne[0]]],$t.push(ie*s[ne[0]]);for(var se=1,_e=t.length-1;se<_e;){var xe=se++;$t.push(t[xe][ne[0]])}$t.push(Tt*o[ne[0]]),$t.push(G.last(t)[ne[0]])}var Ee=Mt.solve(q,$t);Ct.push(Ee)}var Me=Mt.transpose(Ct);if(!r){var Pe=l.rep(Me.length,1);Me=S.homogenize1d(Me,Pe)}return new kt(n,V,Me)};var vt=f.eval.Modify=function(){};p["verb.eval.Modify"]=vt,vt.__name__=["verb","eval","Modify"],vt.curveReverse=function(t){return new kt(t.degree,vt.knotsReverse(t.knots),G.reversed(t.controlPoints))},vt.surfaceReverse=function(t,n){return n==null&&(n=!1),n?new Ot(t.degreeU,t.degreeV,t.knotsU,vt.knotsReverse(t.knotsV),function(r){for(var s,o=[],h=0,c=t.controlPoints;h<c.length;){var v=c[h];++h,o.push(G.reversed(v))}return s=o,s}()):new Ot(t.degreeU,t.degreeV,vt.knotsReverse(t.knotsU),t.knotsV,G.reversed(t.controlPoints))},vt.knotsReverse=function(t){var n=G.first(t);G.last(t);for(var r=[n],s=t.length,o=1;o<s;){var h=o++;r.push(r[h-1]+(t[s-h]-t[s-h-1]))}return r},vt.unifyCurveKnotVectors=function(t){t=t.map(ht.clonedCurve);for(var n=K.fold(t,function(V,q){return vt.imax(V.degree,q)},0),r=0,s=t.length;r<s;){var o=r++;t[o].degree<n&&(t[o]=vt.curveElevateDegree(t[o],n))}for(var h,c=[],v=0;v<t.length;){var d=t[v];++v,c.push(new re(G.first(d.knots),G.last(d.knots)))}h=c;for(var m=0,b=t.length;m<b;){var w=m++,M=[h[w].min];t[w].knots=t[w].knots.map(function(V){return function(q){return q-V[0]}}(M))}for(var P=h.map(function(V){return V.max-V.min}),z=K.fold(P,function(V,q){return Math.max(V,q)},0),I=0,C=t.length;I<C;){var L=I++,B=[z/P[L]];t[L].knots=t[L].knots.map(function(V){return function(q){return q*V[0]}}(B))}for(var T=K.fold(t,function(V,q){return l.sortedSetUnion(V.knots,q)},[]),R=0,F=t.length;R<F;){var X=R++,D=l.sortedSetSub(T,t[X].knots);D.length==0&&(t[X]=t[X]),t[X]=vt.curveKnotRefine(t[X],D)}return t},vt.imin=function(t,n){return t<n?t:n},vt.imax=function(t,n){return t>n?t:n},vt.curveElevateDegree=function(t,n){if(n<=t.degree)return t;var r=t.knots.length-t.degree-2,s=t.degree,o=t.knots,h=t.controlPoints,c=n-t.degree,v=t.controlPoints[0].length,d=l.zeros2d(s+c+1,s+1),m=[],b=[],w=[],M=r+s+1,P=n,z=Math.floor(P/2),I=[],C=[];d[0][0]=1,d[P][s]=1;for(var L=1,B=z+1;L<B;)for(var T=L++,R=1/zt.get(P,T),F=vt.imin(s,T),X=vt.imax(0,T-c),D=F+1;X<D;){var V=X++;d[T][V]=R*zt.get(s,V)*zt.get(c,T-V)}for(var q=z+1;q<P;)for(var J=q++,$=vt.imin(s,J),nt=vt.imax(0,J-c),st=$+1;nt<st;){var rt=nt++;d[J][rt]=d[P-J][s-rt]}var at=P+1,et=-1,ot=s,O=s+1,ut=1,gt=o[0];I[0]=h[0];for(var It=0,Et=P+1;It<Et;){var Ct=It++;C[Ct]=gt}for(var Tt=0,ie=s+1;Tt<ie;){var ge=Tt++;m[ge]=h[ge]}for(;O<M;){for(var ne=O;O<M&&o[O]==o[O+1];)O=O+1;var $t=O-ne+1,se=o[O],_e=et;et=s-$t;var xe;_e>0?xe=Math.floor((_e+2)/2):xe=1;var Ee;if(et>0?Ee=Math.floor(P-(et+1)/2):Ee=P,et>0){for(var Me=se-gt,Pe=[],Ae=s;Ae>$t;)Pe[Ae-$t-1]=Me/(o[ot+Ae]-gt),Ae--;for(var Re=1,bn=et+1;Re<bn;){for(var en=Re++,Zi=et-en,Er=$t+en,nn=s;nn>=Er;)m[nn]=l.add(l.mul(Pe[nn-Er],m[nn]),l.mul(1-Pe[nn-Er],m[nn-1])),nn--;w[Zi]=m[s]}}for(var bi=xe,Yi=P+1;bi<Yi;){var xn=bi++;b[xn]=l.zeros1d(v);for(var Hi=vt.imin(s,xn),xi=vt.imax(0,xn-c),Qi=Hi+1;xi<Qi;){var Mi=xi++;b[xn]=l.add(b[xn],l.mul(d[xn][Mi],m[Mi]))}}if(_e>1)for(var Br=at-2,Lr=at,Pi=se-gt,Ji=(se-C[at-1])/Pi,Ai=1;Ai<_e;){for(var Tr=Ai++,Ve=Br,rn=Lr,Ye=rn-at+1;rn-Ve>Tr;){if(Ve<ut){var $i=(se-C[Ve])/(gt-C[Ve]);I[Ve]=l.lerp($i,I[Ve],I[Ve-1])}if(rn>=xe){if(rn-Tr<=at-P+_e){var ts=(se-C[rn-Tr])/Pi;b[Ye]=l.lerp(ts,b[Ye],b[Ye+1])}}else b[Ye]=l.lerp(Ji,b[Ye],b[Ye+1]);Ve=Ve+1,rn=rn-1,Ye=Ye-1}Br=Br-1,Lr=Lr+1}if(ot!=s)for(var zi=0,es=P-_e;zi<es;)zi++,C[at]=gt,at=at+1;for(var Si=xe,ns=Ee+1;Si<ns;){var rs=Si++;I[ut]=b[rs],ut=ut+1}if(O<M){for(var Ci=0;Ci<et;){var ki=Ci++;m[ki]=w[ki]}for(var Ii=et,is=s+1;Ii<is;){var Ni=Ii++;m[Ni]=h[O-s+Ni]}ot=O,O=O+1,gt=se}else for(var Ei=0,ss=P+1;Ei<ss;){var as=Ei++;C[at+as]=se}}return new kt(n,C,I)},vt.rationalSurfaceTransform=function(t,n){for(var r=S.dehomogenize2d(t.controlPoints),s=0,o=r.length;s<o;)for(var h=s++,c=0,v=r[h].length;c<v;){var d=c++,m=r[h][d];m.push(1),r[h][d]=Mt.dot(n,m).slice(0,m.length-1)}return new Ot(t.degreeU,t.degreeV,t.knotsU.slice(),t.knotsV.slice(),S.homogenize2d(r,S.weight2d(t.controlPoints)))},vt.rationalCurveTransform=function(t,n){for(var r=S.dehomogenize1d(t.controlPoints),s=0,o=r.length;s<o;){var h=s++,c=r[h];c.push(1),r[h]=Mt.dot(n,c).slice(0,c.length-1)}return new kt(t.degree,t.knots.slice(),S.homogenize1d(r,S.weight1d(t.controlPoints)))},vt.surfaceKnotRefine=function(t,n,r){var s=[],o,h,c;r?(c=t.controlPoints,o=t.knotsV,h=t.degreeV):(c=Mt.transpose(t.controlPoints),o=t.knotsU,h=t.degreeU);for(var v=null,d=0;d<c.length;){var m=c[d];++d,v=vt.curveKnotRefine(new kt(h,o,m),n),s.push(v.controlPoints)}var b=v.knots;return r?new Ot(t.degreeU,t.degreeV,t.knotsU.slice(),b,s):(s=Mt.transpose(s),new Ot(t.degreeU,t.degreeV,b,t.knotsV.slice(),s))},vt.decomposeCurveIntoBeziers=function(t){for(var n=t.degree,r=t.controlPoints,s=t.knots,o=_t.knotMultiplicities(s),h=n+1,c=0;c<o.length;){var v=o[c];if(++c,v.mult<h){var d=l.rep(h-v.mult,v.knot),m=vt.curveKnotRefine(new kt(n,s,r),d);s=m.knots,r=m.controlPoints}}s.length/h-1;for(var b=h*2,w=[],M=0;M<r.length;){var P=s.slice(M,M+b),z=r.slice(M,M+h);w.push(new kt(n,P,z)),M+=h}return w},vt.curveKnotRefine=function(t,n){if(n.length==0)return ht.clonedCurve(t);for(var r=t.degree,s=t.controlPoints,o=t.knots,h=s.length-1,c=h+r+1,v=n.length-1,d=S.knotSpan(r,n[0],o),m=S.knotSpan(r,n[v],o),b=[],w=[],M=0,P=d-r+1;M<P;){var z=M++;b[z]=s[z]}for(var I=m-1,C=h+1;I<C;){var L=I++;b[L+v+1]=s[L]}for(var B=0,T=d+1;B<T;){var R=B++;w[R]=o[R]}for(var F=m+r,X=c+1;F<X;){var D=F++;w[D+v+1]=o[D]}for(var V=m+r-1,q=m+r+v,J=v;J>=0;){for(;n[J]<=o[V]&&V>d;)b[q-r-1]=s[V-r-1],w[q]=o[V],q=q-1,V=V-1;b[q-r-1]=b[q-r];for(var $=1,nt=r+1;$<nt;){var st=$++,rt=q-r+st,at=w[q+st]-n[J];Math.abs(at)<tt.EPSILON?b[rt-1]=b[rt]:(at=at/(w[q+st]-o[V-r+st]),b[rt-1]=l.add(l.mul(at,b[rt-1]),l.mul(1-at,b[rt])))}w[q]=n[J],q=q-1,J--}return new kt(r,w,b)},vt.curveKnotInsert=function(t,n,r){for(var s=t.degree,o=t.controlPoints,h=t.knots,c=0,v=o.length,d=S.knotSpan(s,n,h),m=[],b=[],w=[],M=1,P=d+1;M<P;){var z=M++;b[z]=h[z]}for(var I=1,C=r+1;I<C;){var L=I++;b[d+L]=n}for(var B=d+1,T=h.length;B<T;){var R=B++;b[R+r]=h[R]}for(var F=0,X=d-s+1;F<X;){var D=F++;w[D]=o[D]}for(var V=d-c;V<v;){var q=V++;w[q+r]=o[q]}for(var J=0,$=s-c+1;J<$;){var nt=J++;m[nt]=o[d-s+nt]}for(var st=0,rt=0,at=1,et=r+1;at<et;){var ot=at++;st=d-s+ot;for(var O=0,ut=s-ot-c+1;O<ut;){var gt=O++;rt=(n-h[st+gt])/(h[gt+d+1]-h[st+gt]),m[gt]=l.add(l.mul(rt,m[gt+1]),l.mul(1-rt,m[gt]))}w[st]=m[0],w[d+r-ot-c]=m[s-ot-c]}for(var It=st+1,Et=d-c;It<Et;){var Ct=It++;w[Ct]=m[Ct-st]}return new kt(s,b,w)};var At=f.eval.Tess=function(){};p["verb.eval.Tess"]=At,At.__name__=["verb","eval","Tess"],At.rationalCurveRegularSample=function(t,n,r){return At.rationalCurveRegularSampleRange(t,t.knots[0],G.last(t.knots),n,r)},At.rationalCurveRegularSampleRange=function(t,n,r,s,o){s<1&&(s=2);for(var h=[],c=(r-n)/(s-1),v=0,d=0;d<s;){var m=d++;v=n+c*m,o?h.push([v].concat(S.rationalCurvePoint(t,v))):h.push(S.rationalCurvePoint(t,v))}return h},At.rationalCurveAdaptiveSample=function(t,n,r){if(r==null&&(r=!1),n==null&&(n=1e-6),t.degree==1)if(r){for(var s=[],o=0,h=t.controlPoints.length;o<h;){var c=o++;s.push([t.knots[c+1]].concat(S.dehomogenize(t.controlPoints[c])))}return s}else return t.controlPoints.map(S.dehomogenize);return At.rationalCurveAdaptiveSampleRange(t,t.knots[0],G.last(t.knots),n,r)},At.rationalCurveAdaptiveSampleRange=function(t,n,r,s,o){var h=S.rationalCurvePoint(t,n),c=S.rationalCurvePoint(t,r),v=.5+.2*Math.random(),d=n+(r-n)*v,m=S.rationalCurvePoint(t,d),b=l.sub(h,c),w=l.sub(h,m);if(l.dot(b,b)<s&&l.dot(w,w)>s||!ce.threePointsAreFlat(h,m,c,s)){var M=n+(r-n)*.5,P=At.rationalCurveAdaptiveSampleRange(t,n,M,s,o),z=At.rationalCurveAdaptiveSampleRange(t,M,r,s,o);return P.slice(0,-1).concat(z)}else return o?[[n].concat(h),[r].concat(c)]:[h,c]},At.rationalSurfaceNaive=function(t,n,r){n<1&&(n=1),r<1&&(r=1),t.degreeU,t.degreeV,t.controlPoints;for(var s=t.knotsU,o=t.knotsV,h=G.last(s)-s[0],c=G.last(o)-o[0],v=h/n,d=c/r,m=[],b=[],w=[],M=0,P=n+1;M<P;)for(var z=M++,I=0,C=r+1;I<C;){var L=I++,B=z*v,T=L*d;b.push([B,T]);var R=S.rationalSurfaceDerivatives(t,B,T,1),F=R[0][0];m.push(F);var X=l.normalized(l.cross(R[1][0],R[0][1]));w.push(X)}for(var D=[],V=0;V<n;)for(var q=V++,J=0;J<r;){var $=J++,nt=q*(r+1)+$,st=(q+1)*(r+1)+$,rt=st+1,at=nt+1,et=[nt,st,rt],ot=[nt,rt,at];D.push(et),D.push(ot)}return new ye(D,m,w,b)},At.divideRationalSurfaceAdaptive=function(t,n){n==null&&(n=new Ke),n.minDivsU!=null?n.minDivsU=n.minDivsU:n.minDivsU=1,n.minDivsV!=null?n.minDivsU=n.minDivsV:n.minDivsU=1,n.refine!=null?n.refine=n.refine:n.refine=!0;var r=(t.controlPoints.length-1)*2,s=(t.controlPoints[0].length-1)*2,o;n.minDivsU>r?o=n.minDivsU=n.minDivsU:o=n.minDivsU=r;var h;n.minDivsV>s?h=n.minDivsV=n.minDivsV:h=n.minDivsV=s;for(var c=G.last(t.knotsU),v=t.knotsU[0],d=G.last(t.knotsV),m=t.knotsV[0],b=(c-v)/o,w=(d-m)/h,M=[],P=[],z=0,I=h+1;z<I;){for(var C=z++,L=[],B=0,T=o+1;B<T;){var R=B++,F=v+b*R,X=m+w*C,D=S.rationalSurfaceDerivatives(t,F,X,1),V=l.normalized(l.cross(D[0][1],D[1][0]));L.push(new fe(D[0][0],V,[F,X],-1,l.isZero(V)))}P.push(L)}for(var q=0;q<h;)for(var J=q++,$=0;$<o;){var nt=$++,st=[P[h-J-1][nt],P[h-J-1][nt+1],P[h-J][nt+1],P[h-J][nt]];M.push(new Ue(t,st))}if(!n.refine)return M;for(var rt=0;rt<h;)for(var at=rt++,et=0;et<o;){var ot=et++,O=at*o+ot,ut=At.north(O,at,ot,o,h,M),gt=At.east(O,at,ot,o,h,M),It=At.south(O,at,ot,o,h,M),Et=At.west(O,at,ot,o,h,M);M[O].neighbors=[It,gt,ut,Et],M[O].divide(n)}return M},At.north=function(t,n,r,s,o,h){return n==0?null:h[t-s]},At.south=function(t,n,r,s,o,h){return n==o-1?null:h[t+s]},At.east=function(t,n,r,s,o,h){return r==s-1?null:h[t+1]},At.west=function(t,n,r,s,o,h){return r==0?null:h[t-1]},At.triangulateAdaptiveRefinementNodeTree=function(t){for(var n=ye.empty(),r=0;r<t.length;){var s=t[r];++r,s.triangulate(n)}return n},At.rationalSurfaceAdaptive=function(t,n){n!=null?n=n:n=new Ke;var r=At.divideRationalSurfaceAdaptive(t,n);return At.triangulateAdaptiveRefinementNodeTree(r)};var Ke=f.core.AdaptiveRefinementOptions=function(){this.minDivsV=1,this.minDivsU=1,this.refine=!0,this.maxDepth=10,this.minDepth=0,this.normTol=.025};p["verb.eval.AdaptiveRefinementOptions"]=Ke,Ke.__name__=["verb","eval","AdaptiveRefinementOptions"],Ke.prototype={__class__:Ke};var Ue=f.core.AdaptiveRefinementNode=function(t,n,r){if(this.srf=t,r==null?this.neighbors=[null,null,null,null]:this.neighbors=r,this.corners=n,this.corners==null){var s=t.knotsU[0],o=G.last(t.knotsU),h=t.knotsV[0],c=G.last(t.knotsV);this.corners=[fe.fromUv(s,h),fe.fromUv(o,h),fe.fromUv(o,c),fe.fromUv(s,c)]}};p["verb.eval.AdaptiveRefinementNode"]=Ue,Ue.__name__=["verb","eval","AdaptiveRefinementNode"],Ue.prototype={isLeaf:function(){return this.children==null},center:function(){return this.centerPoint!=null?this.centerPoint:this.evalSrf(this.u05,this.v05)},evalCorners:function(){this.u05=(this.corners[0].uv[0]+this.corners[2].uv[0])/2,this.v05=(this.corners[0].uv[1]+this.corners[2].uv[1])/2;for(var t=0;t<4;){var n=t++;if(this.corners[n].point==null){var r=this.corners[n];this.evalSrf(r.uv[0],r.uv[1],r)}}},evalSrf:function(t,n,r){var s=S.rationalSurfaceDerivatives(this.srf,t,n,1),o=s[0][0],h=l.cross(s[0][1],s[1][0]),c=l.isZero(h);return c||(h=l.normalized(h)),r!=null?(r.degen=c,r.point=o,r.normal=h,r):new fe(o,h,[t,n],-1,c)},getEdgeCorners:function(t){if(this.isLeaf())return[this.corners[t]];if(this.horizontal)switch(t){case 0:return this.children[0].getEdgeCorners(0);case 1:return this.children[0].getEdgeCorners(1).concat(this.children[1].getEdgeCorners(1));case 2:return this.children[1].getEdgeCorners(2);case 3:return this.children[1].getEdgeCorners(3).concat(this.children[0].getEdgeCorners(3))}switch(t){case 0:return this.children[0].getEdgeCorners(0).concat(this.children[1].getEdgeCorners(0));case 1:return this.children[1].getEdgeCorners(1);case 2:return this.children[1].getEdgeCorners(2).concat(this.children[0].getEdgeCorners(2));case 3:return this.children[0].getEdgeCorners(3)}return null},getAllCorners:function(t){var n=[this.corners[t]];if(this.neighbors[t]==null)return n;var r=this.neighbors[t].getEdgeCorners((t+2)%4),s=t%2,o=tt.EPSILON,h=this,c=[function(d){return d.uv[0]>h.corners[0].uv[0]+o&&d.uv[0]<h.corners[2].uv[0]-o},function(d){return d.uv[1]>h.corners[0].uv[1]+o&&d.uv[1]<h.corners[2].uv[1]-o}],v=r.filter(c[s]);return v.reverse(),n.concat(v)},midpoint:function(t){if(this.midPoints==null&&(this.midPoints=[null,null,null,null]),this.midPoints[t]!=null)return this.midPoints[t];switch(t){case 0:this.midPoints[0]=this.evalSrf(this.u05,this.corners[0].uv[1]);break;case 1:this.midPoints[1]=this.evalSrf(this.corners[1].uv[0],this.v05);break;case 2:this.midPoints[2]=this.evalSrf(this.u05,this.corners[2].uv[1]);break;case 3:this.midPoints[3]=this.evalSrf(this.corners[0].uv[0],this.v05);break}return this.midPoints[t]},hasBadNormals:function(){return this.corners[0].degen||this.corners[1].degen||this.corners[2].degen||this.corners[3].degen},fixNormals:function(){for(var t=this.corners.length,n=0;n<t;){var r=n++;if(this.corners[r],this.corners[r].degen){var s=this.corners[(r+1)%t],o=this.corners[(r+3)%t];s.degen?this.corners[r].normal=o.normal:this.corners[r].normal=s.normal}}},shouldDivide:function(t,n){if(n<t.minDepth)return!0;if(n>=t.maxDepth)return!1;if(this.hasBadNormals())return this.fixNormals(),!1;if(this.splitVert=l.normSquared(l.sub(this.corners[0].normal,this.corners[1].normal))>t.normTol||l.normSquared(l.sub(this.corners[2].normal,this.corners[3].normal))>t.normTol,this.splitHoriz=l.normSquared(l.sub(this.corners[1].normal,this.corners[2].normal))>t.normTol||l.normSquared(l.sub(this.corners[3].normal,this.corners[0].normal))>t.normTol,this.splitVert||this.splitHoriz)return!0;var r=this.center();return l.normSquared(l.sub(r.normal,this.corners[0].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[1].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[2].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[3].normal))>t.normTol},divide:function(t){t==null&&(t=new Ke),t.normTol==null&&(t.normTol=.085),t.minDepth==null&&(t.minDepth=0),t.maxDepth==null&&(t.maxDepth=10),this._divide(t,0,!0)},_divide:function(t,n,r){if(this.evalCorners(),!!this.shouldDivide(t,n)){if(n++,this.splitVert&&!this.splitHoriz?r=!1:!this.splitVert&&this.splitHoriz&&(r=!0),this.horizontal=r,this.horizontal){var s=[this.corners[0],this.corners[1],this.midpoint(1),this.midpoint(3)],o=[this.midpoint(3),this.midpoint(1),this.corners[2],this.corners[3]];this.children=[new Ue(this.srf,s),new Ue(this.srf,o)],this.children[0].neighbors=[this.neighbors[0],this.neighbors[1],this.children[1],this.neighbors[3]],this.children[1].neighbors=[this.children[0],this.neighbors[1],this.neighbors[2],this.neighbors[3]]}else{var h=[this.corners[0],this.midpoint(0),this.midpoint(2),this.corners[3]],c=[this.midpoint(0),this.corners[1],this.corners[2],this.midpoint(2)];this.children=[new Ue(this.srf,h),new Ue(this.srf,c)],this.children[0].neighbors=[this.neighbors[0],this.children[1],this.neighbors[2],this.neighbors[3]],this.children[1].neighbors=[this.neighbors[0],this.neighbors[1],this.neighbors[2],this.children[0]]}for(var v=0,d=this.children;v<d.length;){var m=d[v];++v,m._divide(t,n,!r)}}},triangulate:function(t){if(t==null&&(t=ye.empty()),this.isLeaf())return this.triangulateLeaf(t);for(var n=0,r=this.children;n<r.length;){var s=r[n];if(++n,s==null)break;s.triangulate(t)}return t},triangulateLeaf:function(t){for(var n=t.points.length,r=[],s=[],o=0,h=0;h<4;){var c=h++,v=this.getAllCorners(c);v.length==2&&(o=c+1);for(var d=0,m=v.length;d<m;){var b=d++;r.push(v[b])}}for(var w=0;w<r.length;){var M=r[w];if(++w,M.id!=-1){s.push(M.id);continue}t.uvs.push(M.uv),t.points.push(M.point),t.normals.push(M.normal),M.id=n,s.push(n),n++}if(r.length==4)return t.faces.push([s[0],s[3],s[1]]),t.faces.push([s[3],s[2],s[1]]),t;if(r.length==5){var P=s.length;return t.faces.push([s[o],s[(o+2)%P],s[(o+1)%P]]),t.faces.push([s[(o+4)%P],s[(o+3)%P],s[o]]),t.faces.push([s[o],s[(o+3)%P],s[(o+2)%P]]),t}var z=this.center();t.uvs.push(z.uv),t.points.push(z.point),t.normals.push(z.normal);for(var I=t.points.length-1,C=0,L=r.length-1;C<r.length;)t.faces.push([I,s[C],s[L]]),L=C++;return t},__class__:Ue};var dt=f.exe.Dispatcher=function(){};p["verb.exe.Dispatcher"]=dt,dt.__name__=["verb","exe","Dispatcher"],dt.init=function(){dt._init||(dt._workerPool=new je(dt.THREADS),dt._init=!0)},dt.dispatchMethod=function(t,n,r){dt.init();var s=new un,o=function(h){s.resolve(h)};return dt._workerPool.addWork(ct.getClassName(t),n,r,o),new Jt(s)};var je=f.exe.WorkerPool=function(t,n){n==null&&(n="verb.js"),t==null&&(t=1),this._callbacks=new jt,this._working=new jt,this._pool=[],this._queue=[];for(var r=0;r<t;){r++;var s;try{s=new Worker(je.basePath+n)}catch(o){o instanceof j&&(o=o.val),s=new Worker(je.basePath+n.substring(0,-3)+".min.js")}this._pool.push(s)}};p["verb.exe.WorkerPool"]=je,je.__name__=["verb","exe","WorkerPool"],je.prototype={addWork:function(t,n,r,s){var o=new tn(t,n,r);this._callbacks.set(o.id,s),this._queue.push(o),this.processQueue()},processQueue:function(){for(var t=this;this._queue.length>0&&this._pool.length>0;){var n=this._queue.shift(),r=[n.id],s=[this._pool.shift()];this._working.h[r[0]]=s[0],s[0].onmessage=function(o,h){return function(c){t._working.remove(h[0]),t._pool.push(o[0]);try{t._callbacks.h.hasOwnProperty(h[0])&&(t._callbacks.h[h[0]](c.data.result),t._callbacks.remove(h[0]))}catch(v){v instanceof j&&(v=v.val),x.log(v)}t.processQueue()}}(s,r),s[0].postMessage(n)}},__class__:je};var tn=function(t,n,r){this.className=t,this.methodName=n,this.args=r,this.id=tn.uuid++};p["verb.exe._WorkerPool.Work"]=tn,tn.__name__=["verb","exe","_WorkerPool","Work"],tn.prototype={__class__:tn};var yn=function(){};p["verb.geom.ICurve"]=yn,yn.__name__=["verb","geom","ICurve"],yn.__interfaces__=[mn],yn.prototype={__class__:yn};var xt=f.geom.NurbsCurve=function(t){this._data=me.isValidNurbsCurveData(t)};p["verb.geom.NurbsCurve"]=xt,xt.__name__=["verb","geom","NurbsCurve"],xt.__interfaces__=[yn],xt.byKnotsControlPointsWeights=function(t,n,r,s){return new xt(new kt(t,n.slice(),S.homogenize1d(r,s)))},xt.byPoints=function(t,n){return n==null&&(n=3),new xt(ht.rationalInterpCurve(t,n))},xt.__super__=Dt,xt.prototype=k(Dt.prototype,{degree:function(){return this._data.degree},knots:function(){return this._data.knots.slice(0)},controlPoints:function(){return S.dehomogenize1d(this._data.controlPoints)},weights:function(){return S.weight1d(this._data.controlPoints)},asNurbs:function(){return new kt(this.degree(),this.knots(),S.homogenize1d(this.controlPoints(),this.weights()))},clone:function(){return new xt(this._data)},domain:function(){return new re(G.first(this._data.knots),G.last(this._data.knots))},transform:function(t){return new xt(vt.rationalCurveTransform(this._data,t))},transformAsync:function(t){return dt.dispatchMethod(vt,"rationalCurveTransform",[this._data,t]).then(function(n){return new xt(n)})},point:function(t){return S.rationalCurvePoint(this._data,t)},pointAsync:function(t){return dt.dispatchMethod(S,"rationalCurvePoint",[this._data,t])},tangent:function(t){return S.rationalCurveTangent(this._data,t)},tangentAsync:function(t){return dt.dispatchMethod(S,"rationalCurveTangent",[this._data,t])},derivatives:function(t,n){return n==null&&(n=1),S.rationalCurveDerivatives(this._data,t,n)},derivativesAsync:function(t,n){return n==null&&(n=1),dt.dispatchMethod(S,"rationalCurveDerivatives",[this._data,t,n])},closestPoint:function(t){return _t.rationalCurveClosestPoint(this._data,t)},closestPointAsync:function(t){return dt.dispatchMethod(_t,"rationalCurveClosestPoint",[this._data,t])},closestParam:function(t){return _t.rationalCurveClosestParam(this._data,t)},closestParamAsync:function(t){return dt.dispatchMethod(_t,"rationalCurveClosestParam",[this._data,t])},length:function(){return _t.rationalCurveArcLength(this._data)},lengthAsync:function(){return dt.dispatchMethod(_t,"rationalCurveArcLength",[this._data])},lengthAtParam:function(t){return _t.rationalCurveArcLength(this._data,t)},lengthAtParamAsync:function(){return dt.dispatchMethod(_t,"rationalCurveArcLength",[this._data])},paramAtLength:function(t,n){return _t.rationalCurveParamAtArcLength(this._data,t,n)},paramAtLengthAsync:function(t,n){return dt.dispatchMethod(_t,"rationalCurveParamAtArcLength",[this._data,t,n])},divideByEqualArcLength:function(t){return Yt.rationalCurveByEqualArcLength(this._data,t)},divideByEqualArcLengthAsync:function(t){return dt.dispatchMethod(Yt,"rationalCurveByEqualArcLength",[this._data,t])},divideByArcLength:function(t){return Yt.rationalCurveByArcLength(this._data,t)},divideByArcLengthAsync:function(t){return dt.dispatchMethod(Yt,"rationalCurveByArcLength",[this._data,t])},split:function(t){return Yt.curveSplit(this._data,t).map(function(n){return new xt(n)})},splitAsync:function(t){return dt.dispatchMethod(Yt,"curveSplit",[this._data,t]).then(function(n){return n.map(function(r){return new xt(r)})})},reverse:function(){return new xt(vt.curveReverse(this._data))},reverseAsync:function(){return dt.dispatchMethod(vt,"curveReverse",[this._data]).then(function(t){return new xt(t)})},tessellate:function(t){return At.rationalCurveAdaptiveSample(this._data,t,!1)},tessellateAsync:function(t){return dt.dispatchMethod(At,"rationalCurveAdaptiveSample",[this._data,t,!1])},__class__:xt});var Xe=f.geom.Arc=function(t,n,r,s,o,h){xt.call(this,ht.arc(t,n,r,s,o,h)),this._center=t,this._xaxis=n,this._yaxis=r,this._radius=s,this._minAngle=o,this._maxAngle=h};p["verb.geom.Arc"]=Xe,Xe.__name__=["verb","geom","Arc"],Xe.__super__=xt,Xe.prototype=k(xt.prototype,{center:function(){return this._center},xaxis:function(){return this._xaxis},yaxis:function(){return this._yaxis},radius:function(){return this._radius},minAngle:function(){return this._minAngle},maxAngle:function(){return this._maxAngle},__class__:Xe});var Xn=f.geom.BezierCurve=function(t,n){xt.call(this,ht.rationalBezierCurve(t,n))};p["verb.geom.BezierCurve"]=Xn,Xn.__name__=["verb","geom","BezierCurve"],Xn.__super__=xt,Xn.prototype=k(xt.prototype,{__class__:Xn});var Wn=f.geom.Circle=function(t,n,r,s){Xe.call(this,t,n,r,s,0,Math.PI*2)};p["verb.geom.Circle"]=Wn,Wn.__name__=["verb","geom","Circle"],Wn.__super__=Xe,Wn.prototype=k(Xe.prototype,{__class__:Wn});var wn=function(){};p["verb.geom.ISurface"]=wn,wn.__name__=["verb","geom","ISurface"],wn.__interfaces__=[mn],wn.prototype={__class__:wn};var pt=f.geom.NurbsSurface=function(t){this._data=me.isValidNurbsSurfaceData(t)};p["verb.geom.NurbsSurface"]=pt,pt.__name__=["verb","geom","NurbsSurface"],pt.__interfaces__=[wn],pt.byKnotsControlPointsWeights=function(t,n,r,s,o,h){return new pt(new Ot(t,n,r,s,S.homogenize2d(o,h)))},pt.byCorners=function(t,n,r,s){return new pt(ht.fourPointSurface(t,n,r,s))},pt.byLoftingCurves=function(t,n){return new pt(ht.loftedSurface(function(r){for(var s,o=[],h=0;h<t.length;){var c=t[h];++h,o.push(c.asNurbs())}return s=o,s}(),n))},pt.__super__=Dt,pt.prototype=k(Dt.prototype,{degreeU:function(){return this._data.degreeU},degreeV:function(){return this._data.degreeV},knotsU:function(){return this._data.knotsU.slice(0)},knotsV:function(){return this._data.knotsV.slice(0)},controlPoints:function(){return S.dehomogenize2d(this._data.controlPoints)},weights:function(){return S.weight2d(this._data.controlPoints)},asNurbs:function(){return new Ot(this.degreeU(),this.degreeV(),this.knotsU(),this.knotsV(),S.homogenize2d(this.controlPoints(),this.weights()))},clone:function(){return new pt(this.asNurbs())},domainU:function(){return new re(G.first(this._data.knotsU),G.last(this._data.knotsU))},domainV:function(){return new re(G.first(this._data.knotsV),G.last(this._data.knotsV))},point:function(t,n){return S.rationalSurfacePoint(this._data,t,n)},pointAsync:function(t,n){return dt.dispatchMethod(S,"rationalSurfacePoint",[this._data,t,n])},normal:function(t,n){return S.rationalSurfaceNormal(this._data,t,n)},normalAsync:function(t,n){return dt.dispatchMethod(S,"rationalSurfaceNormal",[this._data,t,n])},derivatives:function(t,n,r){return r==null&&(r=1),S.rationalSurfaceDerivatives(this._data,t,n,r)},derivativesAsync:function(t,n,r){return r==null&&(r=1),dt.dispatchMethod(S,"rationalSurfaceDerivatives",[this._data,t,n,r])},closestParam:function(t){return _t.rationalSurfaceClosestParam(this._data,t)},closestParamAsync:function(t){return dt.dispatchMethod(_t,"rationalSurfaceClosestParam",[this._data,t])},closestPoint:function(t){return _t.rationalSurfaceClosestPoint(this._data,t)},closestPointAsync:function(t){return dt.dispatchMethod(_t,"rationalSurfaceClosestPoint",[this._data,t])},split:function(t,n){return n==null&&(n=!1),Yt.surfaceSplit(this._data,t,n).map(function(r){return new pt(r)})},splitAsync:function(t,n){return n==null&&(n=!1),dt.dispatchMethod(Yt,"surfaceSplit",[this._data,t,n]).then(function(r){return r.map(function(s){return new pt(s)})})},reverse:function(t){return t==null&&(t=!1),new pt(vt.surfaceReverse(this._data,t))},reverseAsync:function(t){return t==null&&(t=!1),dt.dispatchMethod(vt,"surfaceReverse",[this._data,t]).then(function(n){return new pt(n)})},isocurve:function(t,n){return n==null&&(n=!1),new xt(ht.surfaceIsocurve(this._data,t,n))},isocurveAsync:function(t,n){return n==null&&(n=!1),dt.dispatchMethod(ht,"surfaceIsocurve",[this._data,t,n]).then(function(r){return new xt(r)})},boundaries:function(t){return ht.surfaceBoundaryCurves(this._data).map(function(n){return new xt(n)})},boundariesAsync:function(t){return dt.dispatchMethod(ht,"surfaceBoundaryCurves",[this._data]).then(function(n){return n.map(function(r){return new xt(r)})})},tessellate:function(t){return At.rationalSurfaceAdaptive(this._data,t)},tessellateAsync:function(t){return dt.dispatchMethod(At,"rationalSurfaceAdaptive",[this._data,t])},transform:function(t){return new pt(vt.rationalSurfaceTransform(this._data,t))},transformAsync:function(t){return dt.dispatchMethod(vt,"rationalSurfaceTransform",[this._data,t]).then(function(n){return new pt(n)})},__class__:pt});var Zn=f.geom.ConicalSurface=function(t,n,r,s,o){pt.call(this,ht.conicalSurface(t,n,r,s,o)),this._axis=t,this._xaxis=n,this._base=r,this._height=s,this._radius=o};p["verb.geom.ConicalSurface"]=Zn,Zn.__name__=["verb","geom","ConicalSurface"],Zn.__super__=pt,Zn.prototype=k(pt.prototype,{axis:function(){return this._axis},xaxis:function(){return this._xaxis},base:function(){return this._base},height:function(){return this._height},radius:function(){return this._radius},__class__:Zn});var Yn=f.geom.CylindricalSurface=function(t,n,r,s,o){pt.call(this,ht.cylindricalSurface(t,n,r,s,o)),this._axis=t,this._xaxis=n,this._base=r,this._height=s,this._radius=o};p["verb.geom.CylindricalSurface"]=Yn,Yn.__name__=["verb","geom","CylindricalSurface"],Yn.__super__=pt,Yn.prototype=k(pt.prototype,{axis:function(){return this._axis},xaxis:function(){return this._xaxis},base:function(){return this._base},height:function(){return this._height},radius:function(){return this._radius},__class__:Yn});var We=f.geom.EllipseArc=function(t,n,r,s,o){xt.call(this,ht.ellipseArc(t,n,r,s,o)),this._center=t,this._xaxis=n,this._yaxis=r,this._minAngle=s,this._maxAngle=o};p["verb.geom.EllipseArc"]=We,We.__name__=["verb","geom","EllipseArc"],We.__super__=xt,We.prototype=k(xt.prototype,{center:function(){return this._center},xaxis:function(){return this._xaxis},yaxis:function(){return this._yaxis},minAngle:function(){return this._minAngle},maxAngle:function(){return this._maxAngle},__class__:We});var Hn=f.geom.Ellipse=function(t,n,r){We.call(this,t,n,r,0,Math.PI*2)};p["verb.geom.Ellipse"]=Hn,Hn.__name__=["verb","geom","Ellipse"],Hn.__super__=We,Hn.prototype=k(We.prototype,{__class__:Hn});var Qn=f.geom.ExtrudedSurface=function(t,n){pt.call(this,ht.extrudedSurface(l.normalized(n),l.norm(n),t.asNurbs())),this._profile=t,this._direction=n};p["verb.geom.ExtrudedSurface"]=Qn,Qn.__name__=["verb","geom","ExtrudedSurface"],Qn.__super__=pt,Qn.prototype=k(pt.prototype,{profile:function(){return this._profile},direction:function(){return this._direction},__class__:Qn});var Ze=f.geom.Intersect=function(){};p["verb.geom.Intersect"]=Ze,Ze.__name__=["verb","geom","Intersect"],Ze.curves=function(t,n,r){return r==null&&(r=.001),it.curves(t.asNurbs(),n.asNurbs(),r)},Ze.curvesAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"curves",[t.asNurbs(),n.asNurbs(),r])},Ze.curveAndSurface=function(t,n,r){return r==null&&(r=.001),it.curveAndSurface(t.asNurbs(),n.asNurbs(),r)},Ze.curveAndSurfaceAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"curveAndSurface",[t.asNurbs(),n.asNurbs(),r])},Ze.surfaces=function(t,n,r){return r==null&&(r=.001),it.surfaces(t.asNurbs(),n.asNurbs(),r).map(function(s){return new xt(s)})},Ze.surfacesAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"surfaces",[t.asNurbs(),n.asNurbs(),r]).then(function(s){return s.map(function(o){return new xt(o)})})};var Jn=f.geom.Line=function(t,n){xt.call(this,ht.polyline([t,n])),this._start=t,this._end=n};p["verb.geom.Line"]=Jn,Jn.__name__=["verb","geom","Line"],Jn.__super__=xt,Jn.prototype=k(xt.prototype,{start:function(){return this._start},end:function(){return this._end},__class__:Jn});var $n=f.geom.RevolvedSurface=function(t,n,r,s){pt.call(this,ht.revolvedSurface(t.asNurbs(),n,r,s)),this._profile=t,this._center=n,this._axis=r,this._angle=s};p["verb.geom.RevolvedSurface"]=$n,$n.__name__=["verb","geom","RevolvedSurface"],$n.__super__=pt,$n.prototype=k(pt.prototype,{profile:function(){return this._profile},center:function(){return this._center},axis:function(){return this._center},angle:function(){return this._angle},__class__:$n});var tr=f.geom.SphericalSurface=function(t,n){pt.call(this,ht.sphericalSurface(t,[0,0,1],[1,0,0],n)),this._center=t,this._radius=n};p["verb.geom.SphericalSurface"]=tr,tr.__name__=["verb","geom","SphericalSurface"],tr.__super__=pt,tr.prototype=k(pt.prototype,{center:function(){return this._center},radius:function(){return this._radius},__class__:tr});var er=f.geom.SweptSurface=function(t,n){pt.call(this,ht.rationalTranslationalSurface(t.asNurbs(),n.asNurbs())),this._profile=t,this._rail=n};p["verb.geom.SweptSurface"]=er,er.__name__=["verb","geom","SweptSurface"],er.__super__=pt,er.prototype=k(pt.prototype,{profile:function(){return this._profile},rail:function(){return this._rail},__class__:er});function be(t){return t instanceof Array?function(){return U.iter(t)}:typeof t.iterator=="function"?ve(t,t.iterator):t.iterator}var kr,ji=0;function ve(t,n){if(n==null)return null;n.__id__==null&&(n.__id__=ji++);var r;return t.hx__closures__==null?t.hx__closures__={}:r=t.hx__closures__[n.__id__],r==null&&(r=function(){return r.method.apply(r.scope,arguments)},r.scope=t,r.method=n,t.hx__closures__[n.__id__]=r),r}p.Math=Math,String.prototype.__class__=p.String=String,String.__name__=["String"],p.Array=Array,Array.__name__=["Array"],Date.prototype.__class__=p.Date=Date,Date.__name__=["Date"];var Xi=p.Int={__name__:["Int"]},Wi=p.Dynamic={__name__:["Dynamic"]},gi=p.Float=Number;gi.__name__=["Float"];var pi=p.Bool=Boolean;pi.__ename__=["Bool"];var yi=p.Class={__name__:["Class"]},wi={};Array.prototype.map==null&&(Array.prototype.map=function(t){for(var n=[],r=0,s=this.length;r<s;){var o=r++;n[o]=t(this[o])}return n}),Array.prototype.filter==null&&(Array.prototype.filter=function(t){for(var n=[],r=0,s=this.length;r<s;){var o=r++,h=this[o];t(h)&&n.push(h)}return n});var Ir={},or=A.ArrayBuffer||Zt;or.prototype.slice==null&&(or.prototype.slice=Zt.sliceImpl),A.DataView;var Nr=A.Uint8Array||Ce._new;(function(t,n){if(t.setImmediate)return;var r=1,s={},o=!1,h=t.document,c;function v(B){return s[r]=d.apply(n,B),r++}function d(B){var T=[].slice.call(arguments,1);return function(){typeof B=="function"?B.apply(n,T):new Function(""+B)()}}function m(B){if(o)setTimeout(d(m,B),0);else{var T=s[B];if(T){o=!0;try{T()}finally{b(B),o=!1}}}}function b(B){delete s[B]}function w(){c=function(){var B=v(arguments);return process.nextTick(d(m,B)),B}}function M(){if(t.postMessage&&!t.importScripts){var B=!0,T=t.onmessage;return t.onmessage=function(){B=!1},t.postMessage("","*"),t.onmessage=T,B}}function P(){var B="setImmediate$"+Math.random()+"$",T=function(R){R.source===t&&typeof R.data=="string"&&R.data.indexOf(B)===0&&m(+R.data.slice(B.length))};t.addEventListener?t.addEventListener("message",T,!1):t.attachEvent("onmessage",T),c=function(){var R=v(arguments);return t.postMessage(B+R,"*"),R}}function z(){var B=new MessageChannel;B.port1.onmessage=function(T){var R=T.data;m(R)},c=function(){var T=v(arguments);return B.port2.postMessage(T),T}}function I(){var B=h.documentElement;c=function(){var T=v(arguments),R=h.createElement("script");return R.onreadystatechange=function(){m(T),R.onreadystatechange=null,B.removeChild(R),R=null},B.appendChild(R),T}}function C(){c=function(){var B=v(arguments);return setTimeout(d(m,B),0),B}}var L=Object.getPrototypeOf&&Object.getPrototypeOf(t);L=L&&L.setTimeout?L:t,{}.toString.call(t.process)==="[object process]"?w():M()?P():t.MessageChannel?z():h&&"onreadystatechange"in h.createElement("script")?I():C(),L.setImmediate=c,L.clearImmediate=b})(new Function("return this")()),Xt.USE_CACHE=!1,Xt.USE_ENUM_INDEX=!1,Xt.BASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:",Vt.DEFAULT_RESOLVER=ct,Vt.BASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:",Qt.count=0,Wt.i64tmp=function(t){var n,r=new Rt(0,0);return n=r,n}(),bt.__toStr={}.toString,Ce.BYTES_PER_ELEMENT=1,ft.queue=new H,zt.memo=new jt,tt.TOLERANCE=1e-6,tt.EPSILON=1e-10,tt.VERSION="2.0.0",_t.Tvalues=[[],[],[-.5773502691896257,.5773502691896257],[0,-.7745966692414834,.7745966692414834],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],_t.Cvalues=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],dt.THREADS=1,dt._init=!1,je.basePath="",tn.uuid=0,sr.main()}(typeof console<"u"?console:{log:function(){}},i,typeof y<"u"?y:typeof a<"u"?a:typeof self<"u"?self:this),i})})(fi);var Ki=fi.exports;const ln=Gi(Ki);class zr{constructor(){this.c0=0,this.c1=0,this.c2=0,this.c3=0}init(e,i,a,u){this.c0=e,this.c1=a,this.c2=-3*e+3*i-2*a-u,this.c3=2*e-2*i+a+u}initCatmullRom(e,i,a,u,_){this.init(i,a,_*(a-e),_*(u-i))}initNonuniformCatmullRom(e,i,a,u,_,y,g){let x=(i-e)/_-(a-e)/(_+y)+(a-i)/y,f=(a-i)/y-(u-i)/(y+g)+(u-a)/g;x*=y,f*=y,this.init(i,a,x,f)}calc(e){const i=e*e,a=i*e;return this.c0+this.c1*e+this.c2*i+this.c3*a}}class mi extends Cn{constructor(e=[],i=!1,a="centripetal",u=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new Q,this._px=new zr,this._py=new zr,this._pz=new zr,this._points=e.map(_=>new St(_)),this._closed=i,this._curveType=a,this._tension=u}get points(){return this._points}get closed(){return this._closed}get curveType(){return this._curveType}get tension(){return this._tension}get startPoint(){return this._points.length>0?this._points[0]:new St}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new St}get length(){if(this._points.length<2)return 0;let e=0;for(let i=1;i<this._points.length;i++)e+=this._points[i-1].distanceTo(this._points[i]);return this._closed&&this._points.length>2&&(e+=this._points[this._points.length-1].distanceTo(this._points[0])),e}getPoint(e,i=new St){const a=i,u=this._points,_=u.length;if(_===0)return a.set(0,0,0);if(_===1)return a.copy(u[0]);const y=(_-(this._closed?0:1))*e;let g=Math.floor(y),x=y-g;this._closed?g+=g>0?0:(Math.floor(Math.abs(g)/_)+1)*_:x===0&&g===_-1&&(g=_-2,x=1);let f,A;this._closed||g>0?f=u[(g-1)%_]:(this._tmp.subVectors(u[0],u[1]).add(u[0]),f=new St(this._tmp.x,this._tmp.y,this._tmp.z));const p=u[g%_],N=u[(g+1)%_];if(this._closed||g+2<_?A=u[(g+2)%_]:(this._tmp.subVectors(u[_-1],u[_-2]).add(u[_-1]),A=new St(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const k=this._curveType==="chordal"?.5:.25;let U=Math.pow(f.distanceToSquared(p),k),K=Math.pow(p.distanceToSquared(N),k),H=Math.pow(N.distanceToSquared(A),k);K<1e-4&&(K=1),U<1e-4&&(U=K),H<1e-4&&(H=K),this._px.initNonuniformCatmullRom(f.x,p.x,N.x,A.x,U,K,H),this._py.initNonuniformCatmullRom(f.y,p.y,N.y,A.y,U,K,H),this._pz.initNonuniformCatmullRom(f.z,p.z,N.z,A.z,U,K,H)}else this._curveType==="catmullrom"&&(this._px.initCatmullRom(f.x,p.x,N.x,A.x,this._tension),this._py.initCatmullRom(f.y,p.y,N.y,A.y,this._tension),this._pz.initCatmullRom(f.z,p.z,N.z,A.z,this._tension));return a.set(this._px.calc(x),this._py.calc(x),this._pz.calc(x)),a}getPoints(e){const i=[];for(let a=0;a<=e;a++)i.push(this.getPoint(a/e));return i}setPoints(e){this._points=e.map(i=>new St(i)),this._boundingBoxNeedsUpdate=!0}setClosed(e){this._closed!==e&&(this._closed=e,this._boundingBoxNeedsUpdate=!0)}setCurveType(e){this._curveType=e}setTension(e){this._tension=e}transform(e){return this._points=this._points.map(i=>{const a=new St;return a.copy(i),a.applyMatrix3d(e),a}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new ze;const e=new ze;return this._points.forEach(i=>{e.expandByPoint(i)}),e}}class Je{constructor(e,i,a,u){this._degree=e,this._knots=[...i],this._controlPoints=a.map(_=>({x:_.x,y:_.y,z:_.z})),this._weights=u?[...u]:new Array(a.length).fill(1)}degree(){return this._degree}knots(){return[...this._knots]}controlPoints(){return this._controlPoints.map(e=>({x:e.x,y:e.y,z:e.z}))}weights(){return[...this._weights]}point(e){const i=this._controlPoints.map(a=>[a.x,a.y,a.z]);return Pn(e,this._degree,this._knots,i,this._weights)}length(){const e=this._controlPoints.map(i=>[i.x,i.y,i.z]);return oi(this._degree,this._knots,e,this._weights)}static byKnotsControlPointsWeights(e,i,a,u){return new Je(e,i,a,u)}static byPoints(e,i,a="Uniform"){let u;switch(a){case"Chord":u=si(i,e);break;case"SqrtChord":u=ai(i,e);break;case"Uniform":default:u=ii(i,e.length);break}const _=e.map(g=>({x:g[0],y:g[1],z:g[2]})),y=new Array(_.length).fill(1);return new Je(i,u,_,y)}getParameterRange(){const e=this._knots[this._degree],i=this._knots[this._knots.length-this._degree-1];return{start:e,end:i}}getPoints(e){const i=[],{start:a,end:u}=this.getParameterRange();for(let _=0;_<=e;_++){const y=a+(u-a)*(_/e);i.push(this.point(y))}return i}isClosed(e=1e-6){const{start:i,end:a}=this.getParameterRange(),u=this.point(i),_=this.point(a),y=u[0]-_[0],g=u[1]-_[1],x=u[2]-_[2];return Math.sqrt(y*y+g*g+x*x)<e}static createFitPointsForClosedCurve(e){if(e.length<4)throw new Error("At least 4 points are required for a closed NURBS curve");const i=new mi(e,!0,"centripetal"),a=Math.max(50,e.length*2);return i.getPoints(a)}static createClosedCurve(e,i,a="Chord"){const _=this.createFitPointsForClosedCurve(e).map(y=>[y.x,y.y,y.z]);return Je.byPoints(_,i,a)}}class Sr extends Cn{constructor(e,i,a,u,_){super();const y=arguments.length;if(y<2||y>5)throw te.AcCmErrors.ILLEGAL_PARAMETERS;if(this._degree=3,this._closed=!1,Array.isArray(i)){this._controlPoints=e;let g,x=3,f=!1;if(y>=3&&(Array.isArray(a)?(g=a,y>=4&&(x=u||3),y>=5&&(f=_)):a!==void 0&&(x=a||3,y>=4&&(f=u))),a===void 0&&y>=4&&(x=u||3,y>=5&&(f=_)),this._degree=x,this._closed=f,this._controlPoints.length<this._degree+1)throw te.AcCmErrors.ILLEGAL_PARAMETERS;const A=this.toVerbPoints(this._controlPoints);this._nurbsCurve=ln.geom.NurbsCurve.byKnotsControlPointsWeights(this._degree,i,A,g)}else{if(this._fitPoints=e,this._knotParameterization=i,y>=3&&(this._degree=a||3),y>=4&&(this._closed=u),this._fitPoints.length<this._degree+1)throw te.AcCmErrors.ILLEGAL_PARAMETERS;const g=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(g,this._degree),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}}buildCurve(){if(this._fitPoints&&this._knotParameterization){if(this._closed){const e=Je.createFitPointsForClosedCurve(this._fitPoints),i=this.toNurbsPoints(e);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(i,this._degree)}else{const e=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(e,this._degree)}this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}else if(this._controlPoints)if(this._closed){const e=Je.createFitPointsForClosedCurve(this._controlPoints),i=this.toNurbsPoints(e);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(i,this._degree),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}else{const e=this._nurbsCurve.knots(),i=this._nurbsCurve.weights(),a=this.toVerbPoints(this._controlPoints);this._nurbsCurve=ln.geom.NurbsCurve.byKnotsControlPointsWeights(this._degree,e,a,i)}}setClosed(e){this._closed!==e&&(this._closed=e,this._boundingBoxNeedsUpdate=!0,this.buildCurve())}get degree(){return this._degree}get knotParameterization(){return this._knotParameterization}get startPoint(){const e=this._nurbsCurve.knots(),i=this._nurbsCurve.degree(),a=e[i],u=this._nurbsCurve.point(a);return new St(u[0],u[1],u[2])}get endPoint(){const e=this._nurbsCurve.knots(),i=this._nurbsCurve.degree(),a=e[e.length-i-1],u=this._nurbsCurve.point(a);return new St(u[0],u[1],u[2])}get length(){return this._nurbsCurve.length()}getFitPointAt(e){if(!this._fitPoints)throw new Error("No fit points in this spline");const i=this._fitPoints.length,a=e<0||e>=i?i-1:e,u=this._fitPoints[a];return{x:u.x,y:u.y,z:u.z||0}}getControlPointAt(e){const i=this._controlPoints.length,a=e<0||e>=i?i-1:e;return this._controlPoints[a]}getPoints(e=100){const i=this._nurbsCurve,a=[],u=i.knots(),_=this._nurbsCurve.degree(),y=u[_],g=u[u.length-_-1],x=(g-y)/(e-1);for(let f=0;f<e;f++){const A=f===e-1?g:y+f*x,p=i.point(A);a.push(new St(p[0],p[1],p[2]))}return a}getCurvePoints(e,i){const a=[],u=e.knots(),_=u[3],g=(u[u.length-4]-_)/(i-1);for(let x=0;x<i;x++){const f=_+x*g;a.push(e.point(f))}return a}calculateBoundingBox(){const e=this.getPoints(100);return new ze().setFromPoints(e)}get closed(){return this._closed}set closed(e){this.setClosed(e)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}toNurbsPoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]=[a.x,a.y,a.z||0]}),i}toVerbPoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]=[a.x,a.y,a.z||0]}),i}toGePoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]={x:a[0],y:a[1],z:a[2]}}),i}static createClosedSpline(e,i="Uniform",a=3){if(e.length<a+1)throw new Error(`At least ${a+1} points are required for a degree ${a} closed spline`);return new Sr(e,i,a,!0)}}Y.AcGeArea2d=Di,Y.AcGeBox2d=de,Y.AcGeBox3d=ze,Y.AcGeCatmullRomCurve3d=mi,Y.AcGeCircArc2d=Sn,Y.AcGeCircArc3d=In,Y.AcGeCurve2d=hn,Y.AcGeEllipseArc2d=Mr,Y.AcGeEllipseArc3d=Pr,Y.AcGeEuler=wr,Y.AcGeGeometryUtil=ri,Y.AcGeLine2d=Ar,Y.AcGeLine3d=kn,Y.AcGeLoop2d=qi,Y.AcGeMathUtil=Ut,Y.AcGeMatrix2d=sn,Y.AcGeMatrix3d=an,Y.AcGeNurbsCurve=Je,Y.AcGePlane=zn,Y.AcGePoint2d=Lt,Y.AcGePoint3d=St,Y.AcGePolyline2d=Oi,Y.AcGeQuaternion=An,Y.AcGeShape2d=br,Y.AcGeSpline3d=Sr,Y.AcGeTol=fr,Y.AcGeVector2d=Bt,Y.AcGeVector3d=Q,Y.DEFAULT_TOL=mr,Y.DEG2RAD=hr,Y.FLOAT_TOL=He,Y.ORIGIN_POINT_2D=Bi,Y.ORIGIN_POINT_3D=dr,Y.RAD2DEG=lr,Y.TAU=Kt,Y.basisFunction=nr,Y.calculateCurveLength=oi,Y.ceilPowerOfTwo=Qr,Y.clamp=Be,Y.damp=Fr,Y.degToRad=Zr,Y.euclideanModulo=ur,Y.evaluateNurbsPoint=Pn,Y.floorPowerOfTwo=Jr,Y.generateChordKnots=si,Y.generateSqrtChordKnots=ai,Y.generateUUID=Rr,Y.generateUniformKnots=ii,Y.intPartLength=vr,Y.interpolateControlPoints=Li,Y.inverseLerp=Dr,Y.isBetween=$r,Y.isBetweenAngle=ti,Y.isPointInPolygon=gr,Y.isPolygonIntersect=ni,Y.isPowerOfTwo=Hr,Y.lerp=cr,Y.mapLinear=Vr,Y.normalizeAngle=Mn,Y.pingpong=Or,Y.radToDeg=Yr,Y.randFloat=jr,Y.randFloatSpread=Xr,Y.randInt=Kr,Y.relativeEps=ei,Y.seededRandom=Wr,Y.smootherstep=Gr,Y.smoothstep=qr,Object.defineProperty(Y,Symbol.toStringTag,{value:"Module"})});
1
+ (function(Y,te){typeof exports=="object"&&typeof module<"u"?te(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],te):(Y=typeof globalThis<"u"?globalThis:Y||self,te(Y["geometry-engine"]={},Y.common))})(this,function(Y,te){"use strict";const Ht=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let Ur=1234567;const hr=Math.PI/180,lr=180/Math.PI;function Rr(){const N=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0,a=Math.random()*4294967295|0;return(Ht[N&255]+Ht[N>>8&255]+Ht[N>>16&255]+Ht[N>>24&255]+"-"+Ht[e&255]+Ht[e>>8&255]+"-"+Ht[e>>16&15|64]+Ht[e>>24&255]+"-"+Ht[i&63|128]+Ht[i>>8&255]+"-"+Ht[i>>16&255]+Ht[i>>24&255]+Ht[a&255]+Ht[a>>8&255]+Ht[a>>16&255]+Ht[a>>24&255]).toLowerCase()}function Be(N,e,i){return Math.max(e,Math.min(i,N))}function ur(N,e){return(N%e+e)%e}function Vr(N,e,i,a,u){return a+(N-e)*(u-a)/(i-e)}function Dr(N,e,i){return N!==e?(i-N)/(e-N):0}function cr(N,e,i){return(1-i)*N+i*e}function Fr(N,e,i,a){return cr(N,e,1-Math.exp(-i*a))}function Or(N,e=1){return e-Math.abs(ur(N,e*2)-e)}function qr(N,e,i){return N<=e?0:N>=i?1:(N=(N-e)/(i-e),N*N*(3-2*N))}function Gr(N,e,i){return N<=e?0:N>=i?1:(N=(N-e)/(i-e),N*N*N*(N*(N*6-15)+10))}function Kr(N,e){return N+Math.floor(Math.random()*(e-N+1))}function jr(N,e){return N+Math.random()*(e-N)}function Xr(N){return N*(.5-Math.random())}function Wr(N){N!==void 0&&(Ur=N);let e=Ur+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function Zr(N){return N*hr}function Yr(N){return N*lr}function Hr(N){return(N&N-1)===0&&N!==0}function Qr(N){return Math.pow(2,Math.ceil(Math.log(N)/Math.LN2))}function Jr(N){return Math.pow(2,Math.floor(Math.log(N)/Math.LN2))}function An(N){const e=Math.PI*2;return(N%e+e)%e}function $r(N,e,i){return N>e&&N<i||N>i&&N<e}function ti(N,e,i,a=!1){return N=An(N),e=An(e),i=An(i),a?e>i?N<=e&&N>=i:N<=e||N>=i:e<i?N>=e&&N<=i:N>=e||N<=i}function vr(N){return N=Math.abs(N),N<1?0:Math.ceil(Math.log10(Math.abs(N)+1))}function ei(N,e=1e-7){const i=vr(N);return Math.max(Math.pow(10,i)*e,e)}const kt={DEG2RAD:hr,RAD2DEG:lr,generateUUID:Rr,clamp:Be,euclideanModulo:ur,mapLinear:Vr,inverseLerp:Dr,lerp:cr,damp:Fr,pingpong:Or,smoothstep:qr,smootherstep:Gr,randInt:Kr,randFloat:jr,randFloatSpread:Xr,seededRandom:Wr,degToRad:Zr,radToDeg:Yr,isPowerOfTwo:Hr,ceilPowerOfTwo:Qr,floorPowerOfTwo:Jr,normalizeAngle:An,isBetween:$r,isBetweenAngle:ti,intPartLength:vr,relativeEps:ei},En=class En{constructor(e,i){this.x=0,this.y=0;const a=+(e!==void 0)+ +(i!==void 0);if(a!==0){if(a===1&&e instanceof Array){this.x=e[0],this.y=e[1];return}if(a===1){const{x:u,y:_}=e;this.x=u,this.y=_;return}if(a===2){this.x=e,this.y=i;return}throw te.AcCmErrors.ILLEGAL_PARAMETERS}}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,i){return this.x=e,this.y=i,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,i){switch(e){case 0:this.x=i;break;case 1:this.y=i;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new En(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,i){return this.x=e.x+i.x,this.y=e.y+i.y,this}addScaledVector(e,i){return this.x+=e.x*i,this.y+=e.y*i,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,i){return this.x=e.x-i.x,this.y=e.y-i.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix2d(e){const i=this.x,a=this.y,u=e.elements;return this.x=u[0]*i+u[3]*a+u[6],this.y=u[1]*i+u[4]*a+u[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,i){return this.x=Math.max(e.x,Math.min(i.x,this.x)),this.y=Math.max(e.y,Math.min(i.y,this.y)),this}clampScalar(e,i){return this.x=Math.max(e,Math.min(i,this.x)),this.y=Math.max(e,Math.min(i,this.y)),this}clampLength(e,i){const a=this.length();return this.divideScalar(a||1).multiplyScalar(Math.max(e,Math.min(i,a)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const i=Math.sqrt(this.lengthSq()*e.lengthSq());if(i===0)return Math.PI/2;const a=this.dot(e)/i;return Math.acos(Math.max(-1,Math.min(1,a)))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const i=this.x-e.x,a=this.y-e.y;return i*i+a*a}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,i){return this.x+=(e.x-this.x)*i,this.y+=(e.y-this.y)*i,this}lerpVectors(e,i,a){return this.x=e.x+(i.x-e.x)*a,this.y=e.y+(i.y-e.y)*a,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,i=0){return this.x=e[i],this.y=e[i+1],this}toArray(e=[],i=0){return e[i]=this.x,e[i+1]=this.y,e}rotateAround(e,i){const a=Math.cos(i),u=Math.sin(i),_=this.x-e.x,g=this.y-e.y;return this.x=_*a-g*u+e.x,this.y=_*u+g*a+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(e=1e-7){return Math.min(kt.relativeEps(this.x,e),kt.relativeEps(this.y,e))}*[Symbol.iterator](){yield this.x,yield this.y}};En.EMPTY=Object.freeze(new En(0,0));let Lt=En;const Nn=class Nn{constructor(e,i,a,u,_,g,y,x,f){this.elements=[1,0,0,0,1,0,0,0,1],e!=null&&i!=null&&a!=null&&u!=null&&_!=null&&g!=null&&y!=null&&x!=null&&f!=null&&this.set(e,i,a,u,_,g,y,x,f)}set(e,i,a,u,_,g,y,x,f){const P=this.elements;return P[0]=e,P[1]=u,P[2]=y,P[3]=i,P[4]=_,P[5]=x,P[6]=a,P[7]=g,P[8]=f,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const i=this.elements,a=e.elements;return i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[8]=a[8],this}extractBasis(e,i,a){return e.setFromMatrix3Column(this,0),i.setFromMatrix3Column(this,1),a.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const i=e.elements;return this.set(i[0],i[4],i[8],i[1],i[5],i[9],i[2],i[6],i[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,i){const a=e.elements,u=i.elements,_=this.elements,g=a[0],y=a[3],x=a[6],f=a[1],P=a[4],p=a[7],E=a[2],k=a[5],U=a[8],K=u[0],H=u[3],W=u[6],wt=u[1],Mt=u[4],mt=u[7],Z=u[2],ct=u[5],lt=u[8];return _[0]=g*K+y*wt+x*Z,_[3]=g*H+y*Mt+x*ct,_[6]=g*W+y*mt+x*lt,_[1]=f*K+P*wt+p*Z,_[4]=f*H+P*Mt+p*ct,_[7]=f*W+P*mt+p*lt,_[2]=E*K+k*wt+U*Z,_[5]=E*H+k*Mt+U*ct,_[8]=E*W+k*mt+U*lt,this}multiplyScalar(e){const i=this.elements;return i[0]*=e,i[3]*=e,i[6]*=e,i[1]*=e,i[4]*=e,i[7]*=e,i[2]*=e,i[5]*=e,i[8]*=e,this}determinant(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],g=e[4],y=e[5],x=e[6],f=e[7],P=e[8];return i*g*P-i*y*f-a*_*P+a*y*x+u*_*f-u*g*x}invert(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],g=e[4],y=e[5],x=e[6],f=e[7],P=e[8],p=P*g-y*f,E=y*x-P*_,k=f*_-g*x,U=i*p+a*E+u*k;if(U===0)return this.set(0,0,0,0,0,0,0,0,0);const K=1/U;return e[0]=p*K,e[1]=(u*f-P*a)*K,e[2]=(y*a-u*g)*K,e[3]=E*K,e[4]=(P*i-u*x)*K,e[5]=(u*_-y*i)*K,e[6]=k*K,e[7]=(a*x-f*i)*K,e[8]=(g*i-a*_)*K,this}transpose(){let e;const i=this.elements;return e=i[1],i[1]=i[3],i[3]=e,e=i[2],i[2]=i[6],i[6]=e,e=i[5],i[5]=i[7],i[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const i=this.elements;return e.elements[0]=i[0],e.elements[1]=i[3],e.elements[2]=i[6],e.elements[3]=i[1],e.elements[4]=i[4],e.elements[5]=i[7],e.elements[6]=i[2],e.elements[7]=i[5],e.elements[8]=i[8],this}setUvTransform(e,i,a,u,_,g,y){const x=Math.cos(_),f=Math.sin(_);return this.set(a*x,a*f,-a*(x*g+f*y)+g+e,-u*f,u*x,-u*(-f*g+x*y)+y+i,0,0,1),this}scale(e,i){return this.premultiply(_r.makeScale(e,i)),this}rotate(e){return this.premultiply(_r.makeRotation(-e)),this}translate(e,i){return this.premultiply(_r.makeTranslation(e,i)),this}makeTranslation(e,i){return e instanceof Lt?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,i,0,0,1),this}makeRotation(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,-a,0,a,i,0,0,0,1),this}makeScale(e,i){return this.set(e,0,0,0,i,0,0,0,1),this}equals(e){const i=this.elements,a=e.elements;for(let u=0;u<9;u++)if(i[u]!==a[u])return!1;return!0}fromArray(e,i=0){for(let a=0;a<9;a++)this.elements[a]=e[a+i];return this}toArray(e=[],i=0){const a=this.elements;return e[i]=a[0],e[i+1]=a[1],e[i+2]=a[2],e[i+3]=a[3],e[i+4]=a[4],e[i+5]=a[5],e[i+6]=a[6],e[i+7]=a[7],e[i+8]=a[8],e}clone(){return new Nn().fromArray(this.elements)}};Nn.IDENTITY=Object.freeze(new Nn);let sn=Nn;const _r=new sn,He=1e-6,Kt=2*Math.PI,Bi={x:0,y:0},dr={x:0,y:0,z:0};class fr{constructor(){this.equalPointTol=He,this.equalVectorTol=He}equalPoint2d(e,i){return new Lt(e).sub(i).length()<this.equalPointTol}equalPoint3d(e,i){return new Q(e).sub(i).length()<this.equalPointTol}static equalToZero(e,i=He){return e<i&&e>-i}static equal(e,i,a=He){return Math.abs(e-i)<a}static great(e,i,a=He){return e-i>a}static less(e,i,a=He){return e-i<a}}const mr=new fr;function gr(N,e,i=!1){const a=N.x,u=N.y;let _=!1;const g=e.length;for(let y=0,x=g-1;y<g;x=y++){const f=e[y].x,P=e[y].y,p=e[x].x,E=e[x].y;let k=P>u!=E>u;i&&(k=P>=u!=E>=u),k&&a<(p-f)*(u-P)/(E-P)+f&&(_=!_)}return _}function ni(N,e){if(N.length===0||e.length===0)return!1;const i=new de().setFromPoints(N),a=new de().setFromPoints(e);if(!i.intersectsBox(a))return!1;for(let u=0;u<N.length;){if(gr(N[u],e,!0))return!0;u<N.length-1&&mr.equalPoint2d(N[u+1],N[u])&&++u,++u}return!1}const ri={isPointInPolygon:gr,isPolygonIntersect:ni};function ii(N,e){const i=[],a=e-1,u=N;for(let _=0;_<=u;_++)i.push(0);for(let _=1;_<=a-u;_++)i.push(_);for(let _=0;_<=u;_++)i.push(a-u+1);return i}function si(N,e){const i=e.length-1,a=N,u=[0];let _=0;for(let y=1;y<=i;y++){const x=e[y][0]-e[y-1][0],f=e[y][1]-e[y-1][1],P=e[y][2]-e[y-1][2],p=Math.sqrt(x*x+f*f+P*P);_+=p,u.push(_)}const g=[];for(let y=0;y<=a;y++)g.push(0);for(let y=1;y<=i-a;y++){const x=u[y]/_;g.push(x*(i-a+1))}for(let y=0;y<=a;y++)g.push(i-a+1);return g}function ai(N,e){const i=e.length-1,a=N,u=[0];let _=0;for(let y=1;y<=i;y++){const x=e[y][0]-e[y-1][0],f=e[y][1]-e[y-1][1],P=e[y][2]-e[y-1][2],p=Math.sqrt(x*x+f*f+P*P),E=Math.sqrt(p);_+=E,u.push(_)}const g=[];for(let y=0;y<=a;y++)g.push(0);for(let y=1;y<=i-a;y++){const x=u[y]/_;g.push(x*(i-a+1))}for(let y=0;y<=a;y++)g.push(i-a+1);return g}function nr(N,e,i,a){if(e===0)return i>=a[N]&&i<a[N+1]?1:0;const u=a[N+e]-a[N],_=a[N+e+1]-a[N+1],g=u>1e-10?(i-a[N])/u:0,y=_>1e-10?(a[N+e+1]-i)/_:0;return g*nr(N,e-1,i,a)+y*nr(N+1,e-1,i,a)}function Mn(N,e,i,a,u){const _=a.length-1,g=e;if(N=Math.max(i[g],Math.min(i[_+1],N)),Math.abs(N-i[_+1])<1e-8)return[...a[_]];if(Math.abs(N-i[g])<1e-8)return[...a[0]];const y=[0,0,0];let x=0;for(let f=0;f<=_;f++){const P=nr(f,g,N,i),p=u[f]*P;y[0]+=a[f][0]*p,y[1]+=a[f][1]*p,y[2]+=a[f][2]*p,x+=p}if(x<1e-10){const f=i[i.length-g-1];if(Math.abs(N-f)<1e-8)return[...a[_]];if(Math.abs(N-i[g])<1e-8)return[...a[0]]}return x>1e-10&&(y[0]/=x,y[1]/=x,y[2]/=x),y}function oi(N,e,i,a){const u=N,_=e[u],g=e[e.length-u-1];let y=0;const x=1e3,f=(g-_)/x;let P=Mn(_,N,e,i,a);for(let K=1;K<=x;K++){const H=_+K*f,W=Mn(H,N,e,i,a),wt=W[0]-P[0],Mt=W[1]-P[1],mt=W[2]-P[2];y+=Math.sqrt(wt*wt+Mt*Mt+mt*mt),P=W}const p=Mn(g,N,e,i,a),E=p[0]-P[0],k=p[1]-P[1],U=p[2]-P[2];return y+=Math.sqrt(E*E+k*k+U*U),y}function Li(N){return N.map(e=>[...e])}class Pn{constructor(e=0,i=0,a=0,u=1){this._x=e,this._y=i,this._z=a,this._w=u}static slerpFlat(e,i,a,u,_,g,y){let x=a[u+0],f=a[u+1],P=a[u+2],p=a[u+3];const E=_[g+0],k=_[g+1],U=_[g+2],K=_[g+3];if(y===0){e[i+0]=x,e[i+1]=f,e[i+2]=P,e[i+3]=p;return}if(y===1){e[i+0]=E,e[i+1]=k,e[i+2]=U,e[i+3]=K;return}if(p!==K||x!==E||f!==k||P!==U){let H=1-y;const W=x*E+f*k+P*U+p*K,wt=W>=0?1:-1,Mt=1-W*W;if(Mt>Number.EPSILON){const Z=Math.sqrt(Mt),ct=Math.atan2(Z,W*wt);H=Math.sin(H*ct)/Z,y=Math.sin(y*ct)/Z}const mt=y*wt;if(x=x*H+E*mt,f=f*H+k*mt,P=P*H+U*mt,p=p*H+K*mt,H===1-y){const Z=1/Math.sqrt(x*x+f*f+P*P+p*p);x*=Z,f*=Z,P*=Z,p*=Z}}e[i]=x,e[i+1]=f,e[i+2]=P,e[i+3]=p}static multiplyQuaternionsFlat(e,i,a,u,_,g){const y=a[u],x=a[u+1],f=a[u+2],P=a[u+3],p=_[g],E=_[g+1],k=_[g+2],U=_[g+3];return e[i]=y*U+P*p+x*k-f*E,e[i+1]=x*U+P*E+f*p-y*k,e[i+2]=f*U+P*k+y*E-x*p,e[i+3]=P*U-y*p-x*E-f*k,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,i,a,u){return this._x=e,this._y=i,this._z=a,this._w=u,this._onChangeCallback(),this}clone(){return new Pn(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,i=!0){const a=e.x,u=e.y,_=e.z,g=e.order,y=Math.cos,x=Math.sin,f=y(a/2),P=y(u/2),p=y(_/2),E=x(a/2),k=x(u/2),U=x(_/2);switch(g){case"XYZ":this._x=E*P*p+f*k*U,this._y=f*k*p-E*P*U,this._z=f*P*U+E*k*p,this._w=f*P*p-E*k*U;break;case"YXZ":this._x=E*P*p+f*k*U,this._y=f*k*p-E*P*U,this._z=f*P*U-E*k*p,this._w=f*P*p+E*k*U;break;case"ZXY":this._x=E*P*p-f*k*U,this._y=f*k*p+E*P*U,this._z=f*P*U+E*k*p,this._w=f*P*p-E*k*U;break;case"ZYX":this._x=E*P*p-f*k*U,this._y=f*k*p+E*P*U,this._z=f*P*U-E*k*p,this._w=f*P*p+E*k*U;break;case"YZX":this._x=E*P*p+f*k*U,this._y=f*k*p+E*P*U,this._z=f*P*U-E*k*p,this._w=f*P*p-E*k*U;break;case"XZY":this._x=E*P*p-f*k*U,this._y=f*k*p-E*P*U,this._z=f*P*U+E*k*p,this._w=f*P*p+E*k*U;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+g)}return i===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,i){const a=i/2,u=Math.sin(a);return this._x=e.x*u,this._y=e.y*u,this._z=e.z*u,this._w=Math.cos(a),this._onChangeCallback(),this}setFromRotationMatrix(e){const i=e.elements,a=i[0],u=i[4],_=i[8],g=i[1],y=i[5],x=i[9],f=i[2],P=i[6],p=i[10],E=a+y+p;if(E>0){const k=.5/Math.sqrt(E+1);this._w=.25/k,this._x=(P-x)*k,this._y=(_-f)*k,this._z=(g-u)*k}else if(a>y&&a>p){const k=2*Math.sqrt(1+a-y-p);this._w=(P-x)/k,this._x=.25*k,this._y=(u+g)/k,this._z=(_+f)/k}else if(y>p){const k=2*Math.sqrt(1+y-a-p);this._w=(_-f)/k,this._x=(u+g)/k,this._y=.25*k,this._z=(x+P)/k}else{const k=2*Math.sqrt(1+p-a-y);this._w=(g-u)/k,this._x=(_+f)/k,this._y=(x+P)/k,this._z=.25*k}return this._onChangeCallback(),this}setFromUnitVectors(e,i){let a=e.dot(i)+1;return a<Number.EPSILON?(a=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=a):(this._x=0,this._y=-e.z,this._z=e.y,this._w=a)):(this._x=e.y*i.z-e.z*i.y,this._y=e.z*i.x-e.x*i.z,this._z=e.x*i.y-e.y*i.x,this._w=a),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Be(this.dot(e),-1,1)))}rotateTowards(e,i){const a=this.angleTo(e);if(a===0)return this;const u=Math.min(1,i/a);return this.slerp(e,u),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,i){const a=e._x,u=e._y,_=e._z,g=e._w,y=i._x,x=i._y,f=i._z,P=i._w;return this._x=a*P+g*y+u*f-_*x,this._y=u*P+g*x+_*y-a*f,this._z=_*P+g*f+a*x-u*y,this._w=g*P-a*y-u*x-_*f,this._onChangeCallback(),this}slerp(e,i){if(i===0)return this;if(i===1)return this.copy(e);const a=this._x,u=this._y,_=this._z,g=this._w;let y=g*e._w+a*e._x+u*e._y+_*e._z;if(y<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,y=-y):this.copy(e),y>=1)return this._w=g,this._x=a,this._y=u,this._z=_,this;const x=1-y*y;if(x<=Number.EPSILON){const k=1-i;return this._w=k*g+i*this._w,this._x=k*a+i*this._x,this._y=k*u+i*this._y,this._z=k*_+i*this._z,this.normalize(),this}const f=Math.sqrt(x),P=Math.atan2(f,y),p=Math.sin((1-i)*P)/f,E=Math.sin(i*P)/f;return this._w=g*p+this._w*E,this._x=a*p+this._x*E,this._y=u*p+this._y*E,this._z=_*p+this._z*E,this._onChangeCallback(),this}slerpQuaternions(e,i,a){return this.copy(e).slerp(i,a)}random(){const e=2*Math.PI*Math.random(),i=2*Math.PI*Math.random(),a=Math.random(),u=Math.sqrt(1-a),_=Math.sqrt(a);return this.set(u*Math.sin(e),u*Math.cos(e),_*Math.sin(i),_*Math.cos(i))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,i=0){return this._x=e[i],this._y=e[i+1],this._z=e[i+2],this._w=e[i+3],this._onChangeCallback(),this}toArray(e=[],i=0){return e[i]=this._x,e[i+1]=this._y,e[i+2]=this._z,e[i+3]=this._w,e}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const ee=class ee{constructor(e,i,a){this.x=0,this.y=0,this.z=0;const u=+(e!==void 0)+ +(i!==void 0)+ +(a!==void 0);if(u!==0){if(u===1&&e instanceof Array){this.x=e[0],this.y=e[1],this.z=e[2];return}if(u===1){const{x:_,y:g,z:y}=e;this.x=_,this.y=g,this.z=y||0;return}if(u===3){this.x=e,this.y=i,this.z=a;return}throw te.AcCmErrors.ILLEGAL_PARAMETERS}}set(e,i,a){return a===void 0&&(a=this.z),this.x=e,this.y=i,this.z=a,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,i){switch(e){case 0:this.x=i;break;case 1:this.y=i;break;case 2:this.z=i;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new ee(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z||0,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z||0,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,i){return this.x=e.x+i.x,this.y=e.y+i.y,this.z=e.z+i.z,this}addScaledVector(e,i){return this.x+=e.x*i,this.y+=e.y*i,this.z+=e.z*i,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,i){return this.x=e.x-i.x,this.y=e.y-i.y,this.z=e.z-i.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,i){return this.x=e.x*i.x,this.y=e.y*i.y,this.z=e.z*i.z,this}applyEuler(e){return this.applyQuaternion(hi.setFromEuler(e))}applyAxisAngle(e,i){return this.applyQuaternion(hi.setFromAxisAngle(e,i))}applyMatrix3(e){const i=this.x,a=this.y,u=this.z,_=e.elements;return this.x=_[0]*i+_[3]*a+_[6]*u,this.y=_[1]*i+_[4]*a+_[7]*u,this.z=_[2]*i+_[5]*a+_[8]*u,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix3d(e){const i=this.x,a=this.y,u=this.z,_=e.elements,g=1/(_[3]*i+_[7]*a+_[11]*u+_[15]);return this.x=(_[0]*i+_[4]*a+_[8]*u+_[12])*g,this.y=(_[1]*i+_[5]*a+_[9]*u+_[13])*g,this.z=(_[2]*i+_[6]*a+_[10]*u+_[14])*g,this}applyQuaternion(e){const i=this.x,a=this.y,u=this.z,_=e.x,g=e.y,y=e.z,x=e.w,f=2*(g*u-y*a),P=2*(y*i-_*u),p=2*(_*a-g*i);return this.x=i+x*f+g*p-y*P,this.y=a+x*P+y*f-_*p,this.z=u+x*p+_*P-g*f,this}transformDirection(e){const i=this.x,a=this.y,u=this.z,_=e.elements;return this.x=_[0]*i+_[4]*a+_[8]*u,this.y=_[1]*i+_[5]*a+_[9]*u,this.z=_[2]*i+_[6]*a+_[10]*u,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,i){return this.x=Math.max(e.x,Math.min(i.x,this.x)),this.y=Math.max(e.y,Math.min(i.y,this.y)),this.z=Math.max(e.z,Math.min(i.z,this.z)),this}clampScalar(e,i){return this.x=Math.max(e,Math.min(i,this.x)),this.y=Math.max(e,Math.min(i,this.y)),this.z=Math.max(e,Math.min(i,this.z)),this}clampLength(e,i){const a=this.length();return this.divideScalar(a||1).multiplyScalar(Math.max(e,Math.min(i,a)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}isParallelTo(e){const i=this.dot(e),a=this.length(),u=e.length();return Math.abs(i)===a*u}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,i){return this.x+=(e.x-this.x)*i,this.y+=(e.y-this.y)*i,this.z+=(e.z-this.z)*i,this}lerpVectors(e,i,a){return this.x=e.x+(i.x-e.x)*a,this.y=e.y+(i.y-e.y)*a,this.z=e.z+(i.z-e.z)*a,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,i){const a=e.x,u=e.y,_=e.z,g=i.x,y=i.y,x=i.z;return this.x=u*x-_*y,this.y=_*g-a*x,this.z=a*y-u*g,this}projectOnVector(e){const i=e.lengthSq();if(i===0)return this.set(0,0,0);const a=e.dot(this)/i;return this.copy(e).multiplyScalar(a)}projectOnPlane(e){return pr.copy(this).projectOnVector(e),this.sub(pr)}reflect(e){return this.sub(pr.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const i=Math.sqrt(this.lengthSq()*e.lengthSq());if(i===0)return Math.PI/2;const a=this.dot(e)/i;return Math.acos(Math.max(-1,Math.min(1,a)))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const i=this.x-e.x,a=this.y-e.y,u=this.z-e.z;return i*i+a*a+u*u}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromMatrixPosition(e){const i=e.elements;return this.x=i[12],this.y=i[13],this.z=i[14],this}setFromMatrixScale(e){const i=this.setFromMatrixColumn(e,0).length(),a=this.setFromMatrixColumn(e,1).length(),u=this.setFromMatrixColumn(e,2).length();return this.x=i,this.y=a,this.z=u,this}setFromMatrixColumn(e,i){return this.fromArray(e.elements,i*4)}setFromMatrix3Column(e,i){return this.fromArray(e.elements,i*3)}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,i=0){return this.x=e[i],this.y=e[i+1],this.z=e[i+2],this}toArray(e=[],i=0){return e[i]=this.x,e[i+1]=this.y,e[i+2]=this.z,e}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,i=Math.random()*2-1,a=Math.sqrt(1-i*i);return this.x=a*Math.cos(e),this.y=i,this.z=a*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};ee.X_AXIS=Object.freeze(new ee(1,0,0)),ee.NEGATIVE_X_AXIS=Object.freeze(new ee(-1,0,0)),ee.Y_AXIS=Object.freeze(new ee(0,1,0)),ee.NEGATIVE_Y_AXIS=Object.freeze(new ee(0,-1,0)),ee.Z_AXIS=Object.freeze(new ee(0,0,1)),ee.NEGATIVE_Z_AXIS=Object.freeze(new ee(0,0,-1));let Q=ee;const pr=new Q,hi=new Pn,Bn=class Bn{constructor(e,i,a,u,_,g,y,x,f,P,p,E,k,U,K,H){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!=null&&i!=null&&a!=null&&u!=null&&_!=null&&g!=null&&y!=null&&x!=null&&f!=null&&P!=null&&p!=null&&E!=null&&k!=null&&U!=null&&K!=null&&H!=null&&this.set(e,i,a,u,_,g,y,x,f,P,p,E,k,U,K,H)}set(e,i,a,u,_,g,y,x,f,P,p,E,k,U,K,H){const W=this.elements;return W[0]=e,W[4]=i,W[8]=a,W[12]=u,W[1]=_,W[5]=g,W[9]=y,W[13]=x,W[2]=f,W[6]=P,W[10]=p,W[14]=E,W[3]=k,W[7]=U,W[11]=K,W[15]=H,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Bn().fromArray(this.elements)}copy(e){const i=this.elements,a=e.elements;return i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[8]=a[8],i[9]=a[9],i[10]=a[10],i[11]=a[11],i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15],this}copyPosition(e){const i=this.elements,a=e.elements;return i[12]=a[12],i[13]=a[13],i[14]=a[14],this}setFromMatrix3(e){const i=e.elements;return this.set(i[0],i[3],i[6],0,i[1],i[4],i[7],0,i[2],i[5],i[8],0,0,0,0,1),this}setFromExtrusionDirection(e){if(mr.equalPoint3d(e,Q.Z_AXIS))this.identity();else{const i=new Q(1,0,0);Math.abs(e.x)<1/64&&Math.abs(e.y)<1/64?i.crossVectors(Q.Y_AXIS,e).normalize():i.crossVectors(Q.Z_AXIS,e).normalize();const a=e.clone().cross(i).normalize();this.set(i.x,i.y,i.z,0,a.x,a.y,a.z,0,e.x,e.y,e.z,0,0,0,0,1)}return this}extractBasis(e,i,a){return e.setFromMatrixColumn(this,0),i.setFromMatrixColumn(this,1),a.setFromMatrixColumn(this,2),this}makeBasis(e,i,a){return this.set(e.x,i.x,a.x,0,e.y,i.y,a.y,0,e.z,i.z,a.z,0,0,0,0,1),this}extractRotation(e){const i=this.elements,a=e.elements,u=1/on.setFromMatrixColumn(e,0).length(),_=1/on.setFromMatrixColumn(e,1).length(),g=1/on.setFromMatrixColumn(e,2).length();return i[0]=a[0]*u,i[1]=a[1]*u,i[2]=a[2]*u,i[3]=0,i[4]=a[4]*_,i[5]=a[5]*_,i[6]=a[6]*_,i[7]=0,i[8]=a[8]*g,i[9]=a[9]*g,i[10]=a[10]*g,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Ti,e,Ui)}lookAt(e,i,a){const u=this.elements;return ae.subVectors(e,i),ae.lengthSq()===0&&(ae.z=1),ae.normalize(),De.crossVectors(a,ae),De.lengthSq()===0&&(Math.abs(a.z)===1?ae.x+=1e-4:ae.z+=1e-4,ae.normalize(),De.crossVectors(a,ae)),De.normalize(),rr.crossVectors(ae,De),u[0]=De.x,u[4]=rr.x,u[8]=ae.x,u[1]=De.y,u[5]=rr.y,u[9]=ae.y,u[2]=De.z,u[6]=rr.z,u[10]=ae.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,i){const a=e.elements,u=i.elements,_=this.elements,g=a[0],y=a[4],x=a[8],f=a[12],P=a[1],p=a[5],E=a[9],k=a[13],U=a[2],K=a[6],H=a[10],W=a[14],wt=a[3],Mt=a[7],mt=a[11],Z=a[15],ct=u[0],lt=u[4],Rt=u[8],Xt=u[12],Vt=u[1],jt=u[5],Qt=u[9],oe=u[13],he=u[2],le=u[6],Ft=u[10],Wt=u[14],j=u[3],bt=u[7],Zt=u[11],Se=u[15];return _[0]=g*ct+y*Vt+x*he+f*j,_[4]=g*lt+y*jt+x*le+f*bt,_[8]=g*Rt+y*Qt+x*Ft+f*Zt,_[12]=g*Xt+y*oe+x*Wt+f*Se,_[1]=P*ct+p*Vt+E*he+k*j,_[5]=P*lt+p*jt+E*le+k*bt,_[9]=P*Rt+p*Qt+E*Ft+k*Zt,_[13]=P*Xt+p*oe+E*Wt+k*Se,_[2]=U*ct+K*Vt+H*he+W*j,_[6]=U*lt+K*jt+H*le+W*bt,_[10]=U*Rt+K*Qt+H*Ft+W*Zt,_[14]=U*Xt+K*oe+H*Wt+W*Se,_[3]=wt*ct+Mt*Vt+mt*he+Z*j,_[7]=wt*lt+Mt*jt+mt*le+Z*bt,_[11]=wt*Rt+Mt*Qt+mt*Ft+Z*Zt,_[15]=wt*Xt+Mt*oe+mt*Wt+Z*Se,this}multiplyScalar(e){const i=this.elements;return i[0]*=e,i[4]*=e,i[8]*=e,i[12]*=e,i[1]*=e,i[5]*=e,i[9]*=e,i[13]*=e,i[2]*=e,i[6]*=e,i[10]*=e,i[14]*=e,i[3]*=e,i[7]*=e,i[11]*=e,i[15]*=e,this}determinant(){const e=this.elements,i=e[0],a=e[4],u=e[8],_=e[12],g=e[1],y=e[5],x=e[9],f=e[13],P=e[2],p=e[6],E=e[10],k=e[14],U=e[3],K=e[7],H=e[11],W=e[15];return U*(+_*x*p-u*f*p-_*y*E+a*f*E+u*y*k-a*x*k)+K*(+i*x*k-i*f*E+_*g*E-u*g*k+u*f*P-_*x*P)+H*(+i*f*p-i*y*k-_*g*p+a*g*k+_*y*P-a*f*P)+W*(-u*y*P-i*x*p+i*y*E+u*g*p-a*g*E+a*x*P)}transpose(){const e=this.elements;let i;return i=e[1],e[1]=e[4],e[4]=i,i=e[2],e[2]=e[8],e[8]=i,i=e[6],e[6]=e[9],e[9]=i,i=e[3],e[3]=e[12],e[12]=i,i=e[7],e[7]=e[13],e[13]=i,i=e[11],e[11]=e[14],e[14]=i,this}setPosition(e,i,a){const u=this.elements;return e instanceof Q?(u[12]=e.x,u[13]=e.y,u[14]=e.z):(u[12]=e,u[13]=i,u[14]=a),this}invert(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],g=e[4],y=e[5],x=e[6],f=e[7],P=e[8],p=e[9],E=e[10],k=e[11],U=e[12],K=e[13],H=e[14],W=e[15],wt=p*H*f-K*E*f+K*x*k-y*H*k-p*x*W+y*E*W,Mt=U*E*f-P*H*f-U*x*k+g*H*k+P*x*W-g*E*W,mt=P*K*f-U*p*f+U*y*k-g*K*k-P*y*W+g*p*W,Z=U*p*x-P*K*x-U*y*E+g*K*E+P*y*H-g*p*H,ct=i*wt+a*Mt+u*mt+_*Z;if(ct===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const lt=1/ct;return e[0]=wt*lt,e[1]=(K*E*_-p*H*_-K*u*k+a*H*k+p*u*W-a*E*W)*lt,e[2]=(y*H*_-K*x*_+K*u*f-a*H*f-y*u*W+a*x*W)*lt,e[3]=(p*x*_-y*E*_-p*u*f+a*E*f+y*u*k-a*x*k)*lt,e[4]=Mt*lt,e[5]=(P*H*_-U*E*_+U*u*k-i*H*k-P*u*W+i*E*W)*lt,e[6]=(U*x*_-g*H*_-U*u*f+i*H*f+g*u*W-i*x*W)*lt,e[7]=(g*E*_-P*x*_+P*u*f-i*E*f-g*u*k+i*x*k)*lt,e[8]=mt*lt,e[9]=(U*p*_-P*K*_-U*a*k+i*K*k+P*a*W-i*p*W)*lt,e[10]=(g*K*_-U*y*_+U*a*f-i*K*f-g*a*W+i*y*W)*lt,e[11]=(P*y*_-g*p*_-P*a*f+i*p*f+g*a*k-i*y*k)*lt,e[12]=Z*lt,e[13]=(P*K*u-U*p*u+U*a*E-i*K*E-P*a*H+i*p*H)*lt,e[14]=(U*y*u-g*K*u-U*a*x+i*K*x+g*a*H-i*y*H)*lt,e[15]=(g*p*u-P*y*u+P*a*x-i*p*x-g*a*E+i*y*E)*lt,this}scale(e){const i=this.elements,a=e.x,u=e.y,_=e.z;return i[0]*=a,i[4]*=u,i[8]*=_,i[1]*=a,i[5]*=u,i[9]*=_,i[2]*=a,i[6]*=u,i[10]*=_,i[3]*=a,i[7]*=u,i[11]*=_,this}getMaxScaleOnAxis(){const e=this.elements,i=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],a=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],u=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(i,a,u))}makeTranslation(e,i,a){return e instanceof Q?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,i,0,0,1,a,0,0,0,1),this}makeRotationX(e){const i=Math.cos(e),a=Math.sin(e);return this.set(1,0,0,0,0,i,-a,0,0,a,i,0,0,0,0,1),this}makeRotationY(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,0,a,0,0,1,0,0,-a,0,i,0,0,0,0,1),this}makeRotationZ(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,-a,0,0,a,i,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,i){const a=Math.cos(i),u=Math.sin(i),_=1-a,g=e.x,y=e.y,x=e.z,f=_*g,P=_*y;return this.set(f*g+a,f*y-u*x,f*x+u*y,0,f*y+u*x,P*y+a,P*x-u*g,0,f*x-u*y,P*x+u*g,_*x*x+a,0,0,0,0,1),this}makeScale(e,i,a){return this.set(e,0,0,0,0,i,0,0,0,0,a,0,0,0,0,1),this}makeShear(e,i,a,u,_,g){return this.set(1,a,_,0,e,1,g,0,i,u,1,0,0,0,0,1),this}compose(e,i,a){const u=this.elements,_=i.x,g=i.y,y=i.z,x=i.w,f=_+_,P=g+g,p=y+y,E=_*f,k=_*P,U=_*p,K=g*P,H=g*p,W=y*p,wt=x*f,Mt=x*P,mt=x*p,Z=a.x,ct=a.y,lt=a.z;return u[0]=(1-(K+W))*Z,u[1]=(k+mt)*Z,u[2]=(U-Mt)*Z,u[3]=0,u[4]=(k-mt)*ct,u[5]=(1-(E+W))*ct,u[6]=(H+wt)*ct,u[7]=0,u[8]=(U+Mt)*lt,u[9]=(H-wt)*lt,u[10]=(1-(E+K))*lt,u[11]=0,u[12]=e.x,u[13]=e.y,u[14]=e.z,u[15]=1,this}decompose(e,i,a){const u=this.elements;let _=on.set(u[0],u[1],u[2]).length();const g=on.set(u[4],u[5],u[6]).length(),y=on.set(u[8],u[9],u[10]).length();this.determinant()<0&&(_=-_),e.x=u[12],e.y=u[13],e.z=u[14],pe.copy(this);const f=1/_,P=1/g,p=1/y;return pe.elements[0]*=f,pe.elements[1]*=f,pe.elements[2]*=f,pe.elements[4]*=P,pe.elements[5]*=P,pe.elements[6]*=P,pe.elements[8]*=p,pe.elements[9]*=p,pe.elements[10]*=p,i.setFromRotationMatrix(pe),a.x=_,a.y=g,a.z=y,this}equals(e){const i=this.elements,a=e.elements;for(let u=0;u<16;u++)if(i[u]!==a[u])return!1;return!0}fromArray(e,i=0){for(let a=0;a<16;a++)this.elements[a]=e[a+i];return this}toArray(e=[],i=0){const a=this.elements;return e[i]=a[0],e[i+1]=a[1],e[i+2]=a[2],e[i+3]=a[3],e[i+4]=a[4],e[i+5]=a[5],e[i+6]=a[6],e[i+7]=a[7],e[i+8]=a[8],e[i+9]=a[9],e[i+10]=a[10],e[i+11]=a[11],e[i+12]=a[12],e[i+13]=a[13],e[i+14]=a[14],e[i+15]=a[15],e}};Bn.IDENTITY=Object.freeze(new Bn);let an=Bn;const on=new Q,pe=new an,Ti=new Q(0,0,0),Ui=new Q(1,1,1),De=new Q,rr=new Q,ae=new Q;class ze{constructor(e=void 0,i=void 0){this.min=e==null?new Q(1/0,1/0,1/0):new Q(e.x,e.y,e.z),this.max=i==null?new Q(-1/0,-1/0,-1/0):new Q(i.x,i.y,i.z)}set(e,i){return this.min.copy(e),this.max.copy(i),this}setFromArray(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i+=3)this.expandByPoint(yr.fromArray(e,i));return this}setFromPoints(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i++)this.expandByPoint(e[i]);return this}setFromCenterAndSize(e,i){const a=yr.copy(i).multiplyScalar(.5);return this.min.copy(e).sub(a),this.max.copy(e).add(a),this}clone(){return new ze().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new Q(0,0,0):new Q(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new Q(0,0,0):new Q(0,0,0).subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,i){return i.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsPlane(e){let i,a;return e.normal.x>0?(i=e.normal.x*this.min.x,a=e.normal.x*this.max.x):(i=e.normal.x*this.max.x,a=e.normal.x*this.min.x),e.normal.y>0?(i+=e.normal.y*this.min.y,a+=e.normal.y*this.max.y):(i+=e.normal.y*this.max.y,a+=e.normal.y*this.min.y),e.normal.z>0?(i+=e.normal.z*this.min.z,a+=e.normal.z*this.max.z):(i+=e.normal.z*this.max.z,a+=e.normal.z*this.min.z),i<=-e.constant&&a>=-e.constant}clampPoint(e,i){return i.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,yr).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Le[0].set(this.min.x,this.min.y,this.min.z).applyMatrix3d(e),Le[1].set(this.min.x,this.min.y,this.max.z).applyMatrix3d(e),Le[2].set(this.min.x,this.max.y,this.min.z).applyMatrix3d(e),Le[3].set(this.min.x,this.max.y,this.max.z).applyMatrix3d(e),Le[4].set(this.max.x,this.min.y,this.min.z).applyMatrix3d(e),Le[5].set(this.max.x,this.min.y,this.max.z).applyMatrix3d(e),Le[6].set(this.max.x,this.max.y,this.min.z).applyMatrix3d(e),Le[7].set(this.max.x,this.max.y,this.max.z).applyMatrix3d(e),this.setFromPoints(Le),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const Le=[new Q,new Q,new Q,new Q,new Q,new Q,new Q,new Q],yr=new Q,li=new Lt;class de{constructor(e=void 0,i=void 0){this.min=e==null?new Lt(1/0,1/0):new Lt(e.x,e.y),this.max=i==null?new Lt(-1/0,-1/0):new Lt(i.x,i.y)}set(e,i){return this.min.copy(e),this.max.copy(i),this}setFromPoints(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i++)this.expandByPoint(e[i]);return this}setFromCenterAndSize(e,i){const a=li.copy(i).multiplyScalar(.5);return this.min.copy(e).sub(a),this.max.copy(e).add(a),this}clone(){return new de().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(e){return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new Lt(0,0):new Lt(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new Lt(0,0):new Lt(0,0).subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,i){return i.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y)}clampPoint(e,i){return i.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,li).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const ui=new Q,Ri=new Q,Vi=new sn;class zn{constructor(e=new Q(1,0,0),i=0){this.normal=e,this.constant=i}set(e,i){return this.normal.copy(e),this.constant=i,this}setComponents(e,i,a,u){return this.normal.set(e,i,a),this.constant=u,this}setFromNormalAndCoplanarPoint(e,i){return this.normal.copy(e),this.constant=-i.dot(this.normal),this}setFromCoplanarPoints(e,i,a){const u=ui.subVectors(a,i).cross(Ri.subVectors(e,i)).normalize();return this.setFromNormalAndCoplanarPoint(u,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}projectPoint(e,i){return i.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectsBox(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,i){const a=i||Vi.getNormalMatrix(e),u=this.coplanarPoint(ui).applyMatrix3d(e),_=this.normal.applyMatrix3(a).normalize();return this.constant=-u.dot(_),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new zn().copy(this)}}class Tt extends Lt{static pointArrayToNumberArray(e){const i=new Array(e.length*2);return e.forEach((a,u)=>{a.toArray(i,u*2)}),i}}class St extends Q{static pointArrayToNumberArray(e,i=!0){const a=i?3:2,u=new Array(e.length*a);return e.forEach((_,g)=>{_.toArray(u,g*a)}),u}}const ci=new an,vi=new Pn,Ln=class Ln{constructor(e=0,i=0,a=0,u=Ln.DEFAULT_ORDER){this._x=e,this._y=i,this._z=a,this._order=u}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,i,a,u=this._order){return this._x=e,this._y=i,this._z=a,this._order=u,this._onChangeCallback(),this}clone(){return new Ln(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,i=this._order,a=!0){const u=e.elements,_=u[0],g=u[4],y=u[8],x=u[1],f=u[5],P=u[9],p=u[2],E=u[6],k=u[10];switch(i){case"XYZ":this._y=Math.asin(Be(y,-1,1)),Math.abs(y)<.9999999?(this._x=Math.atan2(-P,k),this._z=Math.atan2(-g,_)):(this._x=Math.atan2(E,f),this._z=0);break;case"YXZ":this._x=Math.asin(-Be(P,-1,1)),Math.abs(P)<.9999999?(this._y=Math.atan2(y,k),this._z=Math.atan2(x,f)):(this._y=Math.atan2(-p,_),this._z=0);break;case"ZXY":this._x=Math.asin(Be(E,-1,1)),Math.abs(E)<.9999999?(this._y=Math.atan2(-p,k),this._z=Math.atan2(-g,f)):(this._y=0,this._z=Math.atan2(x,_));break;case"ZYX":this._y=Math.asin(-Be(p,-1,1)),Math.abs(p)<.9999999?(this._x=Math.atan2(E,k),this._z=Math.atan2(x,_)):(this._x=0,this._z=Math.atan2(-g,f));break;case"YZX":this._z=Math.asin(Be(x,-1,1)),Math.abs(x)<.9999999?(this._x=Math.atan2(-P,f),this._y=Math.atan2(-p,_)):(this._x=0,this._y=Math.atan2(y,k));break;case"XZY":this._z=Math.asin(-Be(g,-1,1)),Math.abs(g)<.9999999?(this._x=Math.atan2(E,f),this._y=Math.atan2(y,_)):(this._x=Math.atan2(-P,k),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+i)}return this._order=i,a===!0&&this._onChangeCallback(),this}setFromQuaternion(e,i,a=!0){return ci.makeRotationFromQuaternion(e),this.setFromRotationMatrix(ci,i,a)}setFromVector3(e,i=this._order){return this.set(e.x,e.y,e.z,i)}reorder(e){return vi.setFromEuler(this),this.setFromQuaternion(vi,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],i=0){return e[i]=this._x,e[i+1]=this._y,e[i+2]=this._z,e[i+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Ln.DEFAULT_ORDER="XYZ";let wr=Ln;class _i{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class br extends _i{translate(e){return this.transform(new sn().makeTranslation(e.x,e.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Di extends br{constructor(){super(),this._loops=[]}add(e){this._loops.push(e),this._boundingBoxNeedsUpdate=!0}get loops(){return this._loops}get outter(){if(this._loops.length>0)return this._loops[0]}calculateBoundingBox(){const e=this.outter;return e?e.box:new de}transform(e){return this._boundingBoxNeedsUpdate=!0,this}getPoints(e){const i=[];for(let a=0;a<this.loops.length;++a){const _=this.loops[a].getPoints(e);i.push(_)}return i}buildHierarchy(){var y;const e=this.getPoints(100),i=this.calculateBoundaryBoxes(e),a=this.sortBoundaryBoxesByAreas(i),u=new Map,_=a.length;for(let x=0;x<_;x++)u.set(a[x],{index:a[x],children:[]});const g={index:-1,children:[]};for(let x=0;x<_;x++){const f=a[x],P=e[f],p=i[f];let E=x+1;for(;E<_;E++){const k=a[E],U=e[k];if(i[k].containsBox(p)&&ri.isPointInPolygon(P[kt.randInt(0,P.length-1)],U)){(y=u.get(k))==null||y.children.push(u.get(f));break}}E===_&&g.children.push(u.get(f))}return g}calculateBoundaryBoxes(e){const i=[];return e.forEach(a=>{i.push(new de().setFromPoints(a))}),i}sortBoundaryBoxesByAreas(e){const i=[];e.forEach((u,_)=>{const g=u.size,y=g.width*g.height;i.push({area:y,index:_})}),i.sort((u,_)=>u.area-_.area);const a=[];return i.forEach(u=>{a.push(u.index)}),a}}class hn extends br{constructor(){super(),this.arcLengthDivisions=100}get startPoint(){return this.getPoint(0)}get endPoint(){return this.getPoint(1)}get length(){return this.getLength()}getPoint(e){throw new Error("AcGeCurve2d: .getPoint() not implemented.")}getPointAt(e){const i=this.getUtoTmapping(e);return this.getPoint(i)}getPoints(e=5){const i=[];for(let a=0;a<=e;a++)i.push(this.getPoint(a/e));return i}getSpacedPoints(e=5){const i=[];for(let a=0;a<=e;a++)i.push(this.getPointAt(a/e));return i}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){const i=[];let a,u=this.getPoint(0),_=0;i.push(0);for(let g=1;g<=e;g++)a=this.getPoint(g/e),_+=a.distanceTo(u),i.push(_),u=a;return i}getUtoTmapping(e,i){const a=this.getLengths();let u=0;const _=a.length;let g;i?g=i:g=e*a[_-1];let y=0,x=_-1,f;for(;y<=x;)if(u=Math.floor(y+(x-y)/2),f=a[u]-g,f<0)y=u+1;else if(f>0)x=u-1;else{x=u;break}if(u=x,a[u]===g)return u/(_-1);const P=a[u],E=a[u+1]-P,k=(g-P)/E;return(u+k)/(_-1)}getTangent(e){let a=e-1e-4,u=e+1e-4;a<0&&(a=0),u>1&&(u=1);const _=this.getPoint(a),g=this.getPoint(u),y=new Tt;return y.copy(g).sub(_).normalize(),y}getTangentAt(e){const i=this.getUtoTmapping(e);return this.getTangent(i)}}class Sn extends hn{constructor(e,i,a,u,_){super();const g=+(e!==void 0)+ +(i!==void 0)+ +(a!==void 0)+ +(u!==void 0)+ +(_!==void 0);if(g==3)typeof e=="object"&&typeof i=="object"&&typeof a=="object"?this.createByThreePoints(e,i,a):this.createByStartEndPointsAndBulge(e,i,a);else if(g==5){const y=e;this.center=new Tt(y.x,y.y),this.radius=i,this._clockwise=_,this._startAngle=this._clockwise?this._mirrorAngle(kt.normalizeAngle(a)):kt.normalizeAngle(a),this._endAngle=this._clockwise?this._mirrorAngle(kt.normalizeAngle(u)):kt.normalizeAngle(u)}else throw te.AcCmErrors.ILLEGAL_PARAMETERS}createByThreePoints(e,i,a){const u=(lt,Rt)=>({x:(lt.x+Rt.x)/2,y:(lt.y+Rt.y)/2}),_=(lt,Rt)=>(Rt.y-lt.y)/(Rt.x-lt.x),g=lt=>-1/lt,y=u(e,i),x=u(i,a),f=_(e,i),P=_(i,a),p=g(f),E=g(P),k=(lt,Rt,Xt,Vt)=>{const jt=(Vt-Rt)/(lt-Xt),Qt=lt*jt+Rt;return{x:jt,y:Qt}},U=y.y-p*y.x,K=x.y-E*x.x,H=k(p,U,E,K),W=Math.sqrt(Math.pow(e.x-H.x,2)+Math.pow(e.y-H.y,2)),wt=(lt,Rt)=>Math.atan2(lt.y-Rt.y,lt.x-Rt.x),Mt=wt(e,H),mt=wt(i,H),Z=wt(a,H),ct=Z>Mt&&Z<mt||Mt>Z&&Mt<mt||mt>Z&&mt<Mt;this.center=H,this.radius=W,this._clockwise=!ct,this._startAngle=Mt,this._endAngle=Z}createByStartEndPointsAndBulge(e,i,a){let u,_,g;a<0?(u=Math.atan(-a)*4,_=new Lt(e),g=new Lt(i)):(u=Math.atan(a)*4,_=new Lt(i),g=new Lt(e));const y=new Lt().subVectors(g,_),x=y.length(),f=new Lt().addVectors(_,y.multiplyScalar(.5)),P=Math.abs(x/2/Math.tan(u/2)),p=y.normalize();let E;if(u<Math.PI){const k=new Lt(p.x*Math.cos(Math.PI/2)-p.y*Math.sin(Math.PI/2),p.y*Math.cos(Math.PI/2)+p.x*Math.sin(Math.PI/2));E=f.add(k.multiplyScalar(-P))}else{const k=new Lt(p.x*Math.cos(Math.PI/2)-p.y*Math.sin(Math.PI/2),p.y*Math.cos(Math.PI/2)+p.x*Math.sin(Math.PI/2));E=f.add(k.multiplyScalar(P))}a<0?(this._startAngle=Math.atan2(_.y-E.y,_.x-E.x),this._endAngle=Math.atan2(g.y-E.y,g.x-E.x)):(this._startAngle=Math.atan2(g.y-E.y,g.x-E.x),this._endAngle=Math.atan2(_.y-E.y,_.x-E.x)),this._clockwise=a<0,this.center=E,this.radius=g.sub(E).length()}get center(){return this._center}set center(e){this._center=new Tt(e.x,e.y),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(e){this._radius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._clockwise?this._mirrorAngle(this._startAngle):this._startAngle}set startAngle(e){this._startAngle=this._clockwise?this._mirrorAngle(kt.normalizeAngle(e)):kt.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._clockwise?this._mirrorAngle(this._endAngle):this._endAngle}set endAngle(e){const i=this.startAngle==0&&e==Kt?e:kt.normalizeAngle(e);this._endAngle=this._clockwise?this._mirrorAngle(i):i,this._boundingBoxNeedsUpdate=!0}_mirrorAngle(e){return(360-e*180/Math.PI)%360*Math.PI/180}_getInternalAngle(e){return this._clockwise?this._mirrorAngle(e):e}get deltaAngle(){const e=this._getInternalAngle(this.startAngle),i=this._getInternalAngle(this.endAngle);return this.clockwise?kt.normalizeAngle(e-i):kt.normalizeAngle(i-e)}get clockwise(){return this._clockwise}set clockwise(e){this._clockwise=e,this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this.startAngle)}get endPoint(){return this.getPointAtAngle(this.endAngle)}get midPoint(){const e=this._getInternalAngle(this.startAngle),i=this._getInternalAngle(this.endAngle),a=kt.normalizeAngle((e+i)/2),u=this._clockwise?this._mirrorAngle(a):a;return this.getPointAtAngle(u)}get closed(){const e=this._getInternalAngle(this.startAngle),i=this._getInternalAngle(this.endAngle);return Math.abs(i-e)/Math.PI%2==0}calculateBoundingBox(){const e=[this.startPoint,this.endPoint],i=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const _ of i){const g=this._getInternalAngle(_);kt.isBetweenAngle(g,this._getInternalAngle(this.startAngle),this._getInternalAngle(this.endAngle),this.clockwise)&&e.push(this.getPointAtAngle(_))}const a=e.map(_=>_.x),u=e.map(_=>_.y);return new de(new Tt(Math.min(...a),Math.min(...u)),new Tt(Math.max(...a),Math.max(...u)))}get length(){return Math.abs(this.deltaAngle*this.radius)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}clone(){return new Sn(this.center.clone(),this.radius,this._startAngle,this._endAngle,this.clockwise)}getPointAtAngle(e){const i=this._getInternalAngle(e),a=this.center.x+this.radius*Math.cos(i),u=this.center.y+this.radius*Math.sin(i);return new Tt(a,u)}getPoints(e=100){const i=[];let a=this.deltaAngle,u=this._getInternalAngle(this.startAngle);if(this.closed&&(a=Kt,u=0),this.clockwise)for(let _=0;_<=e;_++){const g=u-a*(_/e),y=this._clockwise?this._mirrorAngle(g):g,x=this.getPointAtAngle(y);i.push(new Tt(x.x,x.y))}else for(let _=0;_<=e;_++){const g=u+a*(_/e),y=this._clockwise?this._mirrorAngle(g):g,x=this.getPointAtAngle(y);i.push(new Tt(x.x,x.y))}return i}}class Fi extends _i{translate(e){return this.transform(new an().makeTranslation(e.x,e.y,e.z))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Cn extends Fi{}class kn extends Cn{constructor(e,i){super(),this._start=new St(e),this._end=new St(i)}get startPoint(){return this._start}set startPoint(e){this._start.copy(e),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(e){this._end.copy(e),this._boundingBoxNeedsUpdate=!0}get direction(){return new Q().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new St((this._start.x+this._end.x)/2,(this._start.y+this._end.y)/2,(this._start.z+this._end.z)/2)}get length(){return this.startPoint.distanceTo(this.endPoint)}isPointOnLine(e){return this.project(e).distanceTo(e)<1e-6}at(e,i){return this.delta(i).multiplyScalar(e).add(this._start)}atLength(e,i=!1){if(i){const a=this.delta(Qe).normalize();return new St(this._start).addScaledVector(a,e)}else{const a=this.delta(Qe).normalize();return new St(this._end).addScaledVector(a,e)}}extend(e,i=!1){if(i){const a=Qe.subVectors(this._start,this._end).normalize();this._start=new St(this._start).addScaledVector(a,e)}else{const a=this.delta(Qe).normalize();this._end=new St(this._end).addScaledVector(a,e)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(e,i){di.subVectors(e,this._start),ir.subVectors(this.endPoint,this.startPoint);const a=ir.dot(ir);let _=ir.dot(di)/a;return i&&(_=kt.clamp(_,0,1)),_}closestPointToPoint(e,i,a){const u=this.closestPointToPointParameter(e,i);return this.delta(a).multiplyScalar(u).add(this._start)}delta(e){return e.subVectors(this._end,this._start)}distanceSq(){return this._start.distanceToSquared(this._end)}distance(){return this._start.distanceTo(this._end)}project(e){const i=this.direction,u=Qe.subVectors(e,this.startPoint).dot(i);return new St().copy(i).multiplyScalar(u).add(this.startPoint)}perpPoint(e){const i=this.direction,a=this.startPoint,_=Qe.subVectors(e,a).dot(i),g=Qe.copy(i).multiplyScalar(_);return new St().addVectors(a,g)}calculateBoundingBox(){const e=new St(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y),Math.min(this._start.z,this._end.z)),i=new St(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y),Math.max(this._start.z,this._end.z));return new ze(e,i)}transform(e){return this._start.applyMatrix3d(e),this._end.applyMatrix3d(e),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(e){return this.startPoint=e.startPoint,this.endPoint=e.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new kn(this._start.clone(),this._end.clone())}}const Qe=new Q,di=new Q,ir=new Q;class In extends Cn{static computeCenterPoint(e,i,a){const u=new Q().addVectors(e,i).multiplyScalar(.5),_=new Q().addVectors(e,a).multiplyScalar(.5),g=new Q().subVectors(i,e),y=new Q().subVectors(a,e),x=new Q().crossVectors(g,y).normalize();if(x.lengthSq()===0)return console.error("Points are collinear and cannot form a valid arc."),null;const f=new Q().crossVectors(g,x).normalize(),P=new Q().crossVectors(y,x).normalize(),p=f.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),E=P.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),k=new kn(u,u.clone().add(p)),U=new kn(_,_.clone().add(E)),K=new Q;return k.closestPointToPoint(U.startPoint,!0,K)?K:(console.error("Cannot find a valid center for the arc."),null)}static createByThreePoints(e,i,a){const u=In.computeCenterPoint(e,i,a);if(u){const _=u.distanceTo(e),g=new Q().subVectors(e,u),y=new Q().subVectors(i,u),x=Math.atan2(g.y,g.x),f=Math.atan2(y.y,y.x);return new In(u,_,x,f,Q.Z_AXIS)}}constructor(e,i,a,u,_,g=Q.X_AXIS){super(),this.center=e,this.radius=i,this.startAngle=a,this.endAngle=u,this.normal=_,this.refVec=g,(u-a)%Kt==0?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=a,this.endAngle=u)}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._radius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=kt.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:kt.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return kt.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(e){this._normal=new Q(e.x,e.y,e.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(e){this._refVec=new Q(e.x,e.y,e.z),this._refVec.normalize(),this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get length(){return Math.abs(this.deltaAngle*this.radius)}calculateBoundingBox(){const e=[this.startAngle,this.endAngle];for(let x=0;x<2*Math.PI;x+=Math.PI/2)kt.isBetweenAngle(x,this.startAngle,this.endAngle)&&e.push(x);let i=1/0,a=1/0,u=1/0,_=-1/0,g=-1/0,y=-1/0;for(const x of e){const f=this.getPointAtAngle(x);f.x<i&&(i=f.x),f.y<a&&(a=f.y),f.z<u&&(u=f.z),f.x>_&&(_=f.x),f.y>g&&(g=f.y),f.z>y&&(y=f.z)}return new ze({x:i,y:a,z:u},{x:_,y:g,z:y})}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}getPoints(e){const i=[];let a=this.deltaAngle,u=this.startAngle;this.closed&&(a=Kt,u=0);for(let _=0;_<=e;_++){const g=u+a*(_/e),y=this.getPointAtAngle(g);i.push(y)}return i}transform(e){const i=xr.copy(this.refVec).applyAxisAngle(this.normal,this.startAngle).multiplyScalar(this.radius),a=xr.copy(this.refVec).applyAxisAngle(this.normal,this.endAngle).multiplyScalar(this.radius);return this.center.applyMatrix3d(e),i.applyMatrix3d(e),a.applyMatrix3d(e),this.normal.applyMatrix3d(e).normalize(),this.refVec.applyMatrix3d(e).normalize(),this.startAngle=this.getAngle(i),this.endAngle=this.getAngle(a),this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.radius=e.radius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.normal=e.normal,this.refVec=e.refVec,this._boundingBoxNeedsUpdate=!0,this}clone(){return new In(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(e){return e.sub(this.center),Math.atan2(e.dot(xr.crossVectors(this.refVec,this.normal)),e.dot(this.refVec))}getPointAtAngle(e){const i=this.normal,a=this.refVec,u={x:i.y*a.z-i.z*a.y,y:i.z*a.x-i.x*a.z,z:i.x*a.y-i.y*a.x},_=this.center,g=this.radius;return new St(_.x+g*(a.x*Math.cos(e)+u.x*Math.sin(e)),_.y+g*(a.y*Math.cos(e)+u.y*Math.sin(e)),_.z+g*(a.z*Math.cos(e)+u.z*Math.sin(e)))}get plane(){const e=new Q(this.center).distanceTo(dr);return new zn(this.normal,e)}}const xr=new Q;class Ar extends hn{constructor(e,i,a,u=0,_=Kt,g=!1,y=0){super(),this.center=e,this.majorAxisRadius=i,this.minorAxisRadius=a,(_-u)%Kt==0?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=u,this.endAngle=_),this.clockwise=g,this.rotation=y}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=kt.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:kt.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get clockwise(){return this._clockwise}set clockwise(e){this._clockwise=e,this._boundingBoxNeedsUpdate=!0}get rotation(){return this._rotation}set rotation(e){this._rotation=e,this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return kt.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}calculateBoundingBox(){let i=1/0,a=1/0,u=-1/0,_=-1/0;for(let g=0;g<=100;g++){const y=this.getPoint(g/100);i=Math.min(i,y.x),a=Math.min(a,y.y),u=Math.max(u,y.x),_=Math.max(_,y.y)}return new de({x:i,y:a},{x:u,y:_})}get closed(){return this.deltaAngle==0}getPoint(e){const i=Math.PI*2;let a=this.endAngle-this.startAngle;const u=Math.abs(a)<Number.EPSILON;for(;a<0;)a+=i;for(;a>i;)a-=i;a<Number.EPSILON&&(u?a=0:a=i),this.clockwise===!0&&!u&&(a===i?a=-i:a=a-i);const _=this.startAngle+e*a;let g=this.center.x+this.majorAxisRadius*Math.cos(_),y=this.center.y+this.minorAxisRadius*Math.sin(_);if(this.rotation!==0){const x=Math.cos(this.rotation),f=Math.sin(this.rotation),P=g-this.center.x,p=y-this.center.y;g=P*x-p*f+this.center.x,y=P*f+p*x+this.center.y}return new Tt(g,y)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.majorAxisRadius=e.majorAxisRadius,this.minorAxisRadius=e.minorAxisRadius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.clockwise=e.clockwise,this.rotation=e.rotation,this}clone(){return new Ar(this.center,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle,this.clockwise,this.rotation)}}class Mr extends Cn{constructor(e,i,a,u,_,g=0,y=Kt){super(),this.center=e,this.normal=i,this.majorAxis=a,this.majorAxisRadius=u,this.minorAxisRadius=_;const x=Math.abs(y-g);Math.abs(x-Kt)<1e-10||Math.abs(x-2*Kt)<1e-10?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=g,this.endAngle=y)}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=kt.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:kt.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const e=this.endAngle-this.startAngle;return Math.abs(e-Kt)<1e-10?Kt:kt.normalizeAngle(e)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(e){this._normal=new Q(e.x,e.y,e.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(e){this._majorAxis=new Q(e.x,e.y,e.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new Q().crossVectors(this.normal,this.majorAxis).normalize()}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get isCircular(){return fr.equal(this.majorAxisRadius,this.minorAxisRadius)}get length(){if(this.isCircular)return this.majorAxisRadius*Math.abs(this.deltaAngle);const e=1e3,i=this.deltaAngle/e;let a=0,u=this.getPointAtAngle(this.startAngle);for(let _=1;_<=e;_++){const g=this.startAngle+_*i,y=this.getPointAtAngle(g),x=y.x-u.x,f=y.y-u.y,P=y.z-u.z;a+=Math.sqrt(x*x+f*f+P*P),u=y}return a}calculateBoundingBox(){if(this.majorAxis.equals(Q.X_AXIS)||this.majorAxis.equals(Q.Y_AXIS)||this.majorAxis.isParallelTo(Q.X_AXIS)||this.majorAxis.isParallelTo(Q.Y_AXIS)){const e=[this.startAngle,this.endAngle];for(let x=0;x<2*Math.PI;x+=Math.PI/2)kt.isBetweenAngle(x,this.startAngle,this.endAngle)&&e.push(x);let i=1/0,a=1/0,u=1/0,_=-1/0,g=-1/0,y=-1/0;for(const x of e){const f=this.getPointAtAngle(x);f.x<i&&(i=f.x),f.y<a&&(a=f.y),f.z<u&&(u=f.z),f.x>_&&(_=f.x),f.y>g&&(g=f.y),f.z>y&&(y=f.z)}return new ze({x:i,y:a,z:u},{x:_,y:g,z:y})}else{let i=1/0,a=1/0,u=1/0,_=-1/0,g=-1/0,y=-1/0;for(let x=0;x<=100;x++){const f=this.startAngle+this.deltaAngle*(x/100),P=this.getPointAtAngle(f);i=Math.min(i,P.x),a=Math.min(a,P.y),u=Math.min(u,P.z),_=Math.max(_,P.x),g=Math.max(g,P.y),y=Math.max(y,P.z)}return new ze({x:i,y:a,z:u},{x:_,y:g,z:y})}}get closed(){return this.deltaAngle==0}getPoints(e=100){const i=[];let a=this.deltaAngle,u=this.startAngle;this.closed&&(a=Kt,u=0);for(let _=0;_<=e;_++){const g=u+a*(_/e),y=this.getPointAtAngle(g);i.push(y)}return i}getPointAtAngle(e){const i=Math.cos(e),a=Math.sin(e),u=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(a),_=this.majorAxis.clone().multiplyScalar(i*this.majorAxisRadius).add(u);return new St(this.center.x+_.x,this.center.y+_.y,this.center.z+_.z)}contains(e){const i=new Q(e).sub(this.center),a=i.dot(this.majorAxis),u=i.dot(this.minorAxis),_=a/this.majorAxisRadius,g=u/this.minorAxisRadius;return _*_+g*g<=1}transform(e){return this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.normal=e.normal,this.majorAxis=e.majorAxis,this.majorAxisRadius=e.majorAxisRadius,this.minorAxisRadius=e.minorAxisRadius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this._boundingBoxNeedsUpdate=!0,this}clone(){return new Mr(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const e=new Q(this.center).distanceTo(dr);return new zn(this.normal,e)}}class Oi extends hn{constructor(e=null,i=!1){super(),this._vertices=e||new Array,this._closed=i}get numberOfVertices(){return this._vertices.length}get closed(){return this._closed}get startPoint(){if(this.numberOfVertices>0){const e=this._vertices[0];return new Tt(e.x,e.y)}throw new Error("Start point does not exist in an empty polyline.")}get endPoint(){const e=this.numberOfVertices;if(e>0)if(this.closed){const i=this._vertices[0];return new Tt(i.x,i.y)}else{const i=this._vertices[e-1];return new Tt(i.x,i.y)}throw new Error("End point does not exist in an empty polyline.")}get length(){let e=0;const i=this._vertices.length;for(let a=0;a<i;++a){const u=this._vertices[a];let _=null;if(a<i-1?_=this._vertices[a+1]:a==i-1&&this.closed&&(_=this._vertices[0]),_)if(u.bulge){const g=new Sn(u,_,u.bulge);e+=g.length}else e+=new Tt(u.x,u.y).distanceTo(_)}return e}set closed(e){this._closed=e,this._boundingBoxNeedsUpdate=!0}addVertexAt(e,i){e<=0?this._vertices.unshift(i):this._vertices.splice(e,0,i),this._boundingBoxNeedsUpdate=!0}getPointAt(e){const i=this._vertices[e];return new Tt(i.x,i.y)}calculateBoundingBox(){const e=this.getPoints(100);return new de().setFromPoints(e)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}getPoints3d(e,i){const a=[];return this.getPoints(e).forEach(_=>a.push(new St().set(_.x,_.y,i))),a}getPoints(e){const i=[],a=this._vertices.length;for(let u=0;u<a;++u){const _=this._vertices[u];if(_.bulge){let g=null;if(u<a-1?g=this._vertices[u+1]:u==a-1&&this.closed&&(g=this._vertices[0]),g){const x=new Sn(_,g,_.bulge).getPoints(e),f=x.length;for(let P=0;P<f;++P){const p=x[P];i.push(new Tt(p.x,p.y))}}}else i.push(new Tt(_.x,_.y)),u==a-1&&this.closed&&i.push(i[0])}return i}}class Pr extends hn{constructor(e,i){super(),this._start=new Tt(e),this._end=new Tt(i)}get startPoint(){return this._start}set startPoint(e){this._start.copy(e),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(e){this._end.copy(e),this._boundingBoxNeedsUpdate=!0}getPoints(){return[this.startPoint,this.endPoint]}get length(){return this.startPoint.distanceTo(this.endPoint)}calculateBoundingBox(){const e=new Tt(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y)),i=new Tt(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y));return new de(e,i)}transform(e){return this._start.applyMatrix2d(e),this._end.applyMatrix2d(e),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(e){return this.startPoint=e.startPoint,this.endPoint=e.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new Pr(this._start.clone(),this._end.clone())}}class qi extends hn{constructor(e=[]){super(),this._curves=e}get curves(){return this._curves}add(e){this._curves.push(e),this._boundingBoxNeedsUpdate=!0}get numberOfEdges(){return this._curves.length}get startPoint(){if(this._curves.length>0){const e=this._curves[0].startPoint;return new Tt(e.x,e.y)}throw new Error("Start point does not exist in an empty loop.")}get endPoint(){return this.startPoint}get length(){let e=0;return this._curves.forEach(i=>{e+=i.length}),e}calculateBoundingBox(){const e=this.getPoints(100),i=new de;return i.setFromPoints(e),i}transform(e){return this._boundingBoxNeedsUpdate=!0,this}get closed(){return!0}getPoints(e){const i=[];return this.curves.forEach(a=>{a.getPoints(e).forEach(u=>{i.push(new Tt(u.x,u.y))})}),i}}function Gi(N){return N&&N.__esModule&&Object.prototype.hasOwnProperty.call(N,"default")?N.default:N}var fi={exports:{}};(function(N,e){(function(i){N.exports=i()})(function(){var i={},a=this;new Function("try {return this===window;}catch(e){ return false;}");var u=new Function("try {return this===global;}catch(e){return false;}"),_=new Function("try {return typeof importScripts === 'function';}catch(e){return false;}");if(u()&&_(),u()||_()){var g=a;if(_()){var y=function(x,f){var P=a;return x.split(".").forEach(function(p){P&&(P=P[p])}),P?P[f]:null};onmessage=function(x){if(!(!x.data.className||!x.data.methodName)){var f=y(x.data.className,x.data.methodName);if(!f)return console.error("could not find "+x.data.className+"."+x.data.methodName);postMessage({result:f.apply(null,x.data.args),id:x.data.id})}}}}return function(x,f,P){f.geom=f.geom||{},f.exe=f.exe||{},f.eval=f.eval||{},f.core=f.core||{},f.promhx=f.promhx||{};var p={},E=function(){return bt.__string_rec(this,"")};function k(t,n){function r(){}r.prototype=t;var s=new r;for(var o in n)s[o]=n[o];return n.toString!==Object.prototype.toString&&(s.toString=n.toString),s}var U=function(){};p.HxOverrides=U,U.__name__=["HxOverrides"],U.strDate=function(t){var n=t.length;switch(n){case 8:var r=t.split(":"),s=new Date;return s.setTime(0),s.setUTCHours(r[0]),s.setUTCMinutes(r[1]),s.setUTCSeconds(r[2]),s;case 10:var o=t.split("-");return new Date(o[0],o[1]-1,o[2],0,0,0);case 19:var h=t.split(" "),c=h[0].split("-"),v=h[1].split(":");return new Date(c[0],c[1]-1,c[2],v[0],v[1],v[2]);default:throw new j("Invalid date format : "+t)}},U.cca=function(t,n){var r=t.charCodeAt(n);if(r==r)return r},U.substr=function(t,n,r){return n!=null&&n!=0&&r!=null&&r<0?"":(r==null&&(r=t.length),n<0?(n=t.length+n,n<0&&(n=0)):r<0&&(r=t.length+r-n),t.substr(n,r))},U.iter=function(t){return{cur:0,arr:t,hasNext:function(){return this.cur<this.arr.length},next:function(){return this.arr[this.cur++]}}};var K=function(){};p.Lambda=K,K.__name__=["Lambda"],K.fold=function(t,n,r){for(var s=be(t)();s.hasNext();){var o=s.next();r=n(o,r)}return r};var H=function(){this.length=0};p.List=H,H.__name__=["List"],H.prototype={add:function(t){var n=[t];this.h==null?this.h=n:this.q[1]=n,this.q=n,this.length++},pop:function(){if(this.h==null)return null;var t=this.h[0];return this.h=this.h[1],this.h==null&&(this.q=null),this.length--,t},isEmpty:function(){return this.h==null},__class__:H},Math.__name__=["Math"];var W=function(){};p.Reflect=W,W.__name__=["Reflect"],W.field=function(t,n){try{return t[n]}catch(r){return r instanceof j&&(r=r.val),null}},W.callMethod=function(t,n,r){return n.apply(t,r)},W.fields=function(t){var n=[];if(t!=null){var r=Object.prototype.hasOwnProperty;for(var s in t)s!="__id__"&&s!="hx__closures__"&&r.call(t,s)&&n.push(s)}return n},W.isFunction=function(t){return typeof t=="function"&&!(t.__name__||t.__ename__)},W.deleteField=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)?(delete t[n],!0):!1};var wt=function(){};p.Std=wt,wt.__name__=["Std"],wt.string=function(t){return bt.__string_rec(t,"")},wt.parseFloat=function(t){return parseFloat(t)};var Mt=function(){this.b=""};p.StringBuf=Mt,Mt.__name__=["StringBuf"],Mt.prototype={add:function(t){this.b+=wt.string(t)},__class__:Mt};var mt=function(){};p.StringTools=mt,mt.__name__=["StringTools"],mt.fastCodeAt=function(t,n){return t.charCodeAt(n)};var Z=p.ValueType={__ename__:["ValueType"],__constructs__:["TNull","TInt","TFloat","TBool","TObject","TFunction","TClass","TEnum","TUnknown"]};Z.TNull=["TNull",0],Z.TNull.toString=E,Z.TNull.__enum__=Z,Z.TInt=["TInt",1],Z.TInt.toString=E,Z.TInt.__enum__=Z,Z.TFloat=["TFloat",2],Z.TFloat.toString=E,Z.TFloat.__enum__=Z,Z.TBool=["TBool",3],Z.TBool.toString=E,Z.TBool.__enum__=Z,Z.TObject=["TObject",4],Z.TObject.toString=E,Z.TObject.__enum__=Z,Z.TFunction=["TFunction",5],Z.TFunction.toString=E,Z.TFunction.__enum__=Z,Z.TClass=function(t){var n=["TClass",6,t];return n.__enum__=Z,n.toString=E,n},Z.TEnum=function(t){var n=["TEnum",7,t];return n.__enum__=Z,n.toString=E,n},Z.TUnknown=["TUnknown",8],Z.TUnknown.toString=E,Z.TUnknown.__enum__=Z;var ct=function(){};p.Type=ct,ct.__name__=["Type"],ct.getClassName=function(t){var n=t.__name__;return n==null?null:n.join(".")},ct.getEnumName=function(t){var n=t.__ename__;return n.join(".")},ct.resolveClass=function(t){var n=p[t];return n==null||!n.__name__?null:n},ct.resolveEnum=function(t){var n=p[t];return n==null||!n.__ename__?null:n},ct.createEmptyInstance=function(t){function n(){}return n.prototype=t.prototype,new n},ct.createEnum=function(t,n,r){var s=W.field(t,n);if(s==null)throw new j("No such constructor "+n);if(W.isFunction(s)){if(r==null)throw new j("Constructor "+n+" need parameters");return W.callMethod(t,s,r)}if(r!=null&&r.length!=0)throw new j("Constructor "+n+" does not need parameters");return s},ct.getEnumConstructs=function(t){var n=t.__constructs__;return n.slice()},ct.typeof=function(t){var n=typeof t;switch(n){case"boolean":return Z.TBool;case"string":return Z.TClass(String);case"number":return Math.ceil(t)==t%2147483648?Z.TInt:Z.TFloat;case"object":if(t==null)return Z.TNull;var r=t.__enum__;if(r!=null)return Z.TEnum(r);var s=bt.getClass(t);return s!=null?Z.TClass(s):Z.TObject;case"function":return t.__name__||t.__ename__?Z.TObject:Z.TFunction;case"undefined":return Z.TNull;default:return Z.TUnknown}};var lt=function(){};p["haxe.IMap"]=lt,lt.__name__=["haxe","IMap"];var Rt=function(t,n){this.high=t,this.low=n};p["haxe._Int64.___Int64"]=Rt,Rt.__name__=["haxe","_Int64","___Int64"],Rt.prototype={__class__:Rt};var Xt=function(){this.buf=new Mt,this.cache=[],this.useCache=Xt.USE_CACHE,this.useEnumIndex=Xt.USE_ENUM_INDEX,this.shash=new he,this.scount=0};p["haxe.Serializer"]=Xt,Xt.__name__=["haxe","Serializer"],Xt.prototype={toString:function(){return this.buf.b},serializeString:function(t){var n=this.shash.get(t);if(n!=null){this.buf.b+="R",n==null?this.buf.b+="null":this.buf.b+=""+n;return}this.shash.set(t,this.scount++),this.buf.b+="y",t=encodeURIComponent(t),t.length==null?this.buf.b+="null":this.buf.b+=""+t.length,this.buf.b+=":",t==null?this.buf.b+="null":this.buf.b+=""+t},serializeRef:function(t){for(var n=typeof t,r=0,s=this.cache.length;r<s;){var o=r++,h=this.cache[o];if(typeof h==n&&h==t)return this.buf.b+="r",o==null?this.buf.b+="null":this.buf.b+=""+o,!0}return this.cache.push(t),!1},serializeFields:function(t){for(var n=0,r=W.fields(t);n<r.length;){var s=r[n];++n,this.serializeString(s),this.serialize(W.field(t,s))}this.buf.b+="g"},serialize:function(t){{var n=ct.typeof(t);switch(n[1]){case 0:this.buf.b+="n";break;case 1:var r=t;if(r==0){this.buf.b+="z";return}this.buf.b+="i",r==null?this.buf.b+="null":this.buf.b+=""+r;break;case 2:var s=t;isNaN(s)?this.buf.b+="k":isFinite(s)?(this.buf.b+="d",s==null?this.buf.b+="null":this.buf.b+=""+s):s<0?this.buf.b+="m":this.buf.b+="p";break;case 3:t?this.buf.b+="t":this.buf.b+="f";break;case 6:var o=n[2];if(o==String){this.serializeString(t);return}if(this.useCache&&this.serializeRef(t))return;switch(o){case Array:var h=0;this.buf.b+="a";for(var c=t.length,v=0;v<c;){var d=v++;t[d]==null?h++:(h>0&&(h==1?this.buf.b+="n":(this.buf.b+="u",h==null?this.buf.b+="null":this.buf.b+=""+h),h=0),this.serialize(t[d]))}h>0&&(h==1?this.buf.b+="n":(this.buf.b+="u",h==null?this.buf.b+="null":this.buf.b+=""+h)),this.buf.b+="h";break;case H:this.buf.b+="l";for(var m=t,b=m.h,w=null;b!=null;){var A;w=b[0],b=b[1],A=w,this.serialize(A)}this.buf.b+="h";break;case Date:var M=t;this.buf.b+="v",this.buf.add(M.getTime());break;case he:this.buf.b+="b";for(var z=t,I=z.keys();I.hasNext();){var C=I.next();this.serializeString(C),this.serialize(Ir[C]!=null?z.getReserved(C):z.h[C])}this.buf.b+="h";break;case jt:this.buf.b+="q";for(var L=t,B=L.keys();B.hasNext();){var T=B.next();this.buf.b+=":",T==null?this.buf.b+="null":this.buf.b+=""+T,this.serialize(L.h[T])}this.buf.b+="h";break;case Qt:this.buf.b+="M";for(var R=t,F=R.keys();F.hasNext();){var X=F.next(),D=W.field(X,"__id__");W.deleteField(X,"__id__"),this.serialize(X),X.__id__=D,this.serialize(R.h[X.__id__])}this.buf.b+="h";break;case le:for(var V=t,q=0,J=V.length-2,$=new Mt,nt=Xt.BASE64;q<J;){var st=V.get(q++),rt=V.get(q++),at=V.get(q++);$.add(nt.charAt(st>>2)),$.add(nt.charAt((st<<4|rt>>4)&63)),$.add(nt.charAt((rt<<2|at>>6)&63)),$.add(nt.charAt(at&63))}if(q==J){var et=V.get(q++),ot=V.get(q++);$.add(nt.charAt(et>>2)),$.add(nt.charAt((et<<4|ot>>4)&63)),$.add(nt.charAt(ot<<2&63))}else if(q==J+1){var O=V.get(q++);$.add(nt.charAt(O>>2)),$.add(nt.charAt(O<<4&63))}var ut=$.b;this.buf.b+="s",ut.length==null?this.buf.b+="null":this.buf.b+=""+ut.length,this.buf.b+=":",ut==null?this.buf.b+="null":this.buf.b+=""+ut;break;default:this.useCache&&this.cache.pop(),t.hxSerialize!=null?(this.buf.b+="C",this.serializeString(ct.getClassName(o)),this.useCache&&this.cache.push(t),t.hxSerialize(this),this.buf.b+="g"):(this.buf.b+="c",this.serializeString(ct.getClassName(o)),this.useCache&&this.cache.push(t),this.serializeFields(t))}break;case 4:if(bt.__instanceof(t,yi)){var gt=ct.getClassName(t);this.buf.b+="A",this.serializeString(gt)}else if(bt.__instanceof(t,wi))this.buf.b+="B",this.serializeString(ct.getEnumName(t));else{if(this.useCache&&this.serializeRef(t))return;this.buf.b+="o",this.serializeFields(t)}break;case 7:var Et=n[2];if(this.useCache){if(this.serializeRef(t))return;this.cache.pop()}this.useEnumIndex?this.buf.b+="j":this.buf.b+="w",this.serializeString(ct.getEnumName(Et)),this.useEnumIndex?(this.buf.b+=":",this.buf.b+=wt.string(t[1])):this.serializeString(t[0]),this.buf.b+=":";var Bt=t.length;this.buf.b+=wt.string(Bt-2);for(var Ct=2;Ct<Bt;){var Ut=Ct++;this.serialize(t[Ut])}this.useCache&&this.cache.push(t);break;case 5:throw new j("Cannot serialize function");default:throw new j("Cannot serialize "+wt.string(t))}}},__class__:Xt};var Vt=function(t){this.buf=t,this.length=t.length,this.pos=0,this.scache=[],this.cache=[];var n=Vt.DEFAULT_RESOLVER;n==null&&(n=ct,Vt.DEFAULT_RESOLVER=n),this.setResolver(n)};p["haxe.Unserializer"]=Vt,Vt.__name__=["haxe","Unserializer"],Vt.initCodes=function(){for(var t=[],n=0,r=Vt.BASE64.length;n<r;){var s=n++;t[Vt.BASE64.charCodeAt(s)]=s}return t},Vt.prototype={setResolver:function(t){t==null?this.resolver={resolveClass:function(n){return null},resolveEnum:function(n){return null}}:this.resolver=t},get:function(t){return this.buf.charCodeAt(t)},readDigits:function(){for(var t=0,n=!1,r=this.pos;;){var s=this.buf.charCodeAt(this.pos);if(s!=s)break;if(s==45){if(this.pos!=r)break;n=!0,this.pos++;continue}if(s<48||s>57)break;t=t*10+(s-48),this.pos++}return n&&(t*=-1),t},readFloat:function(){for(var t=this.pos;;){var n=this.buf.charCodeAt(this.pos);if(n>=43&&n<58||n==101||n==69)this.pos++;else break}return wt.parseFloat(U.substr(this.buf,t,this.pos-t))},unserializeObject:function(t){for(;;){if(this.pos>=this.length)throw new j("Invalid object");if(this.buf.charCodeAt(this.pos)==103)break;var n=this.unserialize();if(typeof n!="string")throw new j("Invalid object key");var r=this.unserialize();t[n]=r}this.pos++},unserializeEnum:function(t,n){if(this.get(this.pos++)!=58)throw new j("Invalid enum format");var r=this.readDigits();if(r==0)return ct.createEnum(t,n);for(var s=[];r-- >0;)s.push(this.unserialize());return ct.createEnum(t,n,s)},unserialize:function(){var t=this.get(this.pos++);switch(t){case 110:return null;case 116:return!0;case 102:return!1;case 122:return 0;case 105:return this.readDigits();case 100:return this.readFloat();case 121:var n=this.readDigits();if(this.get(this.pos++)!=58||this.length-this.pos<n)throw new j("Invalid string length");var r=U.substr(this.buf,this.pos,n);return this.pos+=n,r=decodeURIComponent(r.split("+").join(" ")),this.scache.push(r),r;case 107:return NaN;case 109:return-1/0;case 112:return 1/0;case 97:this.buf;var s=[];for(this.cache.push(s);;){var o=this.buf.charCodeAt(this.pos);if(o==104){this.pos++;break}if(o==117){this.pos++;var h=this.readDigits();s[s.length+h-1]=null}else s.push(this.unserialize())}return s;case 111:var c={};return this.cache.push(c),this.unserializeObject(c),c;case 114:var v=this.readDigits();if(v<0||v>=this.cache.length)throw new j("Invalid reference");return this.cache[v];case 82:var d=this.readDigits();if(d<0||d>=this.scache.length)throw new j("Invalid string reference");return this.scache[d];case 120:throw new j(this.unserialize());case 99:var m=this.unserialize(),b=this.resolver.resolveClass(m);if(b==null)throw new j("Class not found "+m);var w=ct.createEmptyInstance(b);return this.cache.push(w),this.unserializeObject(w),w;case 119:var A=this.unserialize(),M=this.resolver.resolveEnum(A);if(M==null)throw new j("Enum not found "+A);var z=this.unserializeEnum(M,this.unserialize());return this.cache.push(z),z;case 106:var I=this.unserialize(),C=this.resolver.resolveEnum(I);if(C==null)throw new j("Enum not found "+I);this.pos++;var L=this.readDigits(),B=ct.getEnumConstructs(C)[L];if(B==null)throw new j("Unknown enum index "+I+"@"+L);var T=this.unserializeEnum(C,B);return this.cache.push(T),T;case 108:var R=new H;for(this.cache.push(R),this.buf;this.buf.charCodeAt(this.pos)!=104;)R.add(this.unserialize());return this.pos++,R;case 98:var F=new he;for(this.cache.push(F),this.buf;this.buf.charCodeAt(this.pos)!=104;){var X=this.unserialize();F.set(X,this.unserialize())}return this.pos++,F;case 113:var D=new jt;this.cache.push(D),this.buf;for(var V=this.get(this.pos++);V==58;){var q=this.readDigits();D.set(q,this.unserialize()),V=this.get(this.pos++)}if(V!=104)throw new j("Invalid IntMap format");return D;case 77:var J=new Qt;for(this.cache.push(J),this.buf;this.buf.charCodeAt(this.pos)!=104;){var $=this.unserialize();J.set($,this.unserialize())}return this.pos++,J;case 118:var nt;if(this.buf.charCodeAt(this.pos)>=48&&this.buf.charCodeAt(this.pos)<=57&&this.buf.charCodeAt(this.pos+1)>=48&&this.buf.charCodeAt(this.pos+1)<=57&&this.buf.charCodeAt(this.pos+2)>=48&&this.buf.charCodeAt(this.pos+2)<=57&&this.buf.charCodeAt(this.pos+3)>=48&&this.buf.charCodeAt(this.pos+3)<=57&&this.buf.charCodeAt(this.pos+4)==45){var st=U.substr(this.buf,this.pos,19);nt=U.strDate(st),this.pos+=19}else{var rt=this.readFloat(),at=new Date;at.setTime(rt),nt=at}return this.cache.push(nt),nt;case 115:var et=this.readDigits(),ot=this.buf;if(this.get(this.pos++)!=58||this.length-this.pos<et)throw new j("Invalid bytes length");var O=Vt.CODES;O==null&&(O=Vt.initCodes(),Vt.CODES=O);var ut=this.pos,gt=et&3,Et;Et=(et>>2)*3+(gt>=2?gt-1:0);for(var Bt=ut+(et-gt),Ct=le.alloc(Et),Ut=0;ut<Bt;){var ie=O[mt.fastCodeAt(ot,ut++)],ge=O[mt.fastCodeAt(ot,ut++)];Ct.set(Ut++,ie<<2|ge>>4);var ne=O[mt.fastCodeAt(ot,ut++)];Ct.set(Ut++,ge<<4|ne>>2);var $t=O[mt.fastCodeAt(ot,ut++)];Ct.set(Ut++,ne<<6|$t)}if(gt>=2){var se=O[mt.fastCodeAt(ot,ut++)],_e=O[mt.fastCodeAt(ot,ut++)];if(Ct.set(Ut++,se<<2|_e>>4),gt==3){var xe=O[mt.fastCodeAt(ot,ut++)];Ct.set(Ut++,_e<<4|xe>>2)}}return this.pos+=et,this.cache.push(Ct),Ct;case 67:var Ne=this.unserialize(),Ae=this.resolver.resolveClass(Ne);if(Ae==null)throw new j("Class not found "+Ne);var Me=ct.createEmptyInstance(Ae);if(this.cache.push(Me),Me.hxUnserialize(this),this.get(this.pos++)!=103)throw new j("Invalid custom data");return Me;case 65:var Pe=this.unserialize(),Re=this.resolver.resolveClass(Pe);if(Re==null)throw new j("Class not found "+Pe);return Re;case 66:var bn=this.unserialize(),en=this.resolver.resolveEnum(bn);if(en==null)throw new j("Enum not found "+bn);return en}throw this.pos--,new j("Invalid char "+this.buf.charAt(this.pos)+" at position "+this.pos)},__class__:Vt};var jt=function(){this.h={}};p["haxe.ds.IntMap"]=jt,jt.__name__=["haxe","ds","IntMap"],jt.__interfaces__=[lt],jt.prototype={set:function(t,n){this.h[t]=n},remove:function(t){return this.h.hasOwnProperty(t)?(delete this.h[t],!0):!1},keys:function(){var t=[];for(var n in this.h)this.h.hasOwnProperty(n)&&t.push(n|0);return U.iter(t)},__class__:jt};var Qt=function(){this.h={},this.h.__keys__={}};p["haxe.ds.ObjectMap"]=Qt,Qt.__name__=["haxe","ds","ObjectMap"],Qt.__interfaces__=[lt],Qt.prototype={set:function(t,n){var r=t.__id__||(t.__id__=++Qt.count);this.h[r]=n,this.h.__keys__[r]=t},keys:function(){var t=[];for(var n in this.h.__keys__)this.h.hasOwnProperty(n)&&t.push(this.h.__keys__[n]);return U.iter(t)},__class__:Qt};var oe=p["haxe.ds.Option"]={__ename__:["haxe","ds","Option"],__constructs__:["Some","None"]};oe.Some=function(t){var n=["Some",0,t];return n.__enum__=oe,n.toString=E,n},oe.None=["None",1],oe.None.toString=E,oe.None.__enum__=oe;var he=function(){this.h={}};p["haxe.ds.StringMap"]=he,he.__name__=["haxe","ds","StringMap"],he.__interfaces__=[lt],he.prototype={set:function(t,n){Ir[t]!=null?this.setReserved(t,n):this.h[t]=n},get:function(t){return Ir[t]!=null?this.getReserved(t):this.h[t]},setReserved:function(t,n){this.rh==null&&(this.rh={}),this.rh["$"+t]=n},getReserved:function(t){return this.rh==null?null:this.rh["$"+t]},keys:function(){var t=this.arrayKeys();return U.iter(t)},arrayKeys:function(){var t=[];for(var n in this.h)this.h.hasOwnProperty(n)&&t.push(n);if(this.rh!=null)for(var n in this.rh)n.charCodeAt(0)==36&&t.push(n.substr(1));return t},__class__:he};var le=function(t){this.length=t.byteLength,this.b=new Er(t),this.b.bufferValue=t,t.hxBytes=this,t.bytes=this.b};p["haxe.io.Bytes"]=le,le.__name__=["haxe","io","Bytes"],le.alloc=function(t){return new le(new or(t))},le.prototype={get:function(t){return this.b[t]},set:function(t,n){this.b[t]=n&255},__class__:le};var Ft=p["haxe.io.Error"]={__ename__:["haxe","io","Error"],__constructs__:["Blocked","Overflow","OutsideBounds","Custom"]};Ft.Blocked=["Blocked",0],Ft.Blocked.toString=E,Ft.Blocked.__enum__=Ft,Ft.Overflow=["Overflow",1],Ft.Overflow.toString=E,Ft.Overflow.__enum__=Ft,Ft.OutsideBounds=["OutsideBounds",2],Ft.OutsideBounds.toString=E,Ft.OutsideBounds.__enum__=Ft,Ft.Custom=function(t){var n=["Custom",3,t];return n.__enum__=Ft,n.toString=E,n};var Wt=function(){};p["haxe.io.FPHelper"]=Wt,Wt.__name__=["haxe","io","FPHelper"],Wt.i32ToFloat=function(t){var n=1-(t>>>31<<1),r=t>>>23&255,s=t&8388607;return s==0&&r==0?0:n*(1+Math.pow(2,-23)*s)*Math.pow(2,r-127)},Wt.floatToI32=function(t){if(t==0)return 0;var n;t<0?n=-t:n=t;var r=Math.floor(Math.log(n)/.6931471805599453);r<-127?r=-127:r>128&&(r=128);var s=Math.round((n/Math.pow(2,r)-1)*8388608)&8388607;return(t<0?-2147483648:0)|r+127<<23|s},Wt.i64ToDouble=function(t,n){var r=1-(n>>>31<<1),s=(n>>20&2047)-1023,o=(n&1048575)*4294967296+(t>>>31)*2147483648+(t&2147483647);return o==0&&s==-1023?0:r*(1+Math.pow(2,-52)*o)*Math.pow(2,s)},Wt.doubleToI64=function(t){var n=Wt.i64tmp;if(t==0)n.low=0,n.high=0;else{var r;t<0?r=-t:r=t;var s=Math.floor(Math.log(r)/.6931471805599453),o,h=(r/Math.pow(2,s)-1)*4503599627370496;o=Math.round(h);var c=o|0,v=o/4294967296|0;n.low=c,n.high=(t<0?-2147483648:0)|s+1023<<20|v}return n};var j=function(t){Error.call(this),this.val=t,this.message=String(t),Error.captureStackTrace&&Error.captureStackTrace(this,j)};p["js._Boot.HaxeError"]=j,j.__name__=["js","_Boot","HaxeError"],j.__super__=Error,j.prototype=k(Error.prototype,{__class__:j});var bt=function(){};p["js.Boot"]=bt,bt.__name__=["js","Boot"],bt.getClass=function(t){if(t instanceof Array&&t.__enum__==null)return Array;var n=t.__class__;if(n!=null)return n;var r=bt.__nativeClassName(t);return r!=null?bt.__resolveNativeClass(r):null},bt.__string_rec=function(t,n){if(t==null)return"null";if(n.length>=5)return"<...>";var r=typeof t;switch(r=="function"&&(t.__name__||t.__ename__)&&(r="object"),r){case"object":if(t instanceof Array){if(t.__enum__){if(t.length==2)return t[0];var s=t[0]+"(";n+=" ";for(var o=2,h=t.length;o<h;){var c=o++;c!=2?s+=","+bt.__string_rec(t[c],n):s+=bt.__string_rec(t[c],n)}return s+")"}var v=t.length,d="[";n+=" ";for(var m=0;m<v;){var b=m++;d+=(b>0?",":"")+bt.__string_rec(t[b],n)}return d+="]",d}var w;try{w=t.toString}catch(C){return C instanceof j&&(C=C.val),"???"}if(w!=null&&w!=Object.toString&&typeof w=="function"){var A=t.toString();if(A!="[object Object]")return A}var M=null,z=`{
2
+ `;n+=" ";var I=t.hasOwnProperty!=null;for(var M in t)I&&!t.hasOwnProperty(M)||M=="prototype"||M=="__class__"||M=="__super__"||M=="__interfaces__"||M=="__properties__"||(z.length!=2&&(z+=`,
3
+ `),z+=n+M+" : "+bt.__string_rec(t[M],n));return n=n.substring(1),z+=`
4
+ `+n+"}",z;case"function":return"<function>";case"string":return t;default:return String(t)}},bt.__interfLoop=function(t,n){if(t==null)return!1;if(t==n)return!0;var r=t.__interfaces__;if(r!=null)for(var s=0,o=r.length;s<o;){var h=s++,c=r[h];if(c==n||bt.__interfLoop(c,n))return!0}return bt.__interfLoop(t.__super__,n)},bt.__instanceof=function(t,n){if(n==null)return!1;switch(n){case Xi:return(t|0)===t;case gi:return typeof t=="number";case pi:return typeof t=="boolean";case String:return typeof t=="string";case Array:return t instanceof Array&&t.__enum__==null;case Wi:return!0;default:if(t!=null){if(typeof n=="function"){if(t instanceof n||bt.__interfLoop(bt.getClass(t),n))return!0}else if(typeof n=="object"&&bt.__isNativeObj(n)&&t instanceof n)return!0}else return!1;return n==yi&&t.__name__!=null||n==wi&&t.__ename__!=null?!0:t.__enum__==n}},bt.__nativeClassName=function(t){var n=bt.__toStr.call(t).slice(8,-1);return n=="Object"||n=="Function"||n=="Math"||n=="JSON"?null:n},bt.__isNativeObj=function(t){return bt.__nativeClassName(t)!=null},bt.__resolveNativeClass=function(t){return P[t]};var Zt=function(t){if(t instanceof Array&&t.__enum__==null)this.a=t,this.byteLength=t.length;else{var n=t;this.a=[];for(var r=0;r<n;){var s=r++;this.a[s]=0}this.byteLength=n}};p["js.html.compat.ArrayBuffer"]=Zt,Zt.__name__=["js","html","compat","ArrayBuffer"],Zt.sliceImpl=function(t,n){var r=new Er(this,t,n==null?null:n-t),s=new or(r.byteLength),o=new Er(s);return o.set(r),s},Zt.prototype={slice:function(t,n){return new Zt(this.a.slice(t,n))},__class__:Zt};var Se=function(t,n,r){if(this.buf=t,n==null?this.offset=0:this.offset=n,r==null?this.length=t.byteLength-this.offset:this.length=r,this.offset<0||this.length<0||this.offset+this.length>t.byteLength)throw new j(Ft.OutsideBounds)};p["js.html.compat.DataView"]=Se,Se.__name__=["js","html","compat","DataView"],Se.prototype={getInt8:function(t){var n=this.buf.a[this.offset+t];return n>=128?n-256:n},getUint8:function(t){return this.buf.a[this.offset+t]},getInt16:function(t,n){var r=this.getUint16(t,n);return r>=32768?r-65536:r},getUint16:function(t,n){return n?this.buf.a[this.offset+t]|this.buf.a[this.offset+t+1]<<8:this.buf.a[this.offset+t]<<8|this.buf.a[this.offset+t+1]},getInt32:function(t,n){var r=this.offset+t,s=this.buf.a[r++],o=this.buf.a[r++],h=this.buf.a[r++],c=this.buf.a[r++];return n?s|o<<8|h<<16|c<<24:c|h<<8|o<<16|s<<24},getUint32:function(t,n){var r=this.getInt32(t,n);return r<0?r+4294967296:r},getFloat32:function(t,n){return Wt.i32ToFloat(this.getInt32(t,n))},getFloat64:function(t,n){var r=this.getInt32(t,n),s=this.getInt32(t+4,n);return Wt.i64ToDouble(n?r:s,n?s:r)},setInt8:function(t,n){n<0?this.buf.a[t+this.offset]=n+128&255:this.buf.a[t+this.offset]=n&255},setUint8:function(t,n){this.buf.a[t+this.offset]=n&255},setInt16:function(t,n,r){this.setUint16(t,n<0?n+65536:n,r)},setUint16:function(t,n,r){var s=t+this.offset;r?(this.buf.a[s]=n&255,this.buf.a[s++]=n>>8&255):(this.buf.a[s++]=n>>8&255,this.buf.a[s]=n&255)},setInt32:function(t,n,r){this.setUint32(t,n,r)},setUint32:function(t,n,r){var s=t+this.offset;r?(this.buf.a[s++]=n&255,this.buf.a[s++]=n>>8&255,this.buf.a[s++]=n>>16&255,this.buf.a[s++]=n>>>24):(this.buf.a[s++]=n>>>24,this.buf.a[s++]=n>>16&255,this.buf.a[s++]=n>>8&255,this.buf.a[s++]=n&255)},setFloat32:function(t,n,r){this.setUint32(t,Wt.floatToI32(n),r)},setFloat64:function(t,n,r){var s=Wt.doubleToI64(n);r?(this.setUint32(t,s.low),this.setUint32(t,s.high)):(this.setUint32(t,s.high),this.setUint32(t,s.low))},__class__:Se};var Ce=function(){};p["js.html.compat.Uint8Array"]=Ce,Ce.__name__=["js","html","compat","Uint8Array"],Ce._new=function(t,n,r){var s;if(typeof t=="number"){s=[];for(var o=0;o<t;){var h=o++;s[h]=0}s.byteLength=s.length,s.byteOffset=0,s.buffer=new Zt(s)}else if(bt.__instanceof(t,Zt)){var c=t;n==null&&(n=0),r==null&&(r=c.byteLength-n),n==0?s=c.a:s=c.a.slice(n,n+r),s.byteLength=s.length,s.byteOffset=n,s.buffer=c}else if(t instanceof Array&&t.__enum__==null)s=t.slice(),s.byteLength=s.length,s.byteOffset=0,s.buffer=new Zt(s);else throw new j("TODO "+wt.string(t));return s.subarray=Ce._subarray,s.set=Ce._set,s},Ce._set=function(t,n){var r=this;if(bt.__instanceof(t.buffer,Zt)){var s=t;if(t.byteLength+n>r.byteLength)throw new j("set() outside of range");for(var o=0,h=t.byteLength;o<h;){var c=o++;r[c+n]=s[c]}}else if(t instanceof Array&&t.__enum__==null){var v=t;if(v.length+n>r.byteLength)throw new j("set() outside of range");for(var d=0,m=v.length;d<m;){var b=d++;r[b+n]=v[b]}}else throw new j("TODO")},Ce._subarray=function(t,n){var r=this,s=Ce._new(r.slice(t,n));return s.byteOffset=t,s};var yt=function(t){this._resolved=!1,this._pending=!1,this._errorPending=!1,this._fulfilled=!1,this._update=[],this._error=[],this._errored=!1,t!=null&&yt.link(t,this,function(n){return n})};p["promhx.base.AsyncBase"]=yt,yt.__name__=["promhx","base","AsyncBase"],yt.link=function(t,n,r){t._update.push({async:n,linkf:function(s){n.handleResolve(r(s))}}),yt.immediateLinkUpdate(t,n,r)},yt.immediateLinkUpdate=function(t,n,r){if(t._errored&&!t._errorPending&&!(t._error.length>0)&&n.handleError(t._errorVal),t._resolved&&!t._pending)try{n.handleResolve(r(t._val))}catch(s){s instanceof j&&(s=s.val),n.handleError(s)}},yt.linkAll=function(t,n){for(var r=function(h,c,v){if(h.length==0||yt.allFulfilled(h)){for(var d,m=[],b=be(t)();b.hasNext();){var w=b.next();m.push(w==c?v:w._val)}d=m,n.handleResolve(d)}},s=be(t)();s.hasNext();){var o=s.next();o._update.push({async:n,linkf:function(h,c,v){return function(d){h(c,v,d)}}(r,function(h){for(var c,v=[],d=be(t)();d.hasNext();){var m=d.next();m!=o&&v.push(m)}return c=v,c}(),o)})}yt.allFulfilled(t)&&n.handleResolve(function(h){for(var c,v=[],d=be(t)();d.hasNext();){var m=d.next();v.push(m._val)}return c=v,c}())},yt.pipeLink=function(t,n,r){var s=!1,o=function(h){if(!s){s=!0;var c=r(h);c._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(c,n,function(v){return v})}};if(t._update.push({async:n,linkf:o}),t._resolved&&!t._pending)try{o(t._val)}catch(h){h instanceof j&&(h=h.val),n.handleError(h)}},yt.allResolved=function(t){for(var n=be(t)();n.hasNext();){var r=n.next();if(!r._resolved)return!1}return!0},yt.allFulfilled=function(t){for(var n=be(t)();n.hasNext();){var r=n.next();if(!r._fulfilled)return!1}return!0},yt.prototype={catchError:function(t){return this._error.push(t),this},errorThen:function(t){return this._errorMap=t,this},isResolved:function(){return this._resolved},isErrored:function(){return this._errored},isErrorHandled:function(){return this._error.length>0},isErrorPending:function(){return this._errorPending},isFulfilled:function(){return this._fulfilled},isPending:function(){return this._pending},handleResolve:function(t){this._resolve(t)},_resolve:function(t){var n=this;this._pending?ft.enqueue(function(r,s){return function(){r(s)}}(ve(this,this._resolve),t)):(this._resolved=!0,this._pending=!0,ft.queue.add(function(){n._val=t;for(var r=0,s=n._update;r<s.length;){var o=s[r];++r;try{o.linkf(t)}catch(h){h instanceof j&&(h=h.val),o.async.handleError(h)}}n._fulfilled=!0,n._pending=!1}),ft.continueOnNextLoop())},handleError:function(t){this._handleError(t)},_handleError:function(t){var n=this,r=function(s){if(n._error.length>0)for(var o=0,h=n._error;o<h.length;){var c=h[o];++o,c(s)}else if(n._update.length>0)for(var v=0,d=n._update;v<d.length;){var m=d[v];++v,m.async.handleError(s)}else throw new j(s);n._errorPending=!1};this._errorPending||(this._errorPending=!0,this._errored=!0,this._errorVal=t,ft.queue.add(function(){if(n._errorMap!=null)try{n._resolve(n._errorMap(t))}catch(s){s instanceof j&&(s=s.val),r(s)}else r(t)}),ft.continueOnNextLoop())},then:function(t){var n=new yt(null);return yt.link(this,n,t),n},unlink:function(t){var n=this;ft.queue.add(function(){n._update=n._update.filter(function(r){return r.async!=t})}),ft.continueOnNextLoop()},isLinked:function(t){for(var n=!1,r=0,s=this._update;r<s.length;){var o=s[r];if(++r,o.async==t)return!0}return n},__class__:yt};var un=f.promhx.Deferred=function(){yt.call(this)};p["promhx.Deferred"]=un,un.__name__=["promhx","Deferred"],un.__super__=yt,un.prototype=k(yt.prototype,{resolve:function(t){this.handleResolve(t)},throwError:function(t){this.handleError(t)},promise:function(){return new Jt(this)},stream:function(){return new Nt(this)},publicStream:function(){return new Fe(this)},__class__:un});var Jt=f.promhx.Promise=function(t){yt.call(this,t),this._rejected=!1};p["promhx.Promise"]=Jt,Jt.__name__=["promhx","Promise"],Jt.whenAll=function(t){var n=new Jt(null);return yt.linkAll(t,n),n},Jt.promise=function(t){var n=new Jt;return n.handleResolve(t),n},Jt.__super__=yt,Jt.prototype=k(yt.prototype,{isRejected:function(){return this._rejected},reject:function(t){this._rejected=!0,this.handleError(t)},handleResolve:function(t){if(this._resolved){var n="Promise has already been resolved";throw new j(cn.AlreadyResolved(n))}this._resolve(t)},then:function(t){var n=new Jt(null);return yt.link(this,n,t),n},unlink:function(t){var n=this;ft.queue.add(function(){if(n._fulfilled)n._update=n._update.filter(function(s){return s.async!=t});else{var r="Downstream Promise is not fullfilled";n.handleError(cn.DownstreamNotFullfilled(r))}}),ft.continueOnNextLoop()},handleError:function(t){this._rejected=!0,this._handleError(t)},pipe:function(t){var n=new Jt(null);return yt.pipeLink(this,n,t),n},errorPipe:function(t){var n=new Jt;return this.catchError(function(r){var s=t(r);s.then(ve(n,n._resolve))}),this.then(ve(n,n._resolve)),n},__class__:Jt});var Nt=f.promhx.Stream=function(t){yt.call(this,t),this._end_promise=new Jt};p["promhx.Stream"]=Nt,Nt.__name__=["promhx","Stream"],Nt.foreach=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.handleResolve(s)}return n.end(),n},Nt.wheneverAll=function(t){var n=new Nt(null);return yt.linkAll(t,n),n},Nt.concatAll=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.concat(s)}return n},Nt.mergeAll=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.merge(s)}return n},Nt.stream=function(t){var n=new Nt(null);return n.handleResolve(t),n},Nt.__super__=yt,Nt.prototype=k(yt.prototype,{then:function(t){var n=new Nt(null);return yt.link(this,n,t),this._end_promise._update.push({async:n._end_promise,linkf:function(r){n.end()}}),n},detachStream:function(t){for(var n=[],r=!1,s=0,o=this._update;s<o.length;){var h=o[s];++s,h.async==t?(this._end_promise._update=this._end_promise._update.filter(function(c){return c.async!=t._end_promise}),r=!0):n.push(h)}return this._update=n,r},first:function(){var t=new Jt(null);return this.then(function(n){t._resolved||t.handleResolve(n)}),t},handleResolve:function(t){!this._end&&!this._pause&&this._resolve(t)},pause:function(t){t==null&&(t=!this._pause),this._pause=t},pipe:function(t){var n=new Nt(null);return yt.pipeLink(this,n,t),this._end_promise.then(function(r){n.end()}),n},errorPipe:function(t){var n=new Nt(null);return this.catchError(function(r){var s=t(r);s.then(ve(n,n._resolve)),s._end_promise.then((kr=n._end_promise,ve(kr,kr._resolve)))}),this.then(ve(n,n._resolve)),this._end_promise.then(function(r){n.end()}),n},handleEnd:function(){if(this._pending)ft.queue.add(ve(this,this.handleEnd)),ft.continueOnNextLoop();else{if(this._end_promise._resolved)return;this._end=!0;var t;this._resolved?t=oe.Some(this._val):t=oe.None,this._end_promise.handleResolve(t),this._update=[],this._error=[]}},end:function(){return ft.queue.add(ve(this,this.handleEnd)),ft.continueOnNextLoop(),this},endThen:function(t){return this._end_promise.then(t)},filter:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:function(r){t(r)&&n.handleResolve(r)}}),yt.immediateLinkUpdate(this,n,function(r){return r}),n},concat:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(this,n,function(r){return r}),this._end_promise.then(function(r){t.pipe(function(s){return n.handleResolve(s),n}),t._end_promise.then(function(s){n.end()})}),n},merge:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:ve(n,n.handleResolve)}),t._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(this,n,function(r){return r}),yt.immediateLinkUpdate(t,n,function(r){return r}),n},__class__:Nt});var Fe=f.promhx.PublicStream=function(t){Nt.call(this,t)};p["promhx.PublicStream"]=Fe,Fe.__name__=["promhx","PublicStream"],Fe.publicstream=function(t){var n=new Fe(null);return n.handleResolve(t),n},Fe.__super__=Nt,Fe.prototype=k(Nt.prototype,{resolve:function(t){this.handleResolve(t)},throwError:function(t){this.handleError(t)},update:function(t){this.handleResolve(t)},__class__:Fe});var ft=function(){};p["promhx.base.EventLoop"]=ft,ft.__name__=["promhx","base","EventLoop"],ft.enqueue=function(t){ft.queue.add(t),ft.continueOnNextLoop()},ft.set_nextLoop=function(t){if(ft.nextLoop!=null)throw new j("nextLoop has already been set");return ft.nextLoop=t,ft.nextLoop},ft.queueEmpty=function(){return ft.queue.isEmpty()},ft.finish=function(t){t==null&&(t=1e3);for(var n=null;t-- >0&&(n=ft.queue.pop())!=null;)n();return ft.queue.isEmpty()},ft.clear=function(){ft.queue=new H},ft.f=function(){var t=ft.queue.pop();t!=null&&t(),ft.queue.isEmpty()||ft.continueOnNextLoop()},ft.continueOnNextLoop=function(){ft.nextLoop!=null?ft.nextLoop(ft.f):setImmediate(ft.f)};var cn=p["promhx.error.PromiseError"]={__ename__:["promhx","error","PromiseError"],__constructs__:["AlreadyResolved","DownstreamNotFullfilled"]};cn.AlreadyResolved=function(t){var n=["AlreadyResolved",0,t];return n.__enum__=cn,n.toString=E,n},cn.DownstreamNotFullfilled=function(t){var n=["DownstreamNotFullfilled",1,t];return n.__enum__=cn,n.toString=E,n};var sr=function(){};p["verb.Verb"]=sr,sr.__name__=["verb","Verb"],sr.main=function(){x.log("verb 2.1.0")};var G=function(){};p["verb.core.ArrayExtensions"]=G,G.__name__=["verb","core","ArrayExtensions"],G.alloc=function(t,n){if(!(n<0))for(;t.length<n;)t.push(null)},G.reversed=function(t){var n=t.slice();return n.reverse(),n},G.last=function(t){return t[t.length-1]},G.first=function(t){return t[0]},G.spliceAndInsert=function(t,n,r,s){t.splice(n,r),t.splice(n,0,s)},G.left=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(0,n)},G.right=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(n)},G.rightWithPivot=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(n-1)},G.unique=function(t,n){if(t.length==0)return[];for(var r=[t.pop()];t.length>0;){for(var s=t.pop(),o=!0,h=0;h<r.length;){var c=r[h];if(++h,n(s,c)){o=!1;break}}o&&r.push(s)}return r};var zt=function(){};p["verb.core.Binomial"]=zt,zt.__name__=["verb","core","Binomial"],zt.get=function(t,n){if(n==0)return 1;if(t==0||n>t)return 0;if(n>t-n&&(n=t-n),zt.memo_exists(t,n))return zt.get_memo(t,n);for(var r=1,s=t,o=1,h=n+1;o<h;){var c=o++;if(zt.memo_exists(s,c)){t--,r=zt.get_memo(s,c);continue}r*=t--,r/=c,zt.memoize(s,c,r)}return r},zt.get_no_memo=function(t,n){if(n==0)return 1;if(t==0||n>t)return 0;n>t-n&&(n=t-n);for(var r=1,s=1,o=n+1;s<o;){var h=s++;r*=t--,r/=h}return r},zt.memo_exists=function(t,n){return zt.memo.h.hasOwnProperty(t)&&zt.memo.h[t].h.hasOwnProperty(n)},zt.get_memo=function(t,n){return zt.memo.h[t].h[n]},zt.memoize=function(t,n,r){zt.memo.h.hasOwnProperty(t)||zt.memo.set(t,new jt),zt.memo.h[t].h[n]=r};var ue=f.core.BoundingBox=function(t){this.max=null,this.min=null,this.dim=3,this.initialized=!1,t!=null&&this.addRange(t)};p["verb.core.BoundingBox"]=ue,ue.__name__=["verb","core","BoundingBox"],ue.intervalsOverlap=function(t,n,r,s,o){o==null&&(o=-1);var h;o<-.5?h=tt.TOLERANCE:h=o;var c=Math.min(t,n)-h,v=Math.max(t,n)+h,d=Math.min(r,s)-h,m=Math.max(r,s)+h;return c>=d&&c<=m||v>=d&&v<=m||d>=c&&d<=v||m>=c&&m<=v},ue.prototype={fromPoint:function(t){return new ue([t])},add:function(t){if(!this.initialized)return this.dim=t.length,this.min=t.slice(0),this.max=t.slice(0),this.initialized=!0,this;for(var n=0,r=this.dim;n<r;){var s=n++;t[s]>this.max[s]&&(this.max[s]=t[s]),t[s]<this.min[s]&&(this.min[s]=t[s])}return this},addRange:function(t){for(var n=t.length,r=0;r<n;){var s=r++;this.add(t[s])}return this},contains:function(t,n){return n==null&&(n=-1),this.initialized?this.intersects(new ue([t]),n):!1},intersects:function(t,n){if(n==null&&(n=-1),!this.initialized||!t.initialized)return!1;for(var r=this.min,s=this.max,o=t.min,h=t.max,c=0,v=this.dim;c<v;){var d=c++;if(!ue.intervalsOverlap(r[d],s[d],o[d],h[d],n))return!1}return!0},clear:function(){return this.initialized=!1,this},getLongestAxis:function(){for(var t=0,n=0,r=0,s=this.dim;r<s;){var o=r++,h=this.getAxisLength(o);h>t&&(t=h,n=o)}return n},getAxisLength:function(t){return t<0||t>this.dim-1?0:Math.abs(this.min[t]-this.max[t])},intersect:function(t,n){if(!this.initialized)return null;var r=this.min,s=this.max,o=t.min,h=t.max;if(!this.intersects(t,n))return null;for(var c=[],v=[],d=0,m=this.dim;d<m;){var b=d++;c.push(Math.min(s[b],h[b])),v.push(Math.max(r[b],o[b]))}return new ue([v,c])},__class__:ue};var tt=f.core.Constants=function(){};p["verb.core.Constants"]=tt,tt.__name__=["verb","core","Constants"];var Dt=f.core.SerializableBase=function(){};p["verb.core.SerializableBase"]=Dt,Dt.__name__=["verb","core","SerializableBase"],Dt.prototype={serialize:function(){var t=new Xt;return t.serialize(this),t.toString()},__class__:Dt};var Tn=f.core.Plane=function(t,n){this.origin=t,this.normal=n};p["verb.core.Plane"]=Tn,Tn.__name__=["verb","core","Plane"],Tn.__super__=Dt,Tn.prototype=k(Dt.prototype,{__class__:Tn});var vn=f.core.Ray=function(t,n){this.origin=t,this.dir=n};p["verb.core.Ray"]=vn,vn.__name__=["verb","core","Ray"],vn.__super__=Dt,vn.prototype=k(Dt.prototype,{__class__:vn});var It=f.core.NurbsCurveData=function(t,n,r){this.degree=t,this.controlPoints=r,this.knots=n};p["verb.core.NurbsCurveData"]=It,It.__name__=["verb","core","NurbsCurveData"],It.__super__=Dt,It.prototype=k(Dt.prototype,{__class__:It});var Ot=f.core.NurbsSurfaceData=function(t,n,r,s,o){this.degreeU=t,this.degreeV=n,this.knotsU=r,this.knotsV=s,this.controlPoints=o};p["verb.core.NurbsSurfaceData"]=Ot,Ot.__name__=["verb","core","NurbsSurfaceData"],Ot.__super__=Dt,Ot.prototype=k(Dt.prototype,{__class__:Ot});var ye=f.core.MeshData=function(t,n,r,s){this.faces=t,this.points=n,this.normals=r,this.uvs=s};p["verb.core.MeshData"]=ye,ye.__name__=["verb","core","MeshData"],ye.empty=function(){return new ye([],[],[],[])},ye.__super__=Dt,ye.prototype=k(Dt.prototype,{__class__:ye});var Un=f.core.PolylineData=function(t,n){this.points=t,this.params=n};p["verb.core.PolylineData"]=Un,Un.__name__=["verb","core","PolylineData"],Un.__super__=Dt,Un.prototype=k(Dt.prototype,{__class__:Un});var Rn=f.core.VolumeData=function(t,n,r,s,o,h,c){this.degreeU=t,this.degreeV=n,this.degreeW=r,this.knotsU=s,this.knotsV=o,this.knotsW=h,this.controlPoints=c};p["verb.core.VolumeData"]=Rn,Rn.__name__=["verb","core","VolumeData"],Rn.__super__=Dt,Rn.prototype=k(Dt.prototype,{__class__:Rn});var qt=f.core.Pair=function(t,n){this.item0=t,this.item1=n};p["verb.core.Pair"]=qt,qt.__name__=["verb","core","Pair"],qt.prototype={__class__:qt};var re=f.core.Interval=function(t,n){this.min=t,this.max=n};p["verb.core.Interval"]=re,re.__name__=["verb","core","Interval"],re.prototype={__class__:re};var $e=f.core.CurveCurveIntersection=function(t,n,r,s){this.point0=t,this.point1=n,this.u0=r,this.u1=s};p["verb.core.CurveCurveIntersection"]=$e,$e.__name__=["verb","core","CurveCurveIntersection"],$e.prototype={__class__:$e};var Vn=f.core.CurveSurfaceIntersection=function(t,n,r,s){this.u=t,this.uv=n,this.curvePoint=r,this.surfacePoint=s};p["verb.core.CurveSurfaceIntersection"]=Vn,Vn.__name__=["verb","core","CurveSurfaceIntersection"],Vn.prototype={__class__:Vn};var Oe=f.core.MeshIntersectionPoint=function(t,n,r,s,o){this.visited=!1,this.adj=null,this.opp=null,this.uv0=t,this.uv1=n,this.point=r,this.faceIndex0,this.faceIndex1};p["verb.core.MeshIntersectionPoint"]=Oe,Oe.__name__=["verb","core","MeshIntersectionPoint"],Oe.prototype={__class__:Oe};var Dn=f.core.PolylineMeshIntersection=function(t,n,r,s,o){this.point=t,this.u=n,this.uv=r,this.polylineIndex=s,this.faceIndex=o};p["verb.core.PolylineMeshIntersection"]=Dn,Dn.__name__=["verb","core","PolylineMeshIntersection"],Dn.prototype={__class__:Dn};var Fn=f.core.SurfaceSurfaceIntersectionPoint=function(t,n,r,s){this.uv0=t,this.uv1=n,this.point=r,this.dist=s};p["verb.core.SurfaceSurfaceIntersectionPoint"]=Fn,Fn.__name__=["verb","core","SurfaceSurfaceIntersectionPoint"],Fn.prototype={__class__:Fn};var On=f.core.TriSegmentIntersection=function(t,n,r,s){this.point=t,this.s=n,this.t=r,this.p=s};p["verb.core.TriSegmentIntersection"]=On,On.__name__=["verb","core","TriSegmentIntersection"],On.prototype={__class__:On};var _n=f.core.CurveTriPoint=function(t,n,r){this.u=t,this.point=n,this.uv=r};p["verb.core.CurveTriPoint"]=_n,_n.__name__=["verb","core","CurveTriPoint"],_n.prototype={__class__:_n};var fe=function(t,n,r,s,o){o==null&&(o=!1),s==null&&(s=-1),this.uv=r,this.point=t,this.normal=n,this.id=s,this.degen=o};p["verb.core.SurfacePoint"]=fe,fe.__name__=["verb","core","SurfacePoint"],fe.fromUv=function(t,n){return new fe(null,null,[t,n])},fe.prototype={__class__:fe};var ar=f.core.CurvePoint=function(t,n){this.u=t,this.pt=n};p["verb.core.CurvePoint"]=ar,ar.__name__=["verb","core","CurvePoint"],ar.prototype={__class__:ar};var qn=f.core.KdTree=function(t,n){this.dim=3,this.points=t,this.distanceFunction=n,this.dim=t[0].point.length,this.root=this.buildTree(t,0,null)};p["verb.core.KdTree"]=qn,qn.__name__=["verb","core","KdTree"],qn.prototype={buildTree:function(t,n,r){var s=n%this.dim,o,h;return t.length==0?null:t.length==1?new fn(t[0],s,r):(t.sort(function(c,v){var d=c.point[s]-v.point[s];return d==0?0:d>0?1:-1}),o=Math.floor(t.length/2),h=new fn(t[o],s,r),h.left=this.buildTree(t.slice(0,o),n+1,h),h.right=this.buildTree(t.slice(o+1),n+1,h),h)},nearest:function(t,n,r){var s=this,o=new Gn(function(w){return-w.item1}),h,c=null;c=function(w){for(var A,M=w.dimension,z=s.distanceFunction(t,w.kdPoint.point),I,C=[],L=0,B=s.dim;L<B;)L++,C.push(0);I=C;for(var T,R,F=function(q,J){o.push(new qt(q,J)),o.size()>n&&o.pop()},X=0,D=s.dim;X<D;){var V=X++;V==w.dimension?I[V]=t[V]:I[V]=w.kdPoint.point[V]}if(T=s.distanceFunction(I,w.kdPoint.point),w.right==null&&w.left==null){(o.size()<n||z<o.peek().item1)&&F(w,z);return}w.right==null?A=w.left:w.left==null?A=w.right:t[M]<w.kdPoint.point[M]?A=w.left:A=w.right,c(A),(o.size()<n||z<o.peek().item1)&&F(w,z),(o.size()<n||Math.abs(T)<o.peek().item1)&&(A==w.left?R=w.right:R=w.left,R!=null&&c(R))},h=c;for(var v=0;v<n;)v++,o.push(new qt(null,r));h(this.root);for(var d=[],m=0;m<n;){var b=m++;o.content[b].item0!=null&&d.push(new qt(o.content[b].item0.kdPoint,o.content[b].item1))}return d},__class__:qn};var Gn=function(t){this.content=[],this.scoreFunction=t};p["verb.core.BinaryHeap"]=Gn,Gn.__name__=["verb","core","BinaryHeap"],Gn.prototype={push:function(t){this.content.push(t),this.bubbleUp(this.content.length-1)},pop:function(){var t=this.content[0],n=this.content.pop();return this.content.length>0&&(this.content[0]=n,this.sinkDown(0)),t},peek:function(){return this.content[0]},remove:function(t){for(var n=this.content.length,r=0;r<n;){var s=r++;if(this.content[s]==t){var o=this.content.pop();s!=n-1&&(this.content[s]=o,this.scoreFunction(o)<this.scoreFunction(t)?this.bubbleUp(s):this.sinkDown(s));return}}throw new j("Node not found.")},size:function(){return this.content.length},bubbleUp:function(t){for(var n=this.content[t];t>0;){var r=Math.floor((t+1)/2)-1,s=this.content[r];if(this.scoreFunction(n)<this.scoreFunction(s))this.content[r]=n,this.content[t]=s,t=r;else break}},sinkDown:function(t){for(var n=this.content.length,r=this.content[t],s=this.scoreFunction(r);;){var o=(t+1)*2,h=o-1,c=-1,v=0;if(h<n){var d=this.content[h];v=this.scoreFunction(d),v<s&&(c=h)}if(o<n){var m=this.content[o],b=this.scoreFunction(m);b<(c==-1?s:v)&&(c=o)}if(c!=-1)this.content[t]=this.content[c],this.content[c]=r,t=c;else break}},__class__:Gn};var dn=f.core.KdPoint=function(t,n){this.point=t,this.obj=n};p["verb.core.KdPoint"]=dn,dn.__name__=["verb","core","KdPoint"],dn.prototype={__class__:dn};var fn=f.core.KdNode=function(t,n,r){this.kdPoint=t,this.left=null,this.right=null,this.parent=r,this.dimension=n};p["verb.core.KdNode"]=fn,fn.__name__=["verb","core","KdNode"],fn.prototype={__class__:fn};var Te=function(){};p["verb.eval.IBoundingBoxTree"]=Te,Te.__name__=["verb","eval","IBoundingBoxTree"],Te.prototype={__class__:Te};var ke=function(t,n){this._boundingBox=null,this._curve=t,n==null&&(n=l.domain(this._curve.knots)/64),this._knotTol=n};p["verb.core.LazyCurveBoundingBoxTree"]=ke,ke.__name__=["verb","core","LazyCurveBoundingBoxTree"],ke.__interfaces__=[Te],ke.prototype={split:function(){var t=G.first(this._curve.knots),n=G.last(this._curve.knots),r=n-t,s=Yt.curveSplit(this._curve,(n+t)/2+r*.1*Math.random());return new qt(new ke(s[0],this._knotTol),new ke(s[1],this._knotTol))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=new ue(S.dehomogenize1d(this._curve.controlPoints))),this._boundingBox},yield:function(){return this._curve},indivisible:function(t){return l.domain(this._curve.knots)<this._knotTol},empty:function(){return!1},__class__:ke};var Ie=function(t,n){if(this._boundingBox=null,this._mesh=t,n==null){for(var r=[],s=0,o=t.faces.length;s<o;){var h=s++;r.push(h)}n=r}this._faceIndices=n};p["verb.core.LazyMeshBoundingBoxTree"]=Ie,Ie.__name__=["verb","core","LazyMeshBoundingBoxTree"],Ie.__interfaces__=[Te],Ie.prototype={split:function(){var t=Gt.sortTrianglesOnLongestAxis(this.boundingBox(),this._mesh,this._faceIndices),n=G.left(t),r=G.right(t);return new qt(new Ie(this._mesh,n),new Ie(this._mesh,r))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=Gt.makeMeshAabb(this._mesh,this._faceIndices)),this._boundingBox},yield:function(){return this._faceIndices[0]},indivisible:function(t){return this._faceIndices.length==1},empty:function(){return this._faceIndices.length==0},__class__:Ie};var Ee=function(t,n){this._boundingBox=null,this._polyline=t,n==null&&(n=new re(0,t.points.length!=0?t.points.length-1:0)),this._interval=n};p["verb.core.LazyPolylineBoundingBoxTree"]=Ee,Ee.__name__=["verb","core","LazyPolylineBoundingBoxTree"],Ee.__interfaces__=[Te],Ee.prototype={split:function(){var t=this._interval.min,n=this._interval.max,r=t+Math.ceil((n-t)/2),s=new re(t,r),o=new re(r,n);return new qt(new Ee(this._polyline,s),new Ee(this._polyline,o))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=new ue(this._polyline.points)),this._boundingBox},yield:function(){return this._interval.min},indivisible:function(t){return this._interval.max-this._interval.min==1},empty:function(){return this._interval.max-this._interval.min==0},__class__:Ee};var qe=function(t,n,r,s){n==null&&(n=!1),this._boundingBox=null,this._surface=t,this._splitV=n,r==null&&(r=l.domain(t.knotsU)/16),s==null&&(s=l.domain(t.knotsV)/16),this._knotTolU=r,this._knotTolV=s};p["verb.core.LazySurfaceBoundingBoxTree"]=qe,qe.__name__=["verb","core","LazySurfaceBoundingBoxTree"],qe.__interfaces__=[Te],qe.prototype={split:function(){var t,n;this._splitV?(t=G.first(this._surface.knotsV),n=G.last(this._surface.knotsV)):(t=G.first(this._surface.knotsU),n=G.last(this._surface.knotsU));var r=(t+n)/2,s=Yt.surfaceSplit(this._surface,r,this._splitV);return new qt(new qe(s[0],!this._splitV,this._knotTolU,this._knotTolV),new qe(s[1],!this._splitV,this._knotTolU,this._knotTolV))},boundingBox:function(){if(this._boundingBox==null){this._boundingBox=new ue;for(var t=0,n=this._surface.controlPoints;t<n.length;){var r=n[t];++t,this._boundingBox.addRange(S.dehomogenize1d(r))}}return this._boundingBox},yield:function(){return this._surface},indivisible:function(t){return l.domain(this._surface.knotsV)<this._knotTolV&&l.domain(this._surface.knotsU)<this._knotTolU},empty:function(){return!1},__class__:qe};var At=f.core.Mat=function(){};p["verb.core.Mat"]=At,At.__name__=["verb","core","Mat"],At.mul=function(t,n){for(var r=[],s=0,o=n.length;s<o;){var h=s++;r.push(l.mul(t,n[h]))}return r},At.mult=function(t,n){var r,s,o,h,c,v,d,m;r=t.length,s=n.length,o=n[0].length,h=[];for(var b=r-1,w=0,A=0;b>=0;){for(c=[],v=t[b],A=o-1;A>=0;){for(d=v[s-1]*n[s-1][A],w=s-2;w>=1;)m=w-1,d+=v[w]*n[w][A]+v[m]*n[m][A],w-=2;w==0&&(d+=v[0]*n[0][A]),c[A]=d,A--}h[b]=c,b--}return h},At.add=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.add(t[h],n[h]))}return r},At.div=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.div(t[h],n))}return r},At.sub=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.sub(t[h],n[h]))}return r},At.dot=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.dot(t[h],n))}return r},At.identity=function(t){for(var n=l.zeros2d(t,t),r=0;r<t;){var s=r++;n[s][s]=1}return n},At.transpose=function(t){if(t.length==0)return[];for(var n=[],r=0,s=t[0].length;r<s;){var o=r++;n.push(function(h){for(var c,v=[],d=0,m=t.length;d<m;){var b=d++;v.push(t[b][o])}return c=v,c}())}return n},At.solve=function(t,n){return At.LUsolve(At.LU(t),n)},At.LUsolve=function(t,n){var r,s,o=t.LU,h=o.length,c=n.slice(),v=t.P,d,m,b;for(r=h-1;r!=-1;)c[r]=n[r],--r;for(r=0;r<h;){for(d=v[r],v[r]!=r&&(b=c[r],c[r]=c[d],c[d]=b),m=o[r],s=0;s<r;)c[r]-=c[s]*m[s],++s;++r}for(r=h-1;r>=0;){for(m=o[r],s=r+1;s<h;)c[r]-=c[s]*m[s],++s;c[r]/=m[r],--r}return c},At.LU=function(t){for(var n,r,s,o,h,c,v,d,m,b=[],w=0,A=t.length;w<A;){var M=w++;b.push(t[M].slice())}t=b;var z=t.length,I=z-1,C=[];for(s=0;s<z;){for(v=s,c=t[s],m=Math.abs(c[s]),r=s+1;r<z;)o=Math.abs(t[r][s]),m<o&&(m=o,v=r),++r;for(C[s]=v,v!=s&&(t[s]=t[v],t[v]=c,c=t[s]),h=c[s],n=s+1;n<z;)t[n][s]/=h,++n;for(n=s+1;n<z;){for(d=t[n],r=s+1;r<I;)d[r]-=d[s]*c[r],++r,d[r]-=d[s]*c[r],++r;r==I&&(d[r]-=d[s]*c[r]),++n}++s}return new Kn(t,C)};var Kn=function(t,n){this.LU=t,this.P=n};p["verb.core._Mat.LUDecomp"]=Kn,Kn.__name__=["verb","core","_Mat","LUDecomp"],Kn.prototype={__class__:Kn};var Gt=f.core.Mesh=function(){};p["verb.core.Mesh"]=Gt,Gt.__name__=["verb","core","Mesh"],Gt.getTriangleNorm=function(t,n){var r=t[n[0]],s=t[n[1]],o=t[n[2]],h=l.sub(s,r),c=l.sub(o,r),v=l.cross(h,c);return l.mul(1/l.norm(v),v)},Gt.makeMeshAabb=function(t,n){for(var r=new ue,s=0;s<n.length;){var o=n[s];++s,r.add(t.points[t.faces[o][0]]),r.add(t.points[t.faces[o][1]]),r.add(t.points[t.faces[o][2]])}return r},Gt.sortTrianglesOnLongestAxis=function(t,n,r){for(var s=t.getLongestAxis(),o=[],h=0;h<r.length;){var c=r[h];++h;var v=Gt.getMinCoordOnAxis(n.points,n.faces[c],s);o.push(new qt(v,c))}o.sort(function(A,M){var z=A.item0,I=M.item0;return z==I?0:z>I?1:-1});for(var d=[],m=0,b=o.length;m<b;){var w=m++;d.push(o[w].item1)}return d},Gt.getMinCoordOnAxis=function(t,n,r){for(var s=1/0,o=0;o<3;){var h=o++,c=t[n[h]][r];c<s&&(s=c)}return s},Gt.getTriangleCentroid=function(t,n){for(var r=[0,0,0],s=0;s<3;)for(var o=s++,h=0;h<3;){var c=h++;r[c]+=t[n[o]][c]}for(var v=0;v<3;){var d=v++;r[d]/=3}return r},Gt.triangleUVFromPoint=function(t,n,r){var s=t.faces[n],o=t.points[s[0]],h=t.points[s[1]],c=t.points[s[2]],v=t.uvs[s[0]],d=t.uvs[s[1]],m=t.uvs[s[2]],b=l.sub(o,r),w=l.sub(h,r),A=l.sub(c,r),M=l.norm(l.cross(l.sub(o,h),l.sub(o,c))),z=l.norm(l.cross(w,A))/M,I=l.norm(l.cross(A,b))/M,C=l.norm(l.cross(b,w))/M;return l.add(l.mul(z,v),l.add(l.mul(I,d),l.mul(C,m)))};var Ge=function(t,n){if(this._empty=!1,this._face=-1,n==null){for(var r=[],s=0,o=t.faces.length;s<o;){var h=s++;r.push(h)}n=r}if(this._boundingBox=Gt.makeMeshAabb(t,n),n.length<1){this._empty=!0;return}else if(n.length<2){this._face=n[0];return}var c=Gt.sortTrianglesOnLongestAxis(this._boundingBox,t,n),v=G.left(c),d=G.right(c);this._children=new qt(new Ge(t,v),new Ge(t,d))};p["verb.core.MeshBoundingBoxTree"]=Ge,Ge.__name__=["verb","core","MeshBoundingBoxTree"],Ge.__interfaces__=[Te],Ge.prototype={split:function(){return this._children},boundingBox:function(){return this._boundingBox},yield:function(){return this._face},indivisible:function(t){return this._children==null},empty:function(){return this._empty},__class__:Ge};var we=f.core.Minimizer=function(){};p["verb.core.Minimizer"]=we,we.__name__=["verb","core","Minimizer"],we.uncmin=function(t,n,r,s,o){r==null&&(r=1e-8),s==null&&(s=function(X){return we.numericalGradient(t,X)}),o==null&&(o=1e3),n=n.slice(0);var h=n.length,c=t(n),v=c,d;if(isNaN(c))throw new j("uncmin: f(x0) is a NaN!");r=Math.max(r,tt.EPSILON);var m,b,w,A=At.identity(h),M=0,z=[],I,C,L,B,T,R,F="";for(b=s(n);M<o;){if(!l.all(l.finite(b))){F="Gradient has Infinity or NaN";break}if(m=l.neg(At.dot(A,b)),!l.all(l.finite(m))){F="Search direction has Infinity or NaN";break}if(R=l.norm(m),R<r){F="Newton step smaller than tol";break}for(T=1,d=l.dot(b,m),I=n;M<o&&!(T*R<r);){if(z=l.mul(T,m),I=l.add(n,z),v=t(I),v-c>=.1*T*d||isNaN(v)){T*=.5,++M;continue}break}if(T*R<r){F="Line search step size smaller than tol";break}if(M==o){F="maxit reached during line search";break}w=s(I),C=l.sub(w,b),B=l.dot(C,z),L=At.dot(A,C),A=At.sub(At.add(A,At.mul((B+l.dot(C,L))/(B*B),we.tensor(z,z))),At.div(At.add(we.tensor(L,z),we.tensor(z,L)),B)),n=I,c=v,b=w,++M}return new jn(n,c,b,A,M,F)},we.numericalGradient=function(t,n){var r=n.length,s=t(n);if(s==NaN)throw new j("gradient: f(x) is a NaN!");for(var o=n.slice(0),h,c,v=[],d,m=.001,b,w,A,M=0,z,I,C,L=0;L<r;)for(var B=L++,T=Math.max(1e-6*s,1e-8);;){if(++M,M>20)throw new j("Numerical gradient fails");if(o[B]=n[B]+T,h=t(o),o[B]=n[B]-T,c=t(o),o[B]=n[B],isNaN(h)||isNaN(c)){T/=16;continue}if(v[B]=(h-c)/(2*T),b=n[B]-T,w=n[B],A=n[B]+T,z=(h-s)/T,I=(s-c)/T,C=l.max([Math.abs(v[B]),Math.abs(s),Math.abs(h),Math.abs(c),Math.abs(b),Math.abs(w),Math.abs(A),1e-8]),d=Math.min(l.max([Math.abs(z-v[B]),Math.abs(I-v[B]),Math.abs(z-I)])/C,T/C),d>m)T/=16;else break}return v},we.tensor=function(t,n){for(var r=t.length,s=n.length,o=[],h,c,v=r-1;v>=0;){h=[],c=t[v];for(var d=s-1;d>=3;)h[d]=c*n[d],--d,h[d]=c*n[d],--d,h[d]=c*n[d],--d,h[d]=c*n[d],--d;for(;d>=0;)h[d]=c*n[d],--d;o[v]=h,v--}return o};var jn=function(t,n,r,s,o,h){this.solution=t,this.value=n,this.gradient=r,this.invHessian=s,this.iterations=o,this.message=h};p["verb.core.MinimizationResult"]=jn,jn.__name__=["verb","core","MinimizationResult"],jn.prototype={__class__:jn};var mn=function(){};p["verb.core.ISerializable"]=mn,mn.__name__=["verb","core","ISerializable"],mn.prototype={__class__:mn};var Cr=f.core.Deserializer=function(){};p["verb.core.Deserializer"]=Cr,Cr.__name__=["verb","core","Deserializer"],Cr.deserialize=function(t){var n=new Vt(t),r=n.unserialize();return r};var ce=f.core.Trig=function(){};p["verb.core.Trig"]=ce,ce.__name__=["verb","core","Trig"],ce.isPointInPlane=function(t,n,r){return Math.abs(l.dot(l.sub(t,n.origin),n.normal))<r},ce.distToSegment=function(t,n,r){var s=ce.segmentClosestPoint(n,t,r,0,1);return l.dist(n,s.pt)},ce.rayClosestPoint=function(t,n,r){var s=l.sub(t,n),o=l.dot(s,r),h=l.add(n,l.mul(o,r));return h},ce.distToRay=function(t,n,r){var s=ce.rayClosestPoint(t,n,r),o=l.sub(s,t);return l.norm(o)},ce.threePointsAreFlat=function(t,n,r,s){var o=l.sub(n,t),h=l.sub(r,t),c=l.cross(o,h),v=l.dot(c,c);return v<s},ce.segmentClosestPoint=function(t,n,r,s,o){var h=l.sub(r,n),c=l.norm(h);if(c<tt.EPSILON)return{u:s,pt:n};var v=n,d=l.mul(1/c,h),m=l.sub(t,v),b=l.dot(m,d);return b<0?{u:s,pt:n}:b>c?{u:o,pt:r}:{u:s+(o-s)*b/c,pt:l.add(v,l.mul(b,d))}};var l=f.core.Vec=function(){};p["verb.core.Vec"]=l,l.__name__=["verb","core","Vec"],l.angleBetween=function(t,n){return Math.acos(l.dot(t,n)/(l.norm(t)*l.norm(n)))},l.positiveAngleBetween=function(t,n,r){var s=l.cross(t,n),o=l.norm(t),h=l.norm(n),c=o*h,v=l.dot(t,n),d=l.norm(s)/c,m=v/c,b=Math.atan2(d,m),w=l.dot(r,s);return Math.abs(w)<tt.EPSILON||w>0?b:-b},l.signedAngleBetween=function(t,n,r){var s=l.cross(t,n),o=l.norm(t),h=l.norm(n),c=o*h,v=l.dot(t,n),d=l.norm(s)/c,m=v/c,b=Math.atan2(d,m),w=l.dot(r,s);return w>0?b:2*Math.PI-b},l.angleBetweenNormalized2d=function(t,n){var r=t[0]*n[1]-t[1]*n[0];return Math.atan2(r,l.dot(t,n))},l.domain=function(t){return G.last(t)-G.first(t)},l.range=function(t){for(var n=[],r=0,s=0;s<t;)s++,n.push(r),r+=1;return n},l.span=function(t,n,r){if(r==null)return[];if(r<tt.EPSILON)return[];if(t>n&&r>0)return[];if(n>t&&r<0)return[];for(var s=[],o=t;o<=n;)s.push(o),o+=r;return s},l.neg=function(t){return t.map(function(n){return-n})},l.min=function(t){return K.fold(t,function(n,r){return Math.min(n,r)},1/0)},l.max=function(t){return K.fold(t,function(n,r){return Math.max(n,r)},-1/0)},l.all=function(t){return K.fold(t,function(n,r){return r&&n},!0)},l.finite=function(t){return t.map(function(n){return isFinite(n)})},l.onRay=function(t,n,r){return l.add(t,l.mul(r,n))},l.lerp=function(t,n,r){return l.add(l.mul(t,n),l.mul(1-t,r))},l.normalized=function(t){return l.div(t,l.norm(t))},l.cross=function(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]},l.dist=function(t,n){return l.norm(l.sub(t,n))},l.distSquared=function(t,n){return l.normSquared(l.sub(t,n))},l.sum=function(t){return K.fold(t,function(n,r){return r+n},0)},l.addAll=function(t){var n=be(t)();if(!n.hasNext())return null;var r=n.next().length;return K.fold(t,function(s,o){return l.add(o,s)},l.rep(r,0))},l.addAllMutate=function(t){for(var n=t[0],r=1,s=t.length;r<s;){var o=r++;l.addMutate(n,t[o])}},l.addMulMutate=function(t,n,r){for(var s=0,o=t.length;s<o;){var h=s++;t[h]=t[h]+n*r[h]}},l.subMulMutate=function(t,n,r){for(var s=0,o=t.length;s<o;){var h=s++;t[h]=t[h]-n*r[h]}},l.addMutate=function(t,n){for(var r=0,s=t.length;r<s;){var o=r++;t[o]=t[o]+n[o]}},l.subMutate=function(t,n){for(var r=0,s=t.length;r<s;){var o=r++;t[o]=t[o]-n[o]}},l.mulMutate=function(t,n){for(var r=0,s=n.length;r<s;){var o=r++;n[o]=n[o]*t}},l.norm=function(t){var n=l.normSquared(t);return n!=0?Math.sqrt(n):n},l.normSquared=function(t){return K.fold(t,function(n,r){return r+n*n},0)},l.rep=function(t,n){for(var r=[],s=0;s<t;)s++,r.push(n);return r},l.zeros1d=function(t){for(var n=[],r=0;r<t;)r++,n.push(0);return n},l.zeros2d=function(t,n){for(var r=[],s=0;s<t;)s++,r.push(l.zeros1d(n));return r},l.zeros3d=function(t,n,r){for(var s=[],o=0;o<t;)o++,s.push(l.zeros2d(n,r));return s},l.dot=function(t,n){for(var r=0,s=0,o=t.length;s<o;){var h=s++;r+=t[h]*n[h]}return r},l.add=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]+n[h])}return r},l.mul=function(t,n){for(var r=[],s=0,o=n.length;s<o;){var h=s++;r.push(t*n[h])}return r},l.div=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]/n)}return r},l.sub=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]-n[h])}return r},l.isZero=function(t){for(var n=0,r=t.length;n<r;){var s=n++;if(Math.abs(t[s])>tt.TOLERANCE)return!1}return!0},l.sortedSetUnion=function(t,n){for(var r=[],s=0,o=0;s<t.length||o<n.length;){if(s>=t.length){r.push(n[o]),o++;continue}else if(o>=n.length){r.push(t[s]),s++;continue}var h=t[s]-n[o];if(Math.abs(h)<tt.EPSILON){r.push(t[s]),s++,o++;continue}if(h>0){r.push(n[o]),o++;continue}r.push(t[s]),s++}return r},l.sortedSetSub=function(t,n){for(var r=[],s=0,o=0;s<t.length;){if(o>=n.length){r.push(t[s]),s++;continue}if(Math.abs(t[s]-n[o])<tt.EPSILON){s++,o++;continue}r.push(t[s]),s++}return r};var _t=f.eval.Analyze=function(){};p["verb.eval.Analyze"]=_t,_t.__name__=["verb","eval","Analyze"],_t.knotMultiplicities=function(t){for(var n=[new gn(t[0],0)],r=n[0],s=0;s<t.length;){var o=t[s];++s,Math.abs(o-r.knot)>tt.EPSILON&&(r=new gn(o,0),n.push(r)),r.inc()}return n},_t.isRationalSurfaceClosed=function(t,n){n==null&&(n=!0);var r;n?r=t.controlPoints:r=At.transpose(t.controlPoints);for(var s=0,o=r[0].length;s<o;){var h=s++,c=l.dist(G.first(r)[h],G.last(r)[h])<tt.EPSILON;if(!c)return!1}return!0},_t.rationalSurfaceClosestPoint=function(t,n){var r=_t.rationalSurfaceClosestParam(t,n);return S.rationalSurfacePoint(t,r[0],r[1])},_t.rationalSurfaceClosestParam=function(t,n){for(var r=5,s=0,o,h=1e-4,c=5e-4,v,d=t.knotsU[0],m=G.last(t.knotsU),b=t.knotsV[0],w=G.last(t.knotsV),A=_t.isRationalSurfaceClosed(t),M=_t.isRationalSurfaceClosed(t,!1),z,I=Pt.rationalSurfaceAdaptive(t,new Ke),C=1/0,L=0,B=I.points.length;L<B;){var T=L++,R=I.points[T],F=l.normSquared(l.sub(n,R));F<C&&(C=F,z=I.uvs[T])}for(var X=function(Et){return S.rationalSurfaceDerivatives(t,Et[0],Et[1],2)},D=function(Et,Bt,Ct){var Ut=Bt[1][0],ie=Bt[0][1],ge=Bt[2][0],ne=Bt[0][2],$t=Bt[1][1],se=Bt[1][1],_e=l.dot(Ut,Ct),xe=l.dot(ie,Ct),Ne=[-_e,-xe],Ae=l.dot(Ut,Ut)+l.dot(ge,Ct),Me=l.dot(Ut,ie)+l.dot($t,Ct),Pe=l.dot(Ut,ie)+l.dot(se,Ct),Re=l.dot(ie,ie)+l.dot(ne,Ct),bn=[[Ae,Me],[Pe,Re]],en=At.solve(bn,Ne);return l.add(en,Et)};s<r;){o=X(z),v=l.sub(o[0][0],n);var V=l.norm(v),q=l.dot(o[1][0],v),J=l.norm(o[1][0])*V,$=l.dot(o[0][1],v),nt=l.norm(o[0][1])*V,st=q/J,rt=$/nt,at=V<h,et=st<c,ot=rt<c;if(at&&et&&ot)return z;var O=D(z,o,v);O[0]<d?A?O=[m-(O[0]-d),O[1]]:O=[d+tt.EPSILON,O[1]]:O[0]>m&&(A?O=[d+(O[0]-m),O[1]]:O=[m-tt.EPSILON,O[1]]),O[1]<b?M?O=[O[0],w-(O[1]-b)]:O=[O[0],b+tt.EPSILON]:O[1]>w&&(M?O=[O[0],b+(O[0]-w)]:O=[O[0],w-tt.EPSILON]);var ut=l.norm(l.mul(O[0]-z[0],o[1][0])),gt=l.norm(l.mul(O[1]-z[1],o[0][1]));if(ut+gt<h)return z;z=O,s++}return z},_t.rationalCurveClosestPoint=function(t,n){return S.rationalCurvePoint(t,_t.rationalCurveClosestParam(t,n))},_t.rationalCurveClosestParam=function(t,n){for(var r=1/0,s=0,o=Pt.rationalCurveRegularSample(t,t.controlPoints.length*t.degree,!0),h=0,c=o.length-1;h<c;){var v=h++,d=o[v][0],m=o[v+1][0],b=o[v].slice(1),w=o[v+1].slice(1),A=ce.segmentClosestPoint(n,b,w,d,m),M=l.norm(l.sub(n,A.pt));M<r&&(r=M,s=A.u)}for(var z=5,I=0,C,L=1e-4,B=5e-4,T,R=t.knots[0],F=G.last(t.knots),X=l.normSquared(l.sub(t.controlPoints[0],G.last(t.controlPoints)))<tt.EPSILON,D=s,V=function(O){return S.rationalCurveDerivatives(t,O,2)},q=function(O,ut,gt){var Et=l.dot(ut[1],gt),Bt=l.dot(ut[2],gt),Ct=l.dot(ut[1],ut[1]),Ut=Bt+Ct;return O-Et/Ut};I<z;){C=V(D),T=l.sub(C[0],n);var J=l.norm(T),$=l.dot(C[1],T),nt=l.norm(C[1])*J,st=$/nt,rt=J<L,at=Math.abs(st)<B;if(rt&&at)return D;var et=q(D,C,T);et<R?X?et=F-(et-R):et=R:et>F&&(X?et=R+(et-F):et=F);var ot=l.norm(l.mul(et-D,C[1]));if(ot<L)return D;D=et,I++}return D},_t.rationalCurveParamAtArcLength=function(t,n,r,s,o){if(r==null&&(r=.001),n<tt.EPSILON)return t.knots[0];var h;s!=null?h=s:h=vt.decomposeCurveIntoBeziers(t);var c=0;h[c];var v=-tt.EPSILON,d;for(o!=null?d=o:d=[];v<n&&c<h.length;){if(c<d.length?d[c]=d[c]:d[c]=_t.rationalBezierCurveArcLength(t),v+=d[c],n<v+tt.EPSILON)return _t.rationalBezierCurveParamAtArcLength(t,n,r,d[c]);c++}return-1},_t.rationalBezierCurveParamAtArcLength=function(t,n,r,s){if(n<0)return t.knots[0];var o;if(s!=null?o=s:o=_t.rationalBezierCurveArcLength(t),n>o)return G.last(t.knots);var h=t.knots[0],c=0,v=G.last(t.knots),d=o,m=0,b=0,w;for(r!=null?w=r:w=tt.TOLERANCE*2;d-c>w;)m=(h+v)/2,b=_t.rationalBezierCurveArcLength(t,m),b>n?(v=m,d=b):(h=m,c=b);return(h+v)/2},_t.rationalCurveArcLength=function(t,n,r){r==null&&(r=16),n==null?n=G.last(t.knots):n=n;for(var s=vt.decomposeCurveIntoBeziers(t),o=0,h=s[0],c=0;o<s.length&&h.knots[0]+tt.EPSILON<n;){var v=Math.min(G.last(h.knots),n);c+=_t.rationalBezierCurveArcLength(h,v,r),h=s[++o]}return c},_t.rationalBezierCurveArcLength=function(t,n,r){r==null&&(r=16);var s;n==null?s=G.last(t.knots):s=n;for(var o=(s-t.knots[0])/2,h=0,c=t.degree+r,v,d,m=0;m<c;){var b=m++;v=o*_t.Tvalues[c][b]+o+t.knots[0],d=S.rationalCurveDerivatives(t,v,1),h+=_t.Cvalues[c][b]*l.norm(d[1])}return o*h};var gn=f.eval.KnotMultiplicity=function(t,n){this.knot=t,this.mult=n};p["verb.eval.KnotMultiplicity"]=gn,gn.__name__=["verb","eval","KnotMultiplicity"],gn.prototype={inc:function(){this.mult++},__class__:gn};var me=f.eval.Check=function(){};p["verb.eval.Check"]=me,me.__name__=["verb","eval","Check"],me.isValidKnotVector=function(t,n){if(t.length==0||t.length<(n+1)*2)return!1;for(var r=G.first(t),s=0,o=n+1;s<o;){var h=s++;if(Math.abs(t[h]-r)>tt.EPSILON)return!1}r=G.last(t);for(var c=t.length-n-1,v=t.length;c<v;){var d=c++;if(Math.abs(t[d]-r)>tt.EPSILON)return!1}return me.isNonDecreasing(t)},me.isNonDecreasing=function(t){for(var n=G.first(t),r=0,s=t.length;r<s;){var o=r++;if(t[o]<n-tt.EPSILON)return!1;n=t[o]}return!0},me.isValidNurbsCurveData=function(t){if(t.controlPoints==null)throw new j("Control points array cannot be null!");if(t.degree==null)throw new j("Degree cannot be null!");if(t.degree<1)throw new j("Degree must be greater than 1!");if(t.knots==null)throw new j("Knots cannot be null!");if(t.knots.length!=t.controlPoints.length+t.degree+1)throw new j("controlPoints.length + degree + 1 must equal knots.length!");if(!me.isValidKnotVector(t.knots,t.degree))throw new j("Invalid knot vector format! Should begin with degree + 1 repeats and end with degree + 1 repeats!");return t},me.isValidNurbsSurfaceData=function(t){if(t.controlPoints==null)throw new j("Control points array cannot be null!");if(t.degreeU==null)throw new j("DegreeU cannot be null!");if(t.degreeV==null)throw new j("DegreeV cannot be null!");if(t.degreeU<1)throw new j("DegreeU must be greater than 1!");if(t.degreeV<1)throw new j("DegreeV must be greater than 1!");if(t.knotsU==null)throw new j("KnotsU cannot be null!");if(t.knotsV==null)throw new j("KnotsV cannot be null!");if(t.knotsU.length!=t.controlPoints.length+t.degreeU+1)throw new j("controlPointsU.length + degreeU + 1 must equal knotsU.length!");if(t.knotsV.length!=t.controlPoints[0].length+t.degreeV+1)throw new j("controlPointsV.length + degreeV + 1 must equal knotsV.length!");if(!me.isValidKnotVector(t.knotsU,t.degreeU)||!me.isValidKnotVector(t.knotsV,t.degreeV))throw new j("Invalid knot vector format! Should begin with degree + 1 repeats and end with degree + 1 repeats!");return t};var Yt=f.eval.Divide=function(){};p["verb.eval.Divide"]=Yt,Yt.__name__=["verb","eval","Divide"],Yt.surfaceSplit=function(t,n,r){r==null&&(r=!1);var s,o,h;r?(h=t.controlPoints,s=t.knotsV,o=t.degreeV):(h=At.transpose(t.controlPoints),s=t.knotsU,o=t.degreeU);for(var c,v=[],d=0,m=o+1;d<m;)d++,v.push(n);c=v;for(var b=[],w=[],A=S.knotSpan(o,n,s),M=null,z=0;z<h.length;){var I=h[z];++z,M=vt.curveKnotRefine(new It(o,s,I),c),b.push(M.controlPoints.slice(0,A+1)),w.push(M.controlPoints.slice(A+1))}var C=M.knots.slice(0,A+o+2),L=M.knots.slice(A+1);return r?[new Ot(t.degreeU,o,t.knotsU.slice(),C,b),new Ot(t.degreeU,o,t.knotsU.slice(),L,w)]:(b=At.transpose(b),w=At.transpose(w),[new Ot(o,t.degreeV,C,t.knotsV.slice(),b),new Ot(o,t.degreeV,L,t.knotsV.slice(),w)])},Yt.curveSplit=function(t,n){var r=t.degree;t.controlPoints;for(var s=t.knots,o,h=[],c=0,v=r+1;c<v;)c++,h.push(n);o=h;var d=vt.curveKnotRefine(t,o),m=S.knotSpan(r,n,s),b=d.knots.slice(0,m+r+2),w=d.knots.slice(m+1),A=d.controlPoints.slice(0,m+1),M=d.controlPoints.slice(m+1);return[new It(r,b,A),new It(r,w,M)]},Yt.rationalCurveByEqualArcLength=function(t,n){var r=_t.rationalCurveArcLength(t),s=r/n;return Yt.rationalCurveByArcLength(t,s)},Yt.rationalCurveByArcLength=function(t,n){var r=vt.decomposeCurveIntoBeziers(t),s=r.map(function(A){return _t.rationalBezierCurveArcLength(A)}),o=l.sum(s),h=[new pn(t.knots[0],0)];if(n>o)return h;for(var c=n,v=0,d=c,m=0,b=0,w;v<r.length;){for(m+=s[v];d<m+tt.EPSILON;)w=_t.rationalBezierCurveParamAtArcLength(r[v],d-b,tt.TOLERANCE,s[v]),h.push(new pn(w,d)),d+=c;b+=s[v],v++}return h};var pn=f.eval.CurveLengthSample=function(t,n){this.u=t,this.len=n};p["verb.eval.CurveLengthSample"]=pn,pn.__name__=["verb","eval","CurveLengthSample"],pn.prototype={__class__:pn};var S=f.eval.Eval=function(){};p["verb.eval.Eval"]=S,S.__name__=["verb","eval","Eval"],S.rationalCurveTangent=function(t,n){var r=S.rationalCurveDerivatives(t,n,1);return r[1]},S.rationalSurfaceNormal=function(t,n,r){var s=S.rationalSurfaceDerivatives(t,n,r,1);return l.cross(s[1][0],s[0][1])},S.rationalSurfaceDerivatives=function(t,n,r,s){s==null&&(s=1);for(var o=S.surfaceDerivatives(t,n,r,s),h=S.rational2d(o),c=S.weight2d(o),v=[],d=h[0][0].length,m=0,b=s+1;m<b;){var w=m++;v.push([]);for(var A=0,M=s-w+1;A<M;){for(var z=A++,I=h[w][z],C=1,L=z+1;C<L;){var B=C++;l.subMulMutate(I,zt.get(z,B)*c[0][B],v[w][z-B])}for(var T=1,R=w+1;T<R;){var F=T++;l.subMulMutate(I,zt.get(w,F)*c[F][0],v[w-F][z]);for(var X=l.zeros1d(d),D=1,V=z+1;D<V;){var q=D++;l.addMulMutate(X,zt.get(z,q)*c[F][q],v[w-F][z-q])}l.subMulMutate(I,zt.get(w,F),X)}l.mulMutate(1/c[0][0],I),v[w].push(I)}}return v},S.rationalSurfacePoint=function(t,n,r){return S.dehomogenize(S.surfacePoint(t,n,r))},S.rationalCurveDerivatives=function(t,n,r){r==null&&(r=1);for(var s=S.curveDerivatives(t,n,r),o=S.rational1d(s),h=S.weight1d(s),c=[],v=0,d=r+1;v<d;){for(var m=v++,b=o[m],w=1,A=m+1;w<A;){var M=w++;l.subMulMutate(b,zt.get(m,M)*h[M],c[m-M])}l.mulMutate(1/h[0],b),c.push(b)}return c},S.rationalCurvePoint=function(t,n){return S.dehomogenize(S.curvePoint(t,n))},S.surfaceDerivatives=function(t,n,r,s){var o=t.knotsU.length-t.degreeU-2,h=t.knotsV.length-t.degreeV-2;return S.surfaceDerivativesGivenNM(o,h,t,n,r,s)},S.surfaceDerivativesGivenNM=function(t,n,r,s,o,h){var c=r.degreeU,v=r.degreeV,d=r.controlPoints,m=r.knotsU,b=r.knotsV;if(!S.areValidRelations(c,d.length,m.length)||!S.areValidRelations(v,d[0].length,b.length))throw new j("Invalid relations between control points, knot vector, and n");var w=d[0][0].length,A;h<c?A=h:A=c;var M;h<v?M=h:M=v;for(var z=l.zeros3d(h+1,h+1,w),I=S.knotSpanGivenN(t,c,s,m),C=S.knotSpanGivenN(n,v,o,b),L=S.derivativeBasisFunctionsGivenNI(I,s,c,t,m),B=S.derivativeBasisFunctionsGivenNI(C,o,v,n,b),T=l.zeros2d(v+1,w),R=0,F=0,X=A+1;F<X;){for(var D=F++,V=0,q=v+1;V<q;){var J=V++;T[J]=l.zeros1d(w);for(var $=0,nt=c+1;$<nt;){var st=$++;l.addMulMutate(T[J],L[D][st],d[I-c+st][C-v+J])}}var rt=h-D;rt<M?R=rt:R=M;for(var at=0,et=R+1;at<et;){var ot=at++;z[D][ot]=l.zeros1d(w);for(var O=0,ut=v+1;O<ut;){var gt=O++;l.addMulMutate(z[D][ot],B[ot][gt],T[gt])}}}return z},S.surfacePoint=function(t,n,r){var s=t.knotsU.length-t.degreeU-2,o=t.knotsV.length-t.degreeV-2;return S.surfacePointGivenNM(s,o,t,n,r)},S.surfacePointGivenNM=function(t,n,r,s,o){var h=r.degreeU,c=r.degreeV,v=r.controlPoints,d=r.knotsU,m=r.knotsV;if(!S.areValidRelations(h,v.length,d.length)||!S.areValidRelations(c,v[0].length,m.length))throw new j("Invalid relations between control points, knot vector, and n");for(var b=v[0][0].length,w=S.knotSpanGivenN(t,h,s,d),A=S.knotSpanGivenN(n,c,o,m),M=S.basisFunctionsGivenKnotSpanIndex(w,s,h,d),z=S.basisFunctionsGivenKnotSpanIndex(A,o,c,m),I=w-h,C=A,L=l.zeros1d(b),B=l.zeros1d(b),T=0,R=c+1;T<R;){var F=T++;B=l.zeros1d(b),C=A-c+F;for(var X=0,D=h+1;X<D;){var V=X++;l.addMulMutate(B,M[V],v[I+V][C])}l.addMulMutate(L,z[F],B)}return L},S.curveRegularSamplePoints=function(t,n){for(var r=S.curveDerivatives(t,t.knots[0],t.degree),s=1/n,o=s*s,h=r[0],c=l.mul(s,r[1]),v=l.mul(o*.5,r[2]),d=l.mul(o*s*.5,r[3]),m=l.add(v,v),b=l.add(d,d),w=l.mul(.3333333333333333,d),A=[],M=0,z=n+1;M<z;)M++,A.push(S.dehomogenize(h)),l.addAllMutate([h,c,v,w]),l.addAllMutate([c,m,d]),l.addAllMutate([m,b]),l.addAllMutate([v,d]);return A},S.curveRegularSamplePoints2=function(t,n){for(var r=S.curveDerivatives(t,t.knots[0],t.degree),s=1/n,o=s*s,h=r[0],c=l.mul(s,r[1]),v=l.mul(o*.5,r[2]),d=l.mul(o*s*.5,r[3]),m=l.add(v,v),b=l.add(d,d),w=l.mul(.3333333333333333,d),A=[],M=0,z=n+1;M<z;)M++,A.push(S.dehomogenize(h)),l.addAllMutate([h,c,v,w]),l.addAllMutate([c,m,d]),l.addAllMutate([m,b]),l.addAllMutate([v,d]);return A},S.rationalSurfaceRegularSampleDerivatives=function(t,n,r,s){for(var o=S.surfaceRegularSampleDerivatives(t,n,r,s),h=[],c=n+1,v=r+1,d=s+1,m=0;m<c;){var b=m++,w=[];h.push(w);for(var A=0;A<v;){for(var M=A++,z=o[b][M],I=S.rational2d(z),C=S.weight2d(z),L=[],B=I[0][0].length,T=0;T<d;){var R=T++;L.push([]);for(var F=0,X=d-R;F<X;){for(var D=F++,V=I[R][D],q=1,J=D+1;q<J;){var $=q++;l.subMulMutate(V,zt.get(D,$)*C[0][$],L[R][D-$])}for(var nt=1,st=R+1;nt<st;){var rt=nt++;l.subMulMutate(V,zt.get(R,rt)*C[rt][0],L[R-rt][D]);for(var at=l.zeros1d(B),et=1,ot=D+1;et<ot;){var O=et++;l.addMulMutate(at,zt.get(D,O)*C[rt][O],L[R-rt][D-O])}l.subMulMutate(V,zt.get(R,rt),at)}l.mulMutate(1/C[0][0],V),L[R].push(V)}}w.push(L)}}return h},S.surfaceRegularSampleDerivatives=function(t,n,r,s){var o=t.degreeU,h=t.degreeV,c=t.controlPoints,v=t.knotsU,d=t.knotsV,m=c[0][0].length;(G.last(v)-v[0])/n,(G.last(d)-d[0])/r;for(var b=S.regularlySpacedDerivativeBasisFunctions(o,v,n),w=b.item0,A=b.item1,M=S.regularlySpacedDerivativeBasisFunctions(h,d,r),z=M.item0,I=M.item1,C=[],L=n+1,B=r+1,T=0;T<L;){var R=T++,F=[];C.push(F);for(var X=0;X<B;){var D=X++;F.push(S.surfaceDerivativesGivenBasesKnotSpans(o,h,c,w[R],z[D],A[R],I[D],m,s))}}return C},S.rationalSurfaceRegularSamplePoints=function(t,n,r){return S.dehomogenize2d(S.surfaceRegularSamplePoints(t,n,r))},S.surfaceRegularSamplePoints=function(t,n,r){var s=t.degreeU,o=t.degreeV,h=t.controlPoints,c=t.knotsU,v=t.knotsV,d=h[0][0].length;(G.last(c)-c[0])/n,(G.last(v)-v[0])/r;for(var m=S.regularlySpacedBasisFunctions(s,c,n),b=m.item0,w=m.item1,A=S.regularlySpacedBasisFunctions(o,v,r),M=A.item0,z=A.item1,I=[],C=n+1,L=r+1,B=0;B<C;){var T=B++,R=[];I.push(R);for(var F=0;F<L;){var X=F++;R.push(S.surfacePointGivenBasesKnotSpans(s,o,h,b[T],M[X],w[T],z[X],d))}}return I},S.regularlySpacedBasisFunctions=function(t,n,r){for(var s=n.length-t-2,o=(G.last(n)-n[0])/r,h=[],c=[],v=n[0],d=S.knotSpanGivenN(s,t,v,n),m=r+1,b=0;b<m;){for(b++;v>=n[d+1];)d++;c.push(d),h.push(S.basisFunctionsGivenKnotSpanIndex(d,v,t,n)),v+=o}return new qt(c,h)},S.regularlySpacedDerivativeBasisFunctions=function(t,n,r){for(var s=n.length-t-2,o=(G.last(n)-n[0])/r,h=[],c=[],v=n[0],d=S.knotSpanGivenN(s,t,v,n),m=r+1,b=0;b<m;){for(b++;v>=n[d+1];)d++;c.push(d),h.push(S.derivativeBasisFunctionsGivenNI(d,v,t,s,n)),v+=o}return new qt(c,h)},S.surfacePointGivenBasesKnotSpans=function(t,n,r,s,o,h,c,v){for(var d=l.zeros1d(v),m,b=s-t,w=o-n,A=0,M=n+1;A<M;){var z=A++;m=l.zeros1d(v);for(var I=0,C=t+1;I<C;){var L=I++;l.addMulMutate(m,h[L],r[b+L][w])}w++,l.addMulMutate(d,c[z],m)}return d},S.surfaceDerivativesGivenBasesKnotSpans=function(t,n,r,s,o,h,c,v,d){var m=r[0][0].length,b;d<t?b=d:b=t;var w;d<n?w=d:w=n;for(var A=l.zeros3d(b+1,w+1,m),M=l.zeros2d(n+1,m),z=0,I=0,C=b+1;I<C;){for(var L=I++,B=0,T=n+1;B<T;){var R=B++;M[R]=l.zeros1d(m);for(var F=0,X=t+1;F<X;){var D=F++;l.addMulMutate(M[R],h[L][D],r[s-t+D][o-n+R])}}var V=d-L;V<w?z=V:z=w;for(var q=0,J=z+1;q<J;){var $=q++;A[L][$]=l.zeros1d(m);for(var nt=0,st=n+1;nt<st;){var rt=nt++;l.addMulMutate(A[L][$],c[$][rt],M[rt])}}}return A},S.curveDerivatives=function(t,n,r){var s=t.knots.length-t.degree-2;return S.curveDerivativesGivenN(s,t,n,r)},S.curveDerivativesGivenN=function(t,n,r,s){var o=n.degree,h=n.controlPoints,c=n.knots;if(!S.areValidRelations(o,h.length,c.length))throw new j("Invalid relations between control points, knot vector, and n");var v=h[0].length,d;s<o?d=s:d=o;for(var m=l.zeros2d(s+1,v),b=S.knotSpanGivenN(t,o,r,c),w=S.derivativeBasisFunctionsGivenNI(b,r,o,d,c),A=0,M=d+1;A<M;)for(var z=A++,I=0,C=o+1;I<C;){var L=I++;l.addMulMutate(m[z],w[z][L],h[b-o+L])}return m},S.curvePoint=function(t,n){var r=t.knots.length-t.degree-2;return S.curvePointGivenN(r,t,n)},S.areValidRelations=function(t,n,r){return n+t+1-r==0},S.curvePointGivenN=function(t,n,r){var s=n.degree,o=n.controlPoints,h=n.knots;if(!S.areValidRelations(s,o.length,h.length))throw new j("Invalid relations between control points, knot Array, and n");for(var c=S.knotSpanGivenN(t,s,r,h),v=S.basisFunctionsGivenKnotSpanIndex(c,r,s,h),d=l.zeros1d(o[0].length),m=0,b=s+1;m<b;){var w=m++;l.addMulMutate(d,v[w],o[c-s+w])}return d},S.volumePoint=function(t,n,r,s){var o=t.knotsU.length-t.degreeU-2,h=t.knotsV.length-t.degreeV-2,c=t.knotsW.length-t.degreeW-2;return S.volumePointGivenNML(t,o,h,c,n,r,s)},S.volumePointGivenNML=function(t,n,r,s,o,h,c){if(!S.areValidRelations(t.degreeU,t.controlPoints.length,t.knotsU.length)||!S.areValidRelations(t.degreeV,t.controlPoints[0].length,t.knotsV.length)||!S.areValidRelations(t.degreeW,t.controlPoints[0][0].length,t.knotsW.length))throw new j("Invalid relations between control points and knot vector");for(var v=t.controlPoints,d=t.degreeU,m=t.degreeV,b=t.degreeW,w=t.knotsU,A=t.knotsV,M=t.knotsW,z=v[0][0][0].length,I=S.knotSpanGivenN(n,d,o,w),C=S.knotSpanGivenN(r,m,h,A),L=S.knotSpanGivenN(s,b,c,M),B=S.basisFunctionsGivenKnotSpanIndex(I,o,d,w),T=S.basisFunctionsGivenKnotSpanIndex(C,h,m,A),R=S.basisFunctionsGivenKnotSpanIndex(L,c,b,M),F=I-d,X=l.zeros1d(z),D=l.zeros1d(z),V=l.zeros1d(z),q=0,J=b+1;q<J;){var $=q++;V=l.zeros1d(z);for(var nt=L-b+$,st=0,rt=m+1;st<rt;){var at=st++;D=l.zeros1d(z);for(var et=C-m+at,ot=0,O=d+1;ot<O;){var ut=ot++;l.addMulMutate(D,B[ut],v[F+ut][et][nt])}l.addMulMutate(V,T[at],D)}l.addMulMutate(X,R[$],V)}return X},S.derivativeBasisFunctions=function(t,n,r){var s=S.knotSpan(n,t,r),o=r.length-1,h=o-n-1;return S.derivativeBasisFunctionsGivenNI(s,t,n,h,r)},S.derivativeBasisFunctionsGivenNI=function(t,n,r,s,o){var h=l.zeros2d(r+1,r+1),c=l.zeros1d(r+1),v=l.zeros1d(r+1),d=0,m=0;h[0][0]=1;for(var b=1,w=r+1;b<w;){var A=b++;c[A]=n-o[t+1-A],v[A]=o[t+A]-n,d=0;for(var M=0;M<A;){var z=M++;h[A][z]=v[z+1]+c[A-z],m=h[z][A-1]/h[A][z],h[z][A]=d+v[z+1]*m,d=c[A-z]*m}h[A][A]=d}for(var I=l.zeros2d(s+1,r+1),C=l.zeros2d(2,r+1),L=0,B=1,T=0,R=0,F=0,X=0,D=0,V=0,q=r+1;V<q;){var J=V++;I[0][J]=h[J][r]}for(var $=0,nt=r+1;$<nt;){var st=$++;L=0,B=1,C[0][0]=1;for(var rt=1,at=s+1;rt<at;){var et=rt++;T=0,R=st-et,F=r-et,st>=et&&(C[B][0]=C[L][0]/h[F+1][R],T=C[B][0]*h[R][F]),R>=-1?X=1:X=-R,st-1<=F?D=et-1:D=r-st;for(var ot=X,O=D+1;ot<O;){var ut=ot++;C[B][ut]=(C[L][ut]-C[L][ut-1])/h[F+1][R+ut],T+=C[B][ut]*h[R+ut][F]}st<=F&&(C[B][et]=-C[L][et-1]/h[F+1][st],T+=C[B][et]*h[st][F]),I[et][st]=T;var gt=L;L=B,B=gt}}for(var Et=r,Bt=1,Ct=s+1;Bt<Ct;){for(var Ut=Bt++,ie=0,ge=r+1;ie<ge;){var ne=ie++;I[Ut][ne]*=Et}Et*=r-Ut}return I},S.basisFunctions=function(t,n,r){var s=S.knotSpan(n,t,r);return S.basisFunctionsGivenKnotSpanIndex(s,t,n,r)},S.basisFunctionsGivenKnotSpanIndex=function(t,n,r,s){var o=l.zeros1d(r+1),h=l.zeros1d(r+1),c=l.zeros1d(r+1),v=0,d=0;o[0]=1;for(var m=1,b=r+1;m<b;){var w=m++;h[w]=n-s[t+1-w],c[w]=s[t+w]-n,v=0;for(var A=0;A<w;){var M=A++;d=o[M]/(c[M+1]+h[w-M]),o[M]=v+c[M+1]*d,v=h[w-M]*d}o[w]=v}return o},S.knotSpan=function(t,n,r){return S.knotSpanGivenN(r.length-t-2,t,n,r)},S.knotSpanGivenN=function(t,n,r,s){if(r>s[t+1]-tt.EPSILON)return t;if(r<s[n]+tt.EPSILON)return n;for(var o=n,h=t+1,c=Math.floor((o+h)/2);r<s[c]||r>=s[c+1];)r<s[c]?h=c:o=c,c=Math.floor((o+h)/2);return c},S.dehomogenize=function(t){for(var n=t.length,r=[],s=t[n-1],o=t.length-1,h=0;h<o;){var c=h++;r.push(t[c]/s)}return r},S.rational1d=function(t){var n=t[0].length-1;return t.map(function(r){return r.slice(0,n)})},S.rational2d=function(t){return t.map(S.rational1d)},S.weight1d=function(t){var n=t[0].length-1;return t.map(function(r){return r[n]})},S.weight2d=function(t){return t.map(S.weight1d)},S.dehomogenize1d=function(t){return t.map(S.dehomogenize)},S.dehomogenize2d=function(t){return t.map(S.dehomogenize1d)},S.homogenize1d=function(t,n){var r=t.length,s=t[0].length,o=[],h=0,c=[],v;n!=null?v=n:v=l.rep(t.length,1);for(var d=0;d<r;){var m=d++,b=[];c=t[m],h=v[m];for(var w=0;w<s;){var A=w++;b.push(c[A]*h)}b.push(h),o.push(b)}return o},S.homogenize2d=function(t,n){var r=t.length,s=[],o;if(n!=null)o=n;else{for(var h=[],c=0;c<r;)c++,h.push(l.rep(t[0].length,1));o=h}for(var v=0;v<r;){var d=v++;s.push(S.homogenize1d(t[d],o[d]))}return s};var it=f.eval.Intersect=function(){};p["verb.eval.Intersect"]=it,it.__name__=["verb","eval","Intersect"],it.surfaces=function(t,n,r){var s=Pt.rationalSurfaceAdaptive(t),o=Pt.rationalSurfaceAdaptive(n),h=it.meshes(s,o),c=h.map(function(v){return v.map(function(d){return it.surfacesAtPointWithEstimate(t,n,d.uv0,d.uv1,r)})});return c.map(function(v){return ht.rationalInterpCurve(v.map(function(d){return d.point}),3)})},it.surfacesAtPointWithEstimate=function(t,n,r,s,o){var h,c,v,d,m,b,w,A,M,z,I,C,L,B=5,T=0;do{if(h=S.rationalSurfaceDerivatives(t,r[0],r[1],1),c=h[0][0],d=h[1][0],m=h[0][1],v=l.normalized(l.cross(d,m)),b=l.dot(v,c),w=S.rationalSurfaceDerivatives(n,s[0],s[1],1),A=w[0][0],z=w[1][0],I=w[0][1],M=l.normalized(l.cross(z,I)),C=l.dot(M,A),L=l.distSquared(c,A),L<o*o)break;var R=l.normalized(l.cross(v,M)),F=l.dot(R,c),X=it.threePlanes(v,b,M,C,R,F);if(X==null)throw new j("panic!");var D=l.sub(X,c),V=l.sub(X,A),q=l.cross(d,v),J=l.cross(m,v),$=l.cross(z,M),nt=l.cross(I,M),st=l.dot(J,D)/l.dot(J,d),rt=l.dot(q,D)/l.dot(q,m),at=l.dot(nt,V)/l.dot(nt,z),et=l.dot($,V)/l.dot($,I);r=l.add([st,rt],r),s=l.add([at,et],s),T++}while(T<B);return new Fn(r,s,c,L)},it.meshes=function(t,n,r,s){r==null&&(r=new Ie(t)),s==null&&(s=new Ie(n));var o=it.boundingBoxTrees(r,s,0),h=G.unique(o.map(function(c){return it.triangles(t,c.item0,n,c.item1)}).filter(function(c){return c!=null}).filter(function(c){return l.distSquared(c.min.point,c.max.point)>tt.EPSILON}),function(c,v){var d=l.sub(c.min.uv0,v.min.uv0),m=l.dot(d,d),b=l.sub(c.max.uv0,v.max.uv0),w=l.dot(b,b),A=l.sub(c.min.uv0,v.max.uv0),M=l.dot(A,A),z=l.sub(c.max.uv0,v.min.uv0),I=l.dot(z,z);return m<tt.EPSILON&&w<tt.EPSILON||M<tt.EPSILON&&I<tt.EPSILON});return it.makeMeshIntersectionPolylines(h)},it.meshSlices=function(t,n,r,s){for(var o=new Ge(t),h=o.boundingBox(),c=h.min[0],v=h.min[1],d=h.max[0],m=h.max[1],b=l.span(n,r,s),w=[],A=0;A<b.length;){var M=b[A];++A;var z=[[c,v,M],[d,v,M],[d,m,M],[c,m,M]],I=[[0,0],[1,0],[1,1],[0,1]],C=[[0,1,2],[0,2,3]],L=new ye(C,z,null,I);w.push(it.meshes(t,L,o))}return w},it.makeMeshIntersectionPolylines=function(t){if(t.length==0)return[];for(var n=0;n<t.length;){var r=t[n];++n,r.max.opp=r.min,r.min.opp=r.max}for(var s=it.kdTreeFromSegments(t),o=[],h=0;h<t.length;){var c=t[h];++h,o.push(c.min),o.push(c.max)}for(var v=0;v<o.length;){var d=o[v];if(++v,d.adj==null){var m=it.lookupAdjacentSegment(d,s,t.length);m!=null&&m.adj==null&&(d.adj=m,m.adj=d)}}var b=o.filter(function(B){return B.adj==null});b.length==0&&(b=o);for(var w=[],A=0,M=!1;b.length!=0;){var z=b.pop();if(!z.visited){for(var I=[],C=z;C!=null&&!(C.visited||(C.visited=!0,C.opp.visited=!0,I.push(C),A+=2,C=C.opp.adj,C==z)););I.length>0&&(I.push(I[I.length-1].opp),w.push(I))}if(b.length==0&&o.length>0&&(M||A<o.length)){M=!0;var L=o.pop();b.push(L)}}return w},it.kdTreeFromSegments=function(t){for(var n=[],r=0;r<t.length;){var s=t[r];++r,n.push(new dn(s.min.point,s.min)),n.push(new dn(s.max.point,s.max))}return new qn(n,l.distSquared)},it.lookupAdjacentSegment=function(t,n,r){var s=n.nearest(t.point,r,tt.EPSILON).filter(function(o){return t!=o.item0.obj}).map(function(o){return o.item0.obj});return s.length==1?s[0]:null},it.curveAndSurface=function(t,n,r,s,o){r==null&&(r=.001),s!=null?s=s:s=new ke(t),o!=null?o=o:o=new qe(n);var h=it.boundingBoxTrees(s,o,r);return G.unique(h.map(function(c){var v=c.item0,d=c.item1,m=G.first(v.knots),b=G.last(v.knots),w=(m+b)/2,A=G.first(d.knotsU),M=G.last(d.knotsU),z=G.first(d.knotsV),I=G.last(d.knotsV),C=[(A+M)/2,(z+I)/2];return it.curveAndSurfaceWithEstimate(v,d,[w].concat(C),r)}).filter(function(c){return l.distSquared(c.curvePoint,c.surfacePoint)<r*r}),function(c,v){return Math.abs(c.u-v.u)<.5*r})},it.curveAndSurfaceWithEstimate=function(t,n,r,s){s==null&&(s=.001);var o=function(d){var m=S.rationalCurvePoint(t,d[0]),b=S.rationalSurfacePoint(n,d[1],d[2]),w=l.sub(m,b);return l.dot(w,w)},h=function(d){var m=S.rationalCurveDerivatives(t,d[0],1),b=S.rationalSurfaceDerivatives(n,d[1],d[2],1),w=l.sub(b[0][0],m[0]),A=l.mul(-1,m[1]),M=b[1][0],z=b[0][1];return[2*l.dot(A,w),2*l.dot(M,w),2*l.dot(z,w)]},c=we.uncmin(o,r,s*s,h),v=c.solution;return new Vn(v[0],[v[1],v[2]],S.rationalCurvePoint(t,v[0]),S.rationalSurfacePoint(n,v[1],v[2]))},it.polylineAndMesh=function(t,n,r){for(var s=it.boundingBoxTrees(new Ee(t),new Ie(n),r),o=[],h=0;h<s.length;){var c=s[h];++h;var v=c.item0,d=c.item1,m=it.segmentWithTriangle(t.points[v],t.points[v+1],n.points,n.faces[d]);if(m!=null){var b=m.point,w=l.lerp(m.p,[t.params[v]],[t.params[v+1]])[0],A=Gt.triangleUVFromPoint(n,d,b);o.push(new Dn(b,w,A,v,d))}}return o},it.boundingBoxTrees=function(t,n,r){r==null&&(r=1e-9);var s=[],o=[];s.push(t),o.push(n);for(var h=[];s.length>0;){var c=s.pop(),v=o.pop();if(!(c.empty()||v.empty())&&c.boundingBox().intersects(v.boundingBox(),r)){var d=c.indivisible(r),m=v.indivisible(r);if(d&&m){h.push(new qt(c.yield(),v.yield()));continue}else if(d&&!m){var b=v.split();s.push(c),o.push(b.item1),s.push(c),o.push(b.item0);continue}else if(!d&&m){var w=c.split();s.push(w.item1),o.push(v),s.push(w.item0),o.push(v);continue}var A=c.split(),M=v.split();s.push(A.item1),o.push(M.item1),s.push(A.item1),o.push(M.item0),s.push(A.item0),o.push(M.item1),s.push(A.item0),o.push(M.item0)}}return h},it.curves=function(t,n,r){var s=it.boundingBoxTrees(new ke(t),new ke(n),0);return G.unique(s.map(function(o){return it.curvesWithEstimate(t,n,G.first(o.item0.knots),G.first(o.item1.knots),r)}).filter(function(o){return l.distSquared(o.point0,o.point1)<r}),function(o,h){return Math.abs(o.u0-h.u0)<r*5})},it.curvesWithEstimate=function(t,n,r,s,o){var h=function(A){var M=S.rationalCurvePoint(t,A[0]),z=S.rationalCurvePoint(n,A[1]),I=l.sub(M,z);return l.dot(I,I)},c=function(A){var M=S.rationalCurveDerivatives(t,A[0],1),z=S.rationalCurveDerivatives(n,A[1],1),I=l.sub(M[0],z[0]),C=M[1],L=l.mul(-1,z[1]);return[2*l.dot(C,I),2*l.dot(L,I)]},v=we.uncmin(h,[r,s],o*o,c),d=v.solution[0],m=v.solution[1],b=S.rationalCurvePoint(t,d),w=S.rationalCurvePoint(n,m);return new $e(b,w,d,m)},it.triangles=function(t,n,r,s){var o=t.faces[n],h=r.faces[s],c=Gt.getTriangleNorm(t.points,o),v=Gt.getTriangleNorm(r.points,h),d=t.points[o[0]],m=r.points[h[0]],b=it.planes(d,c,m,v);if(b==null)return null;var w=it.clipRayInCoplanarTriangle(b,t,n);if(w==null)return null;var A=it.clipRayInCoplanarTriangle(b,r,s);if(A==null)return null;var M=it.mergeTriangleClipIntervals(w,A,t,n,r,s);return M==null?null:new re(new Oe(M.min.uv0,M.min.uv1,M.min.point,n,s),new Oe(M.max.uv0,M.max.uv1,M.max.point,n,s))},it.clipRayInCoplanarTriangle=function(t,n,r){for(var s=n.faces[r],o=[n.points[s[0]],n.points[s[1]],n.points[s[2]]],h=[n.uvs[s[0]],n.uvs[s[1]],n.uvs[s[2]]],c=[l.sub(h[1],h[0]),l.sub(h[2],h[1]),l.sub(h[0],h[2])],v=[l.sub(o[1],o[0]),l.sub(o[2],o[1]),l.sub(o[0],o[2])],d=v.map(l.normalized),m=v.map(l.norm),b=null,w=null,A=0;A<3;){var M=A++,z=o[M],I=d[M],C=it.rays(z,I,t.origin,t.dir);if(C!=null){var L=C.u0,B=C.u1;L<-tt.EPSILON||L>m[M]+tt.EPSILON||((b==null||B<b.u)&&(b=new _n(B,l.onRay(t.origin,t.dir,B),l.onRay(h[M],c[M],L/m[M]))),(w==null||B>w.u)&&(w=new _n(B,l.onRay(t.origin,t.dir,B),l.onRay(h[M],c[M],L/m[M]))))}}return w==null||b==null?null:new re(b,w)},it.mergeTriangleClipIntervals=function(t,n,r,s,o,h){if(n.min.u>t.max.u+tt.EPSILON||t.min.u>n.max.u+tt.EPSILON)return null;var c;t.min.u>n.min.u?c=new qt(t.min,0):c=new qt(n.min,1);var v;t.max.u<n.max.u?v=new qt(t.max,0):v=new qt(n.max,1);var d=new re(new Oe(null,null,c.item0.point,s,h),new Oe(null,null,v.item0.point,s,h));return c.item1==0?(d.min.uv0=c.item0.uv,d.min.uv1=Gt.triangleUVFromPoint(o,h,c.item0.point)):(d.min.uv0=Gt.triangleUVFromPoint(r,s,c.item0.point),d.min.uv1=c.item0.uv),v.item1==0?(d.max.uv0=v.item0.uv,d.max.uv1=Gt.triangleUVFromPoint(o,h,v.item0.point)):(d.max.uv0=Gt.triangleUVFromPoint(r,s,v.item0.point),d.max.uv1=v.item0.uv),d},it.planes=function(t,n,r,s){var o=l.cross(n,s);if(l.dot(o,o)<tt.EPSILON)return null;var h=0,c=Math.abs(o[0]),v=Math.abs(o[1]),d=Math.abs(o[2]);v>c&&(h=1,c=v),d>c&&(h=2,c=d);var m,b,w,A;h==0?(m=n[1],b=n[2],w=s[1],A=s[2]):h==1?(m=n[0],b=n[2],w=s[0],A=s[2]):(m=n[0],b=n[1],w=s[0],A=s[1]);var M=-l.dot(t,n),z=-l.dot(r,s),I=m*A-b*w,C=(b*z-M*A)/I,L=(M*w-m*z)/I,B;return h==0?B=[0,C,L]:h==1?B=[C,0,L]:B=[C,L,0],new vn(B,l.normalized(o))},it.threePlanes=function(t,n,r,s,o,h){var c=l.cross(r,o),v=l.dot(t,c);if(Math.abs(v)<tt.EPSILON)return null;var d=l.sub(l.mul(h,r),l.mul(s,o)),m=l.add(l.mul(n,c),l.cross(t,d));return l.mul(1/v,m)},it.polylines=function(t,n,r){for(var s=it.boundingBoxTrees(new Ee(t),new Ee(n),r),o=[],h=0;h<s.length;){var c=s[h];++h;var v=c.item0,d=c.item1,m=it.segments(t.points[v],t.points[v+1],n.points[d],n.points[d+1],r);m!=null&&(m.u0=l.lerp(m.u0,[t.params[v]],[t.params[v+1]])[0],m.u1=l.lerp(m.u1,[n.params[d]],[n.params[d+1]])[0],o.push(m))}return o},it.segments=function(t,n,r,s,o){var h=l.sub(n,t),c=Math.sqrt(l.dot(h,h)),v=l.mul(1/c,h),d=l.sub(s,r),m=Math.sqrt(l.dot(d,d)),b=l.mul(1/m,d),w=it.rays(t,v,r,b);if(w!=null){var A=Math.min(Math.max(0,w.u0/c),1),M=Math.min(Math.max(0,w.u1/m),1),z=l.onRay(t,h,A),I=l.onRay(r,d,M),C=l.distSquared(z,I);if(C<o*o)return new $e(z,I,A,M)}return null},it.rays=function(t,n,r,s){var o=l.dot(n,s),h=l.dot(n,r),c=l.dot(n,t),v=l.dot(s,r),d=l.dot(s,t),m=l.dot(n,n),b=l.dot(s,s),w=m*b-o*o;if(Math.abs(w)<tt.EPSILON)return null;var A=o*(h-c)-m*(v-d),M=A/w,z=(h-c+M*o)/m,I=l.onRay(t,n,z),C=l.onRay(r,s,M);return new $e(I,C,z,M)},it.segmentWithTriangle=function(t,n,r,s){var o=r[s[0]],h=r[s[1]],c=r[s[2]],v=l.sub(h,o),d=l.sub(c,o),m=l.cross(v,d),b=l.sub(n,t),w=l.sub(t,o),A=-l.dot(m,w),M=l.dot(m,b);if(Math.abs(M)<tt.EPSILON)return null;var z=A/M;if(z<0||z>1)return null;var I=l.add(t,l.mul(z,b)),C=l.dot(v,d),L=l.dot(v,v),B=l.dot(d,d),T=l.sub(I,o),R=l.dot(T,v),F=l.dot(T,d),X=C*C-L*B;if(Math.abs(X)<tt.EPSILON)return null;var D=(C*F-B*R)/X,V=(C*R-L*F)/X;return D>1+tt.EPSILON||V>1+tt.EPSILON||V<-tt.EPSILON||D<-tt.EPSILON||D+V>1+tt.EPSILON?null:new On(I,D,V,z)},it.segmentAndPlane=function(t,n,r,s){var o=l.dot(s,l.sub(n,t));if(Math.abs(o)<tt.EPSILON)return null;var h=l.dot(s,l.sub(r,t)),c=h/o;return c>1+tt.EPSILON||c<-tt.EPSILON?null:{p:c}};var ht=f.eval.Make=function(){};p["verb.eval.Make"]=ht,ht.__name__=["verb","eval","Make"],ht.rationalTranslationalSurface=function(t,n){for(var r=S.rationalCurvePoint(n,G.first(n.knots)),s=G.first(n.knots),o=G.last(n.knots),h=2*n.controlPoints.length,c=(o-s)/(h-1),v=[],d=0;d<h;){var m=d++,b=l.sub(S.rationalCurvePoint(n,s+m*c),r),w=vt.rationalCurveTransform(t,[[1,0,0,b[0]],[0,1,0,b[1]],[0,0,1,b[2]],[0,0,0,1]]);v.push(w)}return ht.loftedSurface(v)},ht.surfaceBoundaryCurves=function(t){var n=ht.surfaceIsocurve(t,G.first(t.knotsU),!1),r=ht.surfaceIsocurve(t,G.last(t.knotsU),!1),s=ht.surfaceIsocurve(t,G.first(t.knotsV),!0),o=ht.surfaceIsocurve(t,G.last(t.knotsV),!0);return[n,r,s,o]},ht.surfaceIsocurve=function(t,n,r){r==null&&(r=!1);var s;r?s=t.knotsV:s=t.knotsU;var o;r?o=t.degreeV:o=t.degreeU;for(var h=_t.knotMultiplicities(s),c=-1,v=0,d=h.length;v<d;){var m=v++;if(Math.abs(n-h[m].knot)<tt.EPSILON){c=m;break}}var b=o+1;c>=0&&(b=b-h[c].mult);var w;b>0?w=vt.surfaceKnotRefine(t,l.rep(b,n),r):w=t;var A=S.knotSpan(o,n,s);return Math.abs(n-G.first(s))<tt.EPSILON?A=0:Math.abs(n-G.last(s))<tt.EPSILON&&(A=(r?w.controlPoints[0].length:w.controlPoints.length)-1),r?new It(w.degreeU,w.knotsU,function(M){for(var z,I=[],C=0,L=w.controlPoints;C<L.length;){var B=L[C];++C,I.push(B[A])}return z=I,z}()):new It(w.degreeV,w.knotsV,w.controlPoints[A])},ht.loftedSurface=function(t,n){t=vt.unifyCurveKnotVectors(t);var r=t[0].degree;n==null&&(n=3),n>t.length-1&&(n=t.length-1);for(var s=t[0].knots,o=[],h=[],c=0,v=t[0].controlPoints.length;c<v;){var d=[c++],m=t.map(function(w){return function(A){return A.controlPoints[w[0]]}}(d)),b=ht.rationalInterpCurve(m,n,!0);h.push(b.controlPoints),o=b.knots}return new Ot(r,n,s,o,h)},ht.clonedCurve=function(t){return new It(t.degree,t.knots.slice(),t.controlPoints.map(function(n){return n.slice()}))},ht.rationalBezierCurve=function(t,n){for(var r=t.length-1,s=[],o=0,h=r+1;o<h;)o++,s.push(0);for(var c=0,v=r+1;c<v;)c++,s.push(1);return n==null&&(n=l.rep(t.length,1)),new It(r,s,S.homogenize1d(t,n))},ht.fourPointSurface=function(t,n,r,s,o){o==null&&(o=3);for(var h=o,c=[],v=0,d=o+1;v<d;){for(var m=v++,b=[],w=0,A=o+1;w<A;){var M=w++,z=1-m/h,I=l.lerp(z,t,n),C=l.lerp(z,s,r),L=l.lerp(1-M/h,I,C);L.push(1),b.push(L)}c.push(b)}var B=l.rep(o+1,0),T=l.rep(o+1,1);return new Ot(o,o,B.concat(T),B.concat(T),c)},ht.ellipseArc=function(t,n,r,s,o){var h=l.norm(n),c=l.norm(r);n=l.normalized(n),r=l.normalized(r),o<s&&(o=2*Math.PI+s);var v=o-s,d=0;v<=Math.PI/2?d=1:v<=Math.PI?d=2:v<=3*Math.PI/2?d=3:d=4;var m=v/d,b=Math.cos(m/2),w=l.add(t,l.add(l.mul(h*Math.cos(s),n),l.mul(c*Math.sin(s),r))),A=l.sub(l.mul(Math.cos(s),r),l.mul(Math.sin(s),n)),M=[],z=l.zeros1d(2*d+3),I=0,C=s,L=l.zeros1d(d*2);M[0]=w,L[0]=1;for(var B=1,T=d+1;B<T;){var R=B++;C+=m;var F=l.add(t,l.add(l.mul(h*Math.cos(C),n),l.mul(c*Math.sin(C),r)));L[I+2]=1,M[I+2]=F;var X=l.sub(l.mul(Math.cos(C),r),l.mul(Math.sin(C),n)),D=it.rays(w,l.mul(1/l.norm(A),A),F,l.mul(1/l.norm(X),X)),V=l.add(w,l.mul(D.u0,A));L[I+1]=b,M[I+1]=V,I+=2,R<d&&(w=F,A=X)}for(var q=2*d+1,J=0;J<3;){var $=J++;z[$]=0,z[$+q]=1}switch(d){case 2:z[3]=z[4]=.5;break;case 3:z[3]=z[4]=.3333333333333333,z[5]=z[6]=.6666666666666666;break;case 4:z[3]=z[4]=.25,z[5]=z[6]=.5,z[7]=z[8]=.75;break}return new It(2,z,S.homogenize1d(M,L))},ht.arc=function(t,n,r,s,o,h){return ht.ellipseArc(t,l.mul(s,l.normalized(n)),l.mul(s,l.normalized(r)),o,h)},ht.polyline=function(t){for(var n=[0,0],r=0,s=0,o=t.length-1;s<o;){var h=s++;r+=l.dist(t[h],t[h+1]),n.push(r)}n.push(r),n=l.mul(1/r,n);for(var c,v=[],d=0,m=t.length;d<m;)d++,v.push(1);return c=v,new It(1,n,S.homogenize1d(t.slice(0),c))},ht.extrudedSurface=function(t,n,r){for(var s=[[],[],[]],o=[[],[],[]],h=S.dehomogenize1d(r.controlPoints),c=S.weight1d(r.controlPoints),v=l.mul(n,t),d=l.mul(.5*n,t),m=0,b=h.length;m<b;){var w=m++;s[2][w]=h[w],s[1][w]=l.add(d,h[w]),s[0][w]=l.add(v,h[w]),o[0][w]=c[w],o[1][w]=c[w],o[2][w]=c[w]}return new Ot(2,r.degree,[0,0,0,1,1,1],r.knots,S.homogenize2d(s,o))},ht.cylindricalSurface=function(t,n,r,s,o){var h=l.cross(t,n),c=ht.arc(r,n,h,o,0,2*Math.PI);return ht.extrudedSurface(t,s,c)},ht.revolvedSurface=function(t,n,r,s){var o=S.dehomogenize1d(t.controlPoints),h=S.weight1d(t.controlPoints),c,v;s<=Math.PI/2?(c=1,v=l.zeros1d(6+2*(c-1))):s<=Math.PI?(c=2,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.5):s<=3*Math.PI/2?(c=3,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.3333333333333333,v[5]=v[6]=.6666666666666666):(c=4,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.25,v[5]=v[6]=.5,v[7]=v[8]=.75);for(var d=s/c,m=3+2*(c-1),b=0;b<3;){var w=b++;v[w]=0,v[m+w]=1}for(var A=Math.cos(d/2),M=0,z=l.zeros1d(c+1),I=l.zeros1d(c+1),C=l.zeros3d(2*c+1,o.length,3),L=l.zeros2d(2*c+1,o.length),B=1,T=c+1;B<T;){var R=B++;M+=d,I[R]=Math.cos(M),z[R]=Math.sin(M)}for(var F=0,X=o.length;F<X;){var D=F++,V=ce.rayClosestPoint(o[D],n,r),q=l.sub(o[D],V),J=l.norm(q),$=l.cross(r,q);J>tt.EPSILON&&(q=l.mul(1/J,q),$=l.mul(1/J,$)),C[0][D]=o[D];var nt=o[D];L[0][D]=h[D];for(var st=$,rt=0,at=1,et=c+1;at<et;){var ot=at++,O;J==0?O=V:O=l.add(V,l.add(l.mul(J*I[ot],q),l.mul(J*z[ot],$))),C[rt+2][D]=O,L[rt+2][D]=h[D];var ut=l.sub(l.mul(I[ot],$),l.mul(z[ot],q));if(J==0)C[rt+1][D]=V;else{var gt=it.rays(nt,l.mul(1/l.norm(st),st),O,l.mul(1/l.norm(ut),ut)),Et=l.add(nt,l.mul(gt.u0,st));C[rt+1][D]=Et}L[rt+1][D]=A*h[D],rt+=2,ot<c&&(nt=O,st=ut)}}return new Ot(2,t.degree,v,t.knots,S.homogenize2d(C,L))},ht.sphericalSurface=function(t,n,r,s){var o=ht.arc(t,l.mul(-1,n),r,s,0,Math.PI);return ht.revolvedSurface(o,t,n,2*Math.PI)},ht.conicalSurface=function(t,n,r,s,o){var h=2*Math.PI,c=1,v=[l.add(r,l.mul(s,t)),l.add(r,l.mul(o,n))],d=[0,0,1,1],m=[1,1],b=new It(c,d,S.homogenize1d(v,m));return ht.revolvedSurface(b,r,t,h)},ht.rationalInterpCurve=function(t,n,r,s,o){if(r==null&&(r=!1),n==null&&(n=3),t.length<n+1)throw new j("You need to supply at least degree + 1 points! You only supplied "+t.length+" points.");for(var h=[0],c=1,v=t.length;c<v;){var d=c++,m=l.norm(l.sub(t[d],t[d-1])),b=h[h.length-1];h.push(b+m)}for(var w=h[h.length-1],A=0,M=h.length;A<M;){var z=A++;h[z]=h[z]/w}var I=l.rep(n+1,0),C=s!=null&&o!=null,L;C?L=0:L=1;var B;C?B=h.length-n+1:B=h.length-n;for(var T=L;T<B;){for(var R=T++,F=0,X=0;X<n;){var D=X++;F+=h[R+D]}I.push(1/n*F)}var V=I.concat(l.rep(n+1,1)),q=[],J;C?J=t.length+1:J=t.length-1;var $;C?$=t.length-(n-1):$=t.length-(n+1);for(var nt=0;nt<h.length;){var st=h[nt];++nt;var rt=S.knotSpanGivenN(J,n,st,V),at=S.basisFunctionsGivenKnotSpanIndex(rt,st,n,V),et=rt-n,ot=l.zeros1d(et),O=l.zeros1d($-et);q.push(ot.concat(at).concat(O))}if(C){var ut=q[0].length-2,gt=[-1,1].concat(l.zeros1d(ut)),Et=l.zeros1d(ut).concat([-1,1]);G.spliceAndInsert(q,1,0,gt),G.spliceAndInsert(q,q.length-1,0,Et)}for(var Bt=t[0].length,Ct=[],Ut=(1-V[V.length-n-2])/n,ie=V[n+1]/n,ge=0;ge<Bt;){var ne=[ge++],$t;if(!C)$t=t.map(function(Pe){return function(Re){return Re[Pe[0]]}}(ne));else{$t=[t[0][ne[0]]],$t.push(ie*s[ne[0]]);for(var se=1,_e=t.length-1;se<_e;){var xe=se++;$t.push(t[xe][ne[0]])}$t.push(Ut*o[ne[0]]),$t.push(G.last(t)[ne[0]])}var Ne=At.solve(q,$t);Ct.push(Ne)}var Ae=At.transpose(Ct);if(!r){var Me=l.rep(Ae.length,1);Ae=S.homogenize1d(Ae,Me)}return new It(n,V,Ae)};var vt=f.eval.Modify=function(){};p["verb.eval.Modify"]=vt,vt.__name__=["verb","eval","Modify"],vt.curveReverse=function(t){return new It(t.degree,vt.knotsReverse(t.knots),G.reversed(t.controlPoints))},vt.surfaceReverse=function(t,n){return n==null&&(n=!1),n?new Ot(t.degreeU,t.degreeV,t.knotsU,vt.knotsReverse(t.knotsV),function(r){for(var s,o=[],h=0,c=t.controlPoints;h<c.length;){var v=c[h];++h,o.push(G.reversed(v))}return s=o,s}()):new Ot(t.degreeU,t.degreeV,vt.knotsReverse(t.knotsU),t.knotsV,G.reversed(t.controlPoints))},vt.knotsReverse=function(t){var n=G.first(t);G.last(t);for(var r=[n],s=t.length,o=1;o<s;){var h=o++;r.push(r[h-1]+(t[s-h]-t[s-h-1]))}return r},vt.unifyCurveKnotVectors=function(t){t=t.map(ht.clonedCurve);for(var n=K.fold(t,function(V,q){return vt.imax(V.degree,q)},0),r=0,s=t.length;r<s;){var o=r++;t[o].degree<n&&(t[o]=vt.curveElevateDegree(t[o],n))}for(var h,c=[],v=0;v<t.length;){var d=t[v];++v,c.push(new re(G.first(d.knots),G.last(d.knots)))}h=c;for(var m=0,b=t.length;m<b;){var w=m++,A=[h[w].min];t[w].knots=t[w].knots.map(function(V){return function(q){return q-V[0]}}(A))}for(var M=h.map(function(V){return V.max-V.min}),z=K.fold(M,function(V,q){return Math.max(V,q)},0),I=0,C=t.length;I<C;){var L=I++,B=[z/M[L]];t[L].knots=t[L].knots.map(function(V){return function(q){return q*V[0]}}(B))}for(var T=K.fold(t,function(V,q){return l.sortedSetUnion(V.knots,q)},[]),R=0,F=t.length;R<F;){var X=R++,D=l.sortedSetSub(T,t[X].knots);D.length==0&&(t[X]=t[X]),t[X]=vt.curveKnotRefine(t[X],D)}return t},vt.imin=function(t,n){return t<n?t:n},vt.imax=function(t,n){return t>n?t:n},vt.curveElevateDegree=function(t,n){if(n<=t.degree)return t;var r=t.knots.length-t.degree-2,s=t.degree,o=t.knots,h=t.controlPoints,c=n-t.degree,v=t.controlPoints[0].length,d=l.zeros2d(s+c+1,s+1),m=[],b=[],w=[],A=r+s+1,M=n,z=Math.floor(M/2),I=[],C=[];d[0][0]=1,d[M][s]=1;for(var L=1,B=z+1;L<B;)for(var T=L++,R=1/zt.get(M,T),F=vt.imin(s,T),X=vt.imax(0,T-c),D=F+1;X<D;){var V=X++;d[T][V]=R*zt.get(s,V)*zt.get(c,T-V)}for(var q=z+1;q<M;)for(var J=q++,$=vt.imin(s,J),nt=vt.imax(0,J-c),st=$+1;nt<st;){var rt=nt++;d[J][rt]=d[M-J][s-rt]}var at=M+1,et=-1,ot=s,O=s+1,ut=1,gt=o[0];I[0]=h[0];for(var Et=0,Bt=M+1;Et<Bt;){var Ct=Et++;C[Ct]=gt}for(var Ut=0,ie=s+1;Ut<ie;){var ge=Ut++;m[ge]=h[ge]}for(;O<A;){for(var ne=O;O<A&&o[O]==o[O+1];)O=O+1;var $t=O-ne+1,se=o[O],_e=et;et=s-$t;var xe;_e>0?xe=Math.floor((_e+2)/2):xe=1;var Ne;if(et>0?Ne=Math.floor(M-(et+1)/2):Ne=M,et>0){for(var Ae=se-gt,Me=[],Pe=s;Pe>$t;)Me[Pe-$t-1]=Ae/(o[ot+Pe]-gt),Pe--;for(var Re=1,bn=et+1;Re<bn;){for(var en=Re++,Zi=et-en,Nr=$t+en,nn=s;nn>=Nr;)m[nn]=l.add(l.mul(Me[nn-Nr],m[nn]),l.mul(1-Me[nn-Nr],m[nn-1])),nn--;w[Zi]=m[s]}}for(var bi=xe,Yi=M+1;bi<Yi;){var xn=bi++;b[xn]=l.zeros1d(v);for(var Hi=vt.imin(s,xn),xi=vt.imax(0,xn-c),Qi=Hi+1;xi<Qi;){var Ai=xi++;b[xn]=l.add(b[xn],l.mul(d[xn][Ai],m[Ai]))}}if(_e>1)for(var Br=at-2,Lr=at,Mi=se-gt,Ji=(se-C[at-1])/Mi,Pi=1;Pi<_e;){for(var Tr=Pi++,Ve=Br,rn=Lr,Ye=rn-at+1;rn-Ve>Tr;){if(Ve<ut){var $i=(se-C[Ve])/(gt-C[Ve]);I[Ve]=l.lerp($i,I[Ve],I[Ve-1])}if(rn>=xe){if(rn-Tr<=at-M+_e){var ts=(se-C[rn-Tr])/Mi;b[Ye]=l.lerp(ts,b[Ye],b[Ye+1])}}else b[Ye]=l.lerp(Ji,b[Ye],b[Ye+1]);Ve=Ve+1,rn=rn-1,Ye=Ye-1}Br=Br-1,Lr=Lr+1}if(ot!=s)for(var zi=0,es=M-_e;zi<es;)zi++,C[at]=gt,at=at+1;for(var Si=xe,ns=Ne+1;Si<ns;){var rs=Si++;I[ut]=b[rs],ut=ut+1}if(O<A){for(var Ci=0;Ci<et;){var ki=Ci++;m[ki]=w[ki]}for(var Ii=et,is=s+1;Ii<is;){var Ei=Ii++;m[Ei]=h[O-s+Ei]}ot=O,O=O+1,gt=se}else for(var Ni=0,ss=M+1;Ni<ss;){var as=Ni++;C[at+as]=se}}return new It(n,C,I)},vt.rationalSurfaceTransform=function(t,n){for(var r=S.dehomogenize2d(t.controlPoints),s=0,o=r.length;s<o;)for(var h=s++,c=0,v=r[h].length;c<v;){var d=c++,m=r[h][d];m.push(1),r[h][d]=At.dot(n,m).slice(0,m.length-1)}return new Ot(t.degreeU,t.degreeV,t.knotsU.slice(),t.knotsV.slice(),S.homogenize2d(r,S.weight2d(t.controlPoints)))},vt.rationalCurveTransform=function(t,n){for(var r=S.dehomogenize1d(t.controlPoints),s=0,o=r.length;s<o;){var h=s++,c=r[h];c.push(1),r[h]=At.dot(n,c).slice(0,c.length-1)}return new It(t.degree,t.knots.slice(),S.homogenize1d(r,S.weight1d(t.controlPoints)))},vt.surfaceKnotRefine=function(t,n,r){var s=[],o,h,c;r?(c=t.controlPoints,o=t.knotsV,h=t.degreeV):(c=At.transpose(t.controlPoints),o=t.knotsU,h=t.degreeU);for(var v=null,d=0;d<c.length;){var m=c[d];++d,v=vt.curveKnotRefine(new It(h,o,m),n),s.push(v.controlPoints)}var b=v.knots;return r?new Ot(t.degreeU,t.degreeV,t.knotsU.slice(),b,s):(s=At.transpose(s),new Ot(t.degreeU,t.degreeV,b,t.knotsV.slice(),s))},vt.decomposeCurveIntoBeziers=function(t){for(var n=t.degree,r=t.controlPoints,s=t.knots,o=_t.knotMultiplicities(s),h=n+1,c=0;c<o.length;){var v=o[c];if(++c,v.mult<h){var d=l.rep(h-v.mult,v.knot),m=vt.curveKnotRefine(new It(n,s,r),d);s=m.knots,r=m.controlPoints}}s.length/h-1;for(var b=h*2,w=[],A=0;A<r.length;){var M=s.slice(A,A+b),z=r.slice(A,A+h);w.push(new It(n,M,z)),A+=h}return w},vt.curveKnotRefine=function(t,n){if(n.length==0)return ht.clonedCurve(t);for(var r=t.degree,s=t.controlPoints,o=t.knots,h=s.length-1,c=h+r+1,v=n.length-1,d=S.knotSpan(r,n[0],o),m=S.knotSpan(r,n[v],o),b=[],w=[],A=0,M=d-r+1;A<M;){var z=A++;b[z]=s[z]}for(var I=m-1,C=h+1;I<C;){var L=I++;b[L+v+1]=s[L]}for(var B=0,T=d+1;B<T;){var R=B++;w[R]=o[R]}for(var F=m+r,X=c+1;F<X;){var D=F++;w[D+v+1]=o[D]}for(var V=m+r-1,q=m+r+v,J=v;J>=0;){for(;n[J]<=o[V]&&V>d;)b[q-r-1]=s[V-r-1],w[q]=o[V],q=q-1,V=V-1;b[q-r-1]=b[q-r];for(var $=1,nt=r+1;$<nt;){var st=$++,rt=q-r+st,at=w[q+st]-n[J];Math.abs(at)<tt.EPSILON?b[rt-1]=b[rt]:(at=at/(w[q+st]-o[V-r+st]),b[rt-1]=l.add(l.mul(at,b[rt-1]),l.mul(1-at,b[rt])))}w[q]=n[J],q=q-1,J--}return new It(r,w,b)},vt.curveKnotInsert=function(t,n,r){for(var s=t.degree,o=t.controlPoints,h=t.knots,c=0,v=o.length,d=S.knotSpan(s,n,h),m=[],b=[],w=[],A=1,M=d+1;A<M;){var z=A++;b[z]=h[z]}for(var I=1,C=r+1;I<C;){var L=I++;b[d+L]=n}for(var B=d+1,T=h.length;B<T;){var R=B++;b[R+r]=h[R]}for(var F=0,X=d-s+1;F<X;){var D=F++;w[D]=o[D]}for(var V=d-c;V<v;){var q=V++;w[q+r]=o[q]}for(var J=0,$=s-c+1;J<$;){var nt=J++;m[nt]=o[d-s+nt]}for(var st=0,rt=0,at=1,et=r+1;at<et;){var ot=at++;st=d-s+ot;for(var O=0,ut=s-ot-c+1;O<ut;){var gt=O++;rt=(n-h[st+gt])/(h[gt+d+1]-h[st+gt]),m[gt]=l.add(l.mul(rt,m[gt+1]),l.mul(1-rt,m[gt]))}w[st]=m[0],w[d+r-ot-c]=m[s-ot-c]}for(var Et=st+1,Bt=d-c;Et<Bt;){var Ct=Et++;w[Ct]=m[Ct-st]}return new It(s,b,w)};var Pt=f.eval.Tess=function(){};p["verb.eval.Tess"]=Pt,Pt.__name__=["verb","eval","Tess"],Pt.rationalCurveRegularSample=function(t,n,r){return Pt.rationalCurveRegularSampleRange(t,t.knots[0],G.last(t.knots),n,r)},Pt.rationalCurveRegularSampleRange=function(t,n,r,s,o){s<1&&(s=2);for(var h=[],c=(r-n)/(s-1),v=0,d=0;d<s;){var m=d++;v=n+c*m,o?h.push([v].concat(S.rationalCurvePoint(t,v))):h.push(S.rationalCurvePoint(t,v))}return h},Pt.rationalCurveAdaptiveSample=function(t,n,r){if(r==null&&(r=!1),n==null&&(n=1e-6),t.degree==1)if(r){for(var s=[],o=0,h=t.controlPoints.length;o<h;){var c=o++;s.push([t.knots[c+1]].concat(S.dehomogenize(t.controlPoints[c])))}return s}else return t.controlPoints.map(S.dehomogenize);return Pt.rationalCurveAdaptiveSampleRange(t,t.knots[0],G.last(t.knots),n,r)},Pt.rationalCurveAdaptiveSampleRange=function(t,n,r,s,o){var h=S.rationalCurvePoint(t,n),c=S.rationalCurvePoint(t,r),v=.5+.2*Math.random(),d=n+(r-n)*v,m=S.rationalCurvePoint(t,d),b=l.sub(h,c),w=l.sub(h,m);if(l.dot(b,b)<s&&l.dot(w,w)>s||!ce.threePointsAreFlat(h,m,c,s)){var A=n+(r-n)*.5,M=Pt.rationalCurveAdaptiveSampleRange(t,n,A,s,o),z=Pt.rationalCurveAdaptiveSampleRange(t,A,r,s,o);return M.slice(0,-1).concat(z)}else return o?[[n].concat(h),[r].concat(c)]:[h,c]},Pt.rationalSurfaceNaive=function(t,n,r){n<1&&(n=1),r<1&&(r=1),t.degreeU,t.degreeV,t.controlPoints;for(var s=t.knotsU,o=t.knotsV,h=G.last(s)-s[0],c=G.last(o)-o[0],v=h/n,d=c/r,m=[],b=[],w=[],A=0,M=n+1;A<M;)for(var z=A++,I=0,C=r+1;I<C;){var L=I++,B=z*v,T=L*d;b.push([B,T]);var R=S.rationalSurfaceDerivatives(t,B,T,1),F=R[0][0];m.push(F);var X=l.normalized(l.cross(R[1][0],R[0][1]));w.push(X)}for(var D=[],V=0;V<n;)for(var q=V++,J=0;J<r;){var $=J++,nt=q*(r+1)+$,st=(q+1)*(r+1)+$,rt=st+1,at=nt+1,et=[nt,st,rt],ot=[nt,rt,at];D.push(et),D.push(ot)}return new ye(D,m,w,b)},Pt.divideRationalSurfaceAdaptive=function(t,n){n==null&&(n=new Ke),n.minDivsU!=null?n.minDivsU=n.minDivsU:n.minDivsU=1,n.minDivsV!=null?n.minDivsU=n.minDivsV:n.minDivsU=1,n.refine!=null?n.refine=n.refine:n.refine=!0;var r=(t.controlPoints.length-1)*2,s=(t.controlPoints[0].length-1)*2,o;n.minDivsU>r?o=n.minDivsU=n.minDivsU:o=n.minDivsU=r;var h;n.minDivsV>s?h=n.minDivsV=n.minDivsV:h=n.minDivsV=s;for(var c=G.last(t.knotsU),v=t.knotsU[0],d=G.last(t.knotsV),m=t.knotsV[0],b=(c-v)/o,w=(d-m)/h,A=[],M=[],z=0,I=h+1;z<I;){for(var C=z++,L=[],B=0,T=o+1;B<T;){var R=B++,F=v+b*R,X=m+w*C,D=S.rationalSurfaceDerivatives(t,F,X,1),V=l.normalized(l.cross(D[0][1],D[1][0]));L.push(new fe(D[0][0],V,[F,X],-1,l.isZero(V)))}M.push(L)}for(var q=0;q<h;)for(var J=q++,$=0;$<o;){var nt=$++,st=[M[h-J-1][nt],M[h-J-1][nt+1],M[h-J][nt+1],M[h-J][nt]];A.push(new Ue(t,st))}if(!n.refine)return A;for(var rt=0;rt<h;)for(var at=rt++,et=0;et<o;){var ot=et++,O=at*o+ot,ut=Pt.north(O,at,ot,o,h,A),gt=Pt.east(O,at,ot,o,h,A),Et=Pt.south(O,at,ot,o,h,A),Bt=Pt.west(O,at,ot,o,h,A);A[O].neighbors=[Et,gt,ut,Bt],A[O].divide(n)}return A},Pt.north=function(t,n,r,s,o,h){return n==0?null:h[t-s]},Pt.south=function(t,n,r,s,o,h){return n==o-1?null:h[t+s]},Pt.east=function(t,n,r,s,o,h){return r==s-1?null:h[t+1]},Pt.west=function(t,n,r,s,o,h){return r==0?null:h[t-1]},Pt.triangulateAdaptiveRefinementNodeTree=function(t){for(var n=ye.empty(),r=0;r<t.length;){var s=t[r];++r,s.triangulate(n)}return n},Pt.rationalSurfaceAdaptive=function(t,n){n!=null?n=n:n=new Ke;var r=Pt.divideRationalSurfaceAdaptive(t,n);return Pt.triangulateAdaptiveRefinementNodeTree(r)};var Ke=f.core.AdaptiveRefinementOptions=function(){this.minDivsV=1,this.minDivsU=1,this.refine=!0,this.maxDepth=10,this.minDepth=0,this.normTol=.025};p["verb.eval.AdaptiveRefinementOptions"]=Ke,Ke.__name__=["verb","eval","AdaptiveRefinementOptions"],Ke.prototype={__class__:Ke};var Ue=f.core.AdaptiveRefinementNode=function(t,n,r){if(this.srf=t,r==null?this.neighbors=[null,null,null,null]:this.neighbors=r,this.corners=n,this.corners==null){var s=t.knotsU[0],o=G.last(t.knotsU),h=t.knotsV[0],c=G.last(t.knotsV);this.corners=[fe.fromUv(s,h),fe.fromUv(o,h),fe.fromUv(o,c),fe.fromUv(s,c)]}};p["verb.eval.AdaptiveRefinementNode"]=Ue,Ue.__name__=["verb","eval","AdaptiveRefinementNode"],Ue.prototype={isLeaf:function(){return this.children==null},center:function(){return this.centerPoint!=null?this.centerPoint:this.evalSrf(this.u05,this.v05)},evalCorners:function(){this.u05=(this.corners[0].uv[0]+this.corners[2].uv[0])/2,this.v05=(this.corners[0].uv[1]+this.corners[2].uv[1])/2;for(var t=0;t<4;){var n=t++;if(this.corners[n].point==null){var r=this.corners[n];this.evalSrf(r.uv[0],r.uv[1],r)}}},evalSrf:function(t,n,r){var s=S.rationalSurfaceDerivatives(this.srf,t,n,1),o=s[0][0],h=l.cross(s[0][1],s[1][0]),c=l.isZero(h);return c||(h=l.normalized(h)),r!=null?(r.degen=c,r.point=o,r.normal=h,r):new fe(o,h,[t,n],-1,c)},getEdgeCorners:function(t){if(this.isLeaf())return[this.corners[t]];if(this.horizontal)switch(t){case 0:return this.children[0].getEdgeCorners(0);case 1:return this.children[0].getEdgeCorners(1).concat(this.children[1].getEdgeCorners(1));case 2:return this.children[1].getEdgeCorners(2);case 3:return this.children[1].getEdgeCorners(3).concat(this.children[0].getEdgeCorners(3))}switch(t){case 0:return this.children[0].getEdgeCorners(0).concat(this.children[1].getEdgeCorners(0));case 1:return this.children[1].getEdgeCorners(1);case 2:return this.children[1].getEdgeCorners(2).concat(this.children[0].getEdgeCorners(2));case 3:return this.children[0].getEdgeCorners(3)}return null},getAllCorners:function(t){var n=[this.corners[t]];if(this.neighbors[t]==null)return n;var r=this.neighbors[t].getEdgeCorners((t+2)%4),s=t%2,o=tt.EPSILON,h=this,c=[function(d){return d.uv[0]>h.corners[0].uv[0]+o&&d.uv[0]<h.corners[2].uv[0]-o},function(d){return d.uv[1]>h.corners[0].uv[1]+o&&d.uv[1]<h.corners[2].uv[1]-o}],v=r.filter(c[s]);return v.reverse(),n.concat(v)},midpoint:function(t){if(this.midPoints==null&&(this.midPoints=[null,null,null,null]),this.midPoints[t]!=null)return this.midPoints[t];switch(t){case 0:this.midPoints[0]=this.evalSrf(this.u05,this.corners[0].uv[1]);break;case 1:this.midPoints[1]=this.evalSrf(this.corners[1].uv[0],this.v05);break;case 2:this.midPoints[2]=this.evalSrf(this.u05,this.corners[2].uv[1]);break;case 3:this.midPoints[3]=this.evalSrf(this.corners[0].uv[0],this.v05);break}return this.midPoints[t]},hasBadNormals:function(){return this.corners[0].degen||this.corners[1].degen||this.corners[2].degen||this.corners[3].degen},fixNormals:function(){for(var t=this.corners.length,n=0;n<t;){var r=n++;if(this.corners[r],this.corners[r].degen){var s=this.corners[(r+1)%t],o=this.corners[(r+3)%t];s.degen?this.corners[r].normal=o.normal:this.corners[r].normal=s.normal}}},shouldDivide:function(t,n){if(n<t.minDepth)return!0;if(n>=t.maxDepth)return!1;if(this.hasBadNormals())return this.fixNormals(),!1;if(this.splitVert=l.normSquared(l.sub(this.corners[0].normal,this.corners[1].normal))>t.normTol||l.normSquared(l.sub(this.corners[2].normal,this.corners[3].normal))>t.normTol,this.splitHoriz=l.normSquared(l.sub(this.corners[1].normal,this.corners[2].normal))>t.normTol||l.normSquared(l.sub(this.corners[3].normal,this.corners[0].normal))>t.normTol,this.splitVert||this.splitHoriz)return!0;var r=this.center();return l.normSquared(l.sub(r.normal,this.corners[0].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[1].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[2].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[3].normal))>t.normTol},divide:function(t){t==null&&(t=new Ke),t.normTol==null&&(t.normTol=.085),t.minDepth==null&&(t.minDepth=0),t.maxDepth==null&&(t.maxDepth=10),this._divide(t,0,!0)},_divide:function(t,n,r){if(this.evalCorners(),!!this.shouldDivide(t,n)){if(n++,this.splitVert&&!this.splitHoriz?r=!1:!this.splitVert&&this.splitHoriz&&(r=!0),this.horizontal=r,this.horizontal){var s=[this.corners[0],this.corners[1],this.midpoint(1),this.midpoint(3)],o=[this.midpoint(3),this.midpoint(1),this.corners[2],this.corners[3]];this.children=[new Ue(this.srf,s),new Ue(this.srf,o)],this.children[0].neighbors=[this.neighbors[0],this.neighbors[1],this.children[1],this.neighbors[3]],this.children[1].neighbors=[this.children[0],this.neighbors[1],this.neighbors[2],this.neighbors[3]]}else{var h=[this.corners[0],this.midpoint(0),this.midpoint(2),this.corners[3]],c=[this.midpoint(0),this.corners[1],this.corners[2],this.midpoint(2)];this.children=[new Ue(this.srf,h),new Ue(this.srf,c)],this.children[0].neighbors=[this.neighbors[0],this.children[1],this.neighbors[2],this.neighbors[3]],this.children[1].neighbors=[this.neighbors[0],this.neighbors[1],this.neighbors[2],this.children[0]]}for(var v=0,d=this.children;v<d.length;){var m=d[v];++v,m._divide(t,n,!r)}}},triangulate:function(t){if(t==null&&(t=ye.empty()),this.isLeaf())return this.triangulateLeaf(t);for(var n=0,r=this.children;n<r.length;){var s=r[n];if(++n,s==null)break;s.triangulate(t)}return t},triangulateLeaf:function(t){for(var n=t.points.length,r=[],s=[],o=0,h=0;h<4;){var c=h++,v=this.getAllCorners(c);v.length==2&&(o=c+1);for(var d=0,m=v.length;d<m;){var b=d++;r.push(v[b])}}for(var w=0;w<r.length;){var A=r[w];if(++w,A.id!=-1){s.push(A.id);continue}t.uvs.push(A.uv),t.points.push(A.point),t.normals.push(A.normal),A.id=n,s.push(n),n++}if(r.length==4)return t.faces.push([s[0],s[3],s[1]]),t.faces.push([s[3],s[2],s[1]]),t;if(r.length==5){var M=s.length;return t.faces.push([s[o],s[(o+2)%M],s[(o+1)%M]]),t.faces.push([s[(o+4)%M],s[(o+3)%M],s[o]]),t.faces.push([s[o],s[(o+3)%M],s[(o+2)%M]]),t}var z=this.center();t.uvs.push(z.uv),t.points.push(z.point),t.normals.push(z.normal);for(var I=t.points.length-1,C=0,L=r.length-1;C<r.length;)t.faces.push([I,s[C],s[L]]),L=C++;return t},__class__:Ue};var dt=f.exe.Dispatcher=function(){};p["verb.exe.Dispatcher"]=dt,dt.__name__=["verb","exe","Dispatcher"],dt.init=function(){dt._init||(dt._workerPool=new je(dt.THREADS),dt._init=!0)},dt.dispatchMethod=function(t,n,r){dt.init();var s=new un,o=function(h){s.resolve(h)};return dt._workerPool.addWork(ct.getClassName(t),n,r,o),new Jt(s)};var je=f.exe.WorkerPool=function(t,n){n==null&&(n="verb.js"),t==null&&(t=1),this._callbacks=new jt,this._working=new jt,this._pool=[],this._queue=[];for(var r=0;r<t;){r++;var s;try{s=new Worker(je.basePath+n)}catch(o){o instanceof j&&(o=o.val),s=new Worker(je.basePath+n.substring(0,-3)+".min.js")}this._pool.push(s)}};p["verb.exe.WorkerPool"]=je,je.__name__=["verb","exe","WorkerPool"],je.prototype={addWork:function(t,n,r,s){var o=new tn(t,n,r);this._callbacks.set(o.id,s),this._queue.push(o),this.processQueue()},processQueue:function(){for(var t=this;this._queue.length>0&&this._pool.length>0;){var n=this._queue.shift(),r=[n.id],s=[this._pool.shift()];this._working.h[r[0]]=s[0],s[0].onmessage=function(o,h){return function(c){t._working.remove(h[0]),t._pool.push(o[0]);try{t._callbacks.h.hasOwnProperty(h[0])&&(t._callbacks.h[h[0]](c.data.result),t._callbacks.remove(h[0]))}catch(v){v instanceof j&&(v=v.val),x.log(v)}t.processQueue()}}(s,r),s[0].postMessage(n)}},__class__:je};var tn=function(t,n,r){this.className=t,this.methodName=n,this.args=r,this.id=tn.uuid++};p["verb.exe._WorkerPool.Work"]=tn,tn.__name__=["verb","exe","_WorkerPool","Work"],tn.prototype={__class__:tn};var yn=function(){};p["verb.geom.ICurve"]=yn,yn.__name__=["verb","geom","ICurve"],yn.__interfaces__=[mn],yn.prototype={__class__:yn};var xt=f.geom.NurbsCurve=function(t){this._data=me.isValidNurbsCurveData(t)};p["verb.geom.NurbsCurve"]=xt,xt.__name__=["verb","geom","NurbsCurve"],xt.__interfaces__=[yn],xt.byKnotsControlPointsWeights=function(t,n,r,s){return new xt(new It(t,n.slice(),S.homogenize1d(r,s)))},xt.byPoints=function(t,n){return n==null&&(n=3),new xt(ht.rationalInterpCurve(t,n))},xt.__super__=Dt,xt.prototype=k(Dt.prototype,{degree:function(){return this._data.degree},knots:function(){return this._data.knots.slice(0)},controlPoints:function(){return S.dehomogenize1d(this._data.controlPoints)},weights:function(){return S.weight1d(this._data.controlPoints)},asNurbs:function(){return new It(this.degree(),this.knots(),S.homogenize1d(this.controlPoints(),this.weights()))},clone:function(){return new xt(this._data)},domain:function(){return new re(G.first(this._data.knots),G.last(this._data.knots))},transform:function(t){return new xt(vt.rationalCurveTransform(this._data,t))},transformAsync:function(t){return dt.dispatchMethod(vt,"rationalCurveTransform",[this._data,t]).then(function(n){return new xt(n)})},point:function(t){return S.rationalCurvePoint(this._data,t)},pointAsync:function(t){return dt.dispatchMethod(S,"rationalCurvePoint",[this._data,t])},tangent:function(t){return S.rationalCurveTangent(this._data,t)},tangentAsync:function(t){return dt.dispatchMethod(S,"rationalCurveTangent",[this._data,t])},derivatives:function(t,n){return n==null&&(n=1),S.rationalCurveDerivatives(this._data,t,n)},derivativesAsync:function(t,n){return n==null&&(n=1),dt.dispatchMethod(S,"rationalCurveDerivatives",[this._data,t,n])},closestPoint:function(t){return _t.rationalCurveClosestPoint(this._data,t)},closestPointAsync:function(t){return dt.dispatchMethod(_t,"rationalCurveClosestPoint",[this._data,t])},closestParam:function(t){return _t.rationalCurveClosestParam(this._data,t)},closestParamAsync:function(t){return dt.dispatchMethod(_t,"rationalCurveClosestParam",[this._data,t])},length:function(){return _t.rationalCurveArcLength(this._data)},lengthAsync:function(){return dt.dispatchMethod(_t,"rationalCurveArcLength",[this._data])},lengthAtParam:function(t){return _t.rationalCurveArcLength(this._data,t)},lengthAtParamAsync:function(){return dt.dispatchMethod(_t,"rationalCurveArcLength",[this._data])},paramAtLength:function(t,n){return _t.rationalCurveParamAtArcLength(this._data,t,n)},paramAtLengthAsync:function(t,n){return dt.dispatchMethod(_t,"rationalCurveParamAtArcLength",[this._data,t,n])},divideByEqualArcLength:function(t){return Yt.rationalCurveByEqualArcLength(this._data,t)},divideByEqualArcLengthAsync:function(t){return dt.dispatchMethod(Yt,"rationalCurveByEqualArcLength",[this._data,t])},divideByArcLength:function(t){return Yt.rationalCurveByArcLength(this._data,t)},divideByArcLengthAsync:function(t){return dt.dispatchMethod(Yt,"rationalCurveByArcLength",[this._data,t])},split:function(t){return Yt.curveSplit(this._data,t).map(function(n){return new xt(n)})},splitAsync:function(t){return dt.dispatchMethod(Yt,"curveSplit",[this._data,t]).then(function(n){return n.map(function(r){return new xt(r)})})},reverse:function(){return new xt(vt.curveReverse(this._data))},reverseAsync:function(){return dt.dispatchMethod(vt,"curveReverse",[this._data]).then(function(t){return new xt(t)})},tessellate:function(t){return Pt.rationalCurveAdaptiveSample(this._data,t,!1)},tessellateAsync:function(t){return dt.dispatchMethod(Pt,"rationalCurveAdaptiveSample",[this._data,t,!1])},__class__:xt});var Xe=f.geom.Arc=function(t,n,r,s,o,h){xt.call(this,ht.arc(t,n,r,s,o,h)),this._center=t,this._xaxis=n,this._yaxis=r,this._radius=s,this._minAngle=o,this._maxAngle=h};p["verb.geom.Arc"]=Xe,Xe.__name__=["verb","geom","Arc"],Xe.__super__=xt,Xe.prototype=k(xt.prototype,{center:function(){return this._center},xaxis:function(){return this._xaxis},yaxis:function(){return this._yaxis},radius:function(){return this._radius},minAngle:function(){return this._minAngle},maxAngle:function(){return this._maxAngle},__class__:Xe});var Xn=f.geom.BezierCurve=function(t,n){xt.call(this,ht.rationalBezierCurve(t,n))};p["verb.geom.BezierCurve"]=Xn,Xn.__name__=["verb","geom","BezierCurve"],Xn.__super__=xt,Xn.prototype=k(xt.prototype,{__class__:Xn});var Wn=f.geom.Circle=function(t,n,r,s){Xe.call(this,t,n,r,s,0,Math.PI*2)};p["verb.geom.Circle"]=Wn,Wn.__name__=["verb","geom","Circle"],Wn.__super__=Xe,Wn.prototype=k(Xe.prototype,{__class__:Wn});var wn=function(){};p["verb.geom.ISurface"]=wn,wn.__name__=["verb","geom","ISurface"],wn.__interfaces__=[mn],wn.prototype={__class__:wn};var pt=f.geom.NurbsSurface=function(t){this._data=me.isValidNurbsSurfaceData(t)};p["verb.geom.NurbsSurface"]=pt,pt.__name__=["verb","geom","NurbsSurface"],pt.__interfaces__=[wn],pt.byKnotsControlPointsWeights=function(t,n,r,s,o,h){return new pt(new Ot(t,n,r,s,S.homogenize2d(o,h)))},pt.byCorners=function(t,n,r,s){return new pt(ht.fourPointSurface(t,n,r,s))},pt.byLoftingCurves=function(t,n){return new pt(ht.loftedSurface(function(r){for(var s,o=[],h=0;h<t.length;){var c=t[h];++h,o.push(c.asNurbs())}return s=o,s}(),n))},pt.__super__=Dt,pt.prototype=k(Dt.prototype,{degreeU:function(){return this._data.degreeU},degreeV:function(){return this._data.degreeV},knotsU:function(){return this._data.knotsU.slice(0)},knotsV:function(){return this._data.knotsV.slice(0)},controlPoints:function(){return S.dehomogenize2d(this._data.controlPoints)},weights:function(){return S.weight2d(this._data.controlPoints)},asNurbs:function(){return new Ot(this.degreeU(),this.degreeV(),this.knotsU(),this.knotsV(),S.homogenize2d(this.controlPoints(),this.weights()))},clone:function(){return new pt(this.asNurbs())},domainU:function(){return new re(G.first(this._data.knotsU),G.last(this._data.knotsU))},domainV:function(){return new re(G.first(this._data.knotsV),G.last(this._data.knotsV))},point:function(t,n){return S.rationalSurfacePoint(this._data,t,n)},pointAsync:function(t,n){return dt.dispatchMethod(S,"rationalSurfacePoint",[this._data,t,n])},normal:function(t,n){return S.rationalSurfaceNormal(this._data,t,n)},normalAsync:function(t,n){return dt.dispatchMethod(S,"rationalSurfaceNormal",[this._data,t,n])},derivatives:function(t,n,r){return r==null&&(r=1),S.rationalSurfaceDerivatives(this._data,t,n,r)},derivativesAsync:function(t,n,r){return r==null&&(r=1),dt.dispatchMethod(S,"rationalSurfaceDerivatives",[this._data,t,n,r])},closestParam:function(t){return _t.rationalSurfaceClosestParam(this._data,t)},closestParamAsync:function(t){return dt.dispatchMethod(_t,"rationalSurfaceClosestParam",[this._data,t])},closestPoint:function(t){return _t.rationalSurfaceClosestPoint(this._data,t)},closestPointAsync:function(t){return dt.dispatchMethod(_t,"rationalSurfaceClosestPoint",[this._data,t])},split:function(t,n){return n==null&&(n=!1),Yt.surfaceSplit(this._data,t,n).map(function(r){return new pt(r)})},splitAsync:function(t,n){return n==null&&(n=!1),dt.dispatchMethod(Yt,"surfaceSplit",[this._data,t,n]).then(function(r){return r.map(function(s){return new pt(s)})})},reverse:function(t){return t==null&&(t=!1),new pt(vt.surfaceReverse(this._data,t))},reverseAsync:function(t){return t==null&&(t=!1),dt.dispatchMethod(vt,"surfaceReverse",[this._data,t]).then(function(n){return new pt(n)})},isocurve:function(t,n){return n==null&&(n=!1),new xt(ht.surfaceIsocurve(this._data,t,n))},isocurveAsync:function(t,n){return n==null&&(n=!1),dt.dispatchMethod(ht,"surfaceIsocurve",[this._data,t,n]).then(function(r){return new xt(r)})},boundaries:function(t){return ht.surfaceBoundaryCurves(this._data).map(function(n){return new xt(n)})},boundariesAsync:function(t){return dt.dispatchMethod(ht,"surfaceBoundaryCurves",[this._data]).then(function(n){return n.map(function(r){return new xt(r)})})},tessellate:function(t){return Pt.rationalSurfaceAdaptive(this._data,t)},tessellateAsync:function(t){return dt.dispatchMethod(Pt,"rationalSurfaceAdaptive",[this._data,t])},transform:function(t){return new pt(vt.rationalSurfaceTransform(this._data,t))},transformAsync:function(t){return dt.dispatchMethod(vt,"rationalSurfaceTransform",[this._data,t]).then(function(n){return new pt(n)})},__class__:pt});var Zn=f.geom.ConicalSurface=function(t,n,r,s,o){pt.call(this,ht.conicalSurface(t,n,r,s,o)),this._axis=t,this._xaxis=n,this._base=r,this._height=s,this._radius=o};p["verb.geom.ConicalSurface"]=Zn,Zn.__name__=["verb","geom","ConicalSurface"],Zn.__super__=pt,Zn.prototype=k(pt.prototype,{axis:function(){return this._axis},xaxis:function(){return this._xaxis},base:function(){return this._base},height:function(){return this._height},radius:function(){return this._radius},__class__:Zn});var Yn=f.geom.CylindricalSurface=function(t,n,r,s,o){pt.call(this,ht.cylindricalSurface(t,n,r,s,o)),this._axis=t,this._xaxis=n,this._base=r,this._height=s,this._radius=o};p["verb.geom.CylindricalSurface"]=Yn,Yn.__name__=["verb","geom","CylindricalSurface"],Yn.__super__=pt,Yn.prototype=k(pt.prototype,{axis:function(){return this._axis},xaxis:function(){return this._xaxis},base:function(){return this._base},height:function(){return this._height},radius:function(){return this._radius},__class__:Yn});var We=f.geom.EllipseArc=function(t,n,r,s,o){xt.call(this,ht.ellipseArc(t,n,r,s,o)),this._center=t,this._xaxis=n,this._yaxis=r,this._minAngle=s,this._maxAngle=o};p["verb.geom.EllipseArc"]=We,We.__name__=["verb","geom","EllipseArc"],We.__super__=xt,We.prototype=k(xt.prototype,{center:function(){return this._center},xaxis:function(){return this._xaxis},yaxis:function(){return this._yaxis},minAngle:function(){return this._minAngle},maxAngle:function(){return this._maxAngle},__class__:We});var Hn=f.geom.Ellipse=function(t,n,r){We.call(this,t,n,r,0,Math.PI*2)};p["verb.geom.Ellipse"]=Hn,Hn.__name__=["verb","geom","Ellipse"],Hn.__super__=We,Hn.prototype=k(We.prototype,{__class__:Hn});var Qn=f.geom.ExtrudedSurface=function(t,n){pt.call(this,ht.extrudedSurface(l.normalized(n),l.norm(n),t.asNurbs())),this._profile=t,this._direction=n};p["verb.geom.ExtrudedSurface"]=Qn,Qn.__name__=["verb","geom","ExtrudedSurface"],Qn.__super__=pt,Qn.prototype=k(pt.prototype,{profile:function(){return this._profile},direction:function(){return this._direction},__class__:Qn});var Ze=f.geom.Intersect=function(){};p["verb.geom.Intersect"]=Ze,Ze.__name__=["verb","geom","Intersect"],Ze.curves=function(t,n,r){return r==null&&(r=.001),it.curves(t.asNurbs(),n.asNurbs(),r)},Ze.curvesAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"curves",[t.asNurbs(),n.asNurbs(),r])},Ze.curveAndSurface=function(t,n,r){return r==null&&(r=.001),it.curveAndSurface(t.asNurbs(),n.asNurbs(),r)},Ze.curveAndSurfaceAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"curveAndSurface",[t.asNurbs(),n.asNurbs(),r])},Ze.surfaces=function(t,n,r){return r==null&&(r=.001),it.surfaces(t.asNurbs(),n.asNurbs(),r).map(function(s){return new xt(s)})},Ze.surfacesAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"surfaces",[t.asNurbs(),n.asNurbs(),r]).then(function(s){return s.map(function(o){return new xt(o)})})};var Jn=f.geom.Line=function(t,n){xt.call(this,ht.polyline([t,n])),this._start=t,this._end=n};p["verb.geom.Line"]=Jn,Jn.__name__=["verb","geom","Line"],Jn.__super__=xt,Jn.prototype=k(xt.prototype,{start:function(){return this._start},end:function(){return this._end},__class__:Jn});var $n=f.geom.RevolvedSurface=function(t,n,r,s){pt.call(this,ht.revolvedSurface(t.asNurbs(),n,r,s)),this._profile=t,this._center=n,this._axis=r,this._angle=s};p["verb.geom.RevolvedSurface"]=$n,$n.__name__=["verb","geom","RevolvedSurface"],$n.__super__=pt,$n.prototype=k(pt.prototype,{profile:function(){return this._profile},center:function(){return this._center},axis:function(){return this._center},angle:function(){return this._angle},__class__:$n});var tr=f.geom.SphericalSurface=function(t,n){pt.call(this,ht.sphericalSurface(t,[0,0,1],[1,0,0],n)),this._center=t,this._radius=n};p["verb.geom.SphericalSurface"]=tr,tr.__name__=["verb","geom","SphericalSurface"],tr.__super__=pt,tr.prototype=k(pt.prototype,{center:function(){return this._center},radius:function(){return this._radius},__class__:tr});var er=f.geom.SweptSurface=function(t,n){pt.call(this,ht.rationalTranslationalSurface(t.asNurbs(),n.asNurbs())),this._profile=t,this._rail=n};p["verb.geom.SweptSurface"]=er,er.__name__=["verb","geom","SweptSurface"],er.__super__=pt,er.prototype=k(pt.prototype,{profile:function(){return this._profile},rail:function(){return this._rail},__class__:er});function be(t){return t instanceof Array?function(){return U.iter(t)}:typeof t.iterator=="function"?ve(t,t.iterator):t.iterator}var kr,ji=0;function ve(t,n){if(n==null)return null;n.__id__==null&&(n.__id__=ji++);var r;return t.hx__closures__==null?t.hx__closures__={}:r=t.hx__closures__[n.__id__],r==null&&(r=function(){return r.method.apply(r.scope,arguments)},r.scope=t,r.method=n,t.hx__closures__[n.__id__]=r),r}p.Math=Math,String.prototype.__class__=p.String=String,String.__name__=["String"],p.Array=Array,Array.__name__=["Array"],Date.prototype.__class__=p.Date=Date,Date.__name__=["Date"];var Xi=p.Int={__name__:["Int"]},Wi=p.Dynamic={__name__:["Dynamic"]},gi=p.Float=Number;gi.__name__=["Float"];var pi=p.Bool=Boolean;pi.__ename__=["Bool"];var yi=p.Class={__name__:["Class"]},wi={};Array.prototype.map==null&&(Array.prototype.map=function(t){for(var n=[],r=0,s=this.length;r<s;){var o=r++;n[o]=t(this[o])}return n}),Array.prototype.filter==null&&(Array.prototype.filter=function(t){for(var n=[],r=0,s=this.length;r<s;){var o=r++,h=this[o];t(h)&&n.push(h)}return n});var Ir={},or=P.ArrayBuffer||Zt;or.prototype.slice==null&&(or.prototype.slice=Zt.sliceImpl),P.DataView;var Er=P.Uint8Array||Ce._new;(function(t,n){if(t.setImmediate)return;var r=1,s={},o=!1,h=t.document,c;function v(B){return s[r]=d.apply(n,B),r++}function d(B){var T=[].slice.call(arguments,1);return function(){typeof B=="function"?B.apply(n,T):new Function(""+B)()}}function m(B){if(o)setTimeout(d(m,B),0);else{var T=s[B];if(T){o=!0;try{T()}finally{b(B),o=!1}}}}function b(B){delete s[B]}function w(){c=function(){var B=v(arguments);return process.nextTick(d(m,B)),B}}function A(){if(t.postMessage&&!t.importScripts){var B=!0,T=t.onmessage;return t.onmessage=function(){B=!1},t.postMessage("","*"),t.onmessage=T,B}}function M(){var B="setImmediate$"+Math.random()+"$",T=function(R){R.source===t&&typeof R.data=="string"&&R.data.indexOf(B)===0&&m(+R.data.slice(B.length))};t.addEventListener?t.addEventListener("message",T,!1):t.attachEvent("onmessage",T),c=function(){var R=v(arguments);return t.postMessage(B+R,"*"),R}}function z(){var B=new MessageChannel;B.port1.onmessage=function(T){var R=T.data;m(R)},c=function(){var T=v(arguments);return B.port2.postMessage(T),T}}function I(){var B=h.documentElement;c=function(){var T=v(arguments),R=h.createElement("script");return R.onreadystatechange=function(){m(T),R.onreadystatechange=null,B.removeChild(R),R=null},B.appendChild(R),T}}function C(){c=function(){var B=v(arguments);return setTimeout(d(m,B),0),B}}var L=Object.getPrototypeOf&&Object.getPrototypeOf(t);L=L&&L.setTimeout?L:t,{}.toString.call(t.process)==="[object process]"?w():A()?M():t.MessageChannel?z():h&&"onreadystatechange"in h.createElement("script")?I():C(),L.setImmediate=c,L.clearImmediate=b})(new Function("return this")()),Xt.USE_CACHE=!1,Xt.USE_ENUM_INDEX=!1,Xt.BASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:",Vt.DEFAULT_RESOLVER=ct,Vt.BASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:",Qt.count=0,Wt.i64tmp=function(t){var n,r=new Rt(0,0);return n=r,n}(),bt.__toStr={}.toString,Ce.BYTES_PER_ELEMENT=1,ft.queue=new H,zt.memo=new jt,tt.TOLERANCE=1e-6,tt.EPSILON=1e-10,tt.VERSION="2.0.0",_t.Tvalues=[[],[],[-.5773502691896257,.5773502691896257],[0,-.7745966692414834,.7745966692414834],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],_t.Cvalues=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],dt.THREADS=1,dt._init=!1,je.basePath="",tn.uuid=0,sr.main()}(typeof console<"u"?console:{log:function(){}},i,typeof g<"u"?g:typeof a<"u"?a:typeof self<"u"?self:this),i})})(fi);var Ki=fi.exports;const ln=Gi(Ki);class zr{constructor(){this.c0=0,this.c1=0,this.c2=0,this.c3=0}init(e,i,a,u){this.c0=e,this.c1=a,this.c2=-3*e+3*i-2*a-u,this.c3=2*e-2*i+a+u}initCatmullRom(e,i,a,u,_){this.init(i,a,_*(a-e),_*(u-i))}initNonuniformCatmullRom(e,i,a,u,_,g,y){let x=(i-e)/_-(a-e)/(_+g)+(a-i)/g,f=(a-i)/g-(u-i)/(g+y)+(u-a)/y;x*=g,f*=g,this.init(i,a,x,f)}calc(e){const i=e*e,a=i*e;return this.c0+this.c1*e+this.c2*i+this.c3*a}}class mi extends Cn{constructor(e=[],i=!1,a="centripetal",u=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new Q,this._px=new zr,this._py=new zr,this._pz=new zr,this._points=e.map(_=>new St(_)),this._closed=i,this._curveType=a,this._tension=u}get points(){return this._points}get closed(){return this._closed}get curveType(){return this._curveType}get tension(){return this._tension}get startPoint(){return this._points.length>0?this._points[0]:new St}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new St}get length(){if(this._points.length<2)return 0;let e=0;for(let i=1;i<this._points.length;i++)e+=this._points[i-1].distanceTo(this._points[i]);return this._closed&&this._points.length>2&&(e+=this._points[this._points.length-1].distanceTo(this._points[0])),e}getPoint(e,i=new St){const a=i,u=this._points,_=u.length;if(_===0)return a.set(0,0,0);if(_===1)return a.copy(u[0]);const g=(_-(this._closed?0:1))*e;let y=Math.floor(g),x=g-y;this._closed?y+=y>0?0:(Math.floor(Math.abs(y)/_)+1)*_:x===0&&y===_-1&&(y=_-2,x=1);let f,P;this._closed||y>0?f=u[(y-1)%_]:(this._tmp.subVectors(u[0],u[1]).add(u[0]),f=new St(this._tmp.x,this._tmp.y,this._tmp.z));const p=u[y%_],E=u[(y+1)%_];if(this._closed||y+2<_?P=u[(y+2)%_]:(this._tmp.subVectors(u[_-1],u[_-2]).add(u[_-1]),P=new St(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const k=this._curveType==="chordal"?.5:.25;let U=Math.pow(f.distanceToSquared(p),k),K=Math.pow(p.distanceToSquared(E),k),H=Math.pow(E.distanceToSquared(P),k);K<1e-4&&(K=1),U<1e-4&&(U=K),H<1e-4&&(H=K),this._px.initNonuniformCatmullRom(f.x,p.x,E.x,P.x,U,K,H),this._py.initNonuniformCatmullRom(f.y,p.y,E.y,P.y,U,K,H),this._pz.initNonuniformCatmullRom(f.z,p.z,E.z,P.z,U,K,H)}else this._curveType==="catmullrom"&&(this._px.initCatmullRom(f.x,p.x,E.x,P.x,this._tension),this._py.initCatmullRom(f.y,p.y,E.y,P.y,this._tension),this._pz.initCatmullRom(f.z,p.z,E.z,P.z,this._tension));return a.set(this._px.calc(x),this._py.calc(x),this._pz.calc(x)),a}getPoints(e){const i=[];for(let a=0;a<=e;a++)i.push(this.getPoint(a/e));return i}setPoints(e){this._points=e.map(i=>new St(i)),this._boundingBoxNeedsUpdate=!0}setClosed(e){this._closed!==e&&(this._closed=e,this._boundingBoxNeedsUpdate=!0)}setCurveType(e){this._curveType=e}setTension(e){this._tension=e}transform(e){return this._points=this._points.map(i=>{const a=new St;return a.copy(i),a.applyMatrix3d(e),a}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new ze;const e=new ze;return this._points.forEach(i=>{e.expandByPoint(i)}),e}}class Je{constructor(e,i,a,u){this._degree=e,this._knots=[...i],this._controlPoints=a.map(_=>({x:_.x,y:_.y,z:_.z})),this._weights=u?[...u]:new Array(a.length).fill(1)}degree(){return this._degree}knots(){return[...this._knots]}controlPoints(){return this._controlPoints.map(e=>({x:e.x,y:e.y,z:e.z}))}weights(){return[...this._weights]}point(e){const i=this._controlPoints.map(a=>[a.x,a.y,a.z]);return Mn(e,this._degree,this._knots,i,this._weights)}length(){const e=this._controlPoints.map(i=>[i.x,i.y,i.z]);return oi(this._degree,this._knots,e,this._weights)}static byKnotsControlPointsWeights(e,i,a,u){return new Je(e,i,a,u)}static byPoints(e,i,a="Uniform"){let u;switch(a){case"Chord":u=si(i,e);break;case"SqrtChord":u=ai(i,e);break;case"Uniform":default:u=ii(i,e.length);break}const _=e.map(y=>({x:y[0],y:y[1],z:y[2]})),g=new Array(_.length).fill(1);return new Je(i,u,_,g)}getParameterRange(){const e=this._knots[this._degree],i=this._knots[this._knots.length-this._degree-1];return{start:e,end:i}}getPoints(e){const i=[],{start:a,end:u}=this.getParameterRange();for(let _=0;_<=e;_++){const g=a+(u-a)*(_/e);i.push(this.point(g))}return i}isClosed(e=1e-6){const{start:i,end:a}=this.getParameterRange(),u=this.point(i),_=this.point(a),g=u[0]-_[0],y=u[1]-_[1],x=u[2]-_[2];return Math.sqrt(g*g+y*y+x*x)<e}static createFitPointsForClosedCurve(e){if(e.length<4)throw new Error("At least 4 points are required for a closed NURBS curve");const i=new mi(e,!0,"centripetal"),a=Math.max(50,e.length*2);return i.getPoints(a)}static createClosedCurve(e,i,a="Chord"){const _=this.createFitPointsForClosedCurve(e).map(g=>[g.x,g.y,g.z]);return Je.byPoints(_,i,a)}}class Sr extends Cn{constructor(e,i,a,u,_){super();const g=arguments.length;if(g<2||g>5)throw te.AcCmErrors.ILLEGAL_PARAMETERS;if(this._degree=3,this._closed=!1,Array.isArray(i)){this._controlPoints=e;let y,x=3,f=!1;if(g>=3&&(Array.isArray(a)?(y=a,g>=4&&(x=u||3),g>=5&&(f=_)):a!==void 0&&(x=a||3,g>=4&&(f=u))),a===void 0&&g>=4&&(x=u||3,g>=5&&(f=_)),this._degree=x,this._closed=f,this._controlPoints.length<this._degree+1)throw te.AcCmErrors.ILLEGAL_PARAMETERS;const P=this.toVerbPoints(this._controlPoints);this._nurbsCurve=ln.geom.NurbsCurve.byKnotsControlPointsWeights(this._degree,i,P,y)}else{if(this._fitPoints=e,this._knotParameterization=i,g>=3&&(this._degree=a||3),g>=4&&(this._closed=u),this._fitPoints.length<this._degree+1)throw te.AcCmErrors.ILLEGAL_PARAMETERS;const y=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(y,this._degree),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}}buildCurve(){if(this._fitPoints&&this._knotParameterization){if(this._closed){const e=Je.createFitPointsForClosedCurve(this._fitPoints),i=this.toNurbsPoints(e);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(i,this._degree)}else{const e=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(e,this._degree)}this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}else if(this._controlPoints)if(this._closed){const e=Je.createFitPointsForClosedCurve(this._controlPoints),i=this.toNurbsPoints(e);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(i,this._degree),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}else{const e=this._nurbsCurve.knots(),i=this._nurbsCurve.weights(),a=this.toVerbPoints(this._controlPoints);this._nurbsCurve=ln.geom.NurbsCurve.byKnotsControlPointsWeights(this._degree,e,a,i)}}setClosed(e){this._closed!==e&&(this._closed=e,this._boundingBoxNeedsUpdate=!0,this.buildCurve())}get degree(){return this._degree}get knotParameterization(){return this._knotParameterization}get startPoint(){const e=this._nurbsCurve.knots(),i=this._nurbsCurve.degree(),a=e[i],u=this._nurbsCurve.point(a);return new St(u[0],u[1],u[2])}get endPoint(){const e=this._nurbsCurve.knots(),i=this._nurbsCurve.degree(),a=e[e.length-i-1],u=this._nurbsCurve.point(a);return new St(u[0],u[1],u[2])}get length(){return this._nurbsCurve.length()}getFitPointAt(e){if(!this._fitPoints)throw new Error("No fit points in this spline");const i=this._fitPoints.length,a=e<0||e>=i?i-1:e,u=this._fitPoints[a];return{x:u.x,y:u.y,z:u.z||0}}getControlPointAt(e){const i=this._controlPoints.length,a=e<0||e>=i?i-1:e;return this._controlPoints[a]}getPoints(e=100){const i=this._nurbsCurve,a=[],u=i.knots(),_=this._nurbsCurve.degree(),g=u[_],y=u[u.length-_-1],x=(y-g)/(e-1);for(let f=0;f<e;f++){const P=f===e-1?y:g+f*x,p=i.point(P);a.push(new St(p[0],p[1],p[2]))}return a}getCurvePoints(e,i){const a=[],u=e.knots(),_=u[3],y=(u[u.length-4]-_)/(i-1);for(let x=0;x<i;x++){const f=_+x*y;a.push(e.point(f))}return a}calculateBoundingBox(){const e=this.getPoints(100);return new ze().setFromPoints(e)}get closed(){return this._closed}set closed(e){this.setClosed(e)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}toNurbsPoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]=[a.x,a.y,a.z||0]}),i}toVerbPoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]=[a.x,a.y,a.z||0]}),i}toGePoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]={x:a[0],y:a[1],z:a[2]}}),i}static createClosedSpline(e,i="Uniform",a=3){if(e.length<a+1)throw new Error(`At least ${a+1} points are required for a degree ${a} closed spline`);return new Sr(e,i,a,!0)}}Y.AcGeArea2d=Di,Y.AcGeBox2d=de,Y.AcGeBox3d=ze,Y.AcGeCatmullRomCurve3d=mi,Y.AcGeCircArc2d=Sn,Y.AcGeCircArc3d=In,Y.AcGeCurve2d=hn,Y.AcGeEllipseArc2d=Ar,Y.AcGeEllipseArc3d=Mr,Y.AcGeEuler=wr,Y.AcGeGeometryUtil=ri,Y.AcGeLine2d=Pr,Y.AcGeLine3d=kn,Y.AcGeLoop2d=qi,Y.AcGeMathUtil=kt,Y.AcGeMatrix2d=sn,Y.AcGeMatrix3d=an,Y.AcGeNurbsCurve=Je,Y.AcGePlane=zn,Y.AcGePoint2d=Tt,Y.AcGePoint3d=St,Y.AcGePolyline2d=Oi,Y.AcGeQuaternion=Pn,Y.AcGeShape2d=br,Y.AcGeSpline3d=Sr,Y.AcGeTol=fr,Y.AcGeVector2d=Lt,Y.AcGeVector3d=Q,Y.DEFAULT_TOL=mr,Y.DEG2RAD=hr,Y.FLOAT_TOL=He,Y.ORIGIN_POINT_2D=Bi,Y.ORIGIN_POINT_3D=dr,Y.RAD2DEG=lr,Y.TAU=Kt,Y.basisFunction=nr,Y.calculateCurveLength=oi,Y.ceilPowerOfTwo=Qr,Y.clamp=Be,Y.damp=Fr,Y.degToRad=Zr,Y.euclideanModulo=ur,Y.evaluateNurbsPoint=Mn,Y.floorPowerOfTwo=Jr,Y.generateChordKnots=si,Y.generateSqrtChordKnots=ai,Y.generateUUID=Rr,Y.generateUniformKnots=ii,Y.intPartLength=vr,Y.interpolateControlPoints=Li,Y.inverseLerp=Dr,Y.isBetween=$r,Y.isBetweenAngle=ti,Y.isPointInPolygon=gr,Y.isPolygonIntersect=ni,Y.isPowerOfTwo=Hr,Y.lerp=cr,Y.mapLinear=Vr,Y.normalizeAngle=An,Y.pingpong=Or,Y.radToDeg=Yr,Y.randFloat=jr,Y.randFloatSpread=Xr,Y.randInt=Kr,Y.relativeEps=ei,Y.seededRandom=Wr,Y.smootherstep=Gr,Y.smoothstep=qr,Object.defineProperty(Y,Symbol.toStringTag,{value:"Module"})});