markuno_lib 1.2.110 → 1.2.111

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.
Files changed (2) hide show
  1. package/bin/markcad.js +1 -1
  2. package/package.json +1 -1
package/bin/markcad.js CHANGED
@@ -1 +1 @@
1
- import*as e from"three";import{TrianglesDrawMode as t,TriangleFanDrawMode as i,TriangleStripDrawMode as n,Loader as s,LoaderUtils as r,FileLoader as o,MeshPhysicalMaterial as a,Vector2 as A,Color as l,LinearSRGBColorSpace as c,SRGBColorSpace as h,SpotLight as p,PointLight as u,DirectionalLight as g,Matrix4 as d,Vector3 as f,Quaternion as m,InstancedMesh as I,InstancedBufferAttribute as b,Object3D as y,TextureLoader as C,ImageBitmapLoader as B,BufferAttribute as E,InterleavedBuffer as x,InterleavedBufferAttribute as w,LinearMipmapLinearFilter as v,NearestMipmapLinearFilter as P,LinearMipmapNearestFilter as D,NearestMipmapNearestFilter as M,LinearFilter as S,NearestFilter as T,RepeatWrapping as L,MirroredRepeatWrapping as k,ClampToEdgeWrapping as _,PointsMaterial as R,Material as F,LineBasicMaterial as N,MeshStandardMaterial as O,DoubleSide as G,MeshBasicMaterial as Y,PropertyBinding as U,BufferGeometry as X,SkinnedMesh as q,Mesh as z,LineSegments as H,Line as j,LineLoop as W,Points as J,Group as K,PerspectiveCamera as V,MathUtils as Z,OrthographicCamera as $,Skeleton as ee,AnimationClip as te,Bone as ie,InterpolateDiscrete as ne,InterpolateLinear as se,Texture as re,VectorKeyframeTrack as oe,NumberKeyframeTrack as ae,QuaternionKeyframeTrack as Ae,ColorManagement as le,FrontSide as ce,Interpolant as he,Box3 as pe,Sphere as ue,CompressedCubeTexture as ge,UnsignedByteType as de,CompressedArrayTexture as fe,CompressedTexture as me,DisplayP3ColorSpace as Ie,LinearDisplayP3ColorSpace as be,NoColorSpace as ye,RGBA_ASTC_6x6_Format as Ce,RedFormat as Be,RGFormat as Ee,RGBAFormat as xe,HalfFloatType as Qe,FloatType as we,DataTexture as ve,Data3DTexture as Pe,RGBA_S3TC_DXT1_Format as De,RGB_PVRTC_4BPPV1_Format as Me,RGB_ETC2_Format as Se,RGB_ETC1_Format as Te,RGBA_S3TC_DXT5_Format as Le,RGBA_PVRTC_4BPPV1_Format as ke,RGBA_ETC2_EAC_Format as _e,RGBA_BPTC_Format as Re,RGBA_ASTC_4x4_Format as Fe,MeshPhongMaterial as Ne,AdditiveBlending as Oe,Float32BufferAttribute as Ge}from"three";class Matrix3D{constructor(){this.m=new Float32Array(16),this.st=[],this.init()}init(){return this.m.fill(0),this.m[0]=this.m[5]=this.m[10]=this.m[15]=1,this}atranslate(e,t,i){return this.m[12]+=e,this.m[13]+=t,this.m[14]+=i,this}translate(e,t,i){return e??=0,t??=0,i??=0,this.m[12]+=e*this.m[0]+t*this.m[4]+i*this.m[8],this.m[13]+=e*this.m[1]+t*this.m[5]+i*this.m[9],this.m[14]+=e*this.m[2]+t*this.m[6]+i*this.m[10],this.m[15]+=e*this.m[3]+t*this.m[7]+i*this.m[11],this}rotateX(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),s=[...this.m];this.m[1]=s[1]*n+s[9]*i,this.m[2]=s[2]*n+s[10]*i,this.m[3]=s[3]*n+s[11]*i,this.m[9]=s[1]*-i+s[9]*n,this.m[10]=s[2]*-i+s[10]*n,this.m[11]=s[3]*-i+s[11]*n}return this}rotateY(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),s=[...this.m];this.m[0]=s[0]*n+s[8]*i,this.m[1]=s[1]*n+s[9]*i,this.m[2]=s[2]*n+s[10]*i,this.m[3]=s[3]*n+s[11]*i,this.m[8]=s[0]*-i+s[8]*n,this.m[9]=s[1]*-i+s[9]*n,this.m[10]=s[2]*-i+s[10]*n,this.m[11]=s[3]*-i+s[11]*n}return this}rotateZ(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),s=[...this.m];this.m[0]=s[0]*n+s[4]*i,this.m[1]=s[1]*n+s[5]*i,this.m[2]=s[2]*n+s[6]*i,this.m[3]=s[3]*n+s[7]*i,this.m[4]=s[0]*-i+s[4]*n,this.m[5]=s[1]*-i+s[5]*n,this.m[6]=s[2]*-i+s[6]*n,this.m[7]=s[3]*-i+s[7]*n}return this}getdati(){return Array.from(this.m)}setdati(e){if(e&&16===e.length){for(let t=0;t<16;t++)this.m[t]=Number(e[t])||0;return this}this.init()}push(){return this.st.push(new Float32Array(this.m)),this}pop(){return this.st.length>0&&(this.m=this.st.pop()),this}transform(e,t,i=0){return{x:e*this.m[0]+t*this.m[4]+i*this.m[8]+this.m[12],y:e*this.m[1]+t*this.m[5]+i*this.m[9]+this.m[13],z:e*this.m[2]+t*this.m[6]+i*this.m[10]+this.m[14]}}invert(){const e=this.m,t=new Matrix3D,i=this.determinant();return Math.abs(i)<1e-8?null:(t.m[0]=(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])/i,t.m[1]=(e[1]*e[14]*e[11]+e[9]*e[2]*e[15]+e[13]*e[10]*e[3]-e[1]*e[10]*e[15]-e[9]*e[14]*e[3]-e[13]*e[2]*e[11])/i,t.m[2]=(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])/i,t.m[3]=(e[1]*e[10]*e[7]+e[5]*e[2]*e[11]+e[9]*e[6]*e[3]-e[1]*e[6]*e[11]-e[5]*e[10]*e[3]-e[9]*e[2]*e[7])/i,t.m[4]=(e[4]*e[14]*e[11]+e[8]*e[6]*e[15]+e[12]*e[10]*e[7]-e[4]*e[10]*e[15]-e[8]*e[14]*e[7]-e[12]*e[6]*e[11])/i,t.m[5]=(e[0]*e[10]*e[15]+e[8]*e[14]*e[3]+e[12]*e[2]*e[11]-e[0]*e[14]*e[11]-e[8]*e[2]*e[15]-e[12]*e[10]*e[3])/i,t.m[6]=(e[0]*e[14]*e[7]+e[4]*e[2]*e[15]+e[12]*e[6]*e[3]-e[0]*e[6]*e[15]-e[4]*e[14]*e[3]-e[12]*e[2]*e[7])/i,t.m[7]=(e[0]*e[6]*e[11]+e[4]*e[10]*e[3]+e[8]*e[2]*e[7]-e[0]*e[10]*e[7]-e[4]*e[2]*e[11]-e[8]*e[6]*e[3])/i,t.m[8]=(e[4]*e[9]*e[15]+e[8]*e[13]*e[7]+e[12]*e[5]*e[11]-e[4]*e[13]*e[11]-e[8]*e[5]*e[15]-e[12]*e[9]*e[7])/i,t.m[9]=(e[0]*e[13]*e[11]+e[8]*e[1]*e[15]+e[12]*e[9]*e[3]-e[0]*e[9]*e[15]-e[8]*e[13]*e[3]-e[12]*e[1]*e[11])/i,t.m[10]=(e[0]*e[5]*e[15]+e[4]*e[13]*e[3]+e[12]*e[1]*e[7]-e[0]*e[13]*e[7]-e[4]*e[1]*e[15]-e[12]*e[5]*e[3])/i,t.m[11]=(e[0]*e[9]*e[7]+e[4]*e[1]*e[11]+e[8]*e[5]*e[3]-e[0]*e[5]*e[11]-e[4]*e[9]*e[3]-e[8]*e[1]*e[7])/i,t.m[12]=(e[4]*e[13]*e[10]+e[8]*e[5]*e[14]+e[12]*e[9]*e[6]-e[4]*e[9]*e[14]-e[8]*e[13]*e[6]-e[12]*e[5]*e[10])/i,t.m[13]=(e[0]*e[9]*e[14]+e[8]*e[13]*e[2]+e[12]*e[1]*e[10]-e[0]*e[13]*e[10]-e[8]*e[1]*e[14]-e[12]*e[9]*e[2])/i,t.m[14]=(e[0]*e[13]*e[6]+e[4]*e[1]*e[14]+e[12]*e[5]*e[2]-e[0]*e[5]*e[14]-e[4]*e[13]*e[2]-e[12]*e[1]*e[6])/i,t.m[15]=(e[0]*e[5]*e[10]+e[4]*e[9]*e[2]+e[8]*e[1]*e[6]-e[0]*e[9]*e[6]-e[4]*e[1]*e[10]-e[8]*e[5]*e[2])/i,t)}determinant(){const e=this.m;return e[0]*(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])-e[4]*(e[1]*e[10]*e[15]+e[9]*e[14]*e[3]+e[13]*e[2]*e[11]-e[1]*e[14]*e[11]-e[9]*e[2]*e[15]-e[13]*e[10]*e[3])+e[8]*(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])-e[12]*(e[1]*e[6]*e[11]+e[5]*e[10]*e[3]+e[9]*e[2]*e[7]-e[1]*e[10]*e[7]-e[5]*e[2]*e[11]-e[9]*e[6]*e[3])}multiply(e){const t=[...this.m],i=e.m;return this.m[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2]+t[12]*i[3],this.m[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2]+t[13]*i[3],this.m[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2]+t[14]*i[3],this.m[3]=t[3]*i[0]+t[7]*i[1]+t[11]*i[2]+t[15]*i[3],this.m[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6]+t[12]*i[7],this.m[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6]+t[13]*i[7],this.m[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6]+t[14]*i[7],this.m[7]=t[3]*i[4]+t[7]*i[5]+t[11]*i[6]+t[15]*i[7],this.m[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10]+t[12]*i[11],this.m[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10]+t[13]*i[11],this.m[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10]+t[14]*i[11],this.m[11]=t[3]*i[8]+t[7]*i[9]+t[11]*i[10]+t[15]*i[11],this.m[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12]*i[15],this.m[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13]*i[15],this.m[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14]*i[15],this.m[15]=t[3]*i[12]+t[7]*i[13]+t[11]*i[14]+t[15]*i[15],this}}const Ye=.001;class Punto2{constructor(e,t){Array.isArray(e)?(this.x=e[0]||0,this.y=e[1]||0):e&&"object"==typeof e?(this.x=e.x||0,this.y=e.y||0):(this.x=e||0,this.y=t||0)}get dump(){return`{${this.x.toFixed(1)},${this.y.toFixed(1)}}`}get len2(){return this.x*this.x+this.y*this.y}get len(){return Math.sqrt(this.len2)}get angle(){return Math.atan2(this.y,this.x)}dir(){let e=this.len;return e?new Punto2(this.x/e,this.y/e):this}puntosucerchio(e=0,t=0){const i=t*Math.PI/180;return new Punto2(this.x+e*Math.cos(i),this.y+e*Math.sin(i))}tangentesucerchio(e=0,t=0,i=100){const n=t*Math.PI/180,s=this.x+e*Math.cos(n),r=this.y+e*Math.sin(n),o=n+Math.PI/2,a=s+i*Math.cos(o),A=r+i*Math.sin(o);return new Linea2(s,r,a,A)}angolo3p(e,t){let i=this;const n=e.x-i.x,s=e.y-i.y,r=t.x-i.x,o=t.y-i.y,a=n*r+s*o,A=Math.hypot(n,s),l=Math.hypot(r,o);if(!A||!l)return 0;let c=180*Math.acos(a/(A*l))/Math.PI;return c>180&&(c=360-c),c}distanza(e){return new Punto2(e.x-this.x,e.y-this.y).len}}class Linea2{constructor(e,t,i=null,n=null){"number"==typeof e&&"number"==typeof t&&null!==i&&null!==n?(this.p1=new Punto2({x:e,y:t}),this.p2=new Punto2({x:i,y:n})):e&&t?(this.p1=new Punto2(e),this.p2=new Punto2(t)):(this.p1=new Punto2(0,0),this.p2=new Punto2(1,0))}get dump(){return`${this.p1.dump}-${this.p2.dump}`}get dx(){return this.p2.x-this.p1.x}get dy(){return this.p2.y-this.p1.y}get len2(){let{dx:e,dy:t}=this;return e*e+t*t}get len(){return Math.sqrt(this.len2)}get angle(){return this.angolo()}estendi(e){if("number"==typeof e){if(!e)return this;let{p1:t,p2:i,dx:n,dy:s,len:r}=this;return r?(n/=r,s/=r,e>0?new Linea2(t,new Punto2(i.x+n*e,i.y+s*e)):new Linea2(new Punto2(t.x+n*e,t.y+s*e),i)):this}if(e instanceof Linea2){const t=this.interseca(e);if(!t)return this;return(t.x-this.p1.x)**2+(t.y-this.p1.y)**2<(t.x-this.p2.x)**2+(t.y-this.p2.y)**2?new Linea2(t,this.p2):new Linea2(this.p1,t)}}puntot(e){return new Punto2(this.p1.x+(this.p2.x-this.p1.x)*e,this.p1.y+(this.p2.y-this.p1.y)*e)}setlunghezza(e){let t=this.len;if(t&&e){let i=e/t,n=this.puntot(i);this.p2=n}}proiezionet(e){const{p1:t,dx:i,dy:n,len2:s}=this;if(s<Ye)return;const r=((e.x-t.x)*i+(e.y-t.y)*n)/s;return{p:new Punto2(t.x+r*i,t.y+r*n),t:r}}proiezione(e){const t=this.proiezionet(e);return t?t.p:void 0}get direzione(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(e/i,t/i):new Punto2(0,0)}get normale(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(-t/i,e/i):new Punto2(0,1)}perpendicolare(e=null,t=0){const{normale:i,len:n,p1:s}=this;if(n<1e-9)return;const r=t||n,o=e?new Punto2(e):this.p1;return new Linea2(o,new Punto2(o.x+i.x*r,o.y+i.y*r))}perpendicolaret(e,t=0){const{normale:i,len:n,p1:s,p2:r}=this;if(n<1e-9)return;const o=t||n,a=new Punto2(s.x+(r.x-s.x)*e,s.y+(r.y-s.y)*e);return new Linea2(a,new Punto2(a.x+i.x*o,a.y+i.y*o))}rotatedonp1(e){const t=e*Math.PI/180,i=this.p2.x-this.p1.x,n=this.p2.y-this.p1.y,s=Math.cos(t),r=Math.sin(t),o=this.p1.x+i*s-n*r,a=this.p1.y+i*r+n*s;return new Linea2(this.p1,{x:o,y:a})}rotatedonp2(e){const t=e*Math.PI/180,i=this.p1.x-this.p2.x,n=this.p1.y-this.p2.y,s=Math.cos(t),r=Math.sin(t),o=this.p2.x+i*s-n*r,a=this.p2.y+i*r+n*s;return new Linea2(this.p2,{x:o,y:a})}ruotata(e=Math.PI/2,t=0,i=!1){const{p1:n,p2:s,direzione:r,len:o}=this;if(t=t||o,o<1e-9)return;const a=Math.abs(e%(2*Math.PI));if(!(a<1e-9||Math.abs(a-Math.PI)<1e-9)){if("boolean"==typeof i){const o=(r.x*Math.cos(e)-r.y*Math.sin(e))*t,a=(r.x*Math.sin(e)+r.y*Math.cos(e))*t;return i?new Linea2(n,new Punto2(n.x+o,n.y+a)):new Linea2(s,new Punto2(s.x+o,s.y+a))}{let n=new Punto2(i);const s=r.x*Math.cos(e)-r.y*Math.sin(e),o=r.x*Math.sin(e)+r.y*Math.cos(e);new Punto2(s,o);const a=new Linea2(n,new Punto2(n.x+s,n.y+o)),A=this.interseca(a);if(!A)return;const l=new Punto2(A.x+s*t,A.y+o*t);return new Linea2(A,l)}}}puntosudirezione(e,t){let{direzione:i}=this;return new Punto2(e.x+i.x*t,e.y+i.y*t)}parallela(e,t){let{direzione:i}=this;return new Linea2(e,this.puntosudirezione(e,t))}intersezione(e){return this.interseca(e)}interseca(e){const{p1:t,p2:i}=this,{p1:n,p2:s}=e,r=(i.x-t.x)*(s.y-n.y)-(i.y-t.y)*(s.x-n.x);if(Math.abs(r)<Ye)return null;const o=((n.x-t.x)*(s.y-n.y)-(n.y-t.y)*(s.x-n.x))/r;return new Punto2(t.x+o*(i.x-t.x),t.y+o*(i.y-t.y))}onsegment(e,t=1e-9){const{p1:i,p2:n}=this,s=n.x-i.x,r=n.y-i.y,o=e.x-i.x,a=e.y-i.y;if(Math.abs(s*a-r*o)>t)return!1;const A=o*s+a*r;if(A<-t)return!1;return!(A>s*s+r*r+t)}distanzaPunto(e){const t=this.proiezione(e);if(!t)return 1e9;const i=e.x-t.x,n=e.y-t.y;return Math.hypot(i,n)}isparallela(e){const t=this.dx*e.dy-this.dy*e.dx;return Math.abs(t)<1}lunghezzatotale(e){const t=this.p2.x-this.p1.x,i=this.p2.y-this.p1.y,n=Math.hypot(t,i);if(!n)return 0;const s=1/n,proj=e=>(e.x*t+e.y*i)*s,r=proj(this.p1),o=proj(this.p2),a=proj(e.p1),A=proj(e.p2),l=r<o?r:o,c=r>o?r:o,h=a<A?a:A,p=a>A?a:A;return Math.round(100*(Math.max(c,p)-Math.min(l,h)))/100}infoquad(e){if(!this.isparallela(e))return;const{p1:t,p2:i,normale:n}=this;let{p1:s,p2:r}=e;const distance2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;function wrapToPi(e){return e>Math.PI?e-=2*Math.PI:e<-Math.PI&&(e+=2*Math.PI),e}function getangle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}distance2(t,s)>distance2(t,r)&&([s,r]=[r,s]);const o=getangle(t,i);function toDeg(e){return Math.round(18e4*e/Math.PI)/1e3}const a=toDeg(wrapToPi(getangle(t,s)-o)),A=toDeg(wrapToPi(getangle(i,r)-o)),l=Math.round(100*this.len)/100,c=s.x-t.x,h=s.y-t.y,p=Math.round(100*Math.abs(c*n.x+h*n.y))/100;let u=this.lunghezzatotale(e);return{angle:toDeg(o),aini:a,afin:A,l:l,ltot:u,distanza:p,sx:Math.round(100*t.x)/100,sy:Math.round(100*t.y)/100}}isperpendicolare(e){const t=this.dx*e.dx+this.dy*e.dy;return Math.abs(t)<Ye}offset(e){const t=this.normale,i=new Punto2(this.p1.x+t.x*e,this.p1.y+t.y*e),n=new Punto2(this.p2.x+t.x*e,this.p2.y+t.y*e);return new Linea2(i,n)}angolo(e){const{dx:t,dy:i}=this;let n;if(e){const{dx:s,dy:r}=e,o=Math.atan2(i,t);n=Math.atan2(r,s)-o}else n=Math.atan2(i,t);return n>Math.PI?n-=2*Math.PI:n<-Math.PI&&(n+=2*Math.PI),n}ortopt(e){let{p1:t,dx:i,dy:n}=this;const s=Math.hypot(i,n);if(s<Ye)return;const r=-n/s,o=i/s;return{x:t.x+r*e,y:t.y+o*e}}offsetline(e){let{p1:t,p2:i,dx:n,dy:s}=this;const r=Math.hypot(n,s);if(r<Ye)return;const o=-s/r,a=n/r;return new Linea2({x:t.x+o*e,y:t.y+a*e},{x:i.x+o*e,y:i.y+a*e})}distanzaSegmentiParalleli(e){if(!this.isparallela(e))return 1e9;const{p1:t,normale:i}=this,n=e.p1.x-t.x,s=e.p1.y-t.y,r=Math.abs(n*i.x+s*i.y);return Math.abs(r)<Ye?0:r}isCollineare(e,t=!1){if(!this.isparallela(e))return!1;const i=this.distanzaSegmentiParalleli(e);if(Math.abs(i)>Ye)return!1;if(t){function isPointBetween(e,t,i,n=Ye){const s=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);return!(Math.abs(s)>n)&&(Math.min(t.x,i.x)-n<=e.x&&e.x<=Math.max(t.x,i.x)+n&&Math.min(t.y,i.y)-n<=e.y&&e.y<=Math.max(t.y,i.y)+n)}const{p1:n,p2:s}=this,{p1:r,p2:o}=e;return isPointBetween(r,n,s)||isPointBetween(o,n,s)||isPointBetween(n,r,o)||isPointBetween(s,r,o)}return!0}clone(){return new Linea2(this.p1.x,this.p1.y,this.p2.x,this.p2.y)}rotate(e){if(!e)return this;const t=e*Math.PI/180,i=Math.cos(t),n=Math.sin(t);function rotate(e){return new Punto2(e.x*i-e.y*n,e.x*n+e.y*i)}return this.p1=rotate(this.p1),this.p2=rotate(this.p2),this}move(e=0,t=0){return"object"==typeof e&&e.x&&(t=e.y||0,e=e.x),this.p1.x+=e,this.p1.y+=t,this.p2.x+=e,this.p2.y+=t,this}}function getptsoffset(e,t,i){let n,s,r,o,a=-1,A=-1,l=e.length,c=t.length,h=[],p=new Linea2(e[0],e[1]),u=new Linea2(e[l-2],e[l-1]),g=p.offset(i),d=u.offset(i);for(let e=0;e<c;e++){let i=new Linea2(t[e%c],t[(e+1)%c]);g.isparallela(i)&&g.isCollineare(i,!0)&&(a=e),d.isparallela(i)&&d.isCollineare(i,!0)&&(A=e)}if(a>=0&&A>=0){a>A?(n=a-A+2,s=A+c-a+2,n<s?(r=A,o=a+1):(r=a,o=A+c+1)):(n=A-a+2,s=a+c-A+2,n<s?(r=a,o=A+1):(r=A,o=a+c+1));for(let e=r;e<=o;e++)h.push(t[e%c])}return h}async function errorescript(e,t){let i,n,s,r=(t.stack||"").match(/user-script\.js:(\d+):(\d+)/);if(r||(r=(t.toString()||"").match(/user-script\.js:(\d+):(\d+)/)),r&&([,i,n]=r.map(Number),i-=2),(!i||!n)&&t instanceof SyntaxError){window.acorn||(await new Promise(((e,t)=>{const i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/acorn@8.15.0/dist/acorn.js",i.onload=e,i.onerror=t,document.head.appendChild(i)})),console.log("caricato acorn"));try{window.acorn.parse(e,{ecmaVersion:"latest"})}catch(e){e.loc&&(i=e.loc.line,n=e.loc.column+1)}}return s=i&&n?`ERRORE: ${t.message}\n`+function extractContext(e,t,i,n=1){const s=e.split(/\r?\n/),r=t-1,o=Math.max(0,r-n),a=Math.min(s.length,r+n+1);return s.slice(o,a).map(((e,n)=>o+n+1===t?e+"\n"+" ".repeat(i-1)+"^":e)).join("\n")}(e,i,n):t.message,s}function seedarray(e,t){if(e&&e.length){let i=[];for(let t=0;t<e.length;t++){let n=e[t];if(n.p)for(let e=0;e<n.p;e++)i.push(t);else i.push(t)}return e[i[seeder(i.length,t)]]}}function seeder(e,t="seed42"){const i=function mulberry32(e){return function(){e=(e|=0)+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}(function xmur3(e){let t=1779033703^e.length;for(let i=0;i<e.length;i++)t=Math.imul(t^e.charCodeAt(i),3432918353),t=t<<13|t>>>19;return function(){return t=Math.imul(t^t>>>16,2246822507),t=Math.imul(t^t>>>13,3266489909),(t^=t>>>16)>>>0}}(String(t))());return Math.floor(i()*e)}function hash(e){let t="";if("string"==typeof e||"number"==typeof e)t=e+"";else if("object"==typeof e&&e){const i=Object.keys(e).sort(),n="\0";t=i.map((t=>`${t}${n}${String(e[t])}`)).join(n)}let i=2166136261,n=2218511855;for(let e=0;e<t.length;e++){const s=t.charCodeAt(e);i^=s,i+=i<<5^2779096485,n^=i,n=((n<<3)+s^2134516169)>>>0}return i>>>=0,i.toString(16)+n.toString(16)}function clean(e,t=!1){return t?(e||"").trim().toLowerCase():(e||"").trim()}function getcouple(e,t="=",i=!0){const n=(e=e||"").indexOf(t);return n>=0?{v:clean(e.substring(0,n),i),o:e.substring(n+t.length).trim(),fl:!0}:{v:clean(e,i),o:"",fl:!1}}function clamp(e,t=-1/0,i=1/0){return(e=Number(e)||0)<t&&(e=t),e>i&&(e=i),e}function getcolonne(e,t=!1){e=String(e||"");const i=/^(\d*)\.\.(\d*)$/.exec(e);if(i){let e=parseInt(i[1])||0,t=parseInt(i[2])||0;const n=[];for(let i=e;i<=t;i++)n.push(i+"");return n}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const n=[];let s="",r=0,o=!1;for(let t=0;t<e.length;t++){const i=e[t];if(0===r&&'"'===i&&(0!==t&&"\\"===e[t-1]||(o=!o)),o||("("===i||"["===i||"{"===i?r++:")"!==i&&"]"!==i&&"}"!==i||(r=Math.max(0,r-1))),","!==i&&";"!==i||0!==r||o)s+=i;else{const e=s.trim();n.push(e),s=""}}const a=s.trim();return a&&n.push(a),n.map((e=>(e=e.trim(),!t&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("(")&&e.endsWith(")"))?e.slice(1,-1):e)))}new class Errori{constructor(){this.azzera()}azzera(){this.err=[]}add(e,t){this.err.push({msg:e,row:t})}get(){return this.err}get length(){return this.err.length}toString(){const e=[];for(const t of this.err){const i="object"==typeof t.msg?JSON.stringify(t.msg):t.msg||"";e.push(`${t.row?t.row+":":""}${i}`)}return e.join("\n")}};const round=(e,t=-1)=>{const i="string"==typeof e?parseFloat(e)||0:e;if(t<0)return Math.round(i||0);const n=Math.pow(10,t);return Math.round(i*n)/n||0};function muClComments(e,t){const i=(n=e,n.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||""))).split(/\r?\n/);var n;const s=[];let r="";for(const e of i){let t=e;if(/(^|[^:])\/\/.*/.test(t)&&(t=t.replace(/(^|[^:])\/\/.*/,((e,t)=>t.trim()))),t=t.trim(),0!==t.length)if(r.length>0&&(t=r+" "+t,r=""),t.endsWith("\\")){t=t.slice(0,-1);const e=t.lastIndexOf("//");-1!==e&&(t=t.slice(0,e).trim()),r=t}else s.push(t)}return s}const Ue=Math.PI/180;function TODEG(e,t=1){let i=10**t;return Math.round(180*e*i/Math.PI)/i}function TORAD(e,t=3){let i=10**t;return Math.round(e*Ue*i)/i}const Xe={window:void 0,self:void 0,globalThis:void 0,document:void 0,Function:void 0,eval:void 0,fetch:void 0,XMLHttpRequest:void 0};function getOggetto(e,t=[]){if(Array.isArray(e))return e.map((e=>getOggetto(e,t)));if(e&&"object"==typeof e){const i={};for(const[n,s]of Object.entries(e))"function"==typeof s||t&&t.includes(n)||(i[n]=getOggetto(s,t));return i}return e}function getSqDist(e,t){let i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function getSqSegDist(e,t,i){let n=t.x,s=t.y,r=i.x-n,o=i.y-s;if(0!==r||0!==o){let t=((e.x-n)*r+(e.y-s)*o)/(r*r+o*o);t>1?(n=i.x,s=i.y):t>0&&(n+=r*t,s+=o*t)}return r=e.x-n,o=e.y-s,r*r+o*o}function simplifyDPStep(e,t,i,n,s){let r,o=n;for(let n=t+1;n<i;n++){let s=getSqSegDist(e[n],e[t],e[i]);s>o&&(r=n,o=s)}o>n&&(r-t>1&&simplifyDPStep(e,t,r,n,s),s.push(e[r]),i-r>1&&simplifyDPStep(e,r,i,n,s))}function simplifyDouglasPeucker(e,t){let i=e.length-1,n=[e[0]];return simplifyDPStep(e,0,i,t,n),n.push(e[i]),n}function simplify(e,t,i){if(e.length<=2)return e;let n=void 0!==t?t*t:1;return e=i?e:function simplifyRadialDist(e,t){let i,n=e[0],s=[n];for(let r=1,o=e.length;r<o;r++)i=e[r],getSqDist(i,n)>t&&(s.push(i),n=i);return n!==i&&s.push(i),s}(e,n),e=simplifyDouglasPeucker(e,n)}function mapvertices(e,t){const dist2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;let i=e.length,n=t.length;if(i<2||n<2)return[];let s=[[0,0]];if(i===n){for(let e=1;e<i;e++)s.push([e,e]);return s}if(i>n)for(let r=1,o=0;r<i-1;r++){if(o+1<n){const i=e[r],n=dist2(i,t[o]);dist2(i,t[o+1])<=n&&o++}s.push([r,o])}else for(let r=1,o=0;r<n-1;r++){if(o+1<i){const i=t[r],n=dist2(i,e[o]);dist2(i,e[o+1])<=n&&o++}s.push([o,r])}return s.push([i-1,n-1]),s}function dxfbulge(e,t,i,n=0){const s=[];if(!i||Math.abs(i)<1e-10||0===n)return s;const r=4*Math.atan(i);if(r<0)return dxfbulge(t,e,-i,n).reverse();const o=t.x-e.x,a=t.y-e.y,A=Math.hypot(o,a),l=A/(2*Math.sin(r/2)),c=(e.x+t.x)/2,h=(e.y+t.y)/2,p=-a/A,u=o/A,g=l*Math.cos(r/2),d=i>=0?1:-1,f=c+d*p*g,m=h+d*u*g;let I=Math.atan2(e.y-m,e.x-f);for(let e=1;e<=n;e++){const t=I+e/(n+1)*r,i=f+l*Math.cos(t),o=m+l*Math.sin(t);s.push({x:i,y:o})}return s}function raccordabezier(e,t,i,n,s=10){const r=function getIntersection(e,t,i,n){const s=(e.x-t.x)*(i.y-n.y)-(e.y-t.y)*(i.x-n.x);return 0===s?null:{x:((e.x*t.y-e.y*t.x)*(i.x-n.x)-(e.x-t.x)*(i.x*n.y-i.y*n.x))/s,y:((e.x*t.y-e.y*t.x)*(i.y-n.y)-(e.y-t.y)*(i.x*n.y-i.y*n.x))/s}}(e,t,i,n);if(!r)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const o=r;if(0===s)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const a=[];for(let e=0;e<=s;e++){const n=e/s,r=1-n,A=r*r*t.x+2*r*n*o.x+n*n*i.x,l=r*r*t.y+2*r*n*o.y+n*n*i.y;a.push({x:A,y:l})}return a}function raccordabezier3(e,t,i,n,s=10){const r=t.x-e.x,o=t.y-e.y,a=i.x-t.x,A=i.y-t.y,l=Math.sqrt(r*r+o*o),c=Math.sqrt(a*a+A*A);if(n>l||n>c)return[e,t,i];n!=l&&n!=c||(n-=.01);const h=(l-n)/l,p=n/c;return raccordabezier(e,{x:e.x+r*h,y:e.y+o*h},{x:t.x+a*p,y:t.y+A*p},i,s)}function normal2(e,t){const i=t.x-e.x;let n=-(t.y-e.y),s=i;const r=Math.sqrt(n*n+s*s);return 0===r?{nx:0,ny:0}:{nx:n/r,ny:s/r}}function angle3point(e,t,i){const n=t.x-e.x,s=t.y-e.y,r=i.x-t.x,o=i.y-t.y,a=n*r+s*o,A=n*o-s*r,l=Math.sqrt(n**2+s**2),c=Math.sqrt(r**2+o**2);return l&&c?Math.atan2(A,a):0}function angle2vec(e,t){const i=e.x*t.x+e.y*t.y,n=Math.sqrt(e.x*e.x+e.y*e.y),s=Math.sqrt(t.x*t.x+t.y*t.y);if(0===n||0===s)return 0;let r=i/(n*s);r=Math.max(-1,Math.min(1,r));return Math.acos(r)/Ue}function removeduplicate(e,t=.005){if(!Array.isArray(e)||0===e.length)return[];const i=[],n=e.length;for(let t=0;t<n;t++){const s=e[t],r=e[(t+1)%n];i.push({x:s.x,y:s.y}),r.x,s.x,r.y,s.y}const s=i[0],r=i[i.length-1];return s.x,r.x,s.y,r.y,i}function infocircle(e,t,i,n,s,r){let o,a,A;"object"==typeof e?(o=e,a=t,A=i):(o=new Punto2(e,t),a=new Punto2(i,n),A=new Punto2(s,r));const l=(o.x+a.x)/2,c=(o.y+a.y)/2,h=(a.x+A.x)/2,p=(a.y+A.y)/2,u=a.x-o.x,g=a.y-o.y,d=A.x-a.x,f=-g,m=-(A.y-a.y),I=f*d-u*m;if(!I)return null;const b=((h-l)*d-(p-c)*m)/I,y=l+b*f,C=c+b*u,B=Math.hypot(o.x-y,o.y-C),E=180/Math.PI;let x=Math.atan2(o.y-C,o.x-y),w=Math.atan2(A.y-C,A.x-y);const v=Math.atan2(a.y-C,a.x-y);return w<x&&(w+=2*Math.PI),v<x&&(x+=2*Math.PI),v>w&&(w+=2*Math.PI),x*=E,w*=E,x=(x%360+360)%360,w=(w%360+360)%360,{center:new Punto2(round(y,1),round(C,1)),r:round(B,1),ang1:round(x,1),ang2:round(w,1)}}function intersectcircle(e,t,i,n,s){const r=s.x-n.x,o=s.y-n.y,a=n.x-e,A=n.y-t,l=r*r+o*o,c=2*(a*r+A*o),h=c*c-4*l*(a*a+A*A-i*i);if(h<=0)return null;const p=Math.sqrt(h),u=(-c-p)/(2*l),g=(-c+p)/(2*l),d=n.x+u*r,f=n.y+u*o,m=n.x+g*r,I=n.y+g*o,b=180/Math.PI;let y=Math.atan2(f-t,d-e)*b,C=Math.atan2(I-t,m-e)*b;return y=(y%360+360)%360,C=(C%360+360)%360,[y,C]}function getshape(){let e=[];function orientation(){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const s=e[n],r=e[(n+1)%i];t+=s.x*r.y-r.x*s.y}return t>0?1:t<0?-1:0}function tovec(){return e.flatMap((e=>[e.x,e.y]))}function move(t=0,i=0){"object"==typeof t&&t.x&&(i=t.y||0,t=t.x);for(let n of e)n.x+=t,n.y+=i;return this}function selezionaprimo(t){return(t%=e.length)>0&&(e=[...e.slice(t),...e.slice(0,t)]),this}function _addvec(t){for(let i=0;i<t.length;i+=2)e.push({x:t[i],y:t[i+1]})}function fromstr(t){return e=removeduplicate(function processTokens(e){const t=[];for(let i=0;i<e.length;i++){const n=e[i];if("point"===n.type)t.push(n.point);else if("command"===n.type)switch(n.cmd){case"x":{const s=t[t.length-1],r="point"===e[i+1]?.type?e[i+1].point:t[0],o=parseFloat(n.params[0])||5;{const e=1;let i=r.x-s.x,n=r.y-s.y,a=Math.hypot(i,n);a>1&&t.push(...dxfbulge(s,r,o,Math.floor((a-e)/(e+2))+1))}break}case"b":{if(t.length<2)continue;const s=parseInt(n.params[0])||5,r=t[t.length-2],o=t[t.length-1];let a="point"===e[i+1]?.type?e[i+1].point:void 0,A="point"===e[i+2]?.type?e[i+2].point:void 0;a?A||(A=t[0]):(a=t[0],A=t[1]);const l=raccordabezier(r,o,a,A,s);t.push(...l),i+=1;break}case"r":{if(t.length<1)continue;const s=parseFloat(n.params[0])||0;if(s>0){const r=parseInt(n.params[1])||Math.min(s,10),o=t[t.length-1];let a="point"===e[i+1]?.type?e[i+1].point:void 0,A="point"===e[i+2]?.type?e[i+2].point:"point"===e[i+3]?.type?e[i+3].point:void 0;a?A||(A=t[0]):(a=t[0],A=t[1],t.splice(0,1));const l=raccordabezier3(o,a,A,s,r);t.push(...l),i+=1}break}case"c":{let s,r;if(n.params[0].includes("/")){let e=n.params[0].split("/");s=parseFloat(e[0])||50,r=parseFloat(e[1])||s||50}else s=parseFloat(n.params[0])||50,r=s;let o=(parseFloat(n.params[2])||0)*Ue,a=(parseFloat(n.params[3])||0)*Ue;const A=parseInt(n.params[1])||12,l="point"===e[i+1]?.type?e[i+1].point:new Punto2(0,0);for(let e=0;e<=A;e++){let i,n;if(o||a){let t=a-o;i=s*Math.cos(e/A*t+o),n=r*Math.sin(e/A*t+o)}else i=s*Math.cos(e/A*Math.PI*2+Math.PI),n=r*Math.sin(e/A*Math.PI*2+Math.PI);t.push(new Punto2(l.x+i,l.y+n))}i+=1;break}case"a":{let s,r="point"===e[i+1]?.type?e[i+1].point:void 0,o="point"===e[i+2]?.type?e[i+2].point:void 0,a="point"===e[i+3]?.type?e[i+3].point:void 0;if(!r||!a)continue;if(o)if(n.params[0])s=clamp(parseInt(n.params[0]),1,40);else{const e=Math.hypot(a.x-r.x,a.y-r.y),t=Math.abs((o.x-r.x)*(a.y-r.y)-(a.x-r.x)*(o.y-r.y))/(2*e);s=Math.round(e*Math.sqrt(t/(e+.1))*10),s=clamp(s,1,24),s=1}else o=a,s=0;const A=arcfrom3point(s,r,o,a);t.push(...A),i+=3;break}}}return t}(function tokenize(e){const t=[],i=e.replace(/[\n\r,;]/g," ").replace(/\s+/g," ").toLowerCase().trim().split(" ").filter((e=>e.length>0));let n=0;for(;n<i.length;){const e=i[n];/^[brcax]/.test(e)?(t.push({type:"command",cmd:e[0],params:e.slice(1).split(":")}),n++):n<i.length-1&&/^-?\d+(\.\d+)?$/.test(i[n])&&/^-?\d+(\.\d+)?$/.test(i[n+1])?(t.push({type:"point",point:new Punto2(parseFloat(i[n]),parseFloat(i[n+1]))}),n+=2):n++}return t}(t))),this}function dims(e){let{p1:t,p2:i}=e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}),n=!1;if(4==e.length){const s=.001;function findpunto(t,i){let n=e.find((e=>Math.abs(e.x-t)<s&&Math.abs(e.y-i)<s));return!!n}findpunto(t.x,t.y)&&findpunto(t.x,i.y)&&findpunto(i.x,t.y)&&findpunto(i.x,i.y)&&(n=!0)}return{p1:t,p2:i,isrect:n,width:i.x-t.x,height:i.y-t.y}}return{get key(){return hash(tovec().join("\t"))},orienta:function orienta(t,i){if(!t||!i)return null;const n=i.x-t.x,s=i.y-t.y,r=180*Math.atan2(s,n)/Math.PI,o=new Matrix3D;o.rotateZ(-r),o.translate(-t.x,-t.y,0);const a=e.map((e=>o.transform(e.x,e.y)));let A=a.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)});return{shape:getshape().frompt(a),origine:new Punto2(t.x,t.y),angolo:r,mm:A,width:A.p2.x-A.p1.x,height:A.p2.y-A.p1.y}},rebase:function rebase(t,i=!1,n=0,s=0){const r=new Matrix3D;r.rotateZ(-t);let o=e.map((e=>r.transform(e.x,e.y))),{p1:a,p2:A,width:l,height:c}=dims(o);return i||(n=a.x,s=a.y),o=o.map((e=>new Punto2(e.x-n,e.y-s))),{shape:getshape().frompt(o),origine:new Punto2(n,s),angolo:t,width:l,height:c}},fromstr:fromstr,move:move,infocircle:infocircle,intersectcircle:intersectcircle,get pt(){return e},set pt(t){Array.isArray(t)&&(e=t)},get npt(){return e?.length||0},get vec(){return tovec()},toJSON:()=>({vec:tovec(),orient:orientation()}),get orient(){return orientation()},corners:(t=45)=>function sharpCorners(e,t=45){const i=[],n=e.length;if(n<3)return i;for(let s=0;s<n;s++){const r=e[(s-1+n)%n],o=e[s],a=e[(s+1)%n],A=o.x-r.x,l=o.y-r.y,c=a.x-o.x,h=a.y-o.y,p=Math.hypot(A,l),u=Math.hypot(c,h);if(0===p||0===u)continue;let g=(A*c+l*h)/(p*u);g=Math.max(-1,Math.min(1,g));const d=180*Math.acos(g)/Math.PI;d>t&&i.push({i:s,x:o.x,y:o.y,a:d})}return i}(e,45),clone:()=>getshape().frompt(e),dims(){let t=dims(e),i=0;for(let t=0;t<e.length;t++){let n=(t+1)%e.length;const s=e[t].x-e[n].x,r=e[t].y-e[n].y;i+=Math.sqrt(s*s+r*r)}return t.lung=i,t},get area(){return Math.abs(e.reduce(((t,i,n)=>{const s=e[(n+1)%e.length];return t+(i.x*s.y-s.x*i.y)}),0)/2)},pointslink(t){let i=mapvertices(e,t.pt),n=[];for(let e of i)n[e[0]]=t.pt[e[1]];return n},alignline(t,i){return e=function stretchShapeToLine(e,t,i){if(!e?.length||!t||!i)return[];const n=e[0],s=e[e.length-1],r=s.x-n.x,o=s.y-n.y,a=Math.atan2(o,r);let A=e.map((e=>({x:e.x-n.x,y:e.y-n.y}))),l=A.map((e=>({x:e.x*Math.cos(-a)-e.y*Math.sin(-a),y:e.x*Math.sin(-a)+e.y*Math.cos(-a)})));const c={dx:i.x-t.x,dy:i.y-t.y},h=Math.sqrt(c.dx*c.dx+c.dy*c.dy)/(l[l.length-1].x||1e-8);let p=l.map((e=>({x:e.x*h,y:e.y})));const u=Math.atan2(c.dy,c.dx);let g=p.map((e=>({x:e.x*Math.cos(u)-e.y*Math.sin(u),y:e.x*Math.sin(u)+e.y*Math.cos(u)}))),d=g.map((e=>({x:e.x+t.x,y:e.y+t.y})));return d}(e,t,i),this},rotate(t){if(!t)return this;const i=t*Math.PI/180,n=Math.cos(i),s=Math.sin(i);for(let t of e){const e=t.x*n-t.y*s,i=t.x*s+t.y*n;t.x=e,t.y=i}return this},selezionaprimo:selezionaprimo,segment(t,i=!1){let n=e.length;return t<0&&(t+=n),new Linea2(e[t%n],e[(t+(i?-1:1))%n])},lineoffset(t,i,n){if((t=(t||0)%e.length)!=(i=(i||0)%e.length)){let s=new Linea2(e[t],e[i]);if(s){return s=s.offsetline(-n),this.intersectline(s)}}},orientasplitter(){-1!=orientation()&&e.reverse();let t=e.length;for(let i=0;i<t;i++){let n=new Linea2(e[(t+i-1)%t],e[i]);if(Math.abs(Math.abs(n.angle)-Math.PI)<.001){i&&selezionaprimo(i);break}}return this},mirrorx(t=0){for(let i of e)i.x=2*t-i.x;return this},mirrory(t=0){for(let i of e)i.y=2*t-i.y;return this},simplify(t,i){return e=simplify(e,t,i),this},fromclip(t){e=[];for(let i of t)e.push({x:i.x/1e3,y:i.y/1e3});return this},infosegmento(t,i=!1){const n=e.length;function clampIndex(e){return(e+n)%n}function angle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}function angleDiff(e,t){let i=e-t;for(;i>Math.PI;)i-=2*Math.PI;for(;i<-Math.PI;)i+=2*Math.PI;return i}const s=e[t];let r,o,a;if(i)if(0===t){const t=e[1].x-e[0].x,i=e[1].y-e[0].y;r={x:e[0].x-t,y:e[0].y-i},o=e[1],a=2==n?{x:e[1].x+t,y:e[1].y+i}:e[2]}else if(t===n-1){const t=e[n-1].x-e[n-2].x,i=e[n-1].y-e[n-2].y;r=e[n-2],o={x:e[n-1].x+t,y:e[n-1].y+i},a={x:o.x+t,y:o.y+i}}else r=e[t-1],o=e[t+1],a=t+2<n?e[t+2]:{x:e[t+1].x+(e[t+1].x-e[t].x),y:e[t+1].y+(e[t+1].y-e[t].y)};else{const i=clampIndex(t-1),n=clampIndex(t+1),s=clampIndex(t+2);r=e[i],o=e[n],a=e[s]}const A=angle(s,o),l=angle(r,s),c=angle(o,a);return{x:s.x,y:s.y,l:function length(e,t){const i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}(s,o),ang:A/Ue,a1:angleDiff(A,l)/Ue,a2:angleDiff(c,A)/Ue}},swapxy(){for(let t=0;t<e.length;t++){let i=e[t].x;e[t].x=-e[t].y,e[t].y=-i}return this},fromvec(t){return e=[],_addvec(t),this},addvec(e){return _addvec(e),this},frompt(t){return e=[...t],e=removeduplicate(e),this},fromdxfvec(t){let i=[];if(t&&t.length)for(let e=0;e<t.length;e++){let{x:n,y:s,bulge:r}=t[e];if(i.push({x:n,y:s}),r){const o=1;let a={x:n,y:s},A=t[(e+1)%t.length],l=A.x-a.x,c=A.y-a.y,h=Math.hypot(l,c);h>o&&i.push(...dxfbulge(a,A,r,Math.floor((h-o)/o)+1))}}return e=i.map((e=>({x:Math.round(10*e.x)/10,y:Math.round(10*e.y)/10}))),e=removeduplicate(e),this},monotona(){let t=dims(e),i=e.map((e=>({x:e.x-t.p2.x,y:e.y}))),n=[];n.push(i[0]);let s=i[0].y,r=1e-4;for(let e=1;e<i.length;e++)if(i[e].y>s+r||e==i.length-1)n.push(i[e]),s=i[e].y;else{const t=s+r;n.push({x:i[e].x,y:t}),s=t}return{sh:getshape().frompt(n),...t}},offsetshape(e){let t=[],i=this;for(let n=0;n<i.npt-1;n++){let s=i.segment(n).offset(e);t.push(s)}let n=i.segment(0).perpendicolare(),s=i.segment(i.npt-2),r=s.perpendicolare(s.p2),o=[n.interseca(t[0])];for(let e=0;e<t.length-1;e++){let i=t[e].interseca(t[e+1]);i&&o.push(i)}return o.push(t[t.length-1].interseca(r)),getshape().frompt(o)},sliceony(t){let i=t.pt.map((e=>e.y)).slice(1,-1);const n=[],s=e.length;let r=0,o=e[0].y;for(let t=1;t<s;t++)e[t].y<o&&(o=e[t].y,r=t);const a=[...e.slice(r),...e.slice(0,r)],A=a.length,l=new Map;for(let e=0;e<A;e++)for(let t of i)Math.abs(a[e].y-t)<1e-5&&(l.has(t)?l.get(t).i2=e:l.set(t,{i1:e,i2:e}));const c=i.map((e=>l.get(e))).filter((e=>e&&e.i1>=0&&e.i2>=0));c.length>0&&c[0].i1>0&&n.push([...a.slice(0,c[0].i1+1),...a.slice(c[0].i2,c[0].length)]);for(let e=0;e<c.length-1;e++){const t=c[e],i=c[e+1];n.push([...a.slice(t.i1,i.i1+1),...a.slice(i.i2,t.i2+1)])}const h=c[c.length-1];h.i2>h.i1&&n.push(a.slice(h.i1,h.i2+1));return n.filter((e=>e.length>0))},splitvert:function splitvert(e,t=!0){const i=t?this.intersectline(new Linea2(e,-100,e,100)):this.intersectline(new Linea2(-100,e,100,e));if(!i)return null;let n=i.p1,s=i.p2;const findIndex=e=>this.pt.findIndex(((t,i)=>new Linea2(t,this.pt[(i+1)%this.pt.length]).onsegment(e)));let r=findIndex(n),o=findIndex(s);if(r<0||o<0)return null;if(r>o){let e=r;r=o,o=e,e=n,n=s,s=e}const a=this.pt.length;let A=[],l=[];for(let e=0;e<a;e++)A.push(this.pt[e]),e==r&&(A.push(n),A.push(s),e=o);t?(l.push(s),l.push(n)):l.push(n);for(let e=r+1;e<=o;e++)l.push(this.pt[e]);return t||l.push(s),{sx:getshape().frompt(A),dx:getshape().frompt(l),linea:i}},splitoriz(e){return this.splitvert(e,!1)},splitshape(e,t=!0){const i=100,n=t?{x:e.x,y:e.y-i}:{x:e.x-i,y:e.y},s=t?{x:e.x,y:e.y+i}:{x:e.x+i,y:e.y},r=this.intersectline(new Linea2(n,s));if(!r)return null;const o=r.p1,a=r.p2,findIndex=e=>this.pt.findIndex(((t,i)=>new Linea2(t,this.pt[(i+1)%this.pt.length]).onsegment(e))),A=findIndex(o),l=findIndex(a);if(A<0||l<0)return null;const c=this.pt.length,loop=(e,t,i,n)=>{const s=[];for(let i=e;i!==t;i=(i+1)%c)s.push(this.pt[(i+1)%c]);return s},h=getshape().frompt(loop(A,l));return{sx:getshape().frompt(loop(l,A)),dx:h,linea:r}},xfromy(e,t=0,i=!0){const n=[],s=this.pt.length;for(let t=0;t<s-1;t++){const s=this.pt[t],r=this.pt[t+1];if(s.y<=e&&r.y>=e||r.y<=e&&s.y>=e){const t=r.y-s.y,i=t?(e-s.y)/t:0,o=s.x+i*(r.x-s.x);n.push(o)}else s.y===e&&r.y===e&&n.push(i?Math.max(s.x,r.x):Math.min(s.x,r.x))}return n.length?i?Math.max(...n):Math.min(...n):t},yfromx(e,t=0,i=!0){const n=[],s=this.pt.length;for(let t=0;t<s-1;t++){const s=this.pt[t],r=this.pt[t+1];if(s.x<=e&&r.x>=e||r.x<=e&&s.x>=e){const t=r.x-s.x,i=t?(e-s.x)/t:0,o=s.y+i*(r.y-s.y);n.push(o)}else s.x===e&&r.x===e&&n.push(i?Math.max(s.y,r.y):Math.min(s.y,r.y))}return n.length?i?Math.max(...n):Math.min(...n):t},forcevalues(t,i=!0,n=1e-6){const s=[...new Set(t.pt.map((e=>i?e.y:e.x)))].sort(((e,t)=>e-t)),r=[],o=e.length;for(let t=0;t<o;t++){const a=e[t],A=e[(t+1)%o];r.push({...a});let l=i?a.y:a.x,c=i?A.y:A.x;if(l===c)continue;const h=c>l?s.filter((e=>e>l+n&&e<c-n)):s.filter((e=>e<l-n&&e>c+n)).reverse();for(const e of h){const t=(e-l)/(c-l),i={x:a.x+t*(A.x-a.x),y:a.y+t*(A.y-a.y)};r.push(i)}}return e=r,this},fromrrect(e,t,i=10,n=0,s=0){return(i>=e/2||i>=t/2&&i<=0)&&(i=Math.round(Math.min(e/3,t/3))),fromstr(`0,0,r${i},${e},0,r${i},${e},${t},r${i},0,${t},r${i}`),(n||s)&&move(n,s),this},fromrect(t,i,n,s,r){t||(t=10),i||(i=10),r||(r=0),r=Math.min(Math.abs(r),Math.abs(.4*t),Math.abs(.4*i));let o=t>0?r:-r,a=i>0?r:-r;return e=r?[{x:o,y:0},{x:t-o,y:0},{x:t,y:a},{x:t,y:i-a},{x:t-o,y:i},{x:o,y:i},{x:0,y:i-a},{x:0,y:a}]:[{x:0,y:0},{x:t,y:0},{x:t,y:i},{x:0,y:i}],this},intersectline:t=>function _intersectline(e,t,i){let n=e.length,s=new Linea2(t,i);const r=[];for(let t=0;t<e.length;t++){let i=new Linea2(e[t],e[(t+1)%n]),o=i.interseca(s);o&&i.onsegment(o)&&r.push(o)}if(r.length<2)return null;const{dx:o,dy:a}=s;r.sort(((e,i)=>(e.x-t.x)*o+(e.y-t.y)*a-((i.x-t.x)*o+(i.y-t.y)*a)));let A=new Punto2(r[0].x,r[0].y),l=new Punto2(r[r.length-1].x,r[r.length-1].y);const c=l.x-A.x,h=l.y-A.y;return c*o+h*a<0&&([A,l]=[l,A]),new Linea2(A,l)}(e,t.p1,t.p2),tostr(t=2){let i=10**t,pstr=e=>String(Math.round(e*i)/i),n=e.map((e=>`${pstr(e.x)};${pstr(e.y)};`)).join("");return n&&n.length?n.slice(0,-1).match(/.{1,80}(;|$)/g).map((e=>e.trim())).join("\n"):""},addpt(t){return t?(Array.isArray(t)||(t=[t]),e=removeduplicate([...e,...t]),this):this},addracc(t,i,n=2,s=!0){if(Array.isArray(t)&&(i={x:t[2]||0,y:t[3]||0},t={x:t[0]||0,y:t[1]||0}),e.length>=2){let r=raccordabezier(e[e.length-2],e[e.length-1],t,i,n);e=[...e,...r],s&&(e.push(t),e.push(i))}return e=removeduplicate(e),this},setorient(t){let i=orientation();return(1==i&&-1==t||-1==i&&1==t)&&e.reverse(),this},reverse(){return e.reverse(),this},pointinshape:t=>function isPointInPolygon(t){let i=t.x,n=t.y,s=!1;for(let t=0,r=e.length-1;t<e.length;r=t++){let o=e[t].x,a=e[t].y,A=e[r].x,l=e[r].y;a>n!=l>n&&i<(A-o)*(n-a)/(l-a)+o&&(s=!s)}return s}(t),azzera(){return e=[],this},truncatebefore:function truncatebefore(t){let i=new Linea2(e[0],e[1]),n=t.interseca(i);if(n){let t=e[0],i=e[1],s=i.x-t.x,r=i.y-t.y,o=s*s+r*r;if(o){if(((n.x-t.x)*s+(n.y-t.y)*r)/o<=1)return e[0]=n,this}}for(let i=1;i<e.length-1;i++){let n=new Linea2(e[i],e[i+1]),s=t.interseca(n);if(s&&n.onsegment(s))return e=e.slice(i),e[0]=s,this}return this},truncateafter:function truncateafter(t){let i=e.length,n=new Linea2(e[i-2],e[i-1]),s=t.interseca(n);if(s){let t=e[i-2],n=e[i-1],r=n.x-t.x,o=n.y-t.y,a=r*r+o*o;if(a){if(((s.x-t.x)*r+(s.y-t.y)*o)/a>=0)return e[i-1]=s,this}}for(let n=i-3;n>=0;n--){let i=new Linea2(e[n],e[n+1]),s=t.interseca(i);if(s&&i.onsegment(s))return e=e.slice(0,n+1),e.push(s),this}return this},removeduplicate(t=.005){return e=removeduplicate(e,t),this},to3d(t,i=0,n=0,s=0,r=!1,o=null,a=!1){let A=function to3dcoor(e,t){let{currentU:i=0,c:n=0,a:s=0,b:r=0,anglemin:o=30,open:a=!1,sh:A=null,invert:l=!1}=t;const c=[],h=e.length;for(let t=0;t<h;t++){const a=e[(t-1+h)%h],p=e[t],u=e[(t+1)%h],g={x:p.x-a.x,y:p.y-a.y},d={x:u.x-p.x,y:u.y-p.y},f=normal2(a,p),m=normal2(p,u),I=angle2vec(g,d);let b=s*p.x+r*p.y+n;if(A){let e=A.xfromy(p.y,0,!0);l?b+=e:b-=e}Math.abs(I-180)<=o?(f.nx,m.nx,f.ny,m.ny,c.push({x:p.x,y:-p.y,z:b,u:i,v:b})):(c.push({x:p.x,y:-p.y,z:b,u:i,v:b}),c.push({x:p.x,y:-p.y,z:b,u:i,v:b}));const y=u.x-p.x,C=u.y-p.y;i+=Math.sqrt(y*y+C*C)}if(!a){let e=c[0],t=c[c.length-1];e.x==t.x&&e.y==t.y||c.push({x:e.x,y:e.y,z:e.z,nx:e.nx,ny:e.ny,nz:e.nz,u:i,v:e.z})}return c}(e,{open:r,currentU:t,c:i,a:n,b:s,anglemin:30,sh:o,invert:a});return A},getboundbox:()=>e.length?e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.x=Math.max(e.p2.x,t.x),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}):{p1:new Punto2(0,0),p2:new Punto2(0,0)},fittobox(t,i){if(!e.length)return this;const n=this.getboundbox(),s=n.p2.x-n.p1.x,r=n.p2.y-n.p1.y,o=i.x-t.x,a=i.y-t.y,A=Math.min(o/(s||1),a/(r||1));for(let i of e)i.x=(i.x-n.p1.x)*A,i.y=(i.y-n.p1.y)*A,i.x+=t.x,i.y+=t.y;return this}}}function arcfrom3point(e,t,i,n){if(e<=0)return[t,n];if(1===e)return[t,i,n];const s=function findCircleCenter(e,t,i){const n=t.x*t.x+t.y*t.y,s=(e.x*e.x+e.y*e.y-n)/2,r=(n-i.x*i.x-i.y*i.y)/2,o=(e.x-t.x)*(t.y-i.y)-(t.x-i.x)*(e.y-t.y);return Math.abs(o)<1e-10?null:new Punto2((s*(t.y-i.y)-r*(e.y-t.y))/o,((e.x-t.x)*r-(t.x-i.x)*s)/o)}(t,i,n);if(!s){const i=[];for(let s=0;s<=e;s++){const r=s/e;i.push(new Punto2(t.x+(n.x-t.x)*r,t.y+(n.y-t.y)*r))}return i}let r=Math.atan2(t.y-s.y,t.x-s.x);Math.atan2(i.y-s.y,i.x-s.x);let o=Math.atan2(n.y-s.y,n.x-s.x);const a=(i.x-t.x)*(n.y-t.y)-(i.y-t.y)*(n.x-t.x),norm=e=>(e+2*Math.PI)%(2*Math.PI);r=norm(r),o=norm(o),a>0?o<r&&(o+=2*Math.PI):o>r&&(o-=2*Math.PI);const A=Math.hypot(t.x-s.x,t.y-s.y),l=(o-r)/e,c=[];for(let t=0;t<=e;t++){const e=r+l*t;c.push(new Punto2(s.x+A*Math.cos(e),s.y+A*Math.sin(e)))}return c}function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var qe,ze={exports:{}};qe=ze,function(){var e,t={version:"6.4.2.2",use_lines:!0,use_xyz:!1},i=!1;if(qe.exports?(qe.exports=t,i=!0):"undefined"!=typeof document?window.ClipperLib=t:self.ClipperLib=t,i)n="chrome",e="Netscape";else{var n=navigator.userAgent.toString().toLowerCase();e=navigator.appName}var s,r={};function BigInteger(e,i,n){t.biginteger_used=1,null!=e&&("number"==typeof e&&void 0===i?this.fromInt(e):"number"==typeof e?this.fromNumber(e,i,n):null==i&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,i))}function nbi(){return new BigInteger(null,void 0,void 0)}-1!=n.indexOf("chrome")&&-1==n.indexOf("chromium")?r.chrome=1:r.chrome=0,-1!=n.indexOf("chromium")?r.chromium=1:r.chromium=0,-1!=n.indexOf("safari")&&-1==n.indexOf("chrome")&&-1==n.indexOf("chromium")?r.safari=1:r.safari=0,-1!=n.indexOf("firefox")?r.firefox=1:r.firefox=0,-1!=n.indexOf("firefox/17")?r.firefox17=1:r.firefox17=0,-1!=n.indexOf("firefox/15")?r.firefox15=1:r.firefox15=0,-1!=n.indexOf("firefox/3")?r.firefox3=1:r.firefox3=0,-1!=n.indexOf("opera")?r.opera=1:r.opera=0,-1!=n.indexOf("msie 10")?r.msie10=1:r.msie10=0,-1!=n.indexOf("msie 9")?r.msie9=1:r.msie9=0,-1!=n.indexOf("msie 8")?r.msie8=1:r.msie8=0,-1!=n.indexOf("msie 7")?r.msie7=1:r.msie7=0,-1!=n.indexOf("msie ")?r.msie=1:r.msie=0,t.biginteger_used=null,"Microsoft Internet Explorer"==e?(BigInteger.prototype.am=function am2(e,t,i,n,s,r){for(var o=32767&t,a=t>>15;--r>=0;){var A=32767&this[e],l=this[e++]>>15,c=a*A+l*o;s=((A=o*A+((32767&c)<<15)+i[n]+(1073741823&s))>>>30)+(c>>>15)+a*l+(s>>>30),i[n++]=1073741823&A}return s},s=30):"Netscape"!=e?(BigInteger.prototype.am=function am1(e,t,i,n,s,r){for(;--r>=0;){var o=t*this[e++]+i[n]+s;s=Math.floor(o/67108864),i[n++]=67108863&o}return s},s=26):(BigInteger.prototype.am=function am3(e,t,i,n,s,r){for(var o=16383&t,a=t>>14;--r>=0;){var A=16383&this[e],l=this[e++]>>14,c=a*A+l*o;s=((A=o*A+((16383&c)<<14)+i[n]+s)>>28)+(c>>14)+a*l,i[n++]=268435455&A}return s},s=28),BigInteger.prototype.DB=s,BigInteger.prototype.DM=(1<<s)-1,BigInteger.prototype.DV=1<<s,BigInteger.prototype.FV=Math.pow(2,52),BigInteger.prototype.F1=52-s,BigInteger.prototype.F2=2*s-52;var o,a,A=new Array;for(o="0".charCodeAt(0),a=0;a<=9;++a)A[o++]=a;for(o="a".charCodeAt(0),a=10;a<36;++a)A[o++]=a;for(o="A".charCodeAt(0),a=10;a<36;++a)A[o++]=a;function int2char(e){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(e)}function intAt(e,t){var i=A[e.charCodeAt(t)];return null==i?-1:i}function nbv(e){var t=nbi();return t.fromInt(e),t}function nbits(e){var t,i=1;return 0!=(t=e>>>16)&&(e=t,i+=16),0!=(t=e>>8)&&(e=t,i+=8),0!=(t=e>>4)&&(e=t,i+=4),0!=(t=e>>2)&&(e=t,i+=2),0!=(t=e>>1)&&(e=t,i+=1),i}function Classic(e){this.m=e}function Montgomery(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<e.DB-15)-1,this.mt2=2*e.t}function op_and(e,t){return e&t}function op_or(e,t){return e|t}function op_xor(e,t){return e^t}function op_andnot(e,t){return e&~t}function lbit(e){if(0==e)return-1;var t=0;return 65535&e||(e>>=16,t+=16),255&e||(e>>=8,t+=8),15&e||(e>>=4,t+=4),3&e||(e>>=2,t+=2),1&e||++t,t}function cbit(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function NullExp(){}function nNop(e){return e}function Barrett(e){this.r2=nbi(),this.q3=nbi(),BigInteger.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}Classic.prototype.convert=function cConvert(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},Classic.prototype.revert=function cRevert(e){return e},Classic.prototype.reduce=function cReduce(e){e.divRemTo(this.m,null,e)},Classic.prototype.mulTo=function cMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Classic.prototype.sqrTo=function cSqrTo(e,t){e.squareTo(t),this.reduce(t)},Montgomery.prototype.convert=function montConvert(e){var t=nbi();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(BigInteger.ZERO)>0&&this.m.subTo(t,t),t},Montgomery.prototype.revert=function montRevert(e){var t=nbi();return e.copyTo(t),this.reduce(t),t},Montgomery.prototype.reduce=function montReduce(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t<this.m.t;++t){var i=32767&e[t],n=i*this.mpl+((i*this.mph+(e[t]>>15)*this.mpl&this.um)<<15)&e.DM;for(e[i=t+this.m.t]+=this.m.am(0,n,e,t,0,this.m.t);e[i]>=e.DV;)e[i]-=e.DV,e[++i]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},Montgomery.prototype.mulTo=function montMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Montgomery.prototype.sqrTo=function montSqrTo(e,t){e.squareTo(t),this.reduce(t)},BigInteger.prototype.copyTo=function bnpCopyTo(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},BigInteger.prototype.fromInt=function bnpFromInt(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},BigInteger.prototype.fromString=function bnpFromString(e,t){var i;if(16==t)i=4;else if(8==t)i=3;else if(256==t)i=8;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return void this.fromRadix(e,t);i=2}this.t=0,this.s=0;for(var n=e.length,s=!1,r=0;--n>=0;){var o=8==i?255&e[n]:intAt(e,n);o<0?"-"==e.charAt(n)&&(s=!0):(s=!1,0==r?this[this.t++]=o:r+i>this.DB?(this[this.t-1]|=(o&(1<<this.DB-r)-1)<<r,this[this.t++]=o>>this.DB-r):this[this.t-1]|=o<<r,(r+=i)>=this.DB&&(r-=this.DB))}8==i&&128&e[0]&&(this.s=-1,r>0&&(this[this.t-1]|=(1<<this.DB-r)-1<<r)),this.clamp(),s&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.clamp=function bnpClamp(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t},BigInteger.prototype.dlShiftTo=function bnpDLShiftTo(e,t){var i;for(i=this.t-1;i>=0;--i)t[i+e]=this[i];for(i=e-1;i>=0;--i)t[i]=0;t.t=this.t+e,t.s=this.s},BigInteger.prototype.drShiftTo=function bnpDRShiftTo(e,t){for(var i=e;i<this.t;++i)t[i-e]=this[i];t.t=Math.max(this.t-e,0),t.s=this.s},BigInteger.prototype.lShiftTo=function bnpLShiftTo(e,t){var i,n=e%this.DB,s=this.DB-n,r=(1<<s)-1,o=Math.floor(e/this.DB),a=this.s<<n&this.DM;for(i=this.t-1;i>=0;--i)t[i+o+1]=this[i]>>s|a,a=(this[i]&r)<<n;for(i=o-1;i>=0;--i)t[i]=0;t[o]=a,t.t=this.t+o+1,t.s=this.s,t.clamp()},BigInteger.prototype.rShiftTo=function bnpRShiftTo(e,t){t.s=this.s;var i=Math.floor(e/this.DB);if(i>=this.t)t.t=0;else{var n=e%this.DB,s=this.DB-n,r=(1<<n)-1;t[0]=this[i]>>n;for(var o=i+1;o<this.t;++o)t[o-i-1]|=(this[o]&r)<<s,t[o-i]=this[o]>>n;n>0&&(t[this.t-i-1]|=(this.s&r)<<s),t.t=this.t-i,t.clamp()}},BigInteger.prototype.subTo=function bnpSubTo(e,t){for(var i=0,n=0,s=Math.min(e.t,this.t);i<s;)n+=this[i]-e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n-=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n-=e[i],t[i++]=n&this.DM,n>>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t[i++]=this.DV+n:n>0&&(t[i++]=n),t.t=i,t.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(e,t){var i=this.abs(),n=e.abs(),s=i.t;for(t.t=s+n.t;--s>=0;)t[s]=0;for(s=0;s<n.t;++s)t[s+i.t]=i.am(0,n[s],t,s,0,i.t);t.s=0,t.clamp(),this.s!=e.s&&BigInteger.ZERO.subTo(t,t)},BigInteger.prototype.squareTo=function bnpSquareTo(e){for(var t=this.abs(),i=e.t=2*t.t;--i>=0;)e[i]=0;for(i=0;i<t.t-1;++i){var n=t.am(i,t[i],e,2*i,0,1);(e[i+t.t]+=t.am(i+1,2*t[i],e,2*i+1,n,t.t-i-1))>=t.DV&&(e[i+t.t]-=t.DV,e[i+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(i,t[i],e,2*i,0,1)),e.s=0,e.clamp()},BigInteger.prototype.divRemTo=function bnpDivRemTo(e,t,i){var n=e.abs();if(!(n.t<=0)){var s=this.abs();if(s.t<n.t)return null!=t&&t.fromInt(0),void(null!=i&&this.copyTo(i));null==i&&(i=nbi());var r=nbi(),o=this.s,a=e.s,A=this.DB-nbits(n[n.t-1]);A>0?(n.lShiftTo(A,r),s.lShiftTo(A,i)):(n.copyTo(r),s.copyTo(i));var l=r.t,c=r[l-1];if(0!=c){var h=c*(1<<this.F1)+(l>1?r[l-2]>>this.F2:0),p=this.FV/h,u=(1<<this.F1)/h,g=1<<this.F2,d=i.t,f=d-l,m=null==t?nbi():t;for(r.dlShiftTo(f,m),i.compareTo(m)>=0&&(i[i.t++]=1,i.subTo(m,i)),BigInteger.ONE.dlShiftTo(l,m),m.subTo(r,r);r.t<l;)r[r.t++]=0;for(;--f>=0;){var I=i[--d]==c?this.DM:Math.floor(i[d]*p+(i[d-1]+g)*u);if((i[d]+=r.am(0,I,i,f,0,l))<I)for(r.dlShiftTo(f,m),i.subTo(m,i);i[d]<--I;)i.subTo(m,i)}null!=t&&(i.drShiftTo(l,t),o!=a&&BigInteger.ZERO.subTo(t,t)),i.t=l,i.clamp(),A>0&&i.rShiftTo(A,i),o<0&&BigInteger.ZERO.subTo(i,i)}}},BigInteger.prototype.invDigit=function bnpInvDigit(){if(this.t<1)return 0;var e=this[0];if(!(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},BigInteger.prototype.isEven=function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)},BigInteger.prototype.exp=function bnpExp(e,t){if(e>4294967295||e<1)return BigInteger.ONE;var i=nbi(),n=nbi(),s=t.convert(this),r=nbits(e)-1;for(s.copyTo(i);--r>=0;)if(t.sqrTo(i,n),(e&1<<r)>0)t.mulTo(n,s,i);else{var o=i;i=n,n=o}return t.revert(i)},BigInteger.prototype.toString=function bnToString(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var i,n=(1<<t)-1,s=!1,r="",o=this.t,a=this.DB-o*this.DB%t;if(o-- >0)for(a<this.DB&&(i=this[o]>>a)>0&&(s=!0,r=int2char(i));o>=0;)a<t?(i=(this[o]&(1<<a)-1)<<t-a,i|=this[--o]>>(a+=this.DB-t)):(i=this[o]>>(a-=t)&n,a<=0&&(a+=this.DB,--o)),i>0&&(s=!0),s&&(r+=int2char(i));return s?r:"0"},BigInteger.prototype.negate=function bnNegate(){var e=nbi();return BigInteger.ZERO.subTo(this,e),e},BigInteger.prototype.abs=function bnAbs(){return this.s<0?this.negate():this},BigInteger.prototype.compareTo=function bnCompareTo(e){var t=this.s-e.s;if(0!=t)return t;var i=this.t;if(0!=(t=i-e.t))return this.s<0?-t:t;for(;--i>=0;)if(0!=(t=this[i]-e[i]))return t;return 0},BigInteger.prototype.bitLength=function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)},BigInteger.prototype.mod=function bnMod(e){var t=nbi();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(BigInteger.ZERO)>0&&e.subTo(t,t),t},BigInteger.prototype.modPowInt=function bnModPowInt(e,t){var i;return i=e<256||t.isEven()?new Classic(t):new Montgomery(t),this.exp(e,i)},BigInteger.ZERO=nbv(0),BigInteger.ONE=nbv(1),NullExp.prototype.convert=nNop,NullExp.prototype.revert=nNop,NullExp.prototype.mulTo=function nMulTo(e,t,i){e.multiplyTo(t,i)},NullExp.prototype.sqrTo=function nSqrTo(e,t){e.squareTo(t)},Barrett.prototype.convert=function barrettConvert(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=nbi();return e.copyTo(t),this.reduce(t),t},Barrett.prototype.revert=function barrettRevert(e){return e},Barrett.prototype.reduce=function barrettReduce(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},Barrett.prototype.mulTo=function barrettMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Barrett.prototype.sqrTo=function barrettSqrTo(e,t){e.squareTo(t),this.reduce(t)};var l=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],c=(1<<26)/l[l.length-1];BigInteger.prototype.chunkSize=function bnpChunkSize(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},BigInteger.prototype.toRadix=function bnpToRadix(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),i=Math.pow(e,t),n=nbv(i),s=nbi(),r=nbi(),o="";for(this.divRemTo(n,s,r);s.signum()>0;)o=(i+r.intValue()).toString(e).substr(1)+o,s.divRemTo(n,s,r);return r.intValue().toString(e)+o},BigInteger.prototype.fromRadix=function bnpFromRadix(e,t){this.fromInt(0),null==t&&(t=10);for(var i=this.chunkSize(t),n=Math.pow(t,i),s=!1,r=0,o=0,a=0;a<e.length;++a){var A=intAt(e,a);A<0?"-"==e.charAt(a)&&0==this.signum()&&(s=!0):(o=t*o+A,++r>=i&&(this.dMultiply(n),this.dAddOffset(o,0),r=0,o=0))}r>0&&(this.dMultiply(Math.pow(t,r)),this.dAddOffset(o,0)),s&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.fromNumber=function bnpFromNumber(e,t,i){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,i),this.testBit(e-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(e-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(BigInteger.ONE.shiftLeft(e-1),this);else{var n=new Array,s=7&e;n.length=1+(e>>3),t.nextBytes(n),s>0?n[0]&=(1<<s)-1:n[0]=0,this.fromString(n,256)}},BigInteger.prototype.bitwiseTo=function bnpBitwiseTo(e,t,i){var n,s,r=Math.min(e.t,this.t);for(n=0;n<r;++n)i[n]=t(this[n],e[n]);if(e.t<this.t){for(s=e.s&this.DM,n=r;n<this.t;++n)i[n]=t(this[n],s);i.t=this.t}else{for(s=this.s&this.DM,n=r;n<e.t;++n)i[n]=t(s,e[n]);i.t=e.t}i.s=t(this.s,e.s),i.clamp()},BigInteger.prototype.changeBit=function bnpChangeBit(e,t){var i=BigInteger.ONE.shiftLeft(e);return this.bitwiseTo(i,t,i),i},BigInteger.prototype.addTo=function bnpAddTo(e,t){for(var i=0,n=0,s=Math.min(e.t,this.t);i<s;)n+=this[i]+e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n+=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n+=e[i],t[i++]=n&this.DM,n>>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t[i++]=n:n<-1&&(t[i++]=this.DV+n),t.t=i,t.clamp()},BigInteger.prototype.dMultiply=function bnpDMultiply(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},BigInteger.prototype.dAddOffset=function bnpDAddOffset(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},BigInteger.prototype.multiplyLowerTo=function bnpMultiplyLowerTo(e,t,i){var n,s=Math.min(this.t+e.t,t);for(i.s=0,i.t=s;s>0;)i[--s]=0;for(n=i.t-this.t;s<n;++s)i[s+this.t]=this.am(0,e[s],i,s,0,this.t);for(n=Math.min(e.t,t);s<n;++s)this.am(0,e[s],i,s,0,t-s);i.clamp()},BigInteger.prototype.multiplyUpperTo=function bnpMultiplyUpperTo(e,t,i){--t;var n=i.t=this.t+e.t-t;for(i.s=0;--n>=0;)i[n]=0;for(n=Math.max(t-this.t,0);n<e.t;++n)i[this.t+n-t]=this.am(t-n,e[n],i,0,0,this.t+n-t);i.clamp(),i.drShiftTo(1,i)},BigInteger.prototype.modInt=function bnpModInt(e){if(e<=0)return 0;var t=this.DV%e,i=this.s<0?e-1:0;if(this.t>0)if(0==t)i=this[0]%e;else for(var n=this.t-1;n>=0;--n)i=(t*i+this[n])%e;return i},BigInteger.prototype.millerRabin=function bnpMillerRabin(e){var t=this.subtract(BigInteger.ONE),i=t.getLowestSetBit();if(i<=0)return!1;var n=t.shiftRight(i);(e=e+1>>1)>l.length&&(e=l.length);for(var s=nbi(),r=0;r<e;++r){s.fromInt(l[Math.floor(Math.random()*l.length)]);var o=s.modPow(n,this);if(0!=o.compareTo(BigInteger.ONE)&&0!=o.compareTo(t)){for(var a=1;a++<i&&0!=o.compareTo(t);)if(0==(o=o.modPowInt(2,this)).compareTo(BigInteger.ONE))return!1;if(0!=o.compareTo(t))return!1}}return!0},BigInteger.prototype.clone=function bnClone(){var e=nbi();return this.copyTo(e),e},BigInteger.prototype.intValue=function bnIntValue(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]},BigInteger.prototype.byteValue=function bnByteValue(){return 0==this.t?this.s:this[0]<<24>>24},BigInteger.prototype.shortValue=function bnShortValue(){return 0==this.t?this.s:this[0]<<16>>16},BigInteger.prototype.signum=function bnSigNum(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},BigInteger.prototype.toByteArray=function bnToByteArray(){var e=this.t,t=new Array;t[0]=this.s;var i,n=this.DB-e*this.DB%8,s=0;if(e-- >0)for(n<this.DB&&(i=this[e]>>n)!=(this.s&this.DM)>>n&&(t[s++]=i|this.s<<this.DB-n);e>=0;)n<8?(i=(this[e]&(1<<n)-1)<<8-n,i|=this[--e]>>(n+=this.DB-8)):(i=this[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),128&i&&(i|=-256),0==s&&(128&this.s)!=(128&i)&&++s,(s>0||i!=this.s)&&(t[s++]=i);return t},BigInteger.prototype.equals=function bnEquals(e){return 0==this.compareTo(e)},BigInteger.prototype.min=function bnMin(e){return this.compareTo(e)<0?this:e},BigInteger.prototype.max=function bnMax(e){return this.compareTo(e)>0?this:e},BigInteger.prototype.and=function bnAnd(e){var t=nbi();return this.bitwiseTo(e,op_and,t),t},BigInteger.prototype.or=function bnOr(e){var t=nbi();return this.bitwiseTo(e,op_or,t),t},BigInteger.prototype.xor=function bnXor(e){var t=nbi();return this.bitwiseTo(e,op_xor,t),t},BigInteger.prototype.andNot=function bnAndNot(e){var t=nbi();return this.bitwiseTo(e,op_andnot,t),t},BigInteger.prototype.not=function bnNot(){for(var e=nbi(),t=0;t<this.t;++t)e[t]=this.DM&~this[t];return e.t=this.t,e.s=~this.s,e},BigInteger.prototype.shiftLeft=function bnShiftLeft(e){var t=nbi();return e<0?this.rShiftTo(-e,t):this.lShiftTo(e,t),t},BigInteger.prototype.shiftRight=function bnShiftRight(e){var t=nbi();return e<0?this.lShiftTo(-e,t):this.rShiftTo(e,t),t},BigInteger.prototype.getLowestSetBit=function bnGetLowestSetBit(){for(var e=0;e<this.t;++e)if(0!=this[e])return e*this.DB+lbit(this[e]);return this.s<0?this.t*this.DB:-1},BigInteger.prototype.bitCount=function bnBitCount(){for(var e=0,t=this.s&this.DM,i=0;i<this.t;++i)e+=cbit(this[i]^t);return e},BigInteger.prototype.testBit=function bnTestBit(e){var t=Math.floor(e/this.DB);return t>=this.t?0!=this.s:!!(this[t]&1<<e%this.DB)},BigInteger.prototype.setBit=function bnSetBit(e){return this.changeBit(e,op_or)},BigInteger.prototype.clearBit=function bnClearBit(e){return this.changeBit(e,op_andnot)},BigInteger.prototype.flipBit=function bnFlipBit(e){return this.changeBit(e,op_xor)},BigInteger.prototype.add=function bnAdd(e){var t=nbi();return this.addTo(e,t),t},BigInteger.prototype.subtract=function bnSubtract(e){var t=nbi();return this.subTo(e,t),t},BigInteger.prototype.multiply=function bnMultiply(e){var t=nbi();return this.multiplyTo(e,t),t},BigInteger.prototype.divide=function bnDivide(e){var t=nbi();return this.divRemTo(e,t,null),t},BigInteger.prototype.remainder=function bnRemainder(e){var t=nbi();return this.divRemTo(e,null,t),t},BigInteger.prototype.divideAndRemainder=function bnDivideAndRemainder(e){var t=nbi(),i=nbi();return this.divRemTo(e,t,i),new Array(t,i)},BigInteger.prototype.modPow=function bnModPow(e,t){var i,n,s=e.bitLength(),r=nbv(1);if(s<=0)return r;i=s<18?1:s<48?3:s<144?4:s<768?5:6,n=s<8?new Classic(t):t.isEven()?new Barrett(t):new Montgomery(t);var o=new Array,a=3,A=i-1,l=(1<<i)-1;if(o[1]=n.convert(this),i>1){var c=nbi();for(n.sqrTo(o[1],c);a<=l;)o[a]=nbi(),n.mulTo(c,o[a-2],o[a]),a+=2}var h,p,u=e.t-1,g=!0,d=nbi();for(s=nbits(e[u])-1;u>=0;){for(s>=A?h=e[u]>>s-A&l:(h=(e[u]&(1<<s+1)-1)<<A-s,u>0&&(h|=e[u-1]>>this.DB+s-A)),a=i;!(1&h);)h>>=1,--a;if((s-=a)<0&&(s+=this.DB,--u),g)o[h].copyTo(r),g=!1;else{for(;a>1;)n.sqrTo(r,d),n.sqrTo(d,r),a-=2;a>0?n.sqrTo(r,d):(p=r,r=d,d=p),n.mulTo(d,o[h],r)}for(;u>=0&&!(e[u]&1<<s);)n.sqrTo(r,d),p=r,r=d,d=p,--s<0&&(s=this.DB-1,--u)}return n.revert(r)},BigInteger.prototype.modInverse=function bnModInverse(e){var t=e.isEven();if(this.isEven()&&t||0==e.signum())return BigInteger.ZERO;for(var i=e.clone(),n=this.clone(),s=nbv(1),r=nbv(0),o=nbv(0),a=nbv(1);0!=i.signum();){for(;i.isEven();)i.rShiftTo(1,i),t?(s.isEven()&&r.isEven()||(s.addTo(this,s),r.subTo(e,r)),s.rShiftTo(1,s)):r.isEven()||r.subTo(e,r),r.rShiftTo(1,r);for(;n.isEven();)n.rShiftTo(1,n),t?(o.isEven()&&a.isEven()||(o.addTo(this,o),a.subTo(e,a)),o.rShiftTo(1,o)):a.isEven()||a.subTo(e,a),a.rShiftTo(1,a);i.compareTo(n)>=0?(i.subTo(n,i),t&&s.subTo(o,s),r.subTo(a,r)):(n.subTo(i,n),t&&o.subTo(s,o),a.subTo(r,a))}return 0!=n.compareTo(BigInteger.ONE)?BigInteger.ZERO:a.compareTo(e)>=0?a.subtract(e):a.signum()<0?(a.addTo(e,a),a.signum()<0?a.add(e):a):a},BigInteger.prototype.pow=function bnPow(e){return this.exp(e,new NullExp)},BigInteger.prototype.gcd=function bnGCD(e){var t=this.s<0?this.negate():this.clone(),i=e.s<0?e.negate():e.clone();if(t.compareTo(i)<0){var n=t;t=i,i=n}var s=t.getLowestSetBit(),r=i.getLowestSetBit();if(r<0)return t;for(s<r&&(r=s),r>0&&(t.rShiftTo(r,t),i.rShiftTo(r,i));t.signum()>0;)(s=t.getLowestSetBit())>0&&t.rShiftTo(s,t),(s=i.getLowestSetBit())>0&&i.rShiftTo(s,i),t.compareTo(i)>=0?(t.subTo(i,t),t.rShiftTo(1,t)):(i.subTo(t,i),i.rShiftTo(1,i));return r>0&&i.lShiftTo(r,i),i},BigInteger.prototype.isProbablePrime=function bnIsProbablePrime(e){var t,i=this.abs();if(1==i.t&&i[0]<=l[l.length-1]){for(t=0;t<l.length;++t)if(i[0]==l[t])return!0;return!1}if(i.isEven())return!1;for(t=1;t<l.length;){for(var n=l[t],s=t+1;s<l.length&&n<c;)n*=l[s++];for(n=i.modInt(n);t<s;)if(n%l[t++]==0)return!1}return i.millerRabin(e)},BigInteger.prototype.square=function bnSquare(){var e=nbi();return this.squareTo(e),e};var h=BigInteger;h.prototype.IsNegative=function(){return-1==this.compareTo(h.ZERO)},h.op_Equality=function(e,t){return 0==e.compareTo(t)},h.op_Inequality=function(e,t){return 0!=e.compareTo(t)},h.op_GreaterThan=function(e,t){return e.compareTo(t)>0},h.op_LessThan=function(e,t){return e.compareTo(t)<0},h.op_Addition=function(e,t){return new h(e,void 0,void 0).add(new h(t,void 0,void 0))},h.op_Subtraction=function(e,t){return new h(e,void 0,void 0).subtract(new h(t,void 0,void 0))},h.Int128Mul=function(e,t){return new h(e,void 0,void 0).multiply(new h(t,void 0,void 0))},h.op_Division=function(e,t){return e.divide(t)},h.prototype.ToDouble=function(){return parseFloat(this.toString())};var Inherit=function(e,t){var i;if(void 0===Object.getOwnPropertyNames){for(i in t.prototype)void 0!==e.prototype[i]&&e.prototype[i]!==Object.prototype[i]||(e.prototype[i]=t.prototype[i]);for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}else{for(var n=Object.getOwnPropertyNames(t.prototype),s=0;s<n.length;s++)void 0===Object.getOwnPropertyDescriptor(e.prototype,n[s])&&Object.defineProperty(e.prototype,n[s],Object.getOwnPropertyDescriptor(t.prototype,n[s]));for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}};t.Path=function(){return[]},t.Path.prototype.push=Array.prototype.push,t.Paths=function(){return[]},t.Paths.prototype.push=Array.prototype.push,t.DoublePoint=function(){var e=arguments;this.X=0,this.Y=0,1===e.length?(this.X=e[0].X,this.Y=e[0].Y):2===e.length&&(this.X=e[0],this.Y=e[1])},t.DoublePoint0=function(){this.X=0,this.Y=0},t.DoublePoint0.prototype=t.DoublePoint.prototype,t.DoublePoint1=function(e){this.X=e.X,this.Y=e.Y},t.DoublePoint1.prototype=t.DoublePoint.prototype,t.DoublePoint2=function(e,t){this.X=e,this.Y=t},t.DoublePoint2.prototype=t.DoublePoint.prototype,t.PolyNode=function(){this.m_Parent=null,this.m_polygon=new t.Path,this.m_Index=0,this.m_jointype=0,this.m_endtype=0,this.m_Childs=[],this.IsOpen=!1},t.PolyNode.prototype.IsHoleNode=function(){for(var e=!0,t=this.m_Parent;null!==t;)e=!e,t=t.m_Parent;return e},t.PolyNode.prototype.ChildCount=function(){return this.m_Childs.length},t.PolyNode.prototype.Contour=function(){return this.m_polygon},t.PolyNode.prototype.AddChild=function(e){var t=this.m_Childs.length;this.m_Childs.push(e),e.m_Parent=this,e.m_Index=t},t.PolyNode.prototype.GetNext=function(){return this.m_Childs.length>0?this.m_Childs[0]:this.GetNextSiblingUp()},t.PolyNode.prototype.GetNextSiblingUp=function(){return null===this.m_Parent?null:this.m_Index===this.m_Parent.m_Childs.length-1?this.m_Parent.GetNextSiblingUp():this.m_Parent.m_Childs[this.m_Index+1]},t.PolyNode.prototype.Childs=function(){return this.m_Childs},t.PolyNode.prototype.Parent=function(){return this.m_Parent},t.PolyNode.prototype.IsHole=function(){return this.IsHoleNode()},t.PolyTree=function(){this.m_AllPolys=[],t.PolyNode.call(this)},t.PolyTree.prototype.Clear=function(){for(var e=0,t=this.m_AllPolys.length;e<t;e++)this.m_AllPolys[e]=null;this.m_AllPolys.length=0,this.m_Childs.length=0},t.PolyTree.prototype.GetFirst=function(){return this.m_Childs.length>0?this.m_Childs[0]:null},t.PolyTree.prototype.Total=function(){var e=this.m_AllPolys.length;return e>0&&this.m_Childs[0]!==this.m_AllPolys[0]&&e--,e},Inherit(t.PolyTree,t.PolyNode),t.Math_Abs_Int64=t.Math_Abs_Int32=t.Math_Abs_Double=function(e){return Math.abs(e)},t.Math_Max_Int32_Int32=function(e,t){return Math.max(e,t)},r.msie||r.opera||r.safari?t.Cast_Int32=function(e){return 0|e}:t.Cast_Int32=function(e){return~~e},void 0===Number.toInteger&&(Number.toInteger=null),r.chrome?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):~~e}:r.firefox&&"function"==typeof Number.toInteger?t.Cast_Int64=function(e){return Number.toInteger(e)}:r.msie7||r.msie8?t.Cast_Int64=function(e){return parseInt(e,10)}:r.msie?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):0|e}:t.Cast_Int64=function(e){return e<0?Math.ceil(e):Math.floor(e)},t.Clear=function(e){e.length=0},t.PI=3.141592653589793,t.PI2=6.283185307179586,t.IntPoint=function(){var e=arguments,i=e.length;if(this.X=0,this.Y=0,t.use_xyz)if(this.Z=0,3===i)this.X=e[0],this.Y=e[1],this.Z=e[2];else if(2===i)this.X=e[0],this.Y=e[1],this.Z=0;else if(1===i)if(e[0]instanceof t.DoublePoint){var n=e[0];this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y),this.Z=0}else void 0===(s=e[0]).Z&&(s.Z=0),this.X=s.X,this.Y=s.Y,this.Z=s.Z;else this.X=0,this.Y=0,this.Z=0;else if(2===i)this.X=e[0],this.Y=e[1];else if(1===i)if(e[0]instanceof t.DoublePoint)n=e[0],this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y);else{var s=e[0];this.X=s.X,this.Y=s.Y}else this.X=0,this.Y=0},t.IntPoint.op_Equality=function(e,t){return e.X===t.X&&e.Y===t.Y},t.IntPoint.op_Inequality=function(e,t){return e.X!==t.X||e.Y!==t.Y},t.IntPoint0=function(){this.X=0,this.Y=0,t.use_xyz&&(this.Z=0)},t.IntPoint0.prototype=t.IntPoint.prototype,t.IntPoint1=function(e){this.X=e.X,this.Y=e.Y,t.use_xyz&&(void 0===e.Z?this.Z=0:this.Z=e.Z)},t.IntPoint1.prototype=t.IntPoint.prototype,t.IntPoint1dp=function(e){this.X=t.Clipper.Round(e.X),this.Y=t.Clipper.Round(e.Y),t.use_xyz&&(this.Z=0)},t.IntPoint1dp.prototype=t.IntPoint.prototype,t.IntPoint2=function(e,i,n){this.X=e,this.Y=i,t.use_xyz&&(this.Z=void 0===n?0:n)},t.IntPoint2.prototype=t.IntPoint.prototype,t.IntRect=function(){var e=arguments,t=e.length;if(4===t)this.left=e[0],this.top=e[1],this.right=e[2],this.bottom=e[3];else if(1===t){var i=e[0];this.left=i.left,this.top=i.top,this.right=i.right,this.bottom=i.bottom}else this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0=function(){this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0.prototype=t.IntRect.prototype,t.IntRect1=function(e){this.left=e.left,this.top=e.top,this.right=e.right,this.bottom=e.bottom},t.IntRect1.prototype=t.IntRect.prototype,t.IntRect4=function(e,t,i,n){this.left=e,this.top=t,this.right=i,this.bottom=n},t.IntRect4.prototype=t.IntRect.prototype,t.ClipType={ctIntersection:0,ctUnion:1,ctDifference:2,ctXor:3},t.PolyType={ptSubject:0,ptClip:1},t.PolyFillType={pftEvenOdd:0,pftNonZero:1,pftPositive:2,pftNegative:3},t.JoinType={jtSquare:0,jtRound:1,jtMiter:2},t.EndType={etOpenSquare:0,etOpenRound:1,etOpenButt:2,etClosedLine:3,etClosedPolygon:4},t.EdgeSide={esLeft:0,esRight:1},t.Direction={dRightToLeft:0,dLeftToRight:1},t.TEdge=function(){this.Bot=new t.IntPoint0,this.Curr=new t.IntPoint0,this.Top=new t.IntPoint0,this.Delta=new t.IntPoint0,this.Dx=0,this.PolyTyp=t.PolyType.ptSubject,this.Side=t.EdgeSide.esLeft,this.WindDelta=0,this.WindCnt=0,this.WindCnt2=0,this.OutIdx=0,this.Next=null,this.Prev=null,this.NextInLML=null,this.NextInAEL=null,this.PrevInAEL=null,this.NextInSEL=null,this.PrevInSEL=null},t.IntersectNode=function(){this.Edge1=null,this.Edge2=null,this.Pt=new t.IntPoint0},t.MyIntersectNodeSort=function(){},t.MyIntersectNodeSort.Compare=function(e,t){var i=t.Pt.Y-e.Pt.Y;return i>0?1:i<0?-1:0},t.LocalMinima=function(){this.Y=0,this.LeftBound=null,this.RightBound=null,this.Next=null},t.Scanbeam=function(){this.Y=0,this.Next=null},t.Maxima=function(){this.X=0,this.Next=null,this.Prev=null},t.OutRec=function(){this.Idx=0,this.IsHole=!1,this.IsOpen=!1,this.FirstLeft=null,this.Pts=null,this.BottomPt=null,this.PolyNode=null},t.OutPt=function(){this.Idx=0,this.Pt=new t.IntPoint0,this.Next=null,this.Prev=null},t.Join=function(){this.OutPt1=null,this.OutPt2=null,this.OffPt=new t.IntPoint0},t.ClipperBase=function(){this.m_MinimaList=null,this.m_CurrentLM=null,this.m_edges=new Array,this.m_UseFullRange=!1,this.m_HasOpenPaths=!1,this.PreserveCollinear=!1,this.m_Scanbeam=null,this.m_PolyOuts=null,this.m_ActiveEdges=null},t.ClipperBase.horizontal=-9007199254740992,t.ClipperBase.Skip=-2,t.ClipperBase.Unassigned=-1,t.ClipperBase.tolerance=1e-20,t.ClipperBase.loRange=47453132,t.ClipperBase.hiRange=0xfffffffffffff,t.ClipperBase.near_zero=function(e){return e>-t.ClipperBase.tolerance&&e<t.ClipperBase.tolerance},t.ClipperBase.IsHorizontal=function(e){return 0===e.Delta.Y},t.ClipperBase.prototype.PointIsVertex=function(e,i){var n=i;do{if(t.IntPoint.op_Equality(n.Pt,e))return!0;n=n.Next}while(n!==i);return!1},t.ClipperBase.prototype.PointOnLineSegment=function(e,t,i,n){return n?e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&h.op_Equality(h.Int128Mul(e.X-t.X,i.Y-t.Y),h.Int128Mul(i.X-t.X,e.Y-t.Y)):e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&(e.X-t.X)*(i.Y-t.Y)==(i.X-t.X)*(e.Y-t.Y)},t.ClipperBase.prototype.PointOnPolygon=function(e,t,i){for(var n=t;;){if(this.PointOnLineSegment(e,n.Pt,n.Next.Pt,i))return!0;if((n=n.Next)===t)break}return!1},t.ClipperBase.prototype.SlopesEqual=t.ClipperBase.SlopesEqual=function(){var e,i,n,s,r,o,a=arguments,A=a.length;return 3===A?(e=a[0],i=a[1],a[2]?h.op_Equality(h.Int128Mul(e.Delta.Y,i.Delta.X),h.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)):4===A?(n=a[0],s=a[1],r=a[2],a[3]?h.op_Equality(h.Int128Mul(n.Y-s.Y,s.X-r.X),h.Int128Mul(n.X-s.X,s.Y-r.Y)):t.Cast_Int64((n.Y-s.Y)*(s.X-r.X))-t.Cast_Int64((n.X-s.X)*(s.Y-r.Y))==0):(n=a[0],s=a[1],r=a[2],o=a[3],a[4]?h.op_Equality(h.Int128Mul(n.Y-s.Y,r.X-o.X),h.Int128Mul(n.X-s.X,r.Y-o.Y)):t.Cast_Int64((n.Y-s.Y)*(r.X-o.X))-t.Cast_Int64((n.X-s.X)*(r.Y-o.Y))==0)},t.ClipperBase.SlopesEqual3=function(e,i,n){return n?h.op_Equality(h.Int128Mul(e.Delta.Y,i.Delta.X),h.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)},t.ClipperBase.SlopesEqual4=function(e,i,n,s){return s?h.op_Equality(h.Int128Mul(e.Y-i.Y,i.X-n.X),h.Int128Mul(e.X-i.X,i.Y-n.Y)):t.Cast_Int64((e.Y-i.Y)*(i.X-n.X))-t.Cast_Int64((e.X-i.X)*(i.Y-n.Y))==0},t.ClipperBase.SlopesEqual5=function(e,i,n,s,r){return r?h.op_Equality(h.Int128Mul(e.Y-i.Y,n.X-s.X),h.Int128Mul(e.X-i.X,n.Y-s.Y)):t.Cast_Int64((e.Y-i.Y)*(n.X-s.X))-t.Cast_Int64((e.X-i.X)*(n.Y-s.Y))==0},t.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var e=0,i=this.m_edges.length;e<i;++e){for(var n=0,s=this.m_edges[e].length;n<s;++n)this.m_edges[e][n]=null;t.Clear(this.m_edges[e])}t.Clear(this.m_edges),this.m_UseFullRange=!1,this.m_HasOpenPaths=!1},t.ClipperBase.prototype.DisposeLocalMinimaList=function(){for(;null!==this.m_MinimaList;){var e=this.m_MinimaList.Next;this.m_MinimaList=null,this.m_MinimaList=e}this.m_CurrentLM=null},t.ClipperBase.prototype.RangeTest=function(e,i){i.Value?(e.X>t.ClipperBase.hiRange||e.Y>t.ClipperBase.hiRange||-e.X>t.ClipperBase.hiRange||-e.Y>t.ClipperBase.hiRange)&&t.Error("Coordinate outside allowed range in RangeTest()."):(e.X>t.ClipperBase.loRange||e.Y>t.ClipperBase.loRange||-e.X>t.ClipperBase.loRange||-e.Y>t.ClipperBase.loRange)&&(i.Value=!0,this.RangeTest(e,i))},t.ClipperBase.prototype.InitEdge=function(e,i,n,s){e.Next=i,e.Prev=n,e.Curr.X=s.X,e.Curr.Y=s.Y,t.use_xyz&&(e.Curr.Z=s.Z),e.OutIdx=-1},t.ClipperBase.prototype.InitEdge2=function(e,i){e.Curr.Y>=e.Next.Curr.Y?(e.Bot.X=e.Curr.X,e.Bot.Y=e.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Curr.Z),e.Top.X=e.Next.Curr.X,e.Top.Y=e.Next.Curr.Y,t.use_xyz&&(e.Top.Z=e.Next.Curr.Z)):(e.Top.X=e.Curr.X,e.Top.Y=e.Curr.Y,t.use_xyz&&(e.Top.Z=e.Curr.Z),e.Bot.X=e.Next.Curr.X,e.Bot.Y=e.Next.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Next.Curr.Z)),this.SetDx(e),e.PolyTyp=i},t.ClipperBase.prototype.FindNextLocMin=function(e){for(var i;;){for(;t.IntPoint.op_Inequality(e.Bot,e.Prev.Bot)||t.IntPoint.op_Equality(e.Curr,e.Top);)e=e.Next;if(e.Dx!==t.ClipperBase.horizontal&&e.Prev.Dx!==t.ClipperBase.horizontal)break;for(;e.Prev.Dx===t.ClipperBase.horizontal;)e=e.Prev;for(i=e;e.Dx===t.ClipperBase.horizontal;)e=e.Next;if(e.Top.Y!==e.Prev.Bot.Y){i.Prev.Bot.X<e.Bot.X&&(e=i);break}}return e},t.ClipperBase.prototype.ProcessBound=function(e,i){var n,s,r=e;if(r.OutIdx===t.ClipperBase.Skip){if(e=r,i){for(;e.Top.Y===e.Next.Bot.Y;)e=e.Next;for(;e!==r&&e.Dx===t.ClipperBase.horizontal;)e=e.Prev}else{for(;e.Top.Y===e.Prev.Bot.Y;)e=e.Prev;for(;e!==r&&e.Dx===t.ClipperBase.horizontal;)e=e.Next}if(e===r)r=i?e.Next:e.Prev;else{e=i?r.Next:r.Prev;var o=new t.LocalMinima;o.Next=null,o.Y=e.Bot.Y,o.LeftBound=null,o.RightBound=e,e.WindDelta=0,r=this.ProcessBound(e,i),this.InsertLocalMinima(o)}return r}if(e.Dx===t.ClipperBase.horizontal&&((n=i?e.Prev:e.Next).Dx===t.ClipperBase.horizontal?n.Bot.X!==e.Bot.X&&n.Top.X!==e.Bot.X&&this.ReverseHorizontal(e):n.Bot.X!==e.Bot.X&&this.ReverseHorizontal(e)),n=e,i){for(;r.Top.Y===r.Next.Bot.Y&&r.Next.OutIdx!==t.ClipperBase.Skip;)r=r.Next;if(r.Dx===t.ClipperBase.horizontal&&r.Next.OutIdx!==t.ClipperBase.Skip){for(s=r;s.Prev.Dx===t.ClipperBase.horizontal;)s=s.Prev;s.Prev.Top.X>r.Next.Top.X&&(r=s.Prev)}for(;e!==r;)e.NextInLML=e.Next,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),e=e.Next;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),r=r.Next}else{for(;r.Top.Y===r.Prev.Bot.Y&&r.Prev.OutIdx!==t.ClipperBase.Skip;)r=r.Prev;if(r.Dx===t.ClipperBase.horizontal&&r.Prev.OutIdx!==t.ClipperBase.Skip){for(s=r;s.Next.Dx===t.ClipperBase.horizontal;)s=s.Next;(s.Next.Top.X===r.Prev.Top.X||s.Next.Top.X>r.Prev.Top.X)&&(r=s.Next)}for(;e!==r;)e.NextInLML=e.Prev,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),e=e.Prev;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),r=r.Prev}return r},t.ClipperBase.prototype.AddPath=function(e,i,n){t.use_lines?n||i!==t.PolyType.ptClip||t.Error("AddPath: Open paths must be subject."):n||t.Error("AddPath: Open paths have been disabled.");var s=e.length-1;if(n)for(;s>0&&t.IntPoint.op_Equality(e[s],e[0]);)--s;for(;s>0&&t.IntPoint.op_Equality(e[s],e[s-1]);)--s;if(n&&s<2||!n&&s<1)return!1;for(var r=new Array,o=0;o<=s;o++)r.push(new t.TEdge);var a=!0;r[1].Curr.X=e[1].X,r[1].Curr.Y=e[1].Y,t.use_xyz&&(r[1].Curr.Z=e[1].Z);var A={Value:this.m_UseFullRange};for(this.RangeTest(e[0],A),this.m_UseFullRange=A.Value,A.Value=this.m_UseFullRange,this.RangeTest(e[s],A),this.m_UseFullRange=A.Value,this.InitEdge(r[0],r[1],r[s],e[0]),this.InitEdge(r[s],r[0],r[s-1],e[s]),o=s-1;o>=1;--o)A.Value=this.m_UseFullRange,this.RangeTest(e[o],A),this.m_UseFullRange=A.Value,this.InitEdge(r[o],r[o+1],r[o-1],e[o]);for(var l,c=r[0],h=c,p=c;;)if(h.Curr!==h.Next.Curr||!n&&h.Next===c){if(h.Prev===h.Next)break;if(!n||!t.ClipperBase.SlopesEqual4(h.Prev.Curr,h.Curr,h.Next.Curr,this.m_UseFullRange)||this.PreserveCollinear&&this.Pt2IsBetweenPt1AndPt3(h.Prev.Curr,h.Curr,h.Next.Curr)){if((h=h.Next)===p||!n&&h.Next===c)break}else h===c&&(c=h.Next),p=h=(h=this.RemoveEdge(h)).Prev}else{if(h===h.Next)break;h===c&&(c=h.Next),p=h=this.RemoveEdge(h)}if(!n&&h===h.Next||n&&h.Prev===h.Next)return!1;n||(this.m_HasOpenPaths=!0,c.Prev.OutIdx=t.ClipperBase.Skip),h=c;do{this.InitEdge2(h,i),h=h.Next,a&&h.Curr.Y!==c.Curr.Y&&(a=!1)}while(h!==c);if(a){if(n)return!1;for(h.Prev.OutIdx=t.ClipperBase.Skip,(g=new t.LocalMinima).Next=null,g.Y=h.Bot.Y,g.LeftBound=null,g.RightBound=h,g.RightBound.Side=t.EdgeSide.esRight,g.RightBound.WindDelta=0;h.Bot.X!==h.Prev.Top.X&&this.ReverseHorizontal(h),h.Next.OutIdx!==t.ClipperBase.Skip;)h.NextInLML=h.Next,h=h.Next;return this.InsertLocalMinima(g),this.m_edges.push(r),!0}this.m_edges.push(r);var u=null;for(t.IntPoint.op_Equality(h.Prev.Bot,h.Prev.Top)&&(h=h.Next);(h=this.FindNextLocMin(h))!==u;){var g;null===u&&(u=h),(g=new t.LocalMinima).Next=null,g.Y=h.Bot.Y,h.Dx<h.Prev.Dx?(g.LeftBound=h.Prev,g.RightBound=h,l=!1):(g.LeftBound=h,g.RightBound=h.Prev,l=!0),g.LeftBound.Side=t.EdgeSide.esLeft,g.RightBound.Side=t.EdgeSide.esRight,n?g.LeftBound.Next===g.RightBound?g.LeftBound.WindDelta=-1:g.LeftBound.WindDelta=1:g.LeftBound.WindDelta=0,g.RightBound.WindDelta=-g.LeftBound.WindDelta,(h=this.ProcessBound(g.LeftBound,l)).OutIdx===t.ClipperBase.Skip&&(h=this.ProcessBound(h,l));var d=this.ProcessBound(g.RightBound,!l);d.OutIdx===t.ClipperBase.Skip&&(d=this.ProcessBound(d,!l)),g.LeftBound.OutIdx===t.ClipperBase.Skip?g.LeftBound=null:g.RightBound.OutIdx===t.ClipperBase.Skip&&(g.RightBound=null),this.InsertLocalMinima(g),l||(h=d)}return!0},t.ClipperBase.prototype.AddPaths=function(e,t,i){for(var n=!1,s=0,r=e.length;s<r;++s)this.AddPath(e[s],t,i)&&(n=!0);return n},t.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(e,i,n){return!(t.IntPoint.op_Equality(e,n)||t.IntPoint.op_Equality(e,i)||t.IntPoint.op_Equality(n,i))&&(e.X!==n.X?i.X>e.X==i.X<n.X:i.Y>e.Y==i.Y<n.Y)},t.ClipperBase.prototype.RemoveEdge=function(e){e.Prev.Next=e.Next,e.Next.Prev=e.Prev;var t=e.Next;return e.Prev=null,t},t.ClipperBase.prototype.SetDx=function(e){e.Delta.X=e.Top.X-e.Bot.X,e.Delta.Y=e.Top.Y-e.Bot.Y,0===e.Delta.Y?e.Dx=t.ClipperBase.horizontal:e.Dx=e.Delta.X/e.Delta.Y},t.ClipperBase.prototype.InsertLocalMinima=function(e){if(null===this.m_MinimaList)this.m_MinimaList=e;else if(e.Y>=this.m_MinimaList.Y)e.Next=this.m_MinimaList,this.m_MinimaList=e;else{for(var t=this.m_MinimaList;null!==t.Next&&e.Y<t.Next.Y;)t=t.Next;e.Next=t.Next,t.Next=e}},t.ClipperBase.prototype.PopLocalMinima=function(e,t){return t.v=this.m_CurrentLM,null!==this.m_CurrentLM&&this.m_CurrentLM.Y===e&&(this.m_CurrentLM=this.m_CurrentLM.Next,!0)},t.ClipperBase.prototype.ReverseHorizontal=function(e){var i=e.Top.X;e.Top.X=e.Bot.X,e.Bot.X=i,t.use_xyz&&(i=e.Top.Z,e.Top.Z=e.Bot.Z,e.Bot.Z=i)},t.ClipperBase.prototype.Reset=function(){if(this.m_CurrentLM=this.m_MinimaList,null!==this.m_CurrentLM){this.m_Scanbeam=null;for(var e=this.m_MinimaList;null!==e;){this.InsertScanbeam(e.Y);var i=e.LeftBound;null!==i&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),null!==(i=e.RightBound)&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),e=e.Next}this.m_ActiveEdges=null}},t.ClipperBase.prototype.InsertScanbeam=function(e){if(null===this.m_Scanbeam)this.m_Scanbeam=new t.Scanbeam,this.m_Scanbeam.Next=null,this.m_Scanbeam.Y=e;else if(e>this.m_Scanbeam.Y){var i=new t.Scanbeam;i.Y=e,i.Next=this.m_Scanbeam,this.m_Scanbeam=i}else{for(var n=this.m_Scanbeam;null!==n.Next&&e<=n.Next.Y;)n=n.Next;if(e===n.Y)return;var s=new t.Scanbeam;s.Y=e,s.Next=n.Next,n.Next=s}},t.ClipperBase.prototype.PopScanbeam=function(e){return null===this.m_Scanbeam?(e.v=0,!1):(e.v=this.m_Scanbeam.Y,this.m_Scanbeam=this.m_Scanbeam.Next,!0)},t.ClipperBase.prototype.LocalMinimaPending=function(){return null!==this.m_CurrentLM},t.ClipperBase.prototype.CreateOutRec=function(){var e=new t.OutRec;return e.Idx=t.ClipperBase.Unassigned,e.IsHole=!1,e.IsOpen=!1,e.FirstLeft=null,e.Pts=null,e.BottomPt=null,e.PolyNode=null,this.m_PolyOuts.push(e),e.Idx=this.m_PolyOuts.length-1,e},t.ClipperBase.prototype.DisposeOutRec=function(e){var t=this.m_PolyOuts[e];t.Pts=null,t=null,this.m_PolyOuts[e]=null},t.ClipperBase.prototype.UpdateEdgeIntoAEL=function(e){null===e.NextInLML&&t.Error("UpdateEdgeIntoAEL: invalid call");var i=e.PrevInAEL,n=e.NextInAEL;return e.NextInLML.OutIdx=e.OutIdx,null!==i?i.NextInAEL=e.NextInLML:this.m_ActiveEdges=e.NextInLML,null!==n&&(n.PrevInAEL=e.NextInLML),e.NextInLML.Side=e.Side,e.NextInLML.WindDelta=e.WindDelta,e.NextInLML.WindCnt=e.WindCnt,e.NextInLML.WindCnt2=e.WindCnt2,(e=e.NextInLML).Curr.X=e.Bot.X,e.Curr.Y=e.Bot.Y,e.PrevInAEL=i,e.NextInAEL=n,t.ClipperBase.IsHorizontal(e)||this.InsertScanbeam(e.Top.Y),e},t.ClipperBase.prototype.SwapPositionsInAEL=function(e,t){if(e.NextInAEL!==e.PrevInAEL&&t.NextInAEL!==t.PrevInAEL){if(e.NextInAEL===t){var i=t.NextInAEL;null!==i&&(i.PrevInAEL=e);var n=e.PrevInAEL;null!==n&&(n.NextInAEL=t),t.PrevInAEL=n,t.NextInAEL=e,e.PrevInAEL=t,e.NextInAEL=i}else if(t.NextInAEL===e){var s=e.NextInAEL;null!==s&&(s.PrevInAEL=t);var r=t.PrevInAEL;null!==r&&(r.NextInAEL=e),e.PrevInAEL=r,e.NextInAEL=t,t.PrevInAEL=e,t.NextInAEL=s}else{var o=e.NextInAEL,a=e.PrevInAEL;e.NextInAEL=t.NextInAEL,null!==e.NextInAEL&&(e.NextInAEL.PrevInAEL=e),e.PrevInAEL=t.PrevInAEL,null!==e.PrevInAEL&&(e.PrevInAEL.NextInAEL=e),t.NextInAEL=o,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=t),t.PrevInAEL=a,null!==t.PrevInAEL&&(t.PrevInAEL.NextInAEL=t)}null===e.PrevInAEL?this.m_ActiveEdges=e:null===t.PrevInAEL&&(this.m_ActiveEdges=t)}},t.ClipperBase.prototype.DeleteFromAEL=function(e){var t=e.PrevInAEL,i=e.NextInAEL;null===t&&null===i&&e!==this.m_ActiveEdges||(null!==t?t.NextInAEL=i:this.m_ActiveEdges=i,null!==i&&(i.PrevInAEL=t),e.NextInAEL=null,e.PrevInAEL=null)},t.Clipper=function(e){void 0===e&&(e=0),this.m_PolyOuts=null,this.m_ClipType=t.ClipType.ctIntersection,this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=null,this.m_IntersectNodeComparer=null,this.m_ExecuteLocked=!1,this.m_ClipFillType=t.PolyFillType.pftEvenOdd,this.m_SubjFillType=t.PolyFillType.pftEvenOdd,this.m_Joins=null,this.m_GhostJoins=null,this.m_UsingPolyTree=!1,this.ReverseSolution=!1,this.StrictlySimple=!1,t.ClipperBase.call(this),this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=new Array,this.m_IntersectNodeComparer=t.MyIntersectNodeSort.Compare,this.m_ExecuteLocked=!1,this.m_UsingPolyTree=!1,this.m_PolyOuts=new Array,this.m_Joins=new Array,this.m_GhostJoins=new Array,this.ReverseSolution=!!(1&e),this.StrictlySimple=!!(2&e),this.PreserveCollinear=!!(4&e),t.use_xyz&&(this.ZFillFunction=null)},t.Clipper.ioReverseSolution=1,t.Clipper.ioStrictlySimple=2,t.Clipper.ioPreserveCollinear=4,t.Clipper.prototype.Clear=function(){0!==this.m_edges.length&&(this.DisposeAllPolyPts(),t.ClipperBase.prototype.Clear.call(this))},t.Clipper.prototype.InsertMaxima=function(e){var i=new t.Maxima;if(i.X=e,null===this.m_Maxima)this.m_Maxima=i,this.m_Maxima.Next=null,this.m_Maxima.Prev=null;else if(e<this.m_Maxima.X)i.Next=this.m_Maxima,i.Prev=null,this.m_Maxima=i;else{for(var n=this.m_Maxima;null!==n.Next&&e>=n.Next.X;)n=n.Next;if(e===n.X)return;i.Next=n.Next,i.Prev=n,null!==n.Next&&(n.Next.Prev=i),n.Next=i}},t.Clipper.prototype.Execute=function(){var e=arguments,i=e.length,n=e[1]instanceof t.PolyTree;if(4===i&&!n){var s=e[0],r=e[1],o=e[2],a=e[3];if(this.m_ExecuteLocked)return!1;this.m_HasOpenPaths&&t.Error("Error: PolyTree struct is needed for open path clipping."),this.m_ExecuteLocked=!0,t.Clear(r),this.m_SubjFillType=o,this.m_ClipFillType=a,this.m_ClipType=s,this.m_UsingPolyTree=!1;try{(l=this.ExecuteInternal())&&this.BuildResult(r)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}if(4===i&&n){s=e[0];var A=e[1];if(o=e[2],a=e[3],this.m_ExecuteLocked)return!1;this.m_ExecuteLocked=!0,this.m_SubjFillType=o,this.m_ClipFillType=a,this.m_ClipType=s,this.m_UsingPolyTree=!0;try{var l;(l=this.ExecuteInternal())&&this.BuildResult2(A)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}return 2!==i||n?2===i&&n?(s=e[0],A=e[1],this.Execute(s,A,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd)):void 0:(s=e[0],r=e[1],this.Execute(s,r,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd))},t.Clipper.prototype.FixHoleLinkage=function(e){if(null!==e.FirstLeft&&(e.IsHole===e.FirstLeft.IsHole||null===e.FirstLeft.Pts)){for(var t=e.FirstLeft;null!==t&&(t.IsHole===e.IsHole||null===t.Pts);)t=t.FirstLeft;e.FirstLeft=t}},t.Clipper.prototype.ExecuteInternal=function(){try{this.Reset(),this.m_SortedEdges=null,this.m_Maxima=null;var e,t,i,n={},s={};if(!this.PopScanbeam(n))return!1;for(this.InsertLocalMinimaIntoAEL(n.v);this.PopScanbeam(s)||this.LocalMinimaPending();){if(this.ProcessHorizontals(),this.m_GhostJoins.length=0,!this.ProcessIntersections(s.v))return!1;this.ProcessEdgesAtTopOfScanbeam(s.v),n.v=s.v,this.InsertLocalMinimaIntoAEL(n.v)}for(t=0,i=this.m_PolyOuts.length;t<i;t++)null===(e=this.m_PolyOuts[t]).Pts||e.IsOpen||(e.IsHole^this.ReverseSolution)==this.Area$1(e)>0&&this.ReversePolyPtLinks(e.Pts);for(this.JoinCommonEdges(),t=0,i=this.m_PolyOuts.length;t<i;t++)null!==(e=this.m_PolyOuts[t]).Pts&&(e.IsOpen?this.FixupOutPolyline(e):this.FixupOutPolygon(e));return this.StrictlySimple&&this.DoSimplePolygons(),!0}finally{this.m_Joins.length=0,this.m_GhostJoins.length=0}},t.Clipper.prototype.DisposeAllPolyPts=function(){for(var e=0,i=this.m_PolyOuts.length;e<i;++e)this.DisposeOutRec(e);t.Clear(this.m_PolyOuts)},t.Clipper.prototype.AddJoin=function(e,i,n){var s=new t.Join;s.OutPt1=e,s.OutPt2=i,s.OffPt.X=n.X,s.OffPt.Y=n.Y,t.use_xyz&&(s.OffPt.Z=n.Z),this.m_Joins.push(s)},t.Clipper.prototype.AddGhostJoin=function(e,i){var n=new t.Join;n.OutPt1=e,n.OffPt.X=i.X,n.OffPt.Y=i.Y,t.use_xyz&&(n.OffPt.Z=i.Z),this.m_GhostJoins.push(n)},t.Clipper.prototype.SetZ=function(e,i,n){if(null!==this.ZFillFunction){if(0!==e.Z||null===this.ZFillFunction)return;t.IntPoint.op_Equality(e,i.Bot)?e.Z=i.Bot.Z:t.IntPoint.op_Equality(e,i.Top)?e.Z=i.Top.Z:t.IntPoint.op_Equality(e,n.Bot)?e.Z=n.Bot.Z:t.IntPoint.op_Equality(e,n.Top)?e.Z=n.Top.Z:this.ZFillFunction(i.Bot,i.Top,n.Bot,n.Top,e)}},t.Clipper.prototype.InsertLocalMinimaIntoAEL=function(e){for(var i,n,s={};this.PopLocalMinima(e,s);){i=s.v.LeftBound,n=s.v.RightBound;var r=null;if(null===i?(this.InsertEdgeIntoAEL(n,null),this.SetWindingCount(n),this.IsContributing(n)&&(r=this.AddOutPt(n,n.Bot))):null===n?(this.InsertEdgeIntoAEL(i,null),this.SetWindingCount(i),this.IsContributing(i)&&(r=this.AddOutPt(i,i.Bot)),this.InsertScanbeam(i.Top.Y)):(this.InsertEdgeIntoAEL(i,null),this.InsertEdgeIntoAEL(n,i),this.SetWindingCount(i),n.WindCnt=i.WindCnt,n.WindCnt2=i.WindCnt2,this.IsContributing(i)&&(r=this.AddLocalMinPoly(i,n,i.Bot)),this.InsertScanbeam(i.Top.Y)),null!==n&&(t.ClipperBase.IsHorizontal(n)?(null!==n.NextInLML&&this.InsertScanbeam(n.NextInLML.Top.Y),this.AddEdgeToSEL(n)):this.InsertScanbeam(n.Top.Y)),null!==i&&null!==n){if(null!==r&&t.ClipperBase.IsHorizontal(n)&&this.m_GhostJoins.length>0&&0!==n.WindDelta)for(var o=0,a=this.m_GhostJoins.length;o<a;o++){var A=this.m_GhostJoins[o];this.HorzSegmentsOverlap(A.OutPt1.Pt.X,A.OffPt.X,n.Bot.X,n.Top.X)&&this.AddJoin(A.OutPt1,r,A.OffPt)}if(i.OutIdx>=0&&null!==i.PrevInAEL&&i.PrevInAEL.Curr.X===i.Bot.X&&i.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(i.PrevInAEL.Curr,i.PrevInAEL.Top,i.Curr,i.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==i.PrevInAEL.WindDelta){var l=this.AddOutPt(i.PrevInAEL,i.Bot);this.AddJoin(r,l,i.Top)}if(i.NextInAEL!==n){n.OutIdx>=0&&n.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(n.PrevInAEL.Curr,n.PrevInAEL.Top,n.Curr,n.Top,this.m_UseFullRange)&&0!==n.WindDelta&&0!==n.PrevInAEL.WindDelta&&(l=this.AddOutPt(n.PrevInAEL,n.Bot),this.AddJoin(r,l,n.Top));var c=i.NextInAEL;if(null!==c)for(;c!==n;)this.IntersectEdges(n,c,i.Curr),c=c.NextInAEL}}}},t.Clipper.prototype.InsertEdgeIntoAEL=function(e,t){if(null===this.m_ActiveEdges)e.PrevInAEL=null,e.NextInAEL=null,this.m_ActiveEdges=e;else if(null===t&&this.E2InsertsBeforeE1(this.m_ActiveEdges,e))e.PrevInAEL=null,e.NextInAEL=this.m_ActiveEdges,this.m_ActiveEdges.PrevInAEL=e,this.m_ActiveEdges=e;else{for(null===t&&(t=this.m_ActiveEdges);null!==t.NextInAEL&&!this.E2InsertsBeforeE1(t.NextInAEL,e);)t=t.NextInAEL;e.NextInAEL=t.NextInAEL,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=e),e.PrevInAEL=t,t.NextInAEL=e}},t.Clipper.prototype.E2InsertsBeforeE1=function(e,i){return i.Curr.X===e.Curr.X?i.Top.Y>e.Top.Y?i.Top.X<t.Clipper.TopX(e,i.Top.Y):e.Top.X>t.Clipper.TopX(i,e.Top.Y):i.Curr.X<e.Curr.X},t.Clipper.prototype.IsEvenOddFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType===t.PolyFillType.pftEvenOdd:this.m_ClipFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsEvenOddAltFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_ClipFillType===t.PolyFillType.pftEvenOdd:this.m_SubjFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsContributing=function(e){var i,n;switch(e.PolyTyp===t.PolyType.ptSubject?(i=this.m_SubjFillType,n=this.m_ClipFillType):(i=this.m_ClipFillType,n=this.m_SubjFillType),i){case t.PolyFillType.pftEvenOdd:if(0===e.WindDelta&&1!==e.WindCnt)return!1;break;case t.PolyFillType.pftNonZero:if(1!==Math.abs(e.WindCnt))return!1;break;case t.PolyFillType.pftPositive:if(1!==e.WindCnt)return!1;break;default:if(-1!==e.WindCnt)return!1}switch(this.m_ClipType){case t.ClipType.ctIntersection:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctUnion:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}case t.ClipType.ctDifference:if(e.PolyTyp===t.PolyType.ptSubject)switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}else switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctXor:if(0!==e.WindDelta)return!0;switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}}return!0},t.Clipper.prototype.SetWindingCount=function(e){for(var i=e.PrevInAEL;null!==i&&(i.PolyTyp!==e.PolyTyp||0===i.WindDelta);)i=i.PrevInAEL;if(null===i){var n=e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType:this.m_ClipFillType;0===e.WindDelta?e.WindCnt=n===t.PolyFillType.pftNegative?-1:1:e.WindCnt=e.WindDelta,e.WindCnt2=0,i=this.m_ActiveEdges}else if(0===e.WindDelta&&this.m_ClipType!==t.ClipType.ctUnion)e.WindCnt=1,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;else if(this.IsEvenOddFillType(e)){if(0===e.WindDelta){for(var s=!0,r=i.PrevInAEL;null!==r;)r.PolyTyp===i.PolyTyp&&0!==r.WindDelta&&(s=!s),r=r.PrevInAEL;e.WindCnt=s?0:1}else e.WindCnt=e.WindDelta;e.WindCnt2=i.WindCnt2,i=i.NextInAEL}else i.WindCnt*i.WindDelta<0?Math.abs(i.WindCnt)>1?i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta:e.WindCnt=0===e.WindDelta?1:e.WindDelta:0===e.WindDelta?e.WindCnt=i.WindCnt<0?i.WindCnt-1:i.WindCnt+1:i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;if(this.IsEvenOddAltFillType(e))for(;i!==e;)0!==i.WindDelta&&(e.WindCnt2=0===e.WindCnt2?1:0),i=i.NextInAEL;else for(;i!==e;)e.WindCnt2+=i.WindDelta,i=i.NextInAEL},t.Clipper.prototype.AddEdgeToSEL=function(e){null===this.m_SortedEdges?(this.m_SortedEdges=e,e.PrevInSEL=null,e.NextInSEL=null):(e.NextInSEL=this.m_SortedEdges,e.PrevInSEL=null,this.m_SortedEdges.PrevInSEL=e,this.m_SortedEdges=e)},t.Clipper.prototype.PopEdgeFromSEL=function(e){if(e.v=this.m_SortedEdges,null===e.v)return!1;var t=e.v;return this.m_SortedEdges=e.v.NextInSEL,null!==this.m_SortedEdges&&(this.m_SortedEdges.PrevInSEL=null),t.NextInSEL=null,t.PrevInSEL=null,!0},t.Clipper.prototype.CopyAELToSEL=function(){var e=this.m_ActiveEdges;for(this.m_SortedEdges=e;null!==e;)e.PrevInSEL=e.PrevInAEL,e.NextInSEL=e.NextInAEL,e=e.NextInAEL},t.Clipper.prototype.SwapPositionsInSEL=function(e,t){if(!(null===e.NextInSEL&&null===e.PrevInSEL||null===t.NextInSEL&&null===t.PrevInSEL)){if(e.NextInSEL===t)null!==(i=t.NextInSEL)&&(i.PrevInSEL=e),null!==(n=e.PrevInSEL)&&(n.NextInSEL=t),t.PrevInSEL=n,t.NextInSEL=e,e.PrevInSEL=t,e.NextInSEL=i;else if(t.NextInSEL===e)null!==(i=e.NextInSEL)&&(i.PrevInSEL=t),null!==(n=t.PrevInSEL)&&(n.NextInSEL=e),e.PrevInSEL=n,e.NextInSEL=t,t.PrevInSEL=e,t.NextInSEL=i;else{var i=e.NextInSEL,n=e.PrevInSEL;e.NextInSEL=t.NextInSEL,null!==e.NextInSEL&&(e.NextInSEL.PrevInSEL=e),e.PrevInSEL=t.PrevInSEL,null!==e.PrevInSEL&&(e.PrevInSEL.NextInSEL=e),t.NextInSEL=i,null!==t.NextInSEL&&(t.NextInSEL.PrevInSEL=t),t.PrevInSEL=n,null!==t.PrevInSEL&&(t.PrevInSEL.NextInSEL=t)}null===e.PrevInSEL?this.m_SortedEdges=e:null===t.PrevInSEL&&(this.m_SortedEdges=t)}},t.Clipper.prototype.AddLocalMaxPoly=function(e,t,i){this.AddOutPt(e,i),0===t.WindDelta&&this.AddOutPt(t,i),e.OutIdx===t.OutIdx?(e.OutIdx=-1,t.OutIdx=-1):e.OutIdx<t.OutIdx?this.AppendPolygon(e,t):this.AppendPolygon(t,e)},t.Clipper.prototype.AddLocalMinPoly=function(e,i,n){var s,r,o;if(t.ClipperBase.IsHorizontal(i)||e.Dx>i.Dx?(s=this.AddOutPt(e,n),i.OutIdx=e.OutIdx,e.Side=t.EdgeSide.esLeft,i.Side=t.EdgeSide.esRight,o=(r=e).PrevInAEL===i?i.PrevInAEL:r.PrevInAEL):(s=this.AddOutPt(i,n),e.OutIdx=i.OutIdx,e.Side=t.EdgeSide.esRight,i.Side=t.EdgeSide.esLeft,o=(r=i).PrevInAEL===e?e.PrevInAEL:r.PrevInAEL),null!==o&&o.OutIdx>=0&&o.Top.Y<n.Y&&r.Top.Y<n.Y){var a=t.Clipper.TopX(o,n.Y),A=t.Clipper.TopX(r,n.Y);if(a===A&&0!==r.WindDelta&&0!==o.WindDelta&&t.ClipperBase.SlopesEqual5(new t.IntPoint2(a,n.Y),o.Top,new t.IntPoint2(A,n.Y),r.Top,this.m_UseFullRange)){var l=this.AddOutPt(o,n);this.AddJoin(s,l,r.Top)}}return s},t.Clipper.prototype.AddOutPt=function(e,i){if(e.OutIdx<0){(s=this.CreateOutRec()).IsOpen=0===e.WindDelta;var n=new t.OutPt;return s.Pts=n,n.Idx=s.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=n,n.Prev=n,s.IsOpen||this.SetHoleState(e,s),e.OutIdx=s.Idx,n}var s,r=(s=this.m_PolyOuts[e.OutIdx]).Pts,o=e.Side===t.EdgeSide.esLeft;return o&&t.IntPoint.op_Equality(i,r.Pt)?r:!o&&t.IntPoint.op_Equality(i,r.Prev.Pt)?r.Prev:((n=new t.OutPt).Idx=s.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=r,n.Prev=r.Prev,n.Prev.Next=n,r.Prev=n,o&&(s.Pts=n),n)},t.Clipper.prototype.GetLastOutPt=function(e){var i=this.m_PolyOuts[e.OutIdx];return e.Side===t.EdgeSide.esLeft?i.Pts:i.Pts.Prev},t.Clipper.prototype.SwapPoints=function(e,i){var n=new t.IntPoint1(e.Value);e.Value.X=i.Value.X,e.Value.Y=i.Value.Y,t.use_xyz&&(e.Value.Z=i.Value.Z),i.Value.X=n.X,i.Value.Y=n.Y,t.use_xyz&&(i.Value.Z=n.Z)},t.Clipper.prototype.HorzSegmentsOverlap=function(e,t,i,n){var s;return e>t&&(s=e,e=t,t=s),i>n&&(s=i,i=n,n=s),e<n&&i<t},t.Clipper.prototype.SetHoleState=function(e,t){for(var i=e.PrevInAEL,n=null;null!==i;)i.OutIdx>=0&&0!==i.WindDelta&&(null===n?n=i:n.OutIdx===i.OutIdx&&(n=null)),i=i.PrevInAEL;null===n?(t.FirstLeft=null,t.IsHole=!1):(t.FirstLeft=this.m_PolyOuts[n.OutIdx],t.IsHole=!t.FirstLeft.IsHole)},t.Clipper.prototype.GetDx=function(e,i){return e.Y===i.Y?t.ClipperBase.horizontal:(i.X-e.X)/(i.Y-e.Y)},t.Clipper.prototype.FirstIsBottomPt=function(e,i){for(var n=e.Prev;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Prev;var s=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=e.Next;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Next;var r=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=i.Prev;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Prev;var o=Math.abs(this.GetDx(i.Pt,n.Pt));for(n=i.Next;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Next;var a=Math.abs(this.GetDx(i.Pt,n.Pt));return Math.max(s,r)===Math.max(o,a)&&Math.min(s,r)===Math.min(o,a)?this.Area(e)>0:s>=o&&s>=a||r>=o&&r>=a},t.Clipper.prototype.GetBottomPt=function(e){for(var i=null,n=e.Next;n!==e;)n.Pt.Y>e.Pt.Y?(e=n,i=null):n.Pt.Y===e.Pt.Y&&n.Pt.X<=e.Pt.X&&(n.Pt.X<e.Pt.X?(i=null,e=n):n.Next!==e&&n.Prev!==e&&(i=n)),n=n.Next;if(null!==i)for(;i!==n;)for(this.FirstIsBottomPt(n,i)||(e=i),i=i.Next;t.IntPoint.op_Inequality(i.Pt,e.Pt);)i=i.Next;return e},t.Clipper.prototype.GetLowermostRec=function(e,t){null===e.BottomPt&&(e.BottomPt=this.GetBottomPt(e.Pts)),null===t.BottomPt&&(t.BottomPt=this.GetBottomPt(t.Pts));var i=e.BottomPt,n=t.BottomPt;return i.Pt.Y>n.Pt.Y?e:i.Pt.Y<n.Pt.Y?t:i.Pt.X<n.Pt.X?e:i.Pt.X>n.Pt.X||i.Next===i?t:n.Next===n||this.FirstIsBottomPt(i,n)?e:t},t.Clipper.prototype.OutRec1RightOfOutRec2=function(e,t){do{if((e=e.FirstLeft)===t)return!0}while(null!==e);return!1},t.Clipper.prototype.GetOutRec=function(e){for(var t=this.m_PolyOuts[e];t!==this.m_PolyOuts[t.Idx];)t=this.m_PolyOuts[t.Idx];return t},t.Clipper.prototype.AppendPolygon=function(e,i){var n,s=this.m_PolyOuts[e.OutIdx],r=this.m_PolyOuts[i.OutIdx];n=this.OutRec1RightOfOutRec2(s,r)?r:this.OutRec1RightOfOutRec2(r,s)?s:this.GetLowermostRec(s,r);var o=s.Pts,a=o.Prev,A=r.Pts,l=A.Prev;e.Side===t.EdgeSide.esLeft?i.Side===t.EdgeSide.esLeft?(this.ReversePolyPtLinks(A),A.Next=o,o.Prev=A,a.Next=l,l.Prev=a,s.Pts=l):(l.Next=o,o.Prev=l,A.Prev=a,a.Next=A,s.Pts=A):i.Side===t.EdgeSide.esRight?(this.ReversePolyPtLinks(A),a.Next=l,l.Prev=a,A.Next=o,o.Prev=A):(a.Next=A,A.Prev=a,o.Prev=l,l.Next=o),s.BottomPt=null,n===r&&(r.FirstLeft!==s&&(s.FirstLeft=r.FirstLeft),s.IsHole=r.IsHole),r.Pts=null,r.BottomPt=null,r.FirstLeft=s;var c=e.OutIdx,h=i.OutIdx;e.OutIdx=-1,i.OutIdx=-1;for(var p=this.m_ActiveEdges;null!==p;){if(p.OutIdx===h){p.OutIdx=c,p.Side=e.Side;break}p=p.NextInAEL}r.Idx=s.Idx},t.Clipper.prototype.ReversePolyPtLinks=function(e){if(null!==e){var t,i;t=e;do{i=t.Next,t.Next=t.Prev,t.Prev=i,t=i}while(t!==e)}},t.Clipper.SwapSides=function(e,t){var i=e.Side;e.Side=t.Side,t.Side=i},t.Clipper.SwapPolyIndexes=function(e,t){var i=e.OutIdx;e.OutIdx=t.OutIdx,t.OutIdx=i},t.Clipper.prototype.IntersectEdges=function(e,i,n){var s=e.OutIdx>=0,r=i.OutIdx>=0;if(t.use_xyz&&this.SetZ(n,e,i),!t.use_lines||0!==e.WindDelta&&0!==i.WindDelta){if(e.PolyTyp===i.PolyTyp)if(this.IsEvenOddFillType(e)){var o=e.WindCnt;e.WindCnt=i.WindCnt,i.WindCnt=o}else e.WindCnt+i.WindDelta===0?e.WindCnt=-e.WindCnt:e.WindCnt+=i.WindDelta,i.WindCnt-e.WindDelta==0?i.WindCnt=-i.WindCnt:i.WindCnt-=e.WindDelta;else this.IsEvenOddFillType(i)?e.WindCnt2=0===e.WindCnt2?1:0:e.WindCnt2+=i.WindDelta,this.IsEvenOddFillType(e)?i.WindCnt2=0===i.WindCnt2?1:0:i.WindCnt2-=e.WindDelta;var a,A,l,c,h,p;switch(e.PolyTyp===t.PolyType.ptSubject?(a=this.m_SubjFillType,l=this.m_ClipFillType):(a=this.m_ClipFillType,l=this.m_SubjFillType),i.PolyTyp===t.PolyType.ptSubject?(A=this.m_SubjFillType,c=this.m_ClipFillType):(A=this.m_ClipFillType,c=this.m_SubjFillType),a){case t.PolyFillType.pftPositive:h=e.WindCnt;break;case t.PolyFillType.pftNegative:h=-e.WindCnt;break;default:h=Math.abs(e.WindCnt)}switch(A){case t.PolyFillType.pftPositive:p=i.WindCnt;break;case t.PolyFillType.pftNegative:p=-i.WindCnt;break;default:p=Math.abs(i.WindCnt)}if(s&&r)0!==h&&1!==h||0!==p&&1!==p||e.PolyTyp!==i.PolyTyp&&this.m_ClipType!==t.ClipType.ctXor?this.AddLocalMaxPoly(e,i,n):(this.AddOutPt(e,n),this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(s)0!==p&&1!==p||(this.AddOutPt(e,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(r)0!==h&&1!==h||(this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(!(0!==h&&1!==h||0!==p&&1!==p)){var u,g;switch(l){case t.PolyFillType.pftPositive:u=e.WindCnt2;break;case t.PolyFillType.pftNegative:u=-e.WindCnt2;break;default:u=Math.abs(e.WindCnt2)}switch(c){case t.PolyFillType.pftPositive:g=i.WindCnt2;break;case t.PolyFillType.pftNegative:g=-i.WindCnt2;break;default:g=Math.abs(i.WindCnt2)}if(e.PolyTyp!==i.PolyTyp)this.AddLocalMinPoly(e,i,n);else if(1===h&&1===p)switch(this.m_ClipType){case t.ClipType.ctIntersection:u>0&&g>0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctUnion:u<=0&&g<=0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctDifference:(e.PolyTyp===t.PolyType.ptClip&&u>0&&g>0||e.PolyTyp===t.PolyType.ptSubject&&u<=0&&g<=0)&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctXor:this.AddLocalMinPoly(e,i,n)}else t.Clipper.SwapSides(e,i)}}else{if(0===e.WindDelta&&0===i.WindDelta)return;e.PolyTyp===i.PolyTyp&&e.WindDelta!==i.WindDelta&&this.m_ClipType===t.ClipType.ctUnion?0===e.WindDelta?r&&(this.AddOutPt(e,n),s&&(e.OutIdx=-1)):s&&(this.AddOutPt(i,n),r&&(i.OutIdx=-1)):e.PolyTyp!==i.PolyTyp&&(0!==e.WindDelta||1!==Math.abs(i.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==i.WindCnt2?0!==i.WindDelta||1!==Math.abs(e.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==e.WindCnt2||(this.AddOutPt(i,n),r&&(i.OutIdx=-1)):(this.AddOutPt(e,n),s&&(e.OutIdx=-1)))}},t.Clipper.prototype.DeleteFromSEL=function(e){var t=e.PrevInSEL,i=e.NextInSEL;null===t&&null===i&&e!==this.m_SortedEdges||(null!==t?t.NextInSEL=i:this.m_SortedEdges=i,null!==i&&(i.PrevInSEL=t),e.NextInSEL=null,e.PrevInSEL=null)},t.Clipper.prototype.ProcessHorizontals=function(){for(var e={};this.PopEdgeFromSEL(e);)this.ProcessHorizontal(e.v)},t.Clipper.prototype.GetHorzDirection=function(e,i){e.Bot.X<e.Top.X?(i.Left=e.Bot.X,i.Right=e.Top.X,i.Dir=t.Direction.dLeftToRight):(i.Left=e.Top.X,i.Right=e.Bot.X,i.Dir=t.Direction.dRightToLeft)},t.Clipper.prototype.ProcessHorizontal=function(e){var i={Dir:null,Left:null,Right:null};this.GetHorzDirection(e,i);for(var n=i.Dir,s=i.Left,r=i.Right,o=0===e.WindDelta,a=e,A=null;null!==a.NextInLML&&t.ClipperBase.IsHorizontal(a.NextInLML);)a=a.NextInLML;null===a.NextInLML&&(A=this.GetMaximaPair(a));var l=this.m_Maxima;if(null!==l)if(n===t.Direction.dLeftToRight){for(;null!==l&&l.X<=e.Bot.X;)l=l.Next;null!==l&&l.X>=a.Top.X&&(l=null)}else{for(;null!==l.Next&&l.Next.X<e.Bot.X;)l=l.Next;l.X<=a.Top.X&&(l=null)}for(var c=null;;){for(var h=e===a,p=this.GetNextInAEL(e,n);null!==p;){if(null!==l)if(n===t.Direction.dLeftToRight)for(;null!==l&&l.X<p.Curr.X;)e.OutIdx>=0&&!o&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Next;else for(;null!==l&&l.X>p.Curr.X;)e.OutIdx>=0&&!o&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Prev;if(n===t.Direction.dLeftToRight&&p.Curr.X>r||n===t.Direction.dRightToLeft&&p.Curr.X<s)break;if(p.Curr.X===e.Top.X&&null!==e.NextInLML&&p.Dx<e.NextInLML.Dx)break;if(e.OutIdx>=0&&!o){t.use_xyz&&(n===t.Direction.dLeftToRight?this.SetZ(p.Curr,e,p):this.SetZ(p.Curr,p,e)),c=this.AddOutPt(e,p.Curr);for(var u=this.m_SortedEdges;null!==u;){if(u.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,u.Bot.X,u.Top.X)){var g=this.GetLastOutPt(u);this.AddJoin(g,c,u.Top)}u=u.NextInSEL}this.AddGhostJoin(c,e.Bot)}if(p===A&&h)return e.OutIdx>=0&&this.AddLocalMaxPoly(e,A,e.Top),this.DeleteFromAEL(e),void this.DeleteFromAEL(A);if(n===t.Direction.dLeftToRight){var d=new t.IntPoint2(p.Curr.X,e.Curr.Y);this.IntersectEdges(e,p,d)}else d=new t.IntPoint2(p.Curr.X,e.Curr.Y),this.IntersectEdges(p,e,d);var f=this.GetNextInAEL(p,n);this.SwapPositionsInAEL(e,p),p=f}if(null===e.NextInLML||!t.ClipperBase.IsHorizontal(e.NextInLML))break;(e=this.UpdateEdgeIntoAEL(e)).OutIdx>=0&&this.AddOutPt(e,e.Bot),i={Dir:n,Left:s,Right:r},this.GetHorzDirection(e,i),n=i.Dir,s=i.Left,r=i.Right}if(e.OutIdx>=0&&null===c){for(c=this.GetLastOutPt(e),u=this.m_SortedEdges;null!==u;)u.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,u.Bot.X,u.Top.X)&&(g=this.GetLastOutPt(u),this.AddJoin(g,c,u.Top)),u=u.NextInSEL;this.AddGhostJoin(c,e.Top)}if(null!==e.NextInLML)if(e.OutIdx>=0){if(c=this.AddOutPt(e,e.Top),0===(e=this.UpdateEdgeIntoAEL(e)).WindDelta)return;var m=e.PrevInAEL;f=e.NextInAEL,null!==m&&m.Curr.X===e.Bot.X&&m.Curr.Y===e.Bot.Y&&0===m.WindDelta&&m.OutIdx>=0&&m.Curr.Y>m.Top.Y&&t.ClipperBase.SlopesEqual3(e,m,this.m_UseFullRange)?(g=this.AddOutPt(m,e.Bot),this.AddJoin(c,g,e.Top)):null!==f&&f.Curr.X===e.Bot.X&&f.Curr.Y===e.Bot.Y&&0!==f.WindDelta&&f.OutIdx>=0&&f.Curr.Y>f.Top.Y&&t.ClipperBase.SlopesEqual3(e,f,this.m_UseFullRange)&&(g=this.AddOutPt(f,e.Bot),this.AddJoin(c,g,e.Top))}else e=this.UpdateEdgeIntoAEL(e);else e.OutIdx>=0&&this.AddOutPt(e,e.Top),this.DeleteFromAEL(e)},t.Clipper.prototype.GetNextInAEL=function(e,i){return i===t.Direction.dLeftToRight?e.NextInAEL:e.PrevInAEL},t.Clipper.prototype.IsMinima=function(e){return null!==e&&e.Prev.NextInLML!==e&&e.Next.NextInLML!==e},t.Clipper.prototype.IsMaxima=function(e,t){return null!==e&&e.Top.Y===t&&null===e.NextInLML},t.Clipper.prototype.IsIntermediate=function(e,t){return e.Top.Y===t&&null!==e.NextInLML},t.Clipper.prototype.GetMaximaPair=function(e){return t.IntPoint.op_Equality(e.Next.Top,e.Top)&&null===e.Next.NextInLML?e.Next:t.IntPoint.op_Equality(e.Prev.Top,e.Top)&&null===e.Prev.NextInLML?e.Prev:null},t.Clipper.prototype.GetMaximaPairEx=function(e){var i=this.GetMaximaPair(e);return null===i||i.OutIdx===t.ClipperBase.Skip||i.NextInAEL===i.PrevInAEL&&!t.ClipperBase.IsHorizontal(i)?null:i},t.Clipper.prototype.ProcessIntersections=function(e){if(null===this.m_ActiveEdges)return!0;try{if(this.BuildIntersectList(e),0===this.m_IntersectList.length)return!0;if(1!==this.m_IntersectList.length&&!this.FixupIntersectionOrder())return!1;this.ProcessIntersectList()}catch(e){this.m_SortedEdges=null,this.m_IntersectList.length=0,t.Error("ProcessIntersections error")}return this.m_SortedEdges=null,!0},t.Clipper.prototype.BuildIntersectList=function(e){if(null!==this.m_ActiveEdges){var i=this.m_ActiveEdges;for(this.m_SortedEdges=i;null!==i;)i.PrevInSEL=i.PrevInAEL,i.NextInSEL=i.NextInAEL,i.Curr.X=t.Clipper.TopX(i,e),i=i.NextInAEL;for(var n=!0;n&&null!==this.m_SortedEdges;){for(n=!1,i=this.m_SortedEdges;null!==i.NextInSEL;){var s=i.NextInSEL,r=new t.IntPoint0;if(i.Curr.X>s.Curr.X){this.IntersectPoint(i,s,r),r.Y<e&&(r=new t.IntPoint2(t.Clipper.TopX(i,e),e));var o=new t.IntersectNode;o.Edge1=i,o.Edge2=s,o.Pt.X=r.X,o.Pt.Y=r.Y,t.use_xyz&&(o.Pt.Z=r.Z),this.m_IntersectList.push(o),this.SwapPositionsInSEL(i,s),n=!0}else i=s}if(null===i.PrevInSEL)break;i.PrevInSEL.NextInSEL=null}this.m_SortedEdges=null}},t.Clipper.prototype.EdgesAdjacent=function(e){return e.Edge1.NextInSEL===e.Edge2||e.Edge1.PrevInSEL===e.Edge2},t.Clipper.IntersectNodeSort=function(e,t){return t.Pt.Y-e.Pt.Y},t.Clipper.prototype.FixupIntersectionOrder=function(){this.m_IntersectList.sort(this.m_IntersectNodeComparer),this.CopyAELToSEL();for(var e=this.m_IntersectList.length,t=0;t<e;t++){if(!this.EdgesAdjacent(this.m_IntersectList[t])){for(var i=t+1;i<e&&!this.EdgesAdjacent(this.m_IntersectList[i]);)i++;if(i===e)return!1;var n=this.m_IntersectList[t];this.m_IntersectList[t]=this.m_IntersectList[i],this.m_IntersectList[i]=n}this.SwapPositionsInSEL(this.m_IntersectList[t].Edge1,this.m_IntersectList[t].Edge2)}return!0},t.Clipper.prototype.ProcessIntersectList=function(){for(var e=0,t=this.m_IntersectList.length;e<t;e++){var i=this.m_IntersectList[e];this.IntersectEdges(i.Edge1,i.Edge2,i.Pt),this.SwapPositionsInAEL(i.Edge1,i.Edge2)}this.m_IntersectList.length=0},r.msie?t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.round(e)}:r.chromium?t.Clipper.Round=function(e){return e<0?-Math.round(Math.abs(e)):Math.round(e)}:r.safari?t.Clipper.Round=function(e){return e<0?(e-=.5)<-2147483648?Math.ceil(e):0|e:(e+=.5)>2147483647?Math.floor(e):0|e}:t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.floor(e+.5)},t.Clipper.TopX=function(e,i){return i===e.Top.Y?e.Top.X:e.Bot.X+t.Clipper.Round(e.Dx*(i-e.Bot.Y))},t.Clipper.prototype.IntersectPoint=function(e,i,n){var s,r;if(n.X=0,n.Y=0,e.Dx===i.Dx)return n.Y=e.Curr.Y,void(n.X=t.Clipper.TopX(e,n.Y));if(0===e.Delta.X)n.X=e.Bot.X,t.ClipperBase.IsHorizontal(i)?n.Y=i.Bot.Y:(r=i.Bot.Y-i.Bot.X/i.Dx,n.Y=t.Clipper.Round(n.X/i.Dx+r));else if(0===i.Delta.X)n.X=i.Bot.X,t.ClipperBase.IsHorizontal(e)?n.Y=e.Bot.Y:(s=e.Bot.Y-e.Bot.X/e.Dx,n.Y=t.Clipper.Round(n.X/e.Dx+s));else{s=e.Bot.X-e.Bot.Y*e.Dx;var o=((r=i.Bot.X-i.Bot.Y*i.Dx)-s)/(e.Dx-i.Dx);n.Y=t.Clipper.Round(o),Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.Round(e.Dx*o+s):n.X=t.Clipper.Round(i.Dx*o+r)}if(n.Y<e.Top.Y||n.Y<i.Top.Y){if(e.Top.Y>i.Top.Y)return n.Y=e.Top.Y,n.X=t.Clipper.TopX(i,e.Top.Y),n.X<e.Top.X;n.Y=i.Top.Y,Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.TopX(e,n.Y):n.X=t.Clipper.TopX(i,n.Y)}n.Y>e.Curr.Y&&(n.Y=e.Curr.Y,Math.abs(e.Dx)>Math.abs(i.Dx)?n.X=t.Clipper.TopX(i,n.Y):n.X=t.Clipper.TopX(e,n.Y))},t.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=function(e){for(var i=this.m_ActiveEdges;null!==i;){var n=this.IsMaxima(i,e);if(n){var s=this.GetMaximaPairEx(i);n=null===s||!t.ClipperBase.IsHorizontal(s)}if(n){this.StrictlySimple&&this.InsertMaxima(i.Top.X);var r=i.PrevInAEL;this.DoMaxima(i),i=null===r?this.m_ActiveEdges:r.NextInAEL}else{if(this.IsIntermediate(i,e)&&t.ClipperBase.IsHorizontal(i.NextInLML)?((i=this.UpdateEdgeIntoAEL(i)).OutIdx>=0&&this.AddOutPt(i,i.Bot),this.AddEdgeToSEL(i)):(i.Curr.X=t.Clipper.TopX(i,e),i.Curr.Y=e),t.use_xyz&&(i.Top.Y===e?i.Curr.Z=i.Top.Z:i.Bot.Y===e?i.Curr.Z=i.Bot.Z:i.Curr.Z=0),this.StrictlySimple&&(r=i.PrevInAEL,i.OutIdx>=0&&0!==i.WindDelta&&null!==r&&r.OutIdx>=0&&r.Curr.X===i.Curr.X&&0!==r.WindDelta)){var o=new t.IntPoint1(i.Curr);t.use_xyz&&this.SetZ(o,r,i);var a=this.AddOutPt(r,o),A=this.AddOutPt(i,o);this.AddJoin(a,A,o)}i=i.NextInAEL}}for(this.ProcessHorizontals(),this.m_Maxima=null,i=this.m_ActiveEdges;null!==i;){if(this.IsIntermediate(i,e)){a=null,i.OutIdx>=0&&(a=this.AddOutPt(i,i.Top)),r=(i=this.UpdateEdgeIntoAEL(i)).PrevInAEL;var l=i.NextInAEL;null!==r&&r.Curr.X===i.Bot.X&&r.Curr.Y===i.Bot.Y&&null!==a&&r.OutIdx>=0&&r.Curr.Y===r.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,r.Curr,r.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==r.WindDelta?(A=this.AddOutPt(ePrev2,i.Bot),this.AddJoin(a,A,i.Top)):null!==l&&l.Curr.X===i.Bot.X&&l.Curr.Y===i.Bot.Y&&null!==a&&l.OutIdx>=0&&l.Curr.Y===l.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,l.Curr,l.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==l.WindDelta&&(A=this.AddOutPt(l,i.Bot),this.AddJoin(a,A,i.Top))}i=i.NextInAEL}},t.Clipper.prototype.DoMaxima=function(e){var i=this.GetMaximaPairEx(e);if(null===i)return e.OutIdx>=0&&this.AddOutPt(e,e.Top),void this.DeleteFromAEL(e);for(var n=e.NextInAEL;null!==n&&n!==i;)this.IntersectEdges(e,n,e.Top),this.SwapPositionsInAEL(e,n),n=e.NextInAEL;-1===e.OutIdx&&-1===i.OutIdx?(this.DeleteFromAEL(e),this.DeleteFromAEL(i)):e.OutIdx>=0&&i.OutIdx>=0?(e.OutIdx>=0&&this.AddLocalMaxPoly(e,i,e.Top),this.DeleteFromAEL(e),this.DeleteFromAEL(i)):t.use_lines&&0===e.WindDelta?(e.OutIdx>=0&&(this.AddOutPt(e,e.Top),e.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(e),i.OutIdx>=0&&(this.AddOutPt(i,e.Top),i.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(i)):t.Error("DoMaxima error")},t.Clipper.ReversePaths=function(e){for(var t=0,i=e.length;t<i;t++)e[t].reverse()},t.Clipper.Orientation=function(e){return t.Clipper.Area(e)>=0},t.Clipper.prototype.PointCount=function(e){if(null===e)return 0;var t=0,i=e;do{t++,i=i.Next}while(i!==e);return t},t.Clipper.prototype.BuildResult=function(e){t.Clear(e);for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var s=this.m_PolyOuts[i];if(null!==s.Pts){var r=s.Pts.Prev,o=this.PointCount(r);if(!(o<2)){for(var a=new Array(o),A=0;A<o;A++)a[A]=r.Pt,r=r.Prev;e.push(a)}}}},t.Clipper.prototype.BuildResult2=function(e){e.Clear();for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var s=this.m_PolyOuts[i],r=this.PointCount(s.Pts);if(!(s.IsOpen&&r<2||!s.IsOpen&&r<3)){this.FixHoleLinkage(s);var o=new t.PolyNode;e.m_AllPolys.push(o),s.PolyNode=o,o.m_polygon.length=r;for(var a=s.Pts.Prev,A=0;A<r;A++)o.m_polygon[A]=a.Pt,a=a.Prev}}for(i=0,n=this.m_PolyOuts.length;i<n;i++)null!==(s=this.m_PolyOuts[i]).PolyNode&&(s.IsOpen?(s.PolyNode.IsOpen=!0,e.AddChild(s.PolyNode)):null!==s.FirstLeft&&null!==s.FirstLeft.PolyNode?s.FirstLeft.PolyNode.AddChild(s.PolyNode):e.AddChild(s.PolyNode))},t.Clipper.prototype.FixupOutPolyline=function(e){for(var i=e.Pts,n=i.Prev;i!==n;)if(i=i.Next,t.IntPoint.op_Equality(i.Pt,i.Prev.Pt)){i===n&&(n=i.Prev);var s=i.Prev;s.Next=i.Next,i.Next.Prev=s,i=s}i===i.Prev&&(e.Pts=null)},t.Clipper.prototype.FixupOutPolygon=function(e){var i=null;e.BottomPt=null;for(var n=e.Pts,s=this.PreserveCollinear||this.StrictlySimple;;){if(n.Prev===n||n.Prev===n.Next)return void(e.Pts=null);if(t.IntPoint.op_Equality(n.Pt,n.Next.Pt)||t.IntPoint.op_Equality(n.Pt,n.Prev.Pt)||t.ClipperBase.SlopesEqual4(n.Prev.Pt,n.Pt,n.Next.Pt,this.m_UseFullRange)&&(!s||!this.Pt2IsBetweenPt1AndPt3(n.Prev.Pt,n.Pt,n.Next.Pt)))i=null,n.Prev.Next=n.Next,n.Next.Prev=n.Prev,n=n.Prev;else{if(n===i)break;null===i&&(i=n),n=n.Next}}e.Pts=n},t.Clipper.prototype.DupOutPt=function(e,i){var n=new t.OutPt;return n.Pt.X=e.Pt.X,n.Pt.Y=e.Pt.Y,t.use_xyz&&(n.Pt.Z=e.Pt.Z),n.Idx=e.Idx,i?(n.Next=e.Next,n.Prev=e,e.Next.Prev=n,e.Next=n):(n.Prev=e.Prev,n.Next=e,e.Prev.Next=n,e.Prev=n),n},t.Clipper.prototype.GetOverlap=function(e,t,i,n,s){return e<t?i<n?(s.Left=Math.max(e,i),s.Right=Math.min(t,n)):(s.Left=Math.max(e,n),s.Right=Math.min(t,i)):i<n?(s.Left=Math.max(t,i),s.Right=Math.min(e,n)):(s.Left=Math.max(t,n),s.Right=Math.min(e,i)),s.Left<s.Right},t.Clipper.prototype.JoinHorz=function(e,i,n,s,r,o){var a=e.Pt.X>i.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight,A=n.Pt.X>s.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight;if(a===A)return!1;if(a===t.Direction.dLeftToRight){for(;e.Next.Pt.X<=r.X&&e.Next.Pt.X>=e.Pt.X&&e.Next.Pt.Y===r.Y;)e=e.Next;o&&e.Pt.X!==r.X&&(e=e.Next),i=this.DupOutPt(e,!o),t.IntPoint.op_Inequality(i.Pt,r)&&((e=i).Pt.X=r.X,e.Pt.Y=r.Y,t.use_xyz&&(e.Pt.Z=r.Z),i=this.DupOutPt(e,!o))}else{for(;e.Next.Pt.X>=r.X&&e.Next.Pt.X<=e.Pt.X&&e.Next.Pt.Y===r.Y;)e=e.Next;o||e.Pt.X===r.X||(e=e.Next),i=this.DupOutPt(e,o),t.IntPoint.op_Inequality(i.Pt,r)&&((e=i).Pt.X=r.X,e.Pt.Y=r.Y,t.use_xyz&&(e.Pt.Z=r.Z),i=this.DupOutPt(e,o))}if(A===t.Direction.dLeftToRight){for(;n.Next.Pt.X<=r.X&&n.Next.Pt.X>=n.Pt.X&&n.Next.Pt.Y===r.Y;)n=n.Next;o&&n.Pt.X!==r.X&&(n=n.Next),s=this.DupOutPt(n,!o),t.IntPoint.op_Inequality(s.Pt,r)&&((n=s).Pt.X=r.X,n.Pt.Y=r.Y,t.use_xyz&&(n.Pt.Z=r.Z),s=this.DupOutPt(n,!o))}else{for(;n.Next.Pt.X>=r.X&&n.Next.Pt.X<=n.Pt.X&&n.Next.Pt.Y===r.Y;)n=n.Next;o||n.Pt.X===r.X||(n=n.Next),s=this.DupOutPt(n,o),t.IntPoint.op_Inequality(s.Pt,r)&&((n=s).Pt.X=r.X,n.Pt.Y=r.Y,t.use_xyz&&(n.Pt.Z=r.Z),s=this.DupOutPt(n,o))}return a===t.Direction.dLeftToRight===o?(e.Prev=n,n.Next=e,i.Next=s,s.Prev=i):(e.Next=n,n.Prev=e,i.Prev=s,s.Next=i),!0},t.Clipper.prototype.JoinPoints=function(e,i,n){var s=e.OutPt1,r=new t.OutPt,o=e.OutPt2,a=new t.OutPt,A=e.OutPt1.Pt.Y===e.OffPt.Y;if(A&&t.IntPoint.op_Equality(e.OffPt,e.OutPt1.Pt)&&t.IntPoint.op_Equality(e.OffPt,e.OutPt2.Pt)){if(i!==n)return!1;for(r=e.OutPt1.Next;r!==s&&t.IntPoint.op_Equality(r.Pt,e.OffPt);)r=r.Next;var l=r.Pt.Y>e.OffPt.Y;for(a=e.OutPt2.Next;a!==o&&t.IntPoint.op_Equality(a.Pt,e.OffPt);)a=a.Next;return l!==a.Pt.Y>e.OffPt.Y&&(l?(r=this.DupOutPt(s,!1),a=this.DupOutPt(o,!0),s.Prev=o,o.Next=s,r.Next=a,a.Prev=r,e.OutPt1=s,e.OutPt2=r,!0):(r=this.DupOutPt(s,!0),a=this.DupOutPt(o,!1),s.Next=o,o.Prev=s,r.Prev=a,a.Next=r,e.OutPt1=s,e.OutPt2=r,!0))}if(A){for(r=s;s.Prev.Pt.Y===s.Pt.Y&&s.Prev!==r&&s.Prev!==o;)s=s.Prev;for(;r.Next.Pt.Y===r.Pt.Y&&r.Next!==s&&r.Next!==o;)r=r.Next;if(r.Next===s||r.Next===o)return!1;for(a=o;o.Prev.Pt.Y===o.Pt.Y&&o.Prev!==a&&o.Prev!==r;)o=o.Prev;for(;a.Next.Pt.Y===a.Pt.Y&&a.Next!==o&&a.Next!==s;)a=a.Next;if(a.Next===o||a.Next===s)return!1;var c={Left:null,Right:null};if(!this.GetOverlap(s.Pt.X,r.Pt.X,o.Pt.X,a.Pt.X,c))return!1;var h,p=c.Left,u=c.Right,g=new t.IntPoint0;return s.Pt.X>=p&&s.Pt.X<=u?(g.X=s.Pt.X,g.Y=s.Pt.Y,t.use_xyz&&(g.Z=s.Pt.Z),h=s.Pt.X>r.Pt.X):o.Pt.X>=p&&o.Pt.X<=u?(g.X=o.Pt.X,g.Y=o.Pt.Y,t.use_xyz&&(g.Z=o.Pt.Z),h=o.Pt.X>a.Pt.X):r.Pt.X>=p&&r.Pt.X<=u?(g.X=r.Pt.X,g.Y=r.Pt.Y,t.use_xyz&&(g.Z=r.Pt.Z),h=r.Pt.X>s.Pt.X):(g.X=a.Pt.X,g.Y=a.Pt.Y,t.use_xyz&&(g.Z=a.Pt.Z),h=a.Pt.X>o.Pt.X),e.OutPt1=s,e.OutPt2=o,this.JoinHorz(s,r,o,a,g,h)}for(r=s.Next;t.IntPoint.op_Equality(r.Pt,s.Pt)&&r!==s;)r=r.Next;var d=r.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,r.Pt,e.OffPt,this.m_UseFullRange);if(d){for(r=s.Prev;t.IntPoint.op_Equality(r.Pt,s.Pt)&&r!==s;)r=r.Prev;if(r.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,r.Pt,e.OffPt,this.m_UseFullRange))return!1}for(a=o.Next;t.IntPoint.op_Equality(a.Pt,o.Pt)&&a!==o;)a=a.Next;var f=a.Pt.Y>o.Pt.Y||!t.ClipperBase.SlopesEqual4(o.Pt,a.Pt,e.OffPt,this.m_UseFullRange);if(f){for(a=o.Prev;t.IntPoint.op_Equality(a.Pt,o.Pt)&&a!==o;)a=a.Prev;if(a.Pt.Y>o.Pt.Y||!t.ClipperBase.SlopesEqual4(o.Pt,a.Pt,e.OffPt,this.m_UseFullRange))return!1}return!(r===s||a===o||r===a||i===n&&d===f||(d?(r=this.DupOutPt(s,!1),a=this.DupOutPt(o,!0),s.Prev=o,o.Next=s,r.Next=a,a.Prev=r,e.OutPt1=s,e.OutPt2=r,0):(r=this.DupOutPt(s,!0),a=this.DupOutPt(o,!1),s.Next=o,o.Prev=s,r.Prev=a,a.Next=r,e.OutPt1=s,e.OutPt2=r,0)))},t.Clipper.GetBounds=function(e){for(var i=0,n=e.length;i<n&&0===e[i].length;)i++;if(i===n)return new t.IntRect(0,0,0,0);var s=new t.IntRect;for(s.left=e[i][0].X,s.right=s.left,s.top=e[i][0].Y,s.bottom=s.top;i<n;i++)for(var r=0,o=e[i].length;r<o;r++)e[i][r].X<s.left?s.left=e[i][r].X:e[i][r].X>s.right&&(s.right=e[i][r].X),e[i][r].Y<s.top?s.top=e[i][r].Y:e[i][r].Y>s.bottom&&(s.bottom=e[i][r].Y);return s},t.Clipper.prototype.GetBounds2=function(e){var i=e,n=new t.IntRect;for(n.left=e.Pt.X,n.right=e.Pt.X,n.top=e.Pt.Y,n.bottom=e.Pt.Y,e=e.Next;e!==i;)e.Pt.X<n.left&&(n.left=e.Pt.X),e.Pt.X>n.right&&(n.right=e.Pt.X),e.Pt.Y<n.top&&(n.top=e.Pt.Y),e.Pt.Y>n.bottom&&(n.bottom=e.Pt.Y),e=e.Next;return n},t.Clipper.PointInPolygon=function(e,t){var i=0,n=t.length;if(n<3)return 0;for(var s=t[0],r=1;r<=n;++r){var o=r===n?t[0]:t[r];if(o.Y===e.Y&&(o.X===e.X||s.Y===e.Y&&o.X>e.X==s.X<e.X))return-1;if(s.Y<e.Y!=o.Y<e.Y)if(s.X>=e.X)if(o.X>e.X)i=1-i;else{if(0==(a=(s.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(s.Y-e.Y)))return-1;a>0==o.Y>s.Y&&(i=1-i)}else if(o.X>e.X){var a;if(0==(a=(s.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(s.Y-e.Y)))return-1;a>0==o.Y>s.Y&&(i=1-i)}s=o}return i},t.Clipper.prototype.PointInPolygon=function(e,t){var i=0,n=t,s=e.X,r=e.Y,o=t.Pt.X,a=t.Pt.Y;do{var A=(t=t.Next).Pt.X,l=t.Pt.Y;if(l===r&&(A===s||a===r&&A>s==o<s))return-1;if(a<r!=l<r)if(o>=s)if(A>s)i=1-i;else{if(0==(c=(o-s)*(l-r)-(A-s)*(a-r)))return-1;c>0==l>a&&(i=1-i)}else if(A>s){var c;if(0==(c=(o-s)*(l-r)-(A-s)*(a-r)))return-1;c>0==l>a&&(i=1-i)}o=A,a=l}while(n!==t);return i},t.Clipper.prototype.Poly2ContainsPoly1=function(e,t){var i=e;do{var n=this.PointInPolygon(i.Pt,t);if(n>=0)return n>0;i=i.Next}while(i!==e);return!0},t.Clipper.prototype.FixupFirstLefts1=function(e,i){for(var n,s,r=0,o=this.m_PolyOuts.length;r<o;r++)n=this.m_PolyOuts[r],s=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&s===e&&this.Poly2ContainsPoly1(n.Pts,i.Pts)&&(n.FirstLeft=i)},t.Clipper.prototype.FixupFirstLefts2=function(e,i){for(var n,s,r=i.FirstLeft,o=0,a=this.m_PolyOuts.length;o<a;o++)null!==(n=this.m_PolyOuts[o]).Pts&&n!==i&&n!==e&&((s=t.Clipper.ParseFirstLeft(n.FirstLeft))!==r&&s!==e&&s!==i||(this.Poly2ContainsPoly1(n.Pts,e.Pts)?n.FirstLeft=e:this.Poly2ContainsPoly1(n.Pts,i.Pts)?n.FirstLeft=i:n.FirstLeft!==e&&n.FirstLeft!==i||(n.FirstLeft=r)))},t.Clipper.prototype.FixupFirstLefts3=function(e,i){for(var n,s,r=0,o=this.m_PolyOuts.length;r<o;r++)n=this.m_PolyOuts[r],s=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&s===e&&(n.FirstLeft=i)},t.Clipper.ParseFirstLeft=function(e){for(;null!==e&&null===e.Pts;)e=e.FirstLeft;return e},t.Clipper.prototype.JoinCommonEdges=function(){for(var e=0,t=this.m_Joins.length;e<t;e++){var i,n=this.m_Joins[e],s=this.GetOutRec(n.OutPt1.Idx),r=this.GetOutRec(n.OutPt2.Idx);null!==s.Pts&&null!==r.Pts&&(s.IsOpen||r.IsOpen||(i=s===r?s:this.OutRec1RightOfOutRec2(s,r)?r:this.OutRec1RightOfOutRec2(r,s)?s:this.GetLowermostRec(s,r),this.JoinPoints(n,s,r)&&(s===r?(s.Pts=n.OutPt1,s.BottomPt=null,(r=this.CreateOutRec()).Pts=n.OutPt2,this.UpdateOutPtIdxs(r),this.Poly2ContainsPoly1(r.Pts,s.Pts)?(r.IsHole=!s.IsHole,r.FirstLeft=s,this.m_UsingPolyTree&&this.FixupFirstLefts2(r,s),(r.IsHole^this.ReverseSolution)==this.Area$1(r)>0&&this.ReversePolyPtLinks(r.Pts)):this.Poly2ContainsPoly1(s.Pts,r.Pts)?(r.IsHole=s.IsHole,s.IsHole=!r.IsHole,r.FirstLeft=s.FirstLeft,s.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts2(s,r),(s.IsHole^this.ReverseSolution)==this.Area$1(s)>0&&this.ReversePolyPtLinks(s.Pts)):(r.IsHole=s.IsHole,r.FirstLeft=s.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(s,r))):(r.Pts=null,r.BottomPt=null,r.Idx=s.Idx,s.IsHole=i.IsHole,i===r&&(s.FirstLeft=r.FirstLeft),r.FirstLeft=s,this.m_UsingPolyTree&&this.FixupFirstLefts3(r,s)))))}},t.Clipper.prototype.UpdateOutPtIdxs=function(e){var t=e.Pts;do{t.Idx=e.Idx,t=t.Prev}while(t!==e.Pts)},t.Clipper.prototype.DoSimplePolygons=function(){for(var e=0;e<this.m_PolyOuts.length;){var i=this.m_PolyOuts[e++],n=i.Pts;if(null!==n&&!i.IsOpen)do{for(var s=n.Next;s!==i.Pts;){if(t.IntPoint.op_Equality(n.Pt,s.Pt)&&s.Next!==n&&s.Prev!==n){var r=n.Prev,o=s.Prev;n.Prev=o,o.Next=n,s.Prev=r,r.Next=s,i.Pts=n;var a=this.CreateOutRec();a.Pts=s,this.UpdateOutPtIdxs(a),this.Poly2ContainsPoly1(a.Pts,i.Pts)?(a.IsHole=!i.IsHole,a.FirstLeft=i,this.m_UsingPolyTree&&this.FixupFirstLefts2(a,i)):this.Poly2ContainsPoly1(i.Pts,a.Pts)?(a.IsHole=i.IsHole,i.IsHole=!a.IsHole,a.FirstLeft=i.FirstLeft,i.FirstLeft=a,this.m_UsingPolyTree&&this.FixupFirstLefts2(i,a)):(a.IsHole=i.IsHole,a.FirstLeft=i.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(i,a)),s=n}s=s.Next}n=n.Next}while(n!==i.Pts)}},t.Clipper.Area=function(e){if(!Array.isArray(e))return 0;var t=e.length;if(t<3)return 0;for(var i=0,n=0,s=t-1;n<t;++n)i+=(e[s].X+e[n].X)*(e[s].Y-e[n].Y),s=n;return.5*-i},t.Clipper.prototype.Area=function(e){var t=e;if(null===e)return 0;var i=0;do{i+=(e.Prev.Pt.X+e.Pt.X)*(e.Prev.Pt.Y-e.Pt.Y),e=e.Next}while(e!==t);return.5*i},t.Clipper.prototype.Area$1=function(e){return this.Area(e.Pts)},t.Clipper.SimplifyPolygon=function(e,i){var n=new Array,s=new t.Clipper(0);return s.StrictlySimple=!0,s.AddPath(e,t.PolyType.ptSubject,!0),s.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.SimplifyPolygons=function(e,i){void 0===i&&(i=t.PolyFillType.pftEvenOdd);var n=new Array,s=new t.Clipper(0);return s.StrictlySimple=!0,s.AddPaths(e,t.PolyType.ptSubject,!0),s.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.DistanceSqrd=function(e,t){var i=e.X-t.X,n=e.Y-t.Y;return i*i+n*n},t.Clipper.DistanceFromLineSqrd=function(e,t,i){var n=t.Y-i.Y,s=i.X-t.X,r=n*t.X+s*t.Y;return(r=n*e.X+s*e.Y-r)*r/(n*n+s*s)},t.Clipper.SlopesNearCollinear=function(e,i,n,s){return Math.abs(e.X-i.X)>Math.abs(e.Y-i.Y)?e.X>i.X==e.X<n.X?t.Clipper.DistanceFromLineSqrd(e,i,n)<s:i.X>e.X==i.X<n.X?t.Clipper.DistanceFromLineSqrd(i,e,n)<s:t.Clipper.DistanceFromLineSqrd(n,e,i)<s:e.Y>i.Y==e.Y<n.Y?t.Clipper.DistanceFromLineSqrd(e,i,n)<s:i.Y>e.Y==i.Y<n.Y?t.Clipper.DistanceFromLineSqrd(i,e,n)<s:t.Clipper.DistanceFromLineSqrd(n,e,i)<s},t.Clipper.PointsAreClose=function(e,t,i){var n=e.X-t.X,s=e.Y-t.Y;return n*n+s*s<=i},t.Clipper.ExcludeOp=function(e){var t=e.Prev;return t.Next=e.Next,e.Next.Prev=t,t.Idx=0,t},t.Clipper.CleanPolygon=function(e,i){void 0===i&&(i=1.415);var n=e.length;if(0===n)return new Array;for(var s=new Array(n),r=0;r<n;++r)s[r]=new t.OutPt;for(r=0;r<n;++r)s[r].Pt=e[r],s[r].Next=s[(r+1)%n],s[r].Next.Prev=s[r],s[r].Idx=0;for(var o=i*i,a=s[0];0===a.Idx&&a.Next!==a.Prev;)t.Clipper.PointsAreClose(a.Pt,a.Prev.Pt,o)?(a=t.Clipper.ExcludeOp(a),n--):t.Clipper.PointsAreClose(a.Prev.Pt,a.Next.Pt,o)?(t.Clipper.ExcludeOp(a.Next),a=t.Clipper.ExcludeOp(a),n-=2):t.Clipper.SlopesNearCollinear(a.Prev.Pt,a.Pt,a.Next.Pt,o)?(a=t.Clipper.ExcludeOp(a),n--):(a.Idx=1,a=a.Next);n<3&&(n=0);var A=new Array(n);for(r=0;r<n;++r)A[r]=new t.IntPoint1(a.Pt),a=a.Next;return s=null,A},t.Clipper.CleanPolygons=function(e,i){for(var n=new Array(e.length),s=0,r=e.length;s<r;s++)n[s]=t.Clipper.CleanPolygon(e[s],i);return n},t.Clipper.Minkowski=function(e,i,n,s){var r=s?1:0,o=e.length,a=i.length,A=new Array;if(n)for(var l=0;l<a;l++){for(var c=new Array(o),h=0,p=e.length,u=e[h];h<p;u=e[++h])c[h]=new t.IntPoint2(i[l].X+u.X,i[l].Y+u.Y);A.push(c)}else for(l=0;l<a;l++){for(c=new Array(o),h=0,p=e.length,u=e[h];h<p;u=e[++h])c[h]=new t.IntPoint2(i[l].X-u.X,i[l].Y-u.Y);A.push(c)}var g=new Array;for(l=0;l<a-1+r;l++)for(h=0;h<o;h++){var d=new Array;d.push(A[l%a][h%o]),d.push(A[(l+1)%a][h%o]),d.push(A[(l+1)%a][(h+1)%o]),d.push(A[l%a][(h+1)%o]),t.Clipper.Orientation(d)||d.reverse(),g.push(d)}return g},t.Clipper.MinkowskiSum=function(e,i,n){if(i[0]instanceof Array){l=i;for(var s=new t.Paths,r=(a=new t.Clipper,0);r<l.length;++r){var o=t.Clipper.Minkowski(e,l[r],!0,n);a.AddPaths(o,t.PolyType.ptSubject,!0),n&&(A=t.Clipper.TranslatePath(l[r],e[0]),a.AddPath(A,t.PolyType.ptClip,!0))}return a.Execute(t.ClipType.ctUnion,s,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),s}var a,A=i,l=t.Clipper.Minkowski(e,A,!0,n);return(a=new t.Clipper).AddPaths(l,t.PolyType.ptSubject,!0),a.Execute(t.ClipType.ctUnion,l,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),l},t.Clipper.TranslatePath=function(e,i){for(var n=new t.Path,s=0;s<e.length;s++)n.push(new t.IntPoint2(e[s].X+i.X,e[s].Y+i.Y));return n},t.Clipper.MinkowskiDiff=function(e,i){var n=t.Clipper.Minkowski(e,i,!1,!0),s=new t.Clipper;return s.AddPaths(n,t.PolyType.ptSubject,!0),s.Execute(t.ClipType.ctUnion,n,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),n},t.Clipper.PolyTreeToPaths=function(e){var i=new Array;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntAny,i),i},t.Clipper.AddPolyNodeToPaths=function(e,i,n){var s=!0;switch(i){case t.Clipper.NodeType.ntOpen:return;case t.Clipper.NodeType.ntClosed:s=!e.IsOpen}e.m_polygon.length>0&&s&&n.push(e.m_polygon);for(var r=0,o=e.Childs(),a=o.length,A=o[r];r<a;A=o[++r])t.Clipper.AddPolyNodeToPaths(A,i,n)},t.Clipper.OpenPathsFromPolyTree=function(e){for(var i=new t.Paths,n=0,s=e.ChildCount();n<s;n++)e.Childs()[n].IsOpen&&i.push(e.Childs()[n].m_polygon);return i},t.Clipper.ClosedPathsFromPolyTree=function(e){var i=new t.Paths;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntClosed,i),i},Inherit(t.Clipper,t.ClipperBase),t.Clipper.NodeType={ntAny:0,ntOpen:1,ntClosed:2},t.ClipperOffset=function(e,i){void 0===e&&(e=2),void 0===i&&(i=t.ClipperOffset.def_arc_tolerance),this.m_destPolys=new t.Paths,this.m_srcPoly=new t.Path,this.m_destPoly=new t.Path,this.m_normals=new Array,this.m_delta=0,this.m_sinA=0,this.m_sin=0,this.m_cos=0,this.m_miterLim=0,this.m_StepsPerRad=0,this.m_lowest=new t.IntPoint0,this.m_polyNodes=new t.PolyNode,this.MiterLimit=e,this.ArcTolerance=i,this.m_lowest.X=-1},t.ClipperOffset.two_pi=6.28318530717959,t.ClipperOffset.def_arc_tolerance=.25,t.ClipperOffset.prototype.Clear=function(){t.Clear(this.m_polyNodes.Childs()),this.m_lowest.X=-1},t.ClipperOffset.Round=t.Clipper.Round,t.ClipperOffset.prototype.AddPath=function(e,i,n){var s=e.length-1;if(!(s<0)){var r=new t.PolyNode;if(r.m_jointype=i,r.m_endtype=n,n===t.EndType.etClosedLine||n===t.EndType.etClosedPolygon)for(;s>0&&t.IntPoint.op_Equality(e[0],e[s]);)s--;r.m_polygon.push(e[0]);for(var o=0,a=0,A=1;A<=s;A++)t.IntPoint.op_Inequality(r.m_polygon[o],e[A])&&(o++,r.m_polygon.push(e[A]),(e[A].Y>r.m_polygon[a].Y||e[A].Y===r.m_polygon[a].Y&&e[A].X<r.m_polygon[a].X)&&(a=o));if(!(n===t.EndType.etClosedPolygon&&o<2)&&(this.m_polyNodes.AddChild(r),n===t.EndType.etClosedPolygon))if(this.m_lowest.X<0)this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,a);else{var l=this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon[this.m_lowest.Y];(r.m_polygon[a].Y>l.Y||r.m_polygon[a].Y===l.Y&&r.m_polygon[a].X<l.X)&&(this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,a))}}},t.ClipperOffset.prototype.AddPaths=function(e,t,i){for(var n=0,s=e.length;n<s;n++)this.AddPath(e[n],t,i)},t.ClipperOffset.prototype.FixOrientations=function(){if(this.m_lowest.X>=0&&!t.Clipper.Orientation(this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon))for(var e=0;e<this.m_polyNodes.ChildCount();e++)((i=this.m_polyNodes.Childs()[e]).m_endtype===t.EndType.etClosedPolygon||i.m_endtype===t.EndType.etClosedLine&&t.Clipper.Orientation(i.m_polygon))&&i.m_polygon.reverse();else for(e=0;e<this.m_polyNodes.ChildCount();e++){var i;(i=this.m_polyNodes.Childs()[e]).m_endtype!==t.EndType.etClosedLine||t.Clipper.Orientation(i.m_polygon)||i.m_polygon.reverse()}},t.ClipperOffset.GetUnitNormal=function(e,i){var n=i.X-e.X,s=i.Y-e.Y;if(0===n&&0===s)return new t.DoublePoint2(0,0);var r=1/Math.sqrt(n*n+s*s);return n*=r,s*=r,new t.DoublePoint2(s,-n)},t.ClipperOffset.prototype.DoOffset=function(e){if(this.m_destPolys=new Array,this.m_delta=e,t.ClipperBase.near_zero(e))for(var i=0;i<this.m_polyNodes.ChildCount();i++)(r=this.m_polyNodes.Childs()[i]).m_endtype===t.EndType.etClosedPolygon&&this.m_destPolys.push(r.m_polygon);else{var n;this.MiterLimit>2?this.m_miterLim=2/(this.MiterLimit*this.MiterLimit):this.m_miterLim=.5,n=this.ArcTolerance<=0?t.ClipperOffset.def_arc_tolerance:this.ArcTolerance>Math.abs(e)*t.ClipperOffset.def_arc_tolerance?Math.abs(e)*t.ClipperOffset.def_arc_tolerance:this.ArcTolerance;var s=3.14159265358979/Math.acos(1-n/Math.abs(e));for(this.m_sin=Math.sin(t.ClipperOffset.two_pi/s),this.m_cos=Math.cos(t.ClipperOffset.two_pi/s),this.m_StepsPerRad=s/t.ClipperOffset.two_pi,e<0&&(this.m_sin=-this.m_sin),i=0;i<this.m_polyNodes.ChildCount();i++){var r=this.m_polyNodes.Childs()[i];this.m_srcPoly=r.m_polygon;var o=this.m_srcPoly.length;if(!(0===o||e<=0&&(o<3||r.m_endtype!==t.EndType.etClosedPolygon)))if(this.m_destPoly=new Array,1!==o){for(this.m_normals.length=0,p=0;p<o-1;p++)this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[p],this.m_srcPoly[p+1]));if(r.m_endtype===t.EndType.etClosedLine||r.m_endtype===t.EndType.etClosedPolygon?this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[o-1],this.m_srcPoly[0])):this.m_normals.push(new t.DoublePoint1(this.m_normals[o-2])),r.m_endtype===t.EndType.etClosedPolygon){var a=o-1;for(p=0;p<o;p++)a=this.OffsetPoint(p,a,r.m_jointype);this.m_destPolys.push(this.m_destPoly)}else if(r.m_endtype===t.EndType.etClosedLine){for(a=o-1,p=0;p<o;p++)a=this.OffsetPoint(p,a,r.m_jointype);this.m_destPolys.push(this.m_destPoly),this.m_destPoly=new Array;var A=this.m_normals[o-1];for(p=o-1;p>0;p--)this.m_normals[p]=new t.DoublePoint2(-this.m_normals[p-1].X,-this.m_normals[p-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-A.X,-A.Y),a=0,p=o-1;p>=0;p--)a=this.OffsetPoint(p,a,r.m_jointype);this.m_destPolys.push(this.m_destPoly)}else{var l;for(a=0,p=1;p<o-1;++p)a=this.OffsetPoint(p,a,r.m_jointype);for(r.m_endtype===t.EndType.etOpenButt?(p=o-1,l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[p].X+this.m_normals[p].X*e),t.ClipperOffset.Round(this.m_srcPoly[p].Y+this.m_normals[p].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[p].X-this.m_normals[p].X*e),t.ClipperOffset.Round(this.m_srcPoly[p].Y-this.m_normals[p].Y*e)),this.m_destPoly.push(l)):(p=o-1,a=o-2,this.m_sinA=0,this.m_normals[p]=new t.DoublePoint2(-this.m_normals[p].X,-this.m_normals[p].Y),r.m_endtype===t.EndType.etOpenSquare?this.DoSquare(p,a):this.DoRound(p,a)),p=o-1;p>0;p--)this.m_normals[p]=new t.DoublePoint2(-this.m_normals[p-1].X,-this.m_normals[p-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-this.m_normals[1].X,-this.m_normals[1].Y),p=(a=o-1)-1;p>0;--p)a=this.OffsetPoint(p,a,r.m_jointype);r.m_endtype===t.EndType.etOpenButt?(l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X-this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y-this.m_normals[0].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+this.m_normals[0].Y*e)),this.m_destPoly.push(l)):(a=1,this.m_sinA=0,r.m_endtype===t.EndType.etOpenSquare?this.DoSquare(0,1):this.DoRound(0,1)),this.m_destPolys.push(this.m_destPoly)}}else{if(r.m_jointype===t.JoinType.jtRound)for(var c=1,h=0,p=1;p<=s;p++){this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+h*e)));var u=c;c=c*this.m_cos-this.m_sin*h,h=u*this.m_sin+h*this.m_cos}else{c=-1,h=-1;for(var p=0;p<4;++p)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+h*e))),c<0?c=1:h<0?h=1:c=-1}this.m_destPolys.push(this.m_destPoly)}}}},t.ClipperOffset.prototype.Execute=function(){var e=arguments;if(e[0]instanceof t.PolyTree)if(o=e[1],(r=e[0]).Clear(),this.FixOrientations(),this.DoOffset(o),(s=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else if(A=t.Clipper.GetBounds(this.m_destPolys),(a=new t.Path).push(new t.IntPoint2(A.left-10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.top-10)),a.push(new t.IntPoint2(A.left-10,A.top-10)),s.AddPath(a,t.PolyType.ptSubject,!0),s.ReverseSolution=!0,s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),1===r.ChildCount()&&r.Childs()[0].ChildCount()>0){var i=r.Childs()[0];r.Childs()[0]=i.Childs()[0],r.Childs()[0].m_Parent=r;for(var n=1;n<i.ChildCount();n++)r.AddChild(i.Childs()[n])}else r.Clear();else{var s,r=e[0],o=e[1];if(t.Clear(r),this.FixOrientations(),this.DoOffset(o),(s=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else{var a,A=t.Clipper.GetBounds(this.m_destPolys);(a=new t.Path).push(new t.IntPoint2(A.left-10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.top-10)),a.push(new t.IntPoint2(A.left-10,A.top-10)),s.AddPath(a,t.PolyType.ptSubject,!0),s.ReverseSolution=!0,s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),r.length>0&&r.splice(0,1)}}},t.ClipperOffset.prototype.OffsetPoint=function(e,i,n){if(this.m_sinA=this.m_normals[i].X*this.m_normals[e].Y-this.m_normals[e].X*this.m_normals[i].Y,Math.abs(this.m_sinA*this.m_delta)<1){if(this.m_normals[i].X*this.m_normals[e].X+this.m_normals[e].Y*this.m_normals[i].Y>0)return this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),i}else this.m_sinA>1?this.m_sinA=1:this.m_sinA<-1&&(this.m_sinA=-1);if(this.m_sinA*this.m_delta<0)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),this.m_destPoly.push(new t.IntPoint1(this.m_srcPoly[e])),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)));else switch(n){case t.JoinType.jtMiter:var s=this.m_normals[e].X*this.m_normals[i].X+this.m_normals[e].Y*this.m_normals[i].Y+1;s>=this.m_miterLim?this.DoMiter(e,i,s):this.DoSquare(e,i);break;case t.JoinType.jtSquare:this.DoSquare(e,i);break;case t.JoinType.jtRound:this.DoRound(e,i)}return i=e},t.ClipperOffset.prototype.DoSquare=function(e,i){var n=Math.tan(Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y)/4);this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[i].X-this.m_normals[i].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[i].Y+this.m_normals[i].X*n)))),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[e].X+this.m_normals[e].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[e].Y-this.m_normals[e].X*n))))},t.ClipperOffset.prototype.DoMiter=function(e,i,n){var s=this.m_delta/n;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+(this.m_normals[i].X+this.m_normals[e].X)*s),t.ClipperOffset.Round(this.m_srcPoly[e].Y+(this.m_normals[i].Y+this.m_normals[e].Y)*s)))},t.ClipperOffset.prototype.DoRound=function(e,i){for(var n,s=Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y),r=Math.max(t.Cast_Int32(t.ClipperOffset.Round(this.m_StepsPerRad*Math.abs(s))),1),o=this.m_normals[i].X,a=this.m_normals[i].Y,A=0;A<r;++A)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+o*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+a*this.m_delta))),n=o,o=o*this.m_cos-this.m_sin*a,a=n*this.m_sin+a*this.m_cos;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)))},t.Error=function(e){try{throw new Error(e)}catch(e){alert(e.message)}},t.JS={},t.JS.AreaOfPolygon=function(e,i){return i||(i=1),t.Clipper.Area(e)/(i*i)},t.JS.AreaOfPolygons=function(e,i){i||(i=1);for(var n=0,s=0;s<e.length;s++)n+=t.Clipper.Area(e[s]);return n/(i*i)},t.JS.BoundsOfPath=function(e,i){return t.JS.BoundsOfPaths([e],i)},t.JS.BoundsOfPaths=function(e,i){i||(i=1);var n=t.Clipper.GetBounds(e);return n.left/=i,n.bottom/=i,n.right/=i,n.top/=i,n},t.JS.Clean=function(e,i){if(!(e instanceof Array))return[];var n=e[0]instanceof Array;if(e=t.JS.Clone(e),"number"!=typeof i||null===i)return t.Error("Delta is not a number in Clean()."),e;if(0===e.length||1===e.length&&0===e[0].length||i<0)return e;n||(e=[e]);for(var s,r,o,a,A,l,c,h=e.length,p=[],u=0;u<h;u++)if(0!==(s=(r=e[u]).length))if(s<3)o=r,p.push(o);else{for(o=r,a=i*i,A=r[0],l=1,c=1;c<s;c++)(r[c].X-A.X)*(r[c].X-A.X)+(r[c].Y-A.Y)*(r[c].Y-A.Y)<=a||(o[l]=r[c],A=r[c],l++);A=r[l-1],(r[0].X-A.X)*(r[0].X-A.X)+(r[0].Y-A.Y)*(r[0].Y-A.Y)<=a&&l--,l<s&&o.splice(l,s-l),o.length&&p.push(o)}return!n&&p.length?p=p[0]:n||0!==p.length?n&&0===p.length&&(p=[[]]):p=[],p},t.JS.Clone=function(e){if(!(e instanceof Array))return[];if(0===e.length)return[];if(1===e.length&&0===e[0].length)return[[]];var t=e[0]instanceof Array;t||(e=[e]);var i,n,s,r,o=e.length,a=new Array(o);for(n=0;n<o;n++){for(i=e[n].length,r=new Array(i),s=0;s<i;s++)r[s]={X:e[n][s].X,Y:e[n][s].Y};a[n]=r}return t||(a=a[0]),a},t.JS.Lighten=function(e,i){if(!(e instanceof Array))return[];if("number"!=typeof i||null===i)return t.Error("Tolerance is not a number in Lighten()."),t.JS.Clone(e);if(0===e.length||1===e.length&&0===e[0].length||i<0)return t.JS.Clone(e);var n,s,r,o,a,A,l,c,h,p,u,g,d,f,m,I,b=e[0]instanceof Array;b||(e=[e]);var y=e.length,C=i*i,B=[];for(n=0;n<y;n++)if(0!==(A=(r=e[n]).length)){for(o=0;o<1e6;o++){for(a=[],r[(A=r.length)-1].X!==r[0].X||r[A-1].Y!==r[0].Y?(u=1,r.push({X:r[0].X,Y:r[0].Y}),A=r.length):u=0,p=[],s=0;s<A-2;s++)l=r[s],h=r[s+1],c=r[s+2],m=l.X,I=l.Y,g=c.X-m,d=c.Y-I,0===g&&0===d||((f=((h.X-m)*g+(h.Y-I)*d)/(g*g+d*d))>1?(m=c.X,I=c.Y):f>0&&(m+=g*f,I+=d*f)),(g=h.X-m)*g+(d=h.Y-I)*d<=C&&(p[s+1]=1,s++);for(a.push({X:r[0].X,Y:r[0].Y}),s=1;s<A-1;s++)p[s]||a.push({X:r[s].X,Y:r[s].Y});if(a.push({X:r[A-1].X,Y:r[A-1].Y}),u&&r.pop(),!p.length)break;r=a}a[(A=a.length)-1].X===a[0].X&&a[A-1].Y===a[0].Y&&a.pop(),a.length>2&&B.push(a)}return b||(B=B[0]),void 0===B&&(B=[]),B},t.JS.PerimeterOfPath=function(e,t,i){if(void 0===e)return 0;var n,s,r=Math.sqrt,o=0,a=0,A=0,l=0,c=0,h=e.length;if(h<2)return 0;for(t&&(e[h]=e[0],h++);--h;)a=(n=e[h]).X,A=n.Y,o+=r((a-(l=(s=e[h-1]).X))*(a-l)+(A-(c=s.Y))*(A-c));return t&&e.pop(),o/i},t.JS.PerimeterOfPaths=function(e,i,n){n||(n=1);for(var s=0,r=0;r<e.length;r++)s+=t.JS.PerimeterOfPath(e[r],i,n);return s},t.JS.ScaleDownPath=function(e,t){var i,n;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=n.X/t,n.Y=n.Y/t},t.JS.ScaleDownPaths=function(e,t){var i,n,s;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(s=e[i][n]).X=s.X/t,s.Y=s.Y/t},t.JS.ScaleUpPath=function(e,t){var i,n,s=Math.round;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=s(n.X*t),n.Y=s(n.Y*t)},t.JS.ScaleUpPaths=function(e,t){var i,n,s,r=Math.round;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(s=e[i][n]).X=r(s.X*t),s.Y=r(s.Y*t)},t.ExPolygons=function(){return[]},t.ExPolygon=function(){this.outer=null,this.holes=null},t.JS.AddOuterPolyNodeToExPolygons=function(e,i){var n=new t.ExPolygon;n.outer=e.Contour();var s,r,o,a,A,l,c=e.Childs(),h=c.length;for(n.holes=new Array(h),o=0;o<h;o++)for(s=c[o],n.holes[o]=s.Contour(),a=0,l=(A=s.Childs()).length;a<l;a++)r=A[a],t.JS.AddOuterPolyNodeToExPolygons(r,i);i.push(n)},t.JS.ExPolygonsToPaths=function(e){var i,n,s,r,o=new t.Paths;for(i=0,s=e.length;i<s;i++)for(o.push(e[i].outer),n=0,r=e[i].holes.length;n<r;n++)o.push(e[i].holes[n]);return o},t.JS.PolyTreeToExPolygons=function(e){var i,n,s,r,o=new t.ExPolygons;for(n=0,r=(s=e.Childs()).length;n<r;n++)i=s[n],t.JS.AddOuterPolyNodeToExPolygons(i,o);return o}}();var He=getDefaultExportFromCjs(ze.exports);function alignByMinDist(e,t,i){const n=e.length,s=t.length;if(n<1||s<1)return t.slice();let r=0,o=1/0;for(let a=0;a<s;a++){const A=e[0],l=t[a%s],c=A.x-l.x,h=A.y-l.y,p=e[n-1],u=t[i?Math.min(a+n-1,s-1):(a+n-1)%s],g=p.x-u.x,d=p.y-u.y,f=c*c+h*h+g*g+d*d;f<o&&(o=f,r=a)}return[...t.slice(r),...t.slice(0,r)]}function shapeclip(){const e=1e4;function toclipformat(t){let i=t.map((t=>({X:Math.round(t.x*e),Y:Math.round(t.y*e)})));return ensureOrientation(i)}function fromclipformat(t){return t.map((t=>({x:t.X/e,y:t.Y/e})))}const ensureOrientation=e=>He.Clipper.Orientation(e)?e:e.slice().reverse();function orientation(e){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const s=e[n],r=e[(n+1)%i];t+=s.X*r.Y-r.X*s.Y}return t>0?1:t<0?-1:0}const _inflate=(e,t,i=!1)=>{const n=new He.ClipperOffset;n.MiterLimit=4,n.AddPath(e,He.JoinType.jtMiter,i||2==e.length?He.EndType.etOpenButt:He.EndType.etClosedPolygon);const s=new He.Paths;return n.Execute(s,t),s};function _inflateopen(t,i){const n=new He.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const s=i*e,r=toclipformat(t);n.AddPath(r,He.JoinType.jtMiter,He.EndType.etClosedPolygon);const o=new He.Paths;n.Execute(o,s);let a=fromclipformat(o[0]);return getshape().frompt(a)}return{offset(t,i){const n=new He.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const s=Math.abs(i)*e,r=toclipformat(t.pt);n.AddPath(r,He.JoinType.jtMiter,He.EndType.etOpenButt);const o=new He.Paths;n.Execute(o,s);let a=fromclipformat(o[0]);return getshape().frompt(a)},inflate:function inflate(t,i=2,n=!1,s=0){let r=toclipformat(t.pt),o=_inflate(r,i*e);if(!o||!o.length)return getshape().frompt([]);let a=getshape().frompt(fromclipformat(o[0]));if(n){a.orient!=t.orient&&a.reverse();let A=alignByMinDist(t.pt,a.pt,s);if(a.frompt(A),s>0&&t.pt.length>=3){function estendi1(e,t){let i=e.segment(0).ruotata(-Math.PI/2,200,!0),n=e.segment(-2).ruotata(-Math.PI/2,200),s=t.segment(-2).interseca(n),r=t.segment(0).interseca(i);r&&(t.pt[0]=r),s&&(t.pt[t.pt.length-1]=s)}function estendi2(e,t){let i=e.segment(-1),n=t.segment(0),s=i.interseca(n);s&&(t.pt[0]=s),n=t.segment(-2);let r=i.interseca(n);r&&(t.pt[t.pt.length-1]=r)}1==s?estendi1(t,a):estendi2(t,a)}}return a},inflateopen:_inflateopen,inflateclose(e,t){let i=_inflateopen(e.pt,t);i.orient!=e.orient&&i.reverse();let n=alignByMinDist(e.pt,i.pt,0);return i.frompt(n),i},inflatecornici(e,t=2,i,n){let s,r=e.npt;if(2==r){let i=e.segment(0).offset(t);s=getshape().frompt([i.p1,i.p2])}else if(3==r){let i=e.segment(0).offset(t),n=e.segment(1).offset(t);if(i.isparallela(n))s=getshape().frompt([i.p1,n.p2]);else{let e=i.interseca(n);s=getshape().frompt([i.p1,e,n.p2])}}else{let r=new Linea2(e.pt[0],e.pt[e.npt-1]),o=r.len,a=r.perpendicolare(r.p1,o),A=r.perpendicolare(r.p2,o);a.isparallela(e.segment(0))&&(a=r.perpendicolare(r.puntot(.1),o)),A.isparallela(e.segment(e.npt-2))&&(A=r.perpendicolare(r.puntot(.9),o));let l=Math.floor(e.npt/2),{t:c}=a.proiezionet(e.pt[l]),h=2*(c>0?-1:1),p=a.puntot(h),u=A.puntot(h);s=_inflateopen([...e.pt,u,p],t);let g=s.pt.reduce(((e,t,i)=>(t.x-p.x)**2+(t.y-p.y)**2<(s.pt[e].x-p.x)**2+(s.pt[e].y-p.y)**2?i:e),0);s.pt=s.pt.slice(g+2).concat(s.pt.slice(0,g)),s.orient!=e.orient&&s.reverse(),i&&(e.truncatebefore(i),s.truncatebefore(i)),n&&(s.truncateafter(n),e.truncateafter(n))}return s},intersecasplitter(e,t){const i=new He.Clipper,n=[toclipformat(t.pt)],s=[toclipformat(e.pt)];i.AddPaths(n,He.PolyType.ptSubject,!0),i.AddPaths(s,He.PolyType.ptClip,!0);const r=new He.Paths;let o;if(i.Execute(He.ClipType.ctIntersection,r,He.PolyFillType.pftNonZero,He.PolyFillType.pftNonZero)&&r.length>0){const e=r[0];if(1===orientation(e)){o=getshape().frompt(fromclipformat(e)),o.orient!=t.orient&&o.reverse();for(let e=0;e<t.pt.length;e++){let i=t.pt[e],n=o.pt.findIndex((e=>Math.abs(e.x-i.x)<.01&&Math.abs(e.y-i.y)<.01));if(n>0){n-=e,0!=n&&o.selezionaprimo(n);break}}}}return o},offsetpts(t,i=.01){const n=e*i;let s=_inflate(toclipformat(t),n);if(s&&s.length)return fromclipformat(s[0])},areesplitter(e,t,i=!0){if(!Array.isArray(e)||e.length<3)return;if(!t||0==t.length)return[e];const n=new He.Paths,s=new He.Paths;let r=i?_inflate(toclipformat(e),-100):[toclipformat(e)],o=i?t.flatMap((e=>_inflate(toclipformat(e),100))):t.map((e=>toclipformat(e)));for(let e of r)n.push(e);for(let e of o)s.push(e);const a=new He.Clipper;a.AddPaths(n,He.PolyType.ptSubject,!0),a.AddPaths(s,He.PolyType.ptClip,!0);const A=new He.Paths;if(!a.Execute(He.ClipType.ctDifference,A,He.PolyFillType.pftNonZero,He.PolyFillType.pftNonZero))return;let l=[];for(let e of A)if(i){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}else if(e.length>4&&1==orientation(e)){const t=_inflate(e,-100);if(t.length>0)for(let e of t){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}}else 1==orientation(e)&&l.push(fromclipformat(e));return l},unisci(e,t,i){const n=new He.Paths,s=new He.Paths;for(let t of e){let e=[toclipformat(t.pt)];for(let t of e)n.push(t)}if(t&&t.length)for(let e of t){let t=toclipformat(e.pt);s.push(t)}if(i&&i.length)for(let e of i){let t=toclipformat(e.pt),i=_inflate(t,1,!0);for(let e of i)s.push(e)}const r=new He.Clipper;r.AddPaths(n,He.PolyType.ptSubject,!0),r.AddPaths(s,He.PolyType.ptClip,!0);const o=new He.Paths;if(r.Execute(He.ClipType.ctDifference,o,He.PolyFillType.pftNonZero,He.PolyFillType.pftNonZero)){let e=[],t=[];for(let i of o)if(1==orientation(i)){let t=[i];for(let i of t)e.push({shape:getshape().frompt(fromclipformat(i)),holes:[]})}else t.push(getshape().frompt(fromclipformat(i)));for(let i of t)for(let t of e)if(t.shape.pointinshape(i.pt[0])){t.holes.push(i);break}return e}return[]}}}class Vscene{constructor(e,t,i={}){this.x=e,this.y=t,this.info=i,this.clear()}addrow(e){e||(e={}),e.id=function newid(e){let t=0;for(let i of e)+i.id>t&&(t=+i.id);return t+1}(this.rows);let t=new Vobject(e);return this.rows.push(t),t}clear(){this.curlayer=0,this.rows=[],this.clines=[]}fromjson(e){let t,i;e||(e={info:{}}),this.clear(),this.x=e.x||4e3,this.y=e.y||3e3,this.info=e.info||{},this.curlayer=e.curlayer,e.clines&&(t=e.clines.map((e=>new Linea2(e.p1,e.p2))));let n=this.x,s=this.y;i=[new Linea2(0,0,100,0),new Linea2(n,0,n,100),new Linea2(n,s,n-100,s),new Linea2(0,s,0,s-100)],this.clines=[...i,...t],e.rows&&(this.rows=e.rows.map((e=>new Vobject(e))))}tojson(){let{x:e,y:t,info:i,curlayer:n,xrows:s,xclines:r}=this,o=s.map((e=>e.tojson())),a=r.map((e=>({p1:e.p1,p2:e.p2})));return a=a.slice(4),{x:e,y:t,curlayer:n,rows:o,clines:a}}}class Vobject{constructor(e){e||(e={}),this.fromjson(e)}get lines(){if(this._lines&&this._lines.length)return this._lines;{let{x:e,y:t}=this;return e||(e=100),t||(t=100),[new Linea2(0,0,0,t),new Linea2(e,0,e,t)]}}fromjson(e){let t;this.id=e.id??1,this.layer=e.layer||0,this.hidden=!!e.hidden,this.x=e.x||100,this.y=e.y||100,this.pc=e.pc||{x:0,y:0},e.shape?this.shape=getshape().frompt(e.shape):this.shape=void 0,e.lines&&e.lines.length&&(t=e.lines.map((e=>new Linea2(e.p1,e.p2)))),this._lines=t,this.draw=new Vis2d(`d:${e.id}`),e.draw&&this.draw.fromjson(e.draw),this.info=e.info||{},this.pos=e.pos||{x:0,y:0,rot:0}}tojson(){let{id:e,layer:t,x:i,y:n,pc:s,shape:r,hidden:o,_lines:a,info:A,pos:l}=this;return a=a&&a.length?a.map((e=>({p1:e.p1,p2:e.p2}))):void 0,r=r?r.pt:void 0,{id:e,layer:t,x:i,y:n,pc:s,shape:r,lines:a,hidden:o,info:A,pos:l,draw:this.draw.tojson()}}}class Vis2d{constructor(e,t,i,n){this.name=e,this.visible=t,this.des=i,this.inverse=n,this.clear()}clear(){return this.vec=[],this.gr={},this}tojson(){let e={};for(let t in this.gr)e[t]=this.gr[t].tojson();let{name:t,visible:i,des:n,vec:s,inverse:r}=this;return{name:t,visible:i,des:n,inverse:r,vec:[...s],groups:e}}fromjson(e){if(!(e&&e.name&&e.vec))throw new Error("wrong data JSON");this.clear(),this.name=e.name,this.visible=e.visilbe,this.des=e.des,this.inverse=e.inverse,this.vec=[...e.vec];for(let t in e.groups)this.gr[t]=new Vis2d(t).fromjson(e.groups[t])}creategr(e="grp"){return this.gr[e]||(this.gr[e]=new Vis2d(e)),this.gr[e]}push(e=0,t=0,i={}){"number"==typeof i&&(i={rot:i}),i||(i={}),this.vec.push({type:"push",x:e,y:t,op:i})}pop(){this.vec.push({type:"pop"})}randomcolor(e="100%"){return`hsl(${Math.floor(360*Math.random())}, 50%, 40%,${e})`}addgr(e){let t=e;e?.name&&(t=e.name),this.gr[t]?this.vec.push({type:"group",name:t}):this.vec.push({type:"err",err:`addgroup: ${t} => missing`})}addtext(e,t,i,n,s="black",r="white"){this.vec.push({type:"text",x:e,y:t,text:i,color:s,fill:r,scalafont:n})}addquota(e,t,i,n,s=0,r="",o=1,a=.25){this.vec.push({type:"quota",x1:e,y1:t,x2:i,y2:n,d:s,text:r,spessore:a,color:"black",scalafont:o})}addqpunto(e,t,i,n,s=0,r="",o=1,a=.25){this.vec.push({type:"qpunto",x1:e,y1:t,x2:i,y2:n,d:s,text:r,spessore:a,color:"black",scalafont:o})}addpoint(e,t=-1,i="red",n=8){return e&&this.vec.push({type:"point",p:e,id:t,color:i,spessore:1*n}),this}addline(e,t=-1,i=void 0,n=1){return e&&this.vec.push({type:"line",l:e,id:t,color:i,spessore:1*n}),this}addspace(e){return e&&this.vec.push({type:"space",l:e}),this}addrect(e,t=void 0,i=1,n=void 0){return e&&this.vec.push({type:"rect",l:e,color:t,spessore:1*i,fill:n}),this}addimg(e,t){return e&&this.vec.push({type:"img",l:e,img:t}),this}addrecta(e,t=void 0,i=void 0){return e&&this.vec.push({type:"recta",l:e,color:t,spessore:0,fill:i}),this}addshape(e,t=void 0,i=1,n=void 0){return e&&this.vec.push({type:"shape",s:e,color:t||this.randomcolor(),spessore:1*i,fill:n}),this}addshapelin(e,t=void 0,i=1){return e&&this.vec.push({type:"shapelin",s:e,color:t||this.randomcolor(),spessore:1*i}),this}addarea(e,t=void 0){return e&&this.vec.push({type:"area",s:e,color:t||this.randomcolor()}),this}addoffset(e,t){return this.vec.push({type:"offset",x:e||0,y:t||0}),this}}function checkoggetto(e,t,i,n){if("h"==t&&(t="o"),e||(e=[]),"number"==typeof i&&!["a","as"].includes(t))return{cod:"__",macro:"",sps:i};let s=e.find((e=>e.tipo.includes(t)&&e.cod==i&&(e.isshape||n||"a"!=t)));return s||(s=e.find((e=>e.tipo.includes(t)&&(e.isshape||n||"a"!=t)))),s||(s={cod:"__",macro:"",sps:0}),"a"!=t&&"as"!=t||"__"==s.cod||s.color||(s.color=`hsl(${function stringToHue(e){let t=0;for(let i=0;i<e.length;i++)t=31*t+e.charCodeAt(i)>>>0;return Math.floor(.6180339887*t%1*360)}(s.cod)}, 95%, 97%`),s}function getbordi(e,t){let i,n=!1;if(Array.isArray(t)){t.length=4;let s=t[0]||"";i=t.map((t=>checkoggetto(e,"b",t||s))),n=i.every((e=>e.sps===i[0].sps))}else{let s=checkoggetto(e,"b",t);i=[s,s,s,s],n=!0}return{bordi:i,uguali:n,senza:!(i[0].sps||i[1].sps||i[2].sps||i[3].sps),bl:i[0].sps,bt:i[1].sps,br:i[2].sps,bb:i[3].sps}}function elaborapercorso(e,t,i,n,s=0){let r,o,a,A,l,c,h,p,u,g,d,f,m,I,b,y,C=[],B=[];function eseguipezzo(e,t,i,n){let r=e.infoquad(t);if(r&&r.distanza){let o=getshape().frompt(n||[e.p1,e.p2,t.p2,t.p1]),a=o.clone();(r.sx||r.sy)&&a.move(-r.sx||0,-r.sy||0),r.angle&&a.rotate(-r.angle||0);let A={id:++s,type:`b${i}`,info:r};n&&(A.shape=a.pt),B.push({type:`b${i}`,pt:o.pt}),C.push(A)}}s=s||0;let E=e.pt.length,x=E-1;n||(n=[]);let{bordi:w,uguali:v,senza:P}=getbordi(n,t);if(v)if(P||!w[0].sps)r=e.clone();else{let t=w[0].sps;r=shapeclip().inflate(e,-t,!0)}else{let t,i=[],n=[];for(let n=0;n<E;n++){t=0==n?w[0].sps:n==x-1?w[2].sps:n==x?w[3].sps:w[1].sps,"number"!=typeof t&&(t=0);let s=e.segment(n).offset(-t);i.push(s)}for(let e=0;e<E;e++){let t=i[e].interseca(i[(e-1+E)%E]);n.push(t)}r=getshape().frompt(n)}if(!P){a=r.segment(x).interseca(e.segment(0)),A=r.segment(1).interseca(e.segment(0)),l=e.segment(x-1).interseca(r.segment(x-2)),c=e.segment(x-1).interseca(r.segment(x)),h=e.segment(x).interseca(r.segment(0)),p=e.segment(1).interseca(r.segment(0)),u=e.segment(x-2).interseca(r.segment(x-1)),g=e.segment(x).interseca(r.segment(x-1)),b=1,y=x-2,m=r.segment(0),I=r.segment(x-1);for(let t=1;t<x-1;t++){let i=e.segment(t),n=i.interseca(m);n&&i.onsegment(n)&&(b=t,p=n),n=i.interseca(I),n&&i.onsegment(n)&&(y=t,u=n)}b-=1,y=x-2-y;let n=e.pt[0],s=r.pt[0],C=r.pt[x],B=e.pt[x];switch(i[0]){case"v":eseguipezzo(new Linea2(g,h),r.segment(x),3),s=h,C=g;break;case"o":eseguipezzo(e.segment(x),new Linea2(c,a),3),n=a,B=c;break;default:eseguipezzo(e.segment(x),r.segment(x),3)}switch(d=e.pt.slice(1,x),f=r.pt.slice(1,x),i[1]){case"v":eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(s,p),0),eseguipezzo(new Linea2(e.pt[x-1],B),new Linea2(u,C),2),b&&(d=d.slice(b)),y&&(d=d.slice(0,-y)),d[0]=p,d[d.length-1]=u;break;case"o":eseguipezzo(new Linea2(n,A),new Linea2(s,r.pt[1]),0),eseguipezzo(new Linea2(l,B),new Linea2(r.pt[x-1],C),2),f[0]=A,f[f.length-1]=l;break;default:eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(s,r.pt[1]),0),eseguipezzo(new Linea2(e.pt[x-1],B),new Linea2(r.pt[x-1],C),2)}if(o=getshape().frompt(f),d.length<8&&d.length==f.length)for(let e=0;e<d.length-1;e++)eseguipezzo(new Linea2(d[e],d[e+1]),new Linea2(f[e],f[e+1]),1);else{let e=getshape().frompt([...d,...f.reverse()]),i=new Linea2(d[0],d[d.length-1]),n=i.offset(-t[1]);eseguipezzo(i,n,1,e.pt)}}return{countid:s,shape2:r,shapetop:o,bordi:w,dati:C,draws:B}}function creaprofiloesterno(e,t){let i,{x:n,y:s,tipo:r,bordo:o,taglio:a,h1:A,h2:l,l1:c,l2:h,forma:p}=e;n=n<50?50:n,s=s<50?50:s,c=c||0,h=h||0,A=A||0,l=l||0;let u=[0,0];switch(r){case"i":case"d":u.push(c>0&&c<n?c:0,A>0&&A<s?s-A:s),u.push(h>0&&h<n-c?n-h:n,l>0&&l<s&&l!=A?s-l:s);break;case"a":if(p){let e=getshape().fromstr(p);e.alignline({x:c,y:s-A},{x:n-h,y:s-l}),u.push(...e.vec)}else if((A||l)&&A>=0&&A<Math.min(s,n/2)&&l>=0&&l<Math.min(s,n/2)){let e=getshape().fromstr(`a30;${c||0};${s-A};${n/2};${s};${n-h};${s-l}`);u.push(...e.vec)}else u.push(0,s,n,s);break;case"s":c>0&&A>0?u.push(0,s-A,c,s):u.push(0,s),h&&h<n-c&&l>0&&l<s?u.push(n-h,s,n,s-l):u.push(n,s);break;default:u.push(0,s,n,s)}u.push(n,0),e.countid=0,i=getshape().fromvec(u);let{countid:g,shape2:d,shapetop:f,bordi:m,dati:I,draws:b}=elaborapercorso(i,o,a,t,e.countid);return e.countid=g,{shape:i,internalshape:d,shape2:d,shapetop:f,bordi:m,dati:I,draws:b}}const je={x:"normale",s:"smussato",i:"inclinato",a:"arco/sagomato",d:"diagonali"},We={dd:"diagonale",vv:"verticale",oo:"orizzontale",vo:"verticale+orizzontale",vd:"verticale+diagonale",ov:"orizzontale+verticale",od:"orizzontale+diagonale"},Je={d:"dist. positiva","d-":"dist. negativa",p:"perc. positiva","p-":"perc negativa"},Ke={l:"sinistra",c:"centro",r:"destra"};function findareacod(e,t,i){let n=1/0,s="";for(let r of e){let e=(r.x-t)**2+(r.y-i)**2;e<n&&(n=e,s=r.k)}return s}function generatesegments(e,t,i=!1,n=!1){let s=[];if(e?.length>=2){if(n){let t=[];for(let i of e)t.push({a:i.a,b:i.a}),i.a!=i.b&&t.push({a:i.b,b:i.b});e=t}if(e=e.sort(((e,t)=>e.a-t.a)),t?.length){let n=0;for(let r=1;r<e.length;r++){const o=1e-6;if(t.find((t=>t>e[r-1].b+o&&t<e[r].a-o))){if(r-1>n){let t;t=i?{a:e[n].b,b:e[r-1].a}:{a:e[n].a,b:e[r-1].b},s.push(t)}n=r}}n<e.length-1&&(i?s.push({a:e[n].b,b:e[e.length-1].a}):s.push({a:e[n].a,b:e[e.length-1].b}))}else s.push({a:e[0].b,b:e[e.length-1].a})}return s}function makedivisions(e,t,i){delete e.arre;let n=[],s=[],r=[],o=[],{x:a,y:A,oriz:l,vert:c,tipo:h,minvano:p,minvanox:u,minvanoy:g}=e,{bb:d,bt:f,bl:m,br:I}=getbordi(i,e.bordo);u=u||p||50,g=g||p||50;let{dati:b,punti:y}=ordinabase(i,"o",l,A,g,d,f,h),{dati:C,punti:B}=ordinabase(i,"v",c,a,u,m,I),E=t.clone();function adddatilin(e,t,a,A,l,c){if("l"==e)s.push([a.p1,a.p2]),o.push([a.p1.x,a.p1.y,a.p2.x,a.p2.y]);else{let h=[a.p1,a.p2,A.p2,A.p1];s.push(h);let p=getshape().frompt(h);if(E?.pt&&(p.orient!=E.orient&&p.reverse(),p=shapeclip().intersecasplitter(E,p)),p){p.pt.length>=4&&(a.p1=p.pt[0],a.p2=p.pt[1],A.p1=p.pt[p.pt.length-1],A.p2=p.pt[p.pt.length-2]),o.push([a.p1.x+("v"==e?l:0),a.p1.y+("v"!=e?l:0),a.p2.x+("v"==e?l:0),a.p2.y+("v"!=e?l:0)]);let s=a.infoquad(A);if(s&&s.distanza){let o=p.clone(),a=checkoggetto(i,e,t);(s.sx||s.sy)&&o.move(-s.sx||0,-s.sy||0),s.angle&&o.rotate(-s.angle||0);let A={id:c,type:e,cod:t,c2:a,shape:o.pt,info:s};r.push(A),A?.shape&&n.push({type:e,sx:A.info.sx,sy:A.info.sy,rot:A.info.angle,pt:A.shape})}}}}function isinseg(e,t){return!!e.find((e=>e.a<=t&&e.b>=t))}C.forEach(((e,t)=>{e.segs=generatesegments(y,e.cuts,!0),e.segs.forEach(((t,i)=>{let n=new Linea2({x:e.x,y:t.a},{x:e.x,y:t.b}),s=new Linea2({x:e.x+e.sp,y:t.a},{x:e.x+e.sp,y:t.b});adddatilin(e.sp?"v":"l",e.cod,n,s,e.sp/2,e.id)}))}));for(let e of b){let t=[...e.cuts],i=[...B];for(let n of C)i.push({a:n.x,b:n.x+n.sp}),isinseg(n.segs,e.x+e.sp/2)&&t.push(n.x+n.sp/2);e.segs=generatesegments(i,t,!0,!0),e.segs=e.segs.filter((e=>Math.abs(e.a-e.b)>40));for(let t of e.segs){let i=new Linea2({x:t.b,y:e.x+e.sp},{x:t.a,y:e.x+e.sp}),n=new Linea2({x:t.b,y:e.x},{x:t.a,y:e.x});adddatilin(e.sp?"o":"l",e.cod,n,i,e.sp,e.id)}}let x=shapeclip().areesplitter(t.pt,s),w=function getareacodes(e){let t,i,n,s,r=[];for(let o=0;o<=e.vert.length;o++){if(0==o)t="v0",i=0;else{let n=e.vert[o-1];t=`${n.dir}${n.id}`,i=n._v}for(let o=0;o<=e.oriz.length;o++){if(0==o)n="o0",s=0;else{let t=e.oriz[o-1];n=`${t.dir}${t.id}`,s=t._v}r.push({k:t+n,x:i,y:s})}}return r}(e);for(let t of x){let s=getshape().frompt(t),{p1:o,width:a,height:A,isrect:l}=s.dims(),c=findareacod(w,o.x,o.y),h=e.aree[c]||e.area||"",p=checkoggetto(i,"a",h,l),u=s.pt.findIndex((e=>Math.abs(e.x-o.x)<.001&&Math.abs(e.y-o.y)<.001));u>0&&s.selezionaprimo(u),s.pt.length&&(s.move(-o.x,-o.y),1==s.orient&&s.reverse()),r.push({id:c,cod:h,c2:p,type:"a",shape:l?null:s.pt,info:{isrect:l?1:0,sx:o.x,sy:o.y,rot:0,width:a,height:A}}),n.push({type:l?"a":"as",sx:o.x,sy:o.y,dx:a,dy:A,id:c,cod:h,rot:0,pt:s.pt,color:p.color})}return{ff:e,h1:b,ph:y,v1:C,pv:B,draws:n,lines:o,dati:r}}function ordinabase(e,t,i,n,s,r,o,a){let A=[];if(i){for(let s of i){let i=checkoggetto(e,t,s.cod).sps||0,a=0;switch(s.tipo){case"d-":a=n-s.v;break;case"p":a=n*s.v/100;break;case"p-":a=n*(100-s.v)/100;break;default:a=s.v}if(i&&"c"==s.align?a-=i/2:i&&"r"==s.align&&(a-=i),a=Math.round(10*a)/10,s._x0=a,s._x1=a+i,s._v=a+i/2,s._valid=a>0&&a<n,a>r&&a<n-o){let e=[];s.cuts&&s.cuts.length&&s.cuts.forEach((t=>{e.push(t<0?n+t:t)})),A.push({id:s.id,x:a,sp:i,cuts:e,cod:s.cod})}}A.sort(((e,t)=>e.x-t.x))}let l=[],c=r;"a"==a&&(n*=1.3);for(let e=0;e<A.length;e++){let t=A[e];t.x>=c+s&&t.x+t.sp<=n-o-s&&(t.min=c+s,t.max=n-o-s,l.length>0&&(l[l.length-1].max=t.x-s),l.push(t),c=t.x+t.sp)}let h=[];h.push({a:r,b:r});for(let e of l)h.push({a:e.x,b:e.x+e.sp});return h.push({a:n-o,b:n-o}),{dati:l,punti:h}}function check(e){let{x:t,y:i,area:n,bordo:s,gvert:r,goriz:o,priority:a,minvano:A,taglio:l,tipo:c,h1:h,h2:p,l1:u,l2:g,d1:d,x1:f,y1:m,d2:I,x2:b,y2:y,vert:C,oriz:B,aree:E,forma:x,countid:w}=e;return t=t||1e3,t<200&&(t=200),i=i||1e3,i<200&&(i=200),h=h||m||0,p=p||y||0,u=u||d||f||0,g=g||I||b||0,h<0&&h>i-100&&(h=0),p<0&&p>i-100&&(p=0),(g<0||g>t-u)&&(g=0),(u<0||u>t-g)&&(u=0),A=A||50,x&&(c="a"),n=n||"__",s=s||"__",a=a||"v",l=We[l]?l:"dd",c=je[c]?c:"x",C=C||[],B=B||[],E=E||{},o=o||void 0,r=r||void 0,w=w||1,{x:t,y:i,area:n,bordo:s,gvert:r,goriz:o,priority:a,minvano:A,taglio:l,tipo:c,h1:h,h2:p,l1:u,l2:g,vert:C,oriz:B,aree:E,countid:w}}function addtaglio(e,t,i,n,s,r="c",o=[],a){return a||(console.log("manca id a addtaglio"),a=0),{dir:t,id:a,tipo:Je[i]?i:"d",align:Ke[r]?r:"c",v:n,cod:s,cuts:o||[]}}function addoriz(e,t,i,n,s,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.goriz||o||"__"),Array.isArray(s)&&(r=s,s="c"),e.oriz||(e.oriz=[]);let a=addtaglio(0,"o",t,i,n,s,r,(e.oriz.length?Math.max(...e.oriz.map((e=>e.id))):0)+1);return e.oriz.push(a),e}var Ve=Object.freeze({__proto__:null,addhoriz:function addhoriz(e,t,i,n,s,r){return addoriz(e,t,i,n,s,r)},addoriz:addoriz,addvert:function addvert(e,t,i,n,s,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.gvert||o||"__"),Array.isArray(s)&&(r=s,s="c"),e.vert||(e.vert=[]);let a=addtaglio(0,"v",t,i,n,s,r,(e.vert.length?Math.max(...e.vert.map((e=>e.id))):0)+1);return e.vert.push(a),e},calcoladivisioni:function calcoladivisioni(e,t,i,n){return makedivisions(e,i,n)},check:check,checkoggetto:checkoggetto,creaprofiloesterno:creaprofiloesterno,create:function create(e,t,i,n){n||(n={});let{minvano:s,priority:r,taglio:o,tipo:a,h1:A,h2:l,d1:c,d2:h,l1:p,l2:u,x1:g,x2:d,y1:f,y2:m,gvert:I,goriz:b,forma:y,area:C}=n,B=check({x:e,y:t,area:C,bordo:i,gvert:I,goriz:b,priority:r,minvano:s,taglio:o,tipo:a,h1:A,h2:l,l1:p,l2:u,d1:c,x1:g,y1:f,d2:h,x2:d,y2:m});return B.forma=y,B},elaborapercorso:elaborapercorso,getbordi:getbordi,makedivisions:makedivisions,makeshape:function makeshape(e,t){return creaprofiloesterno(e,t)},priorita:{v:"verticale",h:"orizzontale"},tagli:We,tipi:je,tipilocks:[{cod:"diml",des:"Larghezza"},{cod:"dima",des:"Altezza"},{cod:"etipo",des:"Modifica Tipo"},{cod:"etaglio",des:"Modifica Taglio"},{cod:"ebordi",des:"Modifica Bordi"},{cod:"esag",des:"Shape"},{cod:"vcrea",des:"Crea Div. Verticale"},{cod:"ocrea",des:"Crea Div. Orizzontale"},{cod:"vmov",des:"Sposta Div. Verticale"},{cod:"omov",des:"Sposta Div. Orizzontale"},{cod:"vedit",des:"Modifica Div. Verticale"},{cod:"oedit",des:"Modifica Div. Orizzontale"},{cod:"emods",des:"Modificatori Orizzontali/Verticali"},{cod:"ecuts",des:"Modifica/Aggiungi Cuts"},{cod:"earee",des:"Modifica Aree"}],tipoalign:Ke,tipocut:Je});async function exportSceneImage(e,t,i){i||(i={});let n,{name:s="image",png:r,width:o,height:a,zoom:A,zoomatutto:l,scene:c,imposta:h,frustumSize:p=10}=i;h&&(n=h.fakeshadow,h.fakeshadow=!1);const u=e.domElement.width,g=e.domElement.height,d=e.getPixelRatio(),f=t.isOrthographicCamera,m=f?{left:t.left,right:t.right,top:t.top,bottom:t.bottom,zoom:t.zoom}:{aspect:t.aspect};if(o&&a){if(e.setSize(o,a,!1),f){const e=o/a;t.left=-p*e/2,t.right=p*e/2,t.top=p/2,t.bottom=-p/2,t.updateProjectionMatrix()}else t.aspect=o/a,t.updateProjectionMatrix();if(A&&l){l(c.getObjectByName("boxes"),t,void 0,o,a)}}await new Promise((e=>requestAnimationFrame((()=>{requestAnimationFrame(e)}))));const I=await new Promise((t=>{e.domElement.toBlob(t,r?"image/png":"image/webp")}));return o&&a&&(e.setSize(u,g,!1),f?(t.left=m.left,t.right=m.right,t.top=m.top,t.bottom=m.bottom,t.zoom=m.zoom,t.updateProjectionMatrix()):(t.aspect=m.aspect,t.updateProjectionMatrix()),e.setPixelRatio(d)),h&&(h.fakeshadow=n),new File([I],`${s}.${r?"png":"webp"}`,{type:r?"image/png":"image/webp"})}function handleMovimenti(e,t={}){let{container:i,width:n,height:s,camera:r,scene:o,raycaster:a}=t;if(!i)return;const A=i.getBoundingClientRect(),l={x:(e.clientX-A.left)/n*2-1,y:-(e.clientY-A.top)/s*2+1};a.setFromCamera(l,r),a.layers.enable(0),a.layers.enable(1);const c=[];o.traverse((e=>{"Mesh"===e.type&&e.visible&&e.geometry&&e.material&&!e.material.transparent&&c.push(e)}));let h=a.intersectObjects(c,!1);if(h?.length){let e=h[0].object;for(;e&&(!e.userData?.mov||e.userData.mov.hidesel);){if(!e.parent){e=null;break}e=e.parent}if(e){let{mov:t}=e.userData;t.inmov?(t.inmov=!1,e.position.set(0,0,0),e.scale.set(1,1,1),e.rotation.set(0,0,0)):(t.dtstart=performance.now(),t.inmov=!0),e.traverse((i=>{if(i!==e&&i.userData&&i.userData.mov&&i.userData.mov.hidesel){let e=i.userData.mov;t.inmov?e._f.reset(i):(e.dtstart=t.dtstart,e.inmov=!0)}}))}}}function resethover(e,t=void 0){for(let i of e)i!==t&&i.userData?._mat&&(i.material=i.userData._mat,delete i.userData._mat)}function checkhoverables(e,t=!1,i={}){let{container:n,width:s,height:r,camera:o,scene:a,raycaster:A,emit:l,hoverables:c}=i;if(!n)return;if(!c||!c.length)return;const h=n.getBoundingClientRect(),p={x:(e.clientX-h.left)/s*2-1,y:-(e.clientY-h.top)/r*2+1};A.setFromCamera(p,o);const u=A.intersectObjects(c,!0);if(u&&u.length){let e=u[0].object;return resethover(c,e),e.userData.matover&&e.userData.matover!=e.material&&(e.userData._mat=e.material,e.material=e.userData.matover),e.userData.tooltip}resethover(c)}function handlePick(e,t={}){let{container:i,width:n,height:s,camera:r,scene:o,raycaster:a,emit:A,hoverables:l}=t;if(!i)return;const c=i.getBoundingClientRect(),h={x:(e.clientX-c.left)/n*2-1,y:-(e.clientY-c.top)/s*2+1},p=[],u=[];if(a.setFromCamera(h,r),l&&l.length){resethover(l);const t=a.intersectObjects(l,!0);if(t&&t.length){let i=t[0].object;return void A("variant",{x:e.clientX,y:e.clientY,node:i})}}if(r.layers.set(0),o.traverse((e=>{e.userData?.marker&&e.visible?u.push(e):"Mesh"===e.type&&e.material&&e.geometry&&e.visible&&(e.userData._lay=e.layers.mask,e.layers.set(0),p.push(e))})),u.length){const t=a.intersectObjects(u,!0);if(t&&t.length){let i=t[0].object;for(let t=0;t<10;t++){if(i.userData?.marker)return void A("marker",{node:i,x:e.clientX,y:e.clientY});if(i=i.parent,!i)break}}}const g=a.intersectObjects(p,!0);for(let e of p)e.layers.mask=e.userData._lay,delete e.userData._lay;if(g.length>0){let e=g[0].object;for(;e&&!e.userData.INFO;)e=e.parent;e?A("selected",{id:e.name}):A("deselect")}else A("deselect")}const Ze={idle:{id:"idle"},movimenti:{id:"movimenti",onMouseDown(e,t){e.stopPropagation(),e.preventDefault(),handleMovimenti(e,t)}},select:{id:"select",onMouseDown(e,t){handlePick(e,t)}},move:{id:"move",onMouseDown(e,t){e.stopPropagation(),e.preventDefault()},onMouseMove(e,t){}}};function picker(e){function creaAsse(t,i=1){let n;switch(t){case"x":n=16711680;break;case"y":n=65280;break;case"z":n=255;break;default:throw new Error("asse non valido")}const s=new e.Group;s.name=`picker_axis_${t}`,s.userData.type="move",s.userData.axis=t;const r=new e.CylinderGeometry(.025*i,.025*i,.7*i,8),o=new e.MeshBasicMaterial({color:n,depthTest:!1,depthWrite:!1}),a=new e.Mesh(r,o);a.position.y=.35*i,a.userData.parentType="move",s.add(a);const A=new e.ConeGeometry(.06*i,.18*i,12),l=new e.MeshBasicMaterial({color:n,depthTest:!1,depthWrite:!1}),c=new e.Mesh(A,l);return c.position.y=.7*i+.09*i,c.userData.parentType="move",s.add(c),"x"===t&&(s.rotation.z=-Math.PI/2),"z"===t&&(s.rotation.x=Math.PI/2),s.visible=!1,s}function creaCorner(){const t=new e.BoxGeometry(.1,.1,.1),i=new e.MeshBasicMaterial({color:"black",depthTest:!1,depthWrite:!1}),n=new e.Mesh(t,i);return n.name="picker_corner",n.userData.type="corner",n.visible=!1,n}function creaRotateHandler(t="y",i=1){const n={x:16711680,y:65280,z:255}[t]||16776960,s=new e.TorusGeometry(i,.02*i,12,64,2*Math.PI),r=new e.MeshBasicMaterial({color:n,transparent:!0,opacity:.7,depthTest:!1,depthWrite:!1}),o=new e.Mesh(s,r);return o.name=`picker_rotate_${t}`,o.userData.type="rotate",o.userData.axis=t,"x"===t&&(o.rotation.z=Math.PI/2),"z"===t&&(o.rotation.x=Math.PI/2),o.visible=!1,o}function creaDragger(t,i=.22,n=.11){const s={x:16711935,y:65535,z:16776960}[t]||16777215,r=new e.CylinderGeometry(0,n,i,3),o=new e.MeshBasicMaterial({color:s,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1}),a=new e.Mesh(r,o);return a.name=`picker_dragger_${t}`,a.userData.type="resize",a.userData.axis=t,"x"===t?a.rotation.z=-Math.PI/2:"z"===t&&(a.rotation.x=Math.PI/2),a.visible=!1,a}return{Picker:class Picker{constructor(t){this.grp=new e.Group,this.grp.name="_picker",t.add(this.grp),this.grpAssi=new e.Group,this.grpAssi.name="_picker_assi",this.asseX=creaAsse("x"),this.asseY=creaAsse("y"),this.asseZ=creaAsse("z"),this.grpAssi.add(this.asseX,this.asseY,this.asseZ),this.grp.add(this.grpAssi),this.grpRotate=new e.Group,this.grpRotate.name="_picker_rotate",this.rotateHandler=creaRotateHandler("z"),this.grpRotate.add(this.rotateHandler),this.grp.add(this.grpRotate),this.corners=[creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner()],this.corners.forEach((e=>this.grp.add(e))),this.draggerZ=creaDragger("z"),this.draggerY=creaDragger("y"),this.draggerX=creaDragger("x"),this.grp.add(this.draggerZ,this.draggerY,this.draggerX),function forceAlwaysOnTop(e){e.traverse((e=>{e.isMesh&&(e.renderOrder=999,e.material&&(e.material.depthTest=!1,e.material.depthWrite=!1,e.material.transparent=!0))}))}(this.grp),this.clear()}clear(){this.grp.position.set(0,0,0),this.grp.rotation.set(0,0,0),this.grp.scale.set(1,1,1),this.grpAssi.position.set(0,0,0),this.grpAssi.rotation.set(0,0,0),this.grpRotate.position.set(0,0,0),this.grpRotate.rotation.set(0,0,0),this.asseX.visible=!1,this.asseY.visible=!1,this.asseZ.visible=!1,this.rotateHandler.visible=!1,this.corners.forEach((e=>{e.visible=!1,e.position.set(0,0,0)})),this.draggerZ.visible=!1,this.draggerY.visible=!1,this.draggerX.visible=!1}attiva(t){if(this.clear(),!t)return;t.updateMatrixWorld(!0);const i=(new e.Box3).setFromObject(t),n=i.min,s=i.max;this.grp.position.copy(n);const r=new e.Quaternion;t.getWorldQuaternion(r),this.grp.setRotationFromQuaternion(r);const o=t.userData&&t.userData.pick?String(t.userData.pick):"",a=o.trim()?function parsePickerShort(e){const t={};return e.split(";").forEach((e=>{let i=e.trim();if(!i)return;let[n,s]=i.split(":");switch(n=n.trim().toLowerCase(),s=s?s.trim().toLowerCase():"",n){case"a":t.axis=s?s.split(""):["x","y","z"];break;case"d":t.drag=s?s.split(""):["x","y","z"];break;case"r":t.rotate={enabled:!0,step:s&&!isNaN(Number(s))?Number(s):null};break;case"c":t.corners=!s||s.split("")}})),t}(o):{axis:["x","y","z"]},A=a.axis||[];if(A.includes("x")&&(this.asseX.visible=!0),A.includes("y")&&(this.asseY.visible=!0),A.includes("z")&&(this.asseZ.visible=!0),a.rotate&&a.rotate.enabled&&(this.rotateHandler.visible=!0),a.corners){let t={r:16711680,g:65280,b:255}[a?.corners[0]??"y"]??255;this.corners.forEach(((i,r)=>{const o=new e.Vector3(1&r?s.x:n.x,2&r?s.y:n.y,4&r?s.z:n.z);i.position.copy(o.clone().sub(n)),i.material.color.set(t),i.visible=!0}))}const l=a.drag||[];if(l.includes("z")){const t=new e.Vector3((n.x+s.x)/2-n.x,0,s.z-n.z);this.draggerZ.position.copy(t),this.draggerZ.visible=!0}if(l.includes("y")){const t=new e.Vector3(0,0,(n.z+s.z)/2-n.z);this.draggerY.position.copy(t),this.draggerY.visible=!0}if(l.includes("x")){const t=new e.Vector3(s.x-n.x,0,(n.z+s.z)/2-n.z);this.draggerX.position.copy(t),this.draggerX.visible=!0}}update(t){if(!t)return;const i=new e.Vector3;this.grp.getWorldPosition(i);const n=new e.Vector3;t.getWorldPosition(n);let s=n.distanceTo(i);const r=.05*s,o=.06*s,a=.07*s,A=.04*s;this.asseX.scale.set(r,r,r),this.asseY.scale.set(r,r,r),this.asseZ.scale.set(r,r,r),this.rotateHandler.scale.set(A,A,A),this.corners.forEach((e=>e.scale.set(o,o,o))),this.draggerX.scale.set(a,a,a),this.draggerY.scale.set(a,a,a),this.draggerZ.scale.set(a,a,a)}},creaDragger:creaDragger,creaRotateHandler:creaRotateHandler,creaCorner:creaCorner,creaAsse:creaAsse}}function d3dview(e={}){const{THREE:t,post:i,GLTFExporter:n,RGBELoader:s,SAOPass:r}=e,{createSAOPass:o,updateSAOPass:a}=function ssao(e){return{createSAOPass:function createSAOPass({composer:t,scene:i,camera:n,renderer:s}){const r=new e(i,n,!1,!0);return r.enabled=!1,r.params.output=0,r.params.saoBias=.06,r.params.saoIntensity=.14,r.params.saoScale=1.6,r.params.saoKernelRadius=4,r.params.saoMinResolution=0,r.params.saoBlur=!0,r.params.saoBlurRadius=11,r.params.saoBlurStdDev=4,r.params.saoBlurDepthCutoff=.0015,t.addPass(r),r},updateSAOPass:function updateSAOPass(e,t){const i=t/2;e.params.saoScale=4*i,e.params.saoKernelRadius=6*i}}}(r),{Picker:A,creaDragger:l,creaRotateHandler:c,creaCorner:h,creaAsse:p}=picker(t),{initHdri:u,setHdri:g,removeHdri:d,disposeHdri:f,refreshScene:m}=function hdri(e,t,i,n){let s,r=null,o=null;return{refreshScene:function refreshScene(t,i,s,r,o){if(!r)return;if(i.length=0,r.traverse((e=>{e.userData.pickvariant&&i.push(e),e.isMesh&&(e.castShadow=o,e.receiveShadow=o,e.material&&e.material.isMeshStandardMaterial&&null==e.material.envMapIntensity&&(e.material.envMapIntensity=.6),e.layers.enable(0),e.layers.enable(1),e.layers.enable(2),e.layers.enable(9))})),s){const t=(new e.Box3).setFromObject(r);if(!t.isEmpty()){const i=t.getSize(new e.Vector3),r=Math.max(i.x,i.y,i.z);n(s,r)}}const a=t?.userData?.dirLight;a&&o&&(a.shadow.needsUpdate=!0)},disposeHdri:function disposeHdri(){s&&(s.dispose(),s=null)},removeHdri:function removeHdri(e){e&&(e.environment=null),r&&(r.dispose(),r=null),o&&(o.dispose(),o=null)},setHdri:async function setHdri(n,a){if(!n||!a||!s)return;let A;A=i._cdn?`${i._cdn}__/hdr/${n}`:i.fullget("mufiles/gethdr",{name:n});let l=new Promise(((i,n)=>{(new t).load(A,(t=>{t.mapping=e.EquirectangularReflectionMapping;const n=s.fromEquirectangular(t),r=n.texture;t.dispose(),i({envMap:r,rt:n})}),void 0,(e=>{console.error("Errore caricamento HDRI:",e),i(null)}))}));const c=await l;c&&(r&&(r.dispose(),r=null),o&&(o.dispose(),o=null),r=c.envMap,o=c.rt,a.environment=r,a.backgroundBlurriness=.4)},initHdri:function initHdri(t,i){if(s&&s.dispose(),s=new e.PMREMGenerator(t),s.compileEquirectangularShader(),i){const t=new e.DirectionalLight(16777215,.8);t.position.set(-20,10,20),t.castShadow=!1,t.castShadow=!0,t.shadow.mapSize.set(1024,1024),t.shadow.bias=-1e-4,t.shadow.normalBias=.02;const n=20;t.shadow.camera.left=-20,t.shadow.camera.right=n,t.shadow.camera.top=n,t.shadow.camera.bottom=-20,t.shadow.camera.near=.5,t.shadow.camera.far=50,i.add(t);const s=new e.AmbientLight(16777215,.1);i.add(s),i.userData.dirLight=t,i.userData.ambLight=s}}}}(t,s,i,a),{destroyFakeShadow:I,initFakeShadow:b,refreshFakeShadow:y}=function ombraterra(e){return{destroyFakeShadow:function destroyFakeShadow(e){e&&(e.shadowRT?.dispose?.(),e.shadowPlane?.geometry?.dispose?.(),e.shadowPlane?.material?.dispose?.(),e.shadowScene?.traverse((e=>{e.geometry?.dispose?.(),e.material?.dispose?.()})))},initFakeShadow:function initFakeShadow(t){if(!t)return null;const i=(new e.Box3).setFromObject(t),n=new e.Vector3;i.getSize(n);const s=new e.Vector3;i.getCenter(s);const r=new e.OrthographicCamera(-n.x/2,n.x/2,n.z/2,-n.z/2,.001,50);r.position.set(s.x,10,s.z),r.up.set(0,0,-1),r.lookAt(s);const o=new e.WebGLRenderTarget(256,256,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,format:e.RGBAFormat}),a=t.clone(!0);a.traverse((t=>{t.isMesh&&(t.material=new e.MeshBasicMaterial({color:0,transparent:!1}))})),a.scale.y*=-1;const A=(new e.Box3).setFromObject(a);a.position.y-=A.min.y;const l=new e.Scene;l.add(a);const c=new e.PlaneGeometry(1.15*n.x,1.15*n.z),h=new e.Mesh(c,new e.MeshBasicMaterial({map:o.texture,transparent:!0,opacity:.35}));return h.rotation.x=-Math.PI/2,h.position.set(s.x,i.min.y+.001,s.z),h.name="_fakeshadow",h.material=new e.MeshBasicMaterial({map:o.texture,color:0,transparent:!0,opacity:.45,blending:e.MultiplyBlending,depthWrite:!1}),h.material.needsUpdate=!0,a.traverse((t=>{t.isMesh&&(t.material=new e.MeshBasicMaterial({color:0,side:e.DoubleSide,transparent:!1}))})),{shadowPlane:h,shadowRT:o,shadowCam:r,shadowScene:l}},refreshFakeShadow:function refreshFakeShadow(t,{shadowRT:i,shadowCam:n,shadowScene:s}){if(!t||!i)return;s.updateMatrixWorld(!0);const r=new e.Color;t.getClearColor(r);const o=t.getClearAlpha?.()??1;t.setRenderTarget(i),t.setClearColor(16777215,1),t.clear(!0,!0,!0),t.render(s,n),t.setRenderTarget(null),t.setClearColor(r,o)}}}(t),{computebbox:C,zoomatutto:B,resetCameraView:E}=function camera(e,t){function computebbox(t){if(!t)return;const i=new e.Box3;return t.updateWorldMatrix(!0,!0),function visita(e){if(!e.userData?.ignoreTraverse&&!1!==e.visible){(e.isMesh||e.isLine||e.isLine2)&&i.expandByObject(e);for(const t of e.children)visita(t)}}(t),i.isEmpty()?null:i}return{computebbox:computebbox,zoomatutto:function zoomatutto(i,n,s,r=100,o=100,a=void 0){if(!i)return;const A=computebbox(i);if(!A)return;if(A.isEmpty())return;const l=A.getCenter(new e.Vector3),c=A.getSize(new e.Vector3),h=r/o;if(a){const e=Math.max(c.x,c.y,c.z);t(a,e)}if(n.isPerspectiveCamera){let t;const i=e.MathUtils.degToRad(n.fov),r=2*Math.atan(Math.tan(i/2)*h),o=(new e.Vector3).subVectors(n.position,l).normalize(),a=n.up.clone().normalize(),c=(new e.Vector3).crossVectors(o,a).normalize(),p=[new e.Vector3(A.min.x,A.min.y,A.min.z),new e.Vector3(A.min.x,A.min.y,A.max.z),new e.Vector3(A.min.x,A.max.y,A.min.z),new e.Vector3(A.min.x,A.max.y,A.max.z),new e.Vector3(A.max.x,A.min.y,A.min.z),new e.Vector3(A.max.x,A.min.y,A.max.z),new e.Vector3(A.max.x,A.max.y,A.min.z),new e.Vector3(A.max.x,A.max.y,A.max.z)];let u=0,g=1/0,d=-1/0;for(const t of p){const n=(new e.Vector3).subVectors(t,l),s=n.dot(a),A=n.dot(c),h=n.dot(o),p=Math.abs(s)/Math.tan(i/2),f=Math.abs(A)/Math.tan(r/2),m=Math.max(p,f)+Math.abs(h);m>u&&(u=m),h<g&&(g=h),h>d&&(d=h)}t=1*u;const f=.5*Math.max(.001,d-g);n.position.copy(l).addScaledVector(o,t);const m=8;n.near=.01,n.far=Math.max(1,t+1.2*f+m),n.updateProjectionMatrix(),s.minDistance=n.near,s.maxDistance=n.far-4,n.updateProjectionMatrix(),n.lookAt(l)}else if(n.isOrthographicCamera){let e=1*c.x,t=1*c.y;e/t<h?e=t*h:t=e/h,n.left=-e/2,n.right=e/2,n.top=t/2,n.bottom=-t/2,n.zoom=1,n.updateProjectionMatrix(),n.position.set(l.x,l.y,n.position.z),n.lookAt(l.x,l.y,l.z)}s&&(s.target.copy(l),s.update())},resetCameraView:function resetCameraView(t,i,n,s,r,o="top"){if(!t)return;const a=(new e.Box3).setFromObject(t),A=new e.Vector3,l=new e.Vector3;a.getCenter(A),a.getSize(l);let c,h,p=new e.Vector3,u=new e.Vector3;switch(o){case"top":case"bottom":c=l.x,h=l.z,p.set(A.x,a.max.y+("top"==o?10:-10),A.z),u.set(0,0,"top"==o?-1:1);break;case"front":case"back":c=l.x,h=l.y,p.set(A.x,A.y,a.max.z+("front"==o?10:-10)),u.set(0,1,0);break;case"left":case"right":c=l.z,h=l.y,p.set(a.max.x+("right"==o?10:-10),A.y,A.z),u.set(0,1,0);break;default:return void console.warn("Vista non riconosciuta:",o)}const g=s/(1.05*c),d=r/(1.05*h),f=Math.min(g,d),m=s/(2*f),I=r/(2*f);i.left=-m,i.right=m,i.top=I,i.bottom=-I,i.near=.1,i.far=100,i.zoom=1,i.updateProjectionMatrix(),i.position.copy(p),i.up.copy(u),i.lookAt(A),n.object=i,n.target.copy(A),n.update()}}}(t,a),{exportGLB:x}=function exportscene(e,t){return{exportGLB:async function exportGLB(i,n,s={}){if(!i)return;n||(n="scena.glb");const r=new t,o=new e.Layers;o.enable(0),o.enable(1),o.enable(2);const a=function cloneFiltered(e){if(!o.test(e.layers))return null;const t=e.clone(!1);t.userData={};for(let i of e.children){const e=cloneFiltered(i);e&&t.add(e)}return t}(i);if(!a)return;const A={binary:!0,embedImages:!0,onlyVisible:!0,userData:!1,...s};try{const e=await new Promise(((e,t)=>{r.parse(a,e,t,A)})),t=new Blob([e],{type:"application/octet-stream"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,s.click(),URL.revokeObjectURL(i)}catch(e){console.error("Errore durante l’esportazione:",e)}},extractPathTracingScene:function extractPathTracingScene(t){const i=new e.Scene;t.updateMatrixWorld(!0),t.environment&&(i.environment=t.environment);const n=new e.Layers;return n.enable(0),n.enable(1),n.enable(2),t.traverse((t=>{if(n.test(t.layers)&&t.isMesh&&n.test(t.layers)&&(Array.isArray(t.material)?t.material.every((e=>e.isMeshStandardMaterial||e.isMeshPhysicalMaterial)):t.material.isMeshStandardMaterial||t.material.isMeshPhysicalMaterial)){const n=t.geometry.clone(),s=Array.isArray(t.material)?t.material.map((e=>e.clone())):t.material.clone(),r=new e.Mesh(n,s);t.updateWorldMatrix(!0,!1),t.getWorldPosition(r.position),t.getWorldQuaternion(r.quaternion),t.getWorldScale(r.scale),i.add(r)}})),i}}}(t,n);return{createSAOPass:o,updateSAOPass:a,resetCameraView:E,computebbox:C,zoomatutto:B,exportSceneImage:exportSceneImage,exportGLB:x,stati:Ze,handleMovimenti:handleMovimenti,handlePick:handlePick,checkhoverables:checkhoverables,Picker:A,creaDragger:l,creaRotateHandler:c,creaCorner:h,creaAsse:p,initHdri:u,setHdri:g,removeHdri:d,disposeHdri:f,refreshScene:m,destroyFakeShadow:I,initFakeShadow:b,refreshFakeShadow:y}}function joinlinestoshapes(e){let t=[];for(let i of e)for(let e of i.lines){let n=new Linea2(e.p1,e.p2);n.rotate(-i.ang),n.move(i.pos.x,i.pos.z),n.valid=!0,t.push(n)}const i=.1;function samepoint(e,t){return Math.abs(e.x-t.x)+Math.abs(e.y-t.y)<i}for(let e=0;e<t.length;e++){if(!t[e].valid)continue;if(t[e].len<i){t[e].valid=!1;continue}const n=t[e];for(let s=e+1;s<t.length;s++){const e=t[s];if(!e.valid)continue;if(!n.isparallela(e))continue;if(!n.isCollineare(e))continue;n.a1b=e.onsegment(n.p1,i),n.a2b=e.onsegment(n.p2,i),n.b1a=n.onsegment(e.p1,i),n.b2a=n.onsegment(e.p2,i);const{x:r,y:o}=n.direzione,{x:a,y:A}=e.direzione;if(r*a+o*A>0)if(n.b1a&&n.b2a)e.valid=!1;else{if(n.a1b&&n.a2b){n.valid=!1;break}if(n.a1b&&n.b2a){let i=new Linea2(e.p1,n.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}if(n.a2b&&n.b1a){let i=new Linea2(n.p1,e.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}}else{const s=n.proiezionet(n.p1).t,r=n.proiezionet(n.p2).t,o=n.proiezionet(e.p1).t,a=n.proiezionet(e.p2).t,A=Math.min(s,r),l=Math.max(s,r),c=Math.min(o,a),h=Math.max(o,a),p=Math.max(A,c),u=Math.min(l,h);if(u>p+i){if(A<p){let e=new Linea2(n.puntot(A),n.puntot(p));e.valid=!0,t.push(e)}if(l>u){let e=new Linea2(n.puntot(l),n.puntot(u));e.valid=!0,t.push(e)}if(c<p){let e=new Linea2(n.puntot(c),n.puntot(p));e.valid=!0,t.push(e)}if(h>u){let e=new Linea2(n.puntot(h),n.puntot(u));e.valid=!0,t.push(e)}n.valid=!1,e.valid=!1;break}}}}t=t.filter((e=>e.valid)).map((e=>getshape().frompt([e.p1,e.p2])));for(let e=0;e<t.length;e++){let i=t[e],n=!0;for(;n;){n=!1;for(let s=e+1;s<t.length;){let e=t[s];samepoint(i.pt[0],e.pt[0])?(e.pt.reverse(),i.pt.unshift(...e.pt.slice(0,-1)),t.splice(s,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[e.pt.length-1])?(e.pt.reverse(),i.pt.push(...e.pt.slice(1)),t.splice(s,1),n=!0):samepoint(i.pt[0],e.pt[e.pt.length-1])?(i.pt.unshift(...e.pt.slice(0,-1)),t.splice(s,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[0])?(i.pt.push(...e.pt.slice(1)),t.splice(s,1),n=!0):s++}}}return t}function checkmovedata(e,t,i){return{l:e((t=(t||"").split(","))[0]),a:e(t[1]),p:e(t[2]),rot:e(t[3]),annulla:e(t[4]),pars:i?.spars||""}}async function valutagrafica(e,t,i,n,s){let{getcolonne:r,muCalc:o,muEval:a,tipifree:A}=e.muvalutatore;i||(i={});for(let i of["l","a","p"]){!e.vari.var(i)&&t.dims&&e.vari.add(i,String(t.dims[i].val||100))}let l=new Set;const c=["sl","sa","sp","ax","ay","az","scx","scy","scz","scale"];let h,p=!1,u=await a(e,t,t.codice,{leveleval:0,checkheader:e=>{let{variante:i}=e;if(Array.isArray(t.head)){let e=t.head.find((e=>e.cod==i));p=!!e}},grafica:async t=>{let s,r,A,l,h,{id:p,pars:u,parametri:g,macro:d,options:f,vari:m}=t,I=!!(d&&d.head&&d.head.length),b={l:e.vari.var("l"),a:e.vari.var("a"),p:e.vari.var("p")};const y=["l","a","p","#d",...c];for(let t of y){let i=e.vari.dictionary[t];i&&(b[t]=i)}async function _parsepars(t,i){let n,a,c=/^#(d|des|descrizione)\s*=\s*(.*)\s*$/im.exec(t);if(c)n="#d",a=await e.vari.valuta(c[2]);else{let e=await m.parametrokeyval(t);n=e.k,a=e.v}n&&!h[n]&&(h[n]=!0,y.includes(n)?"#d"==n?l=a:("string"==typeof a&&(a=o(a)),["l","a","p"].includes(n)&&e.vari.add(n,String(a)),r[n]=a,A=!0):"string"==typeof a?s.push(`${n}=${a}`):e.vari.add(n,a))}let C,B;if(s=[],r={},A=!1,l="",h={},n&&n.keys&&n.keys[p]&&(C=n.keys[p].pars,C))for(let t in C){let i=e.vari.dictionary[t];i&&(b[t]=i),await _parsepars(`${t}=${C[t]}`)}if(u&&u.length)for(const e of u)await _parsepars(e);if(g&&g.length)for(const e of g)await _parsepars(e);if(d&&d.head&&d.head.length){B=d.head.find((e=>"_move"==e.cod));let e=d.head.filter((e=>!["g","p"].includes(e.t)&&"_move"!=e.cod));for(const t of e)await _parsepars(t.cod)}let E={iscad:A,isheader:I,name:d.name,des:l,leveleval:f.leveleval};I&&p&&(E.id=p),A&&(r.l?e.vari.add("l",String(r.l)):r.l=o(e.vari.var("l")),r.a?e.vari.add("a",String(r.a)):r.a=o(e.vari.var("a")),r.p?e.vari.add("p",String(r.p)):r.p=o(e.vari.var("p")),E.cadv=r),await d.impostaparametri(g,s,!0,C);let x=i[p];p&&I&&x&&x.pars&&(E.pars=x.pars,f.leveleval++,await d.setparametri(x.pars));let w=e.vari.var("_rootnode");if(e.vari.add("_rootnode","0"),E.rows=await a(e,d,d.codice,f),e.vari.add("_rootnode",w),p&&I&&(E.spars=d.getparametri()),A){B?E.cadv.move=checkmovedata(o,e.vari.var("_move"),B):delete E.cadv.move;for(let t in b)e.vari.dictionary[t]=b[t]}return E},parsefnpunto:async e=>{let{dati:t,vari:i,id:n,output:s}=e;t=t.trim();let a=t.indexOf(" "),A=t.indexOf(",");A>0&&a>0&&A<a&&(a=A);let h,p,u={},g={};a>1?(h=t.slice(1,a),p=r(t.slice(a+1))):(h=t.slice(1),p=[]),l.has(h)||l.add(h);for(let e of p){let{k:t,v:n}=await i.parametrokeyval(e);t&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)&&(u[t]=n||"")}for(let e of["l","a","p"])u[e]||(u[e]=i.var(e));let d=Object.keys(u);for(let e of c)d.includes(e)&&(g[e]=o(u[e]),g[e]&&(u[e]=g[e]));s.push({t:"fn",fn:h,id:n,pars:u,p2:g})}});for(let i of["l","a","p"])if(t.dims&&t.dims[i].val!=parseFloat(e.vari.var(i))){h=!0;break}return(p||h&&"function"==typeof s)&&await s(h,p),{oo:u,vari:e.vari.dump(!0),fnlist:[...l]}}function ismacro(e){return"object"==typeof e&&e?.name&&e.rows}function isfn(e){return"object"==typeof e&&"fn"==e?.t}function getnodebyid(e,t){let i;return t&&t.rows&&function _getnode(t){for(let n of t){if(ismacro(n)){if(n.id==e)return void(i=n);n.rows&&_getnode(n.rows)}if(i)return}}(t.rows),i}function getsubrules(e){let t=[];return t.push({id:"",level:0,name:"home"}),function _xfiltrati(e,i){if(e.rows&&e.rows.length)for(let n of e.rows)ismacro(n)&&(n.id&&n.isheader?(t.push({id:n.id,name:n.name,des:n.des||"",spec:n.pars?1:0,level:i}),_xfiltrati(n,i+1)):_xfiltrati(n,i))}(e,1),t}function getdumpmacro(e){let t=[];return function _dumpnodo(e){if(e.rows&&e.rows.length)for(let i of e.rows)if(ismacro(i)){i.name;let e=[];if(i.iscad&&i.cadv)for(let t in i.cadv){let n=i.cadv[t];"number"==typeof n&&n&&e.push(`${t}=${n}`)}if(i.pars)for(let t in i.pars){let n=i.pars[t];e.push(`${t}=${n}`)}e.length&&t.push(`--\x3e ${i.name} ${e.join(",")}`),_dumpnodo(i),e.length&&t.push("<--")}else isfn(i)?t.push(`FN: ${i.fn} ${JSON.stringify(i.pars)}`):"string"==typeof i&&i.length&&t.push(i)}(e),t.join("\n")}function konvautils(e){function renderizzaSuLayer(t,i,n,{inverse:s=!0,height:r=600,strokescale:o=2,fontsize:a=2,attivo:A=!0,opacita_inattivo:l=.35}={}){if(!n||!n.vec||!n.vec.length)return;"boolean"==typeof n.attivo&&(A=n.attivo);let c,h=!1,p=!0,u=0;if(s){const f=new e.Group({scaleY:-1,y:r});i.add(f),c=f}else p=!1,c=new e.Group;i.add(c),c.opacity(A?1:l);const g=[c];let d=[];function getTesto(t,i,n,s,r,o,a,A){const l=new e.Text({scaleY:s?A?-1:1:A?1:-1,scaleX:n?-1:1,x:0,y:0,text:t,fontSize:6*i,fill:r||"black"}),c=l.width(),h=l.height(),p=function findFreeY(e,t,i,n){let s=t,r=0;for(;d.some((t=>Math.abs(e-t.x)<i&&Math.abs(s-t.y)<n))&&(s-=1.01*n,!(++r>10)););return d.push({x:e,y:s,width:i,height:n}),s}(o,a,c,h);return l.x(o),l.y(p),A||l.offset({x:c/2,y:h/2}),l}for(let m of[0,1]){function drawobjects(i,n){for(const r of i)switch(r.type){case"group":if(n?.[r.name]){let e=n[r.name];e.vec?.length&&++u<20&&(drawobjects(e.vec,e.gr),u--)}break;case"push":{const{op:t}=r;let i={x:r.x||0,y:r.y||0,rotation:r.rot||t.rot||0,scaleX:t.mirrorx?-1:t.scalex||t.scale||1,scaleY:t.mirrory?-1:t.scaley||t.scale||1};i.scaleX<0&&(h=!h),i.scaleY<0&&(p=!p);const n=new e.Group(i);c.add(n),g.push(n),c=n;break}case"pop":if(g.length>1){const e=g.pop();e.getAttr("scaleX")<0&&(h=!h),e.getAttr("scaleY")<0&&(p=!p),c=g[g.length-1]}break;case"img":if(0===m){const{x:i,y:n}=r.l.p1,o=r.l.p2.x-i,a=r.l.p2.y-n;let A=t.get(r.img);if(!A){A=new window.Image,A.src=r.img,t.set(r.img,A);const l=c,h=i,p=n,u=o,g=a,d=s;A.addEventListener("load",(()=>{let t=l.findOne(".img");t?(t.image(A),t.setAttrs({x:h,y:d?p+g:p,width:u,height:g,scaleY:d?-1:1})):l.add(new e.Image({name:"img",x:h,y:d?p+g:p,image:A,width:u,height:g,scaleY:d?-1:1,listening:!1})),l.getLayer().batchDraw()}))}if(A.complete){let t=c.findOne(".img");t?(t.image(A),t.setAttrs({x:i,y:s?n+a:n,width:o,height:a,scaleY:s?-1:1})):c.add(new e.Image({name:"img",x:i,y:s?n+a:n,image:A,width:o,height:a,scaleY:s?-1:1,listening:!1}))}}break;case"line":if(0===m)c.add(new e.Line({points:[r.l.p1.x,r.l.p1.y,r.l.p2.x,r.l.p2.y],stroke:r.color||"black",strokeWidth:(r.spessore||1)*o}));else if(r.id&&-1!=r.id){const e=(r.l.p1.x+r.l.p2.x)/2,t=(r.l.p1.y+r.l.p2.y)/2+6*a;c.add(getTesto(r.id,a,h,p,"black",e,t,s))}break;case"rect":case"space":case"recta":if(0===m){const{x:t,y:i}=r.l.p1,n=r.l.p2.x-t,s=r.l.p2.y-i;c.add("space"==r.type?new e.Rect({x:t,y:i,width:n,height:s,stroke:null,fill:null,listening:!1,hitStrokeWidth:0}):new e.Rect({x:t,y:i,width:n,height:s,stroke:"rect"===r.type?r.color||"black":void 0,fill:"recta"===r.type?r.color||"rgba(0,0,255,0.2)":r.fill,strokeWidth:(r.spessore||1)*o}))}break;case"point":if(1===m&&(c.add(new e.Circle({x:r.p.x,y:r.p.y,radius:r.spessore||8,fill:r.color||"black"})),r.id&&-1!=r.id)){const e=a;c.add(getTesto(r.id,e,h,p,r.color||"black",r.p.x+2*e,r.p.y+6*e,s))}break;case"shapelin":case"shape":case"area":0===m&&r.s?.length&&c.add(new e.Line({points:r.s.flatMap((e=>[e.x,e.y])),closed:"shapelin"!==r.type,fill:"area"===r.type?r.color||"rgba(0,0,255,0.2)":r.fill,stroke:r.color||"black",strokeWidth:(r.spessore||1)*o}));break;case"text":if(1===m&&r.text){const e=(r.scalafont||1)*a,t=r.color||"black";c.add(testo(r.x,r.y,r.text,e,t,r.fill,h,p))}break;case"quota":{let e=(r.scalafont||1)*a;r.text||(r.text=Math.sqrt((r.x2-r.x1)**2+(r.y2-r.y1)**2).toFixed(1)),c.add(quotalineare(r.x1,r.y1,r.x2,r.y2,r.d,r.text+"",e,r.color,r.spessore,h,p));break}case"qpunto":{let e=(r.scalafont||1)*a;c.add(quotapunto(r.x1,r.y1,r.text,r.d,e,r.color,r.spessore));break}}}drawobjects(n.vec,n.gr)}}function testo(t,i,n,s,r="black",o="white",a,A,l){const c=new e.Group;try{const l=new e.Text({scaleY:A?-1:1,scaleX:a?-1:1,x:t,y:i,text:n,fontSize:6*s,fill:r,align:"center",verticalAlign:"middle",lineHeight:1.2}),h=l.getTextWidth();l.width(h);const p=l.getHeight();l.offsetX(h/2),l.offsetY(p/2),o&&c.add(new e.Rect({x:t,y:i,width:h+8,height:p,fill:o,cornerRadius:4,offsetX:h/2+4,offsetY:p/2,listening:!1,scaleY:A?-1:1,scaleX:a?-1:1})),c.add(l)}catch(e){console.log(e.message)}return c}function quotalineare(t,i,n,s,r,o,a,A="black",l=1,c,h){const p=n-t,u=s-i,g=Math.sqrt(p*p+u*u);if(0===g)return new e.Group;const d=-u/g*r,f=p/g*r,m=[t+d,i+f],I=[n+d,s+f],b=(m[0]+I[0])/2,y=(m[1]+I[1])/2,C=new e.Group;C.add(new e.Line({points:[t,i,t+1.2*d,i+1.2*f],stroke:A,strokeWidth:l})),C.add(new e.Line({points:[n,s,n+1.2*d,s+1.2*f],stroke:A,strokeWidth:l})),C.add(new e.Line({points:[...m,...I],stroke:A,strokeWidth:l}));const B=o.length*a*4,E=6*a,x=180*Math.atan2(u,p)/Math.PI;return C.add(new e.Rect({x:b,y:y,width:B,height:E,fill:"white",offsetX:B/2,offsetY:E/2,rotation:x,listening:!1,scaleY:h?-1:1,scaleX:c?-1:1})),C.add(new e.Text({scaleY:h?-1:1,scaleX:c?-1:1,x:b,y:y,text:o,fontSize:6*a,fill:A,align:"center",verticalAlign:"middle",width:B,height:E,offsetX:B/2,offsetY:E/2,rotation:x})),C}function quotapunto(t,i,n,s,r,o="black",a=1,A,l){const c=t+s,h=i+s,p=new e.Group;return p.add(new e.Line({points:[t,i,c,h],stroke:o,strokeWidth:a})),p.add(new e.Text({x:c,y:h,text:n,fontSize:6*r,fill:o,offsetX:n.length*r*2,offsetY:3*r})),p}return{renderizzaSuLayer:renderizzaSuLayer,saveimg_konva:async function saveimg_konva(t,i,n,s,r,o=10,a=1,A=2){let l=`${t}${n.name}`;const c=document.createElement("div");c.style.position="absolute",c.style.left="-10000px",c.style.top="-10000px",c.style.width=s+"px",c.style.height=r+"px",document.body.appendChild(c),console.log(n);const h=new e.Stage({container:c,width:s,height:r}),p=new e.Layer;h.add(p),renderizzaSuLayer(i,p,n,{height:r,strokescale:a,fontsize:A}),p.draw();const u=p.children[0].getClientRect({skipTransform:!1}),g=(s-2*o)/u.width,d=(r-2*o)/u.height,f=Math.min(g,d),m=-u.x*f+o+(s-u.width*f-2*o)/2,I=-u.y*f+o+(r-u.height*f-2*o)/2;h.scale({x:f,y:f}),h.position({x:m,y:I}),p.draw();const b=h.toDataURL({pixelRatio:1,mimeType:"image/webp",quality:.95});h.destroy(),document.body.removeChild(c);{const e=b.split(","),t=e[0].match(/:(.*?);/)[1],i=atob(e[1]),n=new Uint8Array(i.length);for(let e=0;e<i.length;e++)n[e]=i.charCodeAt(e);return new File([n],`${l}.webp`,{type:t})}}}}var $e=class Handle{static seed=0;static next(){return(++Handle.seed).toString(16).toUpperCase()}static peek(){return(Handle.seed+1).toString(16).toUpperCase()}};const et=$e;var tt=class DatabaseObject{constructor(e=null){this.handle=et.next(),this.ownerObjectHandle="0",this.subclassMarkers=[],e&&(Array.isArray(e)?this.subclassMarkers.push(...e):this.subclassMarkers.push(e))}tags(e){e.push(5,this.handle),e.push(330,this.ownerObjectHandle);for(const t of this.subclassMarkers)e.push(100,t)}};const it=tt;var nt=class LineType extends it{constructor(e,t,i){super(["AcDbSymbolTableRecord","AcDbLinetypeTableRecord"]),this.name=e,this.description=t,this.elements=i}tags(e){e.push(0,"LTYPE"),super.tags(e),e.push(2,this.name),e.push(3,this.description),e.push(70,0),e.push(72,65),e.push(73,this.elements.length),e.push(40,this.getElementsSum()),this.elements.forEach((t=>{e.push(49,t),e.push(74,0)}))}getElementsSum(){return this.elements.reduce(((e,t)=>e+Math.abs(t)),0)}};const st=tt;var rt=class Layer extends st{constructor(e,t,i=null){super(["AcDbSymbolTableRecord","AcDbLayerTableRecord"]),this.name=e,this.colorNumber=t,this.lineTypeName=i,this.shapes=[],this.trueColor=-1}tags(e){e.push(0,"LAYER"),super.tags(e),e.push(2,this.name),-1!==this.trueColor?e.push(420,this.trueColor):e.push(62,this.colorNumber),e.push(70,0),this.lineTypeName&&e.push(6,this.lineTypeName),e.push(390,1)}setTrueColor(e){this.trueColor=e}addShape(e){this.shapes.push(e),e.layer=this}getShapes(){return this.shapes}shapesTags(e,t){for(const i of this.shapes)i.ownerObjectHandle=e.handle,i.tags(t)}};const ot=tt;var at=class Table extends ot{constructor(e){super("AcDbSymbolTable"),this.name=e,this.elements=[]}add(e){e.ownerObjectHandle=this.handle,this.elements.push(e)}tags(e){e.push(0,"TABLE"),e.push(2,this.name),super.tags(e),e.push(70,this.elements.length),this.elements.forEach((t=>{t.tags(e)})),e.push(0,"ENDTAB")}};const At=tt,lt=at;var ct=class DimStyleTable extends lt{constructor(e){super(e),this.subclassMarkers.push("AcDbDimStyleTable")}tags(e){e.push(0,"TABLE"),e.push(2,this.name),At.prototype.tags.call(this,e),e.push(70,this.elements.length),e.push(71,1);for(const t of this.elements)t.tags(e);e.push(0,"ENDTAB")}};const ht=tt;var pt=class TextStyle extends ht{fontFileName="txt";constructor(e){super(["AcDbSymbolTableRecord","AcDbTextStyleTableRecord"]),this.name=e}tags(e){e.push(0,"STYLE"),super.tags(e),e.push(2,this.name),e.push(70,0),e.push(40,0),e.push(41,1),e.push(50,0),e.push(71,0),e.push(42,1),e.push(3,this.fontFileName),e.push(4,"")}};const ut=tt;var gt=class Viewport extends ut{constructor(e,t){super(["AcDbSymbolTableRecord","AcDbViewportTableRecord"]),this.name=e,this.height=t}tags(e){e.push(0,"VPORT"),super.tags(e),e.push(2,this.name),e.push(40,this.height),e.push(70,0)}};const dt=tt;var ft=class AppId extends dt{constructor(e){super(["AcDbSymbolTableRecord","AcDbRegAppTableRecord"]),this.name=e}tags(e){e.push(0,"APPID"),super.tags(e),e.push(2,this.name),e.push(70,0)}};const mt=tt;var It=class Block extends mt{constructor(e){super(["AcDbEntity","AcDbBlockBegin"]),this.name=e,this.end=new mt(["AcDbEntity","AcDbBlockEnd"]),this.recordHandle=null}tags(e){e.push(0,"BLOCK"),super.tags(e),e.push(2,this.name),e.push(70,0),e.point(0,0),e.push(3,this.name),e.push(1,""),e.push(0,"ENDBLK"),this.end.tags(e)}};const bt=tt;var yt=class BlockRecord extends bt{constructor(e){super(["AcDbSymbolTableRecord","AcDbBlockTableRecord"]),this.name=e}tags(e){e.push(0,"BLOCK_RECORD"),super.tags(e),e.push(2,this.name),e.push(70,0),e.push(280,0),e.push(281,1)}};const Ct=tt;var Bt=class Dictionary extends Ct{constructor(){super("AcDbDictionary"),this.children={}}addChildDictionary(e,t){t.ownerObjectHandle=this.handle,this.children[e]=t}tags(e){e.push(0,"DICTIONARY"),super.tags(e),e.push(281,1);const t=Object.entries(this.children);for(const i of t){const[t,n]=i;e.push(3,t),e.push(350,n.handle)}const i=Object.values(this.children);for(const t of i)t.tags(e)}};const Et=tt;var xt=class Line extends Et{constructor(e,t,i,n){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.x2=i,this.y2=n}tags(e){e.push(0,"LINE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x1,this.y1),e.push(11,this.x2),e.push(21,this.y2),e.push(31,0)}};const Qt=tt;var wt=class Line3d extends Qt{constructor(e,t,i,n,s,r){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.z1=i,this.x2=n,this.y2=s,this.z2=r}tags(e){e.push(0,"LINE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x1,this.y1,this.z1),e.push(11,this.x2),e.push(21,this.y2),e.push(31,this.z2)}};const vt=tt;var Pt=class Arc extends vt{constructor(e,t,i,n,s){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.r=i,this.startAngle=n,this.endAngle=s}tags(e){e.push(0,"ARC"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(40,this.r),e.push(100,"AcDbArc"),e.push(50,this.startAngle),e.push(51,this.endAngle)}};const Dt=tt;var Mt=class Circle extends Dt{constructor(e,t,i){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.r=i}tags(e){e.push(0,"CIRCLE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(40,this.r)}};const St=tt;var Tt=class Cylinder extends St{constructor(e,t,i,n,s,r,o,a){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.z=i,this.r=n,this.thickness=s,this.extrusionDirectionX=r,this.extrusionDirectionY=o,this.extrusionDirectionZ=a}tags(e){e.push(0,"CIRCLE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y,this.z),e.push(40,this.r),e.push(39,this.thickness),e.push(210,this.extrusionDirectionX),e.push(220,this.extrusionDirectionY),e.push(230,this.extrusionDirectionZ)}};const Lt=tt,kt=["left","center","right"],_t=["baseline","bottom","middle","top"];var Rt=class Text extends Lt{constructor(e,t,i,n,s,r="left",o="baseline"){super(["AcDbEntity","AcDbText"]),this.x=e,this.y=t,this.height=i,this.rotation=n,this.value=s,this.hAlign=r,this.vAlign=o}tags(e){e.push(0,"TEXT"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(40,this.height),e.push(1,this.value),e.push(50,this.rotation),kt.includes(this.hAlign,1)||_t.includes(this.vAlign,1)?(e.push(72,Math.max(kt.indexOf(this.hAlign),0)),e.push(11,this.x),e.push(21,this.y),e.push(31,0),e.push(100,"AcDbText"),e.push(73,Math.max(_t.indexOf(this.vAlign),0))):e.push(100,"AcDbText")}};const Ft=tt;var Nt=class Polyline extends Ft{constructor(e,t=!1,i=0,n=0){super(["AcDbEntity","AcDbPolyline"]),this.points=e,this.closed=t,this.startWidth=i,this.endWidth=n}tags(e){e.push(0,"LWPOLYLINE"),super.tags(e),e.push(8,this.layer.name),e.push(6,"ByLayer"),e.push(62,256),e.push(370,-1),e.push(90,this.points.length),e.push(70,this.closed?1:0),this.points.forEach((t=>{const[i,n,s]=t;e.push(10,i),e.push(20,n),0===this.startWidth&&0===this.endWidth||(e.push(40,this.startWidth),e.push(41,this.endWidth)),void 0!==s&&e.push(42,s)}))}};const Ot=tt;var Gt=class Vertex extends Ot{constructor(e,t,i){super(["AcDbEntity","AcDbVertex","AcDb3dPolylineVertex"]),this.x=e,this.y=t,this.z=i}tags(e){e.push(0,"VERTEX"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y,this.z),e.push(70,32)}};const Yt=tt,Ut=$e,Xt=Gt;var qt=class Polyline3d extends Yt{constructor(e){super(["AcDbEntity","AcDb3dPolyline"]),this.verticies=e.map((e=>{const[t,i,n]=e,s=new Xt(t,i,n);return s.ownerObjectHandle=this.handle,s})),this.seqendHandle=Ut.next()}tags(e){e.push(0,"POLYLINE"),super.tags(e),e.push(8,this.layer.name),e.push(66,1),e.push(70,0),e.point(0,0),this.verticies.forEach((t=>{t.layer=this.layer,t.tags(e)})),e.push(0,"SEQEND"),e.push(5,this.seqendHandle),e.push(100,"AcDbEntity"),e.push(8,this.layer.name)}};const zt=tt;var Ht=class Face extends zt{constructor(e,t,i,n,s,r,o,a,A,l,c,h){super(["AcDbEntity","AcDbFace"]),this.x1=e,this.y1=t,this.z1=i,this.x2=n,this.y2=s,this.z2=r,this.x3=o,this.y3=a,this.z3=A,this.x4=l,this.y4=c,this.z4=h}tags(e){e.push(0,"3DFACE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x1,this.y1,this.z1),e.push(11,this.x2),e.push(21,this.y2),e.push(31,this.z2),e.push(12,this.x3),e.push(22,this.y3),e.push(32,this.z3),e.push(13,this.x4),e.push(23,this.y4),e.push(33,this.z4)}};const jt=tt;var Wt=class Point extends jt{constructor(e,t){super(["AcDbEntity","AcDbPoint"]),this.x=e,this.y=t}tags(e){e.push(0,"POINT"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y)}};const Jt=tt;var Kt=class Spline extends Jt{constructor(e,t=3,i=null,n=null,s=[]){if(super(["AcDbEntity","AcDbSpline"]),e.length<t+1)throw new Error(`For degree ${t} spline, expected at least ${t+1} control points, but received only ${e.length}`);if(null==i){i=[];for(let e=0;e<t+1;e++)i.push(0);for(let n=1;n<e.length-t;n++)i.push(n);for(let n=0;n<t+1;n++)i.push(e.length-t)}if(i.length!==e.length+t+1)throw new Error(`Invalid knot vector length. Expected ${e.length+t+1} but received ${i.length}.`);this.controlPoints=e,this.knots=i,this.fitPoints=s,this.degree=t,this.weights=n;const r=this.weights?1:0;this.type=0+4*r+8+0}tags(e){e.push(0,"SPLINE"),super.tags(e),e.push(8,this.layer.name),e.push(210,0),e.push(220,0),e.push(230,1),e.push(70,this.type),e.push(71,this.degree),e.push(72,this.knots.length),e.push(73,this.controlPoints.length),e.push(74,this.fitPoints.length),e.push(42,1e-7),e.push(43,1e-7),e.push(44,1e-10),this.knots.forEach((t=>{e.push(40,t)})),this.weights&&this.weights.forEach((t=>{e.push(41,t)})),this.controlPoints.forEach((t=>{e.point(t[0],t[1])}))}};const Vt=tt;var Zt=class Ellipse extends Vt{constructor(e,t,i,n,s,r,o){super(["AcDbEntity","AcDbEllipse"]),this.x=e,this.y=t,this.majorAxisX=i,this.majorAxisY=n,this.axisRatio=s,this.startAngle=r,this.endAngle=o}tags(e){e.push(0,"ELLIPSE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(11,this.majorAxisX),e.push(21,this.majorAxisY),e.push(31,0),e.push(40,this.axisRatio),e.push(41,this.startAngle),e.push(42,this.endAngle)}};var $t=class TagsManager{constructor(){this.lines=[]}point(e,t,i=0){this.push(10,e),this.push(20,t),this.push(30,i)}start(e){this.push(0,"SECTION"),this.push(2,e)}end(){this.push(0,"ENDSEC")}addHeaderVariable(e,t){this.push(9,`$${e}`),t.forEach((e=>{this.push(e[0],e[1])}))}push(e,t){this.lines.push(e,t)}toDxfString(){return this.lines.join("\n")}};const ei=nt,ti=rt,ii=at,ni=ct,si=pt,ri=gt,oi=ft,ai=It,Ai=yt,li=Bt,ci=xt,hi=wt,pi=Pt,ui=Mt,gi=Tt,di=Rt,fi=Nt,mi=qt,bi=Ht,yi=Wt,Ci=Kt,Bi=Zt,xi=$t,Qi=$e;class Drawing{constructor(){this.layers={},this.activeLayer=null,this.lineTypes={},this.headers={},this.tables={},this.blocks={},this.dictionary=new li,this.setUnits("Unitless");for(const e of Drawing.LINE_TYPES)this.addLineType(e.name,e.description,e.elements);for(const e of Drawing.LAYERS)this.addLayer(e.name,e.colorNumber,e.lineTypeName);this.setActiveLayer("0"),this.generateAutocadExtras()}addLineType(e,t,i){return this.lineTypes[e]=new ei(e,t,i),this}addLayer(e,t,i){return this.layers[e]=new ti(e,t,i),this}setActiveLayer(e){return this.activeLayer=this.layers[e],this}addTable(e){const t=new ii(e);return this.tables[e]=t,t}addBlock(e){const t=new ai(e);return this.blocks[e]=t,t}drawLine(e,t,i,n){return this.activeLayer.addShape(new ci(e,t,i,n)),this}drawLine3d(e,t,i,n,s,r){return this.activeLayer.addShape(new hi(e,t,i,n,s,r)),this}drawPoint(e,t){return this.activeLayer.addShape(new yi(e,t)),this}drawRect(e,t,i,n,s,r){const o=i-e,a=n-t;r=r||0;let A=null;return A=new fi(s?[[e+o-s,t,r],[e+o,t+s],[e+o,t+a-s,r],[e+o-s,t+a],[e+s,t+a,r],[e,t+a-s],[e,t+s,r],[e+s,t]]:[[e,t],[e,t+a],[e+o,t+a],[e+o,t]],!0),this.activeLayer.addShape(A),this}drawPolygon(e,t,i,n,s=0,r=!1){const o=2*Math.PI/i,a=[];let A=n;const l=s*Math.PI/180;r&&(A=n/Math.cos(Math.PI/i));for(let n=0;n<i;n++)a.push([e+A*Math.sin(l+n*o),t+A*Math.cos(l+n*o)]);return this.activeLayer.addShape(new fi(a,!0)),this}drawArc(e,t,i,n,s){return this.activeLayer.addShape(new pi(e,t,i,n,s)),this}drawCircle(e,t,i){return this.activeLayer.addShape(new ui(e,t,i)),this}drawCylinder(e,t,i,n,s,r,o,a){return this.activeLayer.addShape(new gi(e,t,i,n,s,r,o,a)),this}drawText(e,t,i,n,s,r="left",o="baseline"){return this.activeLayer.addShape(new di(e,t,i,n,s,r,o)),this}drawPolyline(e,t=!1,i=0,n=0){return this.activeLayer.addShape(new fi(e,t,i,n)),this}drawPolyline3d(e){return e.forEach((e=>{if(3!==e.length)throw"Require 3D coordinates"})),this.activeLayer.addShape(new mi(e)),this}setTrueColor(e){return this.activeLayer.setTrueColor(e),this}drawSpline(e,t=3,i=null,n=null,s=[]){return this.activeLayer.addShape(new Ci(e,t,i,n,s)),this}drawEllipse(e,t,i,n,s,r=0,o=2*Math.PI){return this.activeLayer.addShape(new Bi(e,t,i,n,s,r,o)),this}drawFace(e,t,i,n,s,r,o,a,A,l,c,h){return this.activeLayer.addShape(new bi(e,t,i,n,s,r,o,a,A,l,c,h)),this}_ltypeTable(){const e=new ii("LTYPE"),t=Object.values(this.lineTypes);for(const i of t)e.add(i);return e}_layerTable(e){const t=new ii("LAYER"),i=Object.values(this.layers);for(const e of i)t.add(e);return t}header(e,t){return this.headers[e]=t,this}setUnits(e){return void 0!==Drawing.UNITS[e]?Drawing.UNITS[e]:Drawing.UNITS.Unitless,this.header("INSUNITS",[[70,Drawing.UNITS[e]]]),this}generateAutocadExtras(){this.headers.ACADVER||this.header("ACADVER",[[1,"AC1021"]]),this.lineTypes.ByBlock||this.addLineType("ByBlock","",[]),this.lineTypes.ByLayer||this.addLineType("ByLayer","",[]);let e=this.tables.VPORT;e||(e=this.addTable("VPORT"));let t=this.tables.STYLE;t||(t=this.addTable("STYLE")),this.tables.VIEW||this.addTable("VIEW"),this.tables.UCS||this.addTable("UCS");let i=this.tables.APPID;if(i||(i=this.addTable("APPID")),!this.tables.DIMSTYLE){const e=new ni("DIMSTYLE");this.tables.DIMSTYLE=e}e.add(new ri("*ACTIVE",1e3)),t.add(new si("standard")),i.add(new oi("ACAD")),this.modelSpace=this.addBlock("*Model_Space"),this.addBlock("*Paper_Space");const n=new li;this.dictionary.addChildDictionary("ACAD_GROUP",n)}_tagsManager(){const e=new xi,t=new ii("BLOCK_RECORD"),i=Object.values(this.blocks);for(const e of i){const i=new Ai(e.name);t.add(i)}const n=this._ltypeTable(),s=this._layerTable();e.start("HEADER"),e.addHeaderVariable("HANDSEED",[[5,Qi.peek()]]);const r=Object.entries(this.headers);for(const t of r){const[i,n]=t;e.addHeaderVariable(i,n)}e.end(),e.start("CLASSES"),e.end(),e.start("TABLES"),n.tags(e),s.tags(e);const o=Object.values(this.tables);for(const t of o)t.tags(e);t.tags(e),e.end(),e.start("BLOCKS");for(const t of i)t.tags(e);e.end(),e.start("ENTITIES");const a=Object.values(this.layers);for(const t of a)t.shapesTags(this.modelSpace,e);return e.end(),e.start("OBJECTS"),this.dictionary.tags(e),e.end(),e.push(0,"EOF"),e}toDxfString(){return this._tagsManager().toDxfString()}}Drawing.ACI={LAYER:0,RED:1,YELLOW:2,GREEN:3,CYAN:4,BLUE:5,MAGENTA:6,WHITE:7},Drawing.LINE_TYPES=[{name:"CONTINUOUS",description:"______",elements:[]},{name:"DASHED",description:"_ _ _ ",elements:[5,-5]},{name:"DOTTED",description:". . . ",elements:[0,-5]}],Drawing.LAYERS=[{name:"0",colorNumber:Drawing.ACI.WHITE,lineTypeName:"CONTINUOUS"}],Drawing.UNITS={Unitless:0,Inches:1,Feet:2,Miles:3,Millimeters:4,Centimeters:5,Meters:6,Kilometers:7,Microinches:8,Mils:9,Yards:10,Angstroms:11,Nanometers:12,Microns:13,Decimeters:14,Decameters:15,Hectometers:16,Gigameters:17,"Astronomical units":18,"Light years":19,Parsecs:20};var wi=getDefaultExportFromCjs(Drawing);const vi={black:[0,0,0],white:[255,255,255],red:[255,0,0],green:[0,255,0],blue:[0,0,255],yellow:[255,255,0],cyan:[0,255,255],magenta:[255,0,255],gray:[128,128,128],grey:[128,128,128]},Di={};function col2aci(e){if(!e)return 0;if("number"==typeof e)return e;const t=e.trim().toLowerCase();if(Di[t])return Di[t];if(vi[t]){const[e,i,n]=vi[t];return Di[t]=rgb2aci(e,i,n)}if(t.startsWith("#")){let e=t;4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);const i=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),s=parseInt(e.slice(5,7),16);return Di[t]=rgb2aci(i,n,s)}if(t.startsWith("rgb")){const e=t.match(/\d+/g).map(Number);return Di[t]=rgb2aci(e[0],e[1],e[2])}return Di[t]=0}function rgb2aci(e,t,i){return Math.abs(e-t)<10&&Math.abs(t-i)<10?8:e>t&&e>i?1:t>e&&t>i?3:i>e&&i>t?5:e>200&&t>200?2:t>200&&i>200?4:e>200&&i>200?6:7}function exportdxf(e){const t=new wi,i=new Matrix3D;for(const n of e.vec)switch(n.type){case"push":i.push(),(n.x||n.y)&&i.translate(n.x||0,n.y||0,0),n.rot&&i.rotateZ(n.rot);break;case"pop":i.pop();break;case"offset":i.translate(n.x||0,n.y||0,0);break;case"point":{const e=i.transform(n.p.x,n.p.y,0),s=col2aci(n.color);t.setActiveLayer("0",s),t.drawPoint(e.x,e.y),n.id&&t.drawText(e.x+2,e.y+2,6,0,n.id);break}case"line":{const e=i.transform(n.l.p1.x,n.l.p1.y,0),s=i.transform(n.l.p2.x,n.l.p2.y,0),r=col2aci(n.color);if(t.setActiveLayer("0",r),t.drawLine(e.x,e.y,s.x,s.y),n.id){const i=(e.x+s.x)/2,r=(e.y+s.y)/2;t.drawText(i,r,6,0,n.id)}break}case"rect":case"recta":{const e=i.transform(n.l.p1.x,n.l.p1.y,0),s=i.transform(n.l.p2.x,n.l.p2.y,0),r=col2aci(n.color);t.setActiveLayer("0",r);const o="recta"===n.type;t.drawPolyline([[e.x,e.y],[s.x,e.y],[s.x,s.y],[e.x,s.y]],o);break}case"shape":case"shapelin":case"area":{if(!n.s?.length)break;const e=n.s.map((e=>{const t=i.transform(e.x,e.y,0);return[t.x,t.y]})),s="shapelin"!==n.type,r=col2aci(n.color);t.setActiveLayer("0",r),t.drawPolyline(e,s);break}case"text":{const e=col2aci(n.color);t.setActiveLayer("0",e);const s=i.transform(n.x||0,n.y||0,0),r=6*(n.scalafont||1);t.drawText(s.x,s.y,r,0,n.text);break}}return t.toDxfString()}const Mi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:e.DoubleSide});function getorientate(e,t,i,n){switch(t=t||0,i=i||0,n=n||0,e.trim().toLowerCase()){case"alp":return{x:i,y:t,z:n};case"apl":return{x:i,y:n,z:t};case"pla":return{x:n,y:t,z:i};case"pal":return{x:n,y:i,z:t};case"lpa":return{x:t,y:n,z:i};default:return{x:t,y:i,z:n}}}const Ti={lpa:"sdbarf",lap:"sdrfba",pal:"rfsdba",apl:"basdrf",lap:"rfbasd",alp:"barfsd"};function parselavs(e,t,i=0,n=0,s=0,r="",o="",a=""){let A=muClComments(r);e=e.trim().toLowerCase();let l=[];for(let r of A){let a=/^([({}):$\w.\\/]+)[\s;,]*(.*)?$/im.exec(r);if(a&&a[1]){let r={name:a[1].trim().toLowerCase(),...getorientate(e,i,n,s),id:t,facce:o};if(a[2]){let e=getcolonne(a[2]);for(let t of e){let e=t.indexOf("=");e>0&&(r[t.slice(0,e).trim()]=t.slice(e+1).trim())}}l.push(r)}}return!l.length&&a&&l.push({name:a,...getorientate(e,i,n,s),id:t,facce:o}),l}function getemitter(t){let{d:i,name:n,x:s,y:r,z:o,lavs:a="",ids:A="",faces:l=null,size:c=5}=t;A=getcolonne(clean(A,!0));const h=new e.Object3D;if(h.position.set(s,r,o),h.userData={emitter:!0,lavs:a,ids:A,faces:l,size:c,name:n},i){const t=new e.SphereGeometry(c||5,8,8),i=new e.MeshBasicMaterial({color:16711680}),n=new e.Mesh(t,i);h.add(n)}return h.layers.set(29),h}function getreceiver(t,i){t.gmats.__istask=1;let{d:n,ori:s="LAP",x:r=0,y:o=0,z:a=0,sx:A=0,sy:l=0,sz:c=0,tipo:h="",start:p="",end:u=""}=i;h=clean(h,!0);const g=new e.Object3D;if(g.position.set(r/2+(A||0),o/2+(l||0),a/2+(c||0)),g.userData={receiver:!0,ori:(s||"").trim().toLowerCase(),x:r,y:o,z:a,tipo:h,start:p,end:u},n){const t=new e.BoxGeometry(r,o,a),i=new e.Mesh(t,Mi);i.position.set(0,0,0),g.add(i)}return g.layers.set(29),g}function calcolatasks(t){const i=new WeakMap,n=new WeakMap;function boxBoxIntersects(e,t,i,n,s){return e.x+t>0&&e.x-t<i&&e.y+t>0&&e.y-t<n&&e.z+t>0&&e.z-t<s}function getFacceToccate(e,t,i,n,s,r,o){const a=[];function addfaccia(e){o&&!o.includes(e)||a.push(e)}return Math.abs(t.y-0)<i&&addfaccia(e[0]),Math.abs(t.y-s)<i&&addfaccia(e[1]),Math.abs(t.x-0)<i&&addfaccia(e[2]),Math.abs(t.x-n)<i&&addfaccia(e[3]),Math.abs(t.z-0)<i&&addfaccia(e[4]),Math.abs(t.z-r)<i&&addfaccia(e[5]),a.join("")}function getEmitterWorldPosition(t){if(!i.has(t)){const n=new e.Vector3;t.getWorldPosition(n),i.set(t,n)}return i.get(t)}function getReceiverWorldMatrixInverse(e){if(!n.has(e)){const t=e.matrixWorld.clone().invert();n.set(e,t)}return n.get(e)}t.updateMatrixWorld(!0);const s=[],r=[];!function scan(e){e.userData?.receiver&&s.push(e),e.userData?.emitter&&r.push(e),e.children&&e.children.forEach(scan)}(t);let o=[];for(const t of s){const{mat:i,ori:n,x:s,y:a,z:A,start:l,end:c,tipo:h,size:p}=t.userData;let u=Ti[n];u||(n="apl",u=Ti[n]);let g={id:i,...getorientate(n,s,a,A),tipo:h,ori:n,lavs:[]};l&&g.lavs.push(...parselavs(n,"_start",0,0,0,l,"",""));const d=getReceiverWorldMatrixInverse(t);for(const t of r){if("string"==typeof h&&""!==h){const e=t.userData.ids;if(Array.isArray(e)&&e.length>0&&!e.includes("*")&&!e.includes(h))continue}const i=getEmitterWorldPosition(t).clone().applyMatrix4(d).clone().add(new e.Vector3(s/2,a/2,A/2));if(!boxBoxIntersects(i,t.userData.size??0,s,a,A))continue;const r=getFacceToccate(u,i,t.userData.soglia??2,s,a,A,t.userData.faces);r&&r.length&&g.lavs.push(...parselavs(n,t.userData.name,i.x,i.y,i.z,t.userData.lavs,r,"nd"))}c&&g.lavs.push(...parselavs(n,"_end",0,0,0,c,"","")),g.lavs.length&&o.push(g)}return o}function getbb(t,i=!1){if(!i&&t.userData.bb)return t.userData._boundingbox;const n=(new e.Box3).setFromObject(t);return t.userData._boundingbox=n,n}function setorigine(t,i=0,n=0,s=0){const r=getbb(t).min,o=new e.Group;return o.add(t),t.position.sub(new e.Vector3(r.x+i,r.y+n,r.z+s)),o}function scalaoggetto(t,i,n={}){const s=getbb(i),r=new e.Vector3;s.getSize(r);const o=s.min,a=["x","y","z","u","v"],A={};for(let e of a){let t=n[e];if(void 0===t)A[e]={s:1};else if("number"==typeof t)A[e]={s:t};else if("object"==typeof t){let i=t.s??1,n="x"===e?r.x:"y"===e?r.y:r.z,s="x"===e?o.x:"y"===e?o.y:o.z;void 0!==t.distperc&&(t.dist=n*t.distperc),void 0!==t.dist&&(i=(n+t.dist)/n);let a=t.p1?t.p1+s:void 0,l=t.p2?t.p2+s:void 0;void 0!==t.p1perc&&(a=s+n*t.p1perc),void 0!==t.p2perc&&(l=s+n*t.p2perc),A[e]={s:i,p1:a,p2:l}}}if(a.every((e=>void 0===A[e].p1||void 0===A[e].p2))){if(1===A.x.s&&1===A.y.s&&1===A.z.s)return i;const t=new e.Group;return t.scale.set(A.x.s,A.y.s,A.z.s),t.add(i),t}const l=hash(`${i.uuid}|${JSON.stringify(A)}`);if(t.meshes[l])return t.meshes[l];const c={};a.forEach((e=>{const{s:t,p1:i,p2:n}=A[e];c[e]=!(1===t&&void 0===i&&void 0===n)}));const h=i.clone(!0);return delete h?.userData._boundingbox,h.traverse((e=>{if(e.isMesh){const t=e.scale.clone();e.geometry=e.geometry.clone();const i=e.geometry.attributes.position,n=e.geometry.attributes.uv,trasf=(e,t)=>{if(!c[t])return e;const{s:i,p1:n,p2:s}=A[t];if(void 0===n||void 0===s)return e*i;const r=s*i-s;if(e<n)return e;if(e>=s)return e+r;return n+(e-n)*((s-n+r)/(s-n))};if(i&&(c.x||c.y||c.z)){const t=i.array;for(let e=0;e<t.length;e+=3)c.x&&(t[e]=trasf(t[e],"x")),c.y&&(t[e+1]=trasf(t[e+1],"y")),c.z&&(t[e+2]=trasf(t[e+2],"z"));i.needsUpdate=!0,e.geometry.computeVertexNormals()}if(n&&(c.u||c.v)){const e=n.array;for(let t=0;t<e.length;t+=2)c.u&&(e[t]=trasf(e[t],"u")),c.v&&(e[t+1]=trasf(e[t+1],"v"));n.needsUpdate=!0}e.scale.set(t.x*A.x.s,t.y*A.y.s,t.z*A.z.s)}})),t.meshes[l]=h,h}function posiziona(t,i={}){let n=new e.Group;if(t){let s=function deepclone(e){if(!e)return null;const t=e.clone();return function checkchildren(e,t){if(e.onBeforeRender&&(t.onBeforeRender=e.onBeforeRender),e.onAfterRender&&(t.onAfterRender=e.onAfterRender),e.userData&&(t.userData={...e.userData}),e.children||e.children.length)for(let i=0;i<e.children.length;i++)checkchildren(e.children[i],t.children[i])}(e,t),t}(t),r=s,{noingombro:o=!1,marker:a="",markerid:A="",marklink:l="",sl:c=0,sa:h=0,sp:p=0,ax:u=0,ay:g=0,az:d=0,scale:f=1,scx:m=f,scy:I=f,scz:b=f,emitters:y,emittersname:C,order:B,ignoreTraverse:E,hideable:x,move:w}=i;if("number"==typeof B&&s.traverse((e=>{e.isMesh&&(e.renderOrder=B)})),n.position.set(c,h,p),n.rotation.set(u*Ue,g*Ue,d*Ue),n.scale.set(m,I,b),!w?.annulla){if(w){function managemove(t,i){let{l:n=0,a:s=0,p:r=0,rot:o=0}=t,a=new e.Group;return a.position.set(n,s,r),a.rotation.set(0,o*Ue,0),a.add(i),a.userData.ismove=!0,a.userData.move=t,a}r=managemove(w,s)}n.add(r)}if(a&&A&&(n.userData.marker=a,n.userData.markerid=`#mk_${A||""}`,n.userData.marklink=l),o&&(n.userData.noingombro=!0),E&&(n.userData.ignoreTraverse=!0),y&&y.length)for(let v of y)v.name=v.name||C,n.add(getemitter(v));x&&(n.userData.hideable=!0)}return n.updateMatrixWorld(!0),n}const Li=e.DoubleSide;let ki=new e.LineBasicMaterial({color:16711680,transparent:!1,opacity:1}),_i=new e.LineBasicMaterial({color:11579568,transparent:!1,opacity:1});const Ri=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:Li}),Fi=new e.MeshStandardMaterial({color:8421504,roughness:.5,metalness:.4,side:Li}),Ni=new e.MeshStandardMaterial({color:11579568,roughness:.5,metalness:.4,side:Li}),Oi=new e.MeshStandardMaterial({color:16711680,roughness:.5,metalness:.4,side:Li}),Gi=new e.MeshStandardMaterial({color:1982639,roughness:.5,metalness:.4,side:Li}),Yi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:Li}),Ui=new e.MeshStandardMaterial({color:0,roughness:.5,metalness:.4,side:Li}),Xi=.001;function groupfromgeometry(t,i,n,s,r,o,a){let A=new e.Group;A.position.set(n,s,r),A.name=o;const l=new e.Mesh(t,i);l.name=o,l.castShadow=!0,l.receiveShadow=!0,l.layers.set(a);const c=new e.EdgesGeometry(t),h=new e.LineSegments(c,ki);return h.layers.set(30),A.add(l),A.add(h),A}function edgesfromgeometry(t,i=30){return getlinesgeom(new e.EdgesGeometry(t,40),i)}function getlinesgeom(t,i=30){const n=new e.LineSegments(t,ki);return n.layers.set(i),n}function getmesh(t,i,n=1,s=!1){let r=new e.Mesh(t,s?i.clone():i);return r.castShadow=!0,r.receiveShadow=!0,r.layers.set(n),r}function get3dshape(t,i,n){if(!t||t.length<3)return new e.BufferGeometry;const s=[];for(let e=0;e<t.length;e++){const i=t[e],n=t[(e+1)%t.length];s.push(i.x,0,i.y),s.push(n.x,0,n.y)}const r=new e.BufferGeometry;r.setAttribute("position",new e.Float32BufferAttribute(s,3));let o=new e.LineSegments(r,i);return o.layers.set(n),o}function creategroup(t,i={}){let{ignoreTraverse:n}=i,s=new e.Group;return s.name=t||"$$",n&&(s.userData.ignoreTraverse=!0),s}function svuotanodo(e){!function _dispose(e){if(e.children.length){[...e.children].forEach((t=>{_dispose(t),e.remove(t)}))}e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach((e=>e.dispose())):e.material.dispose())}(e)}function deletegroup(e,t){if(!e?.children)return;let i=e.children.find((e=>e.name==t));if(i){for(;i.children.length>0;){const e=i.children[0];i.remove(e)}i.parent&&i.parent.remove(i),i=null}}function randombasemat(){const t=new e.LineBasicMaterial,i=new e.Color;return i.setHSL(Math.random(),.7,.4),t.color=i,t}function getspriteid(t,i=5,n="#000"){const s=document.createElement("canvas"),r=s.getContext("2d");r.font="48px sans-serif";const o=Math.ceil(r.measureText(t).width)+16;s.width=o,s.height=64,r.font="48px sans-serif",r.textBaseline="middle",r.fillStyle="rgba(0,0,0,0)",r.fillRect(0,0,o,64),r.fillStyle=n,r.fillText(t,8,32);const a=new e.CanvasTexture(s);a.needsUpdate=!0,a.minFilter=e.LinearFilter;const A=new e.SpriteMaterial({map:a,transparent:!0}),l=new e.Sprite(A),c=i/20;return l.scale.set(o*c,64*c,1),l}function getline(t,i,n=null){const s=(new e.BufferGeometry).setFromPoints([new e.Vector3(t.p1.x,0,t.p1.y),new e.Vector3(t.p2.x,0,t.p2.y)]);let r=new e.Line(s,n||randombasemat());if(i){let e=getspriteid(i||"",8,"#F00");e.position.set((t.p1.x+t.p2.x)/2,0,(t.p1.y+t.p2.y)/2),r.add(e)}return r}function getpoint(t,i,n=null,s=5){let r;const o=new e.SphereGeometry(s,8,8);if(r=new e.Mesh(o,n||randombasemat()),i){let e=getspriteid(i||"",s);e.position.set(1.2*s,0,1.2*s),r.add(e)}return r.position.set(t.x,0,t.y),r}async function smat(t,i,n={}){n||(n={});let s=hash(i+JSON.stringify(n));return t.smats[s]||(n.glass?t.smats[s]=await async function smatglass(t,i={}){let n=new e.Color("#080808ff");try{n=new e.Color(t)}catch(e){console.log(e)}let{metalness:s=0,roughness:r=.1,ior:o=1.5,envMapIntensity:a=1,transmission:A=1,specularIntensity:l=1,specularColor:c=16777215,opacity:h=1,thickness:p=.2,clearcoat:u=1,clearcoatRoughness:g=.1,dispersion:d=0}=i;return new e.MeshPhysicalMaterial({color:n,metalness:s,roughness:r,ior:o,envMapIntensity:a,transmission:A,specularIntensity:l,specularColor:c,opacity:h,side:e.DoubleSide,transparent:!0,thickness:p,clearcoat:u,clearcoatRoughness:g,dispersion:d})}(i,n):t.smats[s]=await async function smat0(t,i,n={}){let s=i,r="",o=!1;function getFilesToLoad(e,t){let i=[],n=t.match(/^([^(]+)\((([a-zA-Z0-9_\-/]+)_([a-z]+)|([a-z]+))\)$/);if(!n)return{base:t,files:i};let s=n[1],r=!1,o=n[3]||s,a=n[4]||n[5]||"";!a.includes("h")&&e||i.push({suff:"",file:`${o}.webp`,cs:!0});for(let e of a)"t"==e?(r=!0,n[3]&&zi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!1})):"h"!=e&&zi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!!["","e"].includes(e)});return{base:s,files:i,transparent:r}}i.startsWith("#")&&(o=!0,/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})(?=$|[[(])/.test(i)||(i=i.slice(1)));let a=i;const A=i.match(/^(.*)\[([^\]]+)\]$/);A&&(a=A[1],r=A[2]);const l={};r&&r.split(/[,;]/).forEach((e=>{let[t,i]=e.split("=").map((e=>e.trim()));void 0!==i&&(["e"].includes(t)?l[t]=i.startsWith("0x")?parseInt(i):parseFloat(i):isNaN(parseFloat(i))?l[t]=i:l[t]=parseFloat(i))}));let c=n.rot,h=parseFloat(n.s)||1;delete n.s;let p={...n};for(let e in l)if(qi[e])for(let t of qi[e])p[t]=l[e];let u=!!p?.transparent,g=(p.sx??p.s??l.sx??l.s??1)*h,d=(p.sy??p.s??l.sy??l.s??1)*h,f=Number((l.rot??0)+(c??0))*Ue;try{let n={roughness:p.roughness??.5,metalness:p.metalness??0,side:e.DoubleSide,envMapIntensity:p.env??1};if(void 0!==p.normalScale){let t=Number(p.normalScale);isNaN(t)||0===t||(n.normalScale=new e.Vector2(t,t))}let s=!1,r=!1;if(i.includes("(")||o){let{base:i,files:A,transparent:l}=getFilesToLoad(o,a);if(u=l,A.some((e=>"n"===e.suff))&&(A=A.filter((e=>"h"!==e.suff))),0===p.roughness&&(A=A.filter((e=>"r"!==e.suff))),0===p.metalness&&(A=A.filter((e=>"m"!==e.suff))),0===p.emissiveIntensity&&(A=A.filter((e=>"e"!==e.suff))),A&&A.length){let i=await Promise.all(A.map((e=>t.tex(e.file,g,d,f).catch((()=>null)))));for(let t=0;t<A.length;t++){let o=i[t];if(!o)continue;o.isTexture&&(o.colorSpace=A[t].cs?e.SRGBColorSpace:e.LinearSRGBColorSpace);let a=A[t].suff,{prop:l,extra:c}=zi[a];n[l]=o,"map"===l&&(n._hasMap=!0),"normalMap"===c?(s=!0,n.normalMap=o,delete o.colorSpace,o.needsUpdate=!0,n.normalScale=n.normalScale??new e.Vector2(1,1)):"bumpScale"===c?(r=!0,n.bumpMap=o):Array.isArray(c)&&c.includes("emissive")&&void 0!==p.emissiveIntensity&&0!==p.emissiveIntensity&&(n.emissive=p.emissive||16777215,n.emissiveIntensity=p.emissiveIntensity??1)}}o&&(n.color=new e.Color(i),n._hasColor=!0)}else if(a.includes(".")){let e=await t.tex(a,g,d,f);if(!e)return Ri;n.map=e,n._hasMap=!0}if(s&&r?delete n.bumpMap:r&&(n.bumpScale=p.bumpScale??.03),n.transparent=!!u,n.transparent&&(n.depthWrite=!1,n.opacity=p?.opacity??1),void 0!==p.brightness){let t=Number(p.brightness);!isNaN(t)&&t>0&&1!==t&&(n.color||(n.color=new e.Color(1,1,1)),n.color.multiplyScalar(t))}return n._hasMap&&!n._hasColor&&(n.color=new e.Color(1,1,1)),n._hasColor&&!n._hasMap&&delete n.map,delete n._hasColor,delete n._hasMap,new e.MeshStandardMaterial(n)}catch(e){return console.log("errore mat:",e.message,s),Ri}}(t,i,n)),t.smats[s]}const qi={s:["sx","sy"],sx:["sx"],sy:["sy"],rot:["rot"],br:["brightness"],r:["roughness"],m:["metalness"],h:["bumpScale"],n:["normalScale"],d:["bumpScale"],b:["bumpScale"],e:["emissiveIntensity"],ec:["emissive"],env:["envMapIntensity"],o:["opacity"],t:["transparent"],at:["alphaTest"]},zi={"":{prop:"map",extra:null},h:{},n:{prop:"normalMap",extra:null},a:{prop:"aoMap",extra:"aoMapIntensity"},r:{prop:"roughnessMap",extra:null},t:{prop:"alphaMap",extra:null},m:{prop:"metalnessMap",extra:null},e:{prop:"emissiveMap",extra:["emissive","emissiveIntensity"]}};async function extractTextures(e,t){const i={},n=[];function getName(e){i[e]=(i[e]||0)+1;let n=t;return e&&(n+=`_${e}`),i[e]>1&&(n+=i[e]),`${n}.webp`}return e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const[t,{prop:i}]of Object.entries(zi)){const s=e[i];if(s&&s.image&&!s._extracted){s._extracted=!0;let e,i=s.image;if(i.toBlob)e=new Promise((e=>i.toBlob(e,"image/webp")));else if(i instanceof ImageBitmap){const t=document.createElement("canvas");t.width=i.width,t.height=i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}else{if(!(i instanceof HTMLImageElement))continue;{const t=document.createElement("canvas");t.width=i.naturalWidth||i.width,t.height=i.naturalHeight||i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}}n.push(e.then((e=>new File([e],getName(t),{type:"image/webp"}))))}}}})),e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const{prop:t}of Object.values(zi)){const i=e[t];i&&i._extracted&&delete i._extracted}}})),Promise.all(n)}function uvswap(e,t=!1,i=!0){if(e&&e.attributes){const n=i?Xi:1,s=e.attributes.uv;if(s){const e=s.array;for(let s=0,r=e.length;s<r;s+=2)if(t){const t=e[s];e[s]=e[s+1]*n,e[s+1]=t*n}else i&&(e[s]*=n,e[s+1]*=n);s.needsUpdate=t||i}const r=e.attributes.uv2;if(r){const e=r.array;for(let i=0,s=e.length;i<s;i+=2)if(t){const t=e[i];e[i]=e[i+1]*n,e[i+1]=t*n}else e[i]*=n,e[i+1]*=n;r.needsUpdate=!0}e.index&&e.attributes?.position&&e.attributes?.normal&&e.attributes?.uv&&e.computeTangents()}}function getfakeshadow2(t,i,n){const s=(new e.Shape).moveTo(0,0).lineTo(t,0).lineTo(t,i).lineTo(0,i).lineTo(0,0),r=new e.ShapeGeometry(s),o=r.attributes.position,a=new Float32Array(2*o.count);for(let e=0;e<o.count;e++)a[2*e]=o.getX(e)/t,a[2*e+1]=o.getY(e)/i;r.setAttribute("uv",new e.BufferAttribute(a,2));const A=new e.MeshBasicMaterial({map:n,transparent:!0,alphaTest:.01,depthWrite:!1,side:e.DoubleSide}),l=new e.Mesh(r,A);return l.layers.set(9),l.rotation.x=Math.PI/2,l}function getfakeshadow(t,i,n){let s=`fk${i.key}${n}`,{p1:r,width:o,height:a}=i.dims();t.texture||(t.texture={});let A=t.texture[s];A||(A=function createBlurredShadowTextureFromPoints(t,i=256,n=32,s=.2,r,o,a){if(!o||!a||!t.pt||t.pt.length<2)return;const A=r.x,l=r.y,c=o,h=a,p=t.pt,u=2*n,g=document.createElement("canvas");g.width=i+2*u,g.height=i+2*u;const d=g.getContext("2d");d.save(),d.translate(u,u),d.scale(i/c,i/h),d.translate(-A,-l),d.filter=`blur(${n}px)`,d.beginPath(),d.moveTo(p[0].x,p[0].y);for(let e=1;e<p.length;e++)d.lineTo(p[e].x,p[e].y);d.closePath(),d.fillStyle=`rgba(0,0,0,${s})`,d.fill(),d.restore();const f=new e.CanvasTexture(g);return f.needsUpdate=!0,f}(i,256,32,n,r,o,a),t.texture[s]=A);const l=function pointsToShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i}(i.pt),c=new e.ShapeGeometry(l);!function applyUVtoShapeGeometry(t,i,n,s,r){const o=t.attributes.position,a=[];for(let e=0;e<o.count;e++){const t=o.getX(e),A=o.getY(e);a.push((t-i)/s,(A-n)/r)}t.setAttribute("uv",new e.Float32BufferAttribute(a,2))}(c,r.x,r.y,o,a);const h=new e.MeshBasicMaterial({map:A,transparent:!0,depthWrite:!1,side:e.DoubleSide});let p=new e.Mesh(c,h);return p.layers.set(9),p.rotation.x=Math.PI/2,p}function addmovpivot(t,i,n,s={},r=0,o=0,a=0){if(n=clean(n,!0),!t.movs[n])return i;t.movs[n];const A=new e.Vector3(r,o,a),l=0===A.lengthSq(),c=new e.Group;c.name=`pivot_${n}`;const h=new e.Group;if(h.name=`mov_${n}`,l)c.position.copy(i.position),c.quaternion.copy(i.quaternion),i.position.set(0,0,0),i.rotation.set(0,0,0);else{const t=A.clone().applyMatrix4(i.matrixWorld);c.position.copy(t);const n=A.clone().negate();i.position.add(n),c.quaternion.copy(i.getWorldQuaternion(new e.Quaternion)),i.rotation.set(0,0,0)}return h.add(i),c.add(h),s||(s={}),s.inmov=!1,s.key=n,s.dt=0,s.dtstart=!1,h.userData.mov={...s},c}function getmovimento(e,t=[]){let i=0,n=[];const _cleartimeline=()=>{n=[],i=0},_add=(e,t={})=>{e&&n.push({...t,time:e}),i=n.reduce(((e,t)=>e+(t.time||0)),0)};_cleartimeline(),t&&t.length&&t.forEach((e=>_add(e.time,e)));const _resetmov=e=>{const{mov:t}=e?.userData||{};t&&(t.inmov=!1,e.position.set(0,0,0),e.scale.set(1,1,1),e.rotation.set(0,0,0))};return{get tline(){return i},clear:_cleartimeline,add:_add,key:e,step:(e,t)=>{if(!e||!e.userData?.mov||!i)return;const{mov:s}=e.userData;if(!s.inmov)return;let r=s.dt-s.dtstart;if(s.ripeti)r%=i;else if(r>i)return void _resetmov(e);let o=0,a=0,A=0,l=0,c=0,h=0,p=1,u=1,g=1,d=null,f=0;for(let e of n){if(f+=e.time,r<f){const t=e.time>0?(r-(f-e.time))/e.time:1,_calc=(e,i=0)=>"function"==typeof e?e(s)*t:(e||i)*t;o+=_calc(e.x),a+=_calc(e.y),A+=_calc(e.z),p*=1+_calc(e.sx??e.s,0),u*=1+_calc(e.sy??e.s,0),g*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,h+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(s)*t:e.t*t);break}{const _calc=(e,t=0)=>"function"==typeof e?e(s):e||t;o+=_calc(e.x),a+=_calc(e.y),A+=_calc(e.z),p*=1+_calc(e.sx??e.s,0),u*=1+_calc(e.sy??e.s,0),g*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,h+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(s):e.t)}}e.position.set(o,a,A),e.scale.set(p,u,g),e.rotation.set(l,c,h),null!==d&&e.traverse((e=>{if(e.material){(Array.isArray(e.material)?e.material:[e.material]).forEach((e=>{e.transparent&&(e.opacity=1-d)}))}})),t&&t(e,r)},reset:_resetmov}}let Hi=null,ji=null;function getriferimento(t,i=0,n=0,s=0,r="rif"){"string"==typeof t&&(t={testo:t});let o=new e.Object3D;return o.position.set(i,n,s),r&&(o.name=r),o.userData={tipo:"rif",...t},o}function gettarghetta(t,i,n=100,s={}){const{noSfondo:r=!1,forcey:o=!1,coloreSfondo:a="white",coloreBordo:A="gray",spessoreBordo:l=2,padding:c=8,layer:h=21,size:p=24,fontFamily:u="Arial",raggioAngoli:g=10,order:d=0,variant:f,tooltip:m,billboard:I=!1}=s;i=(i||"").replaceAll("\\n","\n");let b=hash(`T:${a}|${A}|${u}|${c}|${l}|${g}|${r}|${i}|${f}|${I}`);const y=p??24;i=i.split("\n").map((e=>{let t=y,i=!1,n=!1,s="black";e=e.trim();let r=/^\s*#(\w)([bi]?)([\d.]*)[,;](.*)$/.exec(e);if(r)switch(t=parseFloat(r[3]||1)*y,"b"===r[2]&&(i=!0),"i"===r[2]&&(n=!0),e=r[4],r[1].toLowerCase()){case"r":s="red";break;case"g":s="green";break;case"b":s="blue";break;case"w":s="white";break;case"c":s="cyan"}return{testo:e,size:t,color:s,bold:i,italic:n}})).filter((e=>e.testo));const{canvas:C,context:B}=function getGlobalCanvas(){return Hi||(Hi=document.createElement("canvas"),ji=Hi.getContext("2d",{willReadFrequently:!0})),{canvas:Hi,context:ji}}();let E=0,x=2*c;i.forEach(((e,t)=>{const{testo:n,size:s=12}=e,r=2*s;B.font=`${r}px ${u}`;const o=B.measureText(n).width,a=r*(t==i.length-1?1:1.2);E=Math.max(E,o),x+=a})),E+=2*c;const w=x/E||1;let v,P;if(o?(P=n,v=Math.ceil(P/w)):(v=n,P=Math.ceil(v*w)),!t.textures[b]){const n=Math.floor(E+2*l),s=Math.floor(x+2*l);(C.width<n||C.height<s)&&(C.width=Math.max(C.width,n),C.height=Math.max(C.height,s)),B.clearRect(0,0,n,s);const o=new e.Color(a),h=`rgb(${Math.floor(255*o.r)}, ${Math.floor(255*o.g)}, ${Math.floor(255*o.b)})`,p=new e.Color(A),d=`rgb(${Math.floor(255*p.r)}, ${Math.floor(255*p.g)}, ${Math.floor(255*p.b)})`,f=g;B.beginPath(),r||(drawRoundedRect(B,0,0,n,s,f+l/2),B.fillStyle=d,B.fill(),B.beginPath(),drawRoundedRect(B,l,l,n-2*l,s-2*l,f-l/2),B.fillStyle=h,B.fill());let m=c+l;i.forEach((e=>{const{testo:t,size:i=12,color:s="black",bold:r,italic:o}=e,a=2*i;B.font=`${r?"bold ":o?"italic ":""}${a}px ${u}`,B.fillStyle=s,B.textAlign="center",B.textBaseline="top",B.fillText(t,n/2,m),m+=1.2*a}));const I=B.getImageData(0,0,n,s),y=new e.DataTexture(I.data,I.width,I.height,e.RGBAFormat);y.needsUpdate=!0,y.flipY=!0,y.minFilter=e.LinearFilter,y.magFilter=e.LinearFilter,t.textures[b]=y}const D=new e.MeshBasicMaterial({map:t.textures[b],transparent:!0,alphaTest:.5,side:Li}),M=new e.PlaneGeometry(v,P),S=new e.Mesh(M,D);return S.layers.set(h),S.renderOrder=d,S.userData={dimx:v,dimy:P,noingombro:!0},f&&(S.userData.pickvariant=!0,S.userData.variant=f,S.userData.tooltip=m),I&&(S.up.set(0,0,1),S.layers.set(21),S.onBeforeRender=(e,t,i)=>{S.quaternion.copy(i.quaternion)}),S}function drawRoundedRect(e,t,i,n,s,r){r=Math.min(r,Math.min(n/2,s/2)),e.moveTo(t+r,i),e.lineTo(t+n-r,i),e.quadraticCurveTo(t+n,i,t+n,i+r),e.lineTo(t+n,i+s-r),e.quadraticCurveTo(t+n,i+s,t+n-r,i+s),e.lineTo(t+r,i+s),e.quadraticCurveTo(t,i+s,t,i+s-r),e.lineTo(t,i+r),e.quadraticCurveTo(t,i,t+r,i),e.closePath()}function getquota(t,i,n,s,r,o,a={}){const{altezza:A=30,offset:l=0,piano:c="xy",layer:h=22,hideable:p=!1,delta:u=5,spessoreLinea:g=3}=a,pp=(e,t)=>"xz"===c?[e,0,t]:"yz"===c?[0,e,t]:[e,t,0],d=new e.Group;d.name="quota",p&&(d.userData.hideable=!0);const f=r-n,m=o-s,I=Math.sqrt(f*f+m*m),b=Math.atan2(m,f);i||(i="$$"),i.includes("$$")&&(i=i.replace("$$",`${I.toFixed(1)}`));let y=i.split("\n").length;const C=-Math.sin(b)*l,B=Math.cos(b)*l,E=gettarghetta(t,i,2*A*y,{noSfondo:!0,layer:h,forcey:!0}),{dimx:x,dimy:w}=E.userData;function getCilindro(i,n,s){const r=(new e.Vector3).subVectors(n,i),o=r.length();let a,A=hash(`c:${s}|${o}`);t.geo[A]?a=t.geo[A]:(a=new e.CylinderGeometry(s/2,s/2,o,3,1,!0),t.geo[A]=a);const l=new e.Mesh(a,Ui);l.position.copy(i).add(r.multiplyScalar(.5));const c=(new e.Vector3).copy(n);return l.lookAt(c),l.rotateX(Math.PI/2),l}if(x>I-u){E.position.set(I/2,2*A,0);const t=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(I,0)),g);d.add(t)}else{const t=x+u,i=(I-t)/2,n=i+t,s=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(i,0)),g);d.add(s);const r=getCilindro(new e.Vector3(...pp(n,0)),new e.Vector3(...pp(I,0)),g);d.add(r),E.position.set(...pp(I/2,0))}const v=l>A/2?-l:-A/2,P=-l>A/2?-l:A/2,D=new e.Vector3(...pp(0,v)),M=new e.Vector3(...pp(0,P)),S=new e.Vector3(...pp(I,v)),T=new e.Vector3(...pp(I,P)),L=getCilindro(D,M,g);d.add(L);const k=getCilindro(S,T,g);return d.add(k),E.userData.updateOrientation=function(e){e&&this.quaternion.copy(e.quaternion)},d.add(E),d.userData.noingombro=!0,"xy"===c?(d.position.set(n+C,s+B,0),d.rotation.z=b):"xz"===c?(d.position.set(n+C,0,s+B),d.rotation.y=-b):"yz"===c&&(d.position.set(0,n+C,s+B),d.rotation.x=b),d.layers.set(h||22),d}function creagizmo(t={}){const i=100*(t.size??1),n=t.picksize??1.6,s={x:t?.colors?.x??16711680,y:t?.colors?.y??65280,z:t?.colors?.z??255,plane:t?.colors?.plane??8388736,rot:t?.colors?.rot??8421504},r=new e.Group;r.name="gizmo";const mat=(t,i=1)=>new e.MeshBasicMaterial({color:t,transparent:i<1,opacity:i,depthWrite:!1,toneMapped:!1,depthTest:!1});function makeaxis(t,s){const r=new e.Group;r.name="ax_"+t;const o=new e.Mesh(new e.CylinderGeometry(.02*i,.02*i,.8*i,8),mat(s));o.position.y=.4*i;const a=new e.Mesh(new e.ConeGeometry(.05*i,.2*i,12),mat(s));a.position.y=i;const A=new e.Mesh(new e.CylinderGeometry(.08*i*n,.08*i*n,1.2*i,6),mat(s,0));return A.position.y=.6*i,r.add(o,a,A),"x"===t&&(r.rotation.z=-Math.PI/2),"z"===t&&(r.rotation.x=Math.PI/2),r.userData={kind:"gizmo-handle",type:"axis",axis:t},r}const o=makeaxis("x",s.x),a=makeaxis("y",s.y),A=makeaxis("z",s.z),l=function makeplane(){const t=new e.Group;t.name="pl_xz";const n=.6*i,r=.25*n,o=.4*i,a=.4*-i,A=new e.Shape;A.moveTo(o-n/2+r,a-n/2),A.lineTo(o+n/2-r,a-n/2),A.quadraticCurveTo(o+n/2,a-n/2,o+n/2,a-n/2+r),A.lineTo(o+n/2,a+n/2-r),A.quadraticCurveTo(o+n/2,a+n/2,o+n/2-r,a+n/2),A.lineTo(o-n/2+r,a+n/2),A.quadraticCurveTo(o-n/2,a+n/2,o-n/2,a+n/2-r),A.lineTo(o-n/2,a-n/2+r),A.quadraticCurveTo(o-n/2,a-n/2,o-n/2+r,a-n/2);const l=new e.ShapeGeometry(A),c=new e.Mesh(l,mat(s.plane,.35));c.rotation.x=-Math.PI/2,c.position.y=.001;const h=new e.Mesh(l,mat(s.plane,0));return h.rotation.copy(c.rotation),h.position.copy(c.position),t.add(c,h),t.userData={kind:"gizmo-handle",type:"plane",plane:"xz"},t}(),c=function makerot(){const t=new e.Group;t.name="rot_y";const n=.9*i*1.5,r=.025*i,o=new e.Mesh(new e.TorusGeometry(n,r,8,32,Math.PI/3),mat(s.rot));o.rotation.x=Math.PI/2;const a=Math.PI/3,A=new e.Mesh(new e.ConeGeometry(.06*i,.15*i,10),mat(s.rot));A.position.set(n*Math.cos(0),0,n*Math.sin(0));let l=new e.Vector3(-Math.sin(0),0,Math.cos(0)).normalize().negate();A.quaternion.setFromUnitVectors(new e.Vector3(0,1,0),l);const c=new e.Mesh(new e.ConeGeometry(.06*i,.15*i,10),mat(s.rot));c.position.set(n*Math.cos(a),0,n*Math.sin(a));let h=new e.Vector3(-Math.sin(a),0,Math.cos(a)).normalize();c.quaternion.setFromUnitVectors(new e.Vector3(0,1,0),h);const p=new e.Mesh(new e.TorusGeometry(n,4*r,6,16,Math.PI/3),mat(s.rot,0));return p.rotation.copy(o.rotation),t.add(o,A,c,p),t.userData={kind:"gizmo-handle",type:"rot",axis:"y"},t.rotation.y=-.08333333333333333*Math.PI,t}();return r.add(o,a,A,l,c),r.userData={kind:"gizmo",handles:{x:o,y:a,z:A,xz:l,roty:c}},r.setpos=e=>r.position.copy(e),r.setvisible=(e={})=>{void 0!==e.x&&(o.visible=e.x),void 0!==e.y&&(a.visible=e.y),void 0!==e.z&&(A.visible=e.z),void 0!==e.xz&&(l.visible=e.xz),void 0!==e.roty&&(c.visible=e.roty)},r}function fillNoise(t,i,n={}){let{scale:s=8,octaves:r=3,persistence:o=.5,seed:a=0,contrast:A=1,color1:l="#000000",color2:c="#ffffff",alpha1:h=1,alpha2:p=1}=n;const u=new e.Color(l),g=new e.Color(c),fade=e=>e*e*e*(e*(6*e-15)+10),lerp=(e,t,i)=>e+(t-e)*i,d=i,f=new Uint16Array(2*d);let m=0|Math.floor(65536*a);for(let e=0;e<d;e++)f[e]=e;for(let e=0;e<d;e++){const t=Math.floor((m^=m<<13,m^=m>>17,m^=m<<5,(m<0?1+~m:m)%65536/65536*d));[f[e],f[t]]=[f[t],f[e]]}for(let e=0;e<d;e++)f[d+e]=f[e];const I=[[1,1],[-1,1],[1,-1],[-1,-1],[1,0],[-1,0],[0,1],[0,-1]];function grad(e,t){const i=f[(f[e%d]+t)%d]%8;return I[i]}function perlin(e,t,i,n){const s=Math.floor(e)%i,r=Math.floor(t)%n,o=e-Math.floor(e),a=t-Math.floor(t),A=grad(s,r),l=grad(s+1,r),c=grad(s,r+1),h=grad(s+1,r+1),p=A[0]*o+A[1]*a,u=l[0]*(o-1)+l[1]*a,g=c[0]*o+c[1]*(a-1),d=h[0]*(o-1)+h[1]*(a-1),f=fade(o),m=fade(a);return lerp(lerp(p,u,f),lerp(g,d,f),m)}let b=1/0,y=-1/0;const C=new Float32Array(i*i);for(let e=0;e<i;e++)for(let t=0;t<i;t++){let n=t/i*s,a=e/i*s,A=1,l=1,c=0,h=0;for(let e=0;e<r;e++){c+=perlin(n*l,a*l,d/l,d/l)*A,h+=A,A*=o,l*=2}let p=c/h;C[e*i+t]=p,p<b&&(b=p),p>y&&(y=p)}const B=1/(y-b);for(let e=0;e<i;e++)for(let n=0;n<i;n++){let s=(C[e*i+n]-b)*B;s=Math.pow(s,A);const r=u.r+(g.r-u.r)*s,o=u.g+(g.g-u.g)*s,a=u.b+(g.b-u.b)*s,l=0,c=4*(e*i+n);t[c]=Math.floor(255*r),t[c+1]=Math.floor(255*o),t[c+2]=Math.floor(255*a),t[c+3]=Math.floor(255*l)}}function texgen(t,i,n=256,s={}){[16,32,64,128,256,512,1024].includes(n)||(n=256);let r=hash(`gen|${i}|${n}|${JSON.stringify(s)}`);if(!t[r]){const o=new Uint8Array(n*n*4);switch(i){case"wood":{let e={...s};e.scale=6+seeder(40,s.seed+"a")/10,e.octaves=s.octaves||3,e.persistence=.5+seeder(50,s.seed+"b")/100,e.rings=2+seeder(200,s.seed+"c")/100,e.distortion=.3+seeder(100,s.seed+"d")/300,e.color1=s.color1||"#442200",e.color2=s.color2||"#ffe0a0",fillNoise(o,n,e)}break;case"marble":{let e={...s};e.scale=s.scale||10,e.octaves=s.octaves||3,e.persistence=s.persistence||.6,e.rings=s.rings||1+seeder(100,s.seed+"m3")/50,e.distortion=s.distortion||.8+seeder(200,s.seed+"m4")/200,e.contrast=s.contrast||1.2,e.color1=s.color1||"#e0e0e0",e.color2=s.color2||"#909090",fillNoise(o,n,e)}break;case"glass":{let e={...s};e.scale=s.scale||32,e.octaves=s.octaves||2,e.persistence=s.persistence||.8,e.contrast=s.contrast||1,e.color1=s.color1||"rgba(255,255,255,0.2)",e.color2=s.color2||"rgba(255,255,255,0.6)",fillNoise(o,n,e)}break;case"gradient":case"pattern":break;default:fillNoise(o,n,s)}const a=new e.DataTexture(o,n,n,e.RGBAFormat);a.needsUpdate=!0,a.wrapS=a.wrapT=e.RepeatWrapping,a.repeat.set(.002,.002),a.center.set(.5,.5),t[r]=a}return t[r]}function getcilindro(t,i,n,s,r,o=Ri,a){a||(a={}),Array.isArray(o)||(o=[o]);const A=function cylgeometry(t,i,n,s,r=16){if(!n||!i)return null;let o=hash(`cy${i}|${n}|${s||n}|${r}`);if(!t.geo[o]){const a=new e.CylinderGeometry(s||n,n,i,r);t.geo[o]=a}return t.geo[o]}(t,n,s,r,a.sides||16);let l=new e.Group;switch((i||"").trim().toUpperCase()){case"X":case"L":l.position.set(n/2,0,0),l.rotation.z=Math.PI/2;break;case"Z":case"P":l.position.set(0,0,n/2),l.rotation.x=Math.PI/2;break;default:l.position.set(0,n/2,0)}if(A){if(!a.nolines){let e=edgesfromgeometry(A);l.add(e)}uvswap(A,a.uvswap,!1);const e=o[0]||Ri,t=o[1]||e,i=o[2]||e;l.add(getmesh(A,[e,t,i]))}return l}function facesettile(e,t,i,n){if(t>1||i>1){let s=n%(t=t??1);const r=1/t,o=1/(i=i??1),a=s*r,A=1-((n-s)/t+1)*o,l=a+r,c=A+o,h=e.geometry.attributes.uv,p=[[a,c],[l,c],[a,A],[l,A]];for(let e=0;e<h.count;e++)h.setXY(e,p[e][0],p[e][1]);h.needsUpdate=!0}}function pickvariant(e,t,i,n,s,r,o={}){let a,{mat:A,testo:l,matover:c}=o;return A?(a=getface(e,t,i,A,o),c&&(c=c.clone(),c.depthTest=!1,c.depthWrite=!1,a.userData.matover=c)):(l=l||"xx",a=gettarghetta(e,l,t,o)),a.layers.disableAll(),a.layers.set(30),a.userData.pickvariant=!0,a.userData.variant=n,a.userData.value=s,a.userData.tooltip=r,a}function getface(t,i,n,s,r={}){let{repeat:o,order:a,center:A=!1,base:l=!1,billboard:c=!1}=r;const h=hash(`f:${i}|${n}|${o?1:0}|${l?1:0}`);if(!t.geo[h]){const s=new e.PlaneGeometry(i,n);let r=l?-.5:0;const a=s.attributes.uv;if(o)for(let e=0;e<a.count;e++)a.setXY(e,a.getX(e)*i/1e3,a.getY(e)*n/1e3);else{const e=[[0,1],[1,1],[0,0],[1,0]];for(let t=0;t<a.count;t++){const i=e[t];a.setXY(t,i[0]-r,i[1]-r)}}a.needsUpdate=!0,t.geo[h]=s}c&&((s=s.clone()).depthTest=!1,s.depthWrite=!1);const p=new e.Mesh(t.geo[h],s);if(p.name=c?"billboard":"face","number"==typeof a&&(p.renderOrder=a),A||p.position.set(i/2,n/2,0),s?.transparent&&p.layers.set(2),c){p.layers.disableAll(),p.layers.set(30),p.userData.billboard=!0;let t=new e.Quaternion,i=new e.Quaternion;p.onBeforeRender=function(e,n,s){this.getWorldQuaternion(t),this.parent?.getWorldQuaternion(i),this.quaternion.copy(s.quaternion),this.quaternion.premultiply(i.invert())}}return p}function getbox(t,i,n,s,r,o){r&&r.isMaterial||(o=r,r=void 0),o||(o={});let{center:a=!1,nolines:A,centerbase:l=!1,px:c=0,py:h=0,pz:p=0}=o;const u=new e.BoxGeometry(i,n,s),g=new e.Group;if(l?g.position.set(0,n/2,0):c||h||p?g.position.set(c||0,h||0,p||0):a||g.position.set(i/2,n/2,s/2),!A||!r){let e=edgesfromgeometry(u);g.add(e)}return r&&g.add(getmesh(u,r)),g}function getcyl(t,i,n,s,r){r||(r={});let{center:o=!1,nolines:a=!1,segments:A=16,top:l=-1,bottom:c=-1,heightSegments:h=1,openEnded:p=!1,thetaStart:u=0,thetaLength:g=2*Math.PI}=r;l<0&&(l=n),c<0&&(c=n);const d=new e.CylinderGeometry(l,c,i,A,h,p,u,g);uvswap(d,r.uvswap,!1);const f=getmesh(d,s||Ri),m=new e.Group;if(m.add(f),m.position.set(0,o?0:i/2,0),!a){let e=edgesfromgeometry(d);m.add(e)}return m}function getsphere(t,i,n,s){s||(s={});let{nolines:r,segmenti:o=16}=s,a=new e.Group;const A=new e.SphereGeometry(i,2*o,o);if(!r){let e=edgesfromgeometry(A);a.add(e)}return a.add(getmesh(A,n||Ri)),a}function makeShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}function getextrude(t,i,n=10,s=[],r=void 0,o={}){r&&r.isMaterial||(o=r,r=void 0),o=o??{};let{stonda:a,sx:A,sy:l,round:c,nolines:h}=o,p=hash(`${JSON.stringify(i)}|${n}|${JSON.stringify(o)}|${JSON.stringify(s)}`);A=A??a??0,l=l??a??0;let u=t.geo[p];if(!u){const r=makeShape(i);s.forEach((t=>r.holes.push(function makePath(t){const i=new e.Path;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}(t))));const a=A>0&&l>0;u=new e.ExtrudeGeometry(r,{depth:n,bevelEnabled:a,bevelSize:A,bevelThickness:l,bevelSegments:a?c?3:1:0,curveSegments:a?10:1}),t.geo[p]=u,uvswap(u,o.uvswap,!0)}let g=new e.Group;return g.add(new e.Mesh(u,r||Ri)),h||function extrudelines(t,i,n,s,r=3){const makeloop=(t,i)=>{if(!t||t.length<2)return null;const n=t.length,s=new Float32Array(3*(n+1));for(let e=0;e<=n;e++){const r=t[e%n],o=3*e;s[o]=r.x,s[o+1]=r.y,s[o+2]=i}const r=new e.BufferGeometry;return r.setAttribute("position",new e.BufferAttribute(s,3)),new e.Line(r,ki)},addring=e=>{let i=makeloop(e,-r);i&&(i.layers.set(30),t.add(i)),i=makeloop(e,s+r),i&&(i.layers.set(30),t.add(i))};addring(i);for(const e of n)addring(e)}(g,i,s,n,l),g}function getthorus(t,i,n=.2,s,r){r||(r={});let{center:o,nolines:a,segmenti:A=16,tubi:l=12}=r,c=new e.Group;const h=new e.TorusGeometry(i,n,l,2*A);if(c.position.set(0,o?0:i,0),!a){let e=edgesfromgeometry(h);c.add(e)}return c.add(getmesh(h,s||Ri)),c}function getluce(t,i,n="#ffffff",s=1){const r=i.pt;if(!r||!r.length)return null;const o=hash(`${i.key}|${n}|${s}`);if(!t.meshes[o]){const i=makeShape(r),a=new e.ShapeGeometry(i),A=new e.MeshStandardMaterial({color:new e.Color(n),emissive:new e.Color(n),emissiveIntensity:s,toneMapped:!1,transparent:!0,depthWrite:!1,side:e.DoubleSide,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:1}),l=new e.Mesh(a,A);l.layers.set(8),l.userData.isBloom=!0,t.meshes[o]=l,t.mustlight=!0}return t.meshes[o]}function getmarker(e,t,i,n,s,r,o={}){if(t&&i){o||(o={});let{markscale:a=.6,marklink:A,billboard:l}=o;o.markerid=t,o.marker=i,o.noingombro=!0;let c=getface(e,n*a,s*a,r,{order:1}),h=t;h.length>7&&(h=".."+h.slice(-6));let p=gettarghetta(e,`#w,${h}`,50,{noSfondo:!0,layer:11,billboard:l,forcey:!0});return c.add(posiziona(p,{sp:11,order:2})),o.center||(c=posiziona(c,{sl:n*(1-a)/2,sa:s*(1-a)/2})),c.layers.set(28),c.userData.marklink=A,posiziona(c,o)}}function toTrianglesDrawMode(e,s){if(s===t)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(s===i||s===n){let t=e.getIndex();if(null===t){const i=[],n=e.getAttribute("position");if(void 0===n)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<n.count;e++)i.push(e);e.setIndex(i),t=e.getIndex()}const n=t.count-2,r=[];if(s===i)for(let e=1;e<=n;e++)r.push(t.getX(0)),r.push(t.getX(e)),r.push(t.getX(e+1));else for(let e=0;e<n;e++)e%2==0?(r.push(t.getX(e)),r.push(t.getX(e+1)),r.push(t.getX(e+2))):(r.push(t.getX(e+2)),r.push(t.getX(e+1)),r.push(t.getX(e)));r.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=e.clone();return o.setIndex(r),o.clearGroups(),o}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",s),e}function pannellogeometry(t,i,n,s,r=0,o=0,a=0,A=0,l=0,c=2,h=!1){let p=hash(`pg--${i}|${n}|${s}|${r}|${o}|${a}|${A}|${l}|${c}|${h?1:0}`);if(i-=.01,n-=.01,s-=.01,!t.geo[p]){i-=2*l,n-=2*l,s-=2*l;let u=getshape();const g=[{x:A,y:0},{x:n-r,y:0},{x:n,y:r},{x:n,y:s-o},{x:n-o,y:s},{x:a,y:s},{x:0,y:s-a},{x:0,y:A}];u.addpt(g[0]),u.addpt(g[1]),r&&u.addpt(raccordabezier(g[0],g[1],g[2],g[3],c)),u.addpt(g[2]),u.addpt(g[3]),o&&u.addpt(raccordabezier(g[2],g[3],g[4],g[5],c)),u.addpt(g[4]),u.addpt(g[5]),a&&u.addpt(raccordabezier(g[4],g[5],g[6],g[7],c)),u.addpt(g[6]),u.addpt(g[7]),o&&u.addpt(raccordabezier(g[6],g[7],g[0],g[1],c)),u.removeduplicate(.01);let d=u.pt;const f=new e.Shape;f.moveTo(d[0].x,d[0].y);for(let e=1;e<d.length;e++)f.lineTo(d[e].x,d[e].y);f.lineTo(d[0].x,d[0].y);const m={depth:i,bevelEnabled:l>0,bevelThickness:l,bevelSize:l,bevelSegments:1};let I=new e.ExtrudeGeometry(f,m);I=function mergeVertices(e,t=1e-4){t=Math.max(t,Number.EPSILON);const i={},n=e.getIndex(),s=e.getAttribute("position"),r=n?n.count:s.count;let o=0;const a=Object.keys(e.attributes),A={},l={},c=[],h=["getX","getY","getZ","getW"],p=["setX","setY","setZ","setW"];for(let t=0,i=a.length;t<i;t++){const i=a[t],n=e.attributes[i];A[i]=new n.constructor(new n.array.constructor(n.count*n.itemSize),n.itemSize,n.normalized);const s=e.morphAttributes[i];s&&(l[i]||(l[i]=[]),s.forEach(((e,t)=>{const n=new e.array.constructor(e.count*e.itemSize);l[i][t]=new e.constructor(n,e.itemSize,e.normalized)})))}const u=.5*t,g=Math.log10(1/t),d=Math.pow(10,g),f=u*d;for(let t=0;t<r;t++){const s=n?n.getX(t):t;let r="";for(let t=0,i=a.length;t<i;t++){const i=a[t],n=e.getAttribute(i),o=n.itemSize;for(let e=0;e<o;e++)r+=~~(n[h[e]](s)*d+f)+","}if(r in i)c.push(i[r]);else{for(let t=0,i=a.length;t<i;t++){const i=a[t],n=e.getAttribute(i),r=e.morphAttributes[i],c=n.itemSize,u=A[i],g=l[i];for(let e=0;e<c;e++){const t=h[e],i=p[e];if(u[i](o,n[t](s)),r)for(let e=0,n=r.length;e<n;e++)g[e][i](o,r[e][t](s))}}i[r]=o,c.push(o),o++}}const m=e.clone();for(const t in e.attributes){const e=A[t];if(m.setAttribute(t,new e.constructor(e.array.slice(0,o*e.itemSize),e.itemSize,e.normalized)),t in l)for(let e=0;e<l[t].length;e++){const i=l[t][e];m.morphAttributes[t][e]=new i.constructor(i.array.slice(0,o*i.itemSize),i.itemSize,i.normalized)}}return m.setIndex(c),m}(I),uvswap(I,h,!0),t.geo[p]=I}return t.geo[p]}function getpannello(t,i,n,s,r,o,a,A){A||(A={});let l,c,h,{r:p,r1:u,r2:g,r3:d,r4:f,b:m,npt:I}=A;u=u||p||0,g=g||p||0,d=d||p||0,f=f||p||0,I=I||2,m=m||0,(m>=n/2||m>=s/2||m>=r/2)&&(m=0),l="L"==(i=i.trim().toUpperCase())[0]?n:"A"==i[0]?s:r,c="L"==i[1]?n:"A"==i[1]?s:r,h="L"==i[2]?n:"A"==i[2]?s:r;let b=new e.Group;if(!A.nolines){let t=edgesfromgeometry(new e.BoxGeometry(n,s,r));t.position.set(n/2,s/2,r/2),b.add(t)}let y=getmesh(pannellogeometry(t,l,c,h,u,g,d,f,m,I,!A.uvswap),[a||o||Yi,o||Oi]);y.name="pannello",y.layers.set(1);let C=y;return m&&(y.position.set(m,m,m),C=new e.Group,C.add(y)),y=function meshrotate(e,t,i=0,n=0,s=0){switch(e.trim().toUpperCase()){case"LPA":t.rotation.y=Math.PI/2,t.rotation.x=Math.PI,t.position.set(0,s,0);break;case"ALP":t.rotation.x=Math.PI/2,t.position.set(0,i,0);break;case"APL":t.rotation.x=-Math.PI/2,t.rotation.z=-Math.PI/2;break;case"PLA":break;case"PAL":t.rotation.z=Math.PI/2,t.position.set(s,0,0);break;case"LAP":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI/2}return t}(i,C,l,c,h),b.add(y),b}async function getpannello2(e,t,i,n,s,r,o=0){let a;switch((o<0||o>Math.max(i,n,s)/3)&&(o=0),t){case"lap":a=getextrude(e,getshape().fromrect(i-2*o,n-2*o).pt,s-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=s-o,a.position.y=n-o,a.rotation.x=Math.PI;break;case"alp":a=getextrude(e,getshape().fromrect(n-2*o,i-2*o).pt,s-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.position.y=n-o,a.rotation.z=-Math.PI/2;break;case"apl":a=getextrude(e,getshape().fromrect(n-2*o,s-2*o).pt,i-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.position.y=o,a.rotation.y=Math.PI/2,a.rotation.z=Math.PI/2;break;case"pal":a=getextrude(e,getshape().fromrect(s-2*o,n-2*o).pt,i-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=s-o,a.position.y=o,a.rotation.y=Math.PI/2;break;case"pla":a=getextrude(e,getshape().fromrect(s-2*o,i-2*o).pt,n-2*o,[],r,{round:o,stonda:o}),a.rotation.z=-Math.PI/2,a.rotation.x=-Math.PI/2,a.position.x=o,a.position.z=o,a.position.y=o;break;default:a=getextrude(e,getshape().fromrect(i-2*o,s-2*o).pt,n-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.rotation.x=Math.PI/2,a.position.y=n-o}return a}function earcut(e,t,i=2){const n=t&&t.length,s=n?t[0]*i:e.length;let r=linkedList(e,0,s,i,!0);const o=[];if(!r||r.next===r.prev)return o;let a,A,l;if(n&&(r=function eliminateHoles(e,t,i,n){const s=[];for(let i=0,r=t.length;i<r;i++){const o=linkedList(e,t[i]*n,i<r-1?t[i+1]*n:e.length,n,!1);o===o.next&&(o.steiner=!0),s.push(getLeftmost(o))}s.sort(compareXYSlope);for(let e=0;e<s.length;e++)i=eliminateHole(s[e],i);return i}(e,t,r,i)),e.length>80*i){a=1/0,A=1/0;let t=-1/0,n=-1/0;for(let r=i;r<s;r+=i){const i=e[r],s=e[r+1];i<a&&(a=i),s<A&&(A=s),i>t&&(t=i),s>n&&(n=s)}l=Math.max(t-a,n-A),l=0!==l?32767/l:0}return earcutLinked(r,o,i,a,A,l,0),o}function linkedList(e,t,i,n,s){let r;if(s===function signedArea(e,t,i,n){let s=0;for(let r=t,o=i-n;r<i;r+=n)s+=(e[o]-e[r])*(e[r+1]+e[o+1]),o=r;return s}(e,t,i,n)>0)for(let s=t;s<i;s+=n)r=insertNode(s/n|0,e[s],e[s+1],r);else for(let s=i-n;s>=t;s-=n)r=insertNode(s/n|0,e[s],e[s+1],r);return r&&equals(r,r.next)&&(removeNode(r),r=r.next),r}function filterPoints(e,t){if(!e)return e;t||(t=e);let i,n=e;do{if(i=!1,n.steiner||!equals(n,n.next)&&0!==area(n.prev,n,n.next))n=n.next;else{if(removeNode(n),n=t=n.prev,n===n.next)break;i=!0}}while(i||n!==t);return t}function earcutLinked(e,t,i,n,s,r,o){if(!e)return;!o&&r&&function indexCurve(e,t,i,n){let s=e;do{0===s.z&&(s.z=zOrder(s.x,s.y,t,i,n)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next}while(s!==e);s.prevZ.nextZ=null,s.prevZ=null,function sortLinked(e){let t,i=1;do{let n,s=e;e=null;let r=null;for(t=0;s;){t++;let o=s,a=0;for(let e=0;e<i&&(a++,o=o.nextZ,o);e++);let A=i;for(;a>0||A>0&&o;)0!==a&&(0===A||!o||s.z<=o.z)?(n=s,s=s.nextZ,a--):(n=o,o=o.nextZ,A--),r?r.nextZ=n:e=n,n.prevZ=r,r=n;s=o}r.nextZ=null,i*=2}while(t>1);return e}(s)}(e,n,s,r);let a=e;for(;e.prev!==e.next;){const A=e.prev,l=e.next;if(r?isEarHashed(e,n,s,r):isEar(e))t.push(A.i,e.i,l.i),removeNode(e),e=l.next,a=l.next;else if((e=l)===a){o?1===o?earcutLinked(e=cureLocalIntersections(filterPoints(e),t),t,i,n,s,r,2):2===o&&splitEarcut(e,t,i,n,s,r):earcutLinked(filterPoints(e),t,i,n,s,r,1);break}}}function isEar(e){const t=e.prev,i=e,n=e.next;if(area(t,i,n)>=0)return!1;const s=t.x,r=i.x,o=n.x,a=t.y,A=i.y,l=n.y,c=Math.min(s,r,o),h=Math.min(a,A,l),p=Math.max(s,r,o),u=Math.max(a,A,l);let g=n.next;for(;g!==t;){if(g.x>=c&&g.x<=p&&g.y>=h&&g.y<=u&&pointInTriangleExceptFirst(s,a,r,A,o,l,g.x,g.y)&&area(g.prev,g,g.next)>=0)return!1;g=g.next}return!0}function isEarHashed(e,t,i,n){const s=e.prev,r=e,o=e.next;if(area(s,r,o)>=0)return!1;const a=s.x,A=r.x,l=o.x,c=s.y,h=r.y,p=o.y,u=Math.min(a,A,l),g=Math.min(c,h,p),d=Math.max(a,A,l),f=Math.max(c,h,p),m=zOrder(u,g,t,i,n),I=zOrder(d,f,t,i,n);let b=e.prevZ,y=e.nextZ;for(;b&&b.z>=m&&y&&y.z<=I;){if(b.x>=u&&b.x<=d&&b.y>=g&&b.y<=f&&b!==s&&b!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;if(b=b.prevZ,y.x>=u&&y.x<=d&&y.y>=g&&y.y<=f&&y!==s&&y!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,y.x,y.y)&&area(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;b&&b.z>=m;){if(b.x>=u&&b.x<=d&&b.y>=g&&b.y<=f&&b!==s&&b!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;b=b.prevZ}for(;y&&y.z<=I;){if(y.x>=u&&y.x<=d&&y.y>=g&&y.y<=f&&y!==s&&y!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,y.x,y.y)&&area(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function cureLocalIntersections(e,t){let i=e;do{const n=i.prev,s=i.next.next;!equals(n,s)&&intersects(n,i,i.next,s)&&locallyInside(n,s)&&locallyInside(s,n)&&(t.push(n.i,i.i,s.i),removeNode(i),removeNode(i.next),i=e=s),i=i.next}while(i!==e);return filterPoints(i)}function splitEarcut(e,t,i,n,s,r){let o=e;do{let e=o.next.next;for(;e!==o.prev;){if(o.i!==e.i&&isValidDiagonal(o,e)){let a=splitPolygon(o,e);return o=filterPoints(o,o.next),a=filterPoints(a,a.next),earcutLinked(o,t,i,n,s,r,0),void earcutLinked(a,t,i,n,s,r,0)}e=e.next}o=o.next}while(o!==e)}function compareXYSlope(e,t){let i=e.x-t.x;if(0===i&&(i=e.y-t.y,0===i)){i=(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x)}return i}function eliminateHole(e,t){const i=function findHoleBridge(e,t){let i=t;const n=e.x,s=e.y;let r,o=-1/0;if(equals(e,i))return i;do{if(equals(e,i.next))return i.next;if(s<=i.y&&s>=i.next.y&&i.next.y!==i.y){const e=i.x+(s-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=n&&e>o&&(o=e,r=i.x<i.next.x?i:i.next,e===n))return r}i=i.next}while(i!==t);if(!r)return null;const a=r,A=r.x,l=r.y;let c=1/0;i=r;do{if(n>=i.x&&i.x>=A&&n!==i.x&&pointInTriangle(s<l?n:o,s,A,l,s<l?o:n,s,i.x,i.y)){const t=Math.abs(s-i.y)/(n-i.x);locallyInside(i,e)&&(t<c||t===c&&(i.x>r.x||i.x===r.x&&sectorContainsSector(r,i)))&&(r=i,c=t)}i=i.next}while(i!==a);return r}(e,t);if(!i)return t;const n=splitPolygon(i,e);return filterPoints(n,n.next),filterPoints(i,i.next)}function sectorContainsSector(e,t){return area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0}function zOrder(e,t,i,n,s){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*s|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-n)*s|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function getLeftmost(e){let t=e,i=e;do{(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next}while(t!==e);return i}function pointInTriangle(e,t,i,n,s,r,o,a){return(s-o)*(t-a)>=(e-o)*(r-a)&&(e-o)*(n-a)>=(i-o)*(t-a)&&(i-o)*(r-a)>=(s-o)*(n-a)}function pointInTriangleExceptFirst(e,t,i,n,s,r,o,a){return!(e===o&&t===a)&&pointInTriangle(e,t,i,n,s,r,o,a)}function isValidDiagonal(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function intersectsPolygon(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&intersects(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(e,t)&&(locallyInside(e,t)&&locallyInside(t,e)&&function middleInside(e,t){let i=e,n=!1;const s=(e.x+t.x)/2,r=(e.y+t.y)/2;do{i.y>r!=i.next.y>r&&i.next.y!==i.y&&s<(i.next.x-i.x)*(r-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==e);return n}(e,t)&&(area(e.prev,e,t.prev)||area(e,t.prev,t))||equals(e,t)&&area(e.prev,e,e.next)>0&&area(t.prev,t,t.next)>0)}function area(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function equals(e,t){return e.x===t.x&&e.y===t.y}function intersects(e,t,i,n){const s=sign(area(e,t,i)),r=sign(area(e,t,n)),o=sign(area(i,n,e)),a=sign(area(i,n,t));return s!==r&&o!==a||(!(0!==s||!onSegment(e,i,t))||(!(0!==r||!onSegment(e,n,t))||(!(0!==o||!onSegment(i,e,n))||!(0!==a||!onSegment(i,t,n)))))}function onSegment(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function sign(e){return e>0?1:e<0?-1:0}function locallyInside(e,t){return area(e.prev,e,e.next)<0?area(e,t,e.next)>=0&&area(e,e.prev,t)>=0:area(e,t,e.prev)<0||area(e,e.next,t)<0}function splitPolygon(e,t){const i=createNode(e.i,e.x,e.y),n=createNode(t.i,t.x,t.y),s=e.next,r=t.prev;return e.next=t,t.prev=e,i.next=s,s.prev=i,n.next=i,i.prev=n,r.next=n,n.prev=r,n}function insertNode(e,t,i,n){const s=createNode(e,t,i);return n?(s.next=n.next,s.prev=n,n.next.prev=s,n.next=s):(s.prev=s,s.next=s),s}function removeNode(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function createNode(e,t,i){return{i:e,x:t,y:i,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function unifyVertices(e,t,i){const n=new Map,s=[],r=[],o=[];for(let a=0;a<i.length;a++){const A=i[a],l=e[3*A+0],c=e[3*A+1],h=e[3*A+2],p=t[2*A+0],u=t[2*A+1],g=`${l},${c},${h}|${p},${u}`;if(n.has(g))o.push(n.get(g));else{const e=s.length/3;n.set(g,e),s.push(l,c,h),r.push(p,u),o.push(e)}}return{vertices:s,uvs:r,indices:o}}function infoestrudi(e,t,i,n,s){n||(n={}),i||(i=[]);let r=n.p0||0,o=Math.tan(n.coeffbase1*Ue||0),a=Math.tan(n.coeffbase2*Ue||0),A=t||n.p1||20,l=Math.tan(n.coefftop1*Ue||0),c=Math.tan(n.coefftop2*Ue||0),{mi:h,ma:p}=e.pt.reduce(((e,t)=>(e.mi.x=Math.min(e.mi.x,t.x),e.mi.y=Math.min(e.mi.y,t.y),e.ma.x=Math.max(e.ma.x,t.x),e.ma.y=Math.max(e.ma.y,t.y),e)),{mi:{x:1e9,y:1e9},ma:{x:-1e9,y:-1e9}}),u=0,g=1e9;function getpars(e){e.z1=getzeta(e.x,e.y,r,o,a,s),e.z2=getzeta(e.x,e.y,A,l,c,s),e.l=Math.abs(e.z2-e.z1)}for(let e of i)getpars(e);getpars(h),getpars(p);let d=[{x:h.x,y:h.y},{x:p.x,y:h.y},{x:p.x,y:p.y},{x:h.x,y:p.y}];for(let e of d)getpars(e),e.l>u&&(u=e.l),e.l<g&&(g=e.l);return{aini:n.coeffbase1||0,aini2:n.coeffbase2||0,afin:n.coefftop1||0,afin2:n.coefftop2||0,pts:i,mi:h,ma:p,rect:d,dimx:p.x-h.x,dimy:p.y-h.y,lnom:A-r,lmax:u,lmin:g,lmed:(u+g)/2}}function getzeta(e,t,i,n,s,r,o=!1){let a=e*n+t*s+i;if(r){let e=r.xfromy(-t,0,!0);o?a-=e:a=e}return a}function sidegeomfromshapes(t,i,n,s,r=!1,o=!1,a=!1){if(n&&s){if(n.length!==s.length)throw new Error("shapes with different length");if(n.length<2)throw new Error("I percorsi devono contenere almeno due punti ciascuno.");if(!t.geo[i]){const A=[],l=[],c=[],h=n.length,addpts=e=>{for(const t of e)A.push(t.x,t.y,t.z),a?l.push(t.v/1e3,t.u/1e3):l.push(t.u/1e3,t.v/1e3)},equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z,addindexquad=(e,t,i,n)=>{r?c.push(e,i,t,i,n,t):c.push(e,t,i,i,t,n)};addpts(n),addpts(s);for(let e=0;e<h-1;e++){const t=e+1;equalpos(n[e],n[t])||addindexquad(e,t,e+h,t+h)}const p=new e.BufferGeometry;if(o){let t=unifyVertices(A,l,c);p.setAttribute("position",new e.Float32BufferAttribute(t.vertices,3)),p.setAttribute("uv",new e.Float32BufferAttribute(t.uvs,2)),p.setIndex(t.indices)}else p.setAttribute("position",new e.Float32BufferAttribute(A,3)),p.setAttribute("uv",new e.Float32BufferAttribute(l,2)),p.setIndex(c);p.computeVertexNormals(),p.computeTangents?.(),t.geo[i]=p}return t.geo[i]}}function bottomgeomfromshape(t,i,n,s,r=0,o=0,a=0,A=null,l=!1,c=!1){let h=`bg:${r}|${o}${a}|${n.key}|${i}|${A?.key||""}|${c?1:0}`;for(let p of s)h=`${h}|${p.key}`;if(h=hash(h),!t.geo[h]){let u,g=[],d=[],f=n.pt.length;g=n.vec;const m=new e.BufferGeometry,I=[],b=[],y=[];function addvertexes(e,t){let n=I.length/3;for(let n=0;n<e.length;n++){const s=e[n],l=t[2*s],h=-t[2*s+1],p=getzeta(l,h,r,o,a,A,i);I.push(l,h,p),c?b.push(h/1e3,l/1e3):b.push(l/1e3,h/1e3)}for(let t=0;t<e.length;t+=3)i?y.push(t+n,t+n+2,t+n+1):y.push(t+n,t+n+1,t+n+2)}if(A){let C=n.sliceony(A);for(let B of C){let E=B.flatMap((e=>[e.x,e.y]));addvertexes(earcut(E,[]),E)}}else if(Array.isArray(s)&&s.length){for(let x of s)d.push(f),f+=x.pt.length,g=[...g,...x.vec];u=earcut(g,d),addvertexes(u,g)}else u=earcut(g),addvertexes(u,g);if(l){let w=unifyVertices(I,b,y);m.setAttribute("position",new e.Float32BufferAttribute(w.vertices,3)),m.setAttribute("uv",new e.Float32BufferAttribute(w.uvs,2)),m.setIndex(w.indices)}else m.setAttribute("position",new e.Float32BufferAttribute(I,3)),m.setAttribute("uv",new e.Float32BufferAttribute(b,2)),m.setIndex(y);m.computeVertexNormals(),m.computeTangents?.(),t.geo[h]=m}return t.geo[h]}function estrusorotate(e,t,i=0){switch(e.trim().toUpperCase().slice(0,1)){case"A":t.rotation.x=-Math.PI/2;break;case"L":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI;break;case"P":t.rotation.z=Math.PI/2}return t}function estruso(t,i,n,s,r,o,a){a||(a={}),o||(o=[]),Array.isArray(o)||(o=[o,o,o]);let A=a.p0||0,l=Math.tan(a.coeffbase1*Ue||0),c=Math.tan(a.coeffbase2*Ue||0),h=n||a.p1||20,p=Math.tan(a.coefftop1*Ue||0),u=Math.tan(a.coefftop2*Ue||0),g=a.shapetop,d=a.shapebase||a.shapebottom;g&&(u=0),d&&(u=0);let f=d?d.key:"",m=g?g.key:"",I=a.notopholes||!1,b=a.nobottomholes||a.nobaseholes||!1,y=a.invert||!1,C=a.open||!1,B=new e.Group;if(s){if(!a.nobase){let e=r;b&&(e=Array.isArray(b)?e.filter(((e,t)=>!b[t])):[]);let i=bottomgeomfromshape(t,!a.notop,s,C?[]:e,A,l,c,d,!1,a.uvswap);a.nolines||B.add(edgesfromgeometry(i)),B.add(getmesh(i,o[0]||Ri))}if(!a.notop){let e=r;I&&(e=Array.isArray(I)?e.filter(((e,t)=>!I[t])):[]);let i=bottomgeomfromshape(t,!1,s,C?[]:e,h,p,u,g,!1,a.uvswap);B.add(getmesh(i,o[1]||o[0]||Ri)),a.nolines||B.add(edgesfromgeometry(i))}if(!a.nosides){let e=s.to3d(0,A,l,-c,C,d,!y),i=s.to3d(1,h,p,-u,C,g,y),n=`${s.key}${y?1:0}|${A}|${h}|${l}|${c||f}|${p}|${u||m}|${C}|${a.wvswap?1:0}`,E=sidegeomfromshapes(t,n,e,i,!1,!1,a.uvswap);if(a.nolines||a.nosidelines||B.add(edgesfromgeometry(E)),B.add(getmesh(E,o[2]||o[0]||Ri)),r&&!C)for(let s=0;s<r.length;s++){let g=r[s];if(Array.isArray(I)){if(I[s])continue}else if(I)continue;if(Array.isArray(b)){if(b[s])continue}else if(b)continue;e=g.to3d(0,A,l,c),i=g.to3d(0,h,p,u),n=`${g.key}|${A}|${h}|${l}|${c}|${p}|${u}`;let d=sidegeomfromshapes(t,n,e,i,!0);a.nolines||a.nosidelines||B.add(edgesfromgeometry(d)),B.add(getmesh(d,o[3]||o[0]||Ri))}}return estrusorotate(i,B,n)}return B}function revolve(t,i,n,s,r){r||(r={});let o=r.segmenti??12,a=hash(`rev|${i.key}|${n}|${o}|${r?.uvswap}`),A=t.geo[a],l=new e.Group;if(!A){const n=i.pt.map((t=>new e.Vector2(t.x,t.y)));A=new e.LatheGeometry(n,o,0,2*Math.PI),uvswap(A,r.uvswap,!0),t.geo[a]=A}const c=new e.Mesh(A,s);return l.add(c),r.nolines||r.nosidelines||l.add(edgesfromgeometry(A)),l}function estrusopat(t,i,n,s,r,o,a){a||(a={});let A=a.invert;o||(o=[]);let l=a.open,c=a.closepat;if(!n.pt?.length)return;let h=r.to3d(0,0,0,0,l),p=new e.Group;if(!a.nobase&&!a.open&&!c){let i=new e.Group,A=angle3point(s[0],n.pt[0],n.pt[1])+Math.PI/2,l=bottomgeomfromshape(t,!1,r,[],0,-Math.tan(A),0,null,!1,a.uvswap);i.add(getmesh(l,o[0]||Ri)),i.add(edgesfromgeometry(l));let c=n.infosegmento(0,!0);p.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}if(!a.notop&&!a.open&&!c){let i=new e.Group,A=-(angle3point(n.pt[n.npt-2],n.pt[n.npt-1],s[n.npt-1])+Math.PI/2),l=bottomgeomfromshape(t,!0,r,[],0,-Math.tan(A),0,null,!1,a.uvswap);i.add(getmesh(l,o[1]||o[0]||Ri)),i.add(edgesfromgeometry(l));let c=n.infosegmento(n.pt.length-1,!0);p.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}if(!a.nosides){const i=function sidegeomfrompat(t,i,n,s,r,o,a=!1){let A=`bsg:${i.key}|${n.key}|${r}|${o}|${a}`;if(n.npt==s.length){if(A=hash(A),!t.geo[A]){const l=[],c=[],h=[],p=i.length,equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z;let u=0,g=n.pt,d=n.npt;const f=.001,addpts=(t,i,n,s)=>{for(const r of t){let t=new e.Vector3(r.x,r.y,r.x*s);t.applyMatrix4(i),l.push(t.x,t.y,t.z),a?c.push(r.u*f,(r.v+n)*f):c.push((r.v+n)*f,r.u*f)}};let m=d;for(let t=0;t<d;t++){let r;r=t<d-1?angle3point(s[t],g[t],g[t+1])+Math.PI/2:-(angle3point(g[t-1],g[t],s[t])+Math.PI/2);let o=-Math.tan(r),a=n.infosegmento(t,!0),A=new e.Object3D;A.position.set(a.x,0,a.y),A.rotation.set(0,(90-a.ang)*Ue,0),A.updateMatrix(),addpts(i,A.matrix,u,o),u+=a.l}if(r){let t=n.infosegmento(0,!0),r=new e.Object3D;r.position.set(t.x,0,t.y),r.rotation.set(0,(90-t.ang)*Ue,0);let o=angle3point(g[d-1],g[0],s[0])+Math.PI/2,a=-Math.tan(o);r.updateMatrix(),addpts(i,r.matrix,u,a),u+=t.l,m++}for(let e=0;e<m-1;e++)for(let t=0;t<p-1;t++){const addindexquad=(e,t,i,n)=>{o?h.push(e,i,t,i,n,t):h.push(e,t,i,i,t,n)},n=t+1;equalpos(i[t],i[n])||addindexquad(t+e*p,n+e*p,t+(e+1)*p,n+(e+1)*p)}const I=new e.BufferGeometry;I.setAttribute("position",new e.Float32BufferAttribute(l,3)),I.setAttribute("uv",new e.Float32BufferAttribute(c,2)),I.setIndex(h),I.computeVertexNormals(),I.computeTangents?.(),t[A]=I}return t[A]}}(t,h,n,s,c?1:0,A?1:0,a.uvswap);i&&(a.nolines||a.nosidelines||p.add(edgesfromgeometry(i)),p.add(getmesh(i,o[2]||o[0]||Ri)))}return estrusorotate(i,p,0)}async function spritemat(t,i){try{let n={transparent:!0,depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1};if(i.startsWith("#"))n.color=i;else{let e=await t.tex(i,1e3,1e3);e?n.map=e:n.color="black"}return new e.SpriteMaterial(n)}catch(e){return Ri}}function getsprite0(t,i,n,s,r,o={}){o||(o={});let{size:a=50,pick:A=!1,screen:l=!1,sizex:c,sizey:h}=o;const p=new e.Sprite(r);p.position.set(0,0,0),p.userData.issprite=!0,p.userData.ispunto=t,p.userData.ispick=A,p.userData.isScreen=l,p.renderOrder=999,p.layers.set(29),p.name=t?"_punto":"_sprite";let u=new e.Group;return u.position.set(i,n,s),u.scale.set(c||a,h||c||a,1),u.add(p),u.traverse((e=>{e.material&&(e.material.depthTest=!1,e.material.depthWrite=!1)})),u.renderOrder=999,u}async function getpunto(t,i,n,s,r="yellow",o){o||(o={size:20}),o.screen=!0;const a=await function createCircleTexture(t,i=64,n="rgba(255,0,0,1)"){const s=`ct|${i}|${n}`;if(!t.textures[s]){const r=document.createElement("canvas");r.width=r.height=i;const o=r.getContext("2d"),a=i/2;o.clearRect(0,0,i,i),o.fillStyle=n,o.beginPath(),o.arc(a,a,a,0,2*Math.PI),o.fill();const A=new e.CanvasTexture(r);A.needsUpdate=!0,t.textures[s]=A}return t.textures[s]}(t,64,r);return getsprite0(!0,i,n,s,new e.SpriteMaterial({map:a,transparent:!0,fog:!1,toneMapped:!1}),o)}function getsprite(e,t,i,n,s,r={}){return getsprite0(!1,t,i,n,s,r)}class GLTFLoader extends s{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(e){return new GLTFMaterialsClearcoatExtension(e)})),this.register((function(e){return new GLTFMaterialsDispersionExtension(e)})),this.register((function(e){return new GLTFTextureBasisUExtension(e)})),this.register((function(e){return new GLTFTextureWebPExtension(e)})),this.register((function(e){return new GLTFTextureAVIFExtension(e)})),this.register((function(e){return new GLTFMaterialsSheenExtension(e)})),this.register((function(e){return new GLTFMaterialsTransmissionExtension(e)})),this.register((function(e){return new GLTFMaterialsVolumeExtension(e)})),this.register((function(e){return new GLTFMaterialsIorExtension(e)})),this.register((function(e){return new GLTFMaterialsEmissiveStrengthExtension(e)})),this.register((function(e){return new GLTFMaterialsSpecularExtension(e)})),this.register((function(e){return new GLTFMaterialsIridescenceExtension(e)})),this.register((function(e){return new GLTFMaterialsAnisotropyExtension(e)})),this.register((function(e){return new GLTFMaterialsBumpExtension(e)})),this.register((function(e){return new GLTFLightsExtension(e)})),this.register((function(e){return new GLTFMeshoptCompression(e)})),this.register((function(e){return new GLTFMeshGpuInstancing(e)}))}load(e,t,i,n){const s=this;let a;if(""!==this.resourcePath)a=this.resourcePath;else if(""!==this.path){const t=r.extractUrlBase(e);a=r.resolveURL(t,this.path)}else a=r.extractUrlBase(e);this.manager.itemStart(e);const _onError=function(t){n?n(t):console.error(t),s.manager.itemError(e),s.manager.itemEnd(e)},A=new o(this.manager);A.setPath(this.path),A.setResponseType("arraybuffer"),A.setRequestHeader(this.requestHeader),A.setWithCredentials(this.withCredentials),A.load(e,(function(i){try{s.parse(i,a,(function(i){t(i),s.manager.itemEnd(e)}),_onError)}catch(e){_onError(e)}}),i,_onError)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return-1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return-1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,n){let s;const r={},o={},a=new TextDecoder;if("string"==typeof e)s=JSON.parse(e);else if(e instanceof ArrayBuffer){if(a.decode(new Uint8Array(e,0,4))===Ji){try{r[Wi.KHR_BINARY_GLTF]=new GLTFBinaryExtension(e)}catch(e){return void(n&&n(e))}s=JSON.parse(r[Wi.KHR_BINARY_GLTF].content)}else s=JSON.parse(a.decode(e))}else s=e;if(void 0===s.asset||s.asset.version[0]<2)return void(n&&n(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const A=new GLTFParser(s,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});A.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){const t=this.pluginCallbacks[e](A);t.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[t.name]=t,r[t.name]=!0}if(s.extensionsUsed)for(let e=0;e<s.extensionsUsed.length;++e){const t=s.extensionsUsed[e],i=s.extensionsRequired||[];switch(t){case Wi.KHR_MATERIALS_UNLIT:r[t]=new GLTFMaterialsUnlitExtension;break;case Wi.KHR_DRACO_MESH_COMPRESSION:r[t]=new GLTFDracoMeshCompressionExtension(s,this.dracoLoader);break;case Wi.KHR_TEXTURE_TRANSFORM:r[t]=new GLTFTextureTransformExtension;break;case Wi.KHR_MESH_QUANTIZATION:r[t]=new GLTFMeshQuantizationExtension;break;default:i.indexOf(t)>=0&&void 0===o[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}A.setExtensions(r),A.setPlugins(o),A.parse(i,n)}parseAsync(e,t){const i=this;return new Promise((function(n,s){i.parse(e,t,n,s)}))}}function GLTFRegistry(){let e={};return{get:function(t){return e[t]},add:function(t,i){e[t]=i},remove:function(t){delete e[t]},removeAll:function(){e={}}}}const Wi={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class GLTFLightsExtension{constructor(e){this.parser=e,this.name=Wi.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i];n.extensions&&n.extensions[this.name]&&void 0!==n.extensions[this.name].light&&e._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(e){const t=this.parser,i="light:"+e;let n=t.cache.get(i);if(n)return n;const s=t.json,r=((s.extensions&&s.extensions[this.name]||{}).lights||[])[e];let o;const a=new l(16777215);void 0!==r.color&&a.setRGB(r.color[0],r.color[1],r.color[2],c);const A=void 0!==r.range?r.range:0;switch(r.type){case"directional":o=new g(a),o.target.position.set(0,0,-1),o.add(o.target);break;case"point":o=new u(a),o.distance=A;break;case"spot":o=new p(a),o.distance=A,r.spot=r.spot||{},r.spot.innerConeAngle=void 0!==r.spot.innerConeAngle?r.spot.innerConeAngle:0,r.spot.outerConeAngle=void 0!==r.spot.outerConeAngle?r.spot.outerConeAngle:Math.PI/4,o.angle=r.spot.outerConeAngle,o.penumbra=1-r.spot.innerConeAngle/r.spot.outerConeAngle,o.target.position.set(0,0,-1),o.add(o.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+r.type)}return o.position.set(0,0,0),o.decay=2,assignExtrasToUserData(o,r),void 0!==r.intensity&&(o.intensity=r.intensity),o.name=t.createUniqueName(r.name||"light_"+e),n=Promise.resolve(o),t.cache.add(i,n),n}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,i=this.parser,n=i.json.nodes[e],s=(n.extensions&&n.extensions[this.name]||{}).light;return void 0===s?null:this._loadLight(s).then((function(e){return i._getNodeRef(t.cache,s,e)}))}}class GLTFMaterialsUnlitExtension{constructor(){this.name=Wi.KHR_MATERIALS_UNLIT}getMaterialType(){return Y}extendParams(e,t,i){const n=[];e.color=new l(1,1,1),e.opacity=1;const s=t.pbrMetallicRoughness;if(s){if(Array.isArray(s.baseColorFactor)){const t=s.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],c),e.opacity=t[3]}void 0!==s.baseColorTexture&&n.push(i.assignTexture(e,"map",s.baseColorTexture,h))}return Promise.all(n)}}class GLTFMaterialsEmissiveStrengthExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name].emissiveStrength;return void 0!==n&&(t.emissiveIntensity=n),Promise.resolve()}}class GLTFMaterialsClearcoatExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];if(void 0!==r.clearcoatFactor&&(t.clearcoat=r.clearcoatFactor),void 0!==r.clearcoatTexture&&s.push(i.assignTexture(t,"clearcoatMap",r.clearcoatTexture)),void 0!==r.clearcoatRoughnessFactor&&(t.clearcoatRoughness=r.clearcoatRoughnessFactor),void 0!==r.clearcoatRoughnessTexture&&s.push(i.assignTexture(t,"clearcoatRoughnessMap",r.clearcoatRoughnessTexture)),void 0!==r.clearcoatNormalTexture&&(s.push(i.assignTexture(t,"clearcoatNormalMap",r.clearcoatNormalTexture)),void 0!==r.clearcoatNormalTexture.scale)){const e=r.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new A(e,e)}return Promise.all(s)}}class GLTFMaterialsDispersionExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_DISPERSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.dispersion=void 0!==n.dispersion?n.dispersion:0,Promise.resolve()}}class GLTFMaterialsIridescenceExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return void 0!==r.iridescenceFactor&&(t.iridescence=r.iridescenceFactor),void 0!==r.iridescenceTexture&&s.push(i.assignTexture(t,"iridescenceMap",r.iridescenceTexture)),void 0!==r.iridescenceIor&&(t.iridescenceIOR=r.iridescenceIor),void 0===t.iridescenceThicknessRange&&(t.iridescenceThicknessRange=[100,400]),void 0!==r.iridescenceThicknessMinimum&&(t.iridescenceThicknessRange[0]=r.iridescenceThicknessMinimum),void 0!==r.iridescenceThicknessMaximum&&(t.iridescenceThicknessRange[1]=r.iridescenceThicknessMaximum),void 0!==r.iridescenceThicknessTexture&&s.push(i.assignTexture(t,"iridescenceThicknessMap",r.iridescenceThicknessTexture)),Promise.all(s)}}class GLTFMaterialsSheenExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[];t.sheenColor=new l(0,0,0),t.sheenRoughness=0,t.sheen=1;const r=n.extensions[this.name];if(void 0!==r.sheenColorFactor){const e=r.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],c)}return void 0!==r.sheenRoughnessFactor&&(t.sheenRoughness=r.sheenRoughnessFactor),void 0!==r.sheenColorTexture&&s.push(i.assignTexture(t,"sheenColorMap",r.sheenColorTexture,h)),void 0!==r.sheenRoughnessTexture&&s.push(i.assignTexture(t,"sheenRoughnessMap",r.sheenRoughnessTexture)),Promise.all(s)}}class GLTFMaterialsTransmissionExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return void 0!==r.transmissionFactor&&(t.transmission=r.transmissionFactor),void 0!==r.transmissionTexture&&s.push(i.assignTexture(t,"transmissionMap",r.transmissionTexture)),Promise.all(s)}}class GLTFMaterialsVolumeExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];t.thickness=void 0!==r.thicknessFactor?r.thicknessFactor:0,void 0!==r.thicknessTexture&&s.push(i.assignTexture(t,"thicknessMap",r.thicknessTexture)),t.attenuationDistance=r.attenuationDistance||1/0;const o=r.attenuationColor||[1,1,1];return t.attenuationColor=(new l).setRGB(o[0],o[1],o[2],c),Promise.all(s)}}class GLTFMaterialsIorExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.ior=void 0!==n.ior?n.ior:1.5,Promise.resolve()}}class GLTFMaterialsSpecularExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];t.specularIntensity=void 0!==r.specularFactor?r.specularFactor:1,void 0!==r.specularTexture&&s.push(i.assignTexture(t,"specularIntensityMap",r.specularTexture));const o=r.specularColorFactor||[1,1,1];return t.specularColor=(new l).setRGB(o[0],o[1],o[2],c),void 0!==r.specularColorTexture&&s.push(i.assignTexture(t,"specularColorMap",r.specularColorTexture,h)),Promise.all(s)}}class GLTFMaterialsBumpExtension{constructor(e){this.parser=e,this.name=Wi.EXT_MATERIALS_BUMP}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return t.bumpScale=void 0!==r.bumpFactor?r.bumpFactor:1,void 0!==r.bumpTexture&&s.push(i.assignTexture(t,"bumpMap",r.bumpTexture)),Promise.all(s)}}class GLTFMaterialsAnisotropyExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return void 0!==r.anisotropyStrength&&(t.anisotropy=r.anisotropyStrength),void 0!==r.anisotropyRotation&&(t.anisotropyRotation=r.anisotropyRotation),void 0!==r.anisotropyTexture&&s.push(i.assignTexture(t,"anisotropyMap",r.anisotropyTexture)),Promise.all(s)}}class GLTFTextureBasisUExtension{constructor(e){this.parser=e,this.name=Wi.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,i=t.json,n=i.textures[e];if(!n.extensions||!n.extensions[this.name])return null;const s=n.extensions[this.name],r=t.options.ktx2Loader;if(!r){if(i.extensionsRequired&&i.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,s.source,r)}}class GLTFTextureWebPExtension{constructor(e){this.parser=e,this.name=Wi.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,s=n.textures[e];if(!s.extensions||!s.extensions[t])return null;const r=s.extensions[t],o=n.images[r.source];let a=i.textureLoader;if(o.uri){const e=i.options.manager.getHandler(o.uri);null!==e&&(a=e)}return this.detectSupport().then((function(s){if(s)return i.loadTextureImage(e,r.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFTextureAVIFExtension{constructor(e){this.parser=e,this.name=Wi.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,s=n.textures[e];if(!s.extensions||!s.extensions[t])return null;const r=s.extensions[t],o=n.images[r.source];let a=i.textureLoader;if(o.uri){const e=i.options.manager.getHandler(o.uri);null!==e&&(a=e)}return this.detectSupport().then((function(s){if(s)return i.loadTextureImage(e,r.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFMeshoptCompression{constructor(e){this.name=Wi.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const e=i.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return n.then((function(t){const i=e.byteOffset||0,n=e.byteLength||0,r=e.count,o=e.byteStride,a=new Uint8Array(t,i,n);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(r,o,a,e.mode,e.filter).then((function(e){return e.buffer})):s.ready.then((function(){const t=new ArrayBuffer(r*o);return s.decodeGltfBuffer(new Uint8Array(t),r,o,a,e.mode,e.filter),t}))}))}return null}}class GLTFMeshGpuInstancing{constructor(e){this.name=Wi.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||void 0===i.mesh)return null;const n=t.meshes[i.mesh];for(const e of n.primitives)if(e.mode!==$i.TRIANGLES&&e.mode!==$i.TRIANGLE_STRIP&&e.mode!==$i.TRIANGLE_FAN&&void 0!==e.mode)return null;const s=i.extensions[this.name].attributes,r=[],o={};for(const e in s)r.push(this.parser.getDependency("accessor",s[e]).then((t=>(o[e]=t,o[e]))));return r.length<1?null:(r.push(this.parser.createNodeMesh(e)),Promise.all(r).then((e=>{const t=e.pop(),i=t.isGroup?t.children:[t],n=e[0].count,s=[];for(const e of i){const t=new d,i=new f,r=new m,a=new f(1,1,1),A=new I(e.geometry,e.material,n);for(let e=0;e<n;e++)o.TRANSLATION&&i.fromBufferAttribute(o.TRANSLATION,e),o.ROTATION&&r.fromBufferAttribute(o.ROTATION,e),o.SCALE&&a.fromBufferAttribute(o.SCALE,e),A.setMatrixAt(e,t.compose(i,r,a));for(const t in o)if("_COLOR_0"===t){const e=o[t];A.instanceColor=new b(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,o[t]);y.prototype.copy.call(A,e),this.parser.assignFinalMaterial(A),s.push(A)}return t.isGroup?(t.clear(),t.add(...s),t):s[0]})))}}const Ji="glTF",Ki=1313821514,Vi=5130562;class GLTFBinaryExtension{constructor(e){this.name=Wi.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,12),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Ji)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const n=this.header.length-12,s=new DataView(e,12);let r=0;for(;r<n;){const t=s.getUint32(r,!0);r+=4;const n=s.getUint32(r,!0);if(r+=4,n===Ki){const n=new Uint8Array(e,12+r,t);this.content=i.decode(n)}else if(n===Vi){const i=12+r;this.body=e.slice(i,i+t)}r+=t}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class GLTFDracoMeshCompressionExtension{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=Wi.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const i=this.json,n=this.dracoLoader,s=e.extensions[this.name].bufferView,r=e.extensions[this.name].attributes,o={},a={},A={};for(const e in r){const t=rn[e]||e.toLowerCase();o[t]=r[e]}for(const t in e.attributes){const n=rn[t]||t.toLowerCase();if(void 0!==r[t]){const s=i.accessors[e.attributes[t]],r=en[s.componentType];A[n]=r.name,a[n]=!0===s.normalized}}return t.getDependency("bufferView",s).then((function(e){return new Promise((function(t,i){n.decodeDracoFile(e,(function(e){for(const t in e.attributes){const i=e.attributes[t],n=a[t];void 0!==n&&(i.normalized=n)}t(e)}),o,A,c,i)}))}))}}class GLTFTextureTransformExtension{constructor(){this.name=Wi.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return void 0!==t.texCoord&&t.texCoord!==e.channel||void 0!==t.offset||void 0!==t.rotation||void 0!==t.scale?(e=e.clone(),void 0!==t.texCoord&&(e.channel=t.texCoord),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e):e}}class GLTFMeshQuantizationExtension{constructor(){this.name=Wi.KHR_MESH_QUANTIZATION}}class GLTFCubicSplineInterpolant extends he{constructor(e,t,i,n){super(e,t,i,n)}copySampleValue_(e){const t=this.resultBuffer,i=this.sampleValues,n=this.valueSize,s=e*n*3+n;for(let e=0;e!==n;e++)t[e]=i[s+e];return t}interpolate_(e,t,i,n){const s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=2*o,A=3*o,l=n-t,c=(i-t)/l,h=c*c,p=h*c,u=e*A,g=u-A,d=-2*p+3*h,f=p-h,m=1-d,I=f-h+c;for(let e=0;e!==o;e++){const t=r[g+e+o],i=r[g+e+a]*l,n=r[u+e+o],A=r[u+e]*l;s[e]=m*t+I*i+d*n+f*A}return s}}const Zi=new m;class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant{interpolate_(e,t,i,n){const s=super.interpolate_(e,t,i,n);return Zi.fromArray(s).normalize().toArray(s),s}}const $i={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},en={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},tn={9728:T,9729:S,9984:M,9985:D,9986:P,9987:v},nn={33071:_,33648:k,10497:L},sn={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},rn={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},on={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},an={CUBICSPLINE:void 0,LINEAR:se,STEP:ne},An="OPAQUE",ln="MASK",cn="BLEND";function addUnknownExtensionsToUserData(e,t,i){for(const n in i.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=i.extensions[n])}function assignExtrasToUserData(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function updateMorphTargets(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let i=0,n=t.weights.length;i<n;i++)e.morphTargetInfluences[i]=t.weights[i];if(t.extras&&Array.isArray(t.extras.targetNames)){const i=t.extras.targetNames;if(e.morphTargetInfluences.length===i.length){e.morphTargetDictionary={};for(let t=0,n=i.length;t<n;t++)e.morphTargetDictionary[i[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function createPrimitiveKey(e){let t;const i=e.extensions&&e.extensions[Wi.KHR_DRACO_MESH_COMPRESSION];if(t=i?"draco:"+i.bufferView+":"+i.indices+":"+createAttributesKey(i.attributes):e.indices+":"+createAttributesKey(e.attributes)+":"+e.mode,void 0!==e.targets)for(let i=0,n=e.targets.length;i<n;i++)t+=":"+createAttributesKey(e.targets[i]);return t}function createAttributesKey(e){let t="";const i=Object.keys(e).sort();for(let n=0,s=i.length;n<s;n++)t+=i[n]+":"+e[i[n]]+";";return t}function getNormalizedComponentScale(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const hn=new d;class GLTFParser{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new GLTFRegistry,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,n=-1,s=!1,r=-1;if("undefined"!=typeof navigator){const e=navigator.userAgent;i=!0===/^((?!chrome|android).)*safari/i.test(e);const t=e.match(/Version\/(\d+)/);n=i&&t?parseInt(t[1],10):-1,s=e.indexOf("Firefox")>-1,r=s?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||i&&n<17||s&&r<98?this.textureLoader=new C(this.options.manager):this.textureLoader=new B(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new o(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,n=this.json,s=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(e){return e._markDefs&&e._markDefs()})),Promise.all(this._invokeAll((function(e){return e.beforeRoot&&e.beforeRoot()}))).then((function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])})).then((function(t){const r={scene:t[0][n.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:n.asset,parser:i,userData:{}};return addUnknownExtensionsToUserData(s,r,n),assignExtrasToUserData(r,n),Promise.all(i._invokeAll((function(e){return e.afterRoot&&e.afterRoot(r)}))).then((function(){for(const e of r.scenes)e.updateMatrixWorld();e(r)}))})).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i].joints;for(let t=0,i=n.length;t<i;t++)e[n[t]].isBone=!0}for(let t=0,n=e.length;t<n;t++){const n=e[t];void 0!==n.mesh&&(this._addNodeRef(this.meshCache,n.mesh),void 0!==n.skin&&(i[n.mesh].isSkinnedMesh=!0)),void 0!==n.camera&&this._addNodeRef(this.cameraCache,n.camera)}}_addNodeRef(e,t){void 0!==t&&(void 0===e.refs[t]&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,i){if(e.refs[t]<=1)return i;const n=i.clone(),updateMappings=(e,t)=>{const i=this.associations.get(e);null!=i&&this.associations.set(t,i);for(const[i,n]of e.children.entries())updateMappings(n,t.children[i])};return updateMappings(i,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){const n=e(t[i]);if(n)return n}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const i=[];for(let n=0;n<t.length;n++){const s=e(t[n]);s&&i.push(s)}return i}getDependency(e,t){const i=e+":"+t;let n=this.cache.get(i);if(!n){switch(e){case"scene":n=this.loadScene(t);break;case"node":n=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":n=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":n=this.loadAccessor(t);break;case"bufferView":n=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":n=this.loadBuffer(t);break;case"material":n=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":n=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":n=this.loadSkin(t);break;case"animation":n=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":n=this.loadCamera(t);break;default:if(n=this._invokeOne((function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)})),!n)throw new Error("Unknown type: "+e)}this.cache.add(i,n)}return n}getDependencies(e){let t=this.cache.get(e);if(!t){const i=this,n=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(n.map((function(t,n){return i.getDependency(e,n)}))),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],i=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[Wi.KHR_BINARY_GLTF].body);const n=this.options;return new Promise((function(e,s){i.load(r.resolveURL(t.uri,n.path),e,void 0,(function(){s(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then((function(e){const i=t.byteLength||0,n=t.byteOffset||0;return e.slice(n,n+i)}))}loadAccessor(e){const t=this,i=this.json,n=this.json.accessors[e];if(void 0===n.bufferView&&void 0===n.sparse){const e=sn[n.type],t=en[n.componentType],i=!0===n.normalized,s=new t(n.count*e);return Promise.resolve(new E(s,e,i))}const s=[];return void 0!==n.bufferView?s.push(this.getDependency("bufferView",n.bufferView)):s.push(null),void 0!==n.sparse&&(s.push(this.getDependency("bufferView",n.sparse.indices.bufferView)),s.push(this.getDependency("bufferView",n.sparse.values.bufferView))),Promise.all(s).then((function(e){const s=e[0],r=sn[n.type],o=en[n.componentType],a=o.BYTES_PER_ELEMENT,A=a*r,l=n.byteOffset||0,c=void 0!==n.bufferView?i.bufferViews[n.bufferView].byteStride:void 0,h=!0===n.normalized;let p,u;if(c&&c!==A){const e=Math.floor(l/c),i="InterleavedBuffer:"+n.bufferView+":"+n.componentType+":"+e+":"+n.count;let A=t.cache.get(i);A||(p=new o(s,e*c,n.count*c/a),A=new x(p,c/a),t.cache.add(i,A)),u=new w(A,r,l%c/a,h)}else p=null===s?new o(n.count*r):new o(s,l,n.count*r),u=new E(p,r,h);if(void 0!==n.sparse){const t=sn.SCALAR,i=en[n.sparse.indices.componentType],a=n.sparse.indices.byteOffset||0,A=n.sparse.values.byteOffset||0,l=new i(e[1],a,n.sparse.count*t),c=new o(e[2],A,n.sparse.count*r);null!==s&&(u=new E(u.array.slice(),u.itemSize,u.normalized));for(let e=0,t=l.length;e<t;e++){const t=l[e];if(u.setX(t,c[e*r]),r>=2&&u.setY(t,c[e*r+1]),r>=3&&u.setZ(t,c[e*r+2]),r>=4&&u.setW(t,c[e*r+3]),r>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return u}))}loadTexture(e){const t=this.json,i=this.options,n=t.textures[e].source,s=t.images[n];let r=this.textureLoader;if(s.uri){const e=i.manager.getHandler(s.uri);null!==e&&(r=e)}return this.loadTextureImage(e,n,r)}loadTextureImage(e,t,i){const n=this,s=this.json,r=s.textures[e],o=s.images[t],a=(o.uri||o.bufferView)+":"+r.sampler;if(this.textureCache[a])return this.textureCache[a];const A=this.loadImageSource(t,i).then((function(t){t.flipY=!1,t.name=r.name||o.name||"",""===t.name&&"string"==typeof o.uri&&!1===o.uri.startsWith("data:image/")&&(t.name=o.uri);const i=(s.samplers||{})[r.sampler]||{};return t.magFilter=tn[i.magFilter]||S,t.minFilter=tn[i.minFilter]||v,t.wrapS=nn[i.wrapS]||L,t.wrapT=nn[i.wrapT]||L,n.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=A,A}loadImageSource(e,t){const i=this,n=this.json,s=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((e=>e.clone()));const o=n.images[e],a=self.URL||self.webkitURL;let A=o.uri||"",l=!1;if(void 0!==o.bufferView)A=i.getDependency("bufferView",o.bufferView).then((function(e){l=!0;const t=new Blob([e],{type:o.mimeType});return A=a.createObjectURL(t),A}));else if(void 0===o.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const c=Promise.resolve(A).then((function(e){return new Promise((function(i,n){let o=i;!0===t.isImageBitmapLoader&&(o=function(e){const t=new re(e);t.needsUpdate=!0,i(t)}),t.load(r.resolveURL(e,s.path),o,void 0,n)}))})).then((function(e){return!0===l&&a.revokeObjectURL(A),assignExtrasToUserData(e,o),e.userData.mimeType=o.mimeType||function getImageURIMimeType(e){return e.search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"}(o.uri),e})).catch((function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",A),e}));return this.sourceCache[e]=c,c}assignTexture(e,t,i,n){const s=this;return this.getDependency("texture",i.index).then((function(r){if(!r)return null;if(void 0!==i.texCoord&&i.texCoord>0&&((r=r.clone()).channel=i.texCoord),s.extensions[Wi.KHR_TEXTURE_TRANSFORM]){const e=void 0!==i.extensions?i.extensions[Wi.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=s.associations.get(r);r=s.extensions[Wi.KHR_TEXTURE_TRANSFORM].extendTexture(r,e),s.associations.set(r,t)}}return void 0!==n&&(r.colorSpace=n),e[t]=r,r}))}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const n=void 0===t.attributes.tangent,s=void 0!==t.attributes.color,r=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new R,F.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,t.sizeAttenuation=!1,this.cache.add(e,t)),i=t}else if(e.isLine){const e="LineBasicMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new N,F.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,this.cache.add(e,t)),i=t}if(n||s||r){let e="ClonedMaterial:"+i.uuid+":";n&&(e+="derivative-tangents:"),s&&(e+="vertex-colors:"),r&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=i.clone(),s&&(t.vertexColors=!0),r&&(t.flatShading=!0),n&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(i))),i=t}e.material=i}getMaterialType(){return O}loadMaterial(e){const t=this,i=this.json,n=this.extensions,s=i.materials[e];let r;const o={},a=[];if((s.extensions||{})[Wi.KHR_MATERIALS_UNLIT]){const e=n[Wi.KHR_MATERIALS_UNLIT];r=e.getMaterialType(),a.push(e.extendParams(o,s,t))}else{const i=s.pbrMetallicRoughness||{};if(o.color=new l(1,1,1),o.opacity=1,Array.isArray(i.baseColorFactor)){const e=i.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],c),o.opacity=e[3]}void 0!==i.baseColorTexture&&a.push(t.assignTexture(o,"map",i.baseColorTexture,h)),o.metalness=void 0!==i.metallicFactor?i.metallicFactor:1,o.roughness=void 0!==i.roughnessFactor?i.roughnessFactor:1,void 0!==i.metallicRoughnessTexture&&(a.push(t.assignTexture(o,"metalnessMap",i.metallicRoughnessTexture)),a.push(t.assignTexture(o,"roughnessMap",i.metallicRoughnessTexture))),r=this._invokeOne((function(t){return t.getMaterialType&&t.getMaterialType(e)})),a.push(Promise.all(this._invokeAll((function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)}))))}!0===s.doubleSided&&(o.side=G);const p=s.alphaMode||An;if(p===cn?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,p===ln&&(o.alphaTest=void 0!==s.alphaCutoff?s.alphaCutoff:.5)),void 0!==s.normalTexture&&r!==Y&&(a.push(t.assignTexture(o,"normalMap",s.normalTexture)),o.normalScale=new A(1,1),void 0!==s.normalTexture.scale)){const e=s.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==s.occlusionTexture&&r!==Y&&(a.push(t.assignTexture(o,"aoMap",s.occlusionTexture)),void 0!==s.occlusionTexture.strength&&(o.aoMapIntensity=s.occlusionTexture.strength)),void 0!==s.emissiveFactor&&r!==Y){const e=s.emissiveFactor;o.emissive=(new l).setRGB(e[0],e[1],e[2],c)}return void 0!==s.emissiveTexture&&r!==Y&&a.push(t.assignTexture(o,"emissiveMap",s.emissiveTexture,h)),Promise.all(a).then((function(){const i=new r(o);return s.name&&(i.name=s.name),assignExtrasToUserData(i,s),t.associations.set(i,{materials:e}),s.extensions&&addUnknownExtensionsToUserData(n,i,s),i}))}createUniqueName(e){const t=U.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,n=this.primitiveCache;function createDracoPrimitive(e){return i[Wi.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(i){return addPrimitiveAttributes(i,e,t)}))}const s=[];for(let i=0,r=e.length;i<r;i++){const r=e[i],o=createPrimitiveKey(r),a=n[o];if(a)s.push(a.promise);else{let e;e=r.extensions&&r.extensions[Wi.KHR_DRACO_MESH_COMPRESSION]?createDracoPrimitive(r):addPrimitiveAttributes(new X,r,t),n[o]={primitive:r,promise:e},s.push(e)}}return Promise.all(s)}loadMesh(e){const t=this,s=this.json,r=this.extensions,o=s.meshes[e],a=o.primitives,A=[];for(let e=0,t=a.length;e<t;e++){const t=void 0===a[e].material?(void 0===(l=this.cache).DefaultMaterial&&(l.DefaultMaterial=new O({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:ce})),l.DefaultMaterial):this.getDependency("material",a[e].material);A.push(t)}var l;return A.push(t.loadGeometries(a)),Promise.all(A).then((function(s){const A=s.slice(0,s.length-1),l=s[s.length-1],c=[];for(let s=0,h=l.length;s<h;s++){const h=l[s],p=a[s];let u;const g=A[s];if(p.mode===$i.TRIANGLES||p.mode===$i.TRIANGLE_STRIP||p.mode===$i.TRIANGLE_FAN||void 0===p.mode)u=!0===o.isSkinnedMesh?new q(h,g):new z(h,g),!0===u.isSkinnedMesh&&u.normalizeSkinWeights(),p.mode===$i.TRIANGLE_STRIP?u.geometry=toTrianglesDrawMode(u.geometry,n):p.mode===$i.TRIANGLE_FAN&&(u.geometry=toTrianglesDrawMode(u.geometry,i));else if(p.mode===$i.LINES)u=new H(h,g);else if(p.mode===$i.LINE_STRIP)u=new j(h,g);else if(p.mode===$i.LINE_LOOP)u=new W(h,g);else{if(p.mode!==$i.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+p.mode);u=new J(h,g)}Object.keys(u.geometry.morphAttributes).length>0&&updateMorphTargets(u,o),u.name=t.createUniqueName(o.name||"mesh_"+e),assignExtrasToUserData(u,o),p.extensions&&addUnknownExtensionsToUserData(r,u,p),t.assignFinalMaterial(u),c.push(u)}for(let i=0,n=c.length;i<n;i++)t.associations.set(c[i],{meshes:e,primitives:i});if(1===c.length)return o.extensions&&addUnknownExtensionsToUserData(r,c[0],o),c[0];const h=new K;o.extensions&&addUnknownExtensionsToUserData(r,h,o),t.associations.set(h,{meshes:e});for(let e=0,t=c.length;e<t;e++)h.add(c[e]);return h}))}loadCamera(e){let t;const i=this.json.cameras[e],n=i[i.type];if(n)return"perspective"===i.type?t=new V(Z.radToDeg(n.yfov),n.aspectRatio||1,n.znear||1,n.zfar||2e6):"orthographic"===i.type&&(t=new $(-n.xmag,n.xmag,n.ymag,-n.ymag,n.znear,n.zfar)),i.name&&(t.name=this.createUniqueName(i.name)),assignExtrasToUserData(t,i),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],i=[];for(let e=0,n=t.joints.length;e<n;e++)i.push(this._loadNodeShallow(t.joints[e]));return void 0!==t.inverseBindMatrices?i.push(this.getDependency("accessor",t.inverseBindMatrices)):i.push(null),Promise.all(i).then((function(e){const i=e.pop(),n=e,s=[],r=[];for(let e=0,o=n.length;e<o;e++){const o=n[e];if(o){s.push(o);const t=new d;null!==i&&t.fromArray(i.array,16*e),r.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new ee(s,r)}))}loadAnimation(e){const t=this.json,i=this,n=t.animations[e],s=n.name?n.name:"animation_"+e,r=[],o=[],a=[],A=[],l=[];for(let e=0,t=n.channels.length;e<t;e++){const t=n.channels[e],i=n.samplers[t.sampler],s=t.target,c=s.node,h=void 0!==n.parameters?n.parameters[i.input]:i.input,p=void 0!==n.parameters?n.parameters[i.output]:i.output;void 0!==s.node&&(r.push(this.getDependency("node",c)),o.push(this.getDependency("accessor",h)),a.push(this.getDependency("accessor",p)),A.push(i),l.push(s))}return Promise.all([Promise.all(r),Promise.all(o),Promise.all(a),Promise.all(A),Promise.all(l)]).then((function(e){const t=e[0],n=e[1],r=e[2],o=e[3],a=e[4],A=[];for(let e=0,s=t.length;e<s;e++){const s=t[e],l=n[e],c=r[e],h=o[e],p=a[e];if(void 0===s)continue;s.updateMatrix&&s.updateMatrix();const u=i._createAnimationTracks(s,l,c,h,p);if(u)for(let e=0;e<u.length;e++)A.push(u[e])}return new te(s,void 0,A)}))}createNodeMesh(e){const t=this.json,i=this,n=t.nodes[e];return void 0===n.mesh?null:i.getDependency("mesh",n.mesh).then((function(e){const t=i._getNodeRef(i.meshCache,n.mesh,e);return void 0!==n.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,i=n.weights.length;t<i;t++)e.morphTargetInfluences[t]=n.weights[t]})),t}))}loadNode(e){const t=this,i=this.json.nodes[e],n=t._loadNodeShallow(e),s=[],r=i.children||[];for(let e=0,i=r.length;e<i;e++)s.push(t.getDependency("node",r[e]));const o=void 0===i.skin?Promise.resolve(null):t.getDependency("skin",i.skin);return Promise.all([n,Promise.all(s),o]).then((function(e){const t=e[0],i=e[1],n=e[2];null!==n&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(n,hn)}));for(let e=0,n=i.length;e<n;e++)t.add(i[e]);return t}))}_loadNodeShallow(e){const t=this.json,i=this.extensions,n=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const s=t.nodes[e],r=s.name?n.createUniqueName(s.name):"",o=[],a=n._invokeOne((function(t){return t.createNodeMesh&&t.createNodeMesh(e)}));return a&&o.push(a),void 0!==s.camera&&o.push(n.getDependency("camera",s.camera).then((function(e){return n._getNodeRef(n.cameraCache,s.camera,e)}))),n._invokeAll((function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)})).forEach((function(e){o.push(e)})),this.nodeCache[e]=Promise.all(o).then((function(t){let o;if(o=!0===s.isBone?new ie:t.length>1?new K:1===t.length?t[0]:new y,o!==t[0])for(let e=0,i=t.length;e<i;e++)o.add(t[e]);if(s.name&&(o.userData.name=s.name,o.name=r),assignExtrasToUserData(o,s),s.extensions&&addUnknownExtensionsToUserData(i,o,s),void 0!==s.matrix){const e=new d;e.fromArray(s.matrix),o.applyMatrix4(e)}else void 0!==s.translation&&o.position.fromArray(s.translation),void 0!==s.rotation&&o.quaternion.fromArray(s.rotation),void 0!==s.scale&&o.scale.fromArray(s.scale);return n.associations.has(o)||n.associations.set(o,{}),n.associations.get(o).nodes=e,o})),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],n=this,s=new K;i.name&&(s.name=n.createUniqueName(i.name)),assignExtrasToUserData(s,i),i.extensions&&addUnknownExtensionsToUserData(t,s,i);const r=i.nodes||[],o=[];for(let e=0,t=r.length;e<t;e++)o.push(n.getDependency("node",r[e]));return Promise.all(o).then((function(e){for(let t=0,i=e.length;t<i;t++)s.add(e[t]);return n.associations=(e=>{const t=new Map;for(const[e,i]of n.associations)(e instanceof F||e instanceof re)&&t.set(e,i);return e.traverse((e=>{const i=n.associations.get(e);null!=i&&t.set(e,i)})),t})(s),s}))}_createAnimationTracks(e,t,i,n,s){const r=[],o=e.name?e.name:e.uuid,a=[];let A;switch(on[s.path]===on.weights?e.traverse((function(e){e.morphTargetInfluences&&a.push(e.name?e.name:e.uuid)})):a.push(o),on[s.path]){case on.weights:A=ae;break;case on.rotation:A=Ae;break;case on.position:case on.scale:A=oe;break;default:if(1===i.itemSize)A=ae;else A=oe}const l=void 0!==n.interpolation?an[n.interpolation]:se,c=this._getArrayFromAccessor(i);for(let e=0,i=a.length;e<i;e++){const i=new A(a[e]+"."+on[s.path],t.array,c,l);"CUBICSPLINE"===n.interpolation&&this._createCubicSplineTrackInterpolant(i),r.push(i)}return r}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const e=getNormalizedComponentScale(t.constructor),i=new Float32Array(t.length);for(let n=0,s=t.length;n<s;n++)i[n]=t[n]*e;t=i}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function InterpolantFactoryMethodGLTFCubicSpline(e){return new(this instanceof Ae?GLTFCubicSplineQuaternionInterpolant:GLTFCubicSplineInterpolant)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function addPrimitiveAttributes(e,t,i){const n=t.attributes,s=[];function assignAttributeAccessor(t,n){return i.getDependency("accessor",t).then((function(t){e.setAttribute(n,t)}))}for(const t in n){const i=rn[t]||t.toLowerCase();i in e.attributes||s.push(assignAttributeAccessor(n[t],i))}if(void 0!==t.indices&&!e.index){const n=i.getDependency("accessor",t.indices).then((function(t){e.setIndex(t)}));s.push(n)}return le.workingColorSpace!==c&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${le.workingColorSpace}" not supported.`),assignExtrasToUserData(e,t),function computeBounds(e,t,i){const n=t.attributes,s=new pe;if(void 0===n.POSITION)return;{const e=i.json.accessors[n.POSITION],t=e.min,r=e.max;if(void 0===t||void 0===r)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(s.set(new f(t[0],t[1],t[2]),new f(r[0],r[1],r[2])),e.normalized){const t=getNormalizedComponentScale(en[e.componentType]);s.min.multiplyScalar(t),s.max.multiplyScalar(t)}}const r=t.targets;if(void 0!==r){const e=new f,t=new f;for(let n=0,s=r.length;n<s;n++){const s=r[n];if(void 0!==s.POSITION){const n=i.json.accessors[s.POSITION],r=n.min,o=n.max;if(void 0!==r&&void 0!==o){if(t.setX(Math.max(Math.abs(r[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(r[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(r[2]),Math.abs(o[2]))),n.normalized){const e=getNormalizedComponentScale(en[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}s.expandByVector(e)}e.boundingBox=s;const o=new ue;s.getCenter(o.center),o.radius=s.min.distanceTo(s.max)/2,e.boundingSphere=o}(e,t,i),Promise.all(s).then((function(){return void 0!==t.targets?function addMorphTargets(e,t,i){let n=!1,s=!1,r=!1;for(let e=0,i=t.length;e<i;e++){const i=t[e];if(void 0!==i.POSITION&&(n=!0),void 0!==i.NORMAL&&(s=!0),void 0!==i.COLOR_0&&(r=!0),n&&s&&r)break}if(!n&&!s&&!r)return Promise.resolve(e);const o=[],a=[],A=[];for(let l=0,c=t.length;l<c;l++){const c=t[l];if(n){const t=void 0!==c.POSITION?i.getDependency("accessor",c.POSITION):e.attributes.position;o.push(t)}if(s){const t=void 0!==c.NORMAL?i.getDependency("accessor",c.NORMAL):e.attributes.normal;a.push(t)}if(r){const t=void 0!==c.COLOR_0?i.getDependency("accessor",c.COLOR_0):e.attributes.color;A.push(t)}}return Promise.all([Promise.all(o),Promise.all(a),Promise.all(A)]).then((function(t){const i=t[0],o=t[1],a=t[2];return n&&(e.morphAttributes.position=i),s&&(e.morphAttributes.normal=o),r&&(e.morphAttributes.color=a),e.morphTargetsRelative=!0,e}))}(e,t.targets,i):e}))}const pn=new WeakMap;class DRACOLoader extends s{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,n){const s=new o(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,h,i).catch(i)}decodeDracoFile(e,t,i,n,s=c,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:s};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(pn.has(e)){const t=pn.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let n;const s=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(s,r).then((i=>(n=i,new Promise(((i,r)=>{n._callbacks[s]={resolve:i,reject:r},n.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))))).then((e=>this._createGeometry(e.geometry)));return o.catch((()=>!0)).then((()=>{n&&s&&this._releaseTask(n,s)})),pn.set(e,{key:i,promise:o}),o}_createGeometry(e){const t=new X;e.index&&t.setIndex(new E(e.index.array,1));for(let i=0;i<e.attributes.length;i++){const n=e.attributes[i],s=n.name,r=n.array,o=n.itemSize,a=new E(r,o);"color"===s&&(this._assignVertexColorSpace(a,n.vertexColorSpace),a.normalized=r instanceof Float32Array==!1),t.setAttribute(s,a)}return t}_assignVertexColorSpace(e,t){if(t!==h)return;const i=new l;for(let t=0,n=e.count;t<n;t++)i.fromBufferAttribute(e,t).convertSRGBToLinear(),e.setXYZ(t,i.r,i.g,i.b)}_loadLibrary(e,t){const i=new o(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise(((t,n)=>{i.load(e,t,void 0,n)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then((t=>{const i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);const n=DRACOWorker.toString(),s=["/* draco decoder */",i,"","/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([s]))})),this.decoderPending}_getWorker(e,t){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){const i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort((function(e,t){return e._taskLoad>t._taskLoad?-1:1}));const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i}))}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map((e=>e._taskLoad)))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function DRACOWorker(){let e,t;function decodeAttribute(e,t,i,n,s,r){const o=r.num_components(),a=i.num_points()*o,A=a*s.BYTES_PER_ELEMENT,l=function getDracoDataType(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,s),c=e._malloc(A);t.GetAttributeDataArrayForAllPoints(i,r,l,A,c);const h=new s(e.HEAPF32.buffer,c,a).slice();return e._free(c),{name:n,array:h,itemSize:o}}onmessage=function(i){const n=i.data;switch(n.type){case"init":e=n.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const i=n.buffer,s=n.taskConfig;t.then((e=>{const t=e.draco,r=new t.Decoder;try{const e=function decodeGeometry(e,t,i,n){const s=n.attributeIDs,r=n.attributeTypes;let o,a;const A=t.GetEncodedGeometryType(i);if(A===e.TRIANGULAR_MESH)o=new e.Mesh,a=t.DecodeArrayToMesh(i,i.byteLength,o);else{if(A!==e.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");o=new e.PointCloud,a=t.DecodeArrayToPointCloud(i,i.byteLength,o)}if(!a.ok()||0===o.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());const l={index:null,attributes:[]};for(const i in s){const a=self[r[i]];let A,c;if(n.useUniqueIDs)c=s[i],A=t.GetAttributeByUniqueId(o,c);else{if(c=t.GetAttributeId(o,e[s[i]]),-1===c)continue;A=t.GetAttribute(o,c)}const h=decodeAttribute(e,t,o,i,a,A);"color"===i&&(h.vertexColorSpace=n.vertexColorSpace),l.attributes.push(h)}A===e.TRIANGULAR_MESH&&(l.index=function decodeIndex(e,t,i){const n=i.num_faces(),s=3*n,r=4*s,o=e._malloc(r);t.GetTrianglesUInt32Array(i,r,o);const a=new Uint32Array(e.HEAPF32.buffer,o,s).slice();return e._free(o),{array:a,itemSize:1}}(e,t,o));return e.destroy(o),l}(t,r,new Int8Array(i),s),o=e.attributes.map((e=>e.array.buffer));e.index&&o.push(e.index.array.buffer),self.postMessage({type:"decode",id:n.id,geometry:e},o)}catch(e){console.error(e),self.postMessage({type:"error",id:n.id,error:e.message})}finally{t.destroy(r)}}))}}}class WorkerPool{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){const t=this.workerCreator();t.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){const i=this.workersResolve[e];if(i&&i(t),this.queue.length){const{resolve:t,msg:i,transfer:n}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,n)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise((i=>{const n=this._getIdleWorker();-1!==n?(this._initWorker(n),this.workerStatus|=1<<n,this.workersResolve[n]=i,this.workers[n].postMessage(e,t)):this.queue.push({resolve:i,msg:e,transfer:t})}))}dispose(){this.workers.forEach((e=>e.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const un=9,gn=15,dn=16,fn=22,mn=37,In=43,bn=76,yn=83,Cn=97,Bn=100,En=103,xn=109,Qn=165,wn=166;class Si{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class Ii{constructor(e,t,i,n){this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=n,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_skip(e){return this._offset+=e,this}_scan(e,t=0){const i=this._offset;let n=0;for(;this._dataView.getUint8(this._offset)!==t&&n<e;)n++,this._offset++;return n<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,n)}}const vn=[171,75,84,88,32,50,48,187,13,10,26,10];function Ei(e){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(e):Buffer.from(e).toString("utf8")}let Pn,Dn,Mn;const Sn={env:{emscripten_notify_memory_growth:function(e){Mn=new Uint8Array(Dn.exports.memory.buffer)}}};class Q{init(){return Pn||(Pn="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+Tn).then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,Sn))).then(this._init):WebAssembly.instantiate(Buffer.from(Tn,"base64"),Sn).then(this._init),Pn)}_init(e){Dn=e.instance,Sn.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!Dn)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=e.byteLength,n=Dn.exports.malloc(i);Mn.set(e,n),t=t||Number(Dn.exports.ZSTD_findDecompressedSize(n,i));const s=Dn.exports.malloc(t),r=Dn.exports.ZSTD_decompress(s,t,n,i),o=Mn.slice(s,s+r);return Dn.exports.free(n),Dn.exports.free(s),o}}const Tn="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY0AAQMyIFEAMiBg0AIANBHzYCfCADIANB/ABqIANB+ABqIAQgBCAFaiAGGyIEIAEgAmoiAiAEaxAVIgUQAw0AIAMoAnwiBkEfSw0AIAMoAngiB0EJTw0AIABBiCBqIAMgBkGAC0GADCAHEBggA0E0NgJ8IAMgA0H8AGogA0H4AGogBCAFaiIEIAIgBGsQFSIFEAMNACADKAJ8IgZBNEsNACADKAJ4IgdBCk8NACAAQZAwaiADIAZBgA1B4A4gBxAYIANBIzYCfCADIANB/ABqIANB+ABqIAQgBWoiBCACIARrEBUiBRADDQAgAygCfCIGQSNLDQAgAygCeCIHQQpPDQAgACADIAZBwBBB0BEgBxAYIAQgBWoiBEEMaiIFIAJLDQAgAiAFayEFQQAhAgNAIAJBA0cEQCAEKAAAIgZBf2ogBU8NAiAAIAJBAnRqQZzQAWogBjYCACACQQFqIQIgBEEEaiEEDAELCyAEIAFrIQgLIANBgAFqJAAgCAtGAQN/IABBCGohAyAAKAIEIQJBACEAA0AgACACdkUEQCABIAMgAEEDdGotAAJBFktqIQEgAEEBaiEADAELCyABQQggAmt0C4YDAQV/Qbh/IQcCQCADRQ0AIAItAAAiBEUEQCABQQA2AgBBAUG4fyADQQFGGw8LAn8gAkEBaiIFIARBGHRBGHUiBkF/Sg0AGiAGQX9GBEAgA0EDSA0CIAUvAABBgP4BaiEEIAJBA2oMAQsgA0ECSA0BIAItAAEgBEEIdHJBgIB+aiEEIAJBAmoLIQUgASAENgIAIAVBAWoiASACIANqIgNLDQBBbCEHIABBEGogACAFLQAAIgVBBnZBI0EJIAEgAyABa0HAEEHQEUHwEiAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBmCBqIABBCGogBUEEdkEDcUEfQQggASABIAZqIAgbIgEgAyABa0GAC0GADEGAFyAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBoDBqIABBBGogBUECdkEDcUE0QQkgASABIAZqIAgbIgEgAyABa0GADUHgDkGQGSAAKAKM4QEgACgCnOIBIAQQHyIAEAMNACAAIAFqIAJrIQcLIAcLrQMBCn8jAEGABGsiCCQAAn9BUiACQf8BSw0AGkFUIANBDEsNABogAkEBaiELIABBBGohCUGAgAQgA0F/anRBEHUhCkEAIQJBASEEQQEgA3QiB0F/aiIMIQUDQCACIAtGRQRAAkAgASACQQF0Ig1qLwEAIgZB//8DRgRAIAkgBUECdGogAjoAAiAFQX9qIQVBASEGDAELIARBACAKIAZBEHRBEHVKGyEECyAIIA1qIAY7AQAgAkEBaiECDAELCyAAIAQ7AQIgACADOwEAIAdBA3YgB0EBdmpBA2ohBkEAIQRBACECA0AgBCALRkUEQCABIARBAXRqLgEAIQpBACEAA0AgACAKTkUEQCAJIAJBAnRqIAQ6AAIDQCACIAZqIAxxIgIgBUsNAAsgAEEBaiEADAELCyAEQQFqIQQMAQsLQX8gAg0AGkEAIQIDfyACIAdGBH9BAAUgCCAJIAJBAnRqIgAtAAJBAXRqIgEgAS8BACIBQQFqOwEAIAAgAyABEBRrIgU6AAMgACABIAVB/wFxdCAHazsBACACQQFqIQIMAQsLCyEFIAhBgARqJAAgBQvjBgEIf0FsIQcCQCACQQNJDQACQAJAAkACQCABLQAAIgNBA3EiCUEBaw4DAwEAAgsgACgCiOEBDQBBYg8LIAJBBUkNAkEDIQYgASgAACEFAn8CQAJAIANBAnZBA3EiCEF+aiIEQQFNBEAgBEEBaw0BDAILIAVBDnZB/wdxIQQgBUEEdkH/B3EhAyAIRQwCCyAFQRJ2IQRBBCEGIAVBBHZB//8AcSEDQQAMAQsgBUEEdkH//w9xIgNBgIAISw0DIAEtAARBCnQgBUEWdnIhBEEFIQZBAAshBSAEIAZqIgogAksNAgJAIANBgQZJDQAgACgCnOIBRQ0AQQAhAgNAIAJBg4ABSw0BIAJBQGshAgwAAAsACwJ/IAlBA0YEQCABIAZqIQEgAEHw4gFqIQIgACgCDCEGIAUEQCACIAMgASAEIAYQXwwCCyACIAMgASAEIAYQXQwBCyAAQbjQAWohAiABIAZqIQEgAEHw4gFqIQYgAEGo0ABqIQggBQRAIAggBiADIAEgBCACEF4MAQsgCCAGIAMgASAEIAIQXAsQAw0CIAAgAzYCgOIBIABBATYCiOEBIAAgAEHw4gFqNgLw4QEgCUECRgRAIAAgAEGo0ABqNgIMCyAAIANqIgBBiOMBakIANwAAIABBgOMBakIANwAAIABB+OIBakIANwAAIABB8OIBakIANwAAIAoPCwJ/AkACQAJAIANBAnZBA3FBf2oiBEECSw0AIARBAWsOAgACAQtBASEEIANBA3YMAgtBAiEEIAEvAABBBHYMAQtBAyEEIAEQIUEEdgsiAyAEaiIFQSBqIAJLBEAgBSACSw0CIABB8OIBaiABIARqIAMQCyEBIAAgAzYCgOIBIAAgATYC8OEBIAEgA2oiAEIANwAYIABCADcAECAAQgA3AAggAEIANwAAIAUPCyAAIAM2AoDiASAAIAEgBGo2AvDhASAFDwsCfwJAAkACQCADQQJ2QQNxQX9qIgRBAksNACAEQQFrDgIAAgELQQEhByADQQN2DAILQQIhByABLwAAQQR2DAELIAJBBEkgARAhIgJBj4CAAUtyDQFBAyEHIAJBBHYLIQIgAEHw4gFqIAEgB2otAAAgAkEgahAQIQEgACACNgKA4gEgACABNgLw4QEgB0EBaiEHCyAHC0sAIABC+erQ0OfJoeThADcDICAAQgA3AxggAELP1tO+0ser2UI3AxAgAELW64Lu6v2J9eAANwMIIABCADcDACAAQShqQQBBKBAQGgviAgICfwV+IABBKGoiASAAKAJIaiECAn4gACkDACIDQiBaBEAgACkDECIEQgeJIAApAwgiBUIBiXwgACkDGCIGQgyJfCAAKQMgIgdCEol8IAUQGSAEEBkgBhAZIAcQGQwBCyAAKQMYQsXP2bLx5brqJ3wLIAN8IQMDQCABQQhqIgAgAk0EQEIAIAEpAAAQCSADhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCEDIAAhAQwBCwsCQCABQQRqIgAgAksEQCABIQAMAQsgASgAAK1Ch5Wvr5i23puef34gA4VCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQMLA0AgACACSQRAIAAxAABCxc/ZsvHluuonfiADhUILiUKHla+vmLbem55/fiEDIABBAWohAAwBCwsgA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC+8CAgJ/BH4gACAAKQMAIAKtfDcDAAJAAkAgACgCSCIDIAJqIgRBH00EQCABRQ0BIAAgA2pBKGogASACECAgACgCSCACaiEEDAELIAEgAmohAgJ/IAMEQCAAQShqIgQgA2ogAUEgIANrECAgACAAKQMIIAQpAAAQCTcDCCAAIAApAxAgACkAMBAJNwMQIAAgACkDGCAAKQA4EAk3AxggACAAKQMgIABBQGspAAAQCTcDICAAKAJIIQMgAEEANgJIIAEgA2tBIGohAQsgAUEgaiACTQsEQCACQWBqIQMgACkDICEFIAApAxghBiAAKQMQIQcgACkDCCEIA0AgCCABKQAAEAkhCCAHIAEpAAgQCSEHIAYgASkAEBAJIQYgBSABKQAYEAkhBSABQSBqIgEgA00NAAsgACAFNwMgIAAgBjcDGCAAIAc3AxAgACAINwMICyABIAJPDQEgAEEoaiABIAIgAWsiBBAgCyAAIAQ2AkgLCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQEBogAwVBun8LCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQCxogAwVBun8LC6gCAQZ/IwBBEGsiByQAIABB2OABaikDAEKAgIAQViEIQbh/IQUCQCAEQf//B0sNACAAIAMgBBBCIgUQAyIGDQAgACgCnOIBIQkgACAHQQxqIAMgAyAFaiAGGyIKIARBACAFIAYbayIGEEAiAxADBEAgAyEFDAELIAcoAgwhBCABRQRAQbp/IQUgBEEASg0BCyAGIANrIQUgAyAKaiEDAkAgCQRAIABBADYCnOIBDAELAkACQAJAIARBBUgNACAAQdjgAWopAwBCgICACFgNAAwBCyAAQQA2ApziAQwBCyAAKAIIED8hBiAAQQA2ApziASAGQRRPDQELIAAgASACIAMgBSAEIAgQOSEFDAELIAAgASACIAMgBSAEIAgQOiEFCyAHQRBqJAAgBQtnACAAQdDgAWogASACIAAoAuzhARAuIgEQAwRAIAEPC0G4fyECAkAgAQ0AIABB7OABaigCACIBBEBBYCECIAAoApjiASABRw0BC0EAIQIgAEHw4AFqKAIARQ0AIABBkOEBahBDCyACCycBAX8QVyIERQRAQUAPCyAEIAAgASACIAMgBBBLEE8hACAEEFYgAAs/AQF/AkACQAJAIAAoAqDiAUEBaiIBQQJLDQAgAUEBaw4CAAECCyAAEDBBAA8LIABBADYCoOIBCyAAKAKU4gELvAMCB38BfiMAQRBrIgkkAEG4fyEGAkAgBCgCACIIQQVBCSAAKALs4QEiBRtJDQAgAygCACIHQQFBBSAFGyAFEC8iBRADBEAgBSEGDAELIAggBUEDakkNACAAIAcgBRBJIgYQAw0AIAEgAmohCiAAQZDhAWohCyAIIAVrIQIgBSAHaiEHIAEhBQNAIAcgAiAJECwiBhADDQEgAkF9aiICIAZJBEBBuH8hBgwCCyAJKAIAIghBAksEQEFsIQYMAgsgB0EDaiEHAn8CQAJAAkAgCEEBaw4CAgABCyAAIAUgCiAFayAHIAYQSAwCCyAFIAogBWsgByAGEEcMAQsgBSAKIAVrIActAAAgCSgCCBBGCyIIEAMEQCAIIQYMAgsgACgC8OABBEAgCyAFIAgQRQsgAiAGayECIAYgB2ohByAFIAhqIQUgCSgCBEUNAAsgACkD0OABIgxCf1IEQEFsIQYgDCAFIAFrrFINAQsgACgC8OABBEBBaiEGIAJBBEkNASALEEQhDCAHKAAAIAynRw0BIAdBBGohByACQXxqIQILIAMgBzYCACAEIAI2AgAgBSABayEGCyAJQRBqJAAgBgsuACAAECsCf0EAQQAQAw0AGiABRSACRXJFBEBBYiAAIAEgAhA9EAMNARoLQQALCzcAIAEEQCAAIAAoAsTgASABKAIEIAEoAghqRzYCnOIBCyAAECtBABADIAFFckUEQCAAIAEQWwsL0QIBB38jAEEQayIGJAAgBiAENgIIIAYgAzYCDCAFBEAgBSgCBCEKIAUoAgghCQsgASEIAkACQANAIAAoAuzhARAWIQsCQANAIAQgC0kNASADKAAAQXBxQdDUtMIBRgRAIAMgBBAiIgcQAw0EIAQgB2shBCADIAdqIQMMAQsLIAYgAzYCDCAGIAQ2AggCQCAFBEAgACAFEE5BACEHQQAQA0UNAQwFCyAAIAogCRBNIgcQAw0ECyAAIAgQUCAMQQFHQQAgACAIIAIgBkEMaiAGQQhqEEwiByIDa0EAIAMQAxtBCkdyRQRAQbh/IQcMBAsgBxADDQMgAiAHayECIAcgCGohCEEBIQwgBigCDCEDIAYoAgghBAwBCwsgBiADNgIMIAYgBDYCCEG4fyEHIAQNASAIIAFrIQcMAQsgBiADNgIMIAYgBDYCCAsgBkEQaiQAIAcLRgECfyABIAAoArjgASICRwRAIAAgAjYCxOABIAAgATYCuOABIAAoArzgASEDIAAgATYCvOABIAAgASADIAJrajYCwOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",Ln=new WeakMap;let kn,_n=0;class KTX2Loader extends s{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new WorkerPool,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync("texture-compression-astc"),etc1Supported:await e.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await e.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await e.hasFeatureAsync("texture-compression-bc"),bptcSupported:await e.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await e.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(e){return!0===e.isWebGPURenderer?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),etc1Supported:e.hasFeature("texture-compression-etc1"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-bc"),bptcSupported:e.hasFeature("texture-compression-bptc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const e=new o(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),i=new o(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const n=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,n]).then((([e,t])=>{const i=KTX2Loader.BasisWorker.toString(),n=["/* constants */","let _EngineFormat = "+JSON.stringify(KTX2Loader.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(KTX2Loader.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(KTX2Loader.BasisFormat),"/* basis_transcoder.js */",e,"/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([n])),this.transcoderBinary=t,this.workerPool.setWorkerCreator((()=>{const e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:"init",config:this.workerConfig,transcoderBinary:t},[t]),e}))})),_n>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),_n++}return this.transcoderPending}load(e,t,i,n){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const s=new o(this.manager);s.setResponseType("arraybuffer"),s.setWithCredentials(this.withCredentials),s.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Ln.has(e)){return Ln.get(e).promise.then(t).catch(i)}this._createTexture(e).then((e=>t?t(e):null)).catch(i)}_createTextureFrom(e,t){const{faces:i,width:n,height:s,format:r,type:o,error:a,dfdFlags:A}=e;if("error"===o)return Promise.reject(a);let l;if(6===t.faceCount)l=new ge(i,r,de);else{const e=i[0].mipmaps;l=t.layerCount>1?new fe(e,n,s,t.layerCount,r,de):new me(e,n,s,r,de)}return l.minFilter=1===i[0].mipmaps.length?S:v,l.magFilter=S,l.generateMipmaps=!1,l.needsUpdate=!0,l.colorSpace=parseColorSpace(t),l.premultiplyAlpha=!!(1&A),l}async _createTexture(e,t={}){const i=function Pi(e){const t=new Uint8Array(e.buffer,e.byteOffset,vn.length);if(t[0]!==vn[0]||t[1]!==vn[1]||t[2]!==vn[2]||t[3]!==vn[3]||t[4]!==vn[4]||t[5]!==vn[5]||t[6]!==vn[6]||t[7]!==vn[7]||t[8]!==vn[8]||t[9]!==vn[9]||t[10]!==vn[10]||t[11]!==vn[11])throw new Error("Missing KTX 2.0 identifier.");const i=new Si,n=17*Uint32Array.BYTES_PER_ELEMENT,s=new Ii(e,vn.length,n,!0);i.vkFormat=s._nextUint32(),i.typeSize=s._nextUint32(),i.pixelWidth=s._nextUint32(),i.pixelHeight=s._nextUint32(),i.pixelDepth=s._nextUint32(),i.layerCount=s._nextUint32(),i.faceCount=s._nextUint32();const r=s._nextUint32();i.supercompressionScheme=s._nextUint32();const o=s._nextUint32(),a=s._nextUint32(),A=s._nextUint32(),l=s._nextUint32(),c=s._nextUint64(),h=s._nextUint64(),p=new Ii(e,vn.length+n,3*r*8,!0);for(let t=0;t<r;t++)i.levels.push({levelData:new Uint8Array(e.buffer,e.byteOffset+p._nextUint64(),p._nextUint64()),uncompressedByteLength:p._nextUint64()});const u=new Ii(e,o,a,!0),g={vendorId:u._skip(4)._nextUint16(),descriptorType:u._nextUint16(),versionNumber:u._nextUint16(),descriptorBlockSize:u._nextUint16(),colorModel:u._nextUint8(),colorPrimaries:u._nextUint8(),transferFunction:u._nextUint8(),flags:u._nextUint8(),texelBlockDimension:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],bytesPlane:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],samples:[]},d=(g.descriptorBlockSize/4-6)/4;for(let e=0;e<d;e++){const t={bitOffset:u._nextUint16(),bitLength:u._nextUint8(),channelType:u._nextUint8(),samplePosition:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&t.channelType?(t.sampleLower=u._nextInt32(),t.sampleUpper=u._nextInt32()):(t.sampleLower=u._nextUint32(),t.sampleUpper=u._nextUint32()),g.samples[e]=t}i.dataFormatDescriptor.length=0,i.dataFormatDescriptor.push(g);const f=new Ii(e,A,l,!0);for(;f._offset<l;){const e=f._nextUint32(),t=f._scan(e),n=Ei(t),s=f._scan(e-t.byteLength);i.keyValue[n]=n.match(/^ktx/i)?Ei(s):s,f._offset%4&&f._skip(4-f._offset%4)}if(h<=0)return i;const m=new Ii(e,c,h,!0),I=m._nextUint16(),b=m._nextUint16(),y=m._nextUint32(),C=m._nextUint32(),B=m._nextUint32(),E=m._nextUint32(),x=[];for(let e=0;e<r;e++)x.push({imageFlags:m._nextUint32(),rgbSliceByteOffset:m._nextUint32(),rgbSliceByteLength:m._nextUint32(),alphaSliceByteOffset:m._nextUint32(),alphaSliceByteLength:m._nextUint32()});const w=c+m._offset,v=w+y,P=v+C,D=P+B,M=new Uint8Array(e.buffer,e.byteOffset+w,y),S=new Uint8Array(e.buffer,e.byteOffset+v,C),T=new Uint8Array(e.buffer,e.byteOffset+P,B),L=new Uint8Array(e.buffer,e.byteOffset+D,E);return i.globalData={endpointCount:I,selectorCount:b,imageDescs:x,endpointsData:M,selectorsData:S,tablesData:T,extendedData:L},i}(new Uint8Array(e));if(0!==i.vkFormat)return async function createRawTexture(e){const{vkFormat:t}=e;if(void 0===Fn[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let i;2===e.supercompressionScheme&&(kn||(kn=new Promise((async e=>{const t=new Q;await t.init(),e(t)}))),i=await kn);const n=[];for(let s=0;s<e.levels.length;s++){const r=Math.max(1,e.pixelWidth>>s),o=Math.max(1,e.pixelHeight>>s),a=e.pixelDepth?Math.max(1,e.pixelDepth>>s):0,A=e.levels[s];let l,c;if(0===e.supercompressionScheme)l=A.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");l=i.decode(A.levelData,A.uncompressedByteLength)}c=Nn[t]===we?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):Nn[t]===Qe?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,n.push({data:c,width:r,height:o,depth:a})}let s;if(Rn.has(Fn[t]))s=0===e.pixelDepth?new ve(n[0].data,e.pixelWidth,e.pixelHeight):new Pe(n[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");s=new me(n,e.pixelWidth,e.pixelHeight)}return s.mipmaps=n,s.type=Nn[t],s.format=Fn[t],s.colorSpace=parseColorSpace(e),s.needsUpdate=!0,Promise.resolve(s)}(i);const n=t,s=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:n},[e]))).then((e=>this._createTextureFrom(e.data,i)));return Ln.set(e,{promise:s}),s}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),_n--,this}}KTX2Loader.BasisFormat={ETC1S:0,UASTC_4x4:1},KTX2Loader.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},KTX2Loader.EngineFormat={RGBAFormat:xe,RGBA_ASTC_4x4_Format:Fe,RGBA_BPTC_Format:Re,RGBA_ETC2_EAC_Format:_e,RGBA_PVRTC_4BPPV1_Format:ke,RGBA_S3TC_DXT5_Format:Le,RGB_ETC1_Format:Te,RGB_ETC2_Format:Se,RGB_PVRTC_4BPPV1_Format:Me,RGBA_S3TC_DXT1_Format:De},KTX2Loader.BasisWorker=function(){let e,t,i;const n=_EngineFormat,s=_TranscoderFormat,r=_BasisFormat;self.addEventListener("message",(function(o){const l=o.data;switch(l.type){case"init":e=l.config,function init(e){t=new Promise((t=>{i={wasmBinary:e,onRuntimeInitialized:t},BASIS(i)})).then((()=>{i.initializeBasis(),void 0===i.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}))}(l.transcoderBinary);break;case"transcode":t.then((()=>{try{const{faces:t,buffers:o,width:c,height:h,hasAlpha:p,format:u,dfdFlags:g}=function transcode(t){const o=new i.KTX2File(new Uint8Array(t));function cleanup(){o.close(),o.delete()}if(!o.isValid())throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const l=o.isUASTC()?r.UASTC_4x4:r.ETC1S,c=o.getWidth(),h=o.getHeight(),p=o.getLayers()||1,u=o.getLevels(),g=o.getFaces(),d=o.getHasAlpha(),f=o.getDFDFlags(),{transcoderFormat:m,engineFormat:I}=function getTranscoderFormat(t,i,o,l){let c,h;const p=t===r.ETC1S?a:A;for(let n=0;n<p.length;n++){const s=p[n];if(e[s.if]&&(s.basisFormat.includes(t)&&!(l&&s.transcoderFormat.length<2)&&(!s.needsPowerOfTwo||isPowerOfTwo(i)&&isPowerOfTwo(o))))return c=s.transcoderFormat[l?1:0],h=s.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=s.RGBA32,h=n.RGBAFormat,{transcoderFormat:c,engineFormat:h}}(l,c,h,d);if(!c||!h||!u)throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!o.startTranscoding())throw cleanup(),new Error("THREE.KTX2Loader: .startTranscoding failed");const b=[],y=[];for(let e=0;e<g;e++){const t=[];for(let i=0;i<u;i++){const n=[];let s,r;for(let t=0;t<p;t++){const a=o.getImageLevelInfo(i,t,e);0!==e||0!==i||0!==t||a.origWidth%4==0&&a.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),u>1?(s=a.origWidth,r=a.origHeight):(s=a.width,r=a.height);const A=new Uint8Array(o.getImageTranscodedSizeInBytes(i,t,0,m));if(!o.transcodeImage(A,i,t,e,m,0,-1,-1))throw cleanup(),new Error("THREE.KTX2Loader: .transcodeImage failed.");n.push(A)}const a=concat(n);t.push({data:a,width:s,height:r}),y.push(a.buffer)}b.push({mipmaps:t,width:c,height:h,format:I})}return cleanup(),{faces:b,buffers:y,width:c,height:h,hasAlpha:d,format:I,dfdFlags:f}}(l.buffer);self.postMessage({type:"transcode",id:l.id,faces:t,width:c,height:h,hasAlpha:p,format:u,dfdFlags:g},o)}catch(e){console.error(e),self.postMessage({type:"error",id:l.id,error:e.message})}}))}}));const o=[{if:"astcSupported",basisFormat:[r.UASTC_4x4],transcoderFormat:[s.ASTC_4x4,s.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.BC7_M5,s.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.BC1,s.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.ETC1,s.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.ETC1],engineFormat:[n.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.PVRTC1_4_RGB,s.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],a=o.sort((function(e,t){return e.priorityETC1S-t.priorityETC1S})),A=o.sort((function(e,t){return e.priorityUASTC-t.priorityUASTC}));function isPowerOfTwo(e){return e<=2||!(e&e-1)&&0!==e}function concat(e){if(1===e.length)return e[0];let t=0;for(let i=0;i<e.length;i++){t+=e[i].byteLength}const i=new Uint8Array(t);let n=0;for(let t=0;t<e.length;t++){const s=e[t];i.set(s,n),n+=s.byteLength}return i}};const Rn=new Set([xe,Ee,Be]),Fn={[xn]:xe,[Cn]:xe,[mn]:xe,[In]:xe,[En]:Ee,[yn]:Ee,[dn]:Ee,[fn]:Ee,[Bn]:Be,[bn]:Be,[gn]:Be,[un]:Be,[wn]:Ce,[Qn]:Ce},Nn={[xn]:we,[Cn]:Qe,[mn]:de,[In]:de,[En]:we,[yn]:Qe,[dn]:de,[fn]:de,[Bn]:we,[bn]:Qe,[gn]:de,[un]:de,[wn]:de,[Qn]:de};function parseColorSpace(e){const t=e.dataFormatDescriptor[0];return 1===t.colorPrimaries?2===t.transferFunction?h:c:10===t.colorPrimaries?2===t.transferFunction?Ie:be:(0===t.colorPrimaries||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),ye)}var On=function(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if("object"!=typeof WebAssembly)return{supported:!1};var i,n=WebAssembly.validate(e)?"b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb":"b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",s=WebAssembly.instantiate(unpack(n),{}).then((function(e){(i=e.instance).exports.__wasm_call_ctors()}));function unpack(e){for(var i=new Uint8Array(e.length),n=0;n<e.length;++n){var s=e.charCodeAt(n);i[n]=s>96?s-97:s>64?s-39:s+4}var r=0;for(n=0;n<e.length;++n)i[r++]=i[n]<60?t[i[n]]:64*(i[n]-60)+i[++n];return i.buffer.slice(0,r)}function decode(e,t,n,s,r,o){var a=i.exports.sbrk,A=n+3&-4,l=a(A*s),c=a(r.length),h=new Uint8Array(i.exports.memory.buffer);h.set(r,c);var p=e(l,n,s,c,r.length);if(0==p&&o&&o(l,A,s),t.set(h.subarray(l,l+n*s)),a(l-a(0)),0!=p)throw new Error("Malformed buffer data: "+p)}var r={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},o={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},a=[],A=0;function createWorker(e){var t={object:new Worker(e),pending:0,requests:{}};return t.object.onmessage=function(e){var i=e.data;t.pending-=i.count,t.requests[i.id][i.action](i.value),delete t.requests[i.id]},t}function initWorkers(e){for(var t="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(unpack(n))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+decode.toString()+workerProcess.toString(),i=new Blob([t],{type:"text/javascript"}),s=URL.createObjectURL(i),r=0;r<e;++r)a[r]=createWorker(s);URL.revokeObjectURL(s)}function workerProcess(e){s.then((function(){var t=e.data;try{var n=new Uint8Array(t.count*t.size);decode(i.exports[t.mode],n,t.count,t.size,t.source,i.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:"resolve",value:n},[n.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:"reject",value:e})}}))}return{ready:s,supported:!0,useWorkers:function(e){initWorkers(e)},decodeVertexBuffer:function(e,t,n,s,o){decode(i.exports.meshopt_decodeVertexBuffer,e,t,n,s,i.exports[r[o]])},decodeIndexBuffer:function(e,t,n,s){decode(i.exports.meshopt_decodeIndexBuffer,e,t,n,s)},decodeIndexSequence:function(e,t,n,s){decode(i.exports.meshopt_decodeIndexSequence,e,t,n,s)},decodeGltfBuffer:function(e,t,n,s,a,A){decode(i.exports[o[a]],e,t,n,s,i.exports[r[A]])},decodeGltfBufferAsync:function(e,t,n,l,c){return a.length>0?function decodeWorker(e,t,i,n,s){for(var r=a[0],o=1;o<a.length;++o)a[o].pending<r.pending&&(r=a[o]);return new Promise((function(o,a){var l=new Uint8Array(i),c=A++;r.pending+=e,r.requests[c]={resolve:o,reject:a},r.object.postMessage({id:c,count:e,size:t,source:l,mode:n,filter:s},[l.buffer])}))}(e,t,n,o[l],r[c]):s.then((function(){var s=new Uint8Array(e*t);return decode(i.exports[o[l]],s,e,t,n,i.exports[r[c]]),s}))}}}();class TDSLoader extends s{constructor(e){super(e),this.debug=!1,this.group=null,this.materials=[],this.meshes=[]}load(e,t,i,n){const s=this,a=""===this.path?r.extractUrlBase(e):this.path,A=new o(this.manager);A.setPath(this.path),A.setResponseType("arraybuffer"),A.setRequestHeader(this.requestHeader),A.setWithCredentials(this.withCredentials),A.load(e,(function(i){try{t(s.parse(i,a))}catch(t){n?n(t):console.error(t),s.manager.itemError(e)}}),i,n)}parse(e,t){this.group=new K,this.materials=[],this.meshes=[],this.readFile(e,t);for(let e=0;e<this.meshes.length;e++)this.group.add(this.meshes[e]);return this.group}readFile(e,t){const i=new DataView(e),n=new Chunk(i,0,this.debugMessage);if(n.id===Yn||n.id===Un||n.id===Gn){let e=n.readChunk();for(;e;){if(e.id===Xn){const t=e.readDWord();this.debugMessage("3DS file version: "+t)}else e.id===Kn?this.readMeshData(e,t):this.debugMessage("Unknown main chunk: "+e.hexId);e=n.readChunk()}}this.debugMessage("Parsed "+this.meshes.length+" meshes")}readMeshData(e,t){let i=e.readChunk();for(;i;){if(i.id===Vn){const e=+i.readDWord();this.debugMessage("Mesh Version: "+e)}else if(i.id===Zn){const e=i.readFloat();this.debugMessage("Master scale: "+e),this.group.scale.set(e,e,e)}else i.id===bs?(this.debugMessage("Named Object"),this.readNamedObject(i)):i.id===$n?(this.debugMessage("Material"),this.readMaterialEntry(i,t)):this.debugMessage("Unknown MDATA chunk: "+i.hexId);i=e.readChunk()}}readNamedObject(e){const t=e.readString();let i=e.readChunk();for(;i;){if(i.id===ys){const e=this.readMesh(i);e.name=t,this.meshes.push(e)}else this.debugMessage("Unknown named object chunk: "+i.hexId);i=e.readChunk()}}readMaterialEntry(e,t){let i=e.readChunk();const n=new Ne;for(;i;){if(i.id===es)n.name=i.readString(),this.debugMessage(" Name: "+n.name);else if(i.id===As)this.debugMessage(" Wireframe"),n.wireframe=!0;else if(i.id===ls){const e=i.readByte();n.wireframeLinewidth=e,this.debugMessage(" Wireframe Thickness: "+e)}else if(i.id===os)n.side=G,this.debugMessage(" DoubleSided");else if(i.id===as)this.debugMessage(" Additive Blending"),n.blending=Oe;else if(i.id===is)this.debugMessage(" Diffuse Color"),n.color=this.readColor(i);else if(i.id===ns)this.debugMessage(" Specular Color"),n.specular=this.readColor(i);else if(i.id===ts)this.debugMessage(" Ambient color"),n.color=this.readColor(i);else if(i.id===ss){const e=this.readPercentage(i);n.shininess=100*e,this.debugMessage(" Shininess : "+e)}else if(i.id===rs){const e=this.readPercentage(i);n.opacity=1-e,this.debugMessage(" Transparency : "+e),n.transparent=n.opacity<1}else i.id===cs?(this.debugMessage(" ColorMap"),n.map=this.readMap(i,t)):i.id===ps?(this.debugMessage(" BumpMap"),n.bumpMap=this.readMap(i,t)):i.id===hs?(this.debugMessage(" OpacityMap"),n.alphaMap=this.readMap(i,t)):i.id===us?(this.debugMessage(" SpecularMap"),n.specularMap=this.readMap(i,t)):this.debugMessage(" Unknown material chunk: "+i.hexId);i=e.readChunk()}this.materials[n.name]=n}readMesh(e){let t=e.readChunk();const i=new X,n=new Ne,s=new z(i,n);for(s.name="mesh";t;){if(t.id===Cs){const e=t.readWord();this.debugMessage(" Vertex: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("position",new Ge(n,3))}else if(t.id===Bs)this.readFaceArray(t,s);else if(t.id===xs){const e=t.readWord();this.debugMessage(" UV: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("uv",new Ge(n,2))}else if(t.id===Qs){this.debugMessage(" Tranformation Matrix (TODO)");const e=[];for(let i=0;i<12;i++)e[i]=t.readFloat();const n=new d;n.elements[0]=e[0],n.elements[1]=e[6],n.elements[2]=e[3],n.elements[3]=e[9],n.elements[4]=e[2],n.elements[5]=e[8],n.elements[6]=e[5],n.elements[7]=e[11],n.elements[8]=e[1],n.elements[9]=e[7],n.elements[10]=e[4],n.elements[11]=e[10],n.elements[12]=0,n.elements[13]=0,n.elements[14]=0,n.elements[15]=1,n.transpose();const r=new d;r.copy(n).invert(),i.applyMatrix4(r),n.decompose(s.position,s.quaternion,s.scale)}else this.debugMessage(" Unknown mesh chunk: "+t.hexId);t=e.readChunk()}return i.computeVertexNormals(),s}readFaceArray(e,t){const i=e.readWord();this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord(),e.readWord(),e.readWord()),e.readWord();t.geometry.setIndex(n);let s=0,r=0;for(;!e.endOfChunk;){const i=e.readChunk();if(i.id===Es){this.debugMessage(" Material Group");const e=this.readMaterialGroup(i),n=3*e.index.length;t.geometry.addGroup(r,n,s),r+=n,s++;const o=this.materials[e.name];!1===Array.isArray(t.material)&&(t.material=[]),void 0!==o&&t.material.push(o)}else this.debugMessage(" Unknown face array chunk: "+i.hexId)}1===t.material.length&&(t.material=t.material[0])}readMap(e,t){let i=e.readChunk(),n={};const s=new C(this.manager);for(s.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);i;){if(i.id===gs){const e=i.readString();n=s.load(e),n.userData.name=e.split(".").slice(0,-1).join("."),this.debugMessage(" File: "+t+e)}else i.id===ms?(n.offset.x=i.readFloat(),this.debugMessage(" OffsetX: "+n.offset.x)):i.id===Is?(n.offset.y=i.readFloat(),this.debugMessage(" OffsetY: "+n.offset.y)):i.id===ds?(n.repeat.x=i.readFloat(),this.debugMessage(" RepeatX: "+n.repeat.x)):i.id===fs?(n.repeat.y=i.readFloat(),this.debugMessage(" RepeatY: "+n.repeat.y)):this.debugMessage(" Unknown map chunk: "+i.hexId);i=e.readChunk()}return n}readMaterialGroup(e){const t=e.readString(),i=e.readWord();this.debugMessage(" Name: "+t),this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord());return{name:t,index:n}}readColor(e){const t=e.readChunk(),i=new l;if(t.id===zn||t.id===Hn){const e=t.readByte(),n=t.readByte(),s=t.readByte();i.setRGB(e/255,n/255,s/255),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else if(t.id===qn||t.id===jn){const e=t.readFloat(),n=t.readFloat(),s=t.readFloat();i.setRGB(e,n,s),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else this.debugMessage(" Unknown color chunk: "+t.hexId);return i}readPercentage(e){const t=e.readChunk();switch(t.id){case Wn:return t.readShort()/100;case Jn:return t.readFloat();default:return this.debugMessage(" Unknown percentage chunk: "+t.hexId),0}}debugMessage(e){this.debug&&console.log(e)}}class Chunk{constructor(e,t,i){this.data=e,this.offset=t,this.position=t,this.debugMessage=i,this.debugMessage instanceof Function&&(this.debugMessage=function(){}),this.id=this.readWord(),this.size=this.readDWord(),this.end=this.offset+this.size,this.end>e.byteLength&&this.debugMessage("Bad chunk size for chunk at "+t)}readChunk(){if(this.endOfChunk)return null;try{const e=new Chunk(this.data,this.position,this.debugMessage);return this.position+=e.size,e}catch(e){return this.debugMessage("Unable to read chunk at "+this.position),null}}get hexId(){return this.id.toString(16)}get endOfChunk(){return this.position>=this.end}readByte(){const e=this.data.getUint8(this.position,!0);return this.position+=1,e}readFloat(){try{const e=this.data.getFloat32(this.position,!0);return this.position+=4,e}catch(e){return this.debugMessage(e+" "+this.position+" "+this.data.byteLength),0}}readInt(){const e=this.data.getInt32(this.position,!0);return this.position+=4,e}readShort(){const e=this.data.getInt16(this.position,!0);return this.position+=2,e}readDWord(){const e=this.data.getUint32(this.position,!0);return this.position+=4,e}readWord(){const e=this.data.getUint16(this.position,!0);return this.position+=2,e}readString(){let e="",t=this.readByte();for(;t;)e+=String.fromCharCode(t),t=this.readByte();return e}}const Gn=19789,Yn=15786,Un=49725,Xn=2,qn=16,zn=17,Hn=18,jn=19,Wn=48,Jn=49,Kn=15677,Vn=15678,Zn=256,$n=45055,es=40960,ts=40976,is=40992,ns=41008,ss=41024,rs=41040,os=41089,as=41091,As=41093,ls=41095,cs=41472,hs=41488,ps=41520,us=41476,gs=41728,ds=41812,fs=41814,ms=41816,Is=41818,bs=16384,ys=16640,Cs=16656,Bs=16672,Es=16688,xs=16704,Qs=16736;const to_std=(t,i)=>{if(!t||"MeshPhongMaterial"!==t.type)return t;if(i){const e=i.get(t);if(e)return e}const n=1-("number"==typeof t.shininess?Math.min(Math.max(t.shininess,0),100):30)/100,s=new e.MeshStandardMaterial({name:t.name,color:t.color,map:t.map,normalMap:t.normalMap,emissive:t.emissive,emissiveMap:t.emissiveMap,envMap:t.envMap,envMapIntensity:t.envMapIntensity??1,lightMap:t.lightMap,lightMapIntensity:t.lightMapIntensity,alphaTest:t.alphaTest,depthWrite:t.depthWrite,depthTest:t.depthTest,wireframe:t.wireframe,transparent:t.transparent,opacity:t.opacity,side:t.side,roughness:n,metalness:0});return i&&i.set(t,s),"function"==typeof t.dispose&&(t.dispose(),t.userData=t.userData||{},t.userData._replaced=!0),s.needsUpdate=!0,s};function newgcad(t,i,n,s=!0){let r={},o={},a={},A={},l={};const c=new Map;let h={},p={},u=[],g=new e.TextureLoader,d=new GLTFLoader,f=new TDSLoader;const m=new DRACOLoader;m.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"),d.setDRACOLoader(m);const I=new KTX2Loader;I.setTranscoderPath("https://unpkg.com/three@0.159.0/examples/jsm/libs/basis/"),d.setKTX2Loader(I),d.setMeshoptDecoder(On);let b=[n],getcat=()=>b[b.length-1],y={};async function clearmat(){for(const e in o)if(o[e]){const t=await o[e];t?.dispose()}for(const e in h)h[e]&&h[e]?.dispose();for(const[e,t]of c.entries()){const e=t instanceof Promise?await t:t;e?.dispose&&e.dispose()}c.clear(),o={},h={}}function getdims(t){let i=(new e.Box3).setFromObject(t),n2=e=>Math.round(100*e)/100;return{zero:{x:n2(-i.min.x),y:n2(-i.min.y),z:n2(-i.min.z)},dim:{x:n2(i.max.x-i.min.x),y:n2(i.max.y-i.min.y),z:n2(i.max.z-i.min.z)},position:t.position,rotation:{x:t.rotation.x,y:t.rotation.y,z:t.rotation.z},scale:t.scale}}async function get3ds(e){e.endsWith(".3ds")&&(e=e.slice(0,-4));const i=hash(`${getcat()}|${e}.3ds`);return a[i]||(a[i]=await new Promise(((n,s)=>{let r,o="";e.startsWith("https://")?(r=`${e}.3ds`,o=r):t._cdn?(r=`${t._cdn}${getcat()}/3d/${e}.3ds`,o=`${t._cdn}${getcat()}/3d/${e}/`):(r=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:".3ds"}),o=r+"&tex="),f.setResourcePath(o),f.load(r,(e=>{const t=new WeakMap;e.traverse((e=>{e.isMesh&&e.material&&(e.material=Array.isArray(e.material)?e.material.map((e=>to_std(e,t))):to_std(e.material,t))})),e.userData||(e.userData={}),e.userData._ky=i,n(e)}),void 0,(e=>{console.log(e),delete a[i],n(void 0)}))}))),a[i]}async function getglb(e){const i=".glb";e.endsWith(i)&&(e=e.slice(0,-4)),e.startsWith("https://")||(e=e.replace(/\//g,"+"));let n=(e=e.split("+"))[1];e=e[0];const s=hash(`${getcat()}|${e}${i}`);a[s]||(a[s]=await new Promise(((n,r)=>{let o;o=e.startsWith("https://")?`${e}.glb`:t._cdn?`${t._cdn}${getcat()}/3d/${e}.glb`:t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:i}),d.setPath(""),d.setResourcePath((e=>(console.log("risorsa",e),`${o}&tex=${e}`))),d.load(o,(async e=>{const t=e.scene;t.userData||(t.userData={}),t.userData._ky=s,n(t)}),void 0,(e=>{console.log(e),delete a[s],n(void 0)}))})));let r=a[s];if(n){let e=r?.getObjectByName(n);e&&(r=e)}return r}return{clearmatricole:()=>{y={},u=[]},P:t,bus:i,tex:async function tex(i,n=1,s,r){let a;return s||(s=n),r||(r=0),"__alpha"==i?(a=i,o[a]||(o[a]=function getfortransparent(){const t=new e.CanvasTexture(function generateTexture(){const e=document.createElement("canvas");e.width=2,e.height=2;const t=e.getContext("2d");return t.fillStyle="white",t.fillRect(0,1,2,1),e}());return t.magFilter=e.NearestFilter,t.wrapT=e.RepeatWrapping,t.wrapS=e.RepeatWrapping,t.repeat.set(1,3.5),t}()),o[a]):(a=hash(`${getcat()}|${i}|${n}|${s}|${r}`),o[a]||(o[a]=new Promise(((A,l)=>{let h;if(i.startsWith("https://"))h=i;else if(t._cdn)if(i.includes("/")){let e=i.split("/");h=`${t._cdn}${e[0]}/textures/${e[1]}`}else h=`${t._cdn}${getcat()}/textures/${i}`;else h=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"textures",name:i,force:1});if(c.has(h)){const t=c.get(h).clone();return t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.center.set(.5,.5),t.repeat.set(n,s),t.rotation=r,void A(t)}g.load(h,(t=>{c.set(h,t),t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.repeat.set(n,s),t.center.set(.5,.5),t.rotation=r,A(t)}),void 0,(e=>{console.log(`Manca Texture ${i}!. questo rallenta molto il processo`),delete o[a],A(void 0)}))}))),o[a])},getglb:getglb,get3ds:get3ds,replacemats:function replacemats(e,t,i){if(!Array.isArray(t)||0==t.length)return e;const leggi_slot=e=>{if(!e)return-1;let t=(e?.map?.name||e?.name||e?.map?.userData?.name||"").toString().trim();if(i){const e=i(t);void 0!==e&&(t=e)}if(t.includes("_")&&(t=t.split("_").pop()),!t)return-1;const n=parseInt(t,10);return n>=1&&n<=9?n:-1};let n=!1,s=String(e.userData?._ky||"");if(e.traverse((e=>{if(!e.isMesh)return;const i=Array.isArray(e.material)?e.material:[e.material];for(const e of i){const i=leggi_slot(e);i>0&&t[i-1]&&(n=!0,s+="|"+(t[i-1].name||t[i-1].uuid))}})),n){if(s=hash(s),a[s])return a[s];const i=e.clone(!0);i.traverse((e=>{if(e.isMesh)if(Array.isArray(e.material))e.material=e.material.map((e=>{if(!e)return e;const i=leggi_slot(e);if(i>0&&t[i-1]){const e=t[i-1];return e.needsUpdate=!0,e}return e}));else{const i=e.material,n=leggi_slot(i);e.material=n>0&&t[n-1]?(t[n-1].needsUpdate=!0,t[n-1]):i}})),i.userData=i.userData||{},i.userData._ky=s,a[s]=i,e=i}return e},islog:s,clear:async function clear(){function destroymesh(e){function disposeMaterial(e){e.map&&e.map.dispose(),e.lightMap&&e.lightMap.dispose(),e.bumpMap&&e.bumpMap.dispose(),e.normalMap&&e.normalMap.dispose(),e.specularMap&&e.specularMap.dispose(),e.envMap&&e.envMap.dispose(),e.alphaMap&&e.alphaMap.dispose(),e.dispose()}e&&e.traverse((e=>{e.isMesh&&(e.onBeforeRender&&(e.onBeforeRender=null),e.onAfterRender&&(e.onAfterRender=null),e.geometry?.dispose&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach(disposeMaterial):disposeMaterial(e.material)))}))}y={},l={},e.Cache.clear();for(const e in A)A[e]?.dispose();for(const e in a)if(a[e]){destroymesh(await a[e])}await clearmat(),r={},o={},a={},A={},h={},p={}},clearmat:clearmat,getdims:getdims,info3d:async function info3d(e,t=1,i=0,n=0){let s=(e||"").endsWith(".3ds")?await get3ds(e):await getglb(e);if(s)return t&&1!=t&&(s.scale.set(t||1,i||t||1,n||t||1),s.needsUpdate=!0),getdims(s)},getScript:async function getScript(e){e.endsWith(".custom")?e=e.slice(0,-7):e.endsWith(".js")&&(e=e.slice(0,-3));let i=hash(`${getcat()}|${e}`);if(!p[i]){let n;try{n=await t.fetch("mufiles/customfn",{id:getcat(),name:e,ispar:1})}catch(t){n=`log('undefined ${getcat()}/${e}: ${t.message}');`}p[i]=n}return p[i]},checkScripts:async function checkScripts(e){let i=[];if(!e||!Array.isArray(e))return;let n=getcat();e=[...e,"_ricalcolatop","_ricalcolaaltri","_ricalcolalinee"];for(let t of e){let e=hash(`${n}|${t}`);p[e]||i.push(t)}if(i?.length){let e=await t.fetch("mufiles/customfn",{id:n,name:i,ispar:1});if(e)for(let t of e){let e=hash(`${n}|${t.n}`);p[e]=t.v}}},get loaderGLTF(){return d},get BTNS(){return u},get gmats(){return y},scripts:()=>Object.keys(p),get geo(){return A},get movs(){return r},get textures(){return o},get smats(){return h},get meshes(){return a},get cacheFns(){return l},dump(){console.log(`SMATS:\n${Object.keys(h).join(" - ")};\nGEOMS:\n${Object.keys(A).join(" - ")};\nTEX:\n${Object.keys(o).join(" - ")};\nMESH:\n${Object.keys(a).join(" - ")};\n`)},get cat(){return getcat()},pushcat(e){b.push(e)},popcat:()=>(b.length>1&&b.length--,getcat())}}const ws=new Map;function salvaMaterialiOriginali(e){e.traverse((e=>{if(!e.isMesh||e.layers.mask>1<<20)return;const t=e.material;if(!t)return;const i=Array.isArray(t)?t:[t];ws.has(e)||ws.set(e,i)}))}function ripristinaMaterialiOriginali(){for(let[e,t]of ws.entries())e.material=Array.isArray(t)?[...t]:t;ws.clear()}function applicaEvidenziazione(e,t,i,n){!function ricorsiva(e,s,r){const o=!!s||!!t&&t.includes(e?.userData?.mat),a=r||e.userData?.evidenziaMap;if(e.isMesh&&e.layers.mask<=1<<20){const t=ws.get(e);if(!t)return;const s=t.map((e=>{const t=(o?n:i).clone();return a&&e.map&&(t.map=e.map),t.transparent=e.transparent,t.opacity=e.opacity,t}));e.material=Array.isArray(e.material)?s:s[0]}e.children.forEach((e=>ricorsiva(e,o,a)))}(e,!1,!1)}async function evidenziaColli(t,i,n){salvaMaterialiOriginali(t);const s=e.DoubleSide,r=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:s}),o=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:s});let a=0;try{for(let e of i)a++,e.name||(e.name=`collo_${a}`),applicaEvidenziazione(t,e.mats,r,o),await n(e)}catch(e){console.error("Errore durante evidenzia:",e)}finally{ripristinaMaterialiOriginali()}}async function runScript(t,i,n,s,r){let o=await t.getScript(i),a=o.script,A=[],l=function toCadPars(e){const t=muClComments(e),i=[];for(const e of t){const t=e.includes("(")||e.includes("[")?[e]:getcolonne(e,!0);let n=!1;for(const e of t)!e.startsWith('"')&&e.includes("=")?(i.push(e),n=!0):n&&(i[i.length-1]+=","+e)}const n={};for(const e of i){let{v:t,o:i}=getcouple(e,"=",!1);i=i||"",t&&(/^[-+]?\d*\.?\d+$/.test(i)&&(i=parseFloat(i)),n[t]=i)}return n}(o.pars+("string"==typeof s?"\n"+s:""));function setmatricola(e){return e?.userData&&(e.userData.mat=`${i}_${t.gmats[i]}`),e}s&&"object"==typeof s&&(l={...l,...s}),t.gmats[i]||(t.gmats[i]=0);let c=(new Date).valueOf(),h=c;try{function movimento(e,i=[]){return e=clean(e,!0),t.movs[e]||(t.movs[e]=getmovimento(e,i)),t.movs[e]}function addlog(...e){if(t?.islog){const t=e.map((e=>getOggetto(e)));console.log(...t),A.push(...t)}}function dbadd(e,s,r,o={}){o||(o={}),t.gmats[i]++;let a=`${i}_${t.gmats[i]}`,{qt:A=1,l:l=0,a:c=0,p:h=0,vars:p="",shape:u=null,model:g,lavs:d=null}=o;if(n.DB&&s){let t={lev:"string"==typeof e?clean(e,!0):"l"+(e+(n?._level??0)),mat:a,cod:s,note:r||"",qt:A,l:l,a:c,p:h,vars:p};u&&(t.shape=u),d&&(t.lavs=d),g&&(t.model=g),n.DB.push(t)}return a}function addtop(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"top",op:i,posfn:r})}function addhole(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"hole",op:i,posfn:r})}function addaltri(e,t,i={}){i||(i={}),n.TOPS.push({key:e,data:t,type:"altri",op:i,posfn:r})}function addlines(e,t,i={}){i||(i={}),t&&(Array.isArray(t)||(t=[t]),n.TOPS.push({key:e,lines:t,type:"lines",op:i,posfn:r}))}function dbdes(e,t){n.DES&&t&&n.DES.push({lev:e+(n?._level??0),description:t})}function geturltex(e){let i=t.cat;if(!e)return t.P.baseurl+"noimage.jpg";if(t.P._cdn){if(e.includes("/")){let t=e.split("/");i=t[0],e=t[1]}return e.endsWith(".webp")||e.endsWith(".png")||e.endsWith(".jpeg")||e.endsWith(".jpg")||(e+=".webp"),`${t.P._cdn}${i}/textures/${e}`}return t.P.fullget("mufiles/getfile",{id:i,subfolder:"textures",name:e})}l||(l={}),n||(n={});const p={GCAD:!0,...n,...l,THREE:e,TODEG:TODEG,TORAD:TORAD,dbadd:dbadd,addtop:addtop,addhole:addhole,addlines:addlines,addaltri:addaltri,dbdes:dbdes,posfn:r,addpivot:(e,i,n={},s=0,r=0,o=0)=>setmatricola(addmovpivot(t,e,i,n,s,r,o)),movimento:movimento,Math:Math,facesettile:facesettile,info3d:t.info3d,round:round,gcad:t,SIDE:Li,seeder:seeder,seedarray:seedarray,baseurl:t.P.baseurl,Vis2d:Vis2d,joinlinestoshapes:joinlinestoshapes,groupfromgeometry:groupfromgeometry,creategroup:creategroup,deletegroup:deletegroup,Matrix3D:Matrix3D,geturltex:geturltex,clamp:clamp,Punto2:Punto2,Linea2:Linea2,getptsoffset:getptsoffset,hash:hash,PIF:Ue,raccordabezier:raccordabezier,svuotanodo:svuotanodo,normal2:normal2,angle3point:angle3point,angle2vec:angle2vec,getshape:getshape,shapeclip:shapeclip,mgray1:Fi,mgray2:Ni,mwhite:Ri,mred:Oi,mgreen:Yi,mblack:Ui,mblue:Gi,materialline1:ki,materialline2:_i,scaleunit:Xi,edgesfromgeometry:edgesfromgeometry,getmesh:getmesh,getcolonne:getcolonne,posiziona:posiziona,getbb:getbb,scalaoggetto:(e,i)=>scalaoggetto(t,e,i),setorigine:setorigine,SP:Ve,elaborapercorso:elaborapercorso,gettarghetta:(e,i,n)=>gettarghetta(t,e,i,n),getquota:(e,i,n,s,r,o={})=>getquota(t,e,i,n,s,r,o),getsprite:(e,t,i,n,s)=>getsprite(0,e,t,i,n,s),getpunto:(e,i,n,s,r,o)=>getpunto(t,e,i,n,s,r),spritemat:e=>spritemat(t,e),getemitter:getemitter,getreceiver:e=>setmatricola(getreceiver(t,e)),getriferimento:getriferimento,get3dshape:get3dshape,getline:getline,getpoint:getpoint,randombasemat:randombasemat,infocircle:infocircle,intersectcircle:intersectcircle,creagizmo:creagizmo,texgen:(e,i=256,n={})=>texgen(t,e,i,n),getcilindro:(e,i,n,s,r=Ri,o)=>setmatricola(getcilindro(t,e,i,n,s,r,o)),getbox:(e,t,i,n,s)=>setmatricola(getbox(0,e,t,i,n,s)),getsphere:(e,t,i)=>setmatricola(getsphere(0,e,t,i)),replacemats:t.replacemats,getluce:(e,i="#ffffff",n=1)=>getluce(t,e,i,n),getthorus:(e,t,i,n)=>setmatricola(getthorus(0,e,t,i,n)),getcyl:(e,t,i=Ri,n)=>setmatricola(getcyl(0,e,t,i,n)),getpannello:(e,i,n,s,r,o,a)=>setmatricola(getpannello(t,e,i,n,s,r,o,a)),getpannello2:(e,i,n,s,r,o)=>setmatricola(getpannello2(t,e,i,n,s,r,o)),getface:(e,i,n,s)=>setmatricola(getface(t,e,i,n,s)),pickvariant:(e,i,n,s,r,o={})=>pickvariant(t,e,i,n,s,r,o),getmarker:(e,i,n,s,r,o={})=>getmarker(t,e,i,n,s,r,o),getglb:e=>setmatricola(t.getglb(e)),get3ds:e=>setmatricola(t.get3ds(e)),estruso:(e,i,n,s,r,o)=>setmatricola(estruso(t,e,i,n,s,r,o)),getextrude:(e,i,n,s,r)=>setmatricola(getextrude(t,e,i,n,s,r)),estrusopat:(e,i,n,s,r,o)=>setmatricola(estrusopat(t,e,i,n,s,r,o)),infoestrudi:infoestrudi,getfakeshadow:(e,i)=>getfakeshadow(t,e,i),getfakeshadow2:getfakeshadow2,revolve:(e,i,n,s)=>setmatricola(revolve(t,e,i,n,s)),smat:(e,i)=>smat(t,e,i),log:addlog,clean:clean,logtime:e=>{if(t?.islog){let t=(new Date).valueOf();addlog(`time: ${e} => ${t-h}ms / ${t-c}ms`),h=t}}},u=[...Object.keys(p),...Object.keys(Xe)],g=[...Object.values(p),...Object.values(Xe)],d=`//# sourceURL=${i}\n return (async () => {\n${a}\n })();`;try{let f=hash(i+JSON.stringify(Object.keys(l)));t.cacheFns[f]||(t.cacheFns[f]=new Function(...u,d));const m=t.cacheFns[f];return{res:await m(...g),LOGS:A}}catch(I){let b=await errorescript(`// errore\n async function script() {\n ${a}\n }`,I);console.error(I),t?.bus?.errore(b)}}catch(y){t?.bus?.errore(`${y.message}\nscript: ${i}`),console.error(y)}}async function processatop(e,t,i){if(!t)return;let n=[],s=t.getObjectByName("_mtop");if(s)for(;s.children.length>0;)s.remove(s.children[0]);else s=creategroup("_mtop"),t.add(s);const uk=e=>`${e.key}|${Math.round(((e.ang||0)+180)%180)/5}|${e.pos.y}`;let r=shapeclip();const o=[...new Set(i.filter((e=>"top"==e.type)).map(uk))];let a=[],A=0;for(let t of o){let o=i.filter((e=>"top"==e.type&&uk(e)===t));if(o.length){let t=o[0],l=i.filter((e=>"hole"==e.type&&e.key==t.key)),c=[],h=[],p=[];for(let e of o)c.push(e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z));let u=[];for(let e of l){let t=e.op.ptrif,i=e.op.ptapplica,n=e.shape.dims();t=t?[n.p1,...t]:[n.p1,n.p2],i||(i=n.p1);let s=e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z),r=getshape().frompt(t).rotate(-e.ang).move(e.pos.x,e.pos.z);u.push({pt:r.pt,shape:s,op:e.op,width:n.width,height:n.height}),e.op?.hidden||h.push(s)}let g,d=r.unisci(c,h,p);for(let t of d){let i=o[0],r=t.shape.rebase(-i.ang),l=t.shape.dims(),c=getshape().fromrect(l.width,l.height,l.p1.x,l.p1.y);r.holes=[],r.cuts=[];for(let e of t.holes)r.holes.push(e.rebase(-i.ang,!0,r.origine.x,r.origine.y));const to2dec=e=>Math.round(100*(Number(e)||0))/100;let h=u.map((e=>{let t=getshape().frompt(e.pt),{shape:n}=t.rebase(-i.ang,!0,r.origine.x,r.origine.y);return{op:e.op,pt:n.pt,px:to2dec(n.pt[0].x),py:to2dec(n.pt[0].y),dx:to2dec(e.width),dy:to2dec(e.height)}})),p=h.filter((e=>{for(let t of e.pt)if(c.pointinshape(t))return!0;return!1}));p.forEach((e=>delete e.pt));let d=[];await runScript(e,"_ricalcolatop",{SHAPES:n,BOX:d,DB:a,TOPS:[],_level:800,processatop:{top:r,base:i,lavs:p,idt:A}},{}),A++;for(let e of d)g=posiziona(posiziona(e,{sa:i.pos.y||0,sl:r.origine.x,sp:r.origine.y}),{ay:i.ang}),s.add(g)}}}const l=i.filter((e=>"altri"==e.type));let c=[];await runScript(e,"_ricalcolaaltri",{SHAPES:n,BOX:c,DB:a,TOPS:[],_level:800,processatop:{altri:l,idt:A}},{}),A++;for(let e of c)s.add(e);const uk1=e=>`${e.key}|${e.pos.y}`,h=i.filter((e=>"lines"==e.type)),p=[...new Set(h.map(uk1))];for(let t of p){const i=h.filter((e=>uk1(e)===t)),s=joinlinestoshapes(i);for(let r of s){let s={sh:r,key:t,data:i[0].op||{},idt:A};await runScript(e,"_ricalcolalinee",{SHAPES:n,BOX:c,DB:a,TOPS:[],_level:800,processatop:s,idt:A},{})}A++}for(let e of c)s.add(e);return{DB:a,SHAPES:n}}function dumpscene(e,t={}){const{maxdepth:i=1/0}=t,r3=e=>Math.round(1e3*e)/1e3;function layerMaskToString(e){let t="";for(let i=0;i<32;i++)t=(e&1<<i?"x":"_")+t;return t}function filterUserData(e){if(!e)return{};const t={};for(const i in e){const n=e[i];if(null==n)continue;const s=typeof n;"string"!==s&&"number"!==s&&"boolean"!==s||(t[i]=n)}return t}return function scan(e,t=0){if(!e||t>i)return null;const n={type:e.type,name:e.name||"",layer:layerMaskToString(e.layers?.mask??0),userData:filterUserData(e.userData)};if(e.position&&function sigPos(e){return 0!==e.x||0!==e.y||0!==e.z}(e.position)&&(n.position={x:r3(e.position.x),y:r3(e.position.y),z:r3(e.position.z)}),e.rotation&&function sigRot(e){return 0!==e.x||0!==e.y||0!==e.z}(e.rotation)&&(n.rotation={x:r3(e.rotation.x),y:r3(e.rotation.y),z:r3(e.rotation.z)}),e.scale&&function sigScale(e){return 1!==e.x||1!==e.y||1!==e.z}(e.scale)&&(n.scale={x:r3(e.scale.x),y:r3(e.scale.y),z:r3(e.scale.z)}),e.isMesh&&e.geometry){n.geometry={type:e.geometry.type};const t=e.geometry.parameters;if(t)for(const e in t){const i=t[e];"number"==typeof i&&(n.geometry[e]=r3(i))}}return e.material&&(Array.isArray(e.material)?n.material=e.material.map((e=>e.type||e.name||"Material")):n.material=e.material.type||e.material.name||"Material"),e.children?.length&&(n.children=e.children.map((e=>scan(e,t+1))).filter(Boolean)),n}(e,0)}async function processamarker(t){t.updateMatrixWorld(!0);const i=new Map;function trovagenitorerif(e){for(;e&&!e.userData?.rifid;)e=e.parent;return e}!function traverse(n){if(n.userData?.markerid)i.set(n.userData.markerid,n);else if(n.name?.startsWith("#mk_")){const s=n.name,r=i.get(s);if(!r)return void t.remove(n);{r.updateMatrixWorld(!0),n.updateMatrixWorld(!0);const t=n,i=trovagenitorerif(r)||r,s=trovagenitorerif(t)||t;if(!i||!s)return;i.updateMatrixWorld(!0),s.updateMatrixWorld(!0),t.updateMatrixWorld(!0);const o=r.matrixWorld.clone(),a=t.matrixWorld.clone(),A=s.matrixWorld.clone().clone().invert().multiply(a),l=o.clone().multiply(A.clone().invert()),c=s.parent,h=(c?c.matrixWorld:new e.Matrix4).clone().invert().multiply(l),p=new e.Vector3,u=new e.Quaternion,g=new e.Vector3;h.decompose(p,u,g),s.position.copy(p),s.quaternion.copy(u),s.scale.copy(g),s.updateMatrixWorld(!0),r.visible=!1}}for(const e of[...n.children])traverse(e)}(t)}async function processagruppo(e,t,i){i||(i=t),Object.assign(i.userData,{SHAPES:[],DB:[],TOPS:[]});for(let n of i.userData.INFO.rows)if("fn"==n?.t){let s=creategroup(),r=[];await runScript(e,n.fn,{BOX:r,SHAPES:t.userData.SHAPES,DB:i.userData.DB,TOPS:i.userData.TOPS,_level:i.userData._level},n.pars,n.p2),r.length&&(r.forEach((e=>s.add(e))),Object.keys(n.p2).length&&(s=posiziona(s,n.p2)),t.add(s))}else if(n?.rows&&n.rows.length){let i=creategroup();n.iscad&&(i=posiziona(i,n.cadv)),i.name=n.id,Object.assign(i.userData,{INFO:n,_level:t.userData._level+1});let s=i;i.children[0]&&i.children[0].userData.ismove&&(s=i.children[0]),n.cadv?.move?.annulla||await processagruppo(e,s,i),t.add(i)}}function getalldb(t,i){let n=[],s=[],r=[];if(t){let i=new e.Matrix4,o=new e.Matrix4;t.updateMatrixWorld(),i.copy(t.matrixWorld);let a=i.clone().invert();t.traverse((t=>{if(t.userData?.DB&&Array.isArray(t.userData.DB)&&n.push(...t.userData.DB),t.userData?.TOPS&&t.userData.TOPS.length){t.updateMatrixWorld(),o.copy(t.matrixWorld);let i=o.clone().premultiply(a),n=new e.Vector3;n.setFromMatrixPosition(i),(new e.Euler).setFromRotationMatrix(i);let r=-e.MathUtils.radToDeg(Math.atan2(i.elements[2],i.elements[10]));for(let i of t.userData.TOPS){let{sl:t=0,sp:o=0,ay:a=0}=i.posfn;if(t||o||a){let A=e.MathUtils.degToRad(-r),l=Math.cos(A),c=Math.sin(A),h=t*l-o*c,p=t*c+o*l,u=new e.Vector3(n.x+h,n.y,n.z+p),g=r-a;s.push({...i,pos:u,ang:g})}else s.push({...i,pos:n,ang:r})}}t.userData?.SHAPES&&Array.isArray(t.userData.SHAPES)&&t.userData.SHAPES.forEach((e=>{let t=e?.tojson();r.push(t)}))}))}return i&&(i.DB=n,i.TOPS=s,r=r.filter((e=>e.visible)),i.SHAPES=r),{DB:n,TOPS:s,SHAPES:r}}async function evalcustomfunction(e,t,i,n){try{i||(i={}),n||(n={});const s={GCAD:!1,...i,A:e,V:e.vari,amb:e,info3d:async function info3d(t,i=1,n=0,s=0){if(e.gcad)return await e.gcad.info3d(t,i,n,s)},gcad:e.gcad,log:function addlog(...e){const t=e.map((e=>getOggetto(e)));console.log(...t)},Math:Math,getcolonne:getcolonne,clean:clean,SP:Ve,seeder:seeder,seedarray:seedarray,Punto2:Punto2,Linea2:Linea2,clamp:clamp,hash:hash,PIF:Ue,getshape:getshape,shapeclip:shapeclip,...n},r=[...Object.keys(s),...Object.keys(Xe)],o=[...Object.values(s),...Object.values(Xe)],a=new Function(...r,`\n try {\n return (async () => {\n ${t}\n })();\n } catch (err) {\n err.stack = '[SCRIPT] ' + err.stack;\n throw err;\n }`);return await a(...o)}catch(e){throw console.error("Errore durante l'esecuzione:",e),e}}function setLineColorMode(e,t){e?(ki.color.set(16777215),_i.color.set(16777215)):t?(ki.color.set(2501422),_i.color.set(8421504)):(ki.color.set(6316128),_i.color.set(8421504)),ki.needsUpdate=!0,_i.needsUpdate=!0}export{Linea2,Matrix3D,Ue as PIF,Punto2,Li as SIDE,Ve as SP,TODEG,TORAD,Vis2d,Vobject,Vscene,addmovpivot,angle2vec,angle3point,Xe as blocked,calcolatasks,checkmovedata,clamp,clean,creagizmo,creategroup,d3dview,deletegroup,dumpscene,dxfbulge,edgesfromgeometry,elaborapercorso,errorescript,estruso,estrusopat,evalcustomfunction,evidenziaColli,exportdxf,extractTextures,facesettile,get3dshape,getOggetto,getalldb,getbb,getbordi,getbox,getcilindro,getcyl,getdumpmacro,getemitter,getextrude,getface,getfakeshadow,getfakeshadow2,getline,getlinesgeom,getluce,getmarker,getmesh,getmovimento,getnodebyid,getpannello,getpannello2,getpoint,getptsoffset,getpunto,getquota,getreceiver,getriferimento,getshape,getsphere,getsprite,getsubrules,gettarghetta,getthorus,groupfromgeometry,hash,infocircle,infoestrudi,intersectcircle,isfn,ismacro,joinlinestoshapes,konvautils,mapvertices,ki as materialline1,_i as materialline2,Ui as mblack,Gi as mblue,Fi as mgray1,Ni as mgray2,Yi as mgreen,Oi as mred,Ri as mwhite,newgcad,normal2,pickvariant,posiziona,processagruppo,processamarker,processatop,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,round,runScript,salvaMaterialiOriginali,scalaoggetto,Xi as scaleunit,seedarray,seeder,setLineColorMode,setorigine,shapeclip,smat,spritemat,svuotanodo,texgen,valutagrafica};
1
+ import*as e from"three";import{TrianglesDrawMode as t,TriangleFanDrawMode as i,TriangleStripDrawMode as n,Loader as s,LoaderUtils as r,FileLoader as o,MeshPhysicalMaterial as a,Vector2 as A,Color as l,LinearSRGBColorSpace as c,SRGBColorSpace as h,SpotLight as p,PointLight as u,DirectionalLight as g,Matrix4 as d,Vector3 as f,Quaternion as m,InstancedMesh as I,InstancedBufferAttribute as b,Object3D as y,TextureLoader as C,ImageBitmapLoader as B,BufferAttribute as E,InterleavedBuffer as x,InterleavedBufferAttribute as w,LinearMipmapLinearFilter as v,NearestMipmapLinearFilter as P,LinearMipmapNearestFilter as D,NearestMipmapNearestFilter as M,LinearFilter as S,NearestFilter as T,RepeatWrapping as L,MirroredRepeatWrapping as k,ClampToEdgeWrapping as _,PointsMaterial as R,Material as F,LineBasicMaterial as N,MeshStandardMaterial as O,DoubleSide as G,MeshBasicMaterial as Y,PropertyBinding as U,BufferGeometry as X,SkinnedMesh as q,Mesh as z,LineSegments as H,Line as j,LineLoop as W,Points as J,Group as K,PerspectiveCamera as V,MathUtils as Z,OrthographicCamera as $,Skeleton as ee,AnimationClip as te,Bone as ie,InterpolateDiscrete as ne,InterpolateLinear as se,Texture as re,VectorKeyframeTrack as oe,NumberKeyframeTrack as ae,QuaternionKeyframeTrack as Ae,ColorManagement as le,FrontSide as ce,Interpolant as he,Box3 as pe,Sphere as ue,CompressedCubeTexture as ge,UnsignedByteType as de,CompressedArrayTexture as fe,CompressedTexture as me,DisplayP3ColorSpace as Ie,LinearDisplayP3ColorSpace as be,NoColorSpace as ye,RGBA_ASTC_6x6_Format as Ce,RedFormat as Be,RGFormat as Ee,RGBAFormat as xe,HalfFloatType as Qe,FloatType as we,DataTexture as ve,Data3DTexture as Pe,RGBA_S3TC_DXT1_Format as De,RGB_PVRTC_4BPPV1_Format as Me,RGB_ETC2_Format as Se,RGB_ETC1_Format as Te,RGBA_S3TC_DXT5_Format as Le,RGBA_PVRTC_4BPPV1_Format as ke,RGBA_ETC2_EAC_Format as _e,RGBA_BPTC_Format as Re,RGBA_ASTC_4x4_Format as Fe,MeshPhongMaterial as Ne,AdditiveBlending as Oe,Float32BufferAttribute as Ge}from"three";class Matrix3D{constructor(){this.m=new Float32Array(16),this.st=[],this.init()}init(){return this.m.fill(0),this.m[0]=this.m[5]=this.m[10]=this.m[15]=1,this}atranslate(e,t,i){return this.m[12]+=e,this.m[13]+=t,this.m[14]+=i,this}translate(e,t,i){return e??=0,t??=0,i??=0,this.m[12]+=e*this.m[0]+t*this.m[4]+i*this.m[8],this.m[13]+=e*this.m[1]+t*this.m[5]+i*this.m[9],this.m[14]+=e*this.m[2]+t*this.m[6]+i*this.m[10],this.m[15]+=e*this.m[3]+t*this.m[7]+i*this.m[11],this}rotateX(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),s=[...this.m];this.m[1]=s[1]*n+s[9]*i,this.m[2]=s[2]*n+s[10]*i,this.m[3]=s[3]*n+s[11]*i,this.m[9]=s[1]*-i+s[9]*n,this.m[10]=s[2]*-i+s[10]*n,this.m[11]=s[3]*-i+s[11]*n}return this}rotateY(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),s=[...this.m];this.m[0]=s[0]*n+s[8]*i,this.m[1]=s[1]*n+s[9]*i,this.m[2]=s[2]*n+s[10]*i,this.m[3]=s[3]*n+s[11]*i,this.m[8]=s[0]*-i+s[8]*n,this.m[9]=s[1]*-i+s[9]*n,this.m[10]=s[2]*-i+s[10]*n,this.m[11]=s[3]*-i+s[11]*n}return this}rotateZ(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),n=Math.cos(t),s=[...this.m];this.m[0]=s[0]*n+s[4]*i,this.m[1]=s[1]*n+s[5]*i,this.m[2]=s[2]*n+s[6]*i,this.m[3]=s[3]*n+s[7]*i,this.m[4]=s[0]*-i+s[4]*n,this.m[5]=s[1]*-i+s[5]*n,this.m[6]=s[2]*-i+s[6]*n,this.m[7]=s[3]*-i+s[7]*n}return this}getdati(){return Array.from(this.m)}setdati(e){if(e&&16===e.length){for(let t=0;t<16;t++)this.m[t]=Number(e[t])||0;return this}this.init()}push(){return this.st.push(new Float32Array(this.m)),this}pop(){return this.st.length>0&&(this.m=this.st.pop()),this}transform(e,t,i=0){return{x:e*this.m[0]+t*this.m[4]+i*this.m[8]+this.m[12],y:e*this.m[1]+t*this.m[5]+i*this.m[9]+this.m[13],z:e*this.m[2]+t*this.m[6]+i*this.m[10]+this.m[14]}}invert(){const e=this.m,t=new Matrix3D,i=this.determinant();return Math.abs(i)<1e-8?null:(t.m[0]=(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])/i,t.m[1]=(e[1]*e[14]*e[11]+e[9]*e[2]*e[15]+e[13]*e[10]*e[3]-e[1]*e[10]*e[15]-e[9]*e[14]*e[3]-e[13]*e[2]*e[11])/i,t.m[2]=(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])/i,t.m[3]=(e[1]*e[10]*e[7]+e[5]*e[2]*e[11]+e[9]*e[6]*e[3]-e[1]*e[6]*e[11]-e[5]*e[10]*e[3]-e[9]*e[2]*e[7])/i,t.m[4]=(e[4]*e[14]*e[11]+e[8]*e[6]*e[15]+e[12]*e[10]*e[7]-e[4]*e[10]*e[15]-e[8]*e[14]*e[7]-e[12]*e[6]*e[11])/i,t.m[5]=(e[0]*e[10]*e[15]+e[8]*e[14]*e[3]+e[12]*e[2]*e[11]-e[0]*e[14]*e[11]-e[8]*e[2]*e[15]-e[12]*e[10]*e[3])/i,t.m[6]=(e[0]*e[14]*e[7]+e[4]*e[2]*e[15]+e[12]*e[6]*e[3]-e[0]*e[6]*e[15]-e[4]*e[14]*e[3]-e[12]*e[2]*e[7])/i,t.m[7]=(e[0]*e[6]*e[11]+e[4]*e[10]*e[3]+e[8]*e[2]*e[7]-e[0]*e[10]*e[7]-e[4]*e[2]*e[11]-e[8]*e[6]*e[3])/i,t.m[8]=(e[4]*e[9]*e[15]+e[8]*e[13]*e[7]+e[12]*e[5]*e[11]-e[4]*e[13]*e[11]-e[8]*e[5]*e[15]-e[12]*e[9]*e[7])/i,t.m[9]=(e[0]*e[13]*e[11]+e[8]*e[1]*e[15]+e[12]*e[9]*e[3]-e[0]*e[9]*e[15]-e[8]*e[13]*e[3]-e[12]*e[1]*e[11])/i,t.m[10]=(e[0]*e[5]*e[15]+e[4]*e[13]*e[3]+e[12]*e[1]*e[7]-e[0]*e[13]*e[7]-e[4]*e[1]*e[15]-e[12]*e[5]*e[3])/i,t.m[11]=(e[0]*e[9]*e[7]+e[4]*e[1]*e[11]+e[8]*e[5]*e[3]-e[0]*e[5]*e[11]-e[4]*e[9]*e[3]-e[8]*e[1]*e[7])/i,t.m[12]=(e[4]*e[13]*e[10]+e[8]*e[5]*e[14]+e[12]*e[9]*e[6]-e[4]*e[9]*e[14]-e[8]*e[13]*e[6]-e[12]*e[5]*e[10])/i,t.m[13]=(e[0]*e[9]*e[14]+e[8]*e[13]*e[2]+e[12]*e[1]*e[10]-e[0]*e[13]*e[10]-e[8]*e[1]*e[14]-e[12]*e[9]*e[2])/i,t.m[14]=(e[0]*e[13]*e[6]+e[4]*e[1]*e[14]+e[12]*e[5]*e[2]-e[0]*e[5]*e[14]-e[4]*e[13]*e[2]-e[12]*e[1]*e[6])/i,t.m[15]=(e[0]*e[5]*e[10]+e[4]*e[9]*e[2]+e[8]*e[1]*e[6]-e[0]*e[9]*e[6]-e[4]*e[1]*e[10]-e[8]*e[5]*e[2])/i,t)}determinant(){const e=this.m;return e[0]*(e[5]*e[10]*e[15]+e[9]*e[14]*e[7]+e[13]*e[6]*e[11]-e[5]*e[14]*e[11]-e[9]*e[6]*e[15]-e[13]*e[10]*e[7])-e[4]*(e[1]*e[10]*e[15]+e[9]*e[14]*e[3]+e[13]*e[2]*e[11]-e[1]*e[14]*e[11]-e[9]*e[2]*e[15]-e[13]*e[10]*e[3])+e[8]*(e[1]*e[6]*e[15]+e[5]*e[14]*e[3]+e[13]*e[2]*e[7]-e[1]*e[14]*e[7]-e[5]*e[2]*e[15]-e[13]*e[6]*e[3])-e[12]*(e[1]*e[6]*e[11]+e[5]*e[10]*e[3]+e[9]*e[2]*e[7]-e[1]*e[10]*e[7]-e[5]*e[2]*e[11]-e[9]*e[6]*e[3])}multiply(e){const t=[...this.m],i=e.m;return this.m[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2]+t[12]*i[3],this.m[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2]+t[13]*i[3],this.m[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2]+t[14]*i[3],this.m[3]=t[3]*i[0]+t[7]*i[1]+t[11]*i[2]+t[15]*i[3],this.m[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6]+t[12]*i[7],this.m[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6]+t[13]*i[7],this.m[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6]+t[14]*i[7],this.m[7]=t[3]*i[4]+t[7]*i[5]+t[11]*i[6]+t[15]*i[7],this.m[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10]+t[12]*i[11],this.m[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10]+t[13]*i[11],this.m[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10]+t[14]*i[11],this.m[11]=t[3]*i[8]+t[7]*i[9]+t[11]*i[10]+t[15]*i[11],this.m[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12]*i[15],this.m[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13]*i[15],this.m[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14]*i[15],this.m[15]=t[3]*i[12]+t[7]*i[13]+t[11]*i[14]+t[15]*i[15],this}}const Ye=.001;class Punto2{constructor(e,t){Array.isArray(e)?(this.x=e[0]||0,this.y=e[1]||0):e&&"object"==typeof e?(this.x=e.x||0,this.y=e.y||0):(this.x=e||0,this.y=t||0)}get dump(){return`{${this.x.toFixed(1)},${this.y.toFixed(1)}}`}get len2(){return this.x*this.x+this.y*this.y}get len(){return Math.sqrt(this.len2)}get angle(){return Math.atan2(this.y,this.x)}dir(){let e=this.len;return e?new Punto2(this.x/e,this.y/e):this}puntosucerchio(e=0,t=0){const i=t*Math.PI/180;return new Punto2(this.x+e*Math.cos(i),this.y+e*Math.sin(i))}tangentesucerchio(e=0,t=0,i=100){const n=t*Math.PI/180,s=this.x+e*Math.cos(n),r=this.y+e*Math.sin(n),o=n+Math.PI/2,a=s+i*Math.cos(o),A=r+i*Math.sin(o);return new Linea2(s,r,a,A)}angolo3p(e,t){let i=this;const n=e.x-i.x,s=e.y-i.y,r=t.x-i.x,o=t.y-i.y,a=n*r+s*o,A=Math.hypot(n,s),l=Math.hypot(r,o);if(!A||!l)return 0;let c=180*Math.acos(a/(A*l))/Math.PI;return c>180&&(c=360-c),c}distanza(e){return new Punto2(e.x-this.x,e.y-this.y).len}}class Linea2{constructor(e,t,i=null,n=null){"number"==typeof e&&"number"==typeof t&&null!==i&&null!==n?(this.p1=new Punto2({x:e,y:t}),this.p2=new Punto2({x:i,y:n})):e&&t?(this.p1=new Punto2(e),this.p2=new Punto2(t)):(this.p1=new Punto2(0,0),this.p2=new Punto2(1,0))}get dump(){return`${this.p1.dump}-${this.p2.dump}`}get dx(){return this.p2.x-this.p1.x}get dy(){return this.p2.y-this.p1.y}get len2(){let{dx:e,dy:t}=this;return e*e+t*t}get len(){return Math.sqrt(this.len2)}get angle(){return this.angolo()}estendi(e){if("number"==typeof e){if(!e)return this;let{p1:t,p2:i,dx:n,dy:s,len:r}=this;return r?(n/=r,s/=r,e>0?new Linea2(t,new Punto2(i.x+n*e,i.y+s*e)):new Linea2(new Punto2(t.x+n*e,t.y+s*e),i)):this}if(e instanceof Linea2){const t=this.interseca(e);if(!t)return this;return(t.x-this.p1.x)**2+(t.y-this.p1.y)**2<(t.x-this.p2.x)**2+(t.y-this.p2.y)**2?new Linea2(t,this.p2):new Linea2(this.p1,t)}}puntot(e){return new Punto2(this.p1.x+(this.p2.x-this.p1.x)*e,this.p1.y+(this.p2.y-this.p1.y)*e)}setlunghezza(e){let t=this.len;if(t&&e){let i=e/t,n=this.puntot(i);this.p2=n}}proiezionet(e){const{p1:t,dx:i,dy:n,len2:s}=this;if(s<Ye)return;const r=((e.x-t.x)*i+(e.y-t.y)*n)/s;return{p:new Punto2(t.x+r*i,t.y+r*n),t:r}}proiezione(e){const t=this.proiezionet(e);return t?t.p:void 0}get direzione(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(e/i,t/i):new Punto2(0,0)}get normale(){let{dx:e,dy:t,len:i}=this;return i?new Punto2(-t/i,e/i):new Punto2(0,1)}perpendicolare(e=null,t=0){const{normale:i,len:n,p1:s}=this;if(n<1e-9)return;const r=t||n,o=e?new Punto2(e):this.p1;return new Linea2(o,new Punto2(o.x+i.x*r,o.y+i.y*r))}perpendicolaret(e,t=0){const{normale:i,len:n,p1:s,p2:r}=this;if(n<1e-9)return;const o=t||n,a=new Punto2(s.x+(r.x-s.x)*e,s.y+(r.y-s.y)*e);return new Linea2(a,new Punto2(a.x+i.x*o,a.y+i.y*o))}rotatedonp1(e){const t=e*Math.PI/180,i=this.p2.x-this.p1.x,n=this.p2.y-this.p1.y,s=Math.cos(t),r=Math.sin(t),o=this.p1.x+i*s-n*r,a=this.p1.y+i*r+n*s;return new Linea2(this.p1,{x:o,y:a})}rotatedonp2(e){const t=e*Math.PI/180,i=this.p1.x-this.p2.x,n=this.p1.y-this.p2.y,s=Math.cos(t),r=Math.sin(t),o=this.p2.x+i*s-n*r,a=this.p2.y+i*r+n*s;return new Linea2(this.p2,{x:o,y:a})}ruotata(e=Math.PI/2,t=0,i=!1){const{p1:n,p2:s,direzione:r,len:o}=this;if(t=t||o,o<1e-9)return;const a=Math.abs(e%(2*Math.PI));if(!(a<1e-9||Math.abs(a-Math.PI)<1e-9)){if("boolean"==typeof i){const o=(r.x*Math.cos(e)-r.y*Math.sin(e))*t,a=(r.x*Math.sin(e)+r.y*Math.cos(e))*t;return i?new Linea2(n,new Punto2(n.x+o,n.y+a)):new Linea2(s,new Punto2(s.x+o,s.y+a))}{let n=new Punto2(i);const s=r.x*Math.cos(e)-r.y*Math.sin(e),o=r.x*Math.sin(e)+r.y*Math.cos(e);new Punto2(s,o);const a=new Linea2(n,new Punto2(n.x+s,n.y+o)),A=this.interseca(a);if(!A)return;const l=new Punto2(A.x+s*t,A.y+o*t);return new Linea2(A,l)}}}puntosudirezione(e,t){let{direzione:i}=this;return new Punto2(e.x+i.x*t,e.y+i.y*t)}parallela(e,t){let{direzione:i}=this;return new Linea2(e,this.puntosudirezione(e,t))}intersezione(e){return this.interseca(e)}interseca(e){const{p1:t,p2:i}=this,{p1:n,p2:s}=e,r=(i.x-t.x)*(s.y-n.y)-(i.y-t.y)*(s.x-n.x);if(Math.abs(r)<Ye)return null;const o=((n.x-t.x)*(s.y-n.y)-(n.y-t.y)*(s.x-n.x))/r;return new Punto2(t.x+o*(i.x-t.x),t.y+o*(i.y-t.y))}onsegment(e,t=1e-9){const{p1:i,p2:n}=this,s=n.x-i.x,r=n.y-i.y,o=e.x-i.x,a=e.y-i.y;if(Math.abs(s*a-r*o)>t)return!1;const A=o*s+a*r;if(A<-t)return!1;return!(A>s*s+r*r+t)}distanzaPunto(e){const t=this.proiezione(e);if(!t)return 1e9;const i=e.x-t.x,n=e.y-t.y;return Math.hypot(i,n)}isparallela(e){const t=this.dx*e.dy-this.dy*e.dx;return Math.abs(t)<1}lunghezzatotale(e){const t=this.p2.x-this.p1.x,i=this.p2.y-this.p1.y,n=Math.hypot(t,i);if(!n)return 0;const s=1/n,proj=e=>(e.x*t+e.y*i)*s,r=proj(this.p1),o=proj(this.p2),a=proj(e.p1),A=proj(e.p2),l=r<o?r:o,c=r>o?r:o,h=a<A?a:A,p=a>A?a:A;return Math.round(100*(Math.max(c,p)-Math.min(l,h)))/100}infoquad(e){if(!this.isparallela(e))return;const{p1:t,p2:i,normale:n}=this;let{p1:s,p2:r}=e;const distance2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;function wrapToPi(e){return e>Math.PI?e-=2*Math.PI:e<-Math.PI&&(e+=2*Math.PI),e}function getangle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}distance2(t,s)>distance2(t,r)&&([s,r]=[r,s]);const o=getangle(t,i);function toDeg(e){return Math.round(18e4*e/Math.PI)/1e3}const a=toDeg(wrapToPi(getangle(t,s)-o)),A=toDeg(wrapToPi(getangle(i,r)-o)),l=Math.round(100*this.len)/100,c=s.x-t.x,h=s.y-t.y,p=Math.round(100*Math.abs(c*n.x+h*n.y))/100;let u=this.lunghezzatotale(e);return{angle:toDeg(o),aini:a,afin:A,l:l,ltot:u,distanza:p,sx:Math.round(100*t.x)/100,sy:Math.round(100*t.y)/100}}isperpendicolare(e){const t=this.dx*e.dx+this.dy*e.dy;return Math.abs(t)<Ye}offset(e){const t=this.normale,i=new Punto2(this.p1.x+t.x*e,this.p1.y+t.y*e),n=new Punto2(this.p2.x+t.x*e,this.p2.y+t.y*e);return new Linea2(i,n)}angolo(e){const{dx:t,dy:i}=this;let n;if(e){const{dx:s,dy:r}=e,o=Math.atan2(i,t);n=Math.atan2(r,s)-o}else n=Math.atan2(i,t);return n>Math.PI?n-=2*Math.PI:n<-Math.PI&&(n+=2*Math.PI),n}ortopt(e){let{p1:t,dx:i,dy:n}=this;const s=Math.hypot(i,n);if(s<Ye)return;const r=-n/s,o=i/s;return{x:t.x+r*e,y:t.y+o*e}}offsetline(e){let{p1:t,p2:i,dx:n,dy:s}=this;const r=Math.hypot(n,s);if(r<Ye)return;const o=-s/r,a=n/r;return new Linea2({x:t.x+o*e,y:t.y+a*e},{x:i.x+o*e,y:i.y+a*e})}distanzaSegmentiParalleli(e){if(!this.isparallela(e))return 1e9;const{p1:t,normale:i}=this,n=e.p1.x-t.x,s=e.p1.y-t.y,r=Math.abs(n*i.x+s*i.y);return Math.abs(r)<Ye?0:r}isCollineare(e,t=!1){if(!this.isparallela(e))return!1;const i=this.distanzaSegmentiParalleli(e);if(Math.abs(i)>Ye)return!1;if(t){function isPointBetween(e,t,i,n=Ye){const s=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);return!(Math.abs(s)>n)&&(Math.min(t.x,i.x)-n<=e.x&&e.x<=Math.max(t.x,i.x)+n&&Math.min(t.y,i.y)-n<=e.y&&e.y<=Math.max(t.y,i.y)+n)}const{p1:n,p2:s}=this,{p1:r,p2:o}=e;return isPointBetween(r,n,s)||isPointBetween(o,n,s)||isPointBetween(n,r,o)||isPointBetween(s,r,o)}return!0}clone(){return new Linea2(this.p1.x,this.p1.y,this.p2.x,this.p2.y)}rotate(e){if(!e)return this;const t=e*Math.PI/180,i=Math.cos(t),n=Math.sin(t);function rotate(e){return new Punto2(e.x*i-e.y*n,e.x*n+e.y*i)}return this.p1=rotate(this.p1),this.p2=rotate(this.p2),this}move(e=0,t=0){return"object"==typeof e&&e.x&&(t=e.y||0,e=e.x),this.p1.x+=e,this.p1.y+=t,this.p2.x+=e,this.p2.y+=t,this}}function getptsoffset(e,t,i){let n,s,r,o,a=-1,A=-1,l=e.length,c=t.length,h=[],p=new Linea2(e[0],e[1]),u=new Linea2(e[l-2],e[l-1]),g=p.offset(i),d=u.offset(i);for(let e=0;e<c;e++){let i=new Linea2(t[e%c],t[(e+1)%c]);g.isparallela(i)&&g.isCollineare(i,!0)&&(a=e),d.isparallela(i)&&d.isCollineare(i,!0)&&(A=e)}if(a>=0&&A>=0){a>A?(n=a-A+2,s=A+c-a+2,n<s?(r=A,o=a+1):(r=a,o=A+c+1)):(n=A-a+2,s=a+c-A+2,n<s?(r=a,o=A+1):(r=A,o=a+c+1));for(let e=r;e<=o;e++)h.push(t[e%c])}return h}async function errorescript(e,t){let i,n,s,r=(t.stack||"").match(/user-script\.js:(\d+):(\d+)/);if(r||(r=(t.toString()||"").match(/user-script\.js:(\d+):(\d+)/)),r&&([,i,n]=r.map(Number),i-=2),(!i||!n)&&t instanceof SyntaxError){window.acorn||(await new Promise(((e,t)=>{const i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/acorn@8.15.0/dist/acorn.js",i.onload=e,i.onerror=t,document.head.appendChild(i)})),console.log("caricato acorn"));try{window.acorn.parse(e,{ecmaVersion:"latest"})}catch(e){e.loc&&(i=e.loc.line,n=e.loc.column+1)}}return s=i&&n?`ERRORE: ${t.message}\n`+function extractContext(e,t,i,n=1){const s=e.split(/\r?\n/),r=t-1,o=Math.max(0,r-n),a=Math.min(s.length,r+n+1);return s.slice(o,a).map(((e,n)=>o+n+1===t?e+"\n"+" ".repeat(i-1)+"^":e)).join("\n")}(e,i,n):t.message,s}function seedarray(e,t){if(e&&e.length){let i=[];for(let t=0;t<e.length;t++){let n=e[t];if(n.p)for(let e=0;e<n.p;e++)i.push(t);else i.push(t)}return e[i[seeder(i.length,t)]]}}function seeder(e,t="seed42"){const i=function mulberry32(e){return function(){e=(e|=0)+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}(function xmur3(e){let t=1779033703^e.length;for(let i=0;i<e.length;i++)t=Math.imul(t^e.charCodeAt(i),3432918353),t=t<<13|t>>>19;return function(){return t=Math.imul(t^t>>>16,2246822507),t=Math.imul(t^t>>>13,3266489909),(t^=t>>>16)>>>0}}(String(t))());return Math.floor(i()*e)}function hash(e){let t="";if("string"==typeof e||"number"==typeof e)t=e+"";else if("object"==typeof e&&e){const i=Object.keys(e).sort(),n="\0";t=i.map((t=>`${t}${n}${String(e[t])}`)).join(n)}let i=2166136261,n=2218511855;for(let e=0;e<t.length;e++){const s=t.charCodeAt(e);i^=s,i+=i<<5^2779096485,n^=i,n=((n<<3)+s^2134516169)>>>0}return i>>>=0,i.toString(16)+n.toString(16)}function clean(e,t=!1){return t?(e||"").trim().toLowerCase():(e||"").trim()}function getcouple(e,t="=",i=!0){const n=(e=e||"").indexOf(t);return n>=0?{v:clean(e.substring(0,n),i),o:e.substring(n+t.length).trim(),fl:!0}:{v:clean(e,i),o:"",fl:!1}}function clamp(e,t=-1/0,i=1/0){return(e=Number(e)||0)<t&&(e=t),e>i&&(e=i),e}function getcolonne(e,t=!1){e=String(e||"");const i=/^(\d*)\.\.(\d*)$/.exec(e);if(i){let e=parseInt(i[1])||0,t=parseInt(i[2])||0;const n=[];for(let i=e;i<=t;i++)n.push(i+"");return n}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const n=[];let s="",r=0,o=!1;for(let t=0;t<e.length;t++){const i=e[t];if(0===r&&'"'===i&&(0!==t&&"\\"===e[t-1]||(o=!o)),o||("("===i||"["===i||"{"===i?r++:")"!==i&&"]"!==i&&"}"!==i||(r=Math.max(0,r-1))),","!==i&&";"!==i||0!==r||o)s+=i;else{const e=s.trim();n.push(e),s=""}}const a=s.trim();return a&&n.push(a),n.map((e=>(e=e.trim(),!t&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("(")&&e.endsWith(")"))?e.slice(1,-1):e)))}new class Errori{constructor(){this.azzera()}azzera(){this.err=[]}add(e,t){this.err.push({msg:e,row:t})}get(){return this.err}get length(){return this.err.length}toString(){const e=[];for(const t of this.err){const i="object"==typeof t.msg?JSON.stringify(t.msg):t.msg||"";e.push(`${t.row?t.row+":":""}${i}`)}return e.join("\n")}};const round=(e,t=-1)=>{const i="string"==typeof e?parseFloat(e)||0:e;if(t<0)return Math.round(i||0);const n=Math.pow(10,t);return Math.round(i*n)/n||0};function muClComments(e,t){const i=(n=e,n.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||""))).split(/\r?\n/);var n;const s=[];let r="";for(const e of i){let t=e;if(/(^|[^:])\/\/.*/.test(t)&&(t=t.replace(/(^|[^:])\/\/.*/,((e,t)=>t.trim()))),t=t.trim(),0!==t.length)if(r.length>0&&(t=r+" "+t,r=""),t.endsWith("\\")){t=t.slice(0,-1);const e=t.lastIndexOf("//");-1!==e&&(t=t.slice(0,e).trim()),r=t}else s.push(t)}return s}const Ue=Math.PI/180;function TODEG(e,t=1){let i=10**t;return Math.round(180*e*i/Math.PI)/i}function TORAD(e,t=3){let i=10**t;return Math.round(e*Ue*i)/i}const Xe={window:void 0,self:void 0,globalThis:void 0,document:void 0,Function:void 0,eval:void 0,fetch:void 0,XMLHttpRequest:void 0};function getOggetto(e,t=[]){if(Array.isArray(e))return e.map((e=>getOggetto(e,t)));if(e&&"object"==typeof e){const i={};for(const[n,s]of Object.entries(e))"function"==typeof s||t&&t.includes(n)||(i[n]=getOggetto(s,t));return i}return e}function getSqDist(e,t){let i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function getSqSegDist(e,t,i){let n=t.x,s=t.y,r=i.x-n,o=i.y-s;if(0!==r||0!==o){let t=((e.x-n)*r+(e.y-s)*o)/(r*r+o*o);t>1?(n=i.x,s=i.y):t>0&&(n+=r*t,s+=o*t)}return r=e.x-n,o=e.y-s,r*r+o*o}function simplifyDPStep(e,t,i,n,s){let r,o=n;for(let n=t+1;n<i;n++){let s=getSqSegDist(e[n],e[t],e[i]);s>o&&(r=n,o=s)}o>n&&(r-t>1&&simplifyDPStep(e,t,r,n,s),s.push(e[r]),i-r>1&&simplifyDPStep(e,r,i,n,s))}function simplifyDouglasPeucker(e,t){let i=e.length-1,n=[e[0]];return simplifyDPStep(e,0,i,t,n),n.push(e[i]),n}function simplify(e,t,i){if(e.length<=2)return e;let n=void 0!==t?t*t:1;return e=i?e:function simplifyRadialDist(e,t){let i,n=e[0],s=[n];for(let r=1,o=e.length;r<o;r++)i=e[r],getSqDist(i,n)>t&&(s.push(i),n=i);return n!==i&&s.push(i),s}(e,n),e=simplifyDouglasPeucker(e,n)}function mapvertices(e,t){const dist2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;let i=e.length,n=t.length;if(i<2||n<2)return[];let s=[[0,0]];if(i===n){for(let e=1;e<i;e++)s.push([e,e]);return s}if(i>n)for(let r=1,o=0;r<i-1;r++){if(o+1<n){const i=e[r],n=dist2(i,t[o]);dist2(i,t[o+1])<=n&&o++}s.push([r,o])}else for(let r=1,o=0;r<n-1;r++){if(o+1<i){const i=t[r],n=dist2(i,e[o]);dist2(i,e[o+1])<=n&&o++}s.push([o,r])}return s.push([i-1,n-1]),s}function dxfbulge(e,t,i,n=0){const s=[];if(!i||Math.abs(i)<1e-10||0===n)return s;const r=4*Math.atan(i);if(r<0)return dxfbulge(t,e,-i,n).reverse();const o=t.x-e.x,a=t.y-e.y,A=Math.hypot(o,a),l=A/(2*Math.sin(r/2)),c=(e.x+t.x)/2,h=(e.y+t.y)/2,p=-a/A,u=o/A,g=l*Math.cos(r/2),d=i>=0?1:-1,f=c+d*p*g,m=h+d*u*g;let I=Math.atan2(e.y-m,e.x-f);for(let e=1;e<=n;e++){const t=I+e/(n+1)*r,i=f+l*Math.cos(t),o=m+l*Math.sin(t);s.push({x:i,y:o})}return s}function raccordabezier(e,t,i,n,s=10){const r=function getIntersection(e,t,i,n){const s=(e.x-t.x)*(i.y-n.y)-(e.y-t.y)*(i.x-n.x);return 0===s?null:{x:((e.x*t.y-e.y*t.x)*(i.x-n.x)-(e.x-t.x)*(i.x*n.y-i.y*n.x))/s,y:((e.x*t.y-e.y*t.x)*(i.y-n.y)-(e.y-t.y)*(i.x*n.y-i.y*n.x))/s}}(e,t,i,n);if(!r)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const o=r;if(0===s)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const a=[];for(let e=0;e<=s;e++){const n=e/s,r=1-n,A=r*r*t.x+2*r*n*o.x+n*n*i.x,l=r*r*t.y+2*r*n*o.y+n*n*i.y;a.push({x:A,y:l})}return a}function raccordabezier3(e,t,i,n,s=10){const r=t.x-e.x,o=t.y-e.y,a=i.x-t.x,A=i.y-t.y,l=Math.sqrt(r*r+o*o),c=Math.sqrt(a*a+A*A);if(n>l||n>c)return[e,t,i];n!=l&&n!=c||(n-=.01);const h=(l-n)/l,p=n/c;return raccordabezier(e,{x:e.x+r*h,y:e.y+o*h},{x:t.x+a*p,y:t.y+A*p},i,s)}function normal2(e,t){const i=t.x-e.x;let n=-(t.y-e.y),s=i;const r=Math.sqrt(n*n+s*s);return 0===r?{nx:0,ny:0}:{nx:n/r,ny:s/r}}function angle3point(e,t,i){const n=t.x-e.x,s=t.y-e.y,r=i.x-t.x,o=i.y-t.y,a=n*r+s*o,A=n*o-s*r,l=Math.sqrt(n**2+s**2),c=Math.sqrt(r**2+o**2);return l&&c?Math.atan2(A,a):0}function angle2vec(e,t){const i=e.x*t.x+e.y*t.y,n=Math.sqrt(e.x*e.x+e.y*e.y),s=Math.sqrt(t.x*t.x+t.y*t.y);if(0===n||0===s)return 0;let r=i/(n*s);r=Math.max(-1,Math.min(1,r));return Math.acos(r)/Ue}function removeduplicate(e,t=.005){if(!Array.isArray(e)||0===e.length)return[];const i=[],n=e.length;for(let t=0;t<n;t++){const s=e[t],r=e[(t+1)%n];i.push({x:s.x,y:s.y}),r.x,s.x,r.y,s.y}const s=i[0],r=i[i.length-1];return s.x,r.x,s.y,r.y,i}function infocircle(e,t,i,n,s,r){let o,a,A;"object"==typeof e?(o=e,a=t,A=i):(o=new Punto2(e,t),a=new Punto2(i,n),A=new Punto2(s,r));const l=(o.x+a.x)/2,c=(o.y+a.y)/2,h=(a.x+A.x)/2,p=(a.y+A.y)/2,u=a.x-o.x,g=a.y-o.y,d=A.x-a.x,f=-g,m=-(A.y-a.y),I=f*d-u*m;if(!I)return null;const b=((h-l)*d-(p-c)*m)/I,y=l+b*f,C=c+b*u,B=Math.hypot(o.x-y,o.y-C),E=180/Math.PI;let x=Math.atan2(o.y-C,o.x-y),w=Math.atan2(A.y-C,A.x-y);const v=Math.atan2(a.y-C,a.x-y);return w<x&&(w+=2*Math.PI),v<x&&(x+=2*Math.PI),v>w&&(w+=2*Math.PI),x*=E,w*=E,x=(x%360+360)%360,w=(w%360+360)%360,{center:new Punto2(round(y,1),round(C,1)),r:round(B,1),ang1:round(x,1),ang2:round(w,1)}}function intersectcircle(e,t,i,n,s){const r=s.x-n.x,o=s.y-n.y,a=n.x-e,A=n.y-t,l=r*r+o*o,c=2*(a*r+A*o),h=c*c-4*l*(a*a+A*A-i*i);if(h<=0)return null;const p=Math.sqrt(h),u=(-c-p)/(2*l),g=(-c+p)/(2*l),d=n.x+u*r,f=n.y+u*o,m=n.x+g*r,I=n.y+g*o,b=180/Math.PI;let y=Math.atan2(f-t,d-e)*b,C=Math.atan2(I-t,m-e)*b;return y=(y%360+360)%360,C=(C%360+360)%360,[y,C]}function getshape(){let e=[];function orientation(){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const s=e[n],r=e[(n+1)%i];t+=s.x*r.y-r.x*s.y}return t>0?1:t<0?-1:0}function tovec(){return e.flatMap((e=>[e.x,e.y]))}function move(t=0,i=0){"object"==typeof t&&t.x&&(i=t.y||0,t=t.x);for(let n of e)n.x+=t,n.y+=i;return this}function selezionaprimo(t){return(t%=e.length)>0&&(e=[...e.slice(t),...e.slice(0,t)]),this}function _addvec(t){for(let i=0;i<t.length;i+=2)e.push({x:t[i],y:t[i+1]})}function fromstr(t){return e=removeduplicate(function processTokens(e){const t=[];for(let i=0;i<e.length;i++){const n=e[i];if("point"===n.type)t.push(n.point);else if("command"===n.type)switch(n.cmd){case"x":{const s=t[t.length-1],r="point"===e[i+1]?.type?e[i+1].point:t[0],o=parseFloat(n.params[0])||5;{const e=1;let i=r.x-s.x,n=r.y-s.y,a=Math.hypot(i,n);a>1&&t.push(...dxfbulge(s,r,o,Math.floor((a-e)/(e+2))+1))}break}case"b":{if(t.length<2)continue;const s=parseInt(n.params[0])||5,r=t[t.length-2],o=t[t.length-1];let a="point"===e[i+1]?.type?e[i+1].point:void 0,A="point"===e[i+2]?.type?e[i+2].point:void 0;a?A||(A=t[0]):(a=t[0],A=t[1]);const l=raccordabezier(r,o,a,A,s);t.push(...l),i+=1;break}case"r":{if(t.length<1)continue;const s=parseFloat(n.params[0])||0;if(s>0){const r=parseInt(n.params[1])||Math.min(s,10),o=t[t.length-1];let a="point"===e[i+1]?.type?e[i+1].point:void 0,A="point"===e[i+2]?.type?e[i+2].point:"point"===e[i+3]?.type?e[i+3].point:void 0;a?A||(A=t[0]):(a=t[0],A=t[1],t.splice(0,1));const l=raccordabezier3(o,a,A,s,r);t.push(...l),i+=1}break}case"c":{let s,r;if(n.params[0].includes("/")){let e=n.params[0].split("/");s=parseFloat(e[0])||50,r=parseFloat(e[1])||s||50}else s=parseFloat(n.params[0])||50,r=s;let o=(parseFloat(n.params[2])||0)*Ue,a=(parseFloat(n.params[3])||0)*Ue;const A=parseInt(n.params[1])||12,l="point"===e[i+1]?.type?e[i+1].point:new Punto2(0,0);for(let e=0;e<=A;e++){let i,n;if(o||a){let t=a-o;i=s*Math.cos(e/A*t+o),n=r*Math.sin(e/A*t+o)}else i=s*Math.cos(e/A*Math.PI*2+Math.PI),n=r*Math.sin(e/A*Math.PI*2+Math.PI);t.push(new Punto2(l.x+i,l.y+n))}i+=1;break}case"a":{let s,r="point"===e[i+1]?.type?e[i+1].point:void 0,o="point"===e[i+2]?.type?e[i+2].point:void 0,a="point"===e[i+3]?.type?e[i+3].point:void 0;if(!r||!a)continue;if(o)if(n.params[0])s=clamp(parseInt(n.params[0]),1,40);else{const e=Math.hypot(a.x-r.x,a.y-r.y),t=Math.abs((o.x-r.x)*(a.y-r.y)-(a.x-r.x)*(o.y-r.y))/(2*e);s=Math.round(e*Math.sqrt(t/(e+.1))*10),s=clamp(s,1,24),s=1}else o=a,s=0;const A=arcfrom3point(s,r,o,a);t.push(...A),i+=3;break}}}return t}(function tokenize(e){const t=[],i=e.replace(/[\n\r,;]/g," ").replace(/\s+/g," ").toLowerCase().trim().split(" ").filter((e=>e.length>0));let n=0;for(;n<i.length;){const e=i[n];/^[brcax]/.test(e)?(t.push({type:"command",cmd:e[0],params:e.slice(1).split(":")}),n++):n<i.length-1&&/^-?\d+(\.\d+)?$/.test(i[n])&&/^-?\d+(\.\d+)?$/.test(i[n+1])?(t.push({type:"point",point:new Punto2(parseFloat(i[n]),parseFloat(i[n+1]))}),n+=2):n++}return t}(t))),this}function dims(e){let{p1:t,p2:i}=e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}),n=!1;if(4==e.length){const s=.001;function findpunto(t,i){let n=e.find((e=>Math.abs(e.x-t)<s&&Math.abs(e.y-i)<s));return!!n}findpunto(t.x,t.y)&&findpunto(t.x,i.y)&&findpunto(i.x,t.y)&&findpunto(i.x,i.y)&&(n=!0)}return{p1:t,p2:i,isrect:n,width:i.x-t.x,height:i.y-t.y}}return{get key(){return hash(tovec().join("\t"))},orienta:function orienta(t,i){if(!t||!i)return null;const n=i.x-t.x,s=i.y-t.y,r=180*Math.atan2(s,n)/Math.PI,o=new Matrix3D;o.rotateZ(-r),o.translate(-t.x,-t.y,0);const a=e.map((e=>o.transform(e.x,e.y)));let A=a.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p2.x=Math.max(e.p2.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)});return{shape:getshape().frompt(a),origine:new Punto2(t.x,t.y),angolo:r,mm:A,width:A.p2.x-A.p1.x,height:A.p2.y-A.p1.y}},rebase:function rebase(t,i=!1,n=0,s=0){const r=new Matrix3D;r.rotateZ(-t);let o=e.map((e=>r.transform(e.x,e.y))),{p1:a,p2:A,width:l,height:c}=dims(o);return i||(n=a.x,s=a.y),o=o.map((e=>new Punto2(e.x-n,e.y-s))),{shape:getshape().frompt(o),origine:new Punto2(n,s),angolo:t,width:l,height:c}},fromstr:fromstr,move:move,infocircle:infocircle,intersectcircle:intersectcircle,get pt(){return e},set pt(t){Array.isArray(t)&&(e=t)},get npt(){return e?.length||0},get vec(){return tovec()},toJSON:()=>({vec:tovec(),orient:orientation()}),get orient(){return orientation()},corners:(t=45)=>function sharpCorners(e,t=45){const i=[],n=e.length;if(n<3)return i;for(let s=0;s<n;s++){const r=e[(s-1+n)%n],o=e[s],a=e[(s+1)%n],A=o.x-r.x,l=o.y-r.y,c=a.x-o.x,h=a.y-o.y,p=Math.hypot(A,l),u=Math.hypot(c,h);if(0===p||0===u)continue;let g=(A*c+l*h)/(p*u);g=Math.max(-1,Math.min(1,g));const d=180*Math.acos(g)/Math.PI;d>t&&i.push({i:s,x:o.x,y:o.y,a:d})}return i}(e,45),clone:()=>getshape().frompt(e),dims(){let t=dims(e),i=0;for(let t=0;t<e.length;t++){let n=(t+1)%e.length;const s=e[t].x-e[n].x,r=e[t].y-e[n].y;i+=Math.sqrt(s*s+r*r)}return t.lung=i,t},get area(){return Math.abs(e.reduce(((t,i,n)=>{const s=e[(n+1)%e.length];return t+(i.x*s.y-s.x*i.y)}),0)/2)},pointslink(t){let i=mapvertices(e,t.pt),n=[];for(let e of i)n[e[0]]=t.pt[e[1]];return n},alignline(t,i){return e=function stretchShapeToLine(e,t,i){if(!e?.length||!t||!i)return[];const n=e[0],s=e[e.length-1],r=s.x-n.x,o=s.y-n.y,a=Math.atan2(o,r);let A=e.map((e=>({x:e.x-n.x,y:e.y-n.y}))),l=A.map((e=>({x:e.x*Math.cos(-a)-e.y*Math.sin(-a),y:e.x*Math.sin(-a)+e.y*Math.cos(-a)})));const c={dx:i.x-t.x,dy:i.y-t.y},h=Math.sqrt(c.dx*c.dx+c.dy*c.dy)/(l[l.length-1].x||1e-8);let p=l.map((e=>({x:e.x*h,y:e.y})));const u=Math.atan2(c.dy,c.dx);let g=p.map((e=>({x:e.x*Math.cos(u)-e.y*Math.sin(u),y:e.x*Math.sin(u)+e.y*Math.cos(u)}))),d=g.map((e=>({x:e.x+t.x,y:e.y+t.y})));return d}(e,t,i),this},rotate(t){if(!t)return this;const i=t*Math.PI/180,n=Math.cos(i),s=Math.sin(i);for(let t of e){const e=t.x*n-t.y*s,i=t.x*s+t.y*n;t.x=e,t.y=i}return this},selezionaprimo:selezionaprimo,segment(t,i=!1){let n=e.length;return t<0&&(t+=n),new Linea2(e[t%n],e[(t+(i?-1:1))%n])},lineoffset(t,i,n){if((t=(t||0)%e.length)!=(i=(i||0)%e.length)){let s=new Linea2(e[t],e[i]);if(s){return s=s.offsetline(-n),this.intersectline(s)}}},orientasplitter(){-1!=orientation()&&e.reverse();let t=e.length;for(let i=0;i<t;i++){let n=new Linea2(e[(t+i-1)%t],e[i]);if(Math.abs(Math.abs(n.angle)-Math.PI)<.001){i&&selezionaprimo(i);break}}return this},mirrorx(t=0){for(let i of e)i.x=2*t-i.x;return this},mirrory(t=0){for(let i of e)i.y=2*t-i.y;return this},simplify(t,i){return e=simplify(e,t,i),this},fromclip(t){e=[];for(let i of t)e.push({x:i.x/1e3,y:i.y/1e3});return this},infosegmento(t,i=!1){const n=e.length;function clampIndex(e){return(e+n)%n}function angle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}function angleDiff(e,t){let i=e-t;for(;i>Math.PI;)i-=2*Math.PI;for(;i<-Math.PI;)i+=2*Math.PI;return i}const s=e[t];let r,o,a;if(i)if(0===t){const t=e[1].x-e[0].x,i=e[1].y-e[0].y;r={x:e[0].x-t,y:e[0].y-i},o=e[1],a=2==n?{x:e[1].x+t,y:e[1].y+i}:e[2]}else if(t===n-1){const t=e[n-1].x-e[n-2].x,i=e[n-1].y-e[n-2].y;r=e[n-2],o={x:e[n-1].x+t,y:e[n-1].y+i},a={x:o.x+t,y:o.y+i}}else r=e[t-1],o=e[t+1],a=t+2<n?e[t+2]:{x:e[t+1].x+(e[t+1].x-e[t].x),y:e[t+1].y+(e[t+1].y-e[t].y)};else{const i=clampIndex(t-1),n=clampIndex(t+1),s=clampIndex(t+2);r=e[i],o=e[n],a=e[s]}const A=angle(s,o),l=angle(r,s),c=angle(o,a);return{x:s.x,y:s.y,l:function length(e,t){const i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}(s,o),ang:A/Ue,a1:angleDiff(A,l)/Ue,a2:angleDiff(c,A)/Ue}},swapxy(){for(let t=0;t<e.length;t++){let i=e[t].x;e[t].x=-e[t].y,e[t].y=-i}return this},fromvec(t){return e=[],_addvec(t),this},addvec(e){return _addvec(e),this},frompt(t){return e=[...t],e=removeduplicate(e),this},fromdxfvec(t){let i=[];if(t&&t.length)for(let e=0;e<t.length;e++){let{x:n,y:s,bulge:r}=t[e];if(i.push({x:n,y:s}),r){const o=1;let a={x:n,y:s},A=t[(e+1)%t.length],l=A.x-a.x,c=A.y-a.y,h=Math.hypot(l,c);h>o&&i.push(...dxfbulge(a,A,r,Math.floor((h-o)/o)+1))}}return e=i.map((e=>({x:Math.round(10*e.x)/10,y:Math.round(10*e.y)/10}))),e=removeduplicate(e),this},monotona(){let t=dims(e),i=e.map((e=>({x:e.x-t.p2.x,y:e.y}))),n=[];n.push(i[0]);let s=i[0].y,r=1e-4;for(let e=1;e<i.length;e++)if(i[e].y>s+r||e==i.length-1)n.push(i[e]),s=i[e].y;else{const t=s+r;n.push({x:i[e].x,y:t}),s=t}return{sh:getshape().frompt(n),...t}},offsetshape(e){let t=[],i=this;for(let n=0;n<i.npt-1;n++){let s=i.segment(n).offset(e);t.push(s)}let n=i.segment(0).perpendicolare(),s=i.segment(i.npt-2),r=s.perpendicolare(s.p2),o=[n.interseca(t[0])];for(let e=0;e<t.length-1;e++){let i=t[e].interseca(t[e+1]);i&&o.push(i)}return o.push(t[t.length-1].interseca(r)),getshape().frompt(o)},sliceony(t){let i=t.pt.map((e=>e.y)).slice(1,-1);const n=[],s=e.length;let r=0,o=e[0].y;for(let t=1;t<s;t++)e[t].y<o&&(o=e[t].y,r=t);const a=[...e.slice(r),...e.slice(0,r)],A=a.length,l=new Map;for(let e=0;e<A;e++)for(let t of i)Math.abs(a[e].y-t)<1e-5&&(l.has(t)?l.get(t).i2=e:l.set(t,{i1:e,i2:e}));const c=i.map((e=>l.get(e))).filter((e=>e&&e.i1>=0&&e.i2>=0));c.length>0&&c[0].i1>0&&n.push([...a.slice(0,c[0].i1+1),...a.slice(c[0].i2,c[0].length)]);for(let e=0;e<c.length-1;e++){const t=c[e],i=c[e+1];n.push([...a.slice(t.i1,i.i1+1),...a.slice(i.i2,t.i2+1)])}const h=c[c.length-1];h.i2>h.i1&&n.push(a.slice(h.i1,h.i2+1));return n.filter((e=>e.length>0))},splitvert:function splitvert(e,t=!0){const i=t?this.intersectline(new Linea2(e,-100,e,100)):this.intersectline(new Linea2(-100,e,100,e));if(!i)return null;let n=i.p1,s=i.p2;const findIndex=e=>this.pt.findIndex(((t,i)=>new Linea2(t,this.pt[(i+1)%this.pt.length]).onsegment(e)));let r=findIndex(n),o=findIndex(s);if(r<0||o<0)return null;if(r>o){let e=r;r=o,o=e,e=n,n=s,s=e}const a=this.pt.length;let A=[],l=[];for(let e=0;e<a;e++)A.push(this.pt[e]),e==r&&(A.push(n),A.push(s),e=o);t?(l.push(s),l.push(n)):l.push(n);for(let e=r+1;e<=o;e++)l.push(this.pt[e]);return t||l.push(s),{sx:getshape().frompt(A),dx:getshape().frompt(l),linea:i}},splitoriz(e){return this.splitvert(e,!1)},splitshape(e,t=!0){const i=100,n=t?{x:e.x,y:e.y-i}:{x:e.x-i,y:e.y},s=t?{x:e.x,y:e.y+i}:{x:e.x+i,y:e.y},r=this.intersectline(new Linea2(n,s));if(!r)return null;const o=r.p1,a=r.p2,findIndex=e=>this.pt.findIndex(((t,i)=>new Linea2(t,this.pt[(i+1)%this.pt.length]).onsegment(e))),A=findIndex(o),l=findIndex(a);if(A<0||l<0)return null;const c=this.pt.length,loop=(e,t,i,n)=>{const s=[];for(let i=e;i!==t;i=(i+1)%c)s.push(this.pt[(i+1)%c]);return s},h=getshape().frompt(loop(A,l));return{sx:getshape().frompt(loop(l,A)),dx:h,linea:r}},xfromy(e,t=0,i=!0){const n=[],s=this.pt.length;for(let t=0;t<s-1;t++){const s=this.pt[t],r=this.pt[t+1];if(s.y<=e&&r.y>=e||r.y<=e&&s.y>=e){const t=r.y-s.y,i=t?(e-s.y)/t:0,o=s.x+i*(r.x-s.x);n.push(o)}else s.y===e&&r.y===e&&n.push(i?Math.max(s.x,r.x):Math.min(s.x,r.x))}return n.length?i?Math.max(...n):Math.min(...n):t},yfromx(e,t=0,i=!0){const n=[],s=this.pt.length;for(let t=0;t<s-1;t++){const s=this.pt[t],r=this.pt[t+1];if(s.x<=e&&r.x>=e||r.x<=e&&s.x>=e){const t=r.x-s.x,i=t?(e-s.x)/t:0,o=s.y+i*(r.y-s.y);n.push(o)}else s.x===e&&r.x===e&&n.push(i?Math.max(s.y,r.y):Math.min(s.y,r.y))}return n.length?i?Math.max(...n):Math.min(...n):t},forcevalues(t,i=!0,n=1e-6){const s=[...new Set(t.pt.map((e=>i?e.y:e.x)))].sort(((e,t)=>e-t)),r=[],o=e.length;for(let t=0;t<o;t++){const a=e[t],A=e[(t+1)%o];r.push({...a});let l=i?a.y:a.x,c=i?A.y:A.x;if(l===c)continue;const h=c>l?s.filter((e=>e>l+n&&e<c-n)):s.filter((e=>e<l-n&&e>c+n)).reverse();for(const e of h){const t=(e-l)/(c-l),i={x:a.x+t*(A.x-a.x),y:a.y+t*(A.y-a.y)};r.push(i)}}return e=r,this},fromrrect(e,t,i=10,n=0,s=0){return(i>=e/2||i>=t/2&&i<=0)&&(i=Math.round(Math.min(e/3,t/3))),fromstr(`0,0,r${i},${e},0,r${i},${e},${t},r${i},0,${t},r${i}`),(n||s)&&move(n,s),this},fromrect(t,i,n,s,r){t||(t=10),i||(i=10),r||(r=0),r=Math.min(Math.abs(r),Math.abs(.4*t),Math.abs(.4*i));let o=t>0?r:-r,a=i>0?r:-r;return e=r?[{x:o,y:0},{x:t-o,y:0},{x:t,y:a},{x:t,y:i-a},{x:t-o,y:i},{x:o,y:i},{x:0,y:i-a},{x:0,y:a}]:[{x:0,y:0},{x:t,y:0},{x:t,y:i},{x:0,y:i}],this},intersectline:t=>function _intersectline(e,t,i){let n=e.length,s=new Linea2(t,i);const r=[];for(let t=0;t<e.length;t++){let i=new Linea2(e[t],e[(t+1)%n]),o=i.interseca(s);o&&i.onsegment(o)&&r.push(o)}if(r.length<2)return null;const{dx:o,dy:a}=s;r.sort(((e,i)=>(e.x-t.x)*o+(e.y-t.y)*a-((i.x-t.x)*o+(i.y-t.y)*a)));let A=new Punto2(r[0].x,r[0].y),l=new Punto2(r[r.length-1].x,r[r.length-1].y);const c=l.x-A.x,h=l.y-A.y;return c*o+h*a<0&&([A,l]=[l,A]),new Linea2(A,l)}(e,t.p1,t.p2),tostr(t=2){let i=10**t,pstr=e=>String(Math.round(e*i)/i),n=e.map((e=>`${pstr(e.x)};${pstr(e.y)};`)).join("");return n&&n.length?n.slice(0,-1).match(/.{1,80}(;|$)/g).map((e=>e.trim())).join("\n"):""},addpt(t){return t?(Array.isArray(t)||(t=[t]),e=removeduplicate([...e,...t]),this):this},addracc(t,i,n=2,s=!0){if(Array.isArray(t)&&(i={x:t[2]||0,y:t[3]||0},t={x:t[0]||0,y:t[1]||0}),e.length>=2){let r=raccordabezier(e[e.length-2],e[e.length-1],t,i,n);e=[...e,...r],s&&(e.push(t),e.push(i))}return e=removeduplicate(e),this},setorient(t){let i=orientation();return(1==i&&-1==t||-1==i&&1==t)&&e.reverse(),this},reverse(){return e.reverse(),this},pointinshape:t=>function isPointInPolygon(t){let i=t.x,n=t.y,s=!1;for(let t=0,r=e.length-1;t<e.length;r=t++){let o=e[t].x,a=e[t].y,A=e[r].x,l=e[r].y;a>n!=l>n&&i<(A-o)*(n-a)/(l-a)+o&&(s=!s)}return s}(t),azzera(){return e=[],this},truncatebefore:function truncatebefore(t){let i=new Linea2(e[0],e[1]),n=t.interseca(i);if(n){let t=e[0],i=e[1],s=i.x-t.x,r=i.y-t.y,o=s*s+r*r;if(o){if(((n.x-t.x)*s+(n.y-t.y)*r)/o<=1)return e[0]=n,this}}for(let i=1;i<e.length-1;i++){let n=new Linea2(e[i],e[i+1]),s=t.interseca(n);if(s&&n.onsegment(s))return e=e.slice(i),e[0]=s,this}return this},truncateafter:function truncateafter(t){let i=e.length,n=new Linea2(e[i-2],e[i-1]),s=t.interseca(n);if(s){let t=e[i-2],n=e[i-1],r=n.x-t.x,o=n.y-t.y,a=r*r+o*o;if(a){if(((s.x-t.x)*r+(s.y-t.y)*o)/a>=0)return e[i-1]=s,this}}for(let n=i-3;n>=0;n--){let i=new Linea2(e[n],e[n+1]),s=t.interseca(i);if(s&&i.onsegment(s))return e=e.slice(0,n+1),e.push(s),this}return this},removeduplicate(t=.005){return e=removeduplicate(e,t),this},to3d(t,i=0,n=0,s=0,r=!1,o=null,a=!1){let A=function to3dcoor(e,t){let{currentU:i=0,c:n=0,a:s=0,b:r=0,anglemin:o=30,open:a=!1,sh:A=null,invert:l=!1}=t;const c=[],h=e.length;for(let t=0;t<h;t++){const a=e[(t-1+h)%h],p=e[t],u=e[(t+1)%h],g={x:p.x-a.x,y:p.y-a.y},d={x:u.x-p.x,y:u.y-p.y},f=normal2(a,p),m=normal2(p,u),I=angle2vec(g,d);let b=s*p.x+r*p.y+n;if(A){let e=A.xfromy(p.y,0,!0);l?b+=e:b-=e}Math.abs(I-180)<=o?(f.nx,m.nx,f.ny,m.ny,c.push({x:p.x,y:-p.y,z:b,u:i,v:b})):(c.push({x:p.x,y:-p.y,z:b,u:i,v:b}),c.push({x:p.x,y:-p.y,z:b,u:i,v:b}));const y=u.x-p.x,C=u.y-p.y;i+=Math.sqrt(y*y+C*C)}if(!a){let e=c[0],t=c[c.length-1];e.x==t.x&&e.y==t.y||c.push({x:e.x,y:e.y,z:e.z,nx:e.nx,ny:e.ny,nz:e.nz,u:i,v:e.z})}return c}(e,{open:r,currentU:t,c:i,a:n,b:s,anglemin:30,sh:o,invert:a});return A},getboundbox:()=>e.length?e.reduce(((e,t)=>(e.p1.x=Math.min(e.p1.x,t.x),e.p1.y=Math.min(e.p1.y,t.y),e.p2.x=Math.max(e.p2.x,t.x),e.p2.y=Math.max(e.p2.y,t.y),e)),{p1:new Punto2(1/0,1/0),p2:new Punto2(-1/0,-1/0)}):{p1:new Punto2(0,0),p2:new Punto2(0,0)},fittobox(t,i){if(!e.length)return this;const n=this.getboundbox(),s=n.p2.x-n.p1.x,r=n.p2.y-n.p1.y,o=i.x-t.x,a=i.y-t.y,A=Math.min(o/(s||1),a/(r||1));for(let i of e)i.x=(i.x-n.p1.x)*A,i.y=(i.y-n.p1.y)*A,i.x+=t.x,i.y+=t.y;return this}}}function arcfrom3point(e,t,i,n){if(e<=0)return[t,n];if(1===e)return[t,i,n];const s=function findCircleCenter(e,t,i){const n=t.x*t.x+t.y*t.y,s=(e.x*e.x+e.y*e.y-n)/2,r=(n-i.x*i.x-i.y*i.y)/2,o=(e.x-t.x)*(t.y-i.y)-(t.x-i.x)*(e.y-t.y);return Math.abs(o)<1e-10?null:new Punto2((s*(t.y-i.y)-r*(e.y-t.y))/o,((e.x-t.x)*r-(t.x-i.x)*s)/o)}(t,i,n);if(!s){const i=[];for(let s=0;s<=e;s++){const r=s/e;i.push(new Punto2(t.x+(n.x-t.x)*r,t.y+(n.y-t.y)*r))}return i}let r=Math.atan2(t.y-s.y,t.x-s.x);Math.atan2(i.y-s.y,i.x-s.x);let o=Math.atan2(n.y-s.y,n.x-s.x);const a=(i.x-t.x)*(n.y-t.y)-(i.y-t.y)*(n.x-t.x),norm=e=>(e+2*Math.PI)%(2*Math.PI);r=norm(r),o=norm(o),a>0?o<r&&(o+=2*Math.PI):o>r&&(o-=2*Math.PI);const A=Math.hypot(t.x-s.x,t.y-s.y),l=(o-r)/e,c=[];for(let t=0;t<=e;t++){const e=r+l*t;c.push(new Punto2(s.x+A*Math.cos(e),s.y+A*Math.sin(e)))}return c}function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var qe,ze={exports:{}};qe=ze,function(){var e,t={version:"6.4.2.2",use_lines:!0,use_xyz:!1},i=!1;if(qe.exports?(qe.exports=t,i=!0):"undefined"!=typeof document?window.ClipperLib=t:self.ClipperLib=t,i)n="chrome",e="Netscape";else{var n=navigator.userAgent.toString().toLowerCase();e=navigator.appName}var s,r={};function BigInteger(e,i,n){t.biginteger_used=1,null!=e&&("number"==typeof e&&void 0===i?this.fromInt(e):"number"==typeof e?this.fromNumber(e,i,n):null==i&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,i))}function nbi(){return new BigInteger(null,void 0,void 0)}-1!=n.indexOf("chrome")&&-1==n.indexOf("chromium")?r.chrome=1:r.chrome=0,-1!=n.indexOf("chromium")?r.chromium=1:r.chromium=0,-1!=n.indexOf("safari")&&-1==n.indexOf("chrome")&&-1==n.indexOf("chromium")?r.safari=1:r.safari=0,-1!=n.indexOf("firefox")?r.firefox=1:r.firefox=0,-1!=n.indexOf("firefox/17")?r.firefox17=1:r.firefox17=0,-1!=n.indexOf("firefox/15")?r.firefox15=1:r.firefox15=0,-1!=n.indexOf("firefox/3")?r.firefox3=1:r.firefox3=0,-1!=n.indexOf("opera")?r.opera=1:r.opera=0,-1!=n.indexOf("msie 10")?r.msie10=1:r.msie10=0,-1!=n.indexOf("msie 9")?r.msie9=1:r.msie9=0,-1!=n.indexOf("msie 8")?r.msie8=1:r.msie8=0,-1!=n.indexOf("msie 7")?r.msie7=1:r.msie7=0,-1!=n.indexOf("msie ")?r.msie=1:r.msie=0,t.biginteger_used=null,"Microsoft Internet Explorer"==e?(BigInteger.prototype.am=function am2(e,t,i,n,s,r){for(var o=32767&t,a=t>>15;--r>=0;){var A=32767&this[e],l=this[e++]>>15,c=a*A+l*o;s=((A=o*A+((32767&c)<<15)+i[n]+(1073741823&s))>>>30)+(c>>>15)+a*l+(s>>>30),i[n++]=1073741823&A}return s},s=30):"Netscape"!=e?(BigInteger.prototype.am=function am1(e,t,i,n,s,r){for(;--r>=0;){var o=t*this[e++]+i[n]+s;s=Math.floor(o/67108864),i[n++]=67108863&o}return s},s=26):(BigInteger.prototype.am=function am3(e,t,i,n,s,r){for(var o=16383&t,a=t>>14;--r>=0;){var A=16383&this[e],l=this[e++]>>14,c=a*A+l*o;s=((A=o*A+((16383&c)<<14)+i[n]+s)>>28)+(c>>14)+a*l,i[n++]=268435455&A}return s},s=28),BigInteger.prototype.DB=s,BigInteger.prototype.DM=(1<<s)-1,BigInteger.prototype.DV=1<<s,BigInteger.prototype.FV=Math.pow(2,52),BigInteger.prototype.F1=52-s,BigInteger.prototype.F2=2*s-52;var o,a,A=new Array;for(o="0".charCodeAt(0),a=0;a<=9;++a)A[o++]=a;for(o="a".charCodeAt(0),a=10;a<36;++a)A[o++]=a;for(o="A".charCodeAt(0),a=10;a<36;++a)A[o++]=a;function int2char(e){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(e)}function intAt(e,t){var i=A[e.charCodeAt(t)];return null==i?-1:i}function nbv(e){var t=nbi();return t.fromInt(e),t}function nbits(e){var t,i=1;return 0!=(t=e>>>16)&&(e=t,i+=16),0!=(t=e>>8)&&(e=t,i+=8),0!=(t=e>>4)&&(e=t,i+=4),0!=(t=e>>2)&&(e=t,i+=2),0!=(t=e>>1)&&(e=t,i+=1),i}function Classic(e){this.m=e}function Montgomery(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<e.DB-15)-1,this.mt2=2*e.t}function op_and(e,t){return e&t}function op_or(e,t){return e|t}function op_xor(e,t){return e^t}function op_andnot(e,t){return e&~t}function lbit(e){if(0==e)return-1;var t=0;return 65535&e||(e>>=16,t+=16),255&e||(e>>=8,t+=8),15&e||(e>>=4,t+=4),3&e||(e>>=2,t+=2),1&e||++t,t}function cbit(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function NullExp(){}function nNop(e){return e}function Barrett(e){this.r2=nbi(),this.q3=nbi(),BigInteger.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}Classic.prototype.convert=function cConvert(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},Classic.prototype.revert=function cRevert(e){return e},Classic.prototype.reduce=function cReduce(e){e.divRemTo(this.m,null,e)},Classic.prototype.mulTo=function cMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Classic.prototype.sqrTo=function cSqrTo(e,t){e.squareTo(t),this.reduce(t)},Montgomery.prototype.convert=function montConvert(e){var t=nbi();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(BigInteger.ZERO)>0&&this.m.subTo(t,t),t},Montgomery.prototype.revert=function montRevert(e){var t=nbi();return e.copyTo(t),this.reduce(t),t},Montgomery.prototype.reduce=function montReduce(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t<this.m.t;++t){var i=32767&e[t],n=i*this.mpl+((i*this.mph+(e[t]>>15)*this.mpl&this.um)<<15)&e.DM;for(e[i=t+this.m.t]+=this.m.am(0,n,e,t,0,this.m.t);e[i]>=e.DV;)e[i]-=e.DV,e[++i]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},Montgomery.prototype.mulTo=function montMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Montgomery.prototype.sqrTo=function montSqrTo(e,t){e.squareTo(t),this.reduce(t)},BigInteger.prototype.copyTo=function bnpCopyTo(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},BigInteger.prototype.fromInt=function bnpFromInt(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},BigInteger.prototype.fromString=function bnpFromString(e,t){var i;if(16==t)i=4;else if(8==t)i=3;else if(256==t)i=8;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return void this.fromRadix(e,t);i=2}this.t=0,this.s=0;for(var n=e.length,s=!1,r=0;--n>=0;){var o=8==i?255&e[n]:intAt(e,n);o<0?"-"==e.charAt(n)&&(s=!0):(s=!1,0==r?this[this.t++]=o:r+i>this.DB?(this[this.t-1]|=(o&(1<<this.DB-r)-1)<<r,this[this.t++]=o>>this.DB-r):this[this.t-1]|=o<<r,(r+=i)>=this.DB&&(r-=this.DB))}8==i&&128&e[0]&&(this.s=-1,r>0&&(this[this.t-1]|=(1<<this.DB-r)-1<<r)),this.clamp(),s&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.clamp=function bnpClamp(){for(var e=this.s&this.DM;this.t>0&&this[this.t-1]==e;)--this.t},BigInteger.prototype.dlShiftTo=function bnpDLShiftTo(e,t){var i;for(i=this.t-1;i>=0;--i)t[i+e]=this[i];for(i=e-1;i>=0;--i)t[i]=0;t.t=this.t+e,t.s=this.s},BigInteger.prototype.drShiftTo=function bnpDRShiftTo(e,t){for(var i=e;i<this.t;++i)t[i-e]=this[i];t.t=Math.max(this.t-e,0),t.s=this.s},BigInteger.prototype.lShiftTo=function bnpLShiftTo(e,t){var i,n=e%this.DB,s=this.DB-n,r=(1<<s)-1,o=Math.floor(e/this.DB),a=this.s<<n&this.DM;for(i=this.t-1;i>=0;--i)t[i+o+1]=this[i]>>s|a,a=(this[i]&r)<<n;for(i=o-1;i>=0;--i)t[i]=0;t[o]=a,t.t=this.t+o+1,t.s=this.s,t.clamp()},BigInteger.prototype.rShiftTo=function bnpRShiftTo(e,t){t.s=this.s;var i=Math.floor(e/this.DB);if(i>=this.t)t.t=0;else{var n=e%this.DB,s=this.DB-n,r=(1<<n)-1;t[0]=this[i]>>n;for(var o=i+1;o<this.t;++o)t[o-i-1]|=(this[o]&r)<<s,t[o-i]=this[o]>>n;n>0&&(t[this.t-i-1]|=(this.s&r)<<s),t.t=this.t-i,t.clamp()}},BigInteger.prototype.subTo=function bnpSubTo(e,t){for(var i=0,n=0,s=Math.min(e.t,this.t);i<s;)n+=this[i]-e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n-=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n-=e[i],t[i++]=n&this.DM,n>>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t[i++]=this.DV+n:n>0&&(t[i++]=n),t.t=i,t.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(e,t){var i=this.abs(),n=e.abs(),s=i.t;for(t.t=s+n.t;--s>=0;)t[s]=0;for(s=0;s<n.t;++s)t[s+i.t]=i.am(0,n[s],t,s,0,i.t);t.s=0,t.clamp(),this.s!=e.s&&BigInteger.ZERO.subTo(t,t)},BigInteger.prototype.squareTo=function bnpSquareTo(e){for(var t=this.abs(),i=e.t=2*t.t;--i>=0;)e[i]=0;for(i=0;i<t.t-1;++i){var n=t.am(i,t[i],e,2*i,0,1);(e[i+t.t]+=t.am(i+1,2*t[i],e,2*i+1,n,t.t-i-1))>=t.DV&&(e[i+t.t]-=t.DV,e[i+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(i,t[i],e,2*i,0,1)),e.s=0,e.clamp()},BigInteger.prototype.divRemTo=function bnpDivRemTo(e,t,i){var n=e.abs();if(!(n.t<=0)){var s=this.abs();if(s.t<n.t)return null!=t&&t.fromInt(0),void(null!=i&&this.copyTo(i));null==i&&(i=nbi());var r=nbi(),o=this.s,a=e.s,A=this.DB-nbits(n[n.t-1]);A>0?(n.lShiftTo(A,r),s.lShiftTo(A,i)):(n.copyTo(r),s.copyTo(i));var l=r.t,c=r[l-1];if(0!=c){var h=c*(1<<this.F1)+(l>1?r[l-2]>>this.F2:0),p=this.FV/h,u=(1<<this.F1)/h,g=1<<this.F2,d=i.t,f=d-l,m=null==t?nbi():t;for(r.dlShiftTo(f,m),i.compareTo(m)>=0&&(i[i.t++]=1,i.subTo(m,i)),BigInteger.ONE.dlShiftTo(l,m),m.subTo(r,r);r.t<l;)r[r.t++]=0;for(;--f>=0;){var I=i[--d]==c?this.DM:Math.floor(i[d]*p+(i[d-1]+g)*u);if((i[d]+=r.am(0,I,i,f,0,l))<I)for(r.dlShiftTo(f,m),i.subTo(m,i);i[d]<--I;)i.subTo(m,i)}null!=t&&(i.drShiftTo(l,t),o!=a&&BigInteger.ZERO.subTo(t,t)),i.t=l,i.clamp(),A>0&&i.rShiftTo(A,i),o<0&&BigInteger.ZERO.subTo(i,i)}}},BigInteger.prototype.invDigit=function bnpInvDigit(){if(this.t<1)return 0;var e=this[0];if(!(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},BigInteger.prototype.isEven=function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)},BigInteger.prototype.exp=function bnpExp(e,t){if(e>4294967295||e<1)return BigInteger.ONE;var i=nbi(),n=nbi(),s=t.convert(this),r=nbits(e)-1;for(s.copyTo(i);--r>=0;)if(t.sqrTo(i,n),(e&1<<r)>0)t.mulTo(n,s,i);else{var o=i;i=n,n=o}return t.revert(i)},BigInteger.prototype.toString=function bnToString(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var i,n=(1<<t)-1,s=!1,r="",o=this.t,a=this.DB-o*this.DB%t;if(o-- >0)for(a<this.DB&&(i=this[o]>>a)>0&&(s=!0,r=int2char(i));o>=0;)a<t?(i=(this[o]&(1<<a)-1)<<t-a,i|=this[--o]>>(a+=this.DB-t)):(i=this[o]>>(a-=t)&n,a<=0&&(a+=this.DB,--o)),i>0&&(s=!0),s&&(r+=int2char(i));return s?r:"0"},BigInteger.prototype.negate=function bnNegate(){var e=nbi();return BigInteger.ZERO.subTo(this,e),e},BigInteger.prototype.abs=function bnAbs(){return this.s<0?this.negate():this},BigInteger.prototype.compareTo=function bnCompareTo(e){var t=this.s-e.s;if(0!=t)return t;var i=this.t;if(0!=(t=i-e.t))return this.s<0?-t:t;for(;--i>=0;)if(0!=(t=this[i]-e[i]))return t;return 0},BigInteger.prototype.bitLength=function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)},BigInteger.prototype.mod=function bnMod(e){var t=nbi();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(BigInteger.ZERO)>0&&e.subTo(t,t),t},BigInteger.prototype.modPowInt=function bnModPowInt(e,t){var i;return i=e<256||t.isEven()?new Classic(t):new Montgomery(t),this.exp(e,i)},BigInteger.ZERO=nbv(0),BigInteger.ONE=nbv(1),NullExp.prototype.convert=nNop,NullExp.prototype.revert=nNop,NullExp.prototype.mulTo=function nMulTo(e,t,i){e.multiplyTo(t,i)},NullExp.prototype.sqrTo=function nSqrTo(e,t){e.squareTo(t)},Barrett.prototype.convert=function barrettConvert(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=nbi();return e.copyTo(t),this.reduce(t),t},Barrett.prototype.revert=function barrettRevert(e){return e},Barrett.prototype.reduce=function barrettReduce(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},Barrett.prototype.mulTo=function barrettMulTo(e,t,i){e.multiplyTo(t,i),this.reduce(i)},Barrett.prototype.sqrTo=function barrettSqrTo(e,t){e.squareTo(t),this.reduce(t)};var l=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],c=(1<<26)/l[l.length-1];BigInteger.prototype.chunkSize=function bnpChunkSize(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},BigInteger.prototype.toRadix=function bnpToRadix(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),i=Math.pow(e,t),n=nbv(i),s=nbi(),r=nbi(),o="";for(this.divRemTo(n,s,r);s.signum()>0;)o=(i+r.intValue()).toString(e).substr(1)+o,s.divRemTo(n,s,r);return r.intValue().toString(e)+o},BigInteger.prototype.fromRadix=function bnpFromRadix(e,t){this.fromInt(0),null==t&&(t=10);for(var i=this.chunkSize(t),n=Math.pow(t,i),s=!1,r=0,o=0,a=0;a<e.length;++a){var A=intAt(e,a);A<0?"-"==e.charAt(a)&&0==this.signum()&&(s=!0):(o=t*o+A,++r>=i&&(this.dMultiply(n),this.dAddOffset(o,0),r=0,o=0))}r>0&&(this.dMultiply(Math.pow(t,r)),this.dAddOffset(o,0)),s&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.fromNumber=function bnpFromNumber(e,t,i){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,i),this.testBit(e-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(e-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(BigInteger.ONE.shiftLeft(e-1),this);else{var n=new Array,s=7&e;n.length=1+(e>>3),t.nextBytes(n),s>0?n[0]&=(1<<s)-1:n[0]=0,this.fromString(n,256)}},BigInteger.prototype.bitwiseTo=function bnpBitwiseTo(e,t,i){var n,s,r=Math.min(e.t,this.t);for(n=0;n<r;++n)i[n]=t(this[n],e[n]);if(e.t<this.t){for(s=e.s&this.DM,n=r;n<this.t;++n)i[n]=t(this[n],s);i.t=this.t}else{for(s=this.s&this.DM,n=r;n<e.t;++n)i[n]=t(s,e[n]);i.t=e.t}i.s=t(this.s,e.s),i.clamp()},BigInteger.prototype.changeBit=function bnpChangeBit(e,t){var i=BigInteger.ONE.shiftLeft(e);return this.bitwiseTo(i,t,i),i},BigInteger.prototype.addTo=function bnpAddTo(e,t){for(var i=0,n=0,s=Math.min(e.t,this.t);i<s;)n+=this[i]+e[i],t[i++]=n&this.DM,n>>=this.DB;if(e.t<this.t){for(n+=e.s;i<this.t;)n+=this[i],t[i++]=n&this.DM,n>>=this.DB;n+=this.s}else{for(n+=this.s;i<e.t;)n+=e[i],t[i++]=n&this.DM,n>>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t[i++]=n:n<-1&&(t[i++]=this.DV+n),t.t=i,t.clamp()},BigInteger.prototype.dMultiply=function bnpDMultiply(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},BigInteger.prototype.dAddOffset=function bnpDAddOffset(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},BigInteger.prototype.multiplyLowerTo=function bnpMultiplyLowerTo(e,t,i){var n,s=Math.min(this.t+e.t,t);for(i.s=0,i.t=s;s>0;)i[--s]=0;for(n=i.t-this.t;s<n;++s)i[s+this.t]=this.am(0,e[s],i,s,0,this.t);for(n=Math.min(e.t,t);s<n;++s)this.am(0,e[s],i,s,0,t-s);i.clamp()},BigInteger.prototype.multiplyUpperTo=function bnpMultiplyUpperTo(e,t,i){--t;var n=i.t=this.t+e.t-t;for(i.s=0;--n>=0;)i[n]=0;for(n=Math.max(t-this.t,0);n<e.t;++n)i[this.t+n-t]=this.am(t-n,e[n],i,0,0,this.t+n-t);i.clamp(),i.drShiftTo(1,i)},BigInteger.prototype.modInt=function bnpModInt(e){if(e<=0)return 0;var t=this.DV%e,i=this.s<0?e-1:0;if(this.t>0)if(0==t)i=this[0]%e;else for(var n=this.t-1;n>=0;--n)i=(t*i+this[n])%e;return i},BigInteger.prototype.millerRabin=function bnpMillerRabin(e){var t=this.subtract(BigInteger.ONE),i=t.getLowestSetBit();if(i<=0)return!1;var n=t.shiftRight(i);(e=e+1>>1)>l.length&&(e=l.length);for(var s=nbi(),r=0;r<e;++r){s.fromInt(l[Math.floor(Math.random()*l.length)]);var o=s.modPow(n,this);if(0!=o.compareTo(BigInteger.ONE)&&0!=o.compareTo(t)){for(var a=1;a++<i&&0!=o.compareTo(t);)if(0==(o=o.modPowInt(2,this)).compareTo(BigInteger.ONE))return!1;if(0!=o.compareTo(t))return!1}}return!0},BigInteger.prototype.clone=function bnClone(){var e=nbi();return this.copyTo(e),e},BigInteger.prototype.intValue=function bnIntValue(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]},BigInteger.prototype.byteValue=function bnByteValue(){return 0==this.t?this.s:this[0]<<24>>24},BigInteger.prototype.shortValue=function bnShortValue(){return 0==this.t?this.s:this[0]<<16>>16},BigInteger.prototype.signum=function bnSigNum(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},BigInteger.prototype.toByteArray=function bnToByteArray(){var e=this.t,t=new Array;t[0]=this.s;var i,n=this.DB-e*this.DB%8,s=0;if(e-- >0)for(n<this.DB&&(i=this[e]>>n)!=(this.s&this.DM)>>n&&(t[s++]=i|this.s<<this.DB-n);e>=0;)n<8?(i=(this[e]&(1<<n)-1)<<8-n,i|=this[--e]>>(n+=this.DB-8)):(i=this[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),128&i&&(i|=-256),0==s&&(128&this.s)!=(128&i)&&++s,(s>0||i!=this.s)&&(t[s++]=i);return t},BigInteger.prototype.equals=function bnEquals(e){return 0==this.compareTo(e)},BigInteger.prototype.min=function bnMin(e){return this.compareTo(e)<0?this:e},BigInteger.prototype.max=function bnMax(e){return this.compareTo(e)>0?this:e},BigInteger.prototype.and=function bnAnd(e){var t=nbi();return this.bitwiseTo(e,op_and,t),t},BigInteger.prototype.or=function bnOr(e){var t=nbi();return this.bitwiseTo(e,op_or,t),t},BigInteger.prototype.xor=function bnXor(e){var t=nbi();return this.bitwiseTo(e,op_xor,t),t},BigInteger.prototype.andNot=function bnAndNot(e){var t=nbi();return this.bitwiseTo(e,op_andnot,t),t},BigInteger.prototype.not=function bnNot(){for(var e=nbi(),t=0;t<this.t;++t)e[t]=this.DM&~this[t];return e.t=this.t,e.s=~this.s,e},BigInteger.prototype.shiftLeft=function bnShiftLeft(e){var t=nbi();return e<0?this.rShiftTo(-e,t):this.lShiftTo(e,t),t},BigInteger.prototype.shiftRight=function bnShiftRight(e){var t=nbi();return e<0?this.lShiftTo(-e,t):this.rShiftTo(e,t),t},BigInteger.prototype.getLowestSetBit=function bnGetLowestSetBit(){for(var e=0;e<this.t;++e)if(0!=this[e])return e*this.DB+lbit(this[e]);return this.s<0?this.t*this.DB:-1},BigInteger.prototype.bitCount=function bnBitCount(){for(var e=0,t=this.s&this.DM,i=0;i<this.t;++i)e+=cbit(this[i]^t);return e},BigInteger.prototype.testBit=function bnTestBit(e){var t=Math.floor(e/this.DB);return t>=this.t?0!=this.s:!!(this[t]&1<<e%this.DB)},BigInteger.prototype.setBit=function bnSetBit(e){return this.changeBit(e,op_or)},BigInteger.prototype.clearBit=function bnClearBit(e){return this.changeBit(e,op_andnot)},BigInteger.prototype.flipBit=function bnFlipBit(e){return this.changeBit(e,op_xor)},BigInteger.prototype.add=function bnAdd(e){var t=nbi();return this.addTo(e,t),t},BigInteger.prototype.subtract=function bnSubtract(e){var t=nbi();return this.subTo(e,t),t},BigInteger.prototype.multiply=function bnMultiply(e){var t=nbi();return this.multiplyTo(e,t),t},BigInteger.prototype.divide=function bnDivide(e){var t=nbi();return this.divRemTo(e,t,null),t},BigInteger.prototype.remainder=function bnRemainder(e){var t=nbi();return this.divRemTo(e,null,t),t},BigInteger.prototype.divideAndRemainder=function bnDivideAndRemainder(e){var t=nbi(),i=nbi();return this.divRemTo(e,t,i),new Array(t,i)},BigInteger.prototype.modPow=function bnModPow(e,t){var i,n,s=e.bitLength(),r=nbv(1);if(s<=0)return r;i=s<18?1:s<48?3:s<144?4:s<768?5:6,n=s<8?new Classic(t):t.isEven()?new Barrett(t):new Montgomery(t);var o=new Array,a=3,A=i-1,l=(1<<i)-1;if(o[1]=n.convert(this),i>1){var c=nbi();for(n.sqrTo(o[1],c);a<=l;)o[a]=nbi(),n.mulTo(c,o[a-2],o[a]),a+=2}var h,p,u=e.t-1,g=!0,d=nbi();for(s=nbits(e[u])-1;u>=0;){for(s>=A?h=e[u]>>s-A&l:(h=(e[u]&(1<<s+1)-1)<<A-s,u>0&&(h|=e[u-1]>>this.DB+s-A)),a=i;!(1&h);)h>>=1,--a;if((s-=a)<0&&(s+=this.DB,--u),g)o[h].copyTo(r),g=!1;else{for(;a>1;)n.sqrTo(r,d),n.sqrTo(d,r),a-=2;a>0?n.sqrTo(r,d):(p=r,r=d,d=p),n.mulTo(d,o[h],r)}for(;u>=0&&!(e[u]&1<<s);)n.sqrTo(r,d),p=r,r=d,d=p,--s<0&&(s=this.DB-1,--u)}return n.revert(r)},BigInteger.prototype.modInverse=function bnModInverse(e){var t=e.isEven();if(this.isEven()&&t||0==e.signum())return BigInteger.ZERO;for(var i=e.clone(),n=this.clone(),s=nbv(1),r=nbv(0),o=nbv(0),a=nbv(1);0!=i.signum();){for(;i.isEven();)i.rShiftTo(1,i),t?(s.isEven()&&r.isEven()||(s.addTo(this,s),r.subTo(e,r)),s.rShiftTo(1,s)):r.isEven()||r.subTo(e,r),r.rShiftTo(1,r);for(;n.isEven();)n.rShiftTo(1,n),t?(o.isEven()&&a.isEven()||(o.addTo(this,o),a.subTo(e,a)),o.rShiftTo(1,o)):a.isEven()||a.subTo(e,a),a.rShiftTo(1,a);i.compareTo(n)>=0?(i.subTo(n,i),t&&s.subTo(o,s),r.subTo(a,r)):(n.subTo(i,n),t&&o.subTo(s,o),a.subTo(r,a))}return 0!=n.compareTo(BigInteger.ONE)?BigInteger.ZERO:a.compareTo(e)>=0?a.subtract(e):a.signum()<0?(a.addTo(e,a),a.signum()<0?a.add(e):a):a},BigInteger.prototype.pow=function bnPow(e){return this.exp(e,new NullExp)},BigInteger.prototype.gcd=function bnGCD(e){var t=this.s<0?this.negate():this.clone(),i=e.s<0?e.negate():e.clone();if(t.compareTo(i)<0){var n=t;t=i,i=n}var s=t.getLowestSetBit(),r=i.getLowestSetBit();if(r<0)return t;for(s<r&&(r=s),r>0&&(t.rShiftTo(r,t),i.rShiftTo(r,i));t.signum()>0;)(s=t.getLowestSetBit())>0&&t.rShiftTo(s,t),(s=i.getLowestSetBit())>0&&i.rShiftTo(s,i),t.compareTo(i)>=0?(t.subTo(i,t),t.rShiftTo(1,t)):(i.subTo(t,i),i.rShiftTo(1,i));return r>0&&i.lShiftTo(r,i),i},BigInteger.prototype.isProbablePrime=function bnIsProbablePrime(e){var t,i=this.abs();if(1==i.t&&i[0]<=l[l.length-1]){for(t=0;t<l.length;++t)if(i[0]==l[t])return!0;return!1}if(i.isEven())return!1;for(t=1;t<l.length;){for(var n=l[t],s=t+1;s<l.length&&n<c;)n*=l[s++];for(n=i.modInt(n);t<s;)if(n%l[t++]==0)return!1}return i.millerRabin(e)},BigInteger.prototype.square=function bnSquare(){var e=nbi();return this.squareTo(e),e};var h=BigInteger;h.prototype.IsNegative=function(){return-1==this.compareTo(h.ZERO)},h.op_Equality=function(e,t){return 0==e.compareTo(t)},h.op_Inequality=function(e,t){return 0!=e.compareTo(t)},h.op_GreaterThan=function(e,t){return e.compareTo(t)>0},h.op_LessThan=function(e,t){return e.compareTo(t)<0},h.op_Addition=function(e,t){return new h(e,void 0,void 0).add(new h(t,void 0,void 0))},h.op_Subtraction=function(e,t){return new h(e,void 0,void 0).subtract(new h(t,void 0,void 0))},h.Int128Mul=function(e,t){return new h(e,void 0,void 0).multiply(new h(t,void 0,void 0))},h.op_Division=function(e,t){return e.divide(t)},h.prototype.ToDouble=function(){return parseFloat(this.toString())};var Inherit=function(e,t){var i;if(void 0===Object.getOwnPropertyNames){for(i in t.prototype)void 0!==e.prototype[i]&&e.prototype[i]!==Object.prototype[i]||(e.prototype[i]=t.prototype[i]);for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}else{for(var n=Object.getOwnPropertyNames(t.prototype),s=0;s<n.length;s++)void 0===Object.getOwnPropertyDescriptor(e.prototype,n[s])&&Object.defineProperty(e.prototype,n[s],Object.getOwnPropertyDescriptor(t.prototype,n[s]));for(i in t)void 0===e[i]&&(e[i]=t[i]);e.$baseCtor=t}};t.Path=function(){return[]},t.Path.prototype.push=Array.prototype.push,t.Paths=function(){return[]},t.Paths.prototype.push=Array.prototype.push,t.DoublePoint=function(){var e=arguments;this.X=0,this.Y=0,1===e.length?(this.X=e[0].X,this.Y=e[0].Y):2===e.length&&(this.X=e[0],this.Y=e[1])},t.DoublePoint0=function(){this.X=0,this.Y=0},t.DoublePoint0.prototype=t.DoublePoint.prototype,t.DoublePoint1=function(e){this.X=e.X,this.Y=e.Y},t.DoublePoint1.prototype=t.DoublePoint.prototype,t.DoublePoint2=function(e,t){this.X=e,this.Y=t},t.DoublePoint2.prototype=t.DoublePoint.prototype,t.PolyNode=function(){this.m_Parent=null,this.m_polygon=new t.Path,this.m_Index=0,this.m_jointype=0,this.m_endtype=0,this.m_Childs=[],this.IsOpen=!1},t.PolyNode.prototype.IsHoleNode=function(){for(var e=!0,t=this.m_Parent;null!==t;)e=!e,t=t.m_Parent;return e},t.PolyNode.prototype.ChildCount=function(){return this.m_Childs.length},t.PolyNode.prototype.Contour=function(){return this.m_polygon},t.PolyNode.prototype.AddChild=function(e){var t=this.m_Childs.length;this.m_Childs.push(e),e.m_Parent=this,e.m_Index=t},t.PolyNode.prototype.GetNext=function(){return this.m_Childs.length>0?this.m_Childs[0]:this.GetNextSiblingUp()},t.PolyNode.prototype.GetNextSiblingUp=function(){return null===this.m_Parent?null:this.m_Index===this.m_Parent.m_Childs.length-1?this.m_Parent.GetNextSiblingUp():this.m_Parent.m_Childs[this.m_Index+1]},t.PolyNode.prototype.Childs=function(){return this.m_Childs},t.PolyNode.prototype.Parent=function(){return this.m_Parent},t.PolyNode.prototype.IsHole=function(){return this.IsHoleNode()},t.PolyTree=function(){this.m_AllPolys=[],t.PolyNode.call(this)},t.PolyTree.prototype.Clear=function(){for(var e=0,t=this.m_AllPolys.length;e<t;e++)this.m_AllPolys[e]=null;this.m_AllPolys.length=0,this.m_Childs.length=0},t.PolyTree.prototype.GetFirst=function(){return this.m_Childs.length>0?this.m_Childs[0]:null},t.PolyTree.prototype.Total=function(){var e=this.m_AllPolys.length;return e>0&&this.m_Childs[0]!==this.m_AllPolys[0]&&e--,e},Inherit(t.PolyTree,t.PolyNode),t.Math_Abs_Int64=t.Math_Abs_Int32=t.Math_Abs_Double=function(e){return Math.abs(e)},t.Math_Max_Int32_Int32=function(e,t){return Math.max(e,t)},r.msie||r.opera||r.safari?t.Cast_Int32=function(e){return 0|e}:t.Cast_Int32=function(e){return~~e},void 0===Number.toInteger&&(Number.toInteger=null),r.chrome?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):~~e}:r.firefox&&"function"==typeof Number.toInteger?t.Cast_Int64=function(e){return Number.toInteger(e)}:r.msie7||r.msie8?t.Cast_Int64=function(e){return parseInt(e,10)}:r.msie?t.Cast_Int64=function(e){return e<-2147483648||e>2147483647?e<0?Math.ceil(e):Math.floor(e):0|e}:t.Cast_Int64=function(e){return e<0?Math.ceil(e):Math.floor(e)},t.Clear=function(e){e.length=0},t.PI=3.141592653589793,t.PI2=6.283185307179586,t.IntPoint=function(){var e=arguments,i=e.length;if(this.X=0,this.Y=0,t.use_xyz)if(this.Z=0,3===i)this.X=e[0],this.Y=e[1],this.Z=e[2];else if(2===i)this.X=e[0],this.Y=e[1],this.Z=0;else if(1===i)if(e[0]instanceof t.DoublePoint){var n=e[0];this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y),this.Z=0}else void 0===(s=e[0]).Z&&(s.Z=0),this.X=s.X,this.Y=s.Y,this.Z=s.Z;else this.X=0,this.Y=0,this.Z=0;else if(2===i)this.X=e[0],this.Y=e[1];else if(1===i)if(e[0]instanceof t.DoublePoint)n=e[0],this.X=t.Clipper.Round(n.X),this.Y=t.Clipper.Round(n.Y);else{var s=e[0];this.X=s.X,this.Y=s.Y}else this.X=0,this.Y=0},t.IntPoint.op_Equality=function(e,t){return e.X===t.X&&e.Y===t.Y},t.IntPoint.op_Inequality=function(e,t){return e.X!==t.X||e.Y!==t.Y},t.IntPoint0=function(){this.X=0,this.Y=0,t.use_xyz&&(this.Z=0)},t.IntPoint0.prototype=t.IntPoint.prototype,t.IntPoint1=function(e){this.X=e.X,this.Y=e.Y,t.use_xyz&&(void 0===e.Z?this.Z=0:this.Z=e.Z)},t.IntPoint1.prototype=t.IntPoint.prototype,t.IntPoint1dp=function(e){this.X=t.Clipper.Round(e.X),this.Y=t.Clipper.Round(e.Y),t.use_xyz&&(this.Z=0)},t.IntPoint1dp.prototype=t.IntPoint.prototype,t.IntPoint2=function(e,i,n){this.X=e,this.Y=i,t.use_xyz&&(this.Z=void 0===n?0:n)},t.IntPoint2.prototype=t.IntPoint.prototype,t.IntRect=function(){var e=arguments,t=e.length;if(4===t)this.left=e[0],this.top=e[1],this.right=e[2],this.bottom=e[3];else if(1===t){var i=e[0];this.left=i.left,this.top=i.top,this.right=i.right,this.bottom=i.bottom}else this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0=function(){this.left=0,this.top=0,this.right=0,this.bottom=0},t.IntRect0.prototype=t.IntRect.prototype,t.IntRect1=function(e){this.left=e.left,this.top=e.top,this.right=e.right,this.bottom=e.bottom},t.IntRect1.prototype=t.IntRect.prototype,t.IntRect4=function(e,t,i,n){this.left=e,this.top=t,this.right=i,this.bottom=n},t.IntRect4.prototype=t.IntRect.prototype,t.ClipType={ctIntersection:0,ctUnion:1,ctDifference:2,ctXor:3},t.PolyType={ptSubject:0,ptClip:1},t.PolyFillType={pftEvenOdd:0,pftNonZero:1,pftPositive:2,pftNegative:3},t.JoinType={jtSquare:0,jtRound:1,jtMiter:2},t.EndType={etOpenSquare:0,etOpenRound:1,etOpenButt:2,etClosedLine:3,etClosedPolygon:4},t.EdgeSide={esLeft:0,esRight:1},t.Direction={dRightToLeft:0,dLeftToRight:1},t.TEdge=function(){this.Bot=new t.IntPoint0,this.Curr=new t.IntPoint0,this.Top=new t.IntPoint0,this.Delta=new t.IntPoint0,this.Dx=0,this.PolyTyp=t.PolyType.ptSubject,this.Side=t.EdgeSide.esLeft,this.WindDelta=0,this.WindCnt=0,this.WindCnt2=0,this.OutIdx=0,this.Next=null,this.Prev=null,this.NextInLML=null,this.NextInAEL=null,this.PrevInAEL=null,this.NextInSEL=null,this.PrevInSEL=null},t.IntersectNode=function(){this.Edge1=null,this.Edge2=null,this.Pt=new t.IntPoint0},t.MyIntersectNodeSort=function(){},t.MyIntersectNodeSort.Compare=function(e,t){var i=t.Pt.Y-e.Pt.Y;return i>0?1:i<0?-1:0},t.LocalMinima=function(){this.Y=0,this.LeftBound=null,this.RightBound=null,this.Next=null},t.Scanbeam=function(){this.Y=0,this.Next=null},t.Maxima=function(){this.X=0,this.Next=null,this.Prev=null},t.OutRec=function(){this.Idx=0,this.IsHole=!1,this.IsOpen=!1,this.FirstLeft=null,this.Pts=null,this.BottomPt=null,this.PolyNode=null},t.OutPt=function(){this.Idx=0,this.Pt=new t.IntPoint0,this.Next=null,this.Prev=null},t.Join=function(){this.OutPt1=null,this.OutPt2=null,this.OffPt=new t.IntPoint0},t.ClipperBase=function(){this.m_MinimaList=null,this.m_CurrentLM=null,this.m_edges=new Array,this.m_UseFullRange=!1,this.m_HasOpenPaths=!1,this.PreserveCollinear=!1,this.m_Scanbeam=null,this.m_PolyOuts=null,this.m_ActiveEdges=null},t.ClipperBase.horizontal=-9007199254740992,t.ClipperBase.Skip=-2,t.ClipperBase.Unassigned=-1,t.ClipperBase.tolerance=1e-20,t.ClipperBase.loRange=47453132,t.ClipperBase.hiRange=0xfffffffffffff,t.ClipperBase.near_zero=function(e){return e>-t.ClipperBase.tolerance&&e<t.ClipperBase.tolerance},t.ClipperBase.IsHorizontal=function(e){return 0===e.Delta.Y},t.ClipperBase.prototype.PointIsVertex=function(e,i){var n=i;do{if(t.IntPoint.op_Equality(n.Pt,e))return!0;n=n.Next}while(n!==i);return!1},t.ClipperBase.prototype.PointOnLineSegment=function(e,t,i,n){return n?e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&h.op_Equality(h.Int128Mul(e.X-t.X,i.Y-t.Y),h.Int128Mul(i.X-t.X,e.Y-t.Y)):e.X===t.X&&e.Y===t.Y||e.X===i.X&&e.Y===i.Y||e.X>t.X==e.X<i.X&&e.Y>t.Y==e.Y<i.Y&&(e.X-t.X)*(i.Y-t.Y)==(i.X-t.X)*(e.Y-t.Y)},t.ClipperBase.prototype.PointOnPolygon=function(e,t,i){for(var n=t;;){if(this.PointOnLineSegment(e,n.Pt,n.Next.Pt,i))return!0;if((n=n.Next)===t)break}return!1},t.ClipperBase.prototype.SlopesEqual=t.ClipperBase.SlopesEqual=function(){var e,i,n,s,r,o,a=arguments,A=a.length;return 3===A?(e=a[0],i=a[1],a[2]?h.op_Equality(h.Int128Mul(e.Delta.Y,i.Delta.X),h.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)):4===A?(n=a[0],s=a[1],r=a[2],a[3]?h.op_Equality(h.Int128Mul(n.Y-s.Y,s.X-r.X),h.Int128Mul(n.X-s.X,s.Y-r.Y)):t.Cast_Int64((n.Y-s.Y)*(s.X-r.X))-t.Cast_Int64((n.X-s.X)*(s.Y-r.Y))==0):(n=a[0],s=a[1],r=a[2],o=a[3],a[4]?h.op_Equality(h.Int128Mul(n.Y-s.Y,r.X-o.X),h.Int128Mul(n.X-s.X,r.Y-o.Y)):t.Cast_Int64((n.Y-s.Y)*(r.X-o.X))-t.Cast_Int64((n.X-s.X)*(r.Y-o.Y))==0)},t.ClipperBase.SlopesEqual3=function(e,i,n){return n?h.op_Equality(h.Int128Mul(e.Delta.Y,i.Delta.X),h.Int128Mul(e.Delta.X,i.Delta.Y)):t.Cast_Int64(e.Delta.Y*i.Delta.X)===t.Cast_Int64(e.Delta.X*i.Delta.Y)},t.ClipperBase.SlopesEqual4=function(e,i,n,s){return s?h.op_Equality(h.Int128Mul(e.Y-i.Y,i.X-n.X),h.Int128Mul(e.X-i.X,i.Y-n.Y)):t.Cast_Int64((e.Y-i.Y)*(i.X-n.X))-t.Cast_Int64((e.X-i.X)*(i.Y-n.Y))==0},t.ClipperBase.SlopesEqual5=function(e,i,n,s,r){return r?h.op_Equality(h.Int128Mul(e.Y-i.Y,n.X-s.X),h.Int128Mul(e.X-i.X,n.Y-s.Y)):t.Cast_Int64((e.Y-i.Y)*(n.X-s.X))-t.Cast_Int64((e.X-i.X)*(n.Y-s.Y))==0},t.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var e=0,i=this.m_edges.length;e<i;++e){for(var n=0,s=this.m_edges[e].length;n<s;++n)this.m_edges[e][n]=null;t.Clear(this.m_edges[e])}t.Clear(this.m_edges),this.m_UseFullRange=!1,this.m_HasOpenPaths=!1},t.ClipperBase.prototype.DisposeLocalMinimaList=function(){for(;null!==this.m_MinimaList;){var e=this.m_MinimaList.Next;this.m_MinimaList=null,this.m_MinimaList=e}this.m_CurrentLM=null},t.ClipperBase.prototype.RangeTest=function(e,i){i.Value?(e.X>t.ClipperBase.hiRange||e.Y>t.ClipperBase.hiRange||-e.X>t.ClipperBase.hiRange||-e.Y>t.ClipperBase.hiRange)&&t.Error("Coordinate outside allowed range in RangeTest()."):(e.X>t.ClipperBase.loRange||e.Y>t.ClipperBase.loRange||-e.X>t.ClipperBase.loRange||-e.Y>t.ClipperBase.loRange)&&(i.Value=!0,this.RangeTest(e,i))},t.ClipperBase.prototype.InitEdge=function(e,i,n,s){e.Next=i,e.Prev=n,e.Curr.X=s.X,e.Curr.Y=s.Y,t.use_xyz&&(e.Curr.Z=s.Z),e.OutIdx=-1},t.ClipperBase.prototype.InitEdge2=function(e,i){e.Curr.Y>=e.Next.Curr.Y?(e.Bot.X=e.Curr.X,e.Bot.Y=e.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Curr.Z),e.Top.X=e.Next.Curr.X,e.Top.Y=e.Next.Curr.Y,t.use_xyz&&(e.Top.Z=e.Next.Curr.Z)):(e.Top.X=e.Curr.X,e.Top.Y=e.Curr.Y,t.use_xyz&&(e.Top.Z=e.Curr.Z),e.Bot.X=e.Next.Curr.X,e.Bot.Y=e.Next.Curr.Y,t.use_xyz&&(e.Bot.Z=e.Next.Curr.Z)),this.SetDx(e),e.PolyTyp=i},t.ClipperBase.prototype.FindNextLocMin=function(e){for(var i;;){for(;t.IntPoint.op_Inequality(e.Bot,e.Prev.Bot)||t.IntPoint.op_Equality(e.Curr,e.Top);)e=e.Next;if(e.Dx!==t.ClipperBase.horizontal&&e.Prev.Dx!==t.ClipperBase.horizontal)break;for(;e.Prev.Dx===t.ClipperBase.horizontal;)e=e.Prev;for(i=e;e.Dx===t.ClipperBase.horizontal;)e=e.Next;if(e.Top.Y!==e.Prev.Bot.Y){i.Prev.Bot.X<e.Bot.X&&(e=i);break}}return e},t.ClipperBase.prototype.ProcessBound=function(e,i){var n,s,r=e;if(r.OutIdx===t.ClipperBase.Skip){if(e=r,i){for(;e.Top.Y===e.Next.Bot.Y;)e=e.Next;for(;e!==r&&e.Dx===t.ClipperBase.horizontal;)e=e.Prev}else{for(;e.Top.Y===e.Prev.Bot.Y;)e=e.Prev;for(;e!==r&&e.Dx===t.ClipperBase.horizontal;)e=e.Next}if(e===r)r=i?e.Next:e.Prev;else{e=i?r.Next:r.Prev;var o=new t.LocalMinima;o.Next=null,o.Y=e.Bot.Y,o.LeftBound=null,o.RightBound=e,e.WindDelta=0,r=this.ProcessBound(e,i),this.InsertLocalMinima(o)}return r}if(e.Dx===t.ClipperBase.horizontal&&((n=i?e.Prev:e.Next).Dx===t.ClipperBase.horizontal?n.Bot.X!==e.Bot.X&&n.Top.X!==e.Bot.X&&this.ReverseHorizontal(e):n.Bot.X!==e.Bot.X&&this.ReverseHorizontal(e)),n=e,i){for(;r.Top.Y===r.Next.Bot.Y&&r.Next.OutIdx!==t.ClipperBase.Skip;)r=r.Next;if(r.Dx===t.ClipperBase.horizontal&&r.Next.OutIdx!==t.ClipperBase.Skip){for(s=r;s.Prev.Dx===t.ClipperBase.horizontal;)s=s.Prev;s.Prev.Top.X>r.Next.Top.X&&(r=s.Prev)}for(;e!==r;)e.NextInLML=e.Next,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),e=e.Next;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),r=r.Next}else{for(;r.Top.Y===r.Prev.Bot.Y&&r.Prev.OutIdx!==t.ClipperBase.Skip;)r=r.Prev;if(r.Dx===t.ClipperBase.horizontal&&r.Prev.OutIdx!==t.ClipperBase.Skip){for(s=r;s.Next.Dx===t.ClipperBase.horizontal;)s=s.Next;(s.Next.Top.X===r.Prev.Top.X||s.Next.Top.X>r.Prev.Top.X)&&(r=s.Next)}for(;e!==r;)e.NextInLML=e.Prev,e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),e=e.Prev;e.Dx===t.ClipperBase.horizontal&&e!==n&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),r=r.Prev}return r},t.ClipperBase.prototype.AddPath=function(e,i,n){t.use_lines?n||i!==t.PolyType.ptClip||t.Error("AddPath: Open paths must be subject."):n||t.Error("AddPath: Open paths have been disabled.");var s=e.length-1;if(n)for(;s>0&&t.IntPoint.op_Equality(e[s],e[0]);)--s;for(;s>0&&t.IntPoint.op_Equality(e[s],e[s-1]);)--s;if(n&&s<2||!n&&s<1)return!1;for(var r=new Array,o=0;o<=s;o++)r.push(new t.TEdge);var a=!0;r[1].Curr.X=e[1].X,r[1].Curr.Y=e[1].Y,t.use_xyz&&(r[1].Curr.Z=e[1].Z);var A={Value:this.m_UseFullRange};for(this.RangeTest(e[0],A),this.m_UseFullRange=A.Value,A.Value=this.m_UseFullRange,this.RangeTest(e[s],A),this.m_UseFullRange=A.Value,this.InitEdge(r[0],r[1],r[s],e[0]),this.InitEdge(r[s],r[0],r[s-1],e[s]),o=s-1;o>=1;--o)A.Value=this.m_UseFullRange,this.RangeTest(e[o],A),this.m_UseFullRange=A.Value,this.InitEdge(r[o],r[o+1],r[o-1],e[o]);for(var l,c=r[0],h=c,p=c;;)if(h.Curr!==h.Next.Curr||!n&&h.Next===c){if(h.Prev===h.Next)break;if(!n||!t.ClipperBase.SlopesEqual4(h.Prev.Curr,h.Curr,h.Next.Curr,this.m_UseFullRange)||this.PreserveCollinear&&this.Pt2IsBetweenPt1AndPt3(h.Prev.Curr,h.Curr,h.Next.Curr)){if((h=h.Next)===p||!n&&h.Next===c)break}else h===c&&(c=h.Next),p=h=(h=this.RemoveEdge(h)).Prev}else{if(h===h.Next)break;h===c&&(c=h.Next),p=h=this.RemoveEdge(h)}if(!n&&h===h.Next||n&&h.Prev===h.Next)return!1;n||(this.m_HasOpenPaths=!0,c.Prev.OutIdx=t.ClipperBase.Skip),h=c;do{this.InitEdge2(h,i),h=h.Next,a&&h.Curr.Y!==c.Curr.Y&&(a=!1)}while(h!==c);if(a){if(n)return!1;for(h.Prev.OutIdx=t.ClipperBase.Skip,(g=new t.LocalMinima).Next=null,g.Y=h.Bot.Y,g.LeftBound=null,g.RightBound=h,g.RightBound.Side=t.EdgeSide.esRight,g.RightBound.WindDelta=0;h.Bot.X!==h.Prev.Top.X&&this.ReverseHorizontal(h),h.Next.OutIdx!==t.ClipperBase.Skip;)h.NextInLML=h.Next,h=h.Next;return this.InsertLocalMinima(g),this.m_edges.push(r),!0}this.m_edges.push(r);var u=null;for(t.IntPoint.op_Equality(h.Prev.Bot,h.Prev.Top)&&(h=h.Next);(h=this.FindNextLocMin(h))!==u;){var g;null===u&&(u=h),(g=new t.LocalMinima).Next=null,g.Y=h.Bot.Y,h.Dx<h.Prev.Dx?(g.LeftBound=h.Prev,g.RightBound=h,l=!1):(g.LeftBound=h,g.RightBound=h.Prev,l=!0),g.LeftBound.Side=t.EdgeSide.esLeft,g.RightBound.Side=t.EdgeSide.esRight,n?g.LeftBound.Next===g.RightBound?g.LeftBound.WindDelta=-1:g.LeftBound.WindDelta=1:g.LeftBound.WindDelta=0,g.RightBound.WindDelta=-g.LeftBound.WindDelta,(h=this.ProcessBound(g.LeftBound,l)).OutIdx===t.ClipperBase.Skip&&(h=this.ProcessBound(h,l));var d=this.ProcessBound(g.RightBound,!l);d.OutIdx===t.ClipperBase.Skip&&(d=this.ProcessBound(d,!l)),g.LeftBound.OutIdx===t.ClipperBase.Skip?g.LeftBound=null:g.RightBound.OutIdx===t.ClipperBase.Skip&&(g.RightBound=null),this.InsertLocalMinima(g),l||(h=d)}return!0},t.ClipperBase.prototype.AddPaths=function(e,t,i){for(var n=!1,s=0,r=e.length;s<r;++s)this.AddPath(e[s],t,i)&&(n=!0);return n},t.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(e,i,n){return!(t.IntPoint.op_Equality(e,n)||t.IntPoint.op_Equality(e,i)||t.IntPoint.op_Equality(n,i))&&(e.X!==n.X?i.X>e.X==i.X<n.X:i.Y>e.Y==i.Y<n.Y)},t.ClipperBase.prototype.RemoveEdge=function(e){e.Prev.Next=e.Next,e.Next.Prev=e.Prev;var t=e.Next;return e.Prev=null,t},t.ClipperBase.prototype.SetDx=function(e){e.Delta.X=e.Top.X-e.Bot.X,e.Delta.Y=e.Top.Y-e.Bot.Y,0===e.Delta.Y?e.Dx=t.ClipperBase.horizontal:e.Dx=e.Delta.X/e.Delta.Y},t.ClipperBase.prototype.InsertLocalMinima=function(e){if(null===this.m_MinimaList)this.m_MinimaList=e;else if(e.Y>=this.m_MinimaList.Y)e.Next=this.m_MinimaList,this.m_MinimaList=e;else{for(var t=this.m_MinimaList;null!==t.Next&&e.Y<t.Next.Y;)t=t.Next;e.Next=t.Next,t.Next=e}},t.ClipperBase.prototype.PopLocalMinima=function(e,t){return t.v=this.m_CurrentLM,null!==this.m_CurrentLM&&this.m_CurrentLM.Y===e&&(this.m_CurrentLM=this.m_CurrentLM.Next,!0)},t.ClipperBase.prototype.ReverseHorizontal=function(e){var i=e.Top.X;e.Top.X=e.Bot.X,e.Bot.X=i,t.use_xyz&&(i=e.Top.Z,e.Top.Z=e.Bot.Z,e.Bot.Z=i)},t.ClipperBase.prototype.Reset=function(){if(this.m_CurrentLM=this.m_MinimaList,null!==this.m_CurrentLM){this.m_Scanbeam=null;for(var e=this.m_MinimaList;null!==e;){this.InsertScanbeam(e.Y);var i=e.LeftBound;null!==i&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),null!==(i=e.RightBound)&&(i.Curr.X=i.Bot.X,i.Curr.Y=i.Bot.Y,t.use_xyz&&(i.Curr.Z=i.Bot.Z),i.OutIdx=t.ClipperBase.Unassigned),e=e.Next}this.m_ActiveEdges=null}},t.ClipperBase.prototype.InsertScanbeam=function(e){if(null===this.m_Scanbeam)this.m_Scanbeam=new t.Scanbeam,this.m_Scanbeam.Next=null,this.m_Scanbeam.Y=e;else if(e>this.m_Scanbeam.Y){var i=new t.Scanbeam;i.Y=e,i.Next=this.m_Scanbeam,this.m_Scanbeam=i}else{for(var n=this.m_Scanbeam;null!==n.Next&&e<=n.Next.Y;)n=n.Next;if(e===n.Y)return;var s=new t.Scanbeam;s.Y=e,s.Next=n.Next,n.Next=s}},t.ClipperBase.prototype.PopScanbeam=function(e){return null===this.m_Scanbeam?(e.v=0,!1):(e.v=this.m_Scanbeam.Y,this.m_Scanbeam=this.m_Scanbeam.Next,!0)},t.ClipperBase.prototype.LocalMinimaPending=function(){return null!==this.m_CurrentLM},t.ClipperBase.prototype.CreateOutRec=function(){var e=new t.OutRec;return e.Idx=t.ClipperBase.Unassigned,e.IsHole=!1,e.IsOpen=!1,e.FirstLeft=null,e.Pts=null,e.BottomPt=null,e.PolyNode=null,this.m_PolyOuts.push(e),e.Idx=this.m_PolyOuts.length-1,e},t.ClipperBase.prototype.DisposeOutRec=function(e){var t=this.m_PolyOuts[e];t.Pts=null,t=null,this.m_PolyOuts[e]=null},t.ClipperBase.prototype.UpdateEdgeIntoAEL=function(e){null===e.NextInLML&&t.Error("UpdateEdgeIntoAEL: invalid call");var i=e.PrevInAEL,n=e.NextInAEL;return e.NextInLML.OutIdx=e.OutIdx,null!==i?i.NextInAEL=e.NextInLML:this.m_ActiveEdges=e.NextInLML,null!==n&&(n.PrevInAEL=e.NextInLML),e.NextInLML.Side=e.Side,e.NextInLML.WindDelta=e.WindDelta,e.NextInLML.WindCnt=e.WindCnt,e.NextInLML.WindCnt2=e.WindCnt2,(e=e.NextInLML).Curr.X=e.Bot.X,e.Curr.Y=e.Bot.Y,e.PrevInAEL=i,e.NextInAEL=n,t.ClipperBase.IsHorizontal(e)||this.InsertScanbeam(e.Top.Y),e},t.ClipperBase.prototype.SwapPositionsInAEL=function(e,t){if(e.NextInAEL!==e.PrevInAEL&&t.NextInAEL!==t.PrevInAEL){if(e.NextInAEL===t){var i=t.NextInAEL;null!==i&&(i.PrevInAEL=e);var n=e.PrevInAEL;null!==n&&(n.NextInAEL=t),t.PrevInAEL=n,t.NextInAEL=e,e.PrevInAEL=t,e.NextInAEL=i}else if(t.NextInAEL===e){var s=e.NextInAEL;null!==s&&(s.PrevInAEL=t);var r=t.PrevInAEL;null!==r&&(r.NextInAEL=e),e.PrevInAEL=r,e.NextInAEL=t,t.PrevInAEL=e,t.NextInAEL=s}else{var o=e.NextInAEL,a=e.PrevInAEL;e.NextInAEL=t.NextInAEL,null!==e.NextInAEL&&(e.NextInAEL.PrevInAEL=e),e.PrevInAEL=t.PrevInAEL,null!==e.PrevInAEL&&(e.PrevInAEL.NextInAEL=e),t.NextInAEL=o,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=t),t.PrevInAEL=a,null!==t.PrevInAEL&&(t.PrevInAEL.NextInAEL=t)}null===e.PrevInAEL?this.m_ActiveEdges=e:null===t.PrevInAEL&&(this.m_ActiveEdges=t)}},t.ClipperBase.prototype.DeleteFromAEL=function(e){var t=e.PrevInAEL,i=e.NextInAEL;null===t&&null===i&&e!==this.m_ActiveEdges||(null!==t?t.NextInAEL=i:this.m_ActiveEdges=i,null!==i&&(i.PrevInAEL=t),e.NextInAEL=null,e.PrevInAEL=null)},t.Clipper=function(e){void 0===e&&(e=0),this.m_PolyOuts=null,this.m_ClipType=t.ClipType.ctIntersection,this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=null,this.m_IntersectNodeComparer=null,this.m_ExecuteLocked=!1,this.m_ClipFillType=t.PolyFillType.pftEvenOdd,this.m_SubjFillType=t.PolyFillType.pftEvenOdd,this.m_Joins=null,this.m_GhostJoins=null,this.m_UsingPolyTree=!1,this.ReverseSolution=!1,this.StrictlySimple=!1,t.ClipperBase.call(this),this.m_Scanbeam=null,this.m_Maxima=null,this.m_ActiveEdges=null,this.m_SortedEdges=null,this.m_IntersectList=new Array,this.m_IntersectNodeComparer=t.MyIntersectNodeSort.Compare,this.m_ExecuteLocked=!1,this.m_UsingPolyTree=!1,this.m_PolyOuts=new Array,this.m_Joins=new Array,this.m_GhostJoins=new Array,this.ReverseSolution=!!(1&e),this.StrictlySimple=!!(2&e),this.PreserveCollinear=!!(4&e),t.use_xyz&&(this.ZFillFunction=null)},t.Clipper.ioReverseSolution=1,t.Clipper.ioStrictlySimple=2,t.Clipper.ioPreserveCollinear=4,t.Clipper.prototype.Clear=function(){0!==this.m_edges.length&&(this.DisposeAllPolyPts(),t.ClipperBase.prototype.Clear.call(this))},t.Clipper.prototype.InsertMaxima=function(e){var i=new t.Maxima;if(i.X=e,null===this.m_Maxima)this.m_Maxima=i,this.m_Maxima.Next=null,this.m_Maxima.Prev=null;else if(e<this.m_Maxima.X)i.Next=this.m_Maxima,i.Prev=null,this.m_Maxima=i;else{for(var n=this.m_Maxima;null!==n.Next&&e>=n.Next.X;)n=n.Next;if(e===n.X)return;i.Next=n.Next,i.Prev=n,null!==n.Next&&(n.Next.Prev=i),n.Next=i}},t.Clipper.prototype.Execute=function(){var e=arguments,i=e.length,n=e[1]instanceof t.PolyTree;if(4===i&&!n){var s=e[0],r=e[1],o=e[2],a=e[3];if(this.m_ExecuteLocked)return!1;this.m_HasOpenPaths&&t.Error("Error: PolyTree struct is needed for open path clipping."),this.m_ExecuteLocked=!0,t.Clear(r),this.m_SubjFillType=o,this.m_ClipFillType=a,this.m_ClipType=s,this.m_UsingPolyTree=!1;try{(l=this.ExecuteInternal())&&this.BuildResult(r)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}if(4===i&&n){s=e[0];var A=e[1];if(o=e[2],a=e[3],this.m_ExecuteLocked)return!1;this.m_ExecuteLocked=!0,this.m_SubjFillType=o,this.m_ClipFillType=a,this.m_ClipType=s,this.m_UsingPolyTree=!0;try{var l;(l=this.ExecuteInternal())&&this.BuildResult2(A)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}return 2!==i||n?2===i&&n?(s=e[0],A=e[1],this.Execute(s,A,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd)):void 0:(s=e[0],r=e[1],this.Execute(s,r,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd))},t.Clipper.prototype.FixHoleLinkage=function(e){if(null!==e.FirstLeft&&(e.IsHole===e.FirstLeft.IsHole||null===e.FirstLeft.Pts)){for(var t=e.FirstLeft;null!==t&&(t.IsHole===e.IsHole||null===t.Pts);)t=t.FirstLeft;e.FirstLeft=t}},t.Clipper.prototype.ExecuteInternal=function(){try{this.Reset(),this.m_SortedEdges=null,this.m_Maxima=null;var e,t,i,n={},s={};if(!this.PopScanbeam(n))return!1;for(this.InsertLocalMinimaIntoAEL(n.v);this.PopScanbeam(s)||this.LocalMinimaPending();){if(this.ProcessHorizontals(),this.m_GhostJoins.length=0,!this.ProcessIntersections(s.v))return!1;this.ProcessEdgesAtTopOfScanbeam(s.v),n.v=s.v,this.InsertLocalMinimaIntoAEL(n.v)}for(t=0,i=this.m_PolyOuts.length;t<i;t++)null===(e=this.m_PolyOuts[t]).Pts||e.IsOpen||(e.IsHole^this.ReverseSolution)==this.Area$1(e)>0&&this.ReversePolyPtLinks(e.Pts);for(this.JoinCommonEdges(),t=0,i=this.m_PolyOuts.length;t<i;t++)null!==(e=this.m_PolyOuts[t]).Pts&&(e.IsOpen?this.FixupOutPolyline(e):this.FixupOutPolygon(e));return this.StrictlySimple&&this.DoSimplePolygons(),!0}finally{this.m_Joins.length=0,this.m_GhostJoins.length=0}},t.Clipper.prototype.DisposeAllPolyPts=function(){for(var e=0,i=this.m_PolyOuts.length;e<i;++e)this.DisposeOutRec(e);t.Clear(this.m_PolyOuts)},t.Clipper.prototype.AddJoin=function(e,i,n){var s=new t.Join;s.OutPt1=e,s.OutPt2=i,s.OffPt.X=n.X,s.OffPt.Y=n.Y,t.use_xyz&&(s.OffPt.Z=n.Z),this.m_Joins.push(s)},t.Clipper.prototype.AddGhostJoin=function(e,i){var n=new t.Join;n.OutPt1=e,n.OffPt.X=i.X,n.OffPt.Y=i.Y,t.use_xyz&&(n.OffPt.Z=i.Z),this.m_GhostJoins.push(n)},t.Clipper.prototype.SetZ=function(e,i,n){if(null!==this.ZFillFunction){if(0!==e.Z||null===this.ZFillFunction)return;t.IntPoint.op_Equality(e,i.Bot)?e.Z=i.Bot.Z:t.IntPoint.op_Equality(e,i.Top)?e.Z=i.Top.Z:t.IntPoint.op_Equality(e,n.Bot)?e.Z=n.Bot.Z:t.IntPoint.op_Equality(e,n.Top)?e.Z=n.Top.Z:this.ZFillFunction(i.Bot,i.Top,n.Bot,n.Top,e)}},t.Clipper.prototype.InsertLocalMinimaIntoAEL=function(e){for(var i,n,s={};this.PopLocalMinima(e,s);){i=s.v.LeftBound,n=s.v.RightBound;var r=null;if(null===i?(this.InsertEdgeIntoAEL(n,null),this.SetWindingCount(n),this.IsContributing(n)&&(r=this.AddOutPt(n,n.Bot))):null===n?(this.InsertEdgeIntoAEL(i,null),this.SetWindingCount(i),this.IsContributing(i)&&(r=this.AddOutPt(i,i.Bot)),this.InsertScanbeam(i.Top.Y)):(this.InsertEdgeIntoAEL(i,null),this.InsertEdgeIntoAEL(n,i),this.SetWindingCount(i),n.WindCnt=i.WindCnt,n.WindCnt2=i.WindCnt2,this.IsContributing(i)&&(r=this.AddLocalMinPoly(i,n,i.Bot)),this.InsertScanbeam(i.Top.Y)),null!==n&&(t.ClipperBase.IsHorizontal(n)?(null!==n.NextInLML&&this.InsertScanbeam(n.NextInLML.Top.Y),this.AddEdgeToSEL(n)):this.InsertScanbeam(n.Top.Y)),null!==i&&null!==n){if(null!==r&&t.ClipperBase.IsHorizontal(n)&&this.m_GhostJoins.length>0&&0!==n.WindDelta)for(var o=0,a=this.m_GhostJoins.length;o<a;o++){var A=this.m_GhostJoins[o];this.HorzSegmentsOverlap(A.OutPt1.Pt.X,A.OffPt.X,n.Bot.X,n.Top.X)&&this.AddJoin(A.OutPt1,r,A.OffPt)}if(i.OutIdx>=0&&null!==i.PrevInAEL&&i.PrevInAEL.Curr.X===i.Bot.X&&i.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(i.PrevInAEL.Curr,i.PrevInAEL.Top,i.Curr,i.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==i.PrevInAEL.WindDelta){var l=this.AddOutPt(i.PrevInAEL,i.Bot);this.AddJoin(r,l,i.Top)}if(i.NextInAEL!==n){n.OutIdx>=0&&n.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(n.PrevInAEL.Curr,n.PrevInAEL.Top,n.Curr,n.Top,this.m_UseFullRange)&&0!==n.WindDelta&&0!==n.PrevInAEL.WindDelta&&(l=this.AddOutPt(n.PrevInAEL,n.Bot),this.AddJoin(r,l,n.Top));var c=i.NextInAEL;if(null!==c)for(;c!==n;)this.IntersectEdges(n,c,i.Curr),c=c.NextInAEL}}}},t.Clipper.prototype.InsertEdgeIntoAEL=function(e,t){if(null===this.m_ActiveEdges)e.PrevInAEL=null,e.NextInAEL=null,this.m_ActiveEdges=e;else if(null===t&&this.E2InsertsBeforeE1(this.m_ActiveEdges,e))e.PrevInAEL=null,e.NextInAEL=this.m_ActiveEdges,this.m_ActiveEdges.PrevInAEL=e,this.m_ActiveEdges=e;else{for(null===t&&(t=this.m_ActiveEdges);null!==t.NextInAEL&&!this.E2InsertsBeforeE1(t.NextInAEL,e);)t=t.NextInAEL;e.NextInAEL=t.NextInAEL,null!==t.NextInAEL&&(t.NextInAEL.PrevInAEL=e),e.PrevInAEL=t,t.NextInAEL=e}},t.Clipper.prototype.E2InsertsBeforeE1=function(e,i){return i.Curr.X===e.Curr.X?i.Top.Y>e.Top.Y?i.Top.X<t.Clipper.TopX(e,i.Top.Y):e.Top.X>t.Clipper.TopX(i,e.Top.Y):i.Curr.X<e.Curr.X},t.Clipper.prototype.IsEvenOddFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType===t.PolyFillType.pftEvenOdd:this.m_ClipFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsEvenOddAltFillType=function(e){return e.PolyTyp===t.PolyType.ptSubject?this.m_ClipFillType===t.PolyFillType.pftEvenOdd:this.m_SubjFillType===t.PolyFillType.pftEvenOdd},t.Clipper.prototype.IsContributing=function(e){var i,n;switch(e.PolyTyp===t.PolyType.ptSubject?(i=this.m_SubjFillType,n=this.m_ClipFillType):(i=this.m_ClipFillType,n=this.m_SubjFillType),i){case t.PolyFillType.pftEvenOdd:if(0===e.WindDelta&&1!==e.WindCnt)return!1;break;case t.PolyFillType.pftNonZero:if(1!==Math.abs(e.WindCnt))return!1;break;case t.PolyFillType.pftPositive:if(1!==e.WindCnt)return!1;break;default:if(-1!==e.WindCnt)return!1}switch(this.m_ClipType){case t.ClipType.ctIntersection:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctUnion:switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}case t.ClipType.ctDifference:if(e.PolyTyp===t.PolyType.ptSubject)switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}else switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0!==e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2>0;default:return e.WindCnt2<0}case t.ClipType.ctXor:if(0!==e.WindDelta)return!0;switch(n){case t.PolyFillType.pftEvenOdd:case t.PolyFillType.pftNonZero:return 0===e.WindCnt2;case t.PolyFillType.pftPositive:return e.WindCnt2<=0;default:return e.WindCnt2>=0}}return!0},t.Clipper.prototype.SetWindingCount=function(e){for(var i=e.PrevInAEL;null!==i&&(i.PolyTyp!==e.PolyTyp||0===i.WindDelta);)i=i.PrevInAEL;if(null===i){var n=e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType:this.m_ClipFillType;0===e.WindDelta?e.WindCnt=n===t.PolyFillType.pftNegative?-1:1:e.WindCnt=e.WindDelta,e.WindCnt2=0,i=this.m_ActiveEdges}else if(0===e.WindDelta&&this.m_ClipType!==t.ClipType.ctUnion)e.WindCnt=1,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;else if(this.IsEvenOddFillType(e)){if(0===e.WindDelta){for(var s=!0,r=i.PrevInAEL;null!==r;)r.PolyTyp===i.PolyTyp&&0!==r.WindDelta&&(s=!s),r=r.PrevInAEL;e.WindCnt=s?0:1}else e.WindCnt=e.WindDelta;e.WindCnt2=i.WindCnt2,i=i.NextInAEL}else i.WindCnt*i.WindDelta<0?Math.abs(i.WindCnt)>1?i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta:e.WindCnt=0===e.WindDelta?1:e.WindDelta:0===e.WindDelta?e.WindCnt=i.WindCnt<0?i.WindCnt-1:i.WindCnt+1:i.WindDelta*e.WindDelta<0?e.WindCnt=i.WindCnt:e.WindCnt=i.WindCnt+e.WindDelta,e.WindCnt2=i.WindCnt2,i=i.NextInAEL;if(this.IsEvenOddAltFillType(e))for(;i!==e;)0!==i.WindDelta&&(e.WindCnt2=0===e.WindCnt2?1:0),i=i.NextInAEL;else for(;i!==e;)e.WindCnt2+=i.WindDelta,i=i.NextInAEL},t.Clipper.prototype.AddEdgeToSEL=function(e){null===this.m_SortedEdges?(this.m_SortedEdges=e,e.PrevInSEL=null,e.NextInSEL=null):(e.NextInSEL=this.m_SortedEdges,e.PrevInSEL=null,this.m_SortedEdges.PrevInSEL=e,this.m_SortedEdges=e)},t.Clipper.prototype.PopEdgeFromSEL=function(e){if(e.v=this.m_SortedEdges,null===e.v)return!1;var t=e.v;return this.m_SortedEdges=e.v.NextInSEL,null!==this.m_SortedEdges&&(this.m_SortedEdges.PrevInSEL=null),t.NextInSEL=null,t.PrevInSEL=null,!0},t.Clipper.prototype.CopyAELToSEL=function(){var e=this.m_ActiveEdges;for(this.m_SortedEdges=e;null!==e;)e.PrevInSEL=e.PrevInAEL,e.NextInSEL=e.NextInAEL,e=e.NextInAEL},t.Clipper.prototype.SwapPositionsInSEL=function(e,t){if(!(null===e.NextInSEL&&null===e.PrevInSEL||null===t.NextInSEL&&null===t.PrevInSEL)){if(e.NextInSEL===t)null!==(i=t.NextInSEL)&&(i.PrevInSEL=e),null!==(n=e.PrevInSEL)&&(n.NextInSEL=t),t.PrevInSEL=n,t.NextInSEL=e,e.PrevInSEL=t,e.NextInSEL=i;else if(t.NextInSEL===e)null!==(i=e.NextInSEL)&&(i.PrevInSEL=t),null!==(n=t.PrevInSEL)&&(n.NextInSEL=e),e.PrevInSEL=n,e.NextInSEL=t,t.PrevInSEL=e,t.NextInSEL=i;else{var i=e.NextInSEL,n=e.PrevInSEL;e.NextInSEL=t.NextInSEL,null!==e.NextInSEL&&(e.NextInSEL.PrevInSEL=e),e.PrevInSEL=t.PrevInSEL,null!==e.PrevInSEL&&(e.PrevInSEL.NextInSEL=e),t.NextInSEL=i,null!==t.NextInSEL&&(t.NextInSEL.PrevInSEL=t),t.PrevInSEL=n,null!==t.PrevInSEL&&(t.PrevInSEL.NextInSEL=t)}null===e.PrevInSEL?this.m_SortedEdges=e:null===t.PrevInSEL&&(this.m_SortedEdges=t)}},t.Clipper.prototype.AddLocalMaxPoly=function(e,t,i){this.AddOutPt(e,i),0===t.WindDelta&&this.AddOutPt(t,i),e.OutIdx===t.OutIdx?(e.OutIdx=-1,t.OutIdx=-1):e.OutIdx<t.OutIdx?this.AppendPolygon(e,t):this.AppendPolygon(t,e)},t.Clipper.prototype.AddLocalMinPoly=function(e,i,n){var s,r,o;if(t.ClipperBase.IsHorizontal(i)||e.Dx>i.Dx?(s=this.AddOutPt(e,n),i.OutIdx=e.OutIdx,e.Side=t.EdgeSide.esLeft,i.Side=t.EdgeSide.esRight,o=(r=e).PrevInAEL===i?i.PrevInAEL:r.PrevInAEL):(s=this.AddOutPt(i,n),e.OutIdx=i.OutIdx,e.Side=t.EdgeSide.esRight,i.Side=t.EdgeSide.esLeft,o=(r=i).PrevInAEL===e?e.PrevInAEL:r.PrevInAEL),null!==o&&o.OutIdx>=0&&o.Top.Y<n.Y&&r.Top.Y<n.Y){var a=t.Clipper.TopX(o,n.Y),A=t.Clipper.TopX(r,n.Y);if(a===A&&0!==r.WindDelta&&0!==o.WindDelta&&t.ClipperBase.SlopesEqual5(new t.IntPoint2(a,n.Y),o.Top,new t.IntPoint2(A,n.Y),r.Top,this.m_UseFullRange)){var l=this.AddOutPt(o,n);this.AddJoin(s,l,r.Top)}}return s},t.Clipper.prototype.AddOutPt=function(e,i){if(e.OutIdx<0){(s=this.CreateOutRec()).IsOpen=0===e.WindDelta;var n=new t.OutPt;return s.Pts=n,n.Idx=s.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=n,n.Prev=n,s.IsOpen||this.SetHoleState(e,s),e.OutIdx=s.Idx,n}var s,r=(s=this.m_PolyOuts[e.OutIdx]).Pts,o=e.Side===t.EdgeSide.esLeft;return o&&t.IntPoint.op_Equality(i,r.Pt)?r:!o&&t.IntPoint.op_Equality(i,r.Prev.Pt)?r.Prev:((n=new t.OutPt).Idx=s.Idx,n.Pt.X=i.X,n.Pt.Y=i.Y,t.use_xyz&&(n.Pt.Z=i.Z),n.Next=r,n.Prev=r.Prev,n.Prev.Next=n,r.Prev=n,o&&(s.Pts=n),n)},t.Clipper.prototype.GetLastOutPt=function(e){var i=this.m_PolyOuts[e.OutIdx];return e.Side===t.EdgeSide.esLeft?i.Pts:i.Pts.Prev},t.Clipper.prototype.SwapPoints=function(e,i){var n=new t.IntPoint1(e.Value);e.Value.X=i.Value.X,e.Value.Y=i.Value.Y,t.use_xyz&&(e.Value.Z=i.Value.Z),i.Value.X=n.X,i.Value.Y=n.Y,t.use_xyz&&(i.Value.Z=n.Z)},t.Clipper.prototype.HorzSegmentsOverlap=function(e,t,i,n){var s;return e>t&&(s=e,e=t,t=s),i>n&&(s=i,i=n,n=s),e<n&&i<t},t.Clipper.prototype.SetHoleState=function(e,t){for(var i=e.PrevInAEL,n=null;null!==i;)i.OutIdx>=0&&0!==i.WindDelta&&(null===n?n=i:n.OutIdx===i.OutIdx&&(n=null)),i=i.PrevInAEL;null===n?(t.FirstLeft=null,t.IsHole=!1):(t.FirstLeft=this.m_PolyOuts[n.OutIdx],t.IsHole=!t.FirstLeft.IsHole)},t.Clipper.prototype.GetDx=function(e,i){return e.Y===i.Y?t.ClipperBase.horizontal:(i.X-e.X)/(i.Y-e.Y)},t.Clipper.prototype.FirstIsBottomPt=function(e,i){for(var n=e.Prev;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Prev;var s=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=e.Next;t.IntPoint.op_Equality(n.Pt,e.Pt)&&n!==e;)n=n.Next;var r=Math.abs(this.GetDx(e.Pt,n.Pt));for(n=i.Prev;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Prev;var o=Math.abs(this.GetDx(i.Pt,n.Pt));for(n=i.Next;t.IntPoint.op_Equality(n.Pt,i.Pt)&&n!==i;)n=n.Next;var a=Math.abs(this.GetDx(i.Pt,n.Pt));return Math.max(s,r)===Math.max(o,a)&&Math.min(s,r)===Math.min(o,a)?this.Area(e)>0:s>=o&&s>=a||r>=o&&r>=a},t.Clipper.prototype.GetBottomPt=function(e){for(var i=null,n=e.Next;n!==e;)n.Pt.Y>e.Pt.Y?(e=n,i=null):n.Pt.Y===e.Pt.Y&&n.Pt.X<=e.Pt.X&&(n.Pt.X<e.Pt.X?(i=null,e=n):n.Next!==e&&n.Prev!==e&&(i=n)),n=n.Next;if(null!==i)for(;i!==n;)for(this.FirstIsBottomPt(n,i)||(e=i),i=i.Next;t.IntPoint.op_Inequality(i.Pt,e.Pt);)i=i.Next;return e},t.Clipper.prototype.GetLowermostRec=function(e,t){null===e.BottomPt&&(e.BottomPt=this.GetBottomPt(e.Pts)),null===t.BottomPt&&(t.BottomPt=this.GetBottomPt(t.Pts));var i=e.BottomPt,n=t.BottomPt;return i.Pt.Y>n.Pt.Y?e:i.Pt.Y<n.Pt.Y?t:i.Pt.X<n.Pt.X?e:i.Pt.X>n.Pt.X||i.Next===i?t:n.Next===n||this.FirstIsBottomPt(i,n)?e:t},t.Clipper.prototype.OutRec1RightOfOutRec2=function(e,t){do{if((e=e.FirstLeft)===t)return!0}while(null!==e);return!1},t.Clipper.prototype.GetOutRec=function(e){for(var t=this.m_PolyOuts[e];t!==this.m_PolyOuts[t.Idx];)t=this.m_PolyOuts[t.Idx];return t},t.Clipper.prototype.AppendPolygon=function(e,i){var n,s=this.m_PolyOuts[e.OutIdx],r=this.m_PolyOuts[i.OutIdx];n=this.OutRec1RightOfOutRec2(s,r)?r:this.OutRec1RightOfOutRec2(r,s)?s:this.GetLowermostRec(s,r);var o=s.Pts,a=o.Prev,A=r.Pts,l=A.Prev;e.Side===t.EdgeSide.esLeft?i.Side===t.EdgeSide.esLeft?(this.ReversePolyPtLinks(A),A.Next=o,o.Prev=A,a.Next=l,l.Prev=a,s.Pts=l):(l.Next=o,o.Prev=l,A.Prev=a,a.Next=A,s.Pts=A):i.Side===t.EdgeSide.esRight?(this.ReversePolyPtLinks(A),a.Next=l,l.Prev=a,A.Next=o,o.Prev=A):(a.Next=A,A.Prev=a,o.Prev=l,l.Next=o),s.BottomPt=null,n===r&&(r.FirstLeft!==s&&(s.FirstLeft=r.FirstLeft),s.IsHole=r.IsHole),r.Pts=null,r.BottomPt=null,r.FirstLeft=s;var c=e.OutIdx,h=i.OutIdx;e.OutIdx=-1,i.OutIdx=-1;for(var p=this.m_ActiveEdges;null!==p;){if(p.OutIdx===h){p.OutIdx=c,p.Side=e.Side;break}p=p.NextInAEL}r.Idx=s.Idx},t.Clipper.prototype.ReversePolyPtLinks=function(e){if(null!==e){var t,i;t=e;do{i=t.Next,t.Next=t.Prev,t.Prev=i,t=i}while(t!==e)}},t.Clipper.SwapSides=function(e,t){var i=e.Side;e.Side=t.Side,t.Side=i},t.Clipper.SwapPolyIndexes=function(e,t){var i=e.OutIdx;e.OutIdx=t.OutIdx,t.OutIdx=i},t.Clipper.prototype.IntersectEdges=function(e,i,n){var s=e.OutIdx>=0,r=i.OutIdx>=0;if(t.use_xyz&&this.SetZ(n,e,i),!t.use_lines||0!==e.WindDelta&&0!==i.WindDelta){if(e.PolyTyp===i.PolyTyp)if(this.IsEvenOddFillType(e)){var o=e.WindCnt;e.WindCnt=i.WindCnt,i.WindCnt=o}else e.WindCnt+i.WindDelta===0?e.WindCnt=-e.WindCnt:e.WindCnt+=i.WindDelta,i.WindCnt-e.WindDelta==0?i.WindCnt=-i.WindCnt:i.WindCnt-=e.WindDelta;else this.IsEvenOddFillType(i)?e.WindCnt2=0===e.WindCnt2?1:0:e.WindCnt2+=i.WindDelta,this.IsEvenOddFillType(e)?i.WindCnt2=0===i.WindCnt2?1:0:i.WindCnt2-=e.WindDelta;var a,A,l,c,h,p;switch(e.PolyTyp===t.PolyType.ptSubject?(a=this.m_SubjFillType,l=this.m_ClipFillType):(a=this.m_ClipFillType,l=this.m_SubjFillType),i.PolyTyp===t.PolyType.ptSubject?(A=this.m_SubjFillType,c=this.m_ClipFillType):(A=this.m_ClipFillType,c=this.m_SubjFillType),a){case t.PolyFillType.pftPositive:h=e.WindCnt;break;case t.PolyFillType.pftNegative:h=-e.WindCnt;break;default:h=Math.abs(e.WindCnt)}switch(A){case t.PolyFillType.pftPositive:p=i.WindCnt;break;case t.PolyFillType.pftNegative:p=-i.WindCnt;break;default:p=Math.abs(i.WindCnt)}if(s&&r)0!==h&&1!==h||0!==p&&1!==p||e.PolyTyp!==i.PolyTyp&&this.m_ClipType!==t.ClipType.ctXor?this.AddLocalMaxPoly(e,i,n):(this.AddOutPt(e,n),this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(s)0!==p&&1!==p||(this.AddOutPt(e,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(r)0!==h&&1!==h||(this.AddOutPt(i,n),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(!(0!==h&&1!==h||0!==p&&1!==p)){var u,g;switch(l){case t.PolyFillType.pftPositive:u=e.WindCnt2;break;case t.PolyFillType.pftNegative:u=-e.WindCnt2;break;default:u=Math.abs(e.WindCnt2)}switch(c){case t.PolyFillType.pftPositive:g=i.WindCnt2;break;case t.PolyFillType.pftNegative:g=-i.WindCnt2;break;default:g=Math.abs(i.WindCnt2)}if(e.PolyTyp!==i.PolyTyp)this.AddLocalMinPoly(e,i,n);else if(1===h&&1===p)switch(this.m_ClipType){case t.ClipType.ctIntersection:u>0&&g>0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctUnion:u<=0&&g<=0&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctDifference:(e.PolyTyp===t.PolyType.ptClip&&u>0&&g>0||e.PolyTyp===t.PolyType.ptSubject&&u<=0&&g<=0)&&this.AddLocalMinPoly(e,i,n);break;case t.ClipType.ctXor:this.AddLocalMinPoly(e,i,n)}else t.Clipper.SwapSides(e,i)}}else{if(0===e.WindDelta&&0===i.WindDelta)return;e.PolyTyp===i.PolyTyp&&e.WindDelta!==i.WindDelta&&this.m_ClipType===t.ClipType.ctUnion?0===e.WindDelta?r&&(this.AddOutPt(e,n),s&&(e.OutIdx=-1)):s&&(this.AddOutPt(i,n),r&&(i.OutIdx=-1)):e.PolyTyp!==i.PolyTyp&&(0!==e.WindDelta||1!==Math.abs(i.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==i.WindCnt2?0!==i.WindDelta||1!==Math.abs(e.WindCnt)||this.m_ClipType===t.ClipType.ctUnion&&0!==e.WindCnt2||(this.AddOutPt(i,n),r&&(i.OutIdx=-1)):(this.AddOutPt(e,n),s&&(e.OutIdx=-1)))}},t.Clipper.prototype.DeleteFromSEL=function(e){var t=e.PrevInSEL,i=e.NextInSEL;null===t&&null===i&&e!==this.m_SortedEdges||(null!==t?t.NextInSEL=i:this.m_SortedEdges=i,null!==i&&(i.PrevInSEL=t),e.NextInSEL=null,e.PrevInSEL=null)},t.Clipper.prototype.ProcessHorizontals=function(){for(var e={};this.PopEdgeFromSEL(e);)this.ProcessHorizontal(e.v)},t.Clipper.prototype.GetHorzDirection=function(e,i){e.Bot.X<e.Top.X?(i.Left=e.Bot.X,i.Right=e.Top.X,i.Dir=t.Direction.dLeftToRight):(i.Left=e.Top.X,i.Right=e.Bot.X,i.Dir=t.Direction.dRightToLeft)},t.Clipper.prototype.ProcessHorizontal=function(e){var i={Dir:null,Left:null,Right:null};this.GetHorzDirection(e,i);for(var n=i.Dir,s=i.Left,r=i.Right,o=0===e.WindDelta,a=e,A=null;null!==a.NextInLML&&t.ClipperBase.IsHorizontal(a.NextInLML);)a=a.NextInLML;null===a.NextInLML&&(A=this.GetMaximaPair(a));var l=this.m_Maxima;if(null!==l)if(n===t.Direction.dLeftToRight){for(;null!==l&&l.X<=e.Bot.X;)l=l.Next;null!==l&&l.X>=a.Top.X&&(l=null)}else{for(;null!==l.Next&&l.Next.X<e.Bot.X;)l=l.Next;l.X<=a.Top.X&&(l=null)}for(var c=null;;){for(var h=e===a,p=this.GetNextInAEL(e,n);null!==p;){if(null!==l)if(n===t.Direction.dLeftToRight)for(;null!==l&&l.X<p.Curr.X;)e.OutIdx>=0&&!o&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Next;else for(;null!==l&&l.X>p.Curr.X;)e.OutIdx>=0&&!o&&this.AddOutPt(e,new t.IntPoint2(l.X,e.Bot.Y)),l=l.Prev;if(n===t.Direction.dLeftToRight&&p.Curr.X>r||n===t.Direction.dRightToLeft&&p.Curr.X<s)break;if(p.Curr.X===e.Top.X&&null!==e.NextInLML&&p.Dx<e.NextInLML.Dx)break;if(e.OutIdx>=0&&!o){t.use_xyz&&(n===t.Direction.dLeftToRight?this.SetZ(p.Curr,e,p):this.SetZ(p.Curr,p,e)),c=this.AddOutPt(e,p.Curr);for(var u=this.m_SortedEdges;null!==u;){if(u.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,u.Bot.X,u.Top.X)){var g=this.GetLastOutPt(u);this.AddJoin(g,c,u.Top)}u=u.NextInSEL}this.AddGhostJoin(c,e.Bot)}if(p===A&&h)return e.OutIdx>=0&&this.AddLocalMaxPoly(e,A,e.Top),this.DeleteFromAEL(e),void this.DeleteFromAEL(A);if(n===t.Direction.dLeftToRight){var d=new t.IntPoint2(p.Curr.X,e.Curr.Y);this.IntersectEdges(e,p,d)}else d=new t.IntPoint2(p.Curr.X,e.Curr.Y),this.IntersectEdges(p,e,d);var f=this.GetNextInAEL(p,n);this.SwapPositionsInAEL(e,p),p=f}if(null===e.NextInLML||!t.ClipperBase.IsHorizontal(e.NextInLML))break;(e=this.UpdateEdgeIntoAEL(e)).OutIdx>=0&&this.AddOutPt(e,e.Bot),i={Dir:n,Left:s,Right:r},this.GetHorzDirection(e,i),n=i.Dir,s=i.Left,r=i.Right}if(e.OutIdx>=0&&null===c){for(c=this.GetLastOutPt(e),u=this.m_SortedEdges;null!==u;)u.OutIdx>=0&&this.HorzSegmentsOverlap(e.Bot.X,e.Top.X,u.Bot.X,u.Top.X)&&(g=this.GetLastOutPt(u),this.AddJoin(g,c,u.Top)),u=u.NextInSEL;this.AddGhostJoin(c,e.Top)}if(null!==e.NextInLML)if(e.OutIdx>=0){if(c=this.AddOutPt(e,e.Top),0===(e=this.UpdateEdgeIntoAEL(e)).WindDelta)return;var m=e.PrevInAEL;f=e.NextInAEL,null!==m&&m.Curr.X===e.Bot.X&&m.Curr.Y===e.Bot.Y&&0===m.WindDelta&&m.OutIdx>=0&&m.Curr.Y>m.Top.Y&&t.ClipperBase.SlopesEqual3(e,m,this.m_UseFullRange)?(g=this.AddOutPt(m,e.Bot),this.AddJoin(c,g,e.Top)):null!==f&&f.Curr.X===e.Bot.X&&f.Curr.Y===e.Bot.Y&&0!==f.WindDelta&&f.OutIdx>=0&&f.Curr.Y>f.Top.Y&&t.ClipperBase.SlopesEqual3(e,f,this.m_UseFullRange)&&(g=this.AddOutPt(f,e.Bot),this.AddJoin(c,g,e.Top))}else e=this.UpdateEdgeIntoAEL(e);else e.OutIdx>=0&&this.AddOutPt(e,e.Top),this.DeleteFromAEL(e)},t.Clipper.prototype.GetNextInAEL=function(e,i){return i===t.Direction.dLeftToRight?e.NextInAEL:e.PrevInAEL},t.Clipper.prototype.IsMinima=function(e){return null!==e&&e.Prev.NextInLML!==e&&e.Next.NextInLML!==e},t.Clipper.prototype.IsMaxima=function(e,t){return null!==e&&e.Top.Y===t&&null===e.NextInLML},t.Clipper.prototype.IsIntermediate=function(e,t){return e.Top.Y===t&&null!==e.NextInLML},t.Clipper.prototype.GetMaximaPair=function(e){return t.IntPoint.op_Equality(e.Next.Top,e.Top)&&null===e.Next.NextInLML?e.Next:t.IntPoint.op_Equality(e.Prev.Top,e.Top)&&null===e.Prev.NextInLML?e.Prev:null},t.Clipper.prototype.GetMaximaPairEx=function(e){var i=this.GetMaximaPair(e);return null===i||i.OutIdx===t.ClipperBase.Skip||i.NextInAEL===i.PrevInAEL&&!t.ClipperBase.IsHorizontal(i)?null:i},t.Clipper.prototype.ProcessIntersections=function(e){if(null===this.m_ActiveEdges)return!0;try{if(this.BuildIntersectList(e),0===this.m_IntersectList.length)return!0;if(1!==this.m_IntersectList.length&&!this.FixupIntersectionOrder())return!1;this.ProcessIntersectList()}catch(e){this.m_SortedEdges=null,this.m_IntersectList.length=0,t.Error("ProcessIntersections error")}return this.m_SortedEdges=null,!0},t.Clipper.prototype.BuildIntersectList=function(e){if(null!==this.m_ActiveEdges){var i=this.m_ActiveEdges;for(this.m_SortedEdges=i;null!==i;)i.PrevInSEL=i.PrevInAEL,i.NextInSEL=i.NextInAEL,i.Curr.X=t.Clipper.TopX(i,e),i=i.NextInAEL;for(var n=!0;n&&null!==this.m_SortedEdges;){for(n=!1,i=this.m_SortedEdges;null!==i.NextInSEL;){var s=i.NextInSEL,r=new t.IntPoint0;if(i.Curr.X>s.Curr.X){this.IntersectPoint(i,s,r),r.Y<e&&(r=new t.IntPoint2(t.Clipper.TopX(i,e),e));var o=new t.IntersectNode;o.Edge1=i,o.Edge2=s,o.Pt.X=r.X,o.Pt.Y=r.Y,t.use_xyz&&(o.Pt.Z=r.Z),this.m_IntersectList.push(o),this.SwapPositionsInSEL(i,s),n=!0}else i=s}if(null===i.PrevInSEL)break;i.PrevInSEL.NextInSEL=null}this.m_SortedEdges=null}},t.Clipper.prototype.EdgesAdjacent=function(e){return e.Edge1.NextInSEL===e.Edge2||e.Edge1.PrevInSEL===e.Edge2},t.Clipper.IntersectNodeSort=function(e,t){return t.Pt.Y-e.Pt.Y},t.Clipper.prototype.FixupIntersectionOrder=function(){this.m_IntersectList.sort(this.m_IntersectNodeComparer),this.CopyAELToSEL();for(var e=this.m_IntersectList.length,t=0;t<e;t++){if(!this.EdgesAdjacent(this.m_IntersectList[t])){for(var i=t+1;i<e&&!this.EdgesAdjacent(this.m_IntersectList[i]);)i++;if(i===e)return!1;var n=this.m_IntersectList[t];this.m_IntersectList[t]=this.m_IntersectList[i],this.m_IntersectList[i]=n}this.SwapPositionsInSEL(this.m_IntersectList[t].Edge1,this.m_IntersectList[t].Edge2)}return!0},t.Clipper.prototype.ProcessIntersectList=function(){for(var e=0,t=this.m_IntersectList.length;e<t;e++){var i=this.m_IntersectList[e];this.IntersectEdges(i.Edge1,i.Edge2,i.Pt),this.SwapPositionsInAEL(i.Edge1,i.Edge2)}this.m_IntersectList.length=0},r.msie?t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.round(e)}:r.chromium?t.Clipper.Round=function(e){return e<0?-Math.round(Math.abs(e)):Math.round(e)}:r.safari?t.Clipper.Round=function(e){return e<0?(e-=.5)<-2147483648?Math.ceil(e):0|e:(e+=.5)>2147483647?Math.floor(e):0|e}:t.Clipper.Round=function(e){return e<0?Math.ceil(e-.5):Math.floor(e+.5)},t.Clipper.TopX=function(e,i){return i===e.Top.Y?e.Top.X:e.Bot.X+t.Clipper.Round(e.Dx*(i-e.Bot.Y))},t.Clipper.prototype.IntersectPoint=function(e,i,n){var s,r;if(n.X=0,n.Y=0,e.Dx===i.Dx)return n.Y=e.Curr.Y,void(n.X=t.Clipper.TopX(e,n.Y));if(0===e.Delta.X)n.X=e.Bot.X,t.ClipperBase.IsHorizontal(i)?n.Y=i.Bot.Y:(r=i.Bot.Y-i.Bot.X/i.Dx,n.Y=t.Clipper.Round(n.X/i.Dx+r));else if(0===i.Delta.X)n.X=i.Bot.X,t.ClipperBase.IsHorizontal(e)?n.Y=e.Bot.Y:(s=e.Bot.Y-e.Bot.X/e.Dx,n.Y=t.Clipper.Round(n.X/e.Dx+s));else{s=e.Bot.X-e.Bot.Y*e.Dx;var o=((r=i.Bot.X-i.Bot.Y*i.Dx)-s)/(e.Dx-i.Dx);n.Y=t.Clipper.Round(o),Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.Round(e.Dx*o+s):n.X=t.Clipper.Round(i.Dx*o+r)}if(n.Y<e.Top.Y||n.Y<i.Top.Y){if(e.Top.Y>i.Top.Y)return n.Y=e.Top.Y,n.X=t.Clipper.TopX(i,e.Top.Y),n.X<e.Top.X;n.Y=i.Top.Y,Math.abs(e.Dx)<Math.abs(i.Dx)?n.X=t.Clipper.TopX(e,n.Y):n.X=t.Clipper.TopX(i,n.Y)}n.Y>e.Curr.Y&&(n.Y=e.Curr.Y,Math.abs(e.Dx)>Math.abs(i.Dx)?n.X=t.Clipper.TopX(i,n.Y):n.X=t.Clipper.TopX(e,n.Y))},t.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=function(e){for(var i=this.m_ActiveEdges;null!==i;){var n=this.IsMaxima(i,e);if(n){var s=this.GetMaximaPairEx(i);n=null===s||!t.ClipperBase.IsHorizontal(s)}if(n){this.StrictlySimple&&this.InsertMaxima(i.Top.X);var r=i.PrevInAEL;this.DoMaxima(i),i=null===r?this.m_ActiveEdges:r.NextInAEL}else{if(this.IsIntermediate(i,e)&&t.ClipperBase.IsHorizontal(i.NextInLML)?((i=this.UpdateEdgeIntoAEL(i)).OutIdx>=0&&this.AddOutPt(i,i.Bot),this.AddEdgeToSEL(i)):(i.Curr.X=t.Clipper.TopX(i,e),i.Curr.Y=e),t.use_xyz&&(i.Top.Y===e?i.Curr.Z=i.Top.Z:i.Bot.Y===e?i.Curr.Z=i.Bot.Z:i.Curr.Z=0),this.StrictlySimple&&(r=i.PrevInAEL,i.OutIdx>=0&&0!==i.WindDelta&&null!==r&&r.OutIdx>=0&&r.Curr.X===i.Curr.X&&0!==r.WindDelta)){var o=new t.IntPoint1(i.Curr);t.use_xyz&&this.SetZ(o,r,i);var a=this.AddOutPt(r,o),A=this.AddOutPt(i,o);this.AddJoin(a,A,o)}i=i.NextInAEL}}for(this.ProcessHorizontals(),this.m_Maxima=null,i=this.m_ActiveEdges;null!==i;){if(this.IsIntermediate(i,e)){a=null,i.OutIdx>=0&&(a=this.AddOutPt(i,i.Top)),r=(i=this.UpdateEdgeIntoAEL(i)).PrevInAEL;var l=i.NextInAEL;null!==r&&r.Curr.X===i.Bot.X&&r.Curr.Y===i.Bot.Y&&null!==a&&r.OutIdx>=0&&r.Curr.Y===r.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,r.Curr,r.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==r.WindDelta?(A=this.AddOutPt(ePrev2,i.Bot),this.AddJoin(a,A,i.Top)):null!==l&&l.Curr.X===i.Bot.X&&l.Curr.Y===i.Bot.Y&&null!==a&&l.OutIdx>=0&&l.Curr.Y===l.Top.Y&&t.ClipperBase.SlopesEqual5(i.Curr,i.Top,l.Curr,l.Top,this.m_UseFullRange)&&0!==i.WindDelta&&0!==l.WindDelta&&(A=this.AddOutPt(l,i.Bot),this.AddJoin(a,A,i.Top))}i=i.NextInAEL}},t.Clipper.prototype.DoMaxima=function(e){var i=this.GetMaximaPairEx(e);if(null===i)return e.OutIdx>=0&&this.AddOutPt(e,e.Top),void this.DeleteFromAEL(e);for(var n=e.NextInAEL;null!==n&&n!==i;)this.IntersectEdges(e,n,e.Top),this.SwapPositionsInAEL(e,n),n=e.NextInAEL;-1===e.OutIdx&&-1===i.OutIdx?(this.DeleteFromAEL(e),this.DeleteFromAEL(i)):e.OutIdx>=0&&i.OutIdx>=0?(e.OutIdx>=0&&this.AddLocalMaxPoly(e,i,e.Top),this.DeleteFromAEL(e),this.DeleteFromAEL(i)):t.use_lines&&0===e.WindDelta?(e.OutIdx>=0&&(this.AddOutPt(e,e.Top),e.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(e),i.OutIdx>=0&&(this.AddOutPt(i,e.Top),i.OutIdx=t.ClipperBase.Unassigned),this.DeleteFromAEL(i)):t.Error("DoMaxima error")},t.Clipper.ReversePaths=function(e){for(var t=0,i=e.length;t<i;t++)e[t].reverse()},t.Clipper.Orientation=function(e){return t.Clipper.Area(e)>=0},t.Clipper.prototype.PointCount=function(e){if(null===e)return 0;var t=0,i=e;do{t++,i=i.Next}while(i!==e);return t},t.Clipper.prototype.BuildResult=function(e){t.Clear(e);for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var s=this.m_PolyOuts[i];if(null!==s.Pts){var r=s.Pts.Prev,o=this.PointCount(r);if(!(o<2)){for(var a=new Array(o),A=0;A<o;A++)a[A]=r.Pt,r=r.Prev;e.push(a)}}}},t.Clipper.prototype.BuildResult2=function(e){e.Clear();for(var i=0,n=this.m_PolyOuts.length;i<n;i++){var s=this.m_PolyOuts[i],r=this.PointCount(s.Pts);if(!(s.IsOpen&&r<2||!s.IsOpen&&r<3)){this.FixHoleLinkage(s);var o=new t.PolyNode;e.m_AllPolys.push(o),s.PolyNode=o,o.m_polygon.length=r;for(var a=s.Pts.Prev,A=0;A<r;A++)o.m_polygon[A]=a.Pt,a=a.Prev}}for(i=0,n=this.m_PolyOuts.length;i<n;i++)null!==(s=this.m_PolyOuts[i]).PolyNode&&(s.IsOpen?(s.PolyNode.IsOpen=!0,e.AddChild(s.PolyNode)):null!==s.FirstLeft&&null!==s.FirstLeft.PolyNode?s.FirstLeft.PolyNode.AddChild(s.PolyNode):e.AddChild(s.PolyNode))},t.Clipper.prototype.FixupOutPolyline=function(e){for(var i=e.Pts,n=i.Prev;i!==n;)if(i=i.Next,t.IntPoint.op_Equality(i.Pt,i.Prev.Pt)){i===n&&(n=i.Prev);var s=i.Prev;s.Next=i.Next,i.Next.Prev=s,i=s}i===i.Prev&&(e.Pts=null)},t.Clipper.prototype.FixupOutPolygon=function(e){var i=null;e.BottomPt=null;for(var n=e.Pts,s=this.PreserveCollinear||this.StrictlySimple;;){if(n.Prev===n||n.Prev===n.Next)return void(e.Pts=null);if(t.IntPoint.op_Equality(n.Pt,n.Next.Pt)||t.IntPoint.op_Equality(n.Pt,n.Prev.Pt)||t.ClipperBase.SlopesEqual4(n.Prev.Pt,n.Pt,n.Next.Pt,this.m_UseFullRange)&&(!s||!this.Pt2IsBetweenPt1AndPt3(n.Prev.Pt,n.Pt,n.Next.Pt)))i=null,n.Prev.Next=n.Next,n.Next.Prev=n.Prev,n=n.Prev;else{if(n===i)break;null===i&&(i=n),n=n.Next}}e.Pts=n},t.Clipper.prototype.DupOutPt=function(e,i){var n=new t.OutPt;return n.Pt.X=e.Pt.X,n.Pt.Y=e.Pt.Y,t.use_xyz&&(n.Pt.Z=e.Pt.Z),n.Idx=e.Idx,i?(n.Next=e.Next,n.Prev=e,e.Next.Prev=n,e.Next=n):(n.Prev=e.Prev,n.Next=e,e.Prev.Next=n,e.Prev=n),n},t.Clipper.prototype.GetOverlap=function(e,t,i,n,s){return e<t?i<n?(s.Left=Math.max(e,i),s.Right=Math.min(t,n)):(s.Left=Math.max(e,n),s.Right=Math.min(t,i)):i<n?(s.Left=Math.max(t,i),s.Right=Math.min(e,n)):(s.Left=Math.max(t,n),s.Right=Math.min(e,i)),s.Left<s.Right},t.Clipper.prototype.JoinHorz=function(e,i,n,s,r,o){var a=e.Pt.X>i.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight,A=n.Pt.X>s.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight;if(a===A)return!1;if(a===t.Direction.dLeftToRight){for(;e.Next.Pt.X<=r.X&&e.Next.Pt.X>=e.Pt.X&&e.Next.Pt.Y===r.Y;)e=e.Next;o&&e.Pt.X!==r.X&&(e=e.Next),i=this.DupOutPt(e,!o),t.IntPoint.op_Inequality(i.Pt,r)&&((e=i).Pt.X=r.X,e.Pt.Y=r.Y,t.use_xyz&&(e.Pt.Z=r.Z),i=this.DupOutPt(e,!o))}else{for(;e.Next.Pt.X>=r.X&&e.Next.Pt.X<=e.Pt.X&&e.Next.Pt.Y===r.Y;)e=e.Next;o||e.Pt.X===r.X||(e=e.Next),i=this.DupOutPt(e,o),t.IntPoint.op_Inequality(i.Pt,r)&&((e=i).Pt.X=r.X,e.Pt.Y=r.Y,t.use_xyz&&(e.Pt.Z=r.Z),i=this.DupOutPt(e,o))}if(A===t.Direction.dLeftToRight){for(;n.Next.Pt.X<=r.X&&n.Next.Pt.X>=n.Pt.X&&n.Next.Pt.Y===r.Y;)n=n.Next;o&&n.Pt.X!==r.X&&(n=n.Next),s=this.DupOutPt(n,!o),t.IntPoint.op_Inequality(s.Pt,r)&&((n=s).Pt.X=r.X,n.Pt.Y=r.Y,t.use_xyz&&(n.Pt.Z=r.Z),s=this.DupOutPt(n,!o))}else{for(;n.Next.Pt.X>=r.X&&n.Next.Pt.X<=n.Pt.X&&n.Next.Pt.Y===r.Y;)n=n.Next;o||n.Pt.X===r.X||(n=n.Next),s=this.DupOutPt(n,o),t.IntPoint.op_Inequality(s.Pt,r)&&((n=s).Pt.X=r.X,n.Pt.Y=r.Y,t.use_xyz&&(n.Pt.Z=r.Z),s=this.DupOutPt(n,o))}return a===t.Direction.dLeftToRight===o?(e.Prev=n,n.Next=e,i.Next=s,s.Prev=i):(e.Next=n,n.Prev=e,i.Prev=s,s.Next=i),!0},t.Clipper.prototype.JoinPoints=function(e,i,n){var s=e.OutPt1,r=new t.OutPt,o=e.OutPt2,a=new t.OutPt,A=e.OutPt1.Pt.Y===e.OffPt.Y;if(A&&t.IntPoint.op_Equality(e.OffPt,e.OutPt1.Pt)&&t.IntPoint.op_Equality(e.OffPt,e.OutPt2.Pt)){if(i!==n)return!1;for(r=e.OutPt1.Next;r!==s&&t.IntPoint.op_Equality(r.Pt,e.OffPt);)r=r.Next;var l=r.Pt.Y>e.OffPt.Y;for(a=e.OutPt2.Next;a!==o&&t.IntPoint.op_Equality(a.Pt,e.OffPt);)a=a.Next;return l!==a.Pt.Y>e.OffPt.Y&&(l?(r=this.DupOutPt(s,!1),a=this.DupOutPt(o,!0),s.Prev=o,o.Next=s,r.Next=a,a.Prev=r,e.OutPt1=s,e.OutPt2=r,!0):(r=this.DupOutPt(s,!0),a=this.DupOutPt(o,!1),s.Next=o,o.Prev=s,r.Prev=a,a.Next=r,e.OutPt1=s,e.OutPt2=r,!0))}if(A){for(r=s;s.Prev.Pt.Y===s.Pt.Y&&s.Prev!==r&&s.Prev!==o;)s=s.Prev;for(;r.Next.Pt.Y===r.Pt.Y&&r.Next!==s&&r.Next!==o;)r=r.Next;if(r.Next===s||r.Next===o)return!1;for(a=o;o.Prev.Pt.Y===o.Pt.Y&&o.Prev!==a&&o.Prev!==r;)o=o.Prev;for(;a.Next.Pt.Y===a.Pt.Y&&a.Next!==o&&a.Next!==s;)a=a.Next;if(a.Next===o||a.Next===s)return!1;var c={Left:null,Right:null};if(!this.GetOverlap(s.Pt.X,r.Pt.X,o.Pt.X,a.Pt.X,c))return!1;var h,p=c.Left,u=c.Right,g=new t.IntPoint0;return s.Pt.X>=p&&s.Pt.X<=u?(g.X=s.Pt.X,g.Y=s.Pt.Y,t.use_xyz&&(g.Z=s.Pt.Z),h=s.Pt.X>r.Pt.X):o.Pt.X>=p&&o.Pt.X<=u?(g.X=o.Pt.X,g.Y=o.Pt.Y,t.use_xyz&&(g.Z=o.Pt.Z),h=o.Pt.X>a.Pt.X):r.Pt.X>=p&&r.Pt.X<=u?(g.X=r.Pt.X,g.Y=r.Pt.Y,t.use_xyz&&(g.Z=r.Pt.Z),h=r.Pt.X>s.Pt.X):(g.X=a.Pt.X,g.Y=a.Pt.Y,t.use_xyz&&(g.Z=a.Pt.Z),h=a.Pt.X>o.Pt.X),e.OutPt1=s,e.OutPt2=o,this.JoinHorz(s,r,o,a,g,h)}for(r=s.Next;t.IntPoint.op_Equality(r.Pt,s.Pt)&&r!==s;)r=r.Next;var d=r.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,r.Pt,e.OffPt,this.m_UseFullRange);if(d){for(r=s.Prev;t.IntPoint.op_Equality(r.Pt,s.Pt)&&r!==s;)r=r.Prev;if(r.Pt.Y>s.Pt.Y||!t.ClipperBase.SlopesEqual4(s.Pt,r.Pt,e.OffPt,this.m_UseFullRange))return!1}for(a=o.Next;t.IntPoint.op_Equality(a.Pt,o.Pt)&&a!==o;)a=a.Next;var f=a.Pt.Y>o.Pt.Y||!t.ClipperBase.SlopesEqual4(o.Pt,a.Pt,e.OffPt,this.m_UseFullRange);if(f){for(a=o.Prev;t.IntPoint.op_Equality(a.Pt,o.Pt)&&a!==o;)a=a.Prev;if(a.Pt.Y>o.Pt.Y||!t.ClipperBase.SlopesEqual4(o.Pt,a.Pt,e.OffPt,this.m_UseFullRange))return!1}return!(r===s||a===o||r===a||i===n&&d===f||(d?(r=this.DupOutPt(s,!1),a=this.DupOutPt(o,!0),s.Prev=o,o.Next=s,r.Next=a,a.Prev=r,e.OutPt1=s,e.OutPt2=r,0):(r=this.DupOutPt(s,!0),a=this.DupOutPt(o,!1),s.Next=o,o.Prev=s,r.Prev=a,a.Next=r,e.OutPt1=s,e.OutPt2=r,0)))},t.Clipper.GetBounds=function(e){for(var i=0,n=e.length;i<n&&0===e[i].length;)i++;if(i===n)return new t.IntRect(0,0,0,0);var s=new t.IntRect;for(s.left=e[i][0].X,s.right=s.left,s.top=e[i][0].Y,s.bottom=s.top;i<n;i++)for(var r=0,o=e[i].length;r<o;r++)e[i][r].X<s.left?s.left=e[i][r].X:e[i][r].X>s.right&&(s.right=e[i][r].X),e[i][r].Y<s.top?s.top=e[i][r].Y:e[i][r].Y>s.bottom&&(s.bottom=e[i][r].Y);return s},t.Clipper.prototype.GetBounds2=function(e){var i=e,n=new t.IntRect;for(n.left=e.Pt.X,n.right=e.Pt.X,n.top=e.Pt.Y,n.bottom=e.Pt.Y,e=e.Next;e!==i;)e.Pt.X<n.left&&(n.left=e.Pt.X),e.Pt.X>n.right&&(n.right=e.Pt.X),e.Pt.Y<n.top&&(n.top=e.Pt.Y),e.Pt.Y>n.bottom&&(n.bottom=e.Pt.Y),e=e.Next;return n},t.Clipper.PointInPolygon=function(e,t){var i=0,n=t.length;if(n<3)return 0;for(var s=t[0],r=1;r<=n;++r){var o=r===n?t[0]:t[r];if(o.Y===e.Y&&(o.X===e.X||s.Y===e.Y&&o.X>e.X==s.X<e.X))return-1;if(s.Y<e.Y!=o.Y<e.Y)if(s.X>=e.X)if(o.X>e.X)i=1-i;else{if(0==(a=(s.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(s.Y-e.Y)))return-1;a>0==o.Y>s.Y&&(i=1-i)}else if(o.X>e.X){var a;if(0==(a=(s.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(s.Y-e.Y)))return-1;a>0==o.Y>s.Y&&(i=1-i)}s=o}return i},t.Clipper.prototype.PointInPolygon=function(e,t){var i=0,n=t,s=e.X,r=e.Y,o=t.Pt.X,a=t.Pt.Y;do{var A=(t=t.Next).Pt.X,l=t.Pt.Y;if(l===r&&(A===s||a===r&&A>s==o<s))return-1;if(a<r!=l<r)if(o>=s)if(A>s)i=1-i;else{if(0==(c=(o-s)*(l-r)-(A-s)*(a-r)))return-1;c>0==l>a&&(i=1-i)}else if(A>s){var c;if(0==(c=(o-s)*(l-r)-(A-s)*(a-r)))return-1;c>0==l>a&&(i=1-i)}o=A,a=l}while(n!==t);return i},t.Clipper.prototype.Poly2ContainsPoly1=function(e,t){var i=e;do{var n=this.PointInPolygon(i.Pt,t);if(n>=0)return n>0;i=i.Next}while(i!==e);return!0},t.Clipper.prototype.FixupFirstLefts1=function(e,i){for(var n,s,r=0,o=this.m_PolyOuts.length;r<o;r++)n=this.m_PolyOuts[r],s=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&s===e&&this.Poly2ContainsPoly1(n.Pts,i.Pts)&&(n.FirstLeft=i)},t.Clipper.prototype.FixupFirstLefts2=function(e,i){for(var n,s,r=i.FirstLeft,o=0,a=this.m_PolyOuts.length;o<a;o++)null!==(n=this.m_PolyOuts[o]).Pts&&n!==i&&n!==e&&((s=t.Clipper.ParseFirstLeft(n.FirstLeft))!==r&&s!==e&&s!==i||(this.Poly2ContainsPoly1(n.Pts,e.Pts)?n.FirstLeft=e:this.Poly2ContainsPoly1(n.Pts,i.Pts)?n.FirstLeft=i:n.FirstLeft!==e&&n.FirstLeft!==i||(n.FirstLeft=r)))},t.Clipper.prototype.FixupFirstLefts3=function(e,i){for(var n,s,r=0,o=this.m_PolyOuts.length;r<o;r++)n=this.m_PolyOuts[r],s=t.Clipper.ParseFirstLeft(n.FirstLeft),null!==n.Pts&&s===e&&(n.FirstLeft=i)},t.Clipper.ParseFirstLeft=function(e){for(;null!==e&&null===e.Pts;)e=e.FirstLeft;return e},t.Clipper.prototype.JoinCommonEdges=function(){for(var e=0,t=this.m_Joins.length;e<t;e++){var i,n=this.m_Joins[e],s=this.GetOutRec(n.OutPt1.Idx),r=this.GetOutRec(n.OutPt2.Idx);null!==s.Pts&&null!==r.Pts&&(s.IsOpen||r.IsOpen||(i=s===r?s:this.OutRec1RightOfOutRec2(s,r)?r:this.OutRec1RightOfOutRec2(r,s)?s:this.GetLowermostRec(s,r),this.JoinPoints(n,s,r)&&(s===r?(s.Pts=n.OutPt1,s.BottomPt=null,(r=this.CreateOutRec()).Pts=n.OutPt2,this.UpdateOutPtIdxs(r),this.Poly2ContainsPoly1(r.Pts,s.Pts)?(r.IsHole=!s.IsHole,r.FirstLeft=s,this.m_UsingPolyTree&&this.FixupFirstLefts2(r,s),(r.IsHole^this.ReverseSolution)==this.Area$1(r)>0&&this.ReversePolyPtLinks(r.Pts)):this.Poly2ContainsPoly1(s.Pts,r.Pts)?(r.IsHole=s.IsHole,s.IsHole=!r.IsHole,r.FirstLeft=s.FirstLeft,s.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts2(s,r),(s.IsHole^this.ReverseSolution)==this.Area$1(s)>0&&this.ReversePolyPtLinks(s.Pts)):(r.IsHole=s.IsHole,r.FirstLeft=s.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(s,r))):(r.Pts=null,r.BottomPt=null,r.Idx=s.Idx,s.IsHole=i.IsHole,i===r&&(s.FirstLeft=r.FirstLeft),r.FirstLeft=s,this.m_UsingPolyTree&&this.FixupFirstLefts3(r,s)))))}},t.Clipper.prototype.UpdateOutPtIdxs=function(e){var t=e.Pts;do{t.Idx=e.Idx,t=t.Prev}while(t!==e.Pts)},t.Clipper.prototype.DoSimplePolygons=function(){for(var e=0;e<this.m_PolyOuts.length;){var i=this.m_PolyOuts[e++],n=i.Pts;if(null!==n&&!i.IsOpen)do{for(var s=n.Next;s!==i.Pts;){if(t.IntPoint.op_Equality(n.Pt,s.Pt)&&s.Next!==n&&s.Prev!==n){var r=n.Prev,o=s.Prev;n.Prev=o,o.Next=n,s.Prev=r,r.Next=s,i.Pts=n;var a=this.CreateOutRec();a.Pts=s,this.UpdateOutPtIdxs(a),this.Poly2ContainsPoly1(a.Pts,i.Pts)?(a.IsHole=!i.IsHole,a.FirstLeft=i,this.m_UsingPolyTree&&this.FixupFirstLefts2(a,i)):this.Poly2ContainsPoly1(i.Pts,a.Pts)?(a.IsHole=i.IsHole,i.IsHole=!a.IsHole,a.FirstLeft=i.FirstLeft,i.FirstLeft=a,this.m_UsingPolyTree&&this.FixupFirstLefts2(i,a)):(a.IsHole=i.IsHole,a.FirstLeft=i.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(i,a)),s=n}s=s.Next}n=n.Next}while(n!==i.Pts)}},t.Clipper.Area=function(e){if(!Array.isArray(e))return 0;var t=e.length;if(t<3)return 0;for(var i=0,n=0,s=t-1;n<t;++n)i+=(e[s].X+e[n].X)*(e[s].Y-e[n].Y),s=n;return.5*-i},t.Clipper.prototype.Area=function(e){var t=e;if(null===e)return 0;var i=0;do{i+=(e.Prev.Pt.X+e.Pt.X)*(e.Prev.Pt.Y-e.Pt.Y),e=e.Next}while(e!==t);return.5*i},t.Clipper.prototype.Area$1=function(e){return this.Area(e.Pts)},t.Clipper.SimplifyPolygon=function(e,i){var n=new Array,s=new t.Clipper(0);return s.StrictlySimple=!0,s.AddPath(e,t.PolyType.ptSubject,!0),s.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.SimplifyPolygons=function(e,i){void 0===i&&(i=t.PolyFillType.pftEvenOdd);var n=new Array,s=new t.Clipper(0);return s.StrictlySimple=!0,s.AddPaths(e,t.PolyType.ptSubject,!0),s.Execute(t.ClipType.ctUnion,n,i,i),n},t.Clipper.DistanceSqrd=function(e,t){var i=e.X-t.X,n=e.Y-t.Y;return i*i+n*n},t.Clipper.DistanceFromLineSqrd=function(e,t,i){var n=t.Y-i.Y,s=i.X-t.X,r=n*t.X+s*t.Y;return(r=n*e.X+s*e.Y-r)*r/(n*n+s*s)},t.Clipper.SlopesNearCollinear=function(e,i,n,s){return Math.abs(e.X-i.X)>Math.abs(e.Y-i.Y)?e.X>i.X==e.X<n.X?t.Clipper.DistanceFromLineSqrd(e,i,n)<s:i.X>e.X==i.X<n.X?t.Clipper.DistanceFromLineSqrd(i,e,n)<s:t.Clipper.DistanceFromLineSqrd(n,e,i)<s:e.Y>i.Y==e.Y<n.Y?t.Clipper.DistanceFromLineSqrd(e,i,n)<s:i.Y>e.Y==i.Y<n.Y?t.Clipper.DistanceFromLineSqrd(i,e,n)<s:t.Clipper.DistanceFromLineSqrd(n,e,i)<s},t.Clipper.PointsAreClose=function(e,t,i){var n=e.X-t.X,s=e.Y-t.Y;return n*n+s*s<=i},t.Clipper.ExcludeOp=function(e){var t=e.Prev;return t.Next=e.Next,e.Next.Prev=t,t.Idx=0,t},t.Clipper.CleanPolygon=function(e,i){void 0===i&&(i=1.415);var n=e.length;if(0===n)return new Array;for(var s=new Array(n),r=0;r<n;++r)s[r]=new t.OutPt;for(r=0;r<n;++r)s[r].Pt=e[r],s[r].Next=s[(r+1)%n],s[r].Next.Prev=s[r],s[r].Idx=0;for(var o=i*i,a=s[0];0===a.Idx&&a.Next!==a.Prev;)t.Clipper.PointsAreClose(a.Pt,a.Prev.Pt,o)?(a=t.Clipper.ExcludeOp(a),n--):t.Clipper.PointsAreClose(a.Prev.Pt,a.Next.Pt,o)?(t.Clipper.ExcludeOp(a.Next),a=t.Clipper.ExcludeOp(a),n-=2):t.Clipper.SlopesNearCollinear(a.Prev.Pt,a.Pt,a.Next.Pt,o)?(a=t.Clipper.ExcludeOp(a),n--):(a.Idx=1,a=a.Next);n<3&&(n=0);var A=new Array(n);for(r=0;r<n;++r)A[r]=new t.IntPoint1(a.Pt),a=a.Next;return s=null,A},t.Clipper.CleanPolygons=function(e,i){for(var n=new Array(e.length),s=0,r=e.length;s<r;s++)n[s]=t.Clipper.CleanPolygon(e[s],i);return n},t.Clipper.Minkowski=function(e,i,n,s){var r=s?1:0,o=e.length,a=i.length,A=new Array;if(n)for(var l=0;l<a;l++){for(var c=new Array(o),h=0,p=e.length,u=e[h];h<p;u=e[++h])c[h]=new t.IntPoint2(i[l].X+u.X,i[l].Y+u.Y);A.push(c)}else for(l=0;l<a;l++){for(c=new Array(o),h=0,p=e.length,u=e[h];h<p;u=e[++h])c[h]=new t.IntPoint2(i[l].X-u.X,i[l].Y-u.Y);A.push(c)}var g=new Array;for(l=0;l<a-1+r;l++)for(h=0;h<o;h++){var d=new Array;d.push(A[l%a][h%o]),d.push(A[(l+1)%a][h%o]),d.push(A[(l+1)%a][(h+1)%o]),d.push(A[l%a][(h+1)%o]),t.Clipper.Orientation(d)||d.reverse(),g.push(d)}return g},t.Clipper.MinkowskiSum=function(e,i,n){if(i[0]instanceof Array){l=i;for(var s=new t.Paths,r=(a=new t.Clipper,0);r<l.length;++r){var o=t.Clipper.Minkowski(e,l[r],!0,n);a.AddPaths(o,t.PolyType.ptSubject,!0),n&&(A=t.Clipper.TranslatePath(l[r],e[0]),a.AddPath(A,t.PolyType.ptClip,!0))}return a.Execute(t.ClipType.ctUnion,s,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),s}var a,A=i,l=t.Clipper.Minkowski(e,A,!0,n);return(a=new t.Clipper).AddPaths(l,t.PolyType.ptSubject,!0),a.Execute(t.ClipType.ctUnion,l,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),l},t.Clipper.TranslatePath=function(e,i){for(var n=new t.Path,s=0;s<e.length;s++)n.push(new t.IntPoint2(e[s].X+i.X,e[s].Y+i.Y));return n},t.Clipper.MinkowskiDiff=function(e,i){var n=t.Clipper.Minkowski(e,i,!1,!0),s=new t.Clipper;return s.AddPaths(n,t.PolyType.ptSubject,!0),s.Execute(t.ClipType.ctUnion,n,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),n},t.Clipper.PolyTreeToPaths=function(e){var i=new Array;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntAny,i),i},t.Clipper.AddPolyNodeToPaths=function(e,i,n){var s=!0;switch(i){case t.Clipper.NodeType.ntOpen:return;case t.Clipper.NodeType.ntClosed:s=!e.IsOpen}e.m_polygon.length>0&&s&&n.push(e.m_polygon);for(var r=0,o=e.Childs(),a=o.length,A=o[r];r<a;A=o[++r])t.Clipper.AddPolyNodeToPaths(A,i,n)},t.Clipper.OpenPathsFromPolyTree=function(e){for(var i=new t.Paths,n=0,s=e.ChildCount();n<s;n++)e.Childs()[n].IsOpen&&i.push(e.Childs()[n].m_polygon);return i},t.Clipper.ClosedPathsFromPolyTree=function(e){var i=new t.Paths;return t.Clipper.AddPolyNodeToPaths(e,t.Clipper.NodeType.ntClosed,i),i},Inherit(t.Clipper,t.ClipperBase),t.Clipper.NodeType={ntAny:0,ntOpen:1,ntClosed:2},t.ClipperOffset=function(e,i){void 0===e&&(e=2),void 0===i&&(i=t.ClipperOffset.def_arc_tolerance),this.m_destPolys=new t.Paths,this.m_srcPoly=new t.Path,this.m_destPoly=new t.Path,this.m_normals=new Array,this.m_delta=0,this.m_sinA=0,this.m_sin=0,this.m_cos=0,this.m_miterLim=0,this.m_StepsPerRad=0,this.m_lowest=new t.IntPoint0,this.m_polyNodes=new t.PolyNode,this.MiterLimit=e,this.ArcTolerance=i,this.m_lowest.X=-1},t.ClipperOffset.two_pi=6.28318530717959,t.ClipperOffset.def_arc_tolerance=.25,t.ClipperOffset.prototype.Clear=function(){t.Clear(this.m_polyNodes.Childs()),this.m_lowest.X=-1},t.ClipperOffset.Round=t.Clipper.Round,t.ClipperOffset.prototype.AddPath=function(e,i,n){var s=e.length-1;if(!(s<0)){var r=new t.PolyNode;if(r.m_jointype=i,r.m_endtype=n,n===t.EndType.etClosedLine||n===t.EndType.etClosedPolygon)for(;s>0&&t.IntPoint.op_Equality(e[0],e[s]);)s--;r.m_polygon.push(e[0]);for(var o=0,a=0,A=1;A<=s;A++)t.IntPoint.op_Inequality(r.m_polygon[o],e[A])&&(o++,r.m_polygon.push(e[A]),(e[A].Y>r.m_polygon[a].Y||e[A].Y===r.m_polygon[a].Y&&e[A].X<r.m_polygon[a].X)&&(a=o));if(!(n===t.EndType.etClosedPolygon&&o<2)&&(this.m_polyNodes.AddChild(r),n===t.EndType.etClosedPolygon))if(this.m_lowest.X<0)this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,a);else{var l=this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon[this.m_lowest.Y];(r.m_polygon[a].Y>l.Y||r.m_polygon[a].Y===l.Y&&r.m_polygon[a].X<l.X)&&(this.m_lowest=new t.IntPoint2(this.m_polyNodes.ChildCount()-1,a))}}},t.ClipperOffset.prototype.AddPaths=function(e,t,i){for(var n=0,s=e.length;n<s;n++)this.AddPath(e[n],t,i)},t.ClipperOffset.prototype.FixOrientations=function(){if(this.m_lowest.X>=0&&!t.Clipper.Orientation(this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon))for(var e=0;e<this.m_polyNodes.ChildCount();e++)((i=this.m_polyNodes.Childs()[e]).m_endtype===t.EndType.etClosedPolygon||i.m_endtype===t.EndType.etClosedLine&&t.Clipper.Orientation(i.m_polygon))&&i.m_polygon.reverse();else for(e=0;e<this.m_polyNodes.ChildCount();e++){var i;(i=this.m_polyNodes.Childs()[e]).m_endtype!==t.EndType.etClosedLine||t.Clipper.Orientation(i.m_polygon)||i.m_polygon.reverse()}},t.ClipperOffset.GetUnitNormal=function(e,i){var n=i.X-e.X,s=i.Y-e.Y;if(0===n&&0===s)return new t.DoublePoint2(0,0);var r=1/Math.sqrt(n*n+s*s);return n*=r,s*=r,new t.DoublePoint2(s,-n)},t.ClipperOffset.prototype.DoOffset=function(e){if(this.m_destPolys=new Array,this.m_delta=e,t.ClipperBase.near_zero(e))for(var i=0;i<this.m_polyNodes.ChildCount();i++)(r=this.m_polyNodes.Childs()[i]).m_endtype===t.EndType.etClosedPolygon&&this.m_destPolys.push(r.m_polygon);else{var n;this.MiterLimit>2?this.m_miterLim=2/(this.MiterLimit*this.MiterLimit):this.m_miterLim=.5,n=this.ArcTolerance<=0?t.ClipperOffset.def_arc_tolerance:this.ArcTolerance>Math.abs(e)*t.ClipperOffset.def_arc_tolerance?Math.abs(e)*t.ClipperOffset.def_arc_tolerance:this.ArcTolerance;var s=3.14159265358979/Math.acos(1-n/Math.abs(e));for(this.m_sin=Math.sin(t.ClipperOffset.two_pi/s),this.m_cos=Math.cos(t.ClipperOffset.two_pi/s),this.m_StepsPerRad=s/t.ClipperOffset.two_pi,e<0&&(this.m_sin=-this.m_sin),i=0;i<this.m_polyNodes.ChildCount();i++){var r=this.m_polyNodes.Childs()[i];this.m_srcPoly=r.m_polygon;var o=this.m_srcPoly.length;if(!(0===o||e<=0&&(o<3||r.m_endtype!==t.EndType.etClosedPolygon)))if(this.m_destPoly=new Array,1!==o){for(this.m_normals.length=0,p=0;p<o-1;p++)this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[p],this.m_srcPoly[p+1]));if(r.m_endtype===t.EndType.etClosedLine||r.m_endtype===t.EndType.etClosedPolygon?this.m_normals.push(t.ClipperOffset.GetUnitNormal(this.m_srcPoly[o-1],this.m_srcPoly[0])):this.m_normals.push(new t.DoublePoint1(this.m_normals[o-2])),r.m_endtype===t.EndType.etClosedPolygon){var a=o-1;for(p=0;p<o;p++)a=this.OffsetPoint(p,a,r.m_jointype);this.m_destPolys.push(this.m_destPoly)}else if(r.m_endtype===t.EndType.etClosedLine){for(a=o-1,p=0;p<o;p++)a=this.OffsetPoint(p,a,r.m_jointype);this.m_destPolys.push(this.m_destPoly),this.m_destPoly=new Array;var A=this.m_normals[o-1];for(p=o-1;p>0;p--)this.m_normals[p]=new t.DoublePoint2(-this.m_normals[p-1].X,-this.m_normals[p-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-A.X,-A.Y),a=0,p=o-1;p>=0;p--)a=this.OffsetPoint(p,a,r.m_jointype);this.m_destPolys.push(this.m_destPoly)}else{var l;for(a=0,p=1;p<o-1;++p)a=this.OffsetPoint(p,a,r.m_jointype);for(r.m_endtype===t.EndType.etOpenButt?(p=o-1,l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[p].X+this.m_normals[p].X*e),t.ClipperOffset.Round(this.m_srcPoly[p].Y+this.m_normals[p].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[p].X-this.m_normals[p].X*e),t.ClipperOffset.Round(this.m_srcPoly[p].Y-this.m_normals[p].Y*e)),this.m_destPoly.push(l)):(p=o-1,a=o-2,this.m_sinA=0,this.m_normals[p]=new t.DoublePoint2(-this.m_normals[p].X,-this.m_normals[p].Y),r.m_endtype===t.EndType.etOpenSquare?this.DoSquare(p,a):this.DoRound(p,a)),p=o-1;p>0;p--)this.m_normals[p]=new t.DoublePoint2(-this.m_normals[p-1].X,-this.m_normals[p-1].Y);for(this.m_normals[0]=new t.DoublePoint2(-this.m_normals[1].X,-this.m_normals[1].Y),p=(a=o-1)-1;p>0;--p)a=this.OffsetPoint(p,a,r.m_jointype);r.m_endtype===t.EndType.etOpenButt?(l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X-this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y-this.m_normals[0].Y*e)),this.m_destPoly.push(l),l=new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+this.m_normals[0].X*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+this.m_normals[0].Y*e)),this.m_destPoly.push(l)):(a=1,this.m_sinA=0,r.m_endtype===t.EndType.etOpenSquare?this.DoSquare(0,1):this.DoRound(0,1)),this.m_destPolys.push(this.m_destPoly)}}else{if(r.m_jointype===t.JoinType.jtRound)for(var c=1,h=0,p=1;p<=s;p++){this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+h*e)));var u=c;c=c*this.m_cos-this.m_sin*h,h=u*this.m_sin+h*this.m_cos}else{c=-1,h=-1;for(var p=0;p<4;++p)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[0].X+c*e),t.ClipperOffset.Round(this.m_srcPoly[0].Y+h*e))),c<0?c=1:h<0?h=1:c=-1}this.m_destPolys.push(this.m_destPoly)}}}},t.ClipperOffset.prototype.Execute=function(){var e=arguments;if(e[0]instanceof t.PolyTree)if(o=e[1],(r=e[0]).Clear(),this.FixOrientations(),this.DoOffset(o),(s=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else if(A=t.Clipper.GetBounds(this.m_destPolys),(a=new t.Path).push(new t.IntPoint2(A.left-10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.top-10)),a.push(new t.IntPoint2(A.left-10,A.top-10)),s.AddPath(a,t.PolyType.ptSubject,!0),s.ReverseSolution=!0,s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),1===r.ChildCount()&&r.Childs()[0].ChildCount()>0){var i=r.Childs()[0];r.Childs()[0]=i.Childs()[0],r.Childs()[0].m_Parent=r;for(var n=1;n<i.ChildCount();n++)r.AddChild(i.Childs()[n])}else r.Clear();else{var s,r=e[0],o=e[1];if(t.Clear(r),this.FixOrientations(),this.DoOffset(o),(s=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftPositive,t.PolyFillType.pftPositive);else{var a,A=t.Clipper.GetBounds(this.m_destPolys);(a=new t.Path).push(new t.IntPoint2(A.left-10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.bottom+10)),a.push(new t.IntPoint2(A.right+10,A.top-10)),a.push(new t.IntPoint2(A.left-10,A.top-10)),s.AddPath(a,t.PolyType.ptSubject,!0),s.ReverseSolution=!0,s.Execute(t.ClipType.ctUnion,r,t.PolyFillType.pftNegative,t.PolyFillType.pftNegative),r.length>0&&r.splice(0,1)}}},t.ClipperOffset.prototype.OffsetPoint=function(e,i,n){if(this.m_sinA=this.m_normals[i].X*this.m_normals[e].Y-this.m_normals[e].X*this.m_normals[i].Y,Math.abs(this.m_sinA*this.m_delta)<1){if(this.m_normals[i].X*this.m_normals[e].X+this.m_normals[e].Y*this.m_normals[i].Y>0)return this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),i}else this.m_sinA>1?this.m_sinA=1:this.m_sinA<-1&&(this.m_sinA=-1);if(this.m_sinA*this.m_delta<0)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[i].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[i].Y*this.m_delta))),this.m_destPoly.push(new t.IntPoint1(this.m_srcPoly[e])),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)));else switch(n){case t.JoinType.jtMiter:var s=this.m_normals[e].X*this.m_normals[i].X+this.m_normals[e].Y*this.m_normals[i].Y+1;s>=this.m_miterLim?this.DoMiter(e,i,s):this.DoSquare(e,i);break;case t.JoinType.jtSquare:this.DoSquare(e,i);break;case t.JoinType.jtRound:this.DoRound(e,i)}return i=e},t.ClipperOffset.prototype.DoSquare=function(e,i){var n=Math.tan(Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y)/4);this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[i].X-this.m_normals[i].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[i].Y+this.m_normals[i].X*n)))),this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_delta*(this.m_normals[e].X+this.m_normals[e].Y*n)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[e].Y-this.m_normals[e].X*n))))},t.ClipperOffset.prototype.DoMiter=function(e,i,n){var s=this.m_delta/n;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+(this.m_normals[i].X+this.m_normals[e].X)*s),t.ClipperOffset.Round(this.m_srcPoly[e].Y+(this.m_normals[i].Y+this.m_normals[e].Y)*s)))},t.ClipperOffset.prototype.DoRound=function(e,i){for(var n,s=Math.atan2(this.m_sinA,this.m_normals[i].X*this.m_normals[e].X+this.m_normals[i].Y*this.m_normals[e].Y),r=Math.max(t.Cast_Int32(t.ClipperOffset.Round(this.m_StepsPerRad*Math.abs(s))),1),o=this.m_normals[i].X,a=this.m_normals[i].Y,A=0;A<r;++A)this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+o*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+a*this.m_delta))),n=o,o=o*this.m_cos-this.m_sin*a,a=n*this.m_sin+a*this.m_cos;this.m_destPoly.push(new t.IntPoint2(t.ClipperOffset.Round(this.m_srcPoly[e].X+this.m_normals[e].X*this.m_delta),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_normals[e].Y*this.m_delta)))},t.Error=function(e){try{throw new Error(e)}catch(e){alert(e.message)}},t.JS={},t.JS.AreaOfPolygon=function(e,i){return i||(i=1),t.Clipper.Area(e)/(i*i)},t.JS.AreaOfPolygons=function(e,i){i||(i=1);for(var n=0,s=0;s<e.length;s++)n+=t.Clipper.Area(e[s]);return n/(i*i)},t.JS.BoundsOfPath=function(e,i){return t.JS.BoundsOfPaths([e],i)},t.JS.BoundsOfPaths=function(e,i){i||(i=1);var n=t.Clipper.GetBounds(e);return n.left/=i,n.bottom/=i,n.right/=i,n.top/=i,n},t.JS.Clean=function(e,i){if(!(e instanceof Array))return[];var n=e[0]instanceof Array;if(e=t.JS.Clone(e),"number"!=typeof i||null===i)return t.Error("Delta is not a number in Clean()."),e;if(0===e.length||1===e.length&&0===e[0].length||i<0)return e;n||(e=[e]);for(var s,r,o,a,A,l,c,h=e.length,p=[],u=0;u<h;u++)if(0!==(s=(r=e[u]).length))if(s<3)o=r,p.push(o);else{for(o=r,a=i*i,A=r[0],l=1,c=1;c<s;c++)(r[c].X-A.X)*(r[c].X-A.X)+(r[c].Y-A.Y)*(r[c].Y-A.Y)<=a||(o[l]=r[c],A=r[c],l++);A=r[l-1],(r[0].X-A.X)*(r[0].X-A.X)+(r[0].Y-A.Y)*(r[0].Y-A.Y)<=a&&l--,l<s&&o.splice(l,s-l),o.length&&p.push(o)}return!n&&p.length?p=p[0]:n||0!==p.length?n&&0===p.length&&(p=[[]]):p=[],p},t.JS.Clone=function(e){if(!(e instanceof Array))return[];if(0===e.length)return[];if(1===e.length&&0===e[0].length)return[[]];var t=e[0]instanceof Array;t||(e=[e]);var i,n,s,r,o=e.length,a=new Array(o);for(n=0;n<o;n++){for(i=e[n].length,r=new Array(i),s=0;s<i;s++)r[s]={X:e[n][s].X,Y:e[n][s].Y};a[n]=r}return t||(a=a[0]),a},t.JS.Lighten=function(e,i){if(!(e instanceof Array))return[];if("number"!=typeof i||null===i)return t.Error("Tolerance is not a number in Lighten()."),t.JS.Clone(e);if(0===e.length||1===e.length&&0===e[0].length||i<0)return t.JS.Clone(e);var n,s,r,o,a,A,l,c,h,p,u,g,d,f,m,I,b=e[0]instanceof Array;b||(e=[e]);var y=e.length,C=i*i,B=[];for(n=0;n<y;n++)if(0!==(A=(r=e[n]).length)){for(o=0;o<1e6;o++){for(a=[],r[(A=r.length)-1].X!==r[0].X||r[A-1].Y!==r[0].Y?(u=1,r.push({X:r[0].X,Y:r[0].Y}),A=r.length):u=0,p=[],s=0;s<A-2;s++)l=r[s],h=r[s+1],c=r[s+2],m=l.X,I=l.Y,g=c.X-m,d=c.Y-I,0===g&&0===d||((f=((h.X-m)*g+(h.Y-I)*d)/(g*g+d*d))>1?(m=c.X,I=c.Y):f>0&&(m+=g*f,I+=d*f)),(g=h.X-m)*g+(d=h.Y-I)*d<=C&&(p[s+1]=1,s++);for(a.push({X:r[0].X,Y:r[0].Y}),s=1;s<A-1;s++)p[s]||a.push({X:r[s].X,Y:r[s].Y});if(a.push({X:r[A-1].X,Y:r[A-1].Y}),u&&r.pop(),!p.length)break;r=a}a[(A=a.length)-1].X===a[0].X&&a[A-1].Y===a[0].Y&&a.pop(),a.length>2&&B.push(a)}return b||(B=B[0]),void 0===B&&(B=[]),B},t.JS.PerimeterOfPath=function(e,t,i){if(void 0===e)return 0;var n,s,r=Math.sqrt,o=0,a=0,A=0,l=0,c=0,h=e.length;if(h<2)return 0;for(t&&(e[h]=e[0],h++);--h;)a=(n=e[h]).X,A=n.Y,o+=r((a-(l=(s=e[h-1]).X))*(a-l)+(A-(c=s.Y))*(A-c));return t&&e.pop(),o/i},t.JS.PerimeterOfPaths=function(e,i,n){n||(n=1);for(var s=0,r=0;r<e.length;r++)s+=t.JS.PerimeterOfPath(e[r],i,n);return s},t.JS.ScaleDownPath=function(e,t){var i,n;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=n.X/t,n.Y=n.Y/t},t.JS.ScaleDownPaths=function(e,t){var i,n,s;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(s=e[i][n]).X=s.X/t,s.Y=s.Y/t},t.JS.ScaleUpPath=function(e,t){var i,n,s=Math.round;for(t||(t=1),i=e.length;i--;)(n=e[i]).X=s(n.X*t),n.Y=s(n.Y*t)},t.JS.ScaleUpPaths=function(e,t){var i,n,s,r=Math.round;for(t||(t=1),i=e.length;i--;)for(n=e[i].length;n--;)(s=e[i][n]).X=r(s.X*t),s.Y=r(s.Y*t)},t.ExPolygons=function(){return[]},t.ExPolygon=function(){this.outer=null,this.holes=null},t.JS.AddOuterPolyNodeToExPolygons=function(e,i){var n=new t.ExPolygon;n.outer=e.Contour();var s,r,o,a,A,l,c=e.Childs(),h=c.length;for(n.holes=new Array(h),o=0;o<h;o++)for(s=c[o],n.holes[o]=s.Contour(),a=0,l=(A=s.Childs()).length;a<l;a++)r=A[a],t.JS.AddOuterPolyNodeToExPolygons(r,i);i.push(n)},t.JS.ExPolygonsToPaths=function(e){var i,n,s,r,o=new t.Paths;for(i=0,s=e.length;i<s;i++)for(o.push(e[i].outer),n=0,r=e[i].holes.length;n<r;n++)o.push(e[i].holes[n]);return o},t.JS.PolyTreeToExPolygons=function(e){var i,n,s,r,o=new t.ExPolygons;for(n=0,r=(s=e.Childs()).length;n<r;n++)i=s[n],t.JS.AddOuterPolyNodeToExPolygons(i,o);return o}}();var He=getDefaultExportFromCjs(ze.exports);function alignByMinDist(e,t,i){const n=e.length,s=t.length;if(n<1||s<1)return t.slice();let r=0,o=1/0;for(let a=0;a<s;a++){const A=e[0],l=t[a%s],c=A.x-l.x,h=A.y-l.y,p=e[n-1],u=t[i?Math.min(a+n-1,s-1):(a+n-1)%s],g=p.x-u.x,d=p.y-u.y,f=c*c+h*h+g*g+d*d;f<o&&(o=f,r=a)}return[...t.slice(r),...t.slice(0,r)]}function shapeclip(){const e=1e4;function toclipformat(t){let i=t.map((t=>({X:Math.round(t.x*e),Y:Math.round(t.y*e)})));return ensureOrientation(i)}function fromclipformat(t){return t.map((t=>({x:t.X/e,y:t.Y/e})))}const ensureOrientation=e=>He.Clipper.Orientation(e)?e:e.slice().reverse();function orientation(e){if(!e.length)return 0;let t=0;const i=e.length;for(let n=0;n<i;n++){const s=e[n],r=e[(n+1)%i];t+=s.X*r.Y-r.X*s.Y}return t>0?1:t<0?-1:0}const _inflate=(e,t,i=!1)=>{const n=new He.ClipperOffset;n.MiterLimit=4,n.AddPath(e,He.JoinType.jtMiter,i||2==e.length?He.EndType.etOpenButt:He.EndType.etClosedPolygon);const s=new He.Paths;return n.Execute(s,t),s};function _inflateopen(t,i){const n=new He.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const s=i*e,r=toclipformat(t);n.AddPath(r,He.JoinType.jtMiter,He.EndType.etClosedPolygon);const o=new He.Paths;n.Execute(o,s);let a=fromclipformat(o[0]);return getshape().frompt(a)}return{offset(t,i){const n=new He.ClipperOffset;n.MiterLimit=4,n.ArcTolerance=.25;const s=Math.abs(i)*e,r=toclipformat(t.pt);n.AddPath(r,He.JoinType.jtMiter,He.EndType.etOpenButt);const o=new He.Paths;n.Execute(o,s);let a=fromclipformat(o[0]);return getshape().frompt(a)},inflate:function inflate(t,i=2,n=!1,s=0){let r=toclipformat(t.pt),o=_inflate(r,i*e);if(!o||!o.length)return getshape().frompt([]);let a=getshape().frompt(fromclipformat(o[0]));if(n){a.orient!=t.orient&&a.reverse();let A=alignByMinDist(t.pt,a.pt,s);if(a.frompt(A),s>0&&t.pt.length>=3){function estendi1(e,t){let i=e.segment(0).ruotata(-Math.PI/2,200,!0),n=e.segment(-2).ruotata(-Math.PI/2,200),s=t.segment(-2).interseca(n),r=t.segment(0).interseca(i);r&&(t.pt[0]=r),s&&(t.pt[t.pt.length-1]=s)}function estendi2(e,t){let i=e.segment(-1),n=t.segment(0),s=i.interseca(n);s&&(t.pt[0]=s),n=t.segment(-2);let r=i.interseca(n);r&&(t.pt[t.pt.length-1]=r)}1==s?estendi1(t,a):estendi2(t,a)}}return a},inflateopen:_inflateopen,inflateclose(e,t){let i=_inflateopen(e.pt,t);i.orient!=e.orient&&i.reverse();let n=alignByMinDist(e.pt,i.pt,0);return i.frompt(n),i},inflatecornici(e,t=2,i,n){let s,r=e.npt;if(2==r){let i=e.segment(0).offset(t);s=getshape().frompt([i.p1,i.p2])}else if(3==r){let i=e.segment(0).offset(t),n=e.segment(1).offset(t);if(i.isparallela(n))s=getshape().frompt([i.p1,n.p2]);else{let e=i.interseca(n);s=getshape().frompt([i.p1,e,n.p2])}}else{let r=new Linea2(e.pt[0],e.pt[e.npt-1]),o=r.len,a=r.perpendicolare(r.p1,o),A=r.perpendicolare(r.p2,o);a.isparallela(e.segment(0))&&(a=r.perpendicolare(r.puntot(.1),o)),A.isparallela(e.segment(e.npt-2))&&(A=r.perpendicolare(r.puntot(.9),o));let l=Math.floor(e.npt/2),{t:c}=a.proiezionet(e.pt[l]),h=2*(c>0?-1:1),p=a.puntot(h),u=A.puntot(h);s=_inflateopen([...e.pt,u,p],t);let g=s.pt.reduce(((e,t,i)=>(t.x-p.x)**2+(t.y-p.y)**2<(s.pt[e].x-p.x)**2+(s.pt[e].y-p.y)**2?i:e),0);s.pt=s.pt.slice(g+2).concat(s.pt.slice(0,g)),s.orient!=e.orient&&s.reverse(),i&&(e.truncatebefore(i),s.truncatebefore(i)),n&&(s.truncateafter(n),e.truncateafter(n))}return s},intersecasplitter(e,t){const i=new He.Clipper,n=[toclipformat(t.pt)],s=[toclipformat(e.pt)];i.AddPaths(n,He.PolyType.ptSubject,!0),i.AddPaths(s,He.PolyType.ptClip,!0);const r=new He.Paths;let o;if(i.Execute(He.ClipType.ctIntersection,r,He.PolyFillType.pftNonZero,He.PolyFillType.pftNonZero)&&r.length>0){const e=r[0];if(1===orientation(e)){o=getshape().frompt(fromclipformat(e)),o.orient!=t.orient&&o.reverse();for(let e=0;e<t.pt.length;e++){let i=t.pt[e],n=o.pt.findIndex((e=>Math.abs(e.x-i.x)<.01&&Math.abs(e.y-i.y)<.01));if(n>0){n-=e,0!=n&&o.selezionaprimo(n);break}}}}return o},offsetpts(t,i=.01){const n=e*i;let s=_inflate(toclipformat(t),n);if(s&&s.length)return fromclipformat(s[0])},areesplitter(e,t,i=!0){if(!Array.isArray(e)||e.length<3)return;if(!t||0==t.length)return[e];const n=new He.Paths,s=new He.Paths;let r=i?_inflate(toclipformat(e),-100):[toclipformat(e)],o=i?t.flatMap((e=>_inflate(toclipformat(e),100))):t.map((e=>toclipformat(e)));for(let e of r)n.push(e);for(let e of o)s.push(e);const a=new He.Clipper;a.AddPaths(n,He.PolyType.ptSubject,!0),a.AddPaths(s,He.PolyType.ptClip,!0);const A=new He.Paths;if(!a.Execute(He.ClipType.ctDifference,A,He.PolyFillType.pftNonZero,He.PolyFillType.pftNonZero))return;let l=[];for(let e of A)if(i){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}else if(e.length>4&&1==orientation(e)){const t=_inflate(e,-100);if(t.length>0)for(let e of t){const t=_inflate(e,100);for(const e of t)1===orientation(e)&&l.push(fromclipformat(e))}}else 1==orientation(e)&&l.push(fromclipformat(e));return l},unisci(e,t,i){const n=new He.Paths,s=new He.Paths;for(let t of e){let e=[toclipformat(t.pt)];for(let t of e)n.push(t)}if(t&&t.length)for(let e of t){let t=toclipformat(e.pt);s.push(t)}if(i&&i.length)for(let e of i){let t=toclipformat(e.pt),i=_inflate(t,1,!0);for(let e of i)s.push(e)}const r=new He.Clipper;r.AddPaths(n,He.PolyType.ptSubject,!0),r.AddPaths(s,He.PolyType.ptClip,!0);const o=new He.Paths;if(r.Execute(He.ClipType.ctDifference,o,He.PolyFillType.pftNonZero,He.PolyFillType.pftNonZero)){let e=[],t=[];for(let i of o)if(1==orientation(i)){let t=[i];for(let i of t)e.push({shape:getshape().frompt(fromclipformat(i)),holes:[]})}else t.push(getshape().frompt(fromclipformat(i)));for(let i of t)for(let t of e)if(t.shape.pointinshape(i.pt[0])){t.holes.push(i);break}return e}return[]}}}class Vscene{constructor(e,t,i={}){this.x=e,this.y=t,this.info=i,this.clear()}addrow(e){e||(e={}),e.id=function newid(e){let t=0;for(let i of e)+i.id>t&&(t=+i.id);return t+1}(this.rows);let t=new Vobject(e);return this.rows.push(t),t}clear(){this.curlayer=0,this.rows=[],this.clines=[]}fromjson(e){let t,i;e||(e={info:{}}),this.clear(),this.x=e.x||4e3,this.y=e.y||3e3,this.info=e.info||{},this.curlayer=e.curlayer,e.clines&&(t=e.clines.map((e=>new Linea2(e.p1,e.p2))));let n=this.x,s=this.y;i=[new Linea2(0,0,100,0),new Linea2(n,0,n,100),new Linea2(n,s,n-100,s),new Linea2(0,s,0,s-100)],this.clines=[...i,...t],e.rows&&(this.rows=e.rows.map((e=>new Vobject(e))))}tojson(){let{x:e,y:t,info:i,curlayer:n,xrows:s,xclines:r}=this,o=s.map((e=>e.tojson())),a=r.map((e=>({p1:e.p1,p2:e.p2})));return a=a.slice(4),{x:e,y:t,curlayer:n,rows:o,clines:a}}}class Vobject{constructor(e){e||(e={}),this.fromjson(e)}get lines(){if(this._lines&&this._lines.length)return this._lines;{let{x:e,y:t}=this;return e||(e=100),t||(t=100),[new Linea2(0,0,0,t),new Linea2(e,0,e,t)]}}fromjson(e){let t;this.id=e.id??1,this.layer=e.layer||0,this.hidden=!!e.hidden,this.x=e.x||100,this.y=e.y||100,this.pc=e.pc||{x:0,y:0},e.shape?this.shape=getshape().frompt(e.shape):this.shape=void 0,e.lines&&e.lines.length&&(t=e.lines.map((e=>new Linea2(e.p1,e.p2)))),this._lines=t,this.draw=new Vis2d(`d:${e.id}`),e.draw&&this.draw.fromjson(e.draw),this.info=e.info||{},this.pos=e.pos||{x:0,y:0,rot:0}}tojson(){let{id:e,layer:t,x:i,y:n,pc:s,shape:r,hidden:o,_lines:a,info:A,pos:l}=this;return a=a&&a.length?a.map((e=>({p1:e.p1,p2:e.p2}))):void 0,r=r?r.pt:void 0,{id:e,layer:t,x:i,y:n,pc:s,shape:r,lines:a,hidden:o,info:A,pos:l,draw:this.draw.tojson()}}}class Vis2d{constructor(e,t,i,n){this.name=e,this.visible=t,this.des=i,this.inverse=n,this.clear()}clear(){return this.vec=[],this.gr={},this}tojson(){let e={};for(let t in this.gr)e[t]=this.gr[t].tojson();let{name:t,visible:i,des:n,vec:s,inverse:r}=this;return{name:t,visible:i,des:n,inverse:r,vec:[...s],groups:e}}fromjson(e){if(!(e&&e.name&&e.vec))throw new Error("wrong data JSON");this.clear(),this.name=e.name,this.visible=e.visilbe,this.des=e.des,this.inverse=e.inverse,this.vec=[...e.vec];for(let t in e.groups)this.gr[t]=new Vis2d(t).fromjson(e.groups[t])}creategr(e="grp"){return this.gr[e]||(this.gr[e]=new Vis2d(e)),this.gr[e]}push(e=0,t=0,i={}){"number"==typeof i&&(i={rot:i}),i||(i={}),this.vec.push({type:"push",x:e,y:t,op:i})}pop(){this.vec.push({type:"pop"})}randomcolor(e="100%"){return`hsl(${Math.floor(360*Math.random())}, 50%, 40%,${e})`}addgr(e){let t=e;e?.name&&(t=e.name),this.gr[t]?this.vec.push({type:"group",name:t}):this.vec.push({type:"err",err:`addgroup: ${t} => missing`})}addtext(e,t,i,n,s="black",r="white"){this.vec.push({type:"text",x:e,y:t,text:i,color:s,fill:r,scalafont:n})}addquota(e,t,i,n,s=0,r="",o=1,a=.25){this.vec.push({type:"quota",x1:e,y1:t,x2:i,y2:n,d:s,text:r,spessore:a,color:"black",scalafont:o})}addqpunto(e,t,i,n,s=0,r="",o=1,a=.25){this.vec.push({type:"qpunto",x1:e,y1:t,x2:i,y2:n,d:s,text:r,spessore:a,color:"black",scalafont:o})}addpoint(e,t=-1,i="red",n=8){return e&&this.vec.push({type:"point",p:e,id:t,color:i,spessore:1*n}),this}addline(e,t=-1,i=void 0,n=1){return e&&this.vec.push({type:"line",l:e,id:t,color:i,spessore:1*n}),this}addspace(e){return e&&this.vec.push({type:"space",l:e}),this}addrect(e,t=void 0,i=1,n=void 0){return e&&this.vec.push({type:"rect",l:e,color:t,spessore:1*i,fill:n}),this}addimg(e,t){return e&&this.vec.push({type:"img",l:e,img:t}),this}addrecta(e,t=void 0,i=void 0){return e&&this.vec.push({type:"recta",l:e,color:t,spessore:0,fill:i}),this}addshape(e,t=void 0,i=1,n=void 0){return e&&this.vec.push({type:"shape",s:e,color:t||this.randomcolor(),spessore:1*i,fill:n}),this}addshapelin(e,t=void 0,i=1){return e&&this.vec.push({type:"shapelin",s:e,color:t||this.randomcolor(),spessore:1*i}),this}addarea(e,t=void 0){return e&&this.vec.push({type:"area",s:e,color:t||this.randomcolor()}),this}addoffset(e,t){return this.vec.push({type:"offset",x:e||0,y:t||0}),this}}function checkoggetto(e,t,i,n){if("h"==t&&(t="o"),e||(e=[]),"number"==typeof i&&!["a","as"].includes(t))return{cod:"__",macro:"",sps:i};let s=e.find((e=>e.tipo.includes(t)&&e.cod==i&&(e.isshape||n||"a"!=t)));return s||(s=e.find((e=>e.tipo.includes(t)&&(e.isshape||n||"a"!=t)))),s||(s={cod:"__",macro:"",sps:0}),"a"!=t&&"as"!=t||"__"==s.cod||s.color||(s.color=`hsl(${function stringToHue(e){let t=0;for(let i=0;i<e.length;i++)t=31*t+e.charCodeAt(i)>>>0;return Math.floor(.6180339887*t%1*360)}(s.cod)}, 95%, 97%`),s}function getbordi(e,t){let i,n=!1;if(Array.isArray(t)){t.length=4;let s=t[0]||"";i=t.map((t=>checkoggetto(e,"b",t||s))),n=i.every((e=>e.sps===i[0].sps))}else{let s=checkoggetto(e,"b",t);i=[s,s,s,s],n=!0}return{bordi:i,uguali:n,senza:!(i[0].sps||i[1].sps||i[2].sps||i[3].sps),bl:i[0].sps,bt:i[1].sps,br:i[2].sps,bb:i[3].sps}}function elaborapercorso(e,t,i,n,s=0){let r,o,a,A,l,c,h,p,u,g,d,f,m,I,b,y,C=[],B=[];function eseguipezzo(e,t,i,n){let r=e.infoquad(t);if(r&&r.distanza){let o=getshape().frompt(n||[e.p1,e.p2,t.p2,t.p1]),a=o.clone();(r.sx||r.sy)&&a.move(-r.sx||0,-r.sy||0),r.angle&&a.rotate(-r.angle||0);let A={id:++s,type:`b${i}`,info:r};n&&(A.shape=a.pt),B.push({type:`b${i}`,pt:o.pt}),C.push(A)}}s=s||0;let E=e.pt.length,x=E-1;n||(n=[]);let{bordi:w,uguali:v,senza:P}=getbordi(n,t);if(v)if(P||!w[0].sps)r=e.clone();else{let t=w[0].sps;r=shapeclip().inflate(e,-t,!0)}else{let t,i=[],n=[];for(let n=0;n<E;n++){t=0==n?w[0].sps:n==x-1?w[2].sps:n==x?w[3].sps:w[1].sps,"number"!=typeof t&&(t=0);let s=e.segment(n).offset(-t);i.push(s)}for(let e=0;e<E;e++){let t=i[e].interseca(i[(e-1+E)%E]);n.push(t)}r=getshape().frompt(n)}if(!P){a=r.segment(x).interseca(e.segment(0)),A=r.segment(1).interseca(e.segment(0)),l=e.segment(x-1).interseca(r.segment(x-2)),c=e.segment(x-1).interseca(r.segment(x)),h=e.segment(x).interseca(r.segment(0)),p=e.segment(1).interseca(r.segment(0)),u=e.segment(x-2).interseca(r.segment(x-1)),g=e.segment(x).interseca(r.segment(x-1)),b=1,y=x-2,m=r.segment(0),I=r.segment(x-1);for(let t=1;t<x-1;t++){let i=e.segment(t),n=i.interseca(m);n&&i.onsegment(n)&&(b=t,p=n),n=i.interseca(I),n&&i.onsegment(n)&&(y=t,u=n)}b-=1,y=x-2-y;let n=e.pt[0],s=r.pt[0],C=r.pt[x],B=e.pt[x];switch(i[0]){case"v":eseguipezzo(new Linea2(g,h),r.segment(x),3),s=h,C=g;break;case"o":eseguipezzo(e.segment(x),new Linea2(c,a),3),n=a,B=c;break;default:eseguipezzo(e.segment(x),r.segment(x),3)}switch(d=e.pt.slice(1,x),f=r.pt.slice(1,x),i[1]){case"v":eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(s,p),0),eseguipezzo(new Linea2(e.pt[x-1],B),new Linea2(u,C),2),b&&(d=d.slice(b)),y&&(d=d.slice(0,-y)),d[0]=p,d[d.length-1]=u;break;case"o":eseguipezzo(new Linea2(n,A),new Linea2(s,r.pt[1]),0),eseguipezzo(new Linea2(l,B),new Linea2(r.pt[x-1],C),2),f[0]=A,f[f.length-1]=l;break;default:eseguipezzo(new Linea2(n,e.pt[1]),new Linea2(s,r.pt[1]),0),eseguipezzo(new Linea2(e.pt[x-1],B),new Linea2(r.pt[x-1],C),2)}if(o=getshape().frompt(f),d.length<8&&d.length==f.length)for(let e=0;e<d.length-1;e++)eseguipezzo(new Linea2(d[e],d[e+1]),new Linea2(f[e],f[e+1]),1);else{let e=getshape().frompt([...d,...f.reverse()]),i=new Linea2(d[0],d[d.length-1]),n=i.offset(-t[1]);eseguipezzo(i,n,1,e.pt)}}return{countid:s,shape2:r,shapetop:o,bordi:w,dati:C,draws:B}}function creaprofiloesterno(e,t){let i,{x:n,y:s,tipo:r,bordo:o,taglio:a,h1:A,h2:l,l1:c,l2:h,forma:p}=e;n=n<50?50:n,s=s<50?50:s,c=c||0,h=h||0,A=A||0,l=l||0;let u=[0,0];switch(r){case"i":case"d":u.push(c>0&&c<n?c:0,A>0&&A<s?s-A:s),u.push(h>0&&h<n-c?n-h:n,l>0&&l<s&&l!=A?s-l:s);break;case"a":if(p){let e=getshape().fromstr(p);e.alignline({x:c,y:s-A},{x:n-h,y:s-l}),u.push(...e.vec)}else if((A||l)&&A>=0&&A<Math.min(s,n/2)&&l>=0&&l<Math.min(s,n/2)){let e=getshape().fromstr(`a30;${c||0};${s-A};${n/2};${s};${n-h};${s-l}`);u.push(...e.vec)}else u.push(0,s,n,s);break;case"s":c>0&&A>0?u.push(0,s-A,c,s):u.push(0,s),h&&h<n-c&&l>0&&l<s?u.push(n-h,s,n,s-l):u.push(n,s);break;default:u.push(0,s,n,s)}u.push(n,0),e.countid=0,i=getshape().fromvec(u);let{countid:g,shape2:d,shapetop:f,bordi:m,dati:I,draws:b}=elaborapercorso(i,o,a,t,e.countid);return e.countid=g,{shape:i,internalshape:d,shape2:d,shapetop:f,bordi:m,dati:I,draws:b}}const je={x:"normale",s:"smussato",i:"inclinato",a:"arco/sagomato",d:"diagonali"},We={dd:"diagonale",vv:"verticale",oo:"orizzontale",vo:"verticale+orizzontale",vd:"verticale+diagonale",ov:"orizzontale+verticale",od:"orizzontale+diagonale"},Je={d:"dist. positiva","d-":"dist. negativa",p:"perc. positiva","p-":"perc negativa"},Ke={l:"sinistra",c:"centro",r:"destra"};function findareacod(e,t,i){let n=1/0,s="";for(let r of e){let e=(r.x-t)**2+(r.y-i)**2;e<n&&(n=e,s=r.k)}return s}function generatesegments(e,t,i=!1,n=!1){let s=[];if(e?.length>=2){if(n){let t=[];for(let i of e)t.push({a:i.a,b:i.a}),i.a!=i.b&&t.push({a:i.b,b:i.b});e=t}if(e=e.sort(((e,t)=>e.a-t.a)),t?.length){let n=0;for(let r=1;r<e.length;r++){const o=1e-6;if(t.find((t=>t>e[r-1].b+o&&t<e[r].a-o))){if(r-1>n){let t;t=i?{a:e[n].b,b:e[r-1].a}:{a:e[n].a,b:e[r-1].b},s.push(t)}n=r}}n<e.length-1&&(i?s.push({a:e[n].b,b:e[e.length-1].a}):s.push({a:e[n].a,b:e[e.length-1].b}))}else s.push({a:e[0].b,b:e[e.length-1].a})}return s}function makedivisions(e,t,i){delete e.arre;let n=[],s=[],r=[],o=[],{x:a,y:A,oriz:l,vert:c,tipo:h,minvano:p,minvanox:u,minvanoy:g}=e,{bb:d,bt:f,bl:m,br:I}=getbordi(i,e.bordo);u=u||p||50,g=g||p||50;let{dati:b,punti:y}=ordinabase(i,"o",l,A,g,d,f,h),{dati:C,punti:B}=ordinabase(i,"v",c,a,u,m,I),E=t.clone();function adddatilin(e,t,a,A,l,c){if("l"==e)s.push([a.p1,a.p2]),o.push([a.p1.x,a.p1.y,a.p2.x,a.p2.y]);else{let h=[a.p1,a.p2,A.p2,A.p1];s.push(h);let p=getshape().frompt(h);if(E?.pt&&(p.orient!=E.orient&&p.reverse(),p=shapeclip().intersecasplitter(E,p)),p){p.pt.length>=4&&(a.p1=p.pt[0],a.p2=p.pt[1],A.p1=p.pt[p.pt.length-1],A.p2=p.pt[p.pt.length-2]),o.push([a.p1.x+("v"==e?l:0),a.p1.y+("v"!=e?l:0),a.p2.x+("v"==e?l:0),a.p2.y+("v"!=e?l:0)]);let s=a.infoquad(A);if(s&&s.distanza){let o=p.clone(),a=checkoggetto(i,e,t);(s.sx||s.sy)&&o.move(-s.sx||0,-s.sy||0),s.angle&&o.rotate(-s.angle||0);let A={id:c,type:e,cod:t,c2:a,shape:o.pt,info:s};r.push(A),A?.shape&&n.push({type:e,sx:A.info.sx,sy:A.info.sy,rot:A.info.angle,pt:A.shape})}}}}function isinseg(e,t){return!!e.find((e=>e.a<=t&&e.b>=t))}C.forEach(((e,t)=>{e.segs=generatesegments(y,e.cuts,!0),e.segs.forEach(((t,i)=>{let n=new Linea2({x:e.x,y:t.a},{x:e.x,y:t.b}),s=new Linea2({x:e.x+e.sp,y:t.a},{x:e.x+e.sp,y:t.b});adddatilin(e.sp?"v":"l",e.cod,n,s,e.sp/2,e.id)}))}));for(let e of b){let t=[...e.cuts],i=[...B];for(let n of C)i.push({a:n.x,b:n.x+n.sp}),isinseg(n.segs,e.x+e.sp/2)&&t.push(n.x+n.sp/2);e.segs=generatesegments(i,t,!0,!0),e.segs=e.segs.filter((e=>Math.abs(e.a-e.b)>40));for(let t of e.segs){let i=new Linea2({x:t.b,y:e.x+e.sp},{x:t.a,y:e.x+e.sp}),n=new Linea2({x:t.b,y:e.x},{x:t.a,y:e.x});adddatilin(e.sp?"o":"l",e.cod,n,i,e.sp,e.id)}}let x=shapeclip().areesplitter(t.pt,s),w=function getareacodes(e){let t,i,n,s,r=[];for(let o=0;o<=e.vert.length;o++){if(0==o)t="v0",i=0;else{let n=e.vert[o-1];t=`${n.dir}${n.id}`,i=n._v}for(let o=0;o<=e.oriz.length;o++){if(0==o)n="o0",s=0;else{let t=e.oriz[o-1];n=`${t.dir}${t.id}`,s=t._v}r.push({k:t+n,x:i,y:s})}}return r}(e);for(let t of x){let s=getshape().frompt(t),{p1:o,width:a,height:A,isrect:l}=s.dims(),c=findareacod(w,o.x,o.y),h=e.aree[c]||e.area||"",p=checkoggetto(i,"a",h,l),u=s.pt.findIndex((e=>Math.abs(e.x-o.x)<.001&&Math.abs(e.y-o.y)<.001));u>0&&s.selezionaprimo(u),s.pt.length&&(s.move(-o.x,-o.y),1==s.orient&&s.reverse()),r.push({id:c,cod:h,c2:p,type:"a",shape:l?null:s.pt,info:{isrect:l?1:0,sx:o.x,sy:o.y,rot:0,width:a,height:A}}),n.push({type:l?"a":"as",sx:o.x,sy:o.y,dx:a,dy:A,id:c,cod:h,rot:0,pt:s.pt,color:p.color})}return{ff:e,h1:b,ph:y,v1:C,pv:B,draws:n,lines:o,dati:r}}function ordinabase(e,t,i,n,s,r,o,a){let A=[];if(i){for(let s of i){let i=checkoggetto(e,t,s.cod).sps||0,a=0;switch(s.tipo){case"d-":a=n-s.v;break;case"p":a=n*s.v/100;break;case"p-":a=n*(100-s.v)/100;break;default:a=s.v}if(i&&"c"==s.align?a-=i/2:i&&"r"==s.align&&(a-=i),a=Math.round(10*a)/10,s._x0=a,s._x1=a+i,s._v=a+i/2,s._valid=a>0&&a<n,a>r&&a<n-o){let e=[];s.cuts&&s.cuts.length&&s.cuts.forEach((t=>{e.push(t<0?n+t:t)})),A.push({id:s.id,x:a,sp:i,cuts:e,cod:s.cod})}}A.sort(((e,t)=>e.x-t.x))}let l=[],c=r;"a"==a&&(n*=1.3);for(let e=0;e<A.length;e++){let t=A[e];t.x>=c+s&&t.x+t.sp<=n-o-s&&(t.min=c+s,t.max=n-o-s,l.length>0&&(l[l.length-1].max=t.x-s),l.push(t),c=t.x+t.sp)}let h=[];h.push({a:r,b:r});for(let e of l)h.push({a:e.x,b:e.x+e.sp});return h.push({a:n-o,b:n-o}),{dati:l,punti:h}}function check(e){let{x:t,y:i,area:n,bordo:s,gvert:r,goriz:o,priority:a,minvano:A,taglio:l,tipo:c,h1:h,h2:p,l1:u,l2:g,d1:d,x1:f,y1:m,d2:I,x2:b,y2:y,vert:C,oriz:B,aree:E,forma:x,countid:w}=e;return t=t||1e3,t<200&&(t=200),i=i||1e3,i<200&&(i=200),h=h||m||0,p=p||y||0,u=u||d||f||0,g=g||I||b||0,h<0&&h>i-100&&(h=0),p<0&&p>i-100&&(p=0),(g<0||g>t-u)&&(g=0),(u<0||u>t-g)&&(u=0),A=A||50,x&&(c="a"),n=n||"__",s=s||"__",a=a||"v",l=We[l]?l:"dd",c=je[c]?c:"x",C=C||[],B=B||[],E=E||{},o=o||void 0,r=r||void 0,w=w||1,{x:t,y:i,area:n,bordo:s,gvert:r,goriz:o,priority:a,minvano:A,taglio:l,tipo:c,h1:h,h2:p,l1:u,l2:g,vert:C,oriz:B,aree:E,countid:w}}function addtaglio(e,t,i,n,s,r="c",o=[],a){return a||(console.log("manca id a addtaglio"),a=0),{dir:t,id:a,tipo:Je[i]?i:"d",align:Ke[r]?r:"c",v:n,cod:s,cuts:o||[]}}function addoriz(e,t,i,n,s,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.goriz||o||"__"),Array.isArray(s)&&(r=s,s="c"),e.oriz||(e.oriz=[]);let a=addtaglio(0,"o",t,i,n,s,r,(e.oriz.length?Math.max(...e.oriz.map((e=>e.id))):0)+1);return e.oriz.push(a),e}var Ve=Object.freeze({__proto__:null,addhoriz:function addhoriz(e,t,i,n,s,r){return addoriz(e,t,i,n,s,r)},addoriz:addoriz,addvert:function addvert(e,t,i,n,s,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;n||(n=e.gvert||o||"__"),Array.isArray(s)&&(r=s,s="c"),e.vert||(e.vert=[]);let a=addtaglio(0,"v",t,i,n,s,r,(e.vert.length?Math.max(...e.vert.map((e=>e.id))):0)+1);return e.vert.push(a),e},calcoladivisioni:function calcoladivisioni(e,t,i,n){return makedivisions(e,i,n)},check:check,checkoggetto:checkoggetto,creaprofiloesterno:creaprofiloesterno,create:function create(e,t,i,n){n||(n={});let{minvano:s,priority:r,taglio:o,tipo:a,h1:A,h2:l,d1:c,d2:h,l1:p,l2:u,x1:g,x2:d,y1:f,y2:m,gvert:I,goriz:b,forma:y,area:C}=n,B=check({x:e,y:t,area:C,bordo:i,gvert:I,goriz:b,priority:r,minvano:s,taglio:o,tipo:a,h1:A,h2:l,l1:p,l2:u,d1:c,x1:g,y1:f,d2:h,x2:d,y2:m});return B.forma=y,B},elaborapercorso:elaborapercorso,getbordi:getbordi,makedivisions:makedivisions,makeshape:function makeshape(e,t){return creaprofiloesterno(e,t)},priorita:{v:"verticale",h:"orizzontale"},tagli:We,tipi:je,tipilocks:[{cod:"diml",des:"Larghezza"},{cod:"dima",des:"Altezza"},{cod:"etipo",des:"Modifica Tipo"},{cod:"etaglio",des:"Modifica Taglio"},{cod:"ebordi",des:"Modifica Bordi"},{cod:"esag",des:"Shape"},{cod:"vcrea",des:"Crea Div. Verticale"},{cod:"ocrea",des:"Crea Div. Orizzontale"},{cod:"vmov",des:"Sposta Div. Verticale"},{cod:"omov",des:"Sposta Div. Orizzontale"},{cod:"vedit",des:"Modifica Div. Verticale"},{cod:"oedit",des:"Modifica Div. Orizzontale"},{cod:"emods",des:"Modificatori Orizzontali/Verticali"},{cod:"ecuts",des:"Modifica/Aggiungi Cuts"},{cod:"earee",des:"Modifica Aree"}],tipoalign:Ke,tipocut:Je});async function exportSceneImage(e,t,i){i||(i={});let n,{name:s="image",png:r,width:o,height:a,zoom:A,zoomatutto:l,scene:c,imposta:h,frustumSize:p=10}=i;h&&(n=h.fakeshadow,h.fakeshadow=!1);const u=e.domElement.width,g=e.domElement.height,d=e.getPixelRatio(),f=t.isOrthographicCamera,m=f?{left:t.left,right:t.right,top:t.top,bottom:t.bottom,zoom:t.zoom}:{aspect:t.aspect};if(o&&a){if(e.setSize(o,a,!1),f){const e=o/a;t.left=-p*e/2,t.right=p*e/2,t.top=p/2,t.bottom=-p/2,t.updateProjectionMatrix()}else t.aspect=o/a,t.updateProjectionMatrix();if(A&&l){l(c.getObjectByName("boxes"),t,void 0,o,a)}}await new Promise((e=>requestAnimationFrame((()=>{requestAnimationFrame(e)}))));const I=await new Promise((t=>{e.domElement.toBlob(t,r?"image/png":"image/webp")}));return o&&a&&(e.setSize(u,g,!1),f?(t.left=m.left,t.right=m.right,t.top=m.top,t.bottom=m.bottom,t.zoom=m.zoom,t.updateProjectionMatrix()):(t.aspect=m.aspect,t.updateProjectionMatrix()),e.setPixelRatio(d)),h&&(h.fakeshadow=n),new File([I],`${s}.${r?"png":"webp"}`,{type:r?"image/png":"image/webp"})}function handleMovimenti(e,t={}){let{container:i,width:n,height:s,camera:r,scene:o,raycaster:a}=t;if(!i)return;const A=i.getBoundingClientRect(),l={x:(e.clientX-A.left)/n*2-1,y:-(e.clientY-A.top)/s*2+1};a.setFromCamera(l,r),a.layers.enable(0),a.layers.enable(1);const c=[];o.traverse((e=>{"Mesh"===e.type&&e.visible&&e.geometry&&e.material&&!e.material.transparent&&c.push(e)}));let h=a.intersectObjects(c,!1);if(h?.length){let e=h[0].object;for(;e&&(!e.userData?.mov||e.userData.mov.hidesel);){if(!e.parent){e=null;break}e=e.parent}if(e){let{mov:t}=e.userData;t.inmov?(t.inmov=!1,e.position.set(0,0,0),e.scale.set(1,1,1),e.rotation.set(0,0,0)):(t.dtstart=performance.now(),t.inmov=!0),e.traverse((i=>{if(i!==e&&i.userData&&i.userData.mov&&i.userData.mov.hidesel){let e=i.userData.mov;t.inmov?e._f.reset(i):(e.dtstart=t.dtstart,e.inmov=!0)}}))}}}function resethover(e,t=void 0){for(let i of e)i!==t&&i.userData?._mat&&(i.material=i.userData._mat,delete i.userData._mat)}function checkhoverables(e,t=!1,i={}){let{container:n,width:s,height:r,camera:o,scene:a,raycaster:A,emit:l,hoverables:c}=i;if(!n)return;if(!c||!c.length)return;const h=n.getBoundingClientRect(),p={x:(e.clientX-h.left)/s*2-1,y:-(e.clientY-h.top)/r*2+1};A.setFromCamera(p,o);const u=A.intersectObjects(c,!0);if(u&&u.length){let e=u[0].object;return resethover(c,e),e.userData.matover&&e.userData.matover!=e.material&&(e.userData._mat=e.material,e.material=e.userData.matover),e.userData.tooltip}resethover(c)}function handlePick(e,t={}){let{container:i,width:n,height:s,camera:r,scene:o,raycaster:a,emit:A,hoverables:l}=t;if(!i)return;const c=i.getBoundingClientRect(),h={x:(e.clientX-c.left)/n*2-1,y:-(e.clientY-c.top)/s*2+1},p=[],u=[];if(a.setFromCamera(h,r),l&&l.length){resethover(l);const t=a.intersectObjects(l,!0);if(t&&t.length){let i=t[0].object;return void A("variant",{x:e.clientX,y:e.clientY,node:i})}}if(r.layers.set(0),o.traverse((e=>{e.userData?.marker&&e.visible?u.push(e):"Mesh"===e.type&&e.material&&e.geometry&&e.visible&&(e.userData._lay=e.layers.mask,e.layers.set(0),p.push(e))})),u.length){const t=a.intersectObjects(u,!0);if(t&&t.length){let i=t[0].object;for(let t=0;t<10;t++){if(i.userData?.marker)return void A("marker",{node:i,x:e.clientX,y:e.clientY});if(i=i.parent,!i)break}}}const g=a.intersectObjects(p,!0);for(let e of p)e.layers.mask=e.userData._lay,delete e.userData._lay;if(g.length>0){let e=g[0].object;for(;e&&!e.userData.INFO;)e=e.parent;e?A("selected",{id:e.name}):A("deselect")}else A("deselect")}const Ze={idle:{id:"idle"},movimenti:{id:"movimenti",onMouseDown(e,t){e.stopPropagation(),e.preventDefault(),handleMovimenti(e,t)}},select:{id:"select",onMouseDown(e,t){handlePick(e,t)}},move:{id:"move",onMouseDown(e,t){e.stopPropagation(),e.preventDefault()},onMouseMove(e,t){}}};function picker(e){function creaAsse(t,i=1){let n;switch(t){case"x":n=16711680;break;case"y":n=65280;break;case"z":n=255;break;default:throw new Error("asse non valido")}const s=new e.Group;s.name=`picker_axis_${t}`,s.userData.type="move",s.userData.axis=t;const r=new e.CylinderGeometry(.025*i,.025*i,.7*i,8),o=new e.MeshBasicMaterial({color:n,depthTest:!1,depthWrite:!1}),a=new e.Mesh(r,o);a.position.y=.35*i,a.userData.parentType="move",s.add(a);const A=new e.ConeGeometry(.06*i,.18*i,12),l=new e.MeshBasicMaterial({color:n,depthTest:!1,depthWrite:!1}),c=new e.Mesh(A,l);return c.position.y=.7*i+.09*i,c.userData.parentType="move",s.add(c),"x"===t&&(s.rotation.z=-Math.PI/2),"z"===t&&(s.rotation.x=Math.PI/2),s.visible=!1,s}function creaCorner(){const t=new e.BoxGeometry(.1,.1,.1),i=new e.MeshBasicMaterial({color:"black",depthTest:!1,depthWrite:!1}),n=new e.Mesh(t,i);return n.name="picker_corner",n.userData.type="corner",n.visible=!1,n}function creaRotateHandler(t="y",i=1){const n={x:16711680,y:65280,z:255}[t]||16776960,s=new e.TorusGeometry(i,.02*i,12,64,2*Math.PI),r=new e.MeshBasicMaterial({color:n,transparent:!0,opacity:.7,depthTest:!1,depthWrite:!1}),o=new e.Mesh(s,r);return o.name=`picker_rotate_${t}`,o.userData.type="rotate",o.userData.axis=t,"x"===t&&(o.rotation.z=Math.PI/2),"z"===t&&(o.rotation.x=Math.PI/2),o.visible=!1,o}function creaDragger(t,i=.22,n=.11){const s={x:16711935,y:65535,z:16776960}[t]||16777215,r=new e.CylinderGeometry(0,n,i,3),o=new e.MeshBasicMaterial({color:s,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1}),a=new e.Mesh(r,o);return a.name=`picker_dragger_${t}`,a.userData.type="resize",a.userData.axis=t,"x"===t?a.rotation.z=-Math.PI/2:"z"===t&&(a.rotation.x=Math.PI/2),a.visible=!1,a}return{Picker:class Picker{constructor(t){this.grp=new e.Group,this.grp.name="_picker",t.add(this.grp),this.grpAssi=new e.Group,this.grpAssi.name="_picker_assi",this.asseX=creaAsse("x"),this.asseY=creaAsse("y"),this.asseZ=creaAsse("z"),this.grpAssi.add(this.asseX,this.asseY,this.asseZ),this.grp.add(this.grpAssi),this.grpRotate=new e.Group,this.grpRotate.name="_picker_rotate",this.rotateHandler=creaRotateHandler("z"),this.grpRotate.add(this.rotateHandler),this.grp.add(this.grpRotate),this.corners=[creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner(),creaCorner()],this.corners.forEach((e=>this.grp.add(e))),this.draggerZ=creaDragger("z"),this.draggerY=creaDragger("y"),this.draggerX=creaDragger("x"),this.grp.add(this.draggerZ,this.draggerY,this.draggerX),function forceAlwaysOnTop(e){e.traverse((e=>{e.isMesh&&(e.renderOrder=999,e.material&&(e.material.depthTest=!1,e.material.depthWrite=!1,e.material.transparent=!0))}))}(this.grp),this.clear()}clear(){this.grp.position.set(0,0,0),this.grp.rotation.set(0,0,0),this.grp.scale.set(1,1,1),this.grpAssi.position.set(0,0,0),this.grpAssi.rotation.set(0,0,0),this.grpRotate.position.set(0,0,0),this.grpRotate.rotation.set(0,0,0),this.asseX.visible=!1,this.asseY.visible=!1,this.asseZ.visible=!1,this.rotateHandler.visible=!1,this.corners.forEach((e=>{e.visible=!1,e.position.set(0,0,0)})),this.draggerZ.visible=!1,this.draggerY.visible=!1,this.draggerX.visible=!1}attiva(t){if(this.clear(),!t)return;t.updateMatrixWorld(!0);const i=(new e.Box3).setFromObject(t),n=i.min,s=i.max;this.grp.position.copy(n);const r=new e.Quaternion;t.getWorldQuaternion(r),this.grp.setRotationFromQuaternion(r);const o=t.userData&&t.userData.pick?String(t.userData.pick):"",a=o.trim()?function parsePickerShort(e){const t={};return e.split(";").forEach((e=>{let i=e.trim();if(!i)return;let[n,s]=i.split(":");switch(n=n.trim().toLowerCase(),s=s?s.trim().toLowerCase():"",n){case"a":t.axis=s?s.split(""):["x","y","z"];break;case"d":t.drag=s?s.split(""):["x","y","z"];break;case"r":t.rotate={enabled:!0,step:s&&!isNaN(Number(s))?Number(s):null};break;case"c":t.corners=!s||s.split("")}})),t}(o):{axis:["x","y","z"]},A=a.axis||[];if(A.includes("x")&&(this.asseX.visible=!0),A.includes("y")&&(this.asseY.visible=!0),A.includes("z")&&(this.asseZ.visible=!0),a.rotate&&a.rotate.enabled&&(this.rotateHandler.visible=!0),a.corners){let t={r:16711680,g:65280,b:255}[a?.corners[0]??"y"]??255;this.corners.forEach(((i,r)=>{const o=new e.Vector3(1&r?s.x:n.x,2&r?s.y:n.y,4&r?s.z:n.z);i.position.copy(o.clone().sub(n)),i.material.color.set(t),i.visible=!0}))}const l=a.drag||[];if(l.includes("z")){const t=new e.Vector3((n.x+s.x)/2-n.x,0,s.z-n.z);this.draggerZ.position.copy(t),this.draggerZ.visible=!0}if(l.includes("y")){const t=new e.Vector3(0,0,(n.z+s.z)/2-n.z);this.draggerY.position.copy(t),this.draggerY.visible=!0}if(l.includes("x")){const t=new e.Vector3(s.x-n.x,0,(n.z+s.z)/2-n.z);this.draggerX.position.copy(t),this.draggerX.visible=!0}}update(t){if(!t)return;const i=new e.Vector3;this.grp.getWorldPosition(i);const n=new e.Vector3;t.getWorldPosition(n);let s=n.distanceTo(i);const r=.05*s,o=.06*s,a=.07*s,A=.04*s;this.asseX.scale.set(r,r,r),this.asseY.scale.set(r,r,r),this.asseZ.scale.set(r,r,r),this.rotateHandler.scale.set(A,A,A),this.corners.forEach((e=>e.scale.set(o,o,o))),this.draggerX.scale.set(a,a,a),this.draggerY.scale.set(a,a,a),this.draggerZ.scale.set(a,a,a)}},creaDragger:creaDragger,creaRotateHandler:creaRotateHandler,creaCorner:creaCorner,creaAsse:creaAsse}}function d3dview(e={}){const{THREE:t,post:i,GLTFExporter:n,RGBELoader:s,SAOPass:r}=e,{createSAOPass:o,updateSAOPass:a}=function ssao(e){return{createSAOPass:function createSAOPass({composer:t,scene:i,camera:n,renderer:s}){const r=new e(i,n,!1,!0);return r.enabled=!1,r.params.output=0,r.params.saoBias=.06,r.params.saoIntensity=.14,r.params.saoScale=1.6,r.params.saoKernelRadius=4,r.params.saoMinResolution=0,r.params.saoBlur=!0,r.params.saoBlurRadius=11,r.params.saoBlurStdDev=4,r.params.saoBlurDepthCutoff=.0015,t.addPass(r),r},updateSAOPass:function updateSAOPass(e,t){const i=t/2;e.params.saoScale=4*i,e.params.saoKernelRadius=6*i}}}(r),{Picker:A,creaDragger:l,creaRotateHandler:c,creaCorner:h,creaAsse:p}=picker(t),{initHdri:u,setHdri:g,removeHdri:d,disposeHdri:f,refreshScene:m}=function hdri(e,t,i,n){let s,r=null,o=null;return{refreshScene:function refreshScene(t,i,s,r,o){if(!r)return;if(i.length=0,r.traverse((e=>{e.userData.pickvariant&&i.push(e),e.isMesh&&(e.castShadow=o,e.receiveShadow=o,e.material&&e.material.isMeshStandardMaterial&&null==e.material.envMapIntensity&&(e.material.envMapIntensity=.6),e.layers.enable(0),e.layers.enable(1),e.layers.enable(2),e.layers.enable(9))})),s){const t=(new e.Box3).setFromObject(r);if(!t.isEmpty()){const i=t.getSize(new e.Vector3),r=Math.max(i.x,i.y,i.z);n(s,r)}}const a=t?.userData?.dirLight;a&&o&&(a.shadow.needsUpdate=!0)},disposeHdri:function disposeHdri(){s&&(s.dispose(),s=null)},removeHdri:function removeHdri(e){e&&(e.environment=null),r&&(r.dispose(),r=null),o&&(o.dispose(),o=null)},setHdri:async function setHdri(n,a){if(!n||!a||!s)return;let A;A=i._cdn?`${i._cdn}__/hdr/${n}`:i.fullget("mufiles/gethdr",{name:n});let l=new Promise(((i,n)=>{(new t).load(A,(t=>{t.mapping=e.EquirectangularReflectionMapping;const n=s.fromEquirectangular(t),r=n.texture;t.dispose(),i({envMap:r,rt:n})}),void 0,(e=>{console.error("Errore caricamento HDRI:",e),i(null)}))}));const c=await l;c&&(r&&(r.dispose(),r=null),o&&(o.dispose(),o=null),r=c.envMap,o=c.rt,a.environment=r,a.backgroundBlurriness=.4)},initHdri:function initHdri(t,i){if(s&&s.dispose(),s=new e.PMREMGenerator(t),s.compileEquirectangularShader(),i){const t=new e.DirectionalLight(16777215,.8);t.position.set(-20,10,20),t.castShadow=!1,t.castShadow=!0,t.shadow.mapSize.set(1024,1024),t.shadow.bias=-1e-4,t.shadow.normalBias=.02;const n=20;t.shadow.camera.left=-20,t.shadow.camera.right=n,t.shadow.camera.top=n,t.shadow.camera.bottom=-20,t.shadow.camera.near=.5,t.shadow.camera.far=50,i.add(t);const s=new e.AmbientLight(16777215,.1);i.add(s),i.userData.dirLight=t,i.userData.ambLight=s}}}}(t,s,i,a),{destroyFakeShadow:I,initFakeShadow:b,refreshFakeShadow:y}=function ombraterra(e){return{destroyFakeShadow:function destroyFakeShadow(e){e&&(e.shadowRT?.dispose?.(),e.shadowPlane?.geometry?.dispose?.(),e.shadowPlane?.material?.dispose?.(),e.shadowScene?.traverse((e=>{e.geometry?.dispose?.(),e.material?.dispose?.()})))},initFakeShadow:function initFakeShadow(t){if(!t)return null;const i=(new e.Box3).setFromObject(t),n=new e.Vector3;i.getSize(n);const s=new e.Vector3;i.getCenter(s);const r=new e.OrthographicCamera(-n.x/2,n.x/2,n.z/2,-n.z/2,.001,50);r.position.set(s.x,10,s.z),r.up.set(0,0,-1),r.lookAt(s);const o=new e.WebGLRenderTarget(256,256,{minFilter:e.LinearFilter,magFilter:e.LinearFilter,format:e.RGBAFormat}),a=t.clone(!0);a.traverse((t=>{t.isMesh&&(t.material=new e.MeshBasicMaterial({color:0,transparent:!1}))})),a.scale.y*=-1;const A=(new e.Box3).setFromObject(a);a.position.y-=A.min.y;const l=new e.Scene;l.add(a);const c=new e.PlaneGeometry(1.15*n.x,1.15*n.z),h=new e.Mesh(c,new e.MeshBasicMaterial({map:o.texture,transparent:!0,opacity:.35}));return h.rotation.x=-Math.PI/2,h.position.set(s.x,i.min.y+.001,s.z),h.name="_fakeshadow",h.material=new e.MeshBasicMaterial({map:o.texture,color:0,transparent:!0,opacity:.45,blending:e.MultiplyBlending,depthWrite:!1}),h.material.needsUpdate=!0,a.traverse((t=>{t.isMesh&&(t.material=new e.MeshBasicMaterial({color:0,side:e.DoubleSide,transparent:!1}))})),{shadowPlane:h,shadowRT:o,shadowCam:r,shadowScene:l}},refreshFakeShadow:function refreshFakeShadow(t,{shadowRT:i,shadowCam:n,shadowScene:s}){if(!t||!i)return;s.updateMatrixWorld(!0);const r=new e.Color;t.getClearColor(r);const o=t.getClearAlpha?.()??1;t.setRenderTarget(i),t.setClearColor(16777215,1),t.clear(!0,!0,!0),t.render(s,n),t.setRenderTarget(null),t.setClearColor(r,o)}}}(t),{computebbox:C,zoomatutto:B,resetCameraView:E}=function camera(e,t){function computebbox(t){if(!t)return;const i=new e.Box3;return t.updateWorldMatrix(!0,!0),function visita(e){if(!e.userData?.ignoreTraverse&&!1!==e.visible){(e.isMesh||e.isLine||e.isLine2)&&i.expandByObject(e);for(const t of e.children)visita(t)}}(t),i.isEmpty()?null:i}return{computebbox:computebbox,zoomatutto:function zoomatutto(i,n,s,r=100,o=100,a=void 0){if(!i)return;const A=computebbox(i);if(!A)return;if(A.isEmpty())return;const l=A.getCenter(new e.Vector3),c=A.getSize(new e.Vector3),h=r/o;if(a){const e=Math.max(c.x,c.y,c.z);t(a,e)}if(n.isPerspectiveCamera){let t;const i=e.MathUtils.degToRad(n.fov),r=2*Math.atan(Math.tan(i/2)*h),o=(new e.Vector3).subVectors(n.position,l).normalize(),a=n.up.clone().normalize(),c=(new e.Vector3).crossVectors(o,a).normalize(),p=[new e.Vector3(A.min.x,A.min.y,A.min.z),new e.Vector3(A.min.x,A.min.y,A.max.z),new e.Vector3(A.min.x,A.max.y,A.min.z),new e.Vector3(A.min.x,A.max.y,A.max.z),new e.Vector3(A.max.x,A.min.y,A.min.z),new e.Vector3(A.max.x,A.min.y,A.max.z),new e.Vector3(A.max.x,A.max.y,A.min.z),new e.Vector3(A.max.x,A.max.y,A.max.z)];let u=0,g=1/0,d=-1/0;for(const t of p){const n=(new e.Vector3).subVectors(t,l),s=n.dot(a),A=n.dot(c),h=n.dot(o),p=Math.abs(s)/Math.tan(i/2),f=Math.abs(A)/Math.tan(r/2),m=Math.max(p,f)+Math.abs(h);m>u&&(u=m),h<g&&(g=h),h>d&&(d=h)}t=1*u;const f=.5*Math.max(.001,d-g);n.position.copy(l).addScaledVector(o,t);const m=8;n.near=.01,n.far=Math.max(1,t+1.2*f+m),n.updateProjectionMatrix(),s.minDistance=n.near,s.maxDistance=n.far-4,n.updateProjectionMatrix(),n.lookAt(l)}else if(n.isOrthographicCamera){let e=1*c.x,t=1*c.y;e/t<h?e=t*h:t=e/h,n.left=-e/2,n.right=e/2,n.top=t/2,n.bottom=-t/2,n.zoom=1,n.updateProjectionMatrix(),n.position.set(l.x,l.y,n.position.z),n.lookAt(l.x,l.y,l.z)}s&&(s.target.copy(l),s.update())},resetCameraView:function resetCameraView(t,i,n,s,r,o="top"){if(!t)return;const a=(new e.Box3).setFromObject(t),A=new e.Vector3,l=new e.Vector3;a.getCenter(A),a.getSize(l);let c,h,p=new e.Vector3,u=new e.Vector3;switch(o){case"top":case"bottom":c=l.x,h=l.z,p.set(A.x,a.max.y+("top"==o?10:-10),A.z),u.set(0,0,"top"==o?-1:1);break;case"front":case"back":c=l.x,h=l.y,p.set(A.x,A.y,a.max.z+("front"==o?10:-10)),u.set(0,1,0);break;case"left":case"right":c=l.z,h=l.y,p.set(a.max.x+("right"==o?10:-10),A.y,A.z),u.set(0,1,0);break;default:return void console.warn("Vista non riconosciuta:",o)}const g=s/(1.05*c),d=r/(1.05*h),f=Math.min(g,d),m=s/(2*f),I=r/(2*f);i.left=-m,i.right=m,i.top=I,i.bottom=-I,i.near=.1,i.far=100,i.zoom=1,i.updateProjectionMatrix(),i.position.copy(p),i.up.copy(u),i.lookAt(A),n.object=i,n.target.copy(A),n.update()}}}(t,a),{exportGLB:x}=function exportscene(e,t){return{exportGLB:async function exportGLB(i,n,s={}){if(!i)return;n||(n="scena.glb");const r=new t,o=new e.Layers;o.enable(0),o.enable(1),o.enable(2);const a=function cloneFiltered(e){if(!o.test(e.layers))return null;const t=e.clone(!1);t.userData={};for(let i of e.children){const e=cloneFiltered(i);e&&t.add(e)}return t}(i);if(!a)return;const A={binary:!0,embedImages:!0,onlyVisible:!0,userData:!1,...s};try{const e=await new Promise(((e,t)=>{r.parse(a,e,t,A)})),t=new Blob([e],{type:"application/octet-stream"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,s.click(),URL.revokeObjectURL(i)}catch(e){console.error("Errore durante l’esportazione:",e)}},extractPathTracingScene:function extractPathTracingScene(t){const i=new e.Scene;t.updateMatrixWorld(!0),t.environment&&(i.environment=t.environment);const n=new e.Layers;return n.enable(0),n.enable(1),n.enable(2),t.traverse((t=>{if(n.test(t.layers)&&t.isMesh&&n.test(t.layers)&&(Array.isArray(t.material)?t.material.every((e=>e.isMeshStandardMaterial||e.isMeshPhysicalMaterial)):t.material.isMeshStandardMaterial||t.material.isMeshPhysicalMaterial)){const n=t.geometry.clone(),s=Array.isArray(t.material)?t.material.map((e=>e.clone())):t.material.clone(),r=new e.Mesh(n,s);t.updateWorldMatrix(!0,!1),t.getWorldPosition(r.position),t.getWorldQuaternion(r.quaternion),t.getWorldScale(r.scale),i.add(r)}})),i}}}(t,n);return{createSAOPass:o,updateSAOPass:a,resetCameraView:E,computebbox:C,zoomatutto:B,exportSceneImage:exportSceneImage,exportGLB:x,stati:Ze,handleMovimenti:handleMovimenti,handlePick:handlePick,checkhoverables:checkhoverables,Picker:A,creaDragger:l,creaRotateHandler:c,creaCorner:h,creaAsse:p,initHdri:u,setHdri:g,removeHdri:d,disposeHdri:f,refreshScene:m,destroyFakeShadow:I,initFakeShadow:b,refreshFakeShadow:y}}function joinlinestoshapes(e){let t=[];for(let i of e)for(let e of i.lines){let n=new Linea2(e.p1,e.p2);n.rotate(-i.ang),n.move(i.pos.x,i.pos.z),n.valid=!0,t.push(n)}const i=.1;function samepoint(e,t){return Math.abs(e.x-t.x)+Math.abs(e.y-t.y)<i}for(let e=0;e<t.length;e++){if(!t[e].valid)continue;if(t[e].len<i){t[e].valid=!1;continue}const n=t[e];for(let s=e+1;s<t.length;s++){const e=t[s];if(!e.valid)continue;if(!n.isparallela(e))continue;if(!n.isCollineare(e))continue;n.a1b=e.onsegment(n.p1,i),n.a2b=e.onsegment(n.p2,i),n.b1a=n.onsegment(e.p1,i),n.b2a=n.onsegment(e.p2,i);const{x:r,y:o}=n.direzione,{x:a,y:A}=e.direzione;if(r*a+o*A>0)if(n.b1a&&n.b2a)e.valid=!1;else{if(n.a1b&&n.a2b){n.valid=!1;break}if(n.a1b&&n.b2a){let i=new Linea2(e.p1,n.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}if(n.a2b&&n.b1a){let i=new Linea2(n.p1,e.p2);i.valid=!0,t.push(i),n.valid=!1,e.valid=!1;break}}else{const s=n.proiezionet(n.p1).t,r=n.proiezionet(n.p2).t,o=n.proiezionet(e.p1).t,a=n.proiezionet(e.p2).t,A=Math.min(s,r),l=Math.max(s,r),c=Math.min(o,a),h=Math.max(o,a),p=Math.max(A,c),u=Math.min(l,h);if(u>p+i){if(A<p){let e=new Linea2(n.puntot(A),n.puntot(p));e.valid=!0,t.push(e)}if(l>u){let e=new Linea2(n.puntot(l),n.puntot(u));e.valid=!0,t.push(e)}if(c<p){let e=new Linea2(n.puntot(c),n.puntot(p));e.valid=!0,t.push(e)}if(h>u){let e=new Linea2(n.puntot(h),n.puntot(u));e.valid=!0,t.push(e)}n.valid=!1,e.valid=!1;break}}}}t=t.filter((e=>e.valid)).map((e=>getshape().frompt([e.p1,e.p2])));for(let e=0;e<t.length;e++){let i=t[e],n=!0;for(;n;){n=!1;for(let s=e+1;s<t.length;){let e=t[s];samepoint(i.pt[0],e.pt[0])?(e.pt.reverse(),i.pt.unshift(...e.pt.slice(0,-1)),t.splice(s,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[e.pt.length-1])?(e.pt.reverse(),i.pt.push(...e.pt.slice(1)),t.splice(s,1),n=!0):samepoint(i.pt[0],e.pt[e.pt.length-1])?(i.pt.unshift(...e.pt.slice(0,-1)),t.splice(s,1),n=!0):samepoint(i.pt[i.pt.length-1],e.pt[0])?(i.pt.push(...e.pt.slice(1)),t.splice(s,1),n=!0):s++}}}return t}function checkmovedata(e,t,i){return{l:e((t=(t||"").split(","))[0]),a:e(t[1]),p:e(t[2]),rot:e(t[3]),annulla:e(t[4]),pars:i?.spars||""}}async function valutagrafica(e,t,i,n,s){let{getcolonne:r,muCalc:o,muEval:a,tipifree:A}=e.muvalutatore;i||(i={});for(let i of["l","a","p"]){!e.vari.var(i)&&t.dims&&e.vari.add(i,String(t.dims[i].val||100))}let l=new Set;const c=["sl","sa","sp","ax","ay","az","scx","scy","scz","scale"];let h,p=!1,u=await a(e,t,t.codice,{leveleval:0,checkheader:e=>{let{variante:i}=e;if(Array.isArray(t.head)){let e=t.head.find((e=>e.cod==i));p=!!e}},grafica:async t=>{let s,r,A,l,h,{id:p,pars:u,parametri:g,macro:d,options:f,vari:m}=t,I=!!(d&&d.head&&d.head.length),b={l:e.vari.var("l"),a:e.vari.var("a"),p:e.vari.var("p")};const y=["l","a","p","#d",...c];for(let t of y){let i=e.vari.dictionary[t];i&&(b[t]=i)}async function _parsepars(t,i){let n,a,c=/^#(d|des|descrizione)\s*=\s*(.*)\s*$/im.exec(t);if(c)n="#d",a=await e.vari.valuta(c[2]);else{let e=await m.parametrokeyval(t);n=e.k,a=e.v}n&&!h[n]&&(h[n]=!0,y.includes(n)?"#d"==n?l=a:("string"==typeof a&&(a=o(a)),["l","a","p"].includes(n)&&e.vari.add(n,String(a)),r[n]=a,A=!0):"string"==typeof a?s.push(`${n}=${a}`):e.vari.add(n,a))}let C,B;if(s=[],r={},A=!1,l="",h={},n&&n.keys&&n.keys[p]&&(C=n.keys[p].pars,C))for(let t in C){let i=e.vari.dictionary[t];i&&(b[t]=i),await _parsepars(`${t}=${C[t]}`)}if(u&&u.length)for(const e of u)await _parsepars(e);if(g&&g.length)for(const e of g)await _parsepars(e);if(d&&d.head&&d.head.length){B=d.head.find((e=>"_move"==e.cod));let e=d.head.filter((e=>!["g","p"].includes(e.t)&&"_move"!=e.cod));for(const t of e)await _parsepars(t.cod)}let E={iscad:A,isheader:I,name:d.name,des:l,leveleval:f.leveleval};I&&p&&(E.id=p),A&&(r.l?e.vari.add("l",String(r.l)):r.l=o(e.vari.var("l")),r.a?e.vari.add("a",String(r.a)):r.a=o(e.vari.var("a")),r.p?e.vari.add("p",String(r.p)):r.p=o(e.vari.var("p")),E.cadv=r),await d.impostaparametri(g,s,!0,C);let x=i[p];p&&I&&x&&x.pars&&(E.pars=x.pars,f.leveleval++,await d.setparametri(x.pars));let w=e.vari.var("_rootnode");if(e.vari.add("_rootnode","0"),E.rows=await a(e,d,d.codice,f),e.vari.add("_rootnode",w),p&&I&&(E.spars=d.getparametri()),A){B?E.cadv.move=checkmovedata(o,e.vari.var("_move"),B):delete E.cadv.move;for(let t in b)e.vari.dictionary[t]=b[t]}return E},parsefnpunto:async e=>{let{dati:t,vari:i,id:n,output:s}=e;t=t.trim();let a=t.indexOf(" "),A=t.indexOf(",");A>0&&a>0&&A<a&&(a=A);let h,p,u={},g={};a>1?(h=t.slice(1,a),p=r(t.slice(a+1))):(h=t.slice(1),p=[]),l.has(h)||l.add(h);for(let e of p){let{k:t,v:n}=await i.parametrokeyval(e);t&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)&&(u[t]=n||"")}for(let e of["l","a","p"])u[e]||(u[e]=i.var(e));let d=Object.keys(u);for(let e of c)d.includes(e)&&(g[e]=o(u[e]),g[e]&&(u[e]=g[e]));s.push({t:"fn",fn:h,id:n,pars:u,p2:g})}});for(let i of["l","a","p"])if(t.dims&&t.dims[i].val!=parseFloat(e.vari.var(i))){h=!0;break}return(p||h&&"function"==typeof s)&&await s(h,p),{oo:u,vari:e.vari.dump(!0),fnlist:[...l]}}function ismacro(e){return"object"==typeof e&&e?.name&&e.rows}function isfn(e){return"object"==typeof e&&"fn"==e?.t}function getnodebyid(e,t){let i;return t&&t.rows&&function _getnode(t){for(let n of t){if(ismacro(n)){if(n.id==e)return void(i=n);n.rows&&_getnode(n.rows)}if(i)return}}(t.rows),i}function getsubrules(e){let t=[];return t.push({id:"",level:0,name:"home"}),function _xfiltrati(e,i){if(e.rows&&e.rows.length)for(let n of e.rows)ismacro(n)&&(n.id&&n.isheader?(t.push({id:n.id,name:n.name,des:n.des||"",spec:n.pars?1:0,level:i}),_xfiltrati(n,i+1)):_xfiltrati(n,i))}(e,1),t}function getdumpmacro(e){let t=[];return function _dumpnodo(e){if(e.rows&&e.rows.length)for(let i of e.rows)if(ismacro(i)){i.name;let e=[];if(i.iscad&&i.cadv)for(let t in i.cadv){let n=i.cadv[t];"number"==typeof n&&n&&e.push(`${t}=${n}`)}if(i.pars)for(let t in i.pars){let n=i.pars[t];e.push(`${t}=${n}`)}e.length&&t.push(`--\x3e ${i.name} ${e.join(",")}`),_dumpnodo(i),e.length&&t.push("<--")}else isfn(i)?t.push(`FN: ${i.fn} ${JSON.stringify(i.pars)}`):"string"==typeof i&&i.length&&t.push(i)}(e),t.join("\n")}function konvautils(e){function renderizzaSuLayer(t,i,n,{inverse:s=!0,height:r=600,strokescale:o=2,fontsize:a=2,attivo:A=!0,opacita_inattivo:l=.35}={}){if(!n||!n.vec||!n.vec.length)return;"boolean"==typeof n.attivo&&(A=n.attivo);let c,h=!1,p=!0,u=0;if(s){const f=new e.Group({scaleY:-1,y:r});i.add(f),c=f}else p=!1,c=new e.Group;i.add(c),c.opacity(A?1:l);const g=[c];let d=[];function getTesto(t,i,n,s,r,o,a,A){const l=new e.Text({scaleY:s?A?-1:1:A?1:-1,scaleX:n?-1:1,x:0,y:0,text:t,fontSize:6*i,fill:r||"black"}),c=l.width(),h=l.height(),p=function findFreeY(e,t,i,n){let s=t,r=0;for(;d.some((t=>Math.abs(e-t.x)<i&&Math.abs(s-t.y)<n))&&(s-=1.01*n,!(++r>10)););return d.push({x:e,y:s,width:i,height:n}),s}(o,a,c,h);return l.x(o),l.y(p),A||l.offset({x:c/2,y:h/2}),l}for(let m of[0,1]){function drawobjects(i,n){for(const r of i)switch(r.type){case"group":if(n?.[r.name]){let e=n[r.name];e.vec?.length&&++u<20&&(drawobjects(e.vec,e.gr),u--)}break;case"push":{const{op:t}=r;let i={x:r.x||0,y:r.y||0,rotation:r.rot||t.rot||0,scaleX:t.mirrorx?-1:t.scalex||t.scale||1,scaleY:t.mirrory?-1:t.scaley||t.scale||1};i.scaleX<0&&(h=!h),i.scaleY<0&&(p=!p);const n=new e.Group(i);c.add(n),g.push(n),c=n;break}case"pop":if(g.length>1){const e=g.pop();e.getAttr("scaleX")<0&&(h=!h),e.getAttr("scaleY")<0&&(p=!p),c=g[g.length-1]}break;case"img":if(0===m){const{x:i,y:n}=r.l.p1,o=r.l.p2.x-i,a=r.l.p2.y-n;let A=t.get(r.img);if(!A){A=new window.Image,A.src=r.img,t.set(r.img,A);const l=c,h=i,p=n,u=o,g=a,d=s;A.addEventListener("load",(()=>{let t=l.findOne(".img");t?(t.image(A),t.setAttrs({x:h,y:d?p+g:p,width:u,height:g,scaleY:d?-1:1})):l.add(new e.Image({name:"img",x:h,y:d?p+g:p,image:A,width:u,height:g,scaleY:d?-1:1,listening:!1})),l.getLayer().batchDraw()}))}if(A.complete){let t=c.findOne(".img");t?(t.image(A),t.setAttrs({x:i,y:s?n+a:n,width:o,height:a,scaleY:s?-1:1})):c.add(new e.Image({name:"img",x:i,y:s?n+a:n,image:A,width:o,height:a,scaleY:s?-1:1,listening:!1}))}}break;case"line":if(0===m)c.add(new e.Line({points:[r.l.p1.x,r.l.p1.y,r.l.p2.x,r.l.p2.y],stroke:r.color||"black",strokeWidth:(r.spessore||1)*o}));else if(r.id&&-1!=r.id){const e=(r.l.p1.x+r.l.p2.x)/2,t=(r.l.p1.y+r.l.p2.y)/2+6*a;c.add(getTesto(r.id,a,h,p,"black",e,t,s))}break;case"rect":case"space":case"recta":if(0===m){const{x:t,y:i}=r.l.p1,n=r.l.p2.x-t,s=r.l.p2.y-i;c.add("space"==r.type?new e.Rect({x:t,y:i,width:n,height:s,stroke:null,fill:null,listening:!1,hitStrokeWidth:0}):new e.Rect({x:t,y:i,width:n,height:s,stroke:"rect"===r.type?r.color||"black":void 0,fill:"recta"===r.type?r.color||"rgba(0,0,255,0.2)":r.fill,strokeWidth:(r.spessore||1)*o}))}break;case"point":if(1===m&&(c.add(new e.Circle({x:r.p.x,y:r.p.y,radius:r.spessore||8,fill:r.color||"black"})),r.id&&-1!=r.id)){const e=a;c.add(getTesto(r.id,e,h,p,r.color||"black",r.p.x+2*e,r.p.y+6*e,s))}break;case"shapelin":case"shape":case"area":0===m&&r.s?.length&&c.add(new e.Line({points:r.s.flatMap((e=>[e.x,e.y])),closed:"shapelin"!==r.type,fill:"area"===r.type?r.color||"rgba(0,0,255,0.2)":r.fill,stroke:r.color||"black",strokeWidth:(r.spessore||1)*o}));break;case"text":if(1===m&&r.text){const e=(r.scalafont||1)*a,t=r.color||"black";c.add(testo(r.x,r.y,r.text,e,t,r.fill,h,p))}break;case"quota":{let e=(r.scalafont||1)*a;r.text||(r.text=Math.sqrt((r.x2-r.x1)**2+(r.y2-r.y1)**2).toFixed(1)),c.add(quotalineare(r.x1,r.y1,r.x2,r.y2,r.d,r.text+"",e,r.color,r.spessore,h,p));break}case"qpunto":{let e=(r.scalafont||1)*a;c.add(quotapunto(r.x1,r.y1,r.text,r.d,e,r.color,r.spessore));break}}}drawobjects(n.vec,n.gr)}}function testo(t,i,n,s,r="black",o="white",a,A,l){const c=new e.Group;try{const l=new e.Text({scaleY:A?-1:1,scaleX:a?-1:1,x:t,y:i,text:n,fontSize:6*s,fill:r,align:"center",verticalAlign:"middle",lineHeight:1.2}),h=l.getTextWidth();l.width(h);const p=l.getHeight();l.offsetX(h/2),l.offsetY(p/2),o&&c.add(new e.Rect({x:t,y:i,width:h+8,height:p,fill:o,cornerRadius:4,offsetX:h/2+4,offsetY:p/2,listening:!1,scaleY:A?-1:1,scaleX:a?-1:1})),c.add(l)}catch(e){console.log(e.message)}return c}function quotalineare(t,i,n,s,r,o,a,A="black",l=1,c,h){const p=n-t,u=s-i,g=Math.sqrt(p*p+u*u);if(0===g)return new e.Group;const d=-u/g*r,f=p/g*r,m=[t+d,i+f],I=[n+d,s+f],b=(m[0]+I[0])/2,y=(m[1]+I[1])/2,C=new e.Group;C.add(new e.Line({points:[t,i,t+1.2*d,i+1.2*f],stroke:A,strokeWidth:l})),C.add(new e.Line({points:[n,s,n+1.2*d,s+1.2*f],stroke:A,strokeWidth:l})),C.add(new e.Line({points:[...m,...I],stroke:A,strokeWidth:l}));const B=o.length*a*4,E=6*a,x=180*Math.atan2(u,p)/Math.PI;return C.add(new e.Rect({x:b,y:y,width:B,height:E,fill:"white",offsetX:B/2,offsetY:E/2,rotation:x,listening:!1,scaleY:h?-1:1,scaleX:c?-1:1})),C.add(new e.Text({scaleY:h?-1:1,scaleX:c?-1:1,x:b,y:y,text:o,fontSize:6*a,fill:A,align:"center",verticalAlign:"middle",width:B,height:E,offsetX:B/2,offsetY:E/2,rotation:x})),C}function quotapunto(t,i,n,s,r,o="black",a=1,A,l){const c=t+s,h=i+s,p=new e.Group;return p.add(new e.Line({points:[t,i,c,h],stroke:o,strokeWidth:a})),p.add(new e.Text({x:c,y:h,text:n,fontSize:6*r,fill:o,offsetX:n.length*r*2,offsetY:3*r})),p}return{renderizzaSuLayer:renderizzaSuLayer,saveimg_konva:async function saveimg_konva(t,i,n,s,r,o=10,a=1,A=2){let l=`${t}${n.name}`;const c=document.createElement("div");c.style.position="absolute",c.style.left="-10000px",c.style.top="-10000px",c.style.width=s+"px",c.style.height=r+"px",document.body.appendChild(c),console.log(n);const h=new e.Stage({container:c,width:s,height:r}),p=new e.Layer;h.add(p),renderizzaSuLayer(i,p,n,{height:r,strokescale:a,fontsize:A}),p.draw();const u=p.children[0].getClientRect({skipTransform:!1}),g=(s-2*o)/u.width,d=(r-2*o)/u.height,f=Math.min(g,d),m=-u.x*f+o+(s-u.width*f-2*o)/2,I=-u.y*f+o+(r-u.height*f-2*o)/2;h.scale({x:f,y:f}),h.position({x:m,y:I}),p.draw();const b=h.toDataURL({pixelRatio:1,mimeType:"image/webp",quality:.95});h.destroy(),document.body.removeChild(c);{const e=b.split(","),t=e[0].match(/:(.*?);/)[1],i=atob(e[1]),n=new Uint8Array(i.length);for(let e=0;e<i.length;e++)n[e]=i.charCodeAt(e);return new File([n],`${l}.webp`,{type:t})}}}}var $e=class Handle{static seed=0;static next(){return(++Handle.seed).toString(16).toUpperCase()}static peek(){return(Handle.seed+1).toString(16).toUpperCase()}};const et=$e;var tt=class DatabaseObject{constructor(e=null){this.handle=et.next(),this.ownerObjectHandle="0",this.subclassMarkers=[],e&&(Array.isArray(e)?this.subclassMarkers.push(...e):this.subclassMarkers.push(e))}tags(e){e.push(5,this.handle),e.push(330,this.ownerObjectHandle);for(const t of this.subclassMarkers)e.push(100,t)}};const it=tt;var nt=class LineType extends it{constructor(e,t,i){super(["AcDbSymbolTableRecord","AcDbLinetypeTableRecord"]),this.name=e,this.description=t,this.elements=i}tags(e){e.push(0,"LTYPE"),super.tags(e),e.push(2,this.name),e.push(3,this.description),e.push(70,0),e.push(72,65),e.push(73,this.elements.length),e.push(40,this.getElementsSum()),this.elements.forEach((t=>{e.push(49,t),e.push(74,0)}))}getElementsSum(){return this.elements.reduce(((e,t)=>e+Math.abs(t)),0)}};const st=tt;var rt=class Layer extends st{constructor(e,t,i=null){super(["AcDbSymbolTableRecord","AcDbLayerTableRecord"]),this.name=e,this.colorNumber=t,this.lineTypeName=i,this.shapes=[],this.trueColor=-1}tags(e){e.push(0,"LAYER"),super.tags(e),e.push(2,this.name),-1!==this.trueColor?e.push(420,this.trueColor):e.push(62,this.colorNumber),e.push(70,0),this.lineTypeName&&e.push(6,this.lineTypeName),e.push(390,1)}setTrueColor(e){this.trueColor=e}addShape(e){this.shapes.push(e),e.layer=this}getShapes(){return this.shapes}shapesTags(e,t){for(const i of this.shapes)i.ownerObjectHandle=e.handle,i.tags(t)}};const ot=tt;var at=class Table extends ot{constructor(e){super("AcDbSymbolTable"),this.name=e,this.elements=[]}add(e){e.ownerObjectHandle=this.handle,this.elements.push(e)}tags(e){e.push(0,"TABLE"),e.push(2,this.name),super.tags(e),e.push(70,this.elements.length),this.elements.forEach((t=>{t.tags(e)})),e.push(0,"ENDTAB")}};const At=tt,lt=at;var ct=class DimStyleTable extends lt{constructor(e){super(e),this.subclassMarkers.push("AcDbDimStyleTable")}tags(e){e.push(0,"TABLE"),e.push(2,this.name),At.prototype.tags.call(this,e),e.push(70,this.elements.length),e.push(71,1);for(const t of this.elements)t.tags(e);e.push(0,"ENDTAB")}};const ht=tt;var pt=class TextStyle extends ht{fontFileName="txt";constructor(e){super(["AcDbSymbolTableRecord","AcDbTextStyleTableRecord"]),this.name=e}tags(e){e.push(0,"STYLE"),super.tags(e),e.push(2,this.name),e.push(70,0),e.push(40,0),e.push(41,1),e.push(50,0),e.push(71,0),e.push(42,1),e.push(3,this.fontFileName),e.push(4,"")}};const ut=tt;var gt=class Viewport extends ut{constructor(e,t){super(["AcDbSymbolTableRecord","AcDbViewportTableRecord"]),this.name=e,this.height=t}tags(e){e.push(0,"VPORT"),super.tags(e),e.push(2,this.name),e.push(40,this.height),e.push(70,0)}};const dt=tt;var ft=class AppId extends dt{constructor(e){super(["AcDbSymbolTableRecord","AcDbRegAppTableRecord"]),this.name=e}tags(e){e.push(0,"APPID"),super.tags(e),e.push(2,this.name),e.push(70,0)}};const mt=tt;var It=class Block extends mt{constructor(e){super(["AcDbEntity","AcDbBlockBegin"]),this.name=e,this.end=new mt(["AcDbEntity","AcDbBlockEnd"]),this.recordHandle=null}tags(e){e.push(0,"BLOCK"),super.tags(e),e.push(2,this.name),e.push(70,0),e.point(0,0),e.push(3,this.name),e.push(1,""),e.push(0,"ENDBLK"),this.end.tags(e)}};const bt=tt;var yt=class BlockRecord extends bt{constructor(e){super(["AcDbSymbolTableRecord","AcDbBlockTableRecord"]),this.name=e}tags(e){e.push(0,"BLOCK_RECORD"),super.tags(e),e.push(2,this.name),e.push(70,0),e.push(280,0),e.push(281,1)}};const Ct=tt;var Bt=class Dictionary extends Ct{constructor(){super("AcDbDictionary"),this.children={}}addChildDictionary(e,t){t.ownerObjectHandle=this.handle,this.children[e]=t}tags(e){e.push(0,"DICTIONARY"),super.tags(e),e.push(281,1);const t=Object.entries(this.children);for(const i of t){const[t,n]=i;e.push(3,t),e.push(350,n.handle)}const i=Object.values(this.children);for(const t of i)t.tags(e)}};const Et=tt;var xt=class Line extends Et{constructor(e,t,i,n){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.x2=i,this.y2=n}tags(e){e.push(0,"LINE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x1,this.y1),e.push(11,this.x2),e.push(21,this.y2),e.push(31,0)}};const Qt=tt;var wt=class Line3d extends Qt{constructor(e,t,i,n,s,r){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.z1=i,this.x2=n,this.y2=s,this.z2=r}tags(e){e.push(0,"LINE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x1,this.y1,this.z1),e.push(11,this.x2),e.push(21,this.y2),e.push(31,this.z2)}};const vt=tt;var Pt=class Arc extends vt{constructor(e,t,i,n,s){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.r=i,this.startAngle=n,this.endAngle=s}tags(e){e.push(0,"ARC"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(40,this.r),e.push(100,"AcDbArc"),e.push(50,this.startAngle),e.push(51,this.endAngle)}};const Dt=tt;var Mt=class Circle extends Dt{constructor(e,t,i){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.r=i}tags(e){e.push(0,"CIRCLE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(40,this.r)}};const St=tt;var Tt=class Cylinder extends St{constructor(e,t,i,n,s,r,o,a){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.z=i,this.r=n,this.thickness=s,this.extrusionDirectionX=r,this.extrusionDirectionY=o,this.extrusionDirectionZ=a}tags(e){e.push(0,"CIRCLE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y,this.z),e.push(40,this.r),e.push(39,this.thickness),e.push(210,this.extrusionDirectionX),e.push(220,this.extrusionDirectionY),e.push(230,this.extrusionDirectionZ)}};const Lt=tt,kt=["left","center","right"],_t=["baseline","bottom","middle","top"];var Rt=class Text extends Lt{constructor(e,t,i,n,s,r="left",o="baseline"){super(["AcDbEntity","AcDbText"]),this.x=e,this.y=t,this.height=i,this.rotation=n,this.value=s,this.hAlign=r,this.vAlign=o}tags(e){e.push(0,"TEXT"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(40,this.height),e.push(1,this.value),e.push(50,this.rotation),kt.includes(this.hAlign,1)||_t.includes(this.vAlign,1)?(e.push(72,Math.max(kt.indexOf(this.hAlign),0)),e.push(11,this.x),e.push(21,this.y),e.push(31,0),e.push(100,"AcDbText"),e.push(73,Math.max(_t.indexOf(this.vAlign),0))):e.push(100,"AcDbText")}};const Ft=tt;var Nt=class Polyline extends Ft{constructor(e,t=!1,i=0,n=0){super(["AcDbEntity","AcDbPolyline"]),this.points=e,this.closed=t,this.startWidth=i,this.endWidth=n}tags(e){e.push(0,"LWPOLYLINE"),super.tags(e),e.push(8,this.layer.name),e.push(6,"ByLayer"),e.push(62,256),e.push(370,-1),e.push(90,this.points.length),e.push(70,this.closed?1:0),this.points.forEach((t=>{const[i,n,s]=t;e.push(10,i),e.push(20,n),0===this.startWidth&&0===this.endWidth||(e.push(40,this.startWidth),e.push(41,this.endWidth)),void 0!==s&&e.push(42,s)}))}};const Ot=tt;var Gt=class Vertex extends Ot{constructor(e,t,i){super(["AcDbEntity","AcDbVertex","AcDb3dPolylineVertex"]),this.x=e,this.y=t,this.z=i}tags(e){e.push(0,"VERTEX"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y,this.z),e.push(70,32)}};const Yt=tt,Ut=$e,Xt=Gt;var qt=class Polyline3d extends Yt{constructor(e){super(["AcDbEntity","AcDb3dPolyline"]),this.verticies=e.map((e=>{const[t,i,n]=e,s=new Xt(t,i,n);return s.ownerObjectHandle=this.handle,s})),this.seqendHandle=Ut.next()}tags(e){e.push(0,"POLYLINE"),super.tags(e),e.push(8,this.layer.name),e.push(66,1),e.push(70,0),e.point(0,0),this.verticies.forEach((t=>{t.layer=this.layer,t.tags(e)})),e.push(0,"SEQEND"),e.push(5,this.seqendHandle),e.push(100,"AcDbEntity"),e.push(8,this.layer.name)}};const zt=tt;var Ht=class Face extends zt{constructor(e,t,i,n,s,r,o,a,A,l,c,h){super(["AcDbEntity","AcDbFace"]),this.x1=e,this.y1=t,this.z1=i,this.x2=n,this.y2=s,this.z2=r,this.x3=o,this.y3=a,this.z3=A,this.x4=l,this.y4=c,this.z4=h}tags(e){e.push(0,"3DFACE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x1,this.y1,this.z1),e.push(11,this.x2),e.push(21,this.y2),e.push(31,this.z2),e.push(12,this.x3),e.push(22,this.y3),e.push(32,this.z3),e.push(13,this.x4),e.push(23,this.y4),e.push(33,this.z4)}};const jt=tt;var Wt=class Point extends jt{constructor(e,t){super(["AcDbEntity","AcDbPoint"]),this.x=e,this.y=t}tags(e){e.push(0,"POINT"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y)}};const Jt=tt;var Kt=class Spline extends Jt{constructor(e,t=3,i=null,n=null,s=[]){if(super(["AcDbEntity","AcDbSpline"]),e.length<t+1)throw new Error(`For degree ${t} spline, expected at least ${t+1} control points, but received only ${e.length}`);if(null==i){i=[];for(let e=0;e<t+1;e++)i.push(0);for(let n=1;n<e.length-t;n++)i.push(n);for(let n=0;n<t+1;n++)i.push(e.length-t)}if(i.length!==e.length+t+1)throw new Error(`Invalid knot vector length. Expected ${e.length+t+1} but received ${i.length}.`);this.controlPoints=e,this.knots=i,this.fitPoints=s,this.degree=t,this.weights=n;const r=this.weights?1:0;this.type=0+4*r+8+0}tags(e){e.push(0,"SPLINE"),super.tags(e),e.push(8,this.layer.name),e.push(210,0),e.push(220,0),e.push(230,1),e.push(70,this.type),e.push(71,this.degree),e.push(72,this.knots.length),e.push(73,this.controlPoints.length),e.push(74,this.fitPoints.length),e.push(42,1e-7),e.push(43,1e-7),e.push(44,1e-10),this.knots.forEach((t=>{e.push(40,t)})),this.weights&&this.weights.forEach((t=>{e.push(41,t)})),this.controlPoints.forEach((t=>{e.point(t[0],t[1])}))}};const Vt=tt;var Zt=class Ellipse extends Vt{constructor(e,t,i,n,s,r,o){super(["AcDbEntity","AcDbEllipse"]),this.x=e,this.y=t,this.majorAxisX=i,this.majorAxisY=n,this.axisRatio=s,this.startAngle=r,this.endAngle=o}tags(e){e.push(0,"ELLIPSE"),super.tags(e),e.push(8,this.layer.name),e.point(this.x,this.y),e.push(11,this.majorAxisX),e.push(21,this.majorAxisY),e.push(31,0),e.push(40,this.axisRatio),e.push(41,this.startAngle),e.push(42,this.endAngle)}};var $t=class TagsManager{constructor(){this.lines=[]}point(e,t,i=0){this.push(10,e),this.push(20,t),this.push(30,i)}start(e){this.push(0,"SECTION"),this.push(2,e)}end(){this.push(0,"ENDSEC")}addHeaderVariable(e,t){this.push(9,`$${e}`),t.forEach((e=>{this.push(e[0],e[1])}))}push(e,t){this.lines.push(e,t)}toDxfString(){return this.lines.join("\n")}};const ei=nt,ti=rt,ii=at,ni=ct,si=pt,ri=gt,oi=ft,ai=It,Ai=yt,li=Bt,ci=xt,hi=wt,pi=Pt,ui=Mt,gi=Tt,di=Rt,fi=Nt,mi=qt,bi=Ht,yi=Wt,Ci=Kt,Bi=Zt,xi=$t,Qi=$e;class Drawing{constructor(){this.layers={},this.activeLayer=null,this.lineTypes={},this.headers={},this.tables={},this.blocks={},this.dictionary=new li,this.setUnits("Unitless");for(const e of Drawing.LINE_TYPES)this.addLineType(e.name,e.description,e.elements);for(const e of Drawing.LAYERS)this.addLayer(e.name,e.colorNumber,e.lineTypeName);this.setActiveLayer("0"),this.generateAutocadExtras()}addLineType(e,t,i){return this.lineTypes[e]=new ei(e,t,i),this}addLayer(e,t,i){return this.layers[e]=new ti(e,t,i),this}setActiveLayer(e){return this.activeLayer=this.layers[e],this}addTable(e){const t=new ii(e);return this.tables[e]=t,t}addBlock(e){const t=new ai(e);return this.blocks[e]=t,t}drawLine(e,t,i,n){return this.activeLayer.addShape(new ci(e,t,i,n)),this}drawLine3d(e,t,i,n,s,r){return this.activeLayer.addShape(new hi(e,t,i,n,s,r)),this}drawPoint(e,t){return this.activeLayer.addShape(new yi(e,t)),this}drawRect(e,t,i,n,s,r){const o=i-e,a=n-t;r=r||0;let A=null;return A=new fi(s?[[e+o-s,t,r],[e+o,t+s],[e+o,t+a-s,r],[e+o-s,t+a],[e+s,t+a,r],[e,t+a-s],[e,t+s,r],[e+s,t]]:[[e,t],[e,t+a],[e+o,t+a],[e+o,t]],!0),this.activeLayer.addShape(A),this}drawPolygon(e,t,i,n,s=0,r=!1){const o=2*Math.PI/i,a=[];let A=n;const l=s*Math.PI/180;r&&(A=n/Math.cos(Math.PI/i));for(let n=0;n<i;n++)a.push([e+A*Math.sin(l+n*o),t+A*Math.cos(l+n*o)]);return this.activeLayer.addShape(new fi(a,!0)),this}drawArc(e,t,i,n,s){return this.activeLayer.addShape(new pi(e,t,i,n,s)),this}drawCircle(e,t,i){return this.activeLayer.addShape(new ui(e,t,i)),this}drawCylinder(e,t,i,n,s,r,o,a){return this.activeLayer.addShape(new gi(e,t,i,n,s,r,o,a)),this}drawText(e,t,i,n,s,r="left",o="baseline"){return this.activeLayer.addShape(new di(e,t,i,n,s,r,o)),this}drawPolyline(e,t=!1,i=0,n=0){return this.activeLayer.addShape(new fi(e,t,i,n)),this}drawPolyline3d(e){return e.forEach((e=>{if(3!==e.length)throw"Require 3D coordinates"})),this.activeLayer.addShape(new mi(e)),this}setTrueColor(e){return this.activeLayer.setTrueColor(e),this}drawSpline(e,t=3,i=null,n=null,s=[]){return this.activeLayer.addShape(new Ci(e,t,i,n,s)),this}drawEllipse(e,t,i,n,s,r=0,o=2*Math.PI){return this.activeLayer.addShape(new Bi(e,t,i,n,s,r,o)),this}drawFace(e,t,i,n,s,r,o,a,A,l,c,h){return this.activeLayer.addShape(new bi(e,t,i,n,s,r,o,a,A,l,c,h)),this}_ltypeTable(){const e=new ii("LTYPE"),t=Object.values(this.lineTypes);for(const i of t)e.add(i);return e}_layerTable(e){const t=new ii("LAYER"),i=Object.values(this.layers);for(const e of i)t.add(e);return t}header(e,t){return this.headers[e]=t,this}setUnits(e){return void 0!==Drawing.UNITS[e]?Drawing.UNITS[e]:Drawing.UNITS.Unitless,this.header("INSUNITS",[[70,Drawing.UNITS[e]]]),this}generateAutocadExtras(){this.headers.ACADVER||this.header("ACADVER",[[1,"AC1021"]]),this.lineTypes.ByBlock||this.addLineType("ByBlock","",[]),this.lineTypes.ByLayer||this.addLineType("ByLayer","",[]);let e=this.tables.VPORT;e||(e=this.addTable("VPORT"));let t=this.tables.STYLE;t||(t=this.addTable("STYLE")),this.tables.VIEW||this.addTable("VIEW"),this.tables.UCS||this.addTable("UCS");let i=this.tables.APPID;if(i||(i=this.addTable("APPID")),!this.tables.DIMSTYLE){const e=new ni("DIMSTYLE");this.tables.DIMSTYLE=e}e.add(new ri("*ACTIVE",1e3)),t.add(new si("standard")),i.add(new oi("ACAD")),this.modelSpace=this.addBlock("*Model_Space"),this.addBlock("*Paper_Space");const n=new li;this.dictionary.addChildDictionary("ACAD_GROUP",n)}_tagsManager(){const e=new xi,t=new ii("BLOCK_RECORD"),i=Object.values(this.blocks);for(const e of i){const i=new Ai(e.name);t.add(i)}const n=this._ltypeTable(),s=this._layerTable();e.start("HEADER"),e.addHeaderVariable("HANDSEED",[[5,Qi.peek()]]);const r=Object.entries(this.headers);for(const t of r){const[i,n]=t;e.addHeaderVariable(i,n)}e.end(),e.start("CLASSES"),e.end(),e.start("TABLES"),n.tags(e),s.tags(e);const o=Object.values(this.tables);for(const t of o)t.tags(e);t.tags(e),e.end(),e.start("BLOCKS");for(const t of i)t.tags(e);e.end(),e.start("ENTITIES");const a=Object.values(this.layers);for(const t of a)t.shapesTags(this.modelSpace,e);return e.end(),e.start("OBJECTS"),this.dictionary.tags(e),e.end(),e.push(0,"EOF"),e}toDxfString(){return this._tagsManager().toDxfString()}}Drawing.ACI={LAYER:0,RED:1,YELLOW:2,GREEN:3,CYAN:4,BLUE:5,MAGENTA:6,WHITE:7},Drawing.LINE_TYPES=[{name:"CONTINUOUS",description:"______",elements:[]},{name:"DASHED",description:"_ _ _ ",elements:[5,-5]},{name:"DOTTED",description:". . . ",elements:[0,-5]}],Drawing.LAYERS=[{name:"0",colorNumber:Drawing.ACI.WHITE,lineTypeName:"CONTINUOUS"}],Drawing.UNITS={Unitless:0,Inches:1,Feet:2,Miles:3,Millimeters:4,Centimeters:5,Meters:6,Kilometers:7,Microinches:8,Mils:9,Yards:10,Angstroms:11,Nanometers:12,Microns:13,Decimeters:14,Decameters:15,Hectometers:16,Gigameters:17,"Astronomical units":18,"Light years":19,Parsecs:20};var wi=getDefaultExportFromCjs(Drawing);const vi={black:[0,0,0],white:[255,255,255],red:[255,0,0],green:[0,255,0],blue:[0,0,255],yellow:[255,255,0],cyan:[0,255,255],magenta:[255,0,255],gray:[128,128,128],grey:[128,128,128]},Di={};function col2aci(e){if(!e)return 0;if("number"==typeof e)return e;const t=e.trim().toLowerCase();if(Di[t])return Di[t];if(vi[t]){const[e,i,n]=vi[t];return Di[t]=rgb2aci(e,i,n)}if(t.startsWith("#")){let e=t;4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);const i=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),s=parseInt(e.slice(5,7),16);return Di[t]=rgb2aci(i,n,s)}if(t.startsWith("rgb")){const e=t.match(/\d+/g).map(Number);return Di[t]=rgb2aci(e[0],e[1],e[2])}return Di[t]=0}function rgb2aci(e,t,i){return Math.abs(e-t)<10&&Math.abs(t-i)<10?8:e>t&&e>i?1:t>e&&t>i?3:i>e&&i>t?5:e>200&&t>200?2:t>200&&i>200?4:e>200&&i>200?6:7}function exportdxf(e){const t=new wi,i=new Matrix3D;for(const n of e.vec)switch(n.type){case"push":i.push(),(n.x||n.y)&&i.translate(n.x||0,n.y||0,0),n.rot&&i.rotateZ(n.rot);break;case"pop":i.pop();break;case"offset":i.translate(n.x||0,n.y||0,0);break;case"point":{const e=i.transform(n.p.x,n.p.y,0),s=col2aci(n.color);t.setActiveLayer("0",s),t.drawPoint(e.x,e.y),n.id&&t.drawText(e.x+2,e.y+2,6,0,n.id);break}case"line":{const e=i.transform(n.l.p1.x,n.l.p1.y,0),s=i.transform(n.l.p2.x,n.l.p2.y,0),r=col2aci(n.color);if(t.setActiveLayer("0",r),t.drawLine(e.x,e.y,s.x,s.y),n.id){const i=(e.x+s.x)/2,r=(e.y+s.y)/2;t.drawText(i,r,6,0,n.id)}break}case"rect":case"recta":{const e=i.transform(n.l.p1.x,n.l.p1.y,0),s=i.transform(n.l.p2.x,n.l.p2.y,0),r=col2aci(n.color);t.setActiveLayer("0",r);const o="recta"===n.type;t.drawPolyline([[e.x,e.y],[s.x,e.y],[s.x,s.y],[e.x,s.y]],o);break}case"shape":case"shapelin":case"area":{if(!n.s?.length)break;const e=n.s.map((e=>{const t=i.transform(e.x,e.y,0);return[t.x,t.y]})),s="shapelin"!==n.type,r=col2aci(n.color);t.setActiveLayer("0",r),t.drawPolyline(e,s);break}case"text":{const e=col2aci(n.color);t.setActiveLayer("0",e);const s=i.transform(n.x||0,n.y||0,0),r=6*(n.scalafont||1);t.drawText(s.x,s.y,r,0,n.text);break}}return t.toDxfString()}const Mi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:e.DoubleSide});function getorientate(e,t,i,n){switch(t=t||0,i=i||0,n=n||0,e.trim().toLowerCase()){case"alp":return{x:i,y:t,z:n};case"apl":return{x:i,y:n,z:t};case"pla":return{x:n,y:t,z:i};case"pal":return{x:n,y:i,z:t};case"lpa":return{x:t,y:n,z:i};default:return{x:t,y:i,z:n}}}const Ti={lpa:"sdbarf",lap:"sdrfba",pal:"rfsdba",apl:"basdrf",lap:"rfbasd",alp:"barfsd"};function parselavs(e,t,i=0,n=0,s=0,r="",o="",a=""){let A=muClComments(r);e=e.trim().toLowerCase();let l=[];for(let r of A){let a=/^([({}):$\w.\\/]+)[\s;,]*(.*)?$/im.exec(r);if(a&&a[1]){let r={name:a[1].trim().toLowerCase(),...getorientate(e,i,n,s),id:t,facce:o};if(a[2]){let e=getcolonne(a[2]);for(let t of e){let e=t.indexOf("=");e>0&&(r[t.slice(0,e).trim()]=t.slice(e+1).trim())}}l.push(r)}}return!l.length&&a&&l.push({name:a,...getorientate(e,i,n,s),id:t,facce:o}),l}function getemitter(t){let{d:i,name:n,x:s,y:r,z:o,lavs:a="",ids:A="",faces:l=null,size:c=5}=t;A=getcolonne(clean(A,!0));const h=new e.Object3D;if(h.position.set(s,r,o),h.userData={emitter:!0,lavs:a,ids:A,faces:l,size:c,name:n},i){const t=new e.SphereGeometry(c||5,8,8),i=new e.MeshBasicMaterial({color:16711680}),n=new e.Mesh(t,i);h.add(n)}return h.layers.set(29),h}function getreceiver(t,i){t.gmats.__istask=1;let{d:n,ori:s="LAP",x:r=0,y:o=0,z:a=0,sx:A=0,sy:l=0,sz:c=0,tipo:h="",start:p="",end:u=""}=i;h=clean(h,!0);const g=new e.Object3D;if(g.position.set(r/2+(A||0),o/2+(l||0),a/2+(c||0)),g.userData={receiver:!0,ori:(s||"").trim().toLowerCase(),x:r,y:o,z:a,tipo:h,start:p,end:u},n){const t=new e.BoxGeometry(r,o,a),i=new e.Mesh(t,Mi);i.position.set(0,0,0),g.add(i)}return g.layers.set(29),g}function calcolatasks(t){const i=new WeakMap,n=new WeakMap;function boxBoxIntersects(e,t,i,n,s){return e.x+t>0&&e.x-t<i&&e.y+t>0&&e.y-t<n&&e.z+t>0&&e.z-t<s}function getFacceToccate(e,t,i,n,s,r,o){const a=[];function addfaccia(e){o&&!o.includes(e)||a.push(e)}return Math.abs(t.y-0)<i&&addfaccia(e[0]),Math.abs(t.y-s)<i&&addfaccia(e[1]),Math.abs(t.x-0)<i&&addfaccia(e[2]),Math.abs(t.x-n)<i&&addfaccia(e[3]),Math.abs(t.z-0)<i&&addfaccia(e[4]),Math.abs(t.z-r)<i&&addfaccia(e[5]),a.join("")}function getEmitterWorldPosition(t){if(!i.has(t)){const n=new e.Vector3;t.getWorldPosition(n),i.set(t,n)}return i.get(t)}function getReceiverWorldMatrixInverse(e){if(!n.has(e)){const t=e.matrixWorld.clone().invert();n.set(e,t)}return n.get(e)}t.updateMatrixWorld(!0);const s=[],r=[];!function scan(e){e.userData?.receiver&&s.push(e),e.userData?.emitter&&r.push(e),e.children&&e.children.forEach(scan)}(t);let o=[];for(const t of s){const{mat:i,ori:n,x:s,y:a,z:A,start:l,end:c,tipo:h,size:p}=t.userData;let u=Ti[n];u||(n="apl",u=Ti[n]);let g={id:i,...getorientate(n,s,a,A),tipo:h,ori:n,lavs:[]};l&&g.lavs.push(...parselavs(n,"_start",0,0,0,l,"",""));const d=getReceiverWorldMatrixInverse(t);for(const t of r){if("string"==typeof h&&""!==h){const e=t.userData.ids;if(Array.isArray(e)&&e.length>0&&!e.includes("*")&&!e.includes(h))continue}const i=getEmitterWorldPosition(t).clone().applyMatrix4(d).clone().add(new e.Vector3(s/2,a/2,A/2));if(!boxBoxIntersects(i,t.userData.size??0,s,a,A))continue;const r=getFacceToccate(u,i,t.userData.soglia??2,s,a,A,t.userData.faces);r&&r.length&&g.lavs.push(...parselavs(n,t.userData.name,i.x,i.y,i.z,t.userData.lavs,r,"nd"))}c&&g.lavs.push(...parselavs(n,"_end",0,0,0,c,"","")),g.lavs.length&&o.push(g)}return o}function getbb(t,i=!1){if(!i&&t.userData.bb)return t.userData._boundingbox;const n=(new e.Box3).setFromObject(t);return t.userData._boundingbox=n,n}function setorigine(t,i=0,n=0,s=0){const r=getbb(t).min,o=new e.Group;return o.add(t),t.position.sub(new e.Vector3(r.x+i,r.y+n,r.z+s)),o}function scalaoggetto(t,i,n={}){const s=getbb(i),r=new e.Vector3;s.getSize(r);const o=s.min,a=["x","y","z","u","v"],A={};for(let e of a){let t=n[e];if(void 0===t)A[e]={s:1};else if("number"==typeof t)A[e]={s:t};else if("object"==typeof t){let i=t.s??1,n="x"===e?r.x:"y"===e?r.y:r.z,s="x"===e?o.x:"y"===e?o.y:o.z;void 0!==t.distperc&&(t.dist=n*t.distperc),void 0!==t.dist&&(i=(n+t.dist)/n);let a=t.p1?t.p1+s:void 0,l=t.p2?t.p2+s:void 0;void 0!==t.p1perc&&(a=s+n*t.p1perc),void 0!==t.p2perc&&(l=s+n*t.p2perc),A[e]={s:i,p1:a,p2:l}}}if(a.every((e=>void 0===A[e].p1||void 0===A[e].p2))){if(1===A.x.s&&1===A.y.s&&1===A.z.s)return i;const t=new e.Group;return t.scale.set(A.x.s,A.y.s,A.z.s),t.add(i),t}const l=hash(`${i.uuid}|${JSON.stringify(A)}`);if(t.meshes[l])return t.meshes[l];const c={};a.forEach((e=>{const{s:t,p1:i,p2:n}=A[e];c[e]=!(1===t&&void 0===i&&void 0===n)}));const h=i.clone(!0);return delete h?.userData._boundingbox,h.traverse((e=>{if(e.isMesh){const t=e.scale.clone();e.geometry=e.geometry.clone();const i=e.geometry.attributes.position,n=e.geometry.attributes.uv,trasf=(e,t)=>{if(!c[t])return e;const{s:i,p1:n,p2:s}=A[t];if(void 0===n||void 0===s)return e*i;const r=s*i-s;if(e<n)return e;if(e>=s)return e+r;return n+(e-n)*((s-n+r)/(s-n))};if(i&&(c.x||c.y||c.z)){const t=i.array;for(let e=0;e<t.length;e+=3)c.x&&(t[e]=trasf(t[e],"x")),c.y&&(t[e+1]=trasf(t[e+1],"y")),c.z&&(t[e+2]=trasf(t[e+2],"z"));i.needsUpdate=!0,e.geometry.computeVertexNormals()}if(n&&(c.u||c.v)){const e=n.array;for(let t=0;t<e.length;t+=2)c.u&&(e[t]=trasf(e[t],"u")),c.v&&(e[t+1]=trasf(e[t+1],"v"));n.needsUpdate=!0}e.scale.set(t.x*A.x.s,t.y*A.y.s,t.z*A.z.s)}})),t.meshes[l]=h,h}function posiziona(t,i={}){let n=new e.Group;if(t){let s=function deepclone(e){if(!e)return null;const t=e.clone();return function checkchildren(e,t){if(e.onBeforeRender&&(t.onBeforeRender=e.onBeforeRender),e.onAfterRender&&(t.onAfterRender=e.onAfterRender),e.userData&&(t.userData={...e.userData}),e.children||e.children.length)for(let i=0;i<e.children.length;i++)checkchildren(e.children[i],t.children[i])}(e,t),t}(t),r=s,{noingombro:o=!1,marker:a="",markerid:A="",marklink:l="",sl:c=0,sa:h=0,sp:p=0,ax:u=0,ay:g=0,az:d=0,scale:f=1,scx:m=f,scy:I=f,scz:b=f,emitters:y,emittersname:C,order:B,ignoreTraverse:E,hideable:x,move:w}=i;if("number"==typeof B&&s.traverse((e=>{e.isMesh&&(e.renderOrder=B)})),n.position.set(c,h,p),n.rotation.set(u*Ue,g*Ue,d*Ue),n.scale.set(m,I,b),!w?.annulla){if(w){function managemove(t,i){let{l:n=0,a:s=0,p:r=0,rot:o=0}=t,a=new e.Group;return a.position.set(n,s,r),a.rotation.set(0,o*Ue,0),a.add(i),a.userData.ismove=!0,a.userData.move=t,a}r=managemove(w,s)}n.add(r)}if(a&&A&&(n.userData.marker=a,n.userData.markerid=`#mk_${A||""}`,n.userData.marklink=l),o&&(n.userData.noingombro=!0),E&&(n.userData.ignoreTraverse=!0),y&&y.length)for(let v of y)v.name=v.name||C,n.add(getemitter(v));x&&(n.userData.hideable=!0)}return n.updateMatrixWorld(!0),n}const Li=e.DoubleSide;let ki=new e.LineBasicMaterial({color:16711680,transparent:!1,opacity:1}),_i=new e.LineBasicMaterial({color:11579568,transparent:!1,opacity:1});const Ri=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:Li}),Fi=new e.MeshStandardMaterial({color:8421504,roughness:.5,metalness:.4,side:Li}),Ni=new e.MeshStandardMaterial({color:11579568,roughness:.5,metalness:.4,side:Li}),Oi=new e.MeshStandardMaterial({color:16711680,roughness:.5,metalness:.4,side:Li}),Gi=new e.MeshStandardMaterial({color:1982639,roughness:.5,metalness:.4,side:Li}),Yi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:Li}),Ui=new e.MeshStandardMaterial({color:0,roughness:.5,metalness:.4,side:Li}),Xi=.001;function groupfromgeometry(t,i,n,s,r,o,a){let A=new e.Group;A.position.set(n,s,r),A.name=o;const l=new e.Mesh(t,i);l.name=o,l.castShadow=!0,l.receiveShadow=!0,l.layers.set(a);const c=new e.EdgesGeometry(t),h=new e.LineSegments(c,ki);return h.layers.set(30),A.add(l),A.add(h),A}function edgesfromgeometry(t,i=30){return getlinesgeom(new e.EdgesGeometry(t,40),i)}function getlinesgeom(t,i=30){const n=new e.LineSegments(t,ki);return n.layers.set(i),n}function getmesh(t,i,n=1,s=!1){let r=new e.Mesh(t,s?i.clone():i);return r.castShadow=!0,r.receiveShadow=!0,r.layers.set(n),r}function get3dshape(t,i,n){if(!t||t.length<3)return new e.BufferGeometry;const s=[];for(let e=0;e<t.length;e++){const i=t[e],n=t[(e+1)%t.length];s.push(i.x,0,i.y),s.push(n.x,0,n.y)}const r=new e.BufferGeometry;r.setAttribute("position",new e.Float32BufferAttribute(s,3));let o=new e.LineSegments(r,i);return o.layers.set(n),o}function creategroup(t,i={}){let{ignoreTraverse:n}=i,s=new e.Group;return s.name=t||"$$",n&&(s.userData.ignoreTraverse=!0),s}function svuotanodo(e){!function _dispose(e){if(e.children.length){[...e.children].forEach((t=>{_dispose(t),e.remove(t)}))}e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach((e=>e.dispose())):e.material.dispose())}(e)}function deletegroup(e,t){if(!e?.children)return;let i=e.children.find((e=>e.name==t));if(i){for(;i.children.length>0;){const e=i.children[0];i.remove(e)}i.parent&&i.parent.remove(i),i=null}}function randombasemat(){const t=new e.LineBasicMaterial,i=new e.Color;return i.setHSL(Math.random(),.7,.4),t.color=i,t}function getspriteid(t,i=5,n="#000"){const s=document.createElement("canvas"),r=s.getContext("2d");r.font="48px sans-serif";const o=Math.ceil(r.measureText(t).width)+16;s.width=o,s.height=64,r.font="48px sans-serif",r.textBaseline="middle",r.fillStyle="rgba(0,0,0,0)",r.fillRect(0,0,o,64),r.fillStyle=n,r.fillText(t,8,32);const a=new e.CanvasTexture(s);a.needsUpdate=!0,a.minFilter=e.LinearFilter;const A=new e.SpriteMaterial({map:a,transparent:!0}),l=new e.Sprite(A),c=i/20;return l.scale.set(o*c,64*c,1),l}function getline(t,i,n=null){const s=(new e.BufferGeometry).setFromPoints([new e.Vector3(t.p1.x,0,t.p1.y),new e.Vector3(t.p2.x,0,t.p2.y)]);let r=new e.Line(s,n||randombasemat());if(i){let e=getspriteid(i||"",8,"#F00");e.position.set((t.p1.x+t.p2.x)/2,0,(t.p1.y+t.p2.y)/2),r.add(e)}return r}function getpoint(t,i,n=null,s=5){let r;const o=new e.SphereGeometry(s,8,8);if(r=new e.Mesh(o,n||randombasemat()),i){let e=getspriteid(i||"",s);e.position.set(1.2*s,0,1.2*s),r.add(e)}return r.position.set(t.x,0,t.y),r}async function smat(t,i,n={}){n||(n={});let s=hash(i+JSON.stringify(n));return t.smats[s]||(n.glass?t.smats[s]=await async function smatglass(t,i={}){let n=new e.Color("#080808ff");try{n=new e.Color(t)}catch(e){console.log(e)}let{metalness:s=0,roughness:r=.1,ior:o=1.5,envMapIntensity:a=1,transmission:A=1,specularIntensity:l=1,specularColor:c=16777215,opacity:h=1,thickness:p=.2,clearcoat:u=1,clearcoatRoughness:g=.1,dispersion:d=0}=i;return new e.MeshPhysicalMaterial({color:n,metalness:s,roughness:r,ior:o,envMapIntensity:a,transmission:A,specularIntensity:l,specularColor:c,opacity:h,side:e.DoubleSide,transparent:!0,thickness:p,clearcoat:u,clearcoatRoughness:g,dispersion:d})}(i,n):t.smats[s]=await async function smat0(t,i,n={}){let s=i,r="",o=!1;function getFilesToLoad(e,t){let i=[],n=t.match(/^([^(]+)\((([a-zA-Z0-9_\-/]+)_([a-z]+)|([a-z]+))\)$/);if(!n)return{base:t,files:i};let s=n[1],r=!1,o=n[3]||s,a=n[4]||n[5]||"";!a.includes("h")&&e||i.push({suff:"",file:`${o}.webp`,cs:!0});for(let e of a)"t"==e?(r=!0,n[3]&&zi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!1})):"h"!=e&&zi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!!["","e"].includes(e)});return{base:s,files:i,transparent:r}}i.startsWith("#")&&(o=!0,/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})(?=$|[[(])/.test(i)||(i=i.slice(1)));let a=i;const A=i.match(/^(.*)\[([^\]]+)\]$/);A&&(a=A[1],r=A[2]);const l={};r&&r.split(/[,;]/).forEach((e=>{let[t,i]=e.split("=").map((e=>e.trim()));void 0!==i&&(["e"].includes(t)?l[t]=i.startsWith("0x")?parseInt(i):parseFloat(i):isNaN(parseFloat(i))?l[t]=i:l[t]=parseFloat(i))}));let c=n.rot,h=parseFloat(n.s)||1;delete n.s;let p={...n};for(let e in l)if(qi[e])for(let t of qi[e])p[t]=l[e];let u=!!p?.transparent,g=(p.sx??p.s??l.sx??l.s??1)*h,d=(p.sy??p.s??l.sy??l.s??1)*h,f=Number((l.rot??0)+(c??0))*Ue;try{let n={roughness:p.roughness??.5,metalness:p.metalness??0,side:e.DoubleSide,envMapIntensity:p.env??1};if(void 0!==p.normalScale){let t=Number(p.normalScale);isNaN(t)||0===t||(n.normalScale=new e.Vector2(t,t))}let s=!1,r=!1;if(i.includes("(")||o){let{base:i,files:A,transparent:l}=getFilesToLoad(o,a);if(u=l,A.some((e=>"n"===e.suff))&&(A=A.filter((e=>"h"!==e.suff))),0===p.roughness&&(A=A.filter((e=>"r"!==e.suff))),0===p.metalness&&(A=A.filter((e=>"m"!==e.suff))),0===p.emissiveIntensity&&(A=A.filter((e=>"e"!==e.suff))),A&&A.length){let i=await Promise.all(A.map((e=>t.tex(e.file,g,d,f).catch((()=>null)))));for(let t=0;t<A.length;t++){let o=i[t];if(!o)continue;o.isTexture&&(o.colorSpace=A[t].cs?e.SRGBColorSpace:e.LinearSRGBColorSpace);let a=A[t].suff,{prop:l,extra:c}=zi[a];n[l]=o,"map"===l&&(n._hasMap=!0),"normalMap"===c?(s=!0,n.normalMap=o,delete o.colorSpace,o.needsUpdate=!0,n.normalScale=n.normalScale??new e.Vector2(1,1)):"bumpScale"===c?(r=!0,n.bumpMap=o):Array.isArray(c)&&c.includes("emissive")&&void 0!==p.emissiveIntensity&&0!==p.emissiveIntensity&&(n.emissive=p.emissive||16777215,n.emissiveIntensity=p.emissiveIntensity??1)}}o&&(n.color=new e.Color(i),n._hasColor=!0)}else if(a.includes(".")){let e=await t.tex(a,g,d,f);if(!e)return Ri;n.map=e,n._hasMap=!0}if(s&&r?delete n.bumpMap:r&&(n.bumpScale=p.bumpScale??.03),n.transparent=!!u,n.transparent&&(n.depthWrite=!1,n.opacity=p?.opacity??1),void 0!==p.brightness){let t=Number(p.brightness);!isNaN(t)&&t>0&&1!==t&&(n.color||(n.color=new e.Color(1,1,1)),n.color.multiplyScalar(t))}return n._hasMap&&!n._hasColor&&(n.color=new e.Color(1,1,1)),n._hasColor&&!n._hasMap&&delete n.map,delete n._hasColor,delete n._hasMap,new e.MeshStandardMaterial(n)}catch(e){return console.log("errore mat:",e.message,s),Ri}}(t,i,n)),t.smats[s]}const qi={s:["sx","sy"],sx:["sx"],sy:["sy"],rot:["rot"],br:["brightness"],r:["roughness"],m:["metalness"],h:["bumpScale"],n:["normalScale"],d:["bumpScale"],b:["bumpScale"],e:["emissiveIntensity"],ec:["emissive"],env:["envMapIntensity"],o:["opacity"],t:["transparent"],at:["alphaTest"]},zi={"":{prop:"map",extra:null},h:{},n:{prop:"normalMap",extra:null},a:{prop:"aoMap",extra:"aoMapIntensity"},r:{prop:"roughnessMap",extra:null},t:{prop:"alphaMap",extra:null},m:{prop:"metalnessMap",extra:null},e:{prop:"emissiveMap",extra:["emissive","emissiveIntensity"]}};async function extractTextures(e,t){const i={},n=[];function getName(e){i[e]=(i[e]||0)+1;let n=t;return e&&(n+=`_${e}`),i[e]>1&&(n+=i[e]),`${n}.webp`}return e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const[t,{prop:i}]of Object.entries(zi)){const s=e[i];if(s&&s.image&&!s._extracted){s._extracted=!0;let e,i=s.image;if(i.toBlob)e=new Promise((e=>i.toBlob(e,"image/webp")));else if(i instanceof ImageBitmap){const t=document.createElement("canvas");t.width=i.width,t.height=i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}else{if(!(i instanceof HTMLImageElement))continue;{const t=document.createElement("canvas");t.width=i.naturalWidth||i.width,t.height=i.naturalHeight||i.height;t.getContext("2d").drawImage(i,0,0),e=new Promise((e=>t.toBlob(e,"image/webp")))}}n.push(e.then((e=>new File([e],getName(t),{type:"image/webp"}))))}}}})),e.traverse((e=>{if(e.material){const t=Array.isArray(e.material)?e.material:[e.material];for(const e of t)for(const{prop:t}of Object.values(zi)){const i=e[t];i&&i._extracted&&delete i._extracted}}})),Promise.all(n)}function uvswap(e,t=!1,i=!0){if(e&&e.attributes){const n=i?Xi:1,s=e.attributes.uv;if(s){const e=s.array;for(let s=0,r=e.length;s<r;s+=2)if(t){const t=e[s];e[s]=e[s+1]*n,e[s+1]=t*n}else i&&(e[s]*=n,e[s+1]*=n);s.needsUpdate=t||i}const r=e.attributes.uv2;if(r){const e=r.array;for(let i=0,s=e.length;i<s;i+=2)if(t){const t=e[i];e[i]=e[i+1]*n,e[i+1]=t*n}else e[i]*=n,e[i+1]*=n;r.needsUpdate=!0}e.index&&e.attributes?.position&&e.attributes?.normal&&e.attributes?.uv&&e.computeTangents()}}function getfakeshadow2(t,i,n){const s=(new e.Shape).moveTo(0,0).lineTo(t,0).lineTo(t,i).lineTo(0,i).lineTo(0,0),r=new e.ShapeGeometry(s),o=r.attributes.position,a=new Float32Array(2*o.count);for(let e=0;e<o.count;e++)a[2*e]=o.getX(e)/t,a[2*e+1]=o.getY(e)/i;r.setAttribute("uv",new e.BufferAttribute(a,2));const A=new e.MeshBasicMaterial({map:n,transparent:!0,alphaTest:.01,depthWrite:!1,side:e.DoubleSide}),l=new e.Mesh(r,A);return l.layers.set(9),l.rotation.x=Math.PI/2,l}function getfakeshadow(t,i,n){let s=`fk${i.key}${n}`,{p1:r,width:o,height:a}=i.dims();t.texture||(t.texture={});let A=t.texture[s];A||(A=function createBlurredShadowTextureFromPoints(t,i=256,n=32,s=.2,r,o,a){if(!o||!a||!t.pt||t.pt.length<2)return;const A=r.x,l=r.y,c=o,h=a,p=t.pt,u=2*n,g=document.createElement("canvas");g.width=i+2*u,g.height=i+2*u;const d=g.getContext("2d");d.save(),d.translate(u,u),d.scale(i/c,i/h),d.translate(-A,-l),d.filter=`blur(${n}px)`,d.beginPath(),d.moveTo(p[0].x,p[0].y);for(let e=1;e<p.length;e++)d.lineTo(p[e].x,p[e].y);d.closePath(),d.fillStyle=`rgba(0,0,0,${s})`,d.fill(),d.restore();const f=new e.CanvasTexture(g);return f.needsUpdate=!0,f}(i,256,32,n,r,o,a),t.texture[s]=A);const l=function pointsToShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i}(i.pt),c=new e.ShapeGeometry(l);!function applyUVtoShapeGeometry(t,i,n,s,r){const o=t.attributes.position,a=[];for(let e=0;e<o.count;e++){const t=o.getX(e),A=o.getY(e);a.push((t-i)/s,(A-n)/r)}t.setAttribute("uv",new e.Float32BufferAttribute(a,2))}(c,r.x,r.y,o,a);const h=new e.MeshBasicMaterial({map:A,transparent:!0,depthWrite:!1,side:e.DoubleSide});let p=new e.Mesh(c,h);return p.layers.set(9),p.rotation.x=Math.PI/2,p}function addmovpivot(t,i,n,s={},r=0,o=0,a=0){if(n=clean(n,!0),!t.movs[n])return i;t.movs[n];const A=new e.Vector3(r,o,a),l=0===A.lengthSq(),c=new e.Group;c.name=`pivot_${n}`;const h=new e.Group;if(h.name=`mov_${n}`,l)c.position.copy(i.position),c.quaternion.copy(i.quaternion),i.position.set(0,0,0),i.rotation.set(0,0,0);else{const t=A.clone().applyMatrix4(i.matrixWorld);c.position.copy(t);const n=A.clone().negate();i.position.add(n),c.quaternion.copy(i.getWorldQuaternion(new e.Quaternion)),i.rotation.set(0,0,0)}return h.add(i),c.add(h),s||(s={}),s.inmov=!1,s.key=n,s.dt=0,s.dtstart=!1,h.userData.mov={...s},c}function getmovimento(e,t=[]){let i=0,n=[];const _cleartimeline=()=>{n=[],i=0},_add=(e,t={})=>{e&&n.push({...t,time:e}),i=n.reduce(((e,t)=>e+(t.time||0)),0)};_cleartimeline(),t&&t.length&&t.forEach((e=>_add(e.time,e)));const _resetmov=e=>{const{mov:t}=e?.userData||{};t&&(t.inmov=!1,e.position.set(0,0,0),e.scale.set(1,1,1),e.rotation.set(0,0,0))};return{get tline(){return i},clear:_cleartimeline,add:_add,key:e,step:(e,t)=>{if(!e||!e.userData?.mov||!i)return;const{mov:s}=e.userData;if(!s.inmov)return;let r=s.dt-s.dtstart;if(s.ripeti)r%=i;else if(r>i)return void _resetmov(e);let o=0,a=0,A=0,l=0,c=0,h=0,p=1,u=1,g=1,d=null,f=0;for(let e of n){if(f+=e.time,r<f){const t=e.time>0?(r-(f-e.time))/e.time:1,_calc=(e,i=0)=>"function"==typeof e?e(s)*t:(e||i)*t;o+=_calc(e.x),a+=_calc(e.y),A+=_calc(e.z),p*=1+_calc(e.sx??e.s,0),u*=1+_calc(e.sy??e.s,0),g*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,h+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(s)*t:e.t*t);break}{const _calc=(e,t=0)=>"function"==typeof e?e(s):e||t;o+=_calc(e.x),a+=_calc(e.y),A+=_calc(e.z),p*=1+_calc(e.sx??e.s,0),u*=1+_calc(e.sy??e.s,0),g*=1+_calc(e.sz??e.s,0),l+=_calc(e.ax)*Ue,c+=_calc(e.ay)*Ue,h+=_calc(e.az)*Ue,void 0!==e.t&&(d="function"==typeof e.t?e.t(s):e.t)}}e.position.set(o,a,A),e.scale.set(p,u,g),e.rotation.set(l,c,h),null!==d&&e.traverse((e=>{if(e.material){(Array.isArray(e.material)?e.material:[e.material]).forEach((e=>{e.transparent&&(e.opacity=1-d)}))}})),t&&t(e,r)},reset:_resetmov}}let Hi=null,ji=null;function getriferimento(t,i=0,n=0,s=0,r="rif"){"string"==typeof t&&(t={testo:t});let o=new e.Object3D;return o.position.set(i,n,s),r&&(o.name=r),o.userData={tipo:"rif",...t},o}function gettarghetta(t,i,n=100,s={}){const{noSfondo:r=!1,forcey:o=!1,coloreSfondo:a="white",coloreBordo:A="gray",spessoreBordo:l=2,padding:c=8,layer:h=21,size:p=24,fontFamily:u="Arial",raggioAngoli:g=10,order:d=0,variant:f,tooltip:m,billboard:I=!1}=s;i=(i||"").replaceAll("\\n","\n");let b=hash(`T:${a}|${A}|${u}|${c}|${l}|${g}|${r}|${i}|${f}|${I}`);const y=p??24;i=i.split("\n").map((e=>{let t=y,i=!1,n=!1,s="black";e=e.trim();let r=/^\s*#(\w)([bi]?)([\d.]*)[,;](.*)$/.exec(e);if(r)switch(t=parseFloat(r[3]||1)*y,"b"===r[2]&&(i=!0),"i"===r[2]&&(n=!0),e=r[4],r[1].toLowerCase()){case"r":s="red";break;case"g":s="green";break;case"b":s="blue";break;case"w":s="white";break;case"c":s="cyan"}return{testo:e,size:t,color:s,bold:i,italic:n}})).filter((e=>e.testo));const{canvas:C,context:B}=function getGlobalCanvas(){return Hi||(Hi=document.createElement("canvas"),ji=Hi.getContext("2d",{willReadFrequently:!0})),{canvas:Hi,context:ji}}();let E=0,x=2*c;i.forEach(((e,t)=>{const{testo:n,size:s=12}=e,r=2*s;B.font=`${r}px ${u}`;const o=B.measureText(n).width,a=r*(t==i.length-1?1:1.2);E=Math.max(E,o),x+=a})),E+=2*c;const w=x/E||1;let v,P;if(o?(P=n,v=Math.ceil(P/w)):(v=n,P=Math.ceil(v*w)),!t.textures[b]){const n=Math.floor(E+2*l),s=Math.floor(x+2*l);(C.width<n||C.height<s)&&(C.width=Math.max(C.width,n),C.height=Math.max(C.height,s)),B.clearRect(0,0,n,s);const o=new e.Color(a),h=`rgb(${Math.floor(255*o.r)}, ${Math.floor(255*o.g)}, ${Math.floor(255*o.b)})`,p=new e.Color(A),d=`rgb(${Math.floor(255*p.r)}, ${Math.floor(255*p.g)}, ${Math.floor(255*p.b)})`,f=g;B.beginPath(),r||(drawRoundedRect(B,0,0,n,s,f+l/2),B.fillStyle=d,B.fill(),B.beginPath(),drawRoundedRect(B,l,l,n-2*l,s-2*l,f-l/2),B.fillStyle=h,B.fill());let m=c+l;i.forEach((e=>{const{testo:t,size:i=12,color:s="black",bold:r,italic:o}=e,a=2*i;B.font=`${r?"bold ":o?"italic ":""}${a}px ${u}`,B.fillStyle=s,B.textAlign="center",B.textBaseline="top",B.fillText(t,n/2,m),m+=1.2*a}));const I=B.getImageData(0,0,n,s),y=new e.DataTexture(I.data,I.width,I.height,e.RGBAFormat);y.needsUpdate=!0,y.flipY=!0,y.minFilter=e.LinearFilter,y.magFilter=e.LinearFilter,t.textures[b]=y}const D=new e.MeshBasicMaterial({map:t.textures[b],transparent:!0,alphaTest:.5,side:Li}),M=new e.PlaneGeometry(v,P),S=new e.Mesh(M,D);return S.layers.set(h),S.renderOrder=d,S.userData={dimx:v,dimy:P,noingombro:!0},f&&(S.userData.pickvariant=!0,S.userData.variant=f,S.userData.tooltip=m),I&&(S.up.set(0,0,1),S.layers.set(21),S.onBeforeRender=(e,t,i)=>{S.quaternion.copy(i.quaternion)}),S}function drawRoundedRect(e,t,i,n,s,r){r=Math.min(r,Math.min(n/2,s/2)),e.moveTo(t+r,i),e.lineTo(t+n-r,i),e.quadraticCurveTo(t+n,i,t+n,i+r),e.lineTo(t+n,i+s-r),e.quadraticCurveTo(t+n,i+s,t+n-r,i+s),e.lineTo(t+r,i+s),e.quadraticCurveTo(t,i+s,t,i+s-r),e.lineTo(t,i+r),e.quadraticCurveTo(t,i,t+r,i),e.closePath()}function getquota(t,i,n,s,r,o,a={}){const{altezza:A=30,offset:l=0,piano:c="xy",layer:h=22,hideable:p=!1,delta:u=5,spessoreLinea:g=3}=a,pp=(e,t)=>"xz"===c?[e,0,t]:"yz"===c?[0,e,t]:[e,t,0],d=new e.Group;d.name="quota",p&&(d.userData.hideable=!0);const f=r-n,m=o-s,I=Math.sqrt(f*f+m*m),b=Math.atan2(m,f);i||(i="$$"),i.includes("$$")&&(i=i.replace("$$",`${I.toFixed(1)}`));let y=i.split("\n").length;const C=-Math.sin(b)*l,B=Math.cos(b)*l,E=gettarghetta(t,i,2*A*y,{noSfondo:!0,layer:h,forcey:!0}),{dimx:x,dimy:w}=E.userData;function getCilindro(i,n,s){const r=(new e.Vector3).subVectors(n,i),o=r.length();let a,A=hash(`c:${s}|${o}`);t.geo[A]?a=t.geo[A]:(a=new e.CylinderGeometry(s/2,s/2,o,3,1,!0),t.geo[A]=a);const l=new e.Mesh(a,Ui);l.position.copy(i).add(r.multiplyScalar(.5));const c=(new e.Vector3).copy(n);return l.lookAt(c),l.rotateX(Math.PI/2),l}if(x>I-u){E.position.set(I/2,2*A,0);const t=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(I,0)),g);d.add(t)}else{const t=x+u,i=(I-t)/2,n=i+t,s=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(i,0)),g);d.add(s);const r=getCilindro(new e.Vector3(...pp(n,0)),new e.Vector3(...pp(I,0)),g);d.add(r),E.position.set(...pp(I/2,0))}const v=l>A/2?-l:-A/2,P=-l>A/2?-l:A/2,D=new e.Vector3(...pp(0,v)),M=new e.Vector3(...pp(0,P)),S=new e.Vector3(...pp(I,v)),T=new e.Vector3(...pp(I,P)),L=getCilindro(D,M,g);d.add(L);const k=getCilindro(S,T,g);return d.add(k),E.userData.updateOrientation=function(e){e&&this.quaternion.copy(e.quaternion)},d.add(E),d.userData.noingombro=!0,"xy"===c?(d.position.set(n+C,s+B,0),d.rotation.z=b):"xz"===c?(d.position.set(n+C,0,s+B),d.rotation.y=-b):"yz"===c&&(d.position.set(0,n+C,s+B),d.rotation.x=b),d.layers.set(h||22),d}function creagizmo(t={}){const i=100*(t.size??1),n=t.picksize??1.6,s={x:t?.colors?.x??16711680,y:t?.colors?.y??65280,z:t?.colors?.z??255,plane:t?.colors?.plane??8388736,rot:t?.colors?.rot??8421504},r=new e.Group;r.name="gizmo";const mat=(t,i=1)=>new e.MeshBasicMaterial({color:t,transparent:i<1,opacity:i,depthWrite:!1,toneMapped:!1,depthTest:!1});function makeaxis(t,s){const r=new e.Group;r.name="ax_"+t;const o=new e.Mesh(new e.CylinderGeometry(.02*i,.02*i,.8*i,8),mat(s));o.position.y=.4*i;const a=new e.Mesh(new e.ConeGeometry(.05*i,.2*i,12),mat(s));a.position.y=i;const A=new e.Mesh(new e.CylinderGeometry(.08*i*n,.08*i*n,1.2*i,6),mat(s,0));return A.position.y=.6*i,r.add(o,a,A),"x"===t&&(r.rotation.z=-Math.PI/2),"z"===t&&(r.rotation.x=Math.PI/2),r.userData={kind:"gizmo-handle",type:"axis",axis:t},r}const o=makeaxis("x",s.x),a=makeaxis("y",s.y),A=makeaxis("z",s.z),l=function makeplane(){const t=new e.Group;t.name="pl_xz";const n=.6*i,r=.25*n,o=.4*i,a=.4*-i,A=new e.Shape;A.moveTo(o-n/2+r,a-n/2),A.lineTo(o+n/2-r,a-n/2),A.quadraticCurveTo(o+n/2,a-n/2,o+n/2,a-n/2+r),A.lineTo(o+n/2,a+n/2-r),A.quadraticCurveTo(o+n/2,a+n/2,o+n/2-r,a+n/2),A.lineTo(o-n/2+r,a+n/2),A.quadraticCurveTo(o-n/2,a+n/2,o-n/2,a+n/2-r),A.lineTo(o-n/2,a-n/2+r),A.quadraticCurveTo(o-n/2,a-n/2,o-n/2+r,a-n/2);const l=new e.ShapeGeometry(A),c=new e.Mesh(l,mat(s.plane,.35));c.rotation.x=-Math.PI/2,c.position.y=.001;const h=new e.Mesh(l,mat(s.plane,0));return h.rotation.copy(c.rotation),h.position.copy(c.position),t.add(c,h),t.userData={kind:"gizmo-handle",type:"plane",plane:"xz"},t}(),c=function makerot(){const t=new e.Group;t.name="rot_y";const n=.9*i*1.5,r=.025*i,o=new e.Mesh(new e.TorusGeometry(n,r,8,32,Math.PI/3),mat(s.rot));o.rotation.x=Math.PI/2;const a=Math.PI/3,A=new e.Mesh(new e.ConeGeometry(.06*i,.15*i,10),mat(s.rot));A.position.set(n*Math.cos(0),0,n*Math.sin(0));let l=new e.Vector3(-Math.sin(0),0,Math.cos(0)).normalize().negate();A.quaternion.setFromUnitVectors(new e.Vector3(0,1,0),l);const c=new e.Mesh(new e.ConeGeometry(.06*i,.15*i,10),mat(s.rot));c.position.set(n*Math.cos(a),0,n*Math.sin(a));let h=new e.Vector3(-Math.sin(a),0,Math.cos(a)).normalize();c.quaternion.setFromUnitVectors(new e.Vector3(0,1,0),h);const p=new e.Mesh(new e.TorusGeometry(n,4*r,6,16,Math.PI/3),mat(s.rot,0));return p.rotation.copy(o.rotation),t.add(o,A,c,p),t.userData={kind:"gizmo-handle",type:"rot",axis:"y"},t.rotation.y=-.08333333333333333*Math.PI,t}();return r.add(o,a,A,l,c),r.userData={kind:"gizmo",handles:{x:o,y:a,z:A,xz:l,roty:c}},r.setpos=e=>r.position.copy(e),r.setvisible=(e={})=>{void 0!==e.x&&(o.visible=e.x),void 0!==e.y&&(a.visible=e.y),void 0!==e.z&&(A.visible=e.z),void 0!==e.xz&&(l.visible=e.xz),void 0!==e.roty&&(c.visible=e.roty)},r}function fillNoise(t,i,n={}){let{scale:s=8,octaves:r=3,persistence:o=.5,seed:a=0,contrast:A=1,color1:l="#000000",color2:c="#ffffff",alpha1:h=1,alpha2:p=1}=n;const u=new e.Color(l),g=new e.Color(c),fade=e=>e*e*e*(e*(6*e-15)+10),lerp=(e,t,i)=>e+(t-e)*i,d=i,f=new Uint16Array(2*d);let m=0|Math.floor(65536*a);for(let e=0;e<d;e++)f[e]=e;for(let e=0;e<d;e++){const t=Math.floor((m^=m<<13,m^=m>>17,m^=m<<5,(m<0?1+~m:m)%65536/65536*d));[f[e],f[t]]=[f[t],f[e]]}for(let e=0;e<d;e++)f[d+e]=f[e];const I=[[1,1],[-1,1],[1,-1],[-1,-1],[1,0],[-1,0],[0,1],[0,-1]];function grad(e,t){const i=f[(f[e%d]+t)%d]%8;return I[i]}function perlin(e,t,i,n){const s=Math.floor(e)%i,r=Math.floor(t)%n,o=e-Math.floor(e),a=t-Math.floor(t),A=grad(s,r),l=grad(s+1,r),c=grad(s,r+1),h=grad(s+1,r+1),p=A[0]*o+A[1]*a,u=l[0]*(o-1)+l[1]*a,g=c[0]*o+c[1]*(a-1),d=h[0]*(o-1)+h[1]*(a-1),f=fade(o),m=fade(a);return lerp(lerp(p,u,f),lerp(g,d,f),m)}let b=1/0,y=-1/0;const C=new Float32Array(i*i);for(let e=0;e<i;e++)for(let t=0;t<i;t++){let n=t/i*s,a=e/i*s,A=1,l=1,c=0,h=0;for(let e=0;e<r;e++){c+=perlin(n*l,a*l,d/l,d/l)*A,h+=A,A*=o,l*=2}let p=c/h;C[e*i+t]=p,p<b&&(b=p),p>y&&(y=p)}const B=1/(y-b);for(let e=0;e<i;e++)for(let n=0;n<i;n++){let s=(C[e*i+n]-b)*B;s=Math.pow(s,A);const r=u.r+(g.r-u.r)*s,o=u.g+(g.g-u.g)*s,a=u.b+(g.b-u.b)*s,l=0,c=4*(e*i+n);t[c]=Math.floor(255*r),t[c+1]=Math.floor(255*o),t[c+2]=Math.floor(255*a),t[c+3]=Math.floor(255*l)}}function texgen(t,i,n=256,s={}){[16,32,64,128,256,512,1024].includes(n)||(n=256);let r=hash(`gen|${i}|${n}|${JSON.stringify(s)}`);if(!t[r]){const o=new Uint8Array(n*n*4);switch(i){case"wood":{let e={...s};e.scale=6+seeder(40,s.seed+"a")/10,e.octaves=s.octaves||3,e.persistence=.5+seeder(50,s.seed+"b")/100,e.rings=2+seeder(200,s.seed+"c")/100,e.distortion=.3+seeder(100,s.seed+"d")/300,e.color1=s.color1||"#442200",e.color2=s.color2||"#ffe0a0",fillNoise(o,n,e)}break;case"marble":{let e={...s};e.scale=s.scale||10,e.octaves=s.octaves||3,e.persistence=s.persistence||.6,e.rings=s.rings||1+seeder(100,s.seed+"m3")/50,e.distortion=s.distortion||.8+seeder(200,s.seed+"m4")/200,e.contrast=s.contrast||1.2,e.color1=s.color1||"#e0e0e0",e.color2=s.color2||"#909090",fillNoise(o,n,e)}break;case"glass":{let e={...s};e.scale=s.scale||32,e.octaves=s.octaves||2,e.persistence=s.persistence||.8,e.contrast=s.contrast||1,e.color1=s.color1||"rgba(255,255,255,0.2)",e.color2=s.color2||"rgba(255,255,255,0.6)",fillNoise(o,n,e)}break;case"gradient":case"pattern":break;default:fillNoise(o,n,s)}const a=new e.DataTexture(o,n,n,e.RGBAFormat);a.needsUpdate=!0,a.wrapS=a.wrapT=e.RepeatWrapping,a.repeat.set(.002,.002),a.center.set(.5,.5),t[r]=a}return t[r]}function getcilindro(t,i,n,s,r,o=Ri,a){a||(a={}),Array.isArray(o)||(o=[o]);const A=function cylgeometry(t,i,n,s,r=16){if(!n||!i)return null;let o=hash(`cy${i}|${n}|${s||n}|${r}`);if(!t.geo[o]){const a=new e.CylinderGeometry(s||n,n,i,r);t.geo[o]=a}return t.geo[o]}(t,n,s,r,a.sides||16);let l=new e.Group;switch((i||"").trim().toUpperCase()){case"X":case"L":l.position.set(n/2,0,0),l.rotation.z=Math.PI/2;break;case"Z":case"P":l.position.set(0,0,n/2),l.rotation.x=Math.PI/2;break;default:l.position.set(0,n/2,0)}if(A){if(!a.nolines){let e=edgesfromgeometry(A);l.add(e)}uvswap(A,a.uvswap,!1);const e=o[0]||Ri,t=o[1]||e,i=o[2]||e;l.add(getmesh(A,[e,t,i]))}return l}function facesettile(e,t,i,n){if(t>1||i>1){let s=n%(t=t??1);const r=1/t,o=1/(i=i??1),a=s*r,A=1-((n-s)/t+1)*o,l=a+r,c=A+o,h=e.geometry.attributes.uv,p=[[a,c],[l,c],[a,A],[l,A]];for(let e=0;e<h.count;e++)h.setXY(e,p[e][0],p[e][1]);h.needsUpdate=!0}}function pickvariant(e,t,i,n,s,r,o={}){let a,{mat:A,testo:l,matover:c}=o;return A?(a=getface(e,t,i,A,o),c&&(c=c.clone(),c.depthTest=!1,c.depthWrite=!1,a.userData.matover=c)):(l=l||"xx",a=gettarghetta(e,l,t,o)),a.layers.disableAll(),a.layers.set(30),a.userData.pickvariant=!0,a.userData.variant=n,a.userData.value=s,a.userData.tooltip=r,a}function getface(t,i,n,s,r={}){let{repeat:o,order:a,center:A=!1,base:l=!1,billboard:c=!1}=r;const h=hash(`f:${i}|${n}|${o?1:0}|${l?1:0}`);if(!t.geo[h]){const s=new e.PlaneGeometry(i,n);let r=l?-.5:0;const a=s.attributes.uv;if(o)for(let e=0;e<a.count;e++)a.setXY(e,a.getX(e)*i/1e3,a.getY(e)*n/1e3);else{const e=[[0,1],[1,1],[0,0],[1,0]];for(let t=0;t<a.count;t++){const i=e[t];a.setXY(t,i[0]-r,i[1]-r)}}a.needsUpdate=!0,t.geo[h]=s}c&&((s=s.clone()).depthTest=!1,s.depthWrite=!1);const p=new e.Mesh(t.geo[h],s);if(p.name=c?"billboard":"face","number"==typeof a&&(p.renderOrder=a),A||p.position.set(i/2,n/2,0),s?.transparent&&p.layers.set(2),c){p.layers.disableAll(),p.layers.set(30),p.userData.billboard=!0;let t=new e.Quaternion,i=new e.Quaternion;p.onBeforeRender=function(e,n,s){this.getWorldQuaternion(t),this.parent?.getWorldQuaternion(i),this.quaternion.copy(s.quaternion),this.quaternion.premultiply(i.invert())}}return p}function getbox(t,i,n,s,r,o){r&&r.isMaterial||(o=r,r=void 0),o||(o={});let{center:a=!1,nolines:A,centerbase:l=!1,px:c=0,py:h=0,pz:p=0}=o;const u=new e.BoxGeometry(i,n,s),g=new e.Group;if(l?g.position.set(0,n/2,0):c||h||p?g.position.set(c||0,h||0,p||0):a||g.position.set(i/2,n/2,s/2),!A||!r){let e=edgesfromgeometry(u);g.add(e)}return r&&g.add(getmesh(u,r)),g}function getcyl(t,i,n,s,r){r||(r={});let{center:o=!1,nolines:a=!1,segments:A=16,top:l=-1,bottom:c=-1,heightSegments:h=1,openEnded:p=!1,thetaStart:u=0,thetaLength:g=2*Math.PI}=r;l<0&&(l=n),c<0&&(c=n);const d=new e.CylinderGeometry(l,c,i,A,h,p,u,g);uvswap(d,r.uvswap,!1);const f=getmesh(d,s||Ri),m=new e.Group;if(m.add(f),m.position.set(0,o?0:i/2,0),!a){let e=edgesfromgeometry(d);m.add(e)}return m}function getsphere(t,i,n,s){s||(s={});let{nolines:r,segmenti:o=16}=s,a=new e.Group;const A=new e.SphereGeometry(i,2*o,o);if(!r){let e=edgesfromgeometry(A);a.add(e)}return a.add(getmesh(A,n||Ri)),a}function makeShape(t){const i=new e.Shape;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}function getextrude(t,i,n=10,s=[],r=void 0,o={}){r&&r.isMaterial||(o=r,r=void 0),o=o??{};let{stonda:a,sx:A,sy:l,round:c,nolines:h}=o,p=hash(`${JSON.stringify(i)}|${n}|${JSON.stringify(o)}|${JSON.stringify(s)}`);A=A??a??0,l=l??a??0;let u=t.geo[p];if(!u){const r=makeShape(i);s.forEach((t=>r.holes.push(function makePath(t){const i=new e.Path;i.moveTo(t[0].x,t[0].y);for(let e=1;e<t.length;e++)i.lineTo(t[e].x,t[e].y);return i.closePath(),i}(t))));const a=A>0&&l>0;u=new e.ExtrudeGeometry(r,{depth:n,bevelEnabled:a,bevelSize:A,bevelThickness:l,bevelSegments:a?c?3:1:0,curveSegments:a?10:1}),t.geo[p]=u,uvswap(u,o.uvswap,!0)}let g=new e.Group;return g.add(new e.Mesh(u,r||Ri)),h||function extrudelines(t,i,n,s,r=3){const makeloop=(t,i)=>{if(!t||t.length<2)return null;const n=t.length,s=new Float32Array(3*(n+1));for(let e=0;e<=n;e++){const r=t[e%n],o=3*e;s[o]=r.x,s[o+1]=r.y,s[o+2]=i}const r=new e.BufferGeometry;return r.setAttribute("position",new e.BufferAttribute(s,3)),new e.Line(r,ki)},addring=e=>{let i=makeloop(e,-r);i&&(i.layers.set(30),t.add(i)),i=makeloop(e,s+r),i&&(i.layers.set(30),t.add(i))};addring(i);for(const e of n)addring(e)}(g,i,s,n,l),g}function getthorus(t,i,n=.2,s,r){r||(r={});let{center:o,nolines:a,segmenti:A=16,tubi:l=12}=r,c=new e.Group;const h=new e.TorusGeometry(i,n,l,2*A);if(c.position.set(0,o?0:i,0),!a){let e=edgesfromgeometry(h);c.add(e)}return c.add(getmesh(h,s||Ri)),c}function getluce(t,i,n="#ffffff",s=1){const r=i.pt;if(!r||!r.length)return null;const o=hash(`${i.key}|${n}|${s}`);if(!t.meshes[o]){const i=makeShape(r),a=new e.ShapeGeometry(i),A=new e.MeshStandardMaterial({color:new e.Color(n),emissive:new e.Color(n),emissiveIntensity:s,toneMapped:!1,transparent:!0,depthWrite:!1,side:e.DoubleSide,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:1}),l=new e.Mesh(a,A);l.layers.set(8),l.userData.isBloom=!0,t.meshes[o]=l,t.mustlight=!0}return t.meshes[o]}function getmarker(e,t,i,n,s,r,o={}){if(t&&i){o||(o={});let{markscale:a=.6,marklink:A,billboard:l}=o;o.markerid=t,o.marker=i,o.noingombro=!0;let c=getface(e,n*a,s*a,r,{order:1}),h=t;h.length>7&&(h=".."+h.slice(-6));let p=gettarghetta(e,`#w,${h}`,50,{noSfondo:!0,layer:11,billboard:l,forcey:!0});return c.add(posiziona(p,{sp:11,order:2})),o.center||(c=posiziona(c,{sl:n*(1-a)/2,sa:s*(1-a)/2})),c.layers.set(28),c.userData.marklink=A,posiziona(c,o)}}function toTrianglesDrawMode(e,s){if(s===t)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(s===i||s===n){let t=e.getIndex();if(null===t){const i=[],n=e.getAttribute("position");if(void 0===n)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<n.count;e++)i.push(e);e.setIndex(i),t=e.getIndex()}const n=t.count-2,r=[];if(s===i)for(let e=1;e<=n;e++)r.push(t.getX(0)),r.push(t.getX(e)),r.push(t.getX(e+1));else for(let e=0;e<n;e++)e%2==0?(r.push(t.getX(e)),r.push(t.getX(e+1)),r.push(t.getX(e+2))):(r.push(t.getX(e+2)),r.push(t.getX(e+1)),r.push(t.getX(e)));r.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=e.clone();return o.setIndex(r),o.clearGroups(),o}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",s),e}function pannellogeometry(t,i,n,s,r=0,o=0,a=0,A=0,l=0,c=2,h=!1){let p=hash(`pg--${i}|${n}|${s}|${r}|${o}|${a}|${A}|${l}|${c}|${h?1:0}`);if(i-=.01,n-=.01,s-=.01,!t.geo[p]){i-=2*l,n-=2*l,s-=2*l;let u=getshape();const g=[{x:A,y:0},{x:n-r,y:0},{x:n,y:r},{x:n,y:s-o},{x:n-o,y:s},{x:a,y:s},{x:0,y:s-a},{x:0,y:A}];u.addpt(g[0]),u.addpt(g[1]),r&&u.addpt(raccordabezier(g[0],g[1],g[2],g[3],c)),u.addpt(g[2]),u.addpt(g[3]),o&&u.addpt(raccordabezier(g[2],g[3],g[4],g[5],c)),u.addpt(g[4]),u.addpt(g[5]),a&&u.addpt(raccordabezier(g[4],g[5],g[6],g[7],c)),u.addpt(g[6]),u.addpt(g[7]),o&&u.addpt(raccordabezier(g[6],g[7],g[0],g[1],c)),u.removeduplicate(.01);let d=u.pt;const f=new e.Shape;f.moveTo(d[0].x,d[0].y);for(let e=1;e<d.length;e++)f.lineTo(d[e].x,d[e].y);f.lineTo(d[0].x,d[0].y);const m={depth:i,bevelEnabled:l>0,bevelThickness:l,bevelSize:l,bevelSegments:1};let I=new e.ExtrudeGeometry(f,m);I=function mergeVertices(e,t=1e-4){t=Math.max(t,Number.EPSILON);const i={},n=e.getIndex(),s=e.getAttribute("position"),r=n?n.count:s.count;let o=0;const a=Object.keys(e.attributes),A={},l={},c=[],h=["getX","getY","getZ","getW"],p=["setX","setY","setZ","setW"];for(let t=0,i=a.length;t<i;t++){const i=a[t],n=e.attributes[i];A[i]=new n.constructor(new n.array.constructor(n.count*n.itemSize),n.itemSize,n.normalized);const s=e.morphAttributes[i];s&&(l[i]||(l[i]=[]),s.forEach(((e,t)=>{const n=new e.array.constructor(e.count*e.itemSize);l[i][t]=new e.constructor(n,e.itemSize,e.normalized)})))}const u=.5*t,g=Math.log10(1/t),d=Math.pow(10,g),f=u*d;for(let t=0;t<r;t++){const s=n?n.getX(t):t;let r="";for(let t=0,i=a.length;t<i;t++){const i=a[t],n=e.getAttribute(i),o=n.itemSize;for(let e=0;e<o;e++)r+=~~(n[h[e]](s)*d+f)+","}if(r in i)c.push(i[r]);else{for(let t=0,i=a.length;t<i;t++){const i=a[t],n=e.getAttribute(i),r=e.morphAttributes[i],c=n.itemSize,u=A[i],g=l[i];for(let e=0;e<c;e++){const t=h[e],i=p[e];if(u[i](o,n[t](s)),r)for(let e=0,n=r.length;e<n;e++)g[e][i](o,r[e][t](s))}}i[r]=o,c.push(o),o++}}const m=e.clone();for(const t in e.attributes){const e=A[t];if(m.setAttribute(t,new e.constructor(e.array.slice(0,o*e.itemSize),e.itemSize,e.normalized)),t in l)for(let e=0;e<l[t].length;e++){const i=l[t][e];m.morphAttributes[t][e]=new i.constructor(i.array.slice(0,o*i.itemSize),i.itemSize,i.normalized)}}return m.setIndex(c),m}(I),uvswap(I,h,!0),t.geo[p]=I}return t.geo[p]}function getpannello(t,i,n,s,r,o,a,A){A||(A={});let l,c,h,{r:p,r1:u,r2:g,r3:d,r4:f,b:m,npt:I}=A;u=u||p||0,g=g||p||0,d=d||p||0,f=f||p||0,I=I||2,m=m||0,(m>=n/2||m>=s/2||m>=r/2)&&(m=0),l="L"==(i=i.trim().toUpperCase())[0]?n:"A"==i[0]?s:r,c="L"==i[1]?n:"A"==i[1]?s:r,h="L"==i[2]?n:"A"==i[2]?s:r;let b=new e.Group;if(!A.nolines){let t=edgesfromgeometry(new e.BoxGeometry(n,s,r));t.position.set(n/2,s/2,r/2),b.add(t)}let y=getmesh(pannellogeometry(t,l,c,h,u,g,d,f,m,I,!A.uvswap),[a||o||Yi,o||Oi]);y.name="pannello",y.layers.set(1);let C=y;return m&&(y.position.set(m,m,m),C=new e.Group,C.add(y)),y=function meshrotate(e,t,i=0,n=0,s=0){switch(e.trim().toUpperCase()){case"LPA":t.rotation.y=Math.PI/2,t.rotation.x=Math.PI,t.position.set(0,s,0);break;case"ALP":t.rotation.x=Math.PI/2,t.position.set(0,i,0);break;case"APL":t.rotation.x=-Math.PI/2,t.rotation.z=-Math.PI/2;break;case"PLA":break;case"PAL":t.rotation.z=Math.PI/2,t.position.set(s,0,0);break;case"LAP":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI/2}return t}(i,C,l,c,h),b.add(y),b}async function getpannello2(e,t,i,n,s,r,o=0){let a;switch((o<0||o>Math.max(i,n,s)/3)&&(o=0),t){case"lap":a=getextrude(e,getshape().fromrect(i-2*o,n-2*o).pt,s-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=s-o,a.position.y=n-o,a.rotation.x=Math.PI;break;case"alp":a=getextrude(e,getshape().fromrect(n-2*o,i-2*o).pt,s-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.position.y=n-o,a.rotation.z=-Math.PI/2;break;case"apl":a=getextrude(e,getshape().fromrect(n-2*o,s-2*o).pt,i-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.position.y=o,a.rotation.y=Math.PI/2,a.rotation.z=Math.PI/2;break;case"pal":a=getextrude(e,getshape().fromrect(s-2*o,n-2*o).pt,i-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=s-o,a.position.y=o,a.rotation.y=Math.PI/2;break;case"pla":a=getextrude(e,getshape().fromrect(s-2*o,i-2*o).pt,n-2*o,[],r,{round:o,stonda:o}),a.rotation.z=-Math.PI/2,a.rotation.x=-Math.PI/2,a.position.x=o,a.position.z=o,a.position.y=o;break;default:a=getextrude(e,getshape().fromrect(i-2*o,s-2*o).pt,n-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.rotation.x=Math.PI/2,a.position.y=n-o}return a}function earcut(e,t,i=2){const n=t&&t.length,s=n?t[0]*i:e.length;let r=linkedList(e,0,s,i,!0);const o=[];if(!r||r.next===r.prev)return o;let a,A,l;if(n&&(r=function eliminateHoles(e,t,i,n){const s=[];for(let i=0,r=t.length;i<r;i++){const o=linkedList(e,t[i]*n,i<r-1?t[i+1]*n:e.length,n,!1);o===o.next&&(o.steiner=!0),s.push(getLeftmost(o))}s.sort(compareXYSlope);for(let e=0;e<s.length;e++)i=eliminateHole(s[e],i);return i}(e,t,r,i)),e.length>80*i){a=1/0,A=1/0;let t=-1/0,n=-1/0;for(let r=i;r<s;r+=i){const i=e[r],s=e[r+1];i<a&&(a=i),s<A&&(A=s),i>t&&(t=i),s>n&&(n=s)}l=Math.max(t-a,n-A),l=0!==l?32767/l:0}return earcutLinked(r,o,i,a,A,l,0),o}function linkedList(e,t,i,n,s){let r;if(s===function signedArea(e,t,i,n){let s=0;for(let r=t,o=i-n;r<i;r+=n)s+=(e[o]-e[r])*(e[r+1]+e[o+1]),o=r;return s}(e,t,i,n)>0)for(let s=t;s<i;s+=n)r=insertNode(s/n|0,e[s],e[s+1],r);else for(let s=i-n;s>=t;s-=n)r=insertNode(s/n|0,e[s],e[s+1],r);return r&&equals(r,r.next)&&(removeNode(r),r=r.next),r}function filterPoints(e,t){if(!e)return e;t||(t=e);let i,n=e;do{if(i=!1,n.steiner||!equals(n,n.next)&&0!==area(n.prev,n,n.next))n=n.next;else{if(removeNode(n),n=t=n.prev,n===n.next)break;i=!0}}while(i||n!==t);return t}function earcutLinked(e,t,i,n,s,r,o){if(!e)return;!o&&r&&function indexCurve(e,t,i,n){let s=e;do{0===s.z&&(s.z=zOrder(s.x,s.y,t,i,n)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next}while(s!==e);s.prevZ.nextZ=null,s.prevZ=null,function sortLinked(e){let t,i=1;do{let n,s=e;e=null;let r=null;for(t=0;s;){t++;let o=s,a=0;for(let e=0;e<i&&(a++,o=o.nextZ,o);e++);let A=i;for(;a>0||A>0&&o;)0!==a&&(0===A||!o||s.z<=o.z)?(n=s,s=s.nextZ,a--):(n=o,o=o.nextZ,A--),r?r.nextZ=n:e=n,n.prevZ=r,r=n;s=o}r.nextZ=null,i*=2}while(t>1);return e}(s)}(e,n,s,r);let a=e;for(;e.prev!==e.next;){const A=e.prev,l=e.next;if(r?isEarHashed(e,n,s,r):isEar(e))t.push(A.i,e.i,l.i),removeNode(e),e=l.next,a=l.next;else if((e=l)===a){o?1===o?earcutLinked(e=cureLocalIntersections(filterPoints(e),t),t,i,n,s,r,2):2===o&&splitEarcut(e,t,i,n,s,r):earcutLinked(filterPoints(e),t,i,n,s,r,1);break}}}function isEar(e){const t=e.prev,i=e,n=e.next;if(area(t,i,n)>=0)return!1;const s=t.x,r=i.x,o=n.x,a=t.y,A=i.y,l=n.y,c=Math.min(s,r,o),h=Math.min(a,A,l),p=Math.max(s,r,o),u=Math.max(a,A,l);let g=n.next;for(;g!==t;){if(g.x>=c&&g.x<=p&&g.y>=h&&g.y<=u&&pointInTriangleExceptFirst(s,a,r,A,o,l,g.x,g.y)&&area(g.prev,g,g.next)>=0)return!1;g=g.next}return!0}function isEarHashed(e,t,i,n){const s=e.prev,r=e,o=e.next;if(area(s,r,o)>=0)return!1;const a=s.x,A=r.x,l=o.x,c=s.y,h=r.y,p=o.y,u=Math.min(a,A,l),g=Math.min(c,h,p),d=Math.max(a,A,l),f=Math.max(c,h,p),m=zOrder(u,g,t,i,n),I=zOrder(d,f,t,i,n);let b=e.prevZ,y=e.nextZ;for(;b&&b.z>=m&&y&&y.z<=I;){if(b.x>=u&&b.x<=d&&b.y>=g&&b.y<=f&&b!==s&&b!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;if(b=b.prevZ,y.x>=u&&y.x<=d&&y.y>=g&&y.y<=f&&y!==s&&y!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,y.x,y.y)&&area(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;b&&b.z>=m;){if(b.x>=u&&b.x<=d&&b.y>=g&&b.y<=f&&b!==s&&b!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,b.x,b.y)&&area(b.prev,b,b.next)>=0)return!1;b=b.prevZ}for(;y&&y.z<=I;){if(y.x>=u&&y.x<=d&&y.y>=g&&y.y<=f&&y!==s&&y!==o&&pointInTriangleExceptFirst(a,c,A,h,l,p,y.x,y.y)&&area(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function cureLocalIntersections(e,t){let i=e;do{const n=i.prev,s=i.next.next;!equals(n,s)&&intersects(n,i,i.next,s)&&locallyInside(n,s)&&locallyInside(s,n)&&(t.push(n.i,i.i,s.i),removeNode(i),removeNode(i.next),i=e=s),i=i.next}while(i!==e);return filterPoints(i)}function splitEarcut(e,t,i,n,s,r){let o=e;do{let e=o.next.next;for(;e!==o.prev;){if(o.i!==e.i&&isValidDiagonal(o,e)){let a=splitPolygon(o,e);return o=filterPoints(o,o.next),a=filterPoints(a,a.next),earcutLinked(o,t,i,n,s,r,0),void earcutLinked(a,t,i,n,s,r,0)}e=e.next}o=o.next}while(o!==e)}function compareXYSlope(e,t){let i=e.x-t.x;if(0===i&&(i=e.y-t.y,0===i)){i=(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x)}return i}function eliminateHole(e,t){const i=function findHoleBridge(e,t){let i=t;const n=e.x,s=e.y;let r,o=-1/0;if(equals(e,i))return i;do{if(equals(e,i.next))return i.next;if(s<=i.y&&s>=i.next.y&&i.next.y!==i.y){const e=i.x+(s-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=n&&e>o&&(o=e,r=i.x<i.next.x?i:i.next,e===n))return r}i=i.next}while(i!==t);if(!r)return null;const a=r,A=r.x,l=r.y;let c=1/0;i=r;do{if(n>=i.x&&i.x>=A&&n!==i.x&&pointInTriangle(s<l?n:o,s,A,l,s<l?o:n,s,i.x,i.y)){const t=Math.abs(s-i.y)/(n-i.x);locallyInside(i,e)&&(t<c||t===c&&(i.x>r.x||i.x===r.x&&sectorContainsSector(r,i)))&&(r=i,c=t)}i=i.next}while(i!==a);return r}(e,t);if(!i)return t;const n=splitPolygon(i,e);return filterPoints(n,n.next),filterPoints(i,i.next)}function sectorContainsSector(e,t){return area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0}function zOrder(e,t,i,n,s){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*s|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-n)*s|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function getLeftmost(e){let t=e,i=e;do{(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next}while(t!==e);return i}function pointInTriangle(e,t,i,n,s,r,o,a){return(s-o)*(t-a)>=(e-o)*(r-a)&&(e-o)*(n-a)>=(i-o)*(t-a)&&(i-o)*(r-a)>=(s-o)*(n-a)}function pointInTriangleExceptFirst(e,t,i,n,s,r,o,a){return!(e===o&&t===a)&&pointInTriangle(e,t,i,n,s,r,o,a)}function isValidDiagonal(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function intersectsPolygon(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&intersects(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(e,t)&&(locallyInside(e,t)&&locallyInside(t,e)&&function middleInside(e,t){let i=e,n=!1;const s=(e.x+t.x)/2,r=(e.y+t.y)/2;do{i.y>r!=i.next.y>r&&i.next.y!==i.y&&s<(i.next.x-i.x)*(r-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==e);return n}(e,t)&&(area(e.prev,e,t.prev)||area(e,t.prev,t))||equals(e,t)&&area(e.prev,e,e.next)>0&&area(t.prev,t,t.next)>0)}function area(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function equals(e,t){return e.x===t.x&&e.y===t.y}function intersects(e,t,i,n){const s=sign(area(e,t,i)),r=sign(area(e,t,n)),o=sign(area(i,n,e)),a=sign(area(i,n,t));return s!==r&&o!==a||(!(0!==s||!onSegment(e,i,t))||(!(0!==r||!onSegment(e,n,t))||(!(0!==o||!onSegment(i,e,n))||!(0!==a||!onSegment(i,t,n)))))}function onSegment(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function sign(e){return e>0?1:e<0?-1:0}function locallyInside(e,t){return area(e.prev,e,e.next)<0?area(e,t,e.next)>=0&&area(e,e.prev,t)>=0:area(e,t,e.prev)<0||area(e,e.next,t)<0}function splitPolygon(e,t){const i=createNode(e.i,e.x,e.y),n=createNode(t.i,t.x,t.y),s=e.next,r=t.prev;return e.next=t,t.prev=e,i.next=s,s.prev=i,n.next=i,i.prev=n,r.next=n,n.prev=r,n}function insertNode(e,t,i,n){const s=createNode(e,t,i);return n?(s.next=n.next,s.prev=n,n.next.prev=s,n.next=s):(s.prev=s,s.next=s),s}function removeNode(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function createNode(e,t,i){return{i:e,x:t,y:i,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function unifyVertices(e,t,i){const n=new Map,s=[],r=[],o=[];for(let a=0;a<i.length;a++){const A=i[a],l=e[3*A+0],c=e[3*A+1],h=e[3*A+2],p=t[2*A+0],u=t[2*A+1],g=`${l},${c},${h}|${p},${u}`;if(n.has(g))o.push(n.get(g));else{const e=s.length/3;n.set(g,e),s.push(l,c,h),r.push(p,u),o.push(e)}}return{vertices:s,uvs:r,indices:o}}function infoestrudi(e,t,i,n,s){n||(n={}),i||(i=[]);let r=n.p0||0,o=Math.tan(n.coeffbase1*Ue||0),a=Math.tan(n.coeffbase2*Ue||0),A=t||n.p1||20,l=Math.tan(n.coefftop1*Ue||0),c=Math.tan(n.coefftop2*Ue||0),{mi:h,ma:p}=e.pt.reduce(((e,t)=>(e.mi.x=Math.min(e.mi.x,t.x),e.mi.y=Math.min(e.mi.y,t.y),e.ma.x=Math.max(e.ma.x,t.x),e.ma.y=Math.max(e.ma.y,t.y),e)),{mi:{x:1e9,y:1e9},ma:{x:-1e9,y:-1e9}}),u=0,g=1e9;function getpars(e){e.z1=getzeta(e.x,e.y,r,o,a,s),e.z2=getzeta(e.x,e.y,A,l,c,s),e.l=Math.abs(e.z2-e.z1)}for(let e of i)getpars(e);getpars(h),getpars(p);let d=[{x:h.x,y:h.y},{x:p.x,y:h.y},{x:p.x,y:p.y},{x:h.x,y:p.y}];for(let e of d)getpars(e),e.l>u&&(u=e.l),e.l<g&&(g=e.l);return{aini:n.coeffbase1||0,aini2:n.coeffbase2||0,afin:n.coefftop1||0,afin2:n.coefftop2||0,pts:i,mi:h,ma:p,rect:d,dimx:p.x-h.x,dimy:p.y-h.y,lnom:A-r,lmax:u,lmin:g,lmed:(u+g)/2}}function getzeta(e,t,i,n,s,r,o=!1){let a=e*n+t*s+i;if(r){let e=r.xfromy(-t,0,!0);o?a-=e:a=e}return a}function sidegeomfromshapes(t,i,n,s,r=!1,o=!1,a=!1){if(n&&s){if(n.length!==s.length)throw new Error("shapes with different length");if(n.length<2)throw new Error("I percorsi devono contenere almeno due punti ciascuno.");if(!t.geo[i]){const A=[],l=[],c=[],h=n.length,addpts=e=>{for(const t of e)A.push(t.x,t.y,t.z),a?l.push(t.v/1e3,t.u/1e3):l.push(t.u/1e3,t.v/1e3)},equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z,addindexquad=(e,t,i,n)=>{r?c.push(e,i,t,i,n,t):c.push(e,t,i,i,t,n)};addpts(n),addpts(s);for(let e=0;e<h-1;e++){const t=e+1;equalpos(n[e],n[t])||addindexquad(e,t,e+h,t+h)}const p=new e.BufferGeometry;if(o){let t=unifyVertices(A,l,c);p.setAttribute("position",new e.Float32BufferAttribute(t.vertices,3)),p.setAttribute("uv",new e.Float32BufferAttribute(t.uvs,2)),p.setIndex(t.indices)}else p.setAttribute("position",new e.Float32BufferAttribute(A,3)),p.setAttribute("uv",new e.Float32BufferAttribute(l,2)),p.setIndex(c);p.computeVertexNormals(),p.computeTangents?.(),t.geo[i]=p}return t.geo[i]}}function bottomgeomfromshape(t,i,n,s,r=0,o=0,a=0,A=null,l=!1,c=!1){let h=`bg:${r}|${o}${a}|${n.key}|${i}|${A?.key||""}|${c?1:0}`;for(let p of s)h=`${h}|${p.key}`;if(h=hash(h),!t.geo[h]){let u,g=[],d=[],f=n.pt.length;g=n.vec;const m=new e.BufferGeometry,I=[],b=[],y=[];function addvertexes(e,t){let n=I.length/3;for(let n=0;n<e.length;n++){const s=e[n],l=t[2*s],h=-t[2*s+1],p=getzeta(l,h,r,o,a,A,i);I.push(l,h,p),c?b.push(h/1e3,l/1e3):b.push(l/1e3,h/1e3)}for(let t=0;t<e.length;t+=3)i?y.push(t+n,t+n+2,t+n+1):y.push(t+n,t+n+1,t+n+2)}if(A){let C=n.sliceony(A);for(let B of C){let E=B.flatMap((e=>[e.x,e.y]));addvertexes(earcut(E,[]),E)}}else if(Array.isArray(s)&&s.length){for(let x of s)d.push(f),f+=x.pt.length,g=[...g,...x.vec];u=earcut(g,d),addvertexes(u,g)}else u=earcut(g),addvertexes(u,g);if(l){let w=unifyVertices(I,b,y);m.setAttribute("position",new e.Float32BufferAttribute(w.vertices,3)),m.setAttribute("uv",new e.Float32BufferAttribute(w.uvs,2)),m.setIndex(w.indices)}else m.setAttribute("position",new e.Float32BufferAttribute(I,3)),m.setAttribute("uv",new e.Float32BufferAttribute(b,2)),m.setIndex(y);m.computeVertexNormals(),m.computeTangents?.(),t.geo[h]=m}return t.geo[h]}function estrusorotate(e,t,i=0){switch(e.trim().toUpperCase().slice(0,1)){case"A":t.rotation.x=-Math.PI/2;break;case"L":t.rotation.y=Math.PI/2,t.rotation.z=Math.PI;break;case"P":t.rotation.z=Math.PI/2}return t}function estruso(t,i,n,s,r,o,a){a||(a={}),o||(o=[]),Array.isArray(o)||(o=[o,o,o]);let A=a.p0||0,l=Math.tan(a.coeffbase1*Ue||0),c=Math.tan(a.coeffbase2*Ue||0),h=n||a.p1||20,p=Math.tan(a.coefftop1*Ue||0),u=Math.tan(a.coefftop2*Ue||0),g=a.shapetop,d=a.shapebase||a.shapebottom;g&&(u=0),d&&(u=0);let f=d?d.key:"",m=g?g.key:"",I=a.notopholes||!1,b=a.nobottomholes||a.nobaseholes||!1,y=a.invert||!1,C=a.open||!1,B=new e.Group;if(s){if(!a.nobase){let e=r;b&&(e=Array.isArray(b)?e.filter(((e,t)=>!b[t])):[]);let i=bottomgeomfromshape(t,!a.notop,s,C?[]:e,A,l,c,d,!1,a.uvswap);a.nolines||B.add(edgesfromgeometry(i)),B.add(getmesh(i,o[0]||Ri))}if(!a.notop){let e=r;I&&(e=Array.isArray(I)?e.filter(((e,t)=>!I[t])):[]);let i=bottomgeomfromshape(t,!1,s,C?[]:e,h,p,u,g,!1,a.uvswap);B.add(getmesh(i,o[1]||o[0]||Ri)),a.nolines||B.add(edgesfromgeometry(i))}if(!a.nosides){let e=s.to3d(0,A,l,-c,C,d,!y),i=s.to3d(1,h,p,-u,C,g,y),n=`${s.key}${y?1:0}|${A}|${h}|${l}|${c||f}|${p}|${u||m}|${C}|${a.wvswap?1:0}`,E=sidegeomfromshapes(t,n,e,i,!1,!1,a.uvswap);if(a.nolines||a.nosidelines||B.add(edgesfromgeometry(E)),B.add(getmesh(E,o[2]||o[0]||Ri)),r&&!C)for(let s=0;s<r.length;s++){let g=r[s];if(Array.isArray(I)){if(I[s])continue}else if(I)continue;if(Array.isArray(b)){if(b[s])continue}else if(b)continue;e=g.to3d(0,A,l,c),i=g.to3d(0,h,p,u),n=`${g.key}|${A}|${h}|${l}|${c}|${p}|${u}`;let d=sidegeomfromshapes(t,n,e,i,!0);a.nolines||a.nosidelines||B.add(edgesfromgeometry(d)),B.add(getmesh(d,o[3]||o[0]||Ri))}}return estrusorotate(i,B,n)}return B}function revolve(t,i,n,s,r){r||(r={});let o=r.segmenti??12,a=hash(`rev|${i.key}|${n}|${o}|${r?.uvswap}`),A=t.geo[a],l=new e.Group;if(!A){const n=i.pt.map((t=>new e.Vector2(t.x,t.y)));A=new e.LatheGeometry(n,o,0,2*Math.PI),uvswap(A,r.uvswap,!0),t.geo[a]=A}const c=new e.Mesh(A,s);return l.add(c),r.nolines||r.nosidelines||l.add(edgesfromgeometry(A)),l}function estrusopat(t,i,n,s,r,o,a){a||(a={});let A=a.invert;o||(o=[]);let l=a.open,c=a.closepat;if(!n.pt?.length)return;let h=r.to3d(0,0,0,0,l),p=new e.Group;if(!a.nobase&&!a.open&&!c){let i=new e.Group,A=angle3point(s[0],n.pt[0],n.pt[1])+Math.PI/2,l=bottomgeomfromshape(t,!1,r,[],0,-Math.tan(A),0,null,!1,a.uvswap);i.add(getmesh(l,o[0]||Ri)),i.add(edgesfromgeometry(l));let c=n.infosegmento(0,!0);p.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}if(!a.notop&&!a.open&&!c){let i=new e.Group,A=-(angle3point(n.pt[n.npt-2],n.pt[n.npt-1],s[n.npt-1])+Math.PI/2),l=bottomgeomfromshape(t,!0,r,[],0,-Math.tan(A),0,null,!1,a.uvswap);i.add(getmesh(l,o[1]||o[0]||Ri)),i.add(edgesfromgeometry(l));let c=n.infosegmento(n.pt.length-1,!0);p.add(posiziona(i,{sl:c.x,sp:c.y,sa:0,ay:90-c.ang}))}if(!a.nosides){const i=function sidegeomfrompat(t,i,n,s,r,o,a=!1){let A=`bsg:${i.key}|${n.key}|${r}|${o}|${a}`;if(n.npt==s.length){if(A=hash(A),!t.geo[A]){const l=[],c=[],h=[],p=i.length,equalpos=(e,t)=>e.x===t.x&&e.y===t.y&&e.z===t.z;let u=0,g=n.pt,d=n.npt;const f=.001,addpts=(t,i,n,s)=>{for(const r of t){let t=new e.Vector3(r.x,r.y,r.x*s);t.applyMatrix4(i),l.push(t.x,t.y,t.z),a?c.push(r.u*f,(r.v+n)*f):c.push((r.v+n)*f,r.u*f)}};let m=d;for(let t=0;t<d;t++){let r;r=t<d-1?angle3point(s[t],g[t],g[t+1])+Math.PI/2:-(angle3point(g[t-1],g[t],s[t])+Math.PI/2);let o=-Math.tan(r),a=n.infosegmento(t,!0),A=new e.Object3D;A.position.set(a.x,0,a.y),A.rotation.set(0,(90-a.ang)*Ue,0),A.updateMatrix(),addpts(i,A.matrix,u,o),u+=a.l}if(r){let t=n.infosegmento(0,!0),r=new e.Object3D;r.position.set(t.x,0,t.y),r.rotation.set(0,(90-t.ang)*Ue,0);let o=angle3point(g[d-1],g[0],s[0])+Math.PI/2,a=-Math.tan(o);r.updateMatrix(),addpts(i,r.matrix,u,a),u+=t.l,m++}for(let e=0;e<m-1;e++)for(let t=0;t<p-1;t++){const addindexquad=(e,t,i,n)=>{o?h.push(e,i,t,i,n,t):h.push(e,t,i,i,t,n)},n=t+1;equalpos(i[t],i[n])||addindexquad(t+e*p,n+e*p,t+(e+1)*p,n+(e+1)*p)}const I=new e.BufferGeometry;I.setAttribute("position",new e.Float32BufferAttribute(l,3)),I.setAttribute("uv",new e.Float32BufferAttribute(c,2)),I.setIndex(h),I.computeVertexNormals(),I.computeTangents?.(),t[A]=I}return t[A]}}(t,h,n,s,c?1:0,A?1:0,a.uvswap);i&&(a.nolines||a.nosidelines||p.add(edgesfromgeometry(i)),p.add(getmesh(i,o[2]||o[0]||Ri)))}return estrusorotate(i,p,0)}async function spritemat(t,i){try{let n={transparent:!0,depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1};if(i.startsWith("#"))n.color=i;else{let e=await t.tex(i,1e3,1e3);e?n.map=e:n.color="black"}return new e.SpriteMaterial(n)}catch(e){return Ri}}function getsprite0(t,i,n,s,r,o={}){o||(o={});let{size:a=50,pick:A=!1,screen:l=!1,sizex:c,sizey:h}=o;const p=new e.Sprite(r);p.position.set(0,0,0),p.userData.issprite=!0,p.userData.ispunto=t,p.userData.ispick=A,p.userData.isScreen=l,p.renderOrder=999,p.layers.set(29),p.name=t?"_punto":"_sprite";let u=new e.Group;return u.position.set(i,n,s),u.scale.set(c||a,h||c||a,1),u.add(p),u.traverse((e=>{e.material&&(e.material.depthTest=!1,e.material.depthWrite=!1)})),u.renderOrder=999,u}async function getpunto(t,i,n,s,r="yellow",o){o||(o={size:20}),o.screen=!0;const a=await function createCircleTexture(t,i=64,n="rgba(255,0,0,1)"){const s=`ct|${i}|${n}`;if(!t.textures[s]){const r=document.createElement("canvas");r.width=r.height=i;const o=r.getContext("2d"),a=i/2;o.clearRect(0,0,i,i),o.fillStyle=n,o.beginPath(),o.arc(a,a,a,0,2*Math.PI),o.fill();const A=new e.CanvasTexture(r);A.needsUpdate=!0,t.textures[s]=A}return t.textures[s]}(t,64,r);return getsprite0(!0,i,n,s,new e.SpriteMaterial({map:a,transparent:!0,fog:!1,toneMapped:!1}),o)}function getsprite(e,t,i,n,s,r={}){return getsprite0(!1,t,i,n,s,r)}class GLTFLoader extends s{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(e){return new GLTFMaterialsClearcoatExtension(e)})),this.register((function(e){return new GLTFMaterialsDispersionExtension(e)})),this.register((function(e){return new GLTFTextureBasisUExtension(e)})),this.register((function(e){return new GLTFTextureWebPExtension(e)})),this.register((function(e){return new GLTFTextureAVIFExtension(e)})),this.register((function(e){return new GLTFMaterialsSheenExtension(e)})),this.register((function(e){return new GLTFMaterialsTransmissionExtension(e)})),this.register((function(e){return new GLTFMaterialsVolumeExtension(e)})),this.register((function(e){return new GLTFMaterialsIorExtension(e)})),this.register((function(e){return new GLTFMaterialsEmissiveStrengthExtension(e)})),this.register((function(e){return new GLTFMaterialsSpecularExtension(e)})),this.register((function(e){return new GLTFMaterialsIridescenceExtension(e)})),this.register((function(e){return new GLTFMaterialsAnisotropyExtension(e)})),this.register((function(e){return new GLTFMaterialsBumpExtension(e)})),this.register((function(e){return new GLTFLightsExtension(e)})),this.register((function(e){return new GLTFMeshoptCompression(e)})),this.register((function(e){return new GLTFMeshGpuInstancing(e)}))}load(e,t,i,n){const s=this;let a;if(""!==this.resourcePath)a=this.resourcePath;else if(""!==this.path){const t=r.extractUrlBase(e);a=r.resolveURL(t,this.path)}else a=r.extractUrlBase(e);this.manager.itemStart(e);const _onError=function(t){n?n(t):console.error(t),s.manager.itemError(e),s.manager.itemEnd(e)},A=new o(this.manager);A.setPath(this.path),A.setResponseType("arraybuffer"),A.setRequestHeader(this.requestHeader),A.setWithCredentials(this.withCredentials),A.load(e,(function(i){try{s.parse(i,a,(function(i){t(i),s.manager.itemEnd(e)}),_onError)}catch(e){_onError(e)}}),i,_onError)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return-1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return-1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,n){let s;const r={},o={},a=new TextDecoder;if("string"==typeof e)s=JSON.parse(e);else if(e instanceof ArrayBuffer){if(a.decode(new Uint8Array(e,0,4))===Ji){try{r[Wi.KHR_BINARY_GLTF]=new GLTFBinaryExtension(e)}catch(e){return void(n&&n(e))}s=JSON.parse(r[Wi.KHR_BINARY_GLTF].content)}else s=JSON.parse(a.decode(e))}else s=e;if(void 0===s.asset||s.asset.version[0]<2)return void(n&&n(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const A=new GLTFParser(s,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});A.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){const t=this.pluginCallbacks[e](A);t.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[t.name]=t,r[t.name]=!0}if(s.extensionsUsed)for(let e=0;e<s.extensionsUsed.length;++e){const t=s.extensionsUsed[e],i=s.extensionsRequired||[];switch(t){case Wi.KHR_MATERIALS_UNLIT:r[t]=new GLTFMaterialsUnlitExtension;break;case Wi.KHR_DRACO_MESH_COMPRESSION:r[t]=new GLTFDracoMeshCompressionExtension(s,this.dracoLoader);break;case Wi.KHR_TEXTURE_TRANSFORM:r[t]=new GLTFTextureTransformExtension;break;case Wi.KHR_MESH_QUANTIZATION:r[t]=new GLTFMeshQuantizationExtension;break;default:i.indexOf(t)>=0&&void 0===o[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}A.setExtensions(r),A.setPlugins(o),A.parse(i,n)}parseAsync(e,t){const i=this;return new Promise((function(n,s){i.parse(e,t,n,s)}))}}function GLTFRegistry(){let e={};return{get:function(t){return e[t]},add:function(t,i){e[t]=i},remove:function(t){delete e[t]},removeAll:function(){e={}}}}const Wi={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class GLTFLightsExtension{constructor(e){this.parser=e,this.name=Wi.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i];n.extensions&&n.extensions[this.name]&&void 0!==n.extensions[this.name].light&&e._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(e){const t=this.parser,i="light:"+e;let n=t.cache.get(i);if(n)return n;const s=t.json,r=((s.extensions&&s.extensions[this.name]||{}).lights||[])[e];let o;const a=new l(16777215);void 0!==r.color&&a.setRGB(r.color[0],r.color[1],r.color[2],c);const A=void 0!==r.range?r.range:0;switch(r.type){case"directional":o=new g(a),o.target.position.set(0,0,-1),o.add(o.target);break;case"point":o=new u(a),o.distance=A;break;case"spot":o=new p(a),o.distance=A,r.spot=r.spot||{},r.spot.innerConeAngle=void 0!==r.spot.innerConeAngle?r.spot.innerConeAngle:0,r.spot.outerConeAngle=void 0!==r.spot.outerConeAngle?r.spot.outerConeAngle:Math.PI/4,o.angle=r.spot.outerConeAngle,o.penumbra=1-r.spot.innerConeAngle/r.spot.outerConeAngle,o.target.position.set(0,0,-1),o.add(o.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+r.type)}return o.position.set(0,0,0),o.decay=2,assignExtrasToUserData(o,r),void 0!==r.intensity&&(o.intensity=r.intensity),o.name=t.createUniqueName(r.name||"light_"+e),n=Promise.resolve(o),t.cache.add(i,n),n}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,i=this.parser,n=i.json.nodes[e],s=(n.extensions&&n.extensions[this.name]||{}).light;return void 0===s?null:this._loadLight(s).then((function(e){return i._getNodeRef(t.cache,s,e)}))}}class GLTFMaterialsUnlitExtension{constructor(){this.name=Wi.KHR_MATERIALS_UNLIT}getMaterialType(){return Y}extendParams(e,t,i){const n=[];e.color=new l(1,1,1),e.opacity=1;const s=t.pbrMetallicRoughness;if(s){if(Array.isArray(s.baseColorFactor)){const t=s.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],c),e.opacity=t[3]}void 0!==s.baseColorTexture&&n.push(i.assignTexture(e,"map",s.baseColorTexture,h))}return Promise.all(n)}}class GLTFMaterialsEmissiveStrengthExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name].emissiveStrength;return void 0!==n&&(t.emissiveIntensity=n),Promise.resolve()}}class GLTFMaterialsClearcoatExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];if(void 0!==r.clearcoatFactor&&(t.clearcoat=r.clearcoatFactor),void 0!==r.clearcoatTexture&&s.push(i.assignTexture(t,"clearcoatMap",r.clearcoatTexture)),void 0!==r.clearcoatRoughnessFactor&&(t.clearcoatRoughness=r.clearcoatRoughnessFactor),void 0!==r.clearcoatRoughnessTexture&&s.push(i.assignTexture(t,"clearcoatRoughnessMap",r.clearcoatRoughnessTexture)),void 0!==r.clearcoatNormalTexture&&(s.push(i.assignTexture(t,"clearcoatNormalMap",r.clearcoatNormalTexture)),void 0!==r.clearcoatNormalTexture.scale)){const e=r.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new A(e,e)}return Promise.all(s)}}class GLTFMaterialsDispersionExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_DISPERSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.dispersion=void 0!==n.dispersion?n.dispersion:0,Promise.resolve()}}class GLTFMaterialsIridescenceExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return void 0!==r.iridescenceFactor&&(t.iridescence=r.iridescenceFactor),void 0!==r.iridescenceTexture&&s.push(i.assignTexture(t,"iridescenceMap",r.iridescenceTexture)),void 0!==r.iridescenceIor&&(t.iridescenceIOR=r.iridescenceIor),void 0===t.iridescenceThicknessRange&&(t.iridescenceThicknessRange=[100,400]),void 0!==r.iridescenceThicknessMinimum&&(t.iridescenceThicknessRange[0]=r.iridescenceThicknessMinimum),void 0!==r.iridescenceThicknessMaximum&&(t.iridescenceThicknessRange[1]=r.iridescenceThicknessMaximum),void 0!==r.iridescenceThicknessTexture&&s.push(i.assignTexture(t,"iridescenceThicknessMap",r.iridescenceThicknessTexture)),Promise.all(s)}}class GLTFMaterialsSheenExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[];t.sheenColor=new l(0,0,0),t.sheenRoughness=0,t.sheen=1;const r=n.extensions[this.name];if(void 0!==r.sheenColorFactor){const e=r.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],c)}return void 0!==r.sheenRoughnessFactor&&(t.sheenRoughness=r.sheenRoughnessFactor),void 0!==r.sheenColorTexture&&s.push(i.assignTexture(t,"sheenColorMap",r.sheenColorTexture,h)),void 0!==r.sheenRoughnessTexture&&s.push(i.assignTexture(t,"sheenRoughnessMap",r.sheenRoughnessTexture)),Promise.all(s)}}class GLTFMaterialsTransmissionExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return void 0!==r.transmissionFactor&&(t.transmission=r.transmissionFactor),void 0!==r.transmissionTexture&&s.push(i.assignTexture(t,"transmissionMap",r.transmissionTexture)),Promise.all(s)}}class GLTFMaterialsVolumeExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];t.thickness=void 0!==r.thicknessFactor?r.thicknessFactor:0,void 0!==r.thicknessTexture&&s.push(i.assignTexture(t,"thicknessMap",r.thicknessTexture)),t.attenuationDistance=r.attenuationDistance||1/0;const o=r.attenuationColor||[1,1,1];return t.attenuationColor=(new l).setRGB(o[0],o[1],o[2],c),Promise.all(s)}}class GLTFMaterialsIorExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser.json.materials[e];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const n=i.extensions[this.name];return t.ior=void 0!==n.ior?n.ior:1.5,Promise.resolve()}}class GLTFMaterialsSpecularExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];t.specularIntensity=void 0!==r.specularFactor?r.specularFactor:1,void 0!==r.specularTexture&&s.push(i.assignTexture(t,"specularIntensityMap",r.specularTexture));const o=r.specularColorFactor||[1,1,1];return t.specularColor=(new l).setRGB(o[0],o[1],o[2],c),void 0!==r.specularColorTexture&&s.push(i.assignTexture(t,"specularColorMap",r.specularColorTexture,h)),Promise.all(s)}}class GLTFMaterialsBumpExtension{constructor(e){this.parser=e,this.name=Wi.EXT_MATERIALS_BUMP}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return t.bumpScale=void 0!==r.bumpFactor?r.bumpFactor:1,void 0!==r.bumpTexture&&s.push(i.assignTexture(t,"bumpMap",r.bumpTexture)),Promise.all(s)}}class GLTFMaterialsAnisotropyExtension{constructor(e){this.parser=e,this.name=Wi.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?a:null}extendMaterialParams(e,t){const i=this.parser,n=i.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const s=[],r=n.extensions[this.name];return void 0!==r.anisotropyStrength&&(t.anisotropy=r.anisotropyStrength),void 0!==r.anisotropyRotation&&(t.anisotropyRotation=r.anisotropyRotation),void 0!==r.anisotropyTexture&&s.push(i.assignTexture(t,"anisotropyMap",r.anisotropyTexture)),Promise.all(s)}}class GLTFTextureBasisUExtension{constructor(e){this.parser=e,this.name=Wi.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,i=t.json,n=i.textures[e];if(!n.extensions||!n.extensions[this.name])return null;const s=n.extensions[this.name],r=t.options.ktx2Loader;if(!r){if(i.extensionsRequired&&i.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,s.source,r)}}class GLTFTextureWebPExtension{constructor(e){this.parser=e,this.name=Wi.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,s=n.textures[e];if(!s.extensions||!s.extensions[t])return null;const r=s.extensions[t],o=n.images[r.source];let a=i.textureLoader;if(o.uri){const e=i.options.manager.getHandler(o.uri);null!==e&&(a=e)}return this.detectSupport().then((function(s){if(s)return i.loadTextureImage(e,r.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFTextureAVIFExtension{constructor(e){this.parser=e,this.name=Wi.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,n=i.json,s=n.textures[e];if(!s.extensions||!s.extensions[t])return null;const r=s.extensions[t],o=n.images[r.source];let a=i.textureLoader;if(o.uri){const e=i.options.manager.getHandler(o.uri);null!==e&&(a=e)}return this.detectSupport().then((function(s){if(s)return i.loadTextureImage(e,r.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return i.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFMeshoptCompression{constructor(e){this.name=Wi.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const e=i.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return n.then((function(t){const i=e.byteOffset||0,n=e.byteLength||0,r=e.count,o=e.byteStride,a=new Uint8Array(t,i,n);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(r,o,a,e.mode,e.filter).then((function(e){return e.buffer})):s.ready.then((function(){const t=new ArrayBuffer(r*o);return s.decodeGltfBuffer(new Uint8Array(t),r,o,a,e.mode,e.filter),t}))}))}return null}}class GLTFMeshGpuInstancing{constructor(e){this.name=Wi.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||void 0===i.mesh)return null;const n=t.meshes[i.mesh];for(const e of n.primitives)if(e.mode!==$i.TRIANGLES&&e.mode!==$i.TRIANGLE_STRIP&&e.mode!==$i.TRIANGLE_FAN&&void 0!==e.mode)return null;const s=i.extensions[this.name].attributes,r=[],o={};for(const e in s)r.push(this.parser.getDependency("accessor",s[e]).then((t=>(o[e]=t,o[e]))));return r.length<1?null:(r.push(this.parser.createNodeMesh(e)),Promise.all(r).then((e=>{const t=e.pop(),i=t.isGroup?t.children:[t],n=e[0].count,s=[];for(const e of i){const t=new d,i=new f,r=new m,a=new f(1,1,1),A=new I(e.geometry,e.material,n);for(let e=0;e<n;e++)o.TRANSLATION&&i.fromBufferAttribute(o.TRANSLATION,e),o.ROTATION&&r.fromBufferAttribute(o.ROTATION,e),o.SCALE&&a.fromBufferAttribute(o.SCALE,e),A.setMatrixAt(e,t.compose(i,r,a));for(const t in o)if("_COLOR_0"===t){const e=o[t];A.instanceColor=new b(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,o[t]);y.prototype.copy.call(A,e),this.parser.assignFinalMaterial(A),s.push(A)}return t.isGroup?(t.clear(),t.add(...s),t):s[0]})))}}const Ji="glTF",Ki=1313821514,Vi=5130562;class GLTFBinaryExtension{constructor(e){this.name=Wi.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,12),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Ji)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const n=this.header.length-12,s=new DataView(e,12);let r=0;for(;r<n;){const t=s.getUint32(r,!0);r+=4;const n=s.getUint32(r,!0);if(r+=4,n===Ki){const n=new Uint8Array(e,12+r,t);this.content=i.decode(n)}else if(n===Vi){const i=12+r;this.body=e.slice(i,i+t)}r+=t}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class GLTFDracoMeshCompressionExtension{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=Wi.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const i=this.json,n=this.dracoLoader,s=e.extensions[this.name].bufferView,r=e.extensions[this.name].attributes,o={},a={},A={};for(const e in r){const t=rn[e]||e.toLowerCase();o[t]=r[e]}for(const t in e.attributes){const n=rn[t]||t.toLowerCase();if(void 0!==r[t]){const s=i.accessors[e.attributes[t]],r=en[s.componentType];A[n]=r.name,a[n]=!0===s.normalized}}return t.getDependency("bufferView",s).then((function(e){return new Promise((function(t,i){n.decodeDracoFile(e,(function(e){for(const t in e.attributes){const i=e.attributes[t],n=a[t];void 0!==n&&(i.normalized=n)}t(e)}),o,A,c,i)}))}))}}class GLTFTextureTransformExtension{constructor(){this.name=Wi.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return void 0!==t.texCoord&&t.texCoord!==e.channel||void 0!==t.offset||void 0!==t.rotation||void 0!==t.scale?(e=e.clone(),void 0!==t.texCoord&&(e.channel=t.texCoord),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e):e}}class GLTFMeshQuantizationExtension{constructor(){this.name=Wi.KHR_MESH_QUANTIZATION}}class GLTFCubicSplineInterpolant extends he{constructor(e,t,i,n){super(e,t,i,n)}copySampleValue_(e){const t=this.resultBuffer,i=this.sampleValues,n=this.valueSize,s=e*n*3+n;for(let e=0;e!==n;e++)t[e]=i[s+e];return t}interpolate_(e,t,i,n){const s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=2*o,A=3*o,l=n-t,c=(i-t)/l,h=c*c,p=h*c,u=e*A,g=u-A,d=-2*p+3*h,f=p-h,m=1-d,I=f-h+c;for(let e=0;e!==o;e++){const t=r[g+e+o],i=r[g+e+a]*l,n=r[u+e+o],A=r[u+e]*l;s[e]=m*t+I*i+d*n+f*A}return s}}const Zi=new m;class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant{interpolate_(e,t,i,n){const s=super.interpolate_(e,t,i,n);return Zi.fromArray(s).normalize().toArray(s),s}}const $i={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},en={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},tn={9728:T,9729:S,9984:M,9985:D,9986:P,9987:v},nn={33071:_,33648:k,10497:L},sn={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},rn={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},on={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},an={CUBICSPLINE:void 0,LINEAR:se,STEP:ne},An="OPAQUE",ln="MASK",cn="BLEND";function addUnknownExtensionsToUserData(e,t,i){for(const n in i.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=i.extensions[n])}function assignExtrasToUserData(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function updateMorphTargets(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let i=0,n=t.weights.length;i<n;i++)e.morphTargetInfluences[i]=t.weights[i];if(t.extras&&Array.isArray(t.extras.targetNames)){const i=t.extras.targetNames;if(e.morphTargetInfluences.length===i.length){e.morphTargetDictionary={};for(let t=0,n=i.length;t<n;t++)e.morphTargetDictionary[i[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function createPrimitiveKey(e){let t;const i=e.extensions&&e.extensions[Wi.KHR_DRACO_MESH_COMPRESSION];if(t=i?"draco:"+i.bufferView+":"+i.indices+":"+createAttributesKey(i.attributes):e.indices+":"+createAttributesKey(e.attributes)+":"+e.mode,void 0!==e.targets)for(let i=0,n=e.targets.length;i<n;i++)t+=":"+createAttributesKey(e.targets[i]);return t}function createAttributesKey(e){let t="";const i=Object.keys(e).sort();for(let n=0,s=i.length;n<s;n++)t+=i[n]+":"+e[i[n]]+";";return t}function getNormalizedComponentScale(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const hn=new d;class GLTFParser{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new GLTFRegistry,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,n=-1,s=!1,r=-1;if("undefined"!=typeof navigator){const e=navigator.userAgent;i=!0===/^((?!chrome|android).)*safari/i.test(e);const t=e.match(/Version\/(\d+)/);n=i&&t?parseInt(t[1],10):-1,s=e.indexOf("Firefox")>-1,r=s?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||i&&n<17||s&&r<98?this.textureLoader=new C(this.options.manager):this.textureLoader=new B(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new o(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,n=this.json,s=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(e){return e._markDefs&&e._markDefs()})),Promise.all(this._invokeAll((function(e){return e.beforeRoot&&e.beforeRoot()}))).then((function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])})).then((function(t){const r={scene:t[0][n.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:n.asset,parser:i,userData:{}};return addUnknownExtensionsToUserData(s,r,n),assignExtrasToUserData(r,n),Promise.all(i._invokeAll((function(e){return e.afterRoot&&e.afterRoot(r)}))).then((function(){for(const e of r.scenes)e.updateMatrixWorld();e(r)}))})).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let i=0,n=t.length;i<n;i++){const n=t[i].joints;for(let t=0,i=n.length;t<i;t++)e[n[t]].isBone=!0}for(let t=0,n=e.length;t<n;t++){const n=e[t];void 0!==n.mesh&&(this._addNodeRef(this.meshCache,n.mesh),void 0!==n.skin&&(i[n.mesh].isSkinnedMesh=!0)),void 0!==n.camera&&this._addNodeRef(this.cameraCache,n.camera)}}_addNodeRef(e,t){void 0!==t&&(void 0===e.refs[t]&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,i){if(e.refs[t]<=1)return i;const n=i.clone(),updateMappings=(e,t)=>{const i=this.associations.get(e);null!=i&&this.associations.set(t,i);for(const[i,n]of e.children.entries())updateMappings(n,t.children[i])};return updateMappings(i,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){const n=e(t[i]);if(n)return n}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const i=[];for(let n=0;n<t.length;n++){const s=e(t[n]);s&&i.push(s)}return i}getDependency(e,t){const i=e+":"+t;let n=this.cache.get(i);if(!n){switch(e){case"scene":n=this.loadScene(t);break;case"node":n=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":n=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":n=this.loadAccessor(t);break;case"bufferView":n=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":n=this.loadBuffer(t);break;case"material":n=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":n=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":n=this.loadSkin(t);break;case"animation":n=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":n=this.loadCamera(t);break;default:if(n=this._invokeOne((function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)})),!n)throw new Error("Unknown type: "+e)}this.cache.add(i,n)}return n}getDependencies(e){let t=this.cache.get(e);if(!t){const i=this,n=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(n.map((function(t,n){return i.getDependency(e,n)}))),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],i=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[Wi.KHR_BINARY_GLTF].body);const n=this.options;return new Promise((function(e,s){i.load(r.resolveURL(t.uri,n.path),e,void 0,(function(){s(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then((function(e){const i=t.byteLength||0,n=t.byteOffset||0;return e.slice(n,n+i)}))}loadAccessor(e){const t=this,i=this.json,n=this.json.accessors[e];if(void 0===n.bufferView&&void 0===n.sparse){const e=sn[n.type],t=en[n.componentType],i=!0===n.normalized,s=new t(n.count*e);return Promise.resolve(new E(s,e,i))}const s=[];return void 0!==n.bufferView?s.push(this.getDependency("bufferView",n.bufferView)):s.push(null),void 0!==n.sparse&&(s.push(this.getDependency("bufferView",n.sparse.indices.bufferView)),s.push(this.getDependency("bufferView",n.sparse.values.bufferView))),Promise.all(s).then((function(e){const s=e[0],r=sn[n.type],o=en[n.componentType],a=o.BYTES_PER_ELEMENT,A=a*r,l=n.byteOffset||0,c=void 0!==n.bufferView?i.bufferViews[n.bufferView].byteStride:void 0,h=!0===n.normalized;let p,u;if(c&&c!==A){const e=Math.floor(l/c),i="InterleavedBuffer:"+n.bufferView+":"+n.componentType+":"+e+":"+n.count;let A=t.cache.get(i);A||(p=new o(s,e*c,n.count*c/a),A=new x(p,c/a),t.cache.add(i,A)),u=new w(A,r,l%c/a,h)}else p=null===s?new o(n.count*r):new o(s,l,n.count*r),u=new E(p,r,h);if(void 0!==n.sparse){const t=sn.SCALAR,i=en[n.sparse.indices.componentType],a=n.sparse.indices.byteOffset||0,A=n.sparse.values.byteOffset||0,l=new i(e[1],a,n.sparse.count*t),c=new o(e[2],A,n.sparse.count*r);null!==s&&(u=new E(u.array.slice(),u.itemSize,u.normalized));for(let e=0,t=l.length;e<t;e++){const t=l[e];if(u.setX(t,c[e*r]),r>=2&&u.setY(t,c[e*r+1]),r>=3&&u.setZ(t,c[e*r+2]),r>=4&&u.setW(t,c[e*r+3]),r>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return u}))}loadTexture(e){const t=this.json,i=this.options,n=t.textures[e].source,s=t.images[n];let r=this.textureLoader;if(s.uri){const e=i.manager.getHandler(s.uri);null!==e&&(r=e)}return this.loadTextureImage(e,n,r)}loadTextureImage(e,t,i){const n=this,s=this.json,r=s.textures[e],o=s.images[t],a=(o.uri||o.bufferView)+":"+r.sampler;if(this.textureCache[a])return this.textureCache[a];const A=this.loadImageSource(t,i).then((function(t){t.flipY=!1,t.name=r.name||o.name||"",""===t.name&&"string"==typeof o.uri&&!1===o.uri.startsWith("data:image/")&&(t.name=o.uri);const i=(s.samplers||{})[r.sampler]||{};return t.magFilter=tn[i.magFilter]||S,t.minFilter=tn[i.minFilter]||v,t.wrapS=nn[i.wrapS]||L,t.wrapT=nn[i.wrapT]||L,n.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=A,A}loadImageSource(e,t){const i=this,n=this.json,s=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((e=>e.clone()));const o=n.images[e],a=self.URL||self.webkitURL;let A=o.uri||"",l=!1;if(void 0!==o.bufferView)A=i.getDependency("bufferView",o.bufferView).then((function(e){l=!0;const t=new Blob([e],{type:o.mimeType});return A=a.createObjectURL(t),A}));else if(void 0===o.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const c=Promise.resolve(A).then((function(e){return new Promise((function(i,n){let o=i;!0===t.isImageBitmapLoader&&(o=function(e){const t=new re(e);t.needsUpdate=!0,i(t)}),t.load(r.resolveURL(e,s.path),o,void 0,n)}))})).then((function(e){return!0===l&&a.revokeObjectURL(A),assignExtrasToUserData(e,o),e.userData.mimeType=o.mimeType||function getImageURIMimeType(e){return e.search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"}(o.uri),e})).catch((function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",A),e}));return this.sourceCache[e]=c,c}assignTexture(e,t,i,n){const s=this;return this.getDependency("texture",i.index).then((function(r){if(!r)return null;if(void 0!==i.texCoord&&i.texCoord>0&&((r=r.clone()).channel=i.texCoord),s.extensions[Wi.KHR_TEXTURE_TRANSFORM]){const e=void 0!==i.extensions?i.extensions[Wi.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=s.associations.get(r);r=s.extensions[Wi.KHR_TEXTURE_TRANSFORM].extendTexture(r,e),s.associations.set(r,t)}}return void 0!==n&&(r.colorSpace=n),e[t]=r,r}))}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const n=void 0===t.attributes.tangent,s=void 0!==t.attributes.color,r=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new R,F.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,t.sizeAttenuation=!1,this.cache.add(e,t)),i=t}else if(e.isLine){const e="LineBasicMaterial:"+i.uuid;let t=this.cache.get(e);t||(t=new N,F.prototype.copy.call(t,i),t.color.copy(i.color),t.map=i.map,this.cache.add(e,t)),i=t}if(n||s||r){let e="ClonedMaterial:"+i.uuid+":";n&&(e+="derivative-tangents:"),s&&(e+="vertex-colors:"),r&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=i.clone(),s&&(t.vertexColors=!0),r&&(t.flatShading=!0),n&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(i))),i=t}e.material=i}getMaterialType(){return O}loadMaterial(e){const t=this,i=this.json,n=this.extensions,s=i.materials[e];let r;const o={},a=[];if((s.extensions||{})[Wi.KHR_MATERIALS_UNLIT]){const e=n[Wi.KHR_MATERIALS_UNLIT];r=e.getMaterialType(),a.push(e.extendParams(o,s,t))}else{const i=s.pbrMetallicRoughness||{};if(o.color=new l(1,1,1),o.opacity=1,Array.isArray(i.baseColorFactor)){const e=i.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],c),o.opacity=e[3]}void 0!==i.baseColorTexture&&a.push(t.assignTexture(o,"map",i.baseColorTexture,h)),o.metalness=void 0!==i.metallicFactor?i.metallicFactor:1,o.roughness=void 0!==i.roughnessFactor?i.roughnessFactor:1,void 0!==i.metallicRoughnessTexture&&(a.push(t.assignTexture(o,"metalnessMap",i.metallicRoughnessTexture)),a.push(t.assignTexture(o,"roughnessMap",i.metallicRoughnessTexture))),r=this._invokeOne((function(t){return t.getMaterialType&&t.getMaterialType(e)})),a.push(Promise.all(this._invokeAll((function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)}))))}!0===s.doubleSided&&(o.side=G);const p=s.alphaMode||An;if(p===cn?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,p===ln&&(o.alphaTest=void 0!==s.alphaCutoff?s.alphaCutoff:.5)),void 0!==s.normalTexture&&r!==Y&&(a.push(t.assignTexture(o,"normalMap",s.normalTexture)),o.normalScale=new A(1,1),void 0!==s.normalTexture.scale)){const e=s.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==s.occlusionTexture&&r!==Y&&(a.push(t.assignTexture(o,"aoMap",s.occlusionTexture)),void 0!==s.occlusionTexture.strength&&(o.aoMapIntensity=s.occlusionTexture.strength)),void 0!==s.emissiveFactor&&r!==Y){const e=s.emissiveFactor;o.emissive=(new l).setRGB(e[0],e[1],e[2],c)}return void 0!==s.emissiveTexture&&r!==Y&&a.push(t.assignTexture(o,"emissiveMap",s.emissiveTexture,h)),Promise.all(a).then((function(){const i=new r(o);return s.name&&(i.name=s.name),assignExtrasToUserData(i,s),t.associations.set(i,{materials:e}),s.extensions&&addUnknownExtensionsToUserData(n,i,s),i}))}createUniqueName(e){const t=U.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,n=this.primitiveCache;function createDracoPrimitive(e){return i[Wi.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(i){return addPrimitiveAttributes(i,e,t)}))}const s=[];for(let i=0,r=e.length;i<r;i++){const r=e[i],o=createPrimitiveKey(r),a=n[o];if(a)s.push(a.promise);else{let e;e=r.extensions&&r.extensions[Wi.KHR_DRACO_MESH_COMPRESSION]?createDracoPrimitive(r):addPrimitiveAttributes(new X,r,t),n[o]={primitive:r,promise:e},s.push(e)}}return Promise.all(s)}loadMesh(e){const t=this,s=this.json,r=this.extensions,o=s.meshes[e],a=o.primitives,A=[];for(let e=0,t=a.length;e<t;e++){const t=void 0===a[e].material?(void 0===(l=this.cache).DefaultMaterial&&(l.DefaultMaterial=new O({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:ce})),l.DefaultMaterial):this.getDependency("material",a[e].material);A.push(t)}var l;return A.push(t.loadGeometries(a)),Promise.all(A).then((function(s){const A=s.slice(0,s.length-1),l=s[s.length-1],c=[];for(let s=0,h=l.length;s<h;s++){const h=l[s],p=a[s];let u;const g=A[s];if(p.mode===$i.TRIANGLES||p.mode===$i.TRIANGLE_STRIP||p.mode===$i.TRIANGLE_FAN||void 0===p.mode)u=!0===o.isSkinnedMesh?new q(h,g):new z(h,g),!0===u.isSkinnedMesh&&u.normalizeSkinWeights(),p.mode===$i.TRIANGLE_STRIP?u.geometry=toTrianglesDrawMode(u.geometry,n):p.mode===$i.TRIANGLE_FAN&&(u.geometry=toTrianglesDrawMode(u.geometry,i));else if(p.mode===$i.LINES)u=new H(h,g);else if(p.mode===$i.LINE_STRIP)u=new j(h,g);else if(p.mode===$i.LINE_LOOP)u=new W(h,g);else{if(p.mode!==$i.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+p.mode);u=new J(h,g)}Object.keys(u.geometry.morphAttributes).length>0&&updateMorphTargets(u,o),u.name=t.createUniqueName(o.name||"mesh_"+e),assignExtrasToUserData(u,o),p.extensions&&addUnknownExtensionsToUserData(r,u,p),t.assignFinalMaterial(u),c.push(u)}for(let i=0,n=c.length;i<n;i++)t.associations.set(c[i],{meshes:e,primitives:i});if(1===c.length)return o.extensions&&addUnknownExtensionsToUserData(r,c[0],o),c[0];const h=new K;o.extensions&&addUnknownExtensionsToUserData(r,h,o),t.associations.set(h,{meshes:e});for(let e=0,t=c.length;e<t;e++)h.add(c[e]);return h}))}loadCamera(e){let t;const i=this.json.cameras[e],n=i[i.type];if(n)return"perspective"===i.type?t=new V(Z.radToDeg(n.yfov),n.aspectRatio||1,n.znear||1,n.zfar||2e6):"orthographic"===i.type&&(t=new $(-n.xmag,n.xmag,n.ymag,-n.ymag,n.znear,n.zfar)),i.name&&(t.name=this.createUniqueName(i.name)),assignExtrasToUserData(t,i),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],i=[];for(let e=0,n=t.joints.length;e<n;e++)i.push(this._loadNodeShallow(t.joints[e]));return void 0!==t.inverseBindMatrices?i.push(this.getDependency("accessor",t.inverseBindMatrices)):i.push(null),Promise.all(i).then((function(e){const i=e.pop(),n=e,s=[],r=[];for(let e=0,o=n.length;e<o;e++){const o=n[e];if(o){s.push(o);const t=new d;null!==i&&t.fromArray(i.array,16*e),r.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new ee(s,r)}))}loadAnimation(e){const t=this.json,i=this,n=t.animations[e],s=n.name?n.name:"animation_"+e,r=[],o=[],a=[],A=[],l=[];for(let e=0,t=n.channels.length;e<t;e++){const t=n.channels[e],i=n.samplers[t.sampler],s=t.target,c=s.node,h=void 0!==n.parameters?n.parameters[i.input]:i.input,p=void 0!==n.parameters?n.parameters[i.output]:i.output;void 0!==s.node&&(r.push(this.getDependency("node",c)),o.push(this.getDependency("accessor",h)),a.push(this.getDependency("accessor",p)),A.push(i),l.push(s))}return Promise.all([Promise.all(r),Promise.all(o),Promise.all(a),Promise.all(A),Promise.all(l)]).then((function(e){const t=e[0],n=e[1],r=e[2],o=e[3],a=e[4],A=[];for(let e=0,s=t.length;e<s;e++){const s=t[e],l=n[e],c=r[e],h=o[e],p=a[e];if(void 0===s)continue;s.updateMatrix&&s.updateMatrix();const u=i._createAnimationTracks(s,l,c,h,p);if(u)for(let e=0;e<u.length;e++)A.push(u[e])}return new te(s,void 0,A)}))}createNodeMesh(e){const t=this.json,i=this,n=t.nodes[e];return void 0===n.mesh?null:i.getDependency("mesh",n.mesh).then((function(e){const t=i._getNodeRef(i.meshCache,n.mesh,e);return void 0!==n.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,i=n.weights.length;t<i;t++)e.morphTargetInfluences[t]=n.weights[t]})),t}))}loadNode(e){const t=this,i=this.json.nodes[e],n=t._loadNodeShallow(e),s=[],r=i.children||[];for(let e=0,i=r.length;e<i;e++)s.push(t.getDependency("node",r[e]));const o=void 0===i.skin?Promise.resolve(null):t.getDependency("skin",i.skin);return Promise.all([n,Promise.all(s),o]).then((function(e){const t=e[0],i=e[1],n=e[2];null!==n&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(n,hn)}));for(let e=0,n=i.length;e<n;e++)t.add(i[e]);return t}))}_loadNodeShallow(e){const t=this.json,i=this.extensions,n=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const s=t.nodes[e],r=s.name?n.createUniqueName(s.name):"",o=[],a=n._invokeOne((function(t){return t.createNodeMesh&&t.createNodeMesh(e)}));return a&&o.push(a),void 0!==s.camera&&o.push(n.getDependency("camera",s.camera).then((function(e){return n._getNodeRef(n.cameraCache,s.camera,e)}))),n._invokeAll((function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)})).forEach((function(e){o.push(e)})),this.nodeCache[e]=Promise.all(o).then((function(t){let o;if(o=!0===s.isBone?new ie:t.length>1?new K:1===t.length?t[0]:new y,o!==t[0])for(let e=0,i=t.length;e<i;e++)o.add(t[e]);if(s.name&&(o.userData.name=s.name,o.name=r),assignExtrasToUserData(o,s),s.extensions&&addUnknownExtensionsToUserData(i,o,s),void 0!==s.matrix){const e=new d;e.fromArray(s.matrix),o.applyMatrix4(e)}else void 0!==s.translation&&o.position.fromArray(s.translation),void 0!==s.rotation&&o.quaternion.fromArray(s.rotation),void 0!==s.scale&&o.scale.fromArray(s.scale);return n.associations.has(o)||n.associations.set(o,{}),n.associations.get(o).nodes=e,o})),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],n=this,s=new K;i.name&&(s.name=n.createUniqueName(i.name)),assignExtrasToUserData(s,i),i.extensions&&addUnknownExtensionsToUserData(t,s,i);const r=i.nodes||[],o=[];for(let e=0,t=r.length;e<t;e++)o.push(n.getDependency("node",r[e]));return Promise.all(o).then((function(e){for(let t=0,i=e.length;t<i;t++)s.add(e[t]);return n.associations=(e=>{const t=new Map;for(const[e,i]of n.associations)(e instanceof F||e instanceof re)&&t.set(e,i);return e.traverse((e=>{const i=n.associations.get(e);null!=i&&t.set(e,i)})),t})(s),s}))}_createAnimationTracks(e,t,i,n,s){const r=[],o=e.name?e.name:e.uuid,a=[];let A;switch(on[s.path]===on.weights?e.traverse((function(e){e.morphTargetInfluences&&a.push(e.name?e.name:e.uuid)})):a.push(o),on[s.path]){case on.weights:A=ae;break;case on.rotation:A=Ae;break;case on.position:case on.scale:A=oe;break;default:if(1===i.itemSize)A=ae;else A=oe}const l=void 0!==n.interpolation?an[n.interpolation]:se,c=this._getArrayFromAccessor(i);for(let e=0,i=a.length;e<i;e++){const i=new A(a[e]+"."+on[s.path],t.array,c,l);"CUBICSPLINE"===n.interpolation&&this._createCubicSplineTrackInterpolant(i),r.push(i)}return r}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const e=getNormalizedComponentScale(t.constructor),i=new Float32Array(t.length);for(let n=0,s=t.length;n<s;n++)i[n]=t[n]*e;t=i}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function InterpolantFactoryMethodGLTFCubicSpline(e){return new(this instanceof Ae?GLTFCubicSplineQuaternionInterpolant:GLTFCubicSplineInterpolant)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function addPrimitiveAttributes(e,t,i){const n=t.attributes,s=[];function assignAttributeAccessor(t,n){return i.getDependency("accessor",t).then((function(t){e.setAttribute(n,t)}))}for(const t in n){const i=rn[t]||t.toLowerCase();i in e.attributes||s.push(assignAttributeAccessor(n[t],i))}if(void 0!==t.indices&&!e.index){const n=i.getDependency("accessor",t.indices).then((function(t){e.setIndex(t)}));s.push(n)}return le.workingColorSpace!==c&&"COLOR_0"in n&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${le.workingColorSpace}" not supported.`),assignExtrasToUserData(e,t),function computeBounds(e,t,i){const n=t.attributes,s=new pe;if(void 0===n.POSITION)return;{const e=i.json.accessors[n.POSITION],t=e.min,r=e.max;if(void 0===t||void 0===r)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(s.set(new f(t[0],t[1],t[2]),new f(r[0],r[1],r[2])),e.normalized){const t=getNormalizedComponentScale(en[e.componentType]);s.min.multiplyScalar(t),s.max.multiplyScalar(t)}}const r=t.targets;if(void 0!==r){const e=new f,t=new f;for(let n=0,s=r.length;n<s;n++){const s=r[n];if(void 0!==s.POSITION){const n=i.json.accessors[s.POSITION],r=n.min,o=n.max;if(void 0!==r&&void 0!==o){if(t.setX(Math.max(Math.abs(r[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(r[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(r[2]),Math.abs(o[2]))),n.normalized){const e=getNormalizedComponentScale(en[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}s.expandByVector(e)}e.boundingBox=s;const o=new ue;s.getCenter(o.center),o.radius=s.min.distanceTo(s.max)/2,e.boundingSphere=o}(e,t,i),Promise.all(s).then((function(){return void 0!==t.targets?function addMorphTargets(e,t,i){let n=!1,s=!1,r=!1;for(let e=0,i=t.length;e<i;e++){const i=t[e];if(void 0!==i.POSITION&&(n=!0),void 0!==i.NORMAL&&(s=!0),void 0!==i.COLOR_0&&(r=!0),n&&s&&r)break}if(!n&&!s&&!r)return Promise.resolve(e);const o=[],a=[],A=[];for(let l=0,c=t.length;l<c;l++){const c=t[l];if(n){const t=void 0!==c.POSITION?i.getDependency("accessor",c.POSITION):e.attributes.position;o.push(t)}if(s){const t=void 0!==c.NORMAL?i.getDependency("accessor",c.NORMAL):e.attributes.normal;a.push(t)}if(r){const t=void 0!==c.COLOR_0?i.getDependency("accessor",c.COLOR_0):e.attributes.color;A.push(t)}}return Promise.all([Promise.all(o),Promise.all(a),Promise.all(A)]).then((function(t){const i=t[0],o=t[1],a=t[2];return n&&(e.morphAttributes.position=i),s&&(e.morphAttributes.normal=o),r&&(e.morphAttributes.color=a),e.morphTargetsRelative=!0,e}))}(e,t.targets,i):e}))}const pn=new WeakMap;class DRACOLoader extends s{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,n){const s=new o(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,h,i).catch(i)}decodeDracoFile(e,t,i,n,s=c,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:s};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(pn.has(e)){const t=pn.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let n;const s=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(s,r).then((i=>(n=i,new Promise(((i,r)=>{n._callbacks[s]={resolve:i,reject:r},n.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))))).then((e=>this._createGeometry(e.geometry)));return o.catch((()=>!0)).then((()=>{n&&s&&this._releaseTask(n,s)})),pn.set(e,{key:i,promise:o}),o}_createGeometry(e){const t=new X;e.index&&t.setIndex(new E(e.index.array,1));for(let i=0;i<e.attributes.length;i++){const n=e.attributes[i],s=n.name,r=n.array,o=n.itemSize,a=new E(r,o);"color"===s&&(this._assignVertexColorSpace(a,n.vertexColorSpace),a.normalized=r instanceof Float32Array==!1),t.setAttribute(s,a)}return t}_assignVertexColorSpace(e,t){if(t!==h)return;const i=new l;for(let t=0,n=e.count;t<n;t++)i.fromBufferAttribute(e,t).convertSRGBToLinear(),e.setXYZ(t,i.r,i.g,i.b)}_loadLibrary(e,t){const i=new o(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise(((t,n)=>{i.load(e,t,void 0,n)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then((t=>{const i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);const n=DRACOWorker.toString(),s=["/* draco decoder */",i,"","/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([s]))})),this.decoderPending}_getWorker(e,t){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){const i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort((function(e,t){return e._taskLoad>t._taskLoad?-1:1}));const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i}))}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map((e=>e._taskLoad)))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function DRACOWorker(){let e,t;function decodeAttribute(e,t,i,n,s,r){const o=r.num_components(),a=i.num_points()*o,A=a*s.BYTES_PER_ELEMENT,l=function getDracoDataType(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,s),c=e._malloc(A);t.GetAttributeDataArrayForAllPoints(i,r,l,A,c);const h=new s(e.HEAPF32.buffer,c,a).slice();return e._free(c),{name:n,array:h,itemSize:o}}onmessage=function(i){const n=i.data;switch(n.type){case"init":e=n.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const i=n.buffer,s=n.taskConfig;t.then((e=>{const t=e.draco,r=new t.Decoder;try{const e=function decodeGeometry(e,t,i,n){const s=n.attributeIDs,r=n.attributeTypes;let o,a;const A=t.GetEncodedGeometryType(i);if(A===e.TRIANGULAR_MESH)o=new e.Mesh,a=t.DecodeArrayToMesh(i,i.byteLength,o);else{if(A!==e.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");o=new e.PointCloud,a=t.DecodeArrayToPointCloud(i,i.byteLength,o)}if(!a.ok()||0===o.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());const l={index:null,attributes:[]};for(const i in s){const a=self[r[i]];let A,c;if(n.useUniqueIDs)c=s[i],A=t.GetAttributeByUniqueId(o,c);else{if(c=t.GetAttributeId(o,e[s[i]]),-1===c)continue;A=t.GetAttribute(o,c)}const h=decodeAttribute(e,t,o,i,a,A);"color"===i&&(h.vertexColorSpace=n.vertexColorSpace),l.attributes.push(h)}A===e.TRIANGULAR_MESH&&(l.index=function decodeIndex(e,t,i){const n=i.num_faces(),s=3*n,r=4*s,o=e._malloc(r);t.GetTrianglesUInt32Array(i,r,o);const a=new Uint32Array(e.HEAPF32.buffer,o,s).slice();return e._free(o),{array:a,itemSize:1}}(e,t,o));return e.destroy(o),l}(t,r,new Int8Array(i),s),o=e.attributes.map((e=>e.array.buffer));e.index&&o.push(e.index.array.buffer),self.postMessage({type:"decode",id:n.id,geometry:e},o)}catch(e){console.error(e),self.postMessage({type:"error",id:n.id,error:e.message})}finally{t.destroy(r)}}))}}}class WorkerPool{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){const t=this.workerCreator();t.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){const i=this.workersResolve[e];if(i&&i(t),this.queue.length){const{resolve:t,msg:i,transfer:n}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,n)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise((i=>{const n=this._getIdleWorker();-1!==n?(this._initWorker(n),this.workerStatus|=1<<n,this.workersResolve[n]=i,this.workers[n].postMessage(e,t)):this.queue.push({resolve:i,msg:e,transfer:t})}))}dispose(){this.workers.forEach((e=>e.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const un=9,gn=15,dn=16,fn=22,mn=37,In=43,bn=76,yn=83,Cn=97,Bn=100,En=103,xn=109,Qn=165,wn=166;class Si{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class Ii{constructor(e,t,i,n){this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=n,this._offset=0}_nextUint8(){const e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){const e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){const e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){const e=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){const e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_skip(e){return this._offset+=e,this}_scan(e,t=0){const i=this._offset;let n=0;for(;this._dataView.getUint8(this._offset)!==t&&n<e;)n++,this._offset++;return n<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,n)}}const vn=[171,75,84,88,32,50,48,187,13,10,26,10];function Ei(e){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(e):Buffer.from(e).toString("utf8")}let Pn,Dn,Mn;const Sn={env:{emscripten_notify_memory_growth:function(e){Mn=new Uint8Array(Dn.exports.memory.buffer)}}};class Q{init(){return Pn||(Pn="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+Tn).then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,Sn))).then(this._init):WebAssembly.instantiate(Buffer.from(Tn,"base64"),Sn).then(this._init),Pn)}_init(e){Dn=e.instance,Sn.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!Dn)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=e.byteLength,n=Dn.exports.malloc(i);Mn.set(e,n),t=t||Number(Dn.exports.ZSTD_findDecompressedSize(n,i));const s=Dn.exports.malloc(t),r=Dn.exports.ZSTD_decompress(s,t,n,i),o=Mn.slice(s,s+r);return Dn.exports.free(n),Dn.exports.free(s),o}}const Tn="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",Ln=new WeakMap;let kn,_n=0;class KTX2Loader extends s{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new WorkerPool,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}async detectSupportAsync(e){return this.workerConfig={astcSupported:await e.hasFeatureAsync("texture-compression-astc"),etc1Supported:await e.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await e.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await e.hasFeatureAsync("texture-compression-bc"),bptcSupported:await e.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await e.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(e){return!0===e.isWebGPURenderer?this.workerConfig={astcSupported:e.hasFeature("texture-compression-astc"),etc1Supported:e.hasFeature("texture-compression-etc1"),etc2Supported:e.hasFeature("texture-compression-etc2"),dxtSupported:e.hasFeature("texture-compression-bc"),bptcSupported:e.hasFeature("texture-compression-bptc"),pvrtcSupported:e.hasFeature("texture-compression-pvrtc")}:this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this}init(){if(!this.transcoderPending){const e=new o(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),i=new o(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const n=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,n]).then((([e,t])=>{const i=KTX2Loader.BasisWorker.toString(),n=["/* constants */","let _EngineFormat = "+JSON.stringify(KTX2Loader.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(KTX2Loader.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(KTX2Loader.BasisFormat),"/* basis_transcoder.js */",e,"/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([n])),this.transcoderBinary=t,this.workerPool.setWorkerCreator((()=>{const e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:"init",config:this.workerConfig,transcoderBinary:t},[t]),e}))})),_n>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),_n++}return this.transcoderPending}load(e,t,i,n){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const s=new o(this.manager);s.setResponseType("arraybuffer"),s.setWithCredentials(this.withCredentials),s.load(e,(e=>{this.parse(e,t,n)}),i,n)}parse(e,t,i){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Ln.has(e)){return Ln.get(e).promise.then(t).catch(i)}this._createTexture(e).then((e=>t?t(e):null)).catch(i)}_createTextureFrom(e,t){const{faces:i,width:n,height:s,format:r,type:o,error:a,dfdFlags:A}=e;if("error"===o)return Promise.reject(a);let l;if(6===t.faceCount)l=new ge(i,r,de);else{const e=i[0].mipmaps;l=t.layerCount>1?new fe(e,n,s,t.layerCount,r,de):new me(e,n,s,r,de)}return l.minFilter=1===i[0].mipmaps.length?S:v,l.magFilter=S,l.generateMipmaps=!1,l.needsUpdate=!0,l.colorSpace=parseColorSpace(t),l.premultiplyAlpha=!!(1&A),l}async _createTexture(e,t={}){const i=function Pi(e){const t=new Uint8Array(e.buffer,e.byteOffset,vn.length);if(t[0]!==vn[0]||t[1]!==vn[1]||t[2]!==vn[2]||t[3]!==vn[3]||t[4]!==vn[4]||t[5]!==vn[5]||t[6]!==vn[6]||t[7]!==vn[7]||t[8]!==vn[8]||t[9]!==vn[9]||t[10]!==vn[10]||t[11]!==vn[11])throw new Error("Missing KTX 2.0 identifier.");const i=new Si,n=17*Uint32Array.BYTES_PER_ELEMENT,s=new Ii(e,vn.length,n,!0);i.vkFormat=s._nextUint32(),i.typeSize=s._nextUint32(),i.pixelWidth=s._nextUint32(),i.pixelHeight=s._nextUint32(),i.pixelDepth=s._nextUint32(),i.layerCount=s._nextUint32(),i.faceCount=s._nextUint32();const r=s._nextUint32();i.supercompressionScheme=s._nextUint32();const o=s._nextUint32(),a=s._nextUint32(),A=s._nextUint32(),l=s._nextUint32(),c=s._nextUint64(),h=s._nextUint64(),p=new Ii(e,vn.length+n,3*r*8,!0);for(let t=0;t<r;t++)i.levels.push({levelData:new Uint8Array(e.buffer,e.byteOffset+p._nextUint64(),p._nextUint64()),uncompressedByteLength:p._nextUint64()});const u=new Ii(e,o,a,!0),g={vendorId:u._skip(4)._nextUint16(),descriptorType:u._nextUint16(),versionNumber:u._nextUint16(),descriptorBlockSize:u._nextUint16(),colorModel:u._nextUint8(),colorPrimaries:u._nextUint8(),transferFunction:u._nextUint8(),flags:u._nextUint8(),texelBlockDimension:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],bytesPlane:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],samples:[]},d=(g.descriptorBlockSize/4-6)/4;for(let e=0;e<d;e++){const t={bitOffset:u._nextUint16(),bitLength:u._nextUint8(),channelType:u._nextUint8(),samplePosition:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&t.channelType?(t.sampleLower=u._nextInt32(),t.sampleUpper=u._nextInt32()):(t.sampleLower=u._nextUint32(),t.sampleUpper=u._nextUint32()),g.samples[e]=t}i.dataFormatDescriptor.length=0,i.dataFormatDescriptor.push(g);const f=new Ii(e,A,l,!0);for(;f._offset<l;){const e=f._nextUint32(),t=f._scan(e),n=Ei(t),s=f._scan(e-t.byteLength);i.keyValue[n]=n.match(/^ktx/i)?Ei(s):s,f._offset%4&&f._skip(4-f._offset%4)}if(h<=0)return i;const m=new Ii(e,c,h,!0),I=m._nextUint16(),b=m._nextUint16(),y=m._nextUint32(),C=m._nextUint32(),B=m._nextUint32(),E=m._nextUint32(),x=[];for(let e=0;e<r;e++)x.push({imageFlags:m._nextUint32(),rgbSliceByteOffset:m._nextUint32(),rgbSliceByteLength:m._nextUint32(),alphaSliceByteOffset:m._nextUint32(),alphaSliceByteLength:m._nextUint32()});const w=c+m._offset,v=w+y,P=v+C,D=P+B,M=new Uint8Array(e.buffer,e.byteOffset+w,y),S=new Uint8Array(e.buffer,e.byteOffset+v,C),T=new Uint8Array(e.buffer,e.byteOffset+P,B),L=new Uint8Array(e.buffer,e.byteOffset+D,E);return i.globalData={endpointCount:I,selectorCount:b,imageDescs:x,endpointsData:M,selectorsData:S,tablesData:T,extendedData:L},i}(new Uint8Array(e));if(0!==i.vkFormat)return async function createRawTexture(e){const{vkFormat:t}=e;if(void 0===Fn[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let i;2===e.supercompressionScheme&&(kn||(kn=new Promise((async e=>{const t=new Q;await t.init(),e(t)}))),i=await kn);const n=[];for(let s=0;s<e.levels.length;s++){const r=Math.max(1,e.pixelWidth>>s),o=Math.max(1,e.pixelHeight>>s),a=e.pixelDepth?Math.max(1,e.pixelDepth>>s):0,A=e.levels[s];let l,c;if(0===e.supercompressionScheme)l=A.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");l=i.decode(A.levelData,A.uncompressedByteLength)}c=Nn[t]===we?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):Nn[t]===Qe?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,n.push({data:c,width:r,height:o,depth:a})}let s;if(Rn.has(Fn[t]))s=0===e.pixelDepth?new ve(n[0].data,e.pixelWidth,e.pixelHeight):new Pe(n[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");s=new me(n,e.pixelWidth,e.pixelHeight)}return s.mipmaps=n,s.type=Nn[t],s.format=Fn[t],s.colorSpace=parseColorSpace(e),s.needsUpdate=!0,Promise.resolve(s)}(i);const n=t,s=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:n},[e]))).then((e=>this._createTextureFrom(e.data,i)));return Ln.set(e,{promise:s}),s}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),_n--,this}}KTX2Loader.BasisFormat={ETC1S:0,UASTC_4x4:1},KTX2Loader.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},KTX2Loader.EngineFormat={RGBAFormat:xe,RGBA_ASTC_4x4_Format:Fe,RGBA_BPTC_Format:Re,RGBA_ETC2_EAC_Format:_e,RGBA_PVRTC_4BPPV1_Format:ke,RGBA_S3TC_DXT5_Format:Le,RGB_ETC1_Format:Te,RGB_ETC2_Format:Se,RGB_PVRTC_4BPPV1_Format:Me,RGBA_S3TC_DXT1_Format:De},KTX2Loader.BasisWorker=function(){let e,t,i;const n=_EngineFormat,s=_TranscoderFormat,r=_BasisFormat;self.addEventListener("message",(function(o){const l=o.data;switch(l.type){case"init":e=l.config,function init(e){t=new Promise((t=>{i={wasmBinary:e,onRuntimeInitialized:t},BASIS(i)})).then((()=>{i.initializeBasis(),void 0===i.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}))}(l.transcoderBinary);break;case"transcode":t.then((()=>{try{const{faces:t,buffers:o,width:c,height:h,hasAlpha:p,format:u,dfdFlags:g}=function transcode(t){const o=new i.KTX2File(new Uint8Array(t));function cleanup(){o.close(),o.delete()}if(!o.isValid())throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const l=o.isUASTC()?r.UASTC_4x4:r.ETC1S,c=o.getWidth(),h=o.getHeight(),p=o.getLayers()||1,u=o.getLevels(),g=o.getFaces(),d=o.getHasAlpha(),f=o.getDFDFlags(),{transcoderFormat:m,engineFormat:I}=function getTranscoderFormat(t,i,o,l){let c,h;const p=t===r.ETC1S?a:A;for(let n=0;n<p.length;n++){const s=p[n];if(e[s.if]&&(s.basisFormat.includes(t)&&!(l&&s.transcoderFormat.length<2)&&(!s.needsPowerOfTwo||isPowerOfTwo(i)&&isPowerOfTwo(o))))return c=s.transcoderFormat[l?1:0],h=s.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=s.RGBA32,h=n.RGBAFormat,{transcoderFormat:c,engineFormat:h}}(l,c,h,d);if(!c||!h||!u)throw cleanup(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!o.startTranscoding())throw cleanup(),new Error("THREE.KTX2Loader: .startTranscoding failed");const b=[],y=[];for(let e=0;e<g;e++){const t=[];for(let i=0;i<u;i++){const n=[];let s,r;for(let t=0;t<p;t++){const a=o.getImageLevelInfo(i,t,e);0!==e||0!==i||0!==t||a.origWidth%4==0&&a.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),u>1?(s=a.origWidth,r=a.origHeight):(s=a.width,r=a.height);const A=new Uint8Array(o.getImageTranscodedSizeInBytes(i,t,0,m));if(!o.transcodeImage(A,i,t,e,m,0,-1,-1))throw cleanup(),new Error("THREE.KTX2Loader: .transcodeImage failed.");n.push(A)}const a=concat(n);t.push({data:a,width:s,height:r}),y.push(a.buffer)}b.push({mipmaps:t,width:c,height:h,format:I})}return cleanup(),{faces:b,buffers:y,width:c,height:h,hasAlpha:d,format:I,dfdFlags:f}}(l.buffer);self.postMessage({type:"transcode",id:l.id,faces:t,width:c,height:h,hasAlpha:p,format:u,dfdFlags:g},o)}catch(e){console.error(e),self.postMessage({type:"error",id:l.id,error:e.message})}}))}}));const o=[{if:"astcSupported",basisFormat:[r.UASTC_4x4],transcoderFormat:[s.ASTC_4x4,s.ASTC_4x4],engineFormat:[n.RGBA_ASTC_4x4_Format,n.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.BC7_M5,s.BC7_M5],engineFormat:[n.RGBA_BPTC_Format,n.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.BC1,s.BC3],engineFormat:[n.RGBA_S3TC_DXT1_Format,n.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.ETC1,s.ETC2],engineFormat:[n.RGB_ETC2_Format,n.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.ETC1],engineFormat:[n.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[s.PVRTC1_4_RGB,s.PVRTC1_4_RGBA],engineFormat:[n.RGB_PVRTC_4BPPV1_Format,n.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],a=o.sort((function(e,t){return e.priorityETC1S-t.priorityETC1S})),A=o.sort((function(e,t){return e.priorityUASTC-t.priorityUASTC}));function isPowerOfTwo(e){return e<=2||!(e&e-1)&&0!==e}function concat(e){if(1===e.length)return e[0];let t=0;for(let i=0;i<e.length;i++){t+=e[i].byteLength}const i=new Uint8Array(t);let n=0;for(let t=0;t<e.length;t++){const s=e[t];i.set(s,n),n+=s.byteLength}return i}};const Rn=new Set([xe,Ee,Be]),Fn={[xn]:xe,[Cn]:xe,[mn]:xe,[In]:xe,[En]:Ee,[yn]:Ee,[dn]:Ee,[fn]:Ee,[Bn]:Be,[bn]:Be,[gn]:Be,[un]:Be,[wn]:Ce,[Qn]:Ce},Nn={[xn]:we,[Cn]:Qe,[mn]:de,[In]:de,[En]:we,[yn]:Qe,[dn]:de,[fn]:de,[Bn]:we,[bn]:Qe,[gn]:de,[un]:de,[wn]:de,[Qn]:de};function parseColorSpace(e){const t=e.dataFormatDescriptor[0];return 1===t.colorPrimaries?2===t.transferFunction?h:c:10===t.colorPrimaries?2===t.transferFunction?Ie:be:(0===t.colorPrimaries||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),ye)}var On=function(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if("object"!=typeof WebAssembly)return{supported:!1};var i,n=WebAssembly.validate(e)?"b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb":"b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",s=WebAssembly.instantiate(unpack(n),{}).then((function(e){(i=e.instance).exports.__wasm_call_ctors()}));function unpack(e){for(var i=new Uint8Array(e.length),n=0;n<e.length;++n){var s=e.charCodeAt(n);i[n]=s>96?s-97:s>64?s-39:s+4}var r=0;for(n=0;n<e.length;++n)i[r++]=i[n]<60?t[i[n]]:64*(i[n]-60)+i[++n];return i.buffer.slice(0,r)}function decode(e,t,n,s,r,o){var a=i.exports.sbrk,A=n+3&-4,l=a(A*s),c=a(r.length),h=new Uint8Array(i.exports.memory.buffer);h.set(r,c);var p=e(l,n,s,c,r.length);if(0==p&&o&&o(l,A,s),t.set(h.subarray(l,l+n*s)),a(l-a(0)),0!=p)throw new Error("Malformed buffer data: "+p)}var r={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},o={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},a=[],A=0;function createWorker(e){var t={object:new Worker(e),pending:0,requests:{}};return t.object.onmessage=function(e){var i=e.data;t.pending-=i.count,t.requests[i.id][i.action](i.value),delete t.requests[i.id]},t}function initWorkers(e){for(var t="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(unpack(n))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+decode.toString()+workerProcess.toString(),i=new Blob([t],{type:"text/javascript"}),s=URL.createObjectURL(i),r=0;r<e;++r)a[r]=createWorker(s);URL.revokeObjectURL(s)}function workerProcess(e){s.then((function(){var t=e.data;try{var n=new Uint8Array(t.count*t.size);decode(i.exports[t.mode],n,t.count,t.size,t.source,i.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:"resolve",value:n},[n.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:"reject",value:e})}}))}return{ready:s,supported:!0,useWorkers:function(e){initWorkers(e)},decodeVertexBuffer:function(e,t,n,s,o){decode(i.exports.meshopt_decodeVertexBuffer,e,t,n,s,i.exports[r[o]])},decodeIndexBuffer:function(e,t,n,s){decode(i.exports.meshopt_decodeIndexBuffer,e,t,n,s)},decodeIndexSequence:function(e,t,n,s){decode(i.exports.meshopt_decodeIndexSequence,e,t,n,s)},decodeGltfBuffer:function(e,t,n,s,a,A){decode(i.exports[o[a]],e,t,n,s,i.exports[r[A]])},decodeGltfBufferAsync:function(e,t,n,l,c){return a.length>0?function decodeWorker(e,t,i,n,s){for(var r=a[0],o=1;o<a.length;++o)a[o].pending<r.pending&&(r=a[o]);return new Promise((function(o,a){var l=new Uint8Array(i),c=A++;r.pending+=e,r.requests[c]={resolve:o,reject:a},r.object.postMessage({id:c,count:e,size:t,source:l,mode:n,filter:s},[l.buffer])}))}(e,t,n,o[l],r[c]):s.then((function(){var s=new Uint8Array(e*t);return decode(i.exports[o[l]],s,e,t,n,i.exports[r[c]]),s}))}}}();class TDSLoader extends s{constructor(e){super(e),this.debug=!1,this.group=null,this.materials=[],this.meshes=[]}load(e,t,i,n){const s=this,a=""===this.path?r.extractUrlBase(e):this.path,A=new o(this.manager);A.setPath(this.path),A.setResponseType("arraybuffer"),A.setRequestHeader(this.requestHeader),A.setWithCredentials(this.withCredentials),A.load(e,(function(i){try{t(s.parse(i,a))}catch(t){n?n(t):console.error(t),s.manager.itemError(e)}}),i,n)}parse(e,t){this.group=new K,this.materials=[],this.meshes=[],this.readFile(e,t);for(let e=0;e<this.meshes.length;e++)this.group.add(this.meshes[e]);return this.group}readFile(e,t){const i=new DataView(e),n=new Chunk(i,0,this.debugMessage);if(n.id===Yn||n.id===Un||n.id===Gn){let e=n.readChunk();for(;e;){if(e.id===Xn){const t=e.readDWord();this.debugMessage("3DS file version: "+t)}else e.id===Kn?this.readMeshData(e,t):this.debugMessage("Unknown main chunk: "+e.hexId);e=n.readChunk()}}this.debugMessage("Parsed "+this.meshes.length+" meshes")}readMeshData(e,t){let i=e.readChunk();for(;i;){if(i.id===Vn){const e=+i.readDWord();this.debugMessage("Mesh Version: "+e)}else if(i.id===Zn){const e=i.readFloat();this.debugMessage("Master scale: "+e),this.group.scale.set(e,e,e)}else i.id===bs?(this.debugMessage("Named Object"),this.readNamedObject(i)):i.id===$n?(this.debugMessage("Material"),this.readMaterialEntry(i,t)):this.debugMessage("Unknown MDATA chunk: "+i.hexId);i=e.readChunk()}}readNamedObject(e){const t=e.readString();let i=e.readChunk();for(;i;){if(i.id===ys){const e=this.readMesh(i);e.name=t,this.meshes.push(e)}else this.debugMessage("Unknown named object chunk: "+i.hexId);i=e.readChunk()}}readMaterialEntry(e,t){let i=e.readChunk();const n=new Ne;for(;i;){if(i.id===es)n.name=i.readString(),this.debugMessage(" Name: "+n.name);else if(i.id===As)this.debugMessage(" Wireframe"),n.wireframe=!0;else if(i.id===ls){const e=i.readByte();n.wireframeLinewidth=e,this.debugMessage(" Wireframe Thickness: "+e)}else if(i.id===os)n.side=G,this.debugMessage(" DoubleSided");else if(i.id===as)this.debugMessage(" Additive Blending"),n.blending=Oe;else if(i.id===is)this.debugMessage(" Diffuse Color"),n.color=this.readColor(i);else if(i.id===ns)this.debugMessage(" Specular Color"),n.specular=this.readColor(i);else if(i.id===ts)this.debugMessage(" Ambient color"),n.color=this.readColor(i);else if(i.id===ss){const e=this.readPercentage(i);n.shininess=100*e,this.debugMessage(" Shininess : "+e)}else if(i.id===rs){const e=this.readPercentage(i);n.opacity=1-e,this.debugMessage(" Transparency : "+e),n.transparent=n.opacity<1}else i.id===cs?(this.debugMessage(" ColorMap"),n.map=this.readMap(i,t)):i.id===ps?(this.debugMessage(" BumpMap"),n.bumpMap=this.readMap(i,t)):i.id===hs?(this.debugMessage(" OpacityMap"),n.alphaMap=this.readMap(i,t)):i.id===us?(this.debugMessage(" SpecularMap"),n.specularMap=this.readMap(i,t)):this.debugMessage(" Unknown material chunk: "+i.hexId);i=e.readChunk()}this.materials[n.name]=n}readMesh(e){let t=e.readChunk();const i=new X,n=new Ne,s=new z(i,n);for(s.name="mesh";t;){if(t.id===Cs){const e=t.readWord();this.debugMessage(" Vertex: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("position",new Ge(n,3))}else if(t.id===Bs)this.readFaceArray(t,s);else if(t.id===xs){const e=t.readWord();this.debugMessage(" UV: "+e);const n=[];for(let i=0;i<e;i++)n.push(t.readFloat()),n.push(t.readFloat());i.setAttribute("uv",new Ge(n,2))}else if(t.id===Qs){this.debugMessage(" Tranformation Matrix (TODO)");const e=[];for(let i=0;i<12;i++)e[i]=t.readFloat();const n=new d;n.elements[0]=e[0],n.elements[1]=e[6],n.elements[2]=e[3],n.elements[3]=e[9],n.elements[4]=e[2],n.elements[5]=e[8],n.elements[6]=e[5],n.elements[7]=e[11],n.elements[8]=e[1],n.elements[9]=e[7],n.elements[10]=e[4],n.elements[11]=e[10],n.elements[12]=0,n.elements[13]=0,n.elements[14]=0,n.elements[15]=1,n.transpose();const r=new d;r.copy(n).invert(),i.applyMatrix4(r),n.decompose(s.position,s.quaternion,s.scale)}else this.debugMessage(" Unknown mesh chunk: "+t.hexId);t=e.readChunk()}return i.computeVertexNormals(),s}readFaceArray(e,t){const i=e.readWord();this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord(),e.readWord(),e.readWord()),e.readWord();t.geometry.setIndex(n);let s=0,r=0;for(;!e.endOfChunk;){const i=e.readChunk();if(i.id===Es){this.debugMessage(" Material Group");const e=this.readMaterialGroup(i),n=3*e.index.length;t.geometry.addGroup(r,n,s),r+=n,s++;const o=this.materials[e.name];!1===Array.isArray(t.material)&&(t.material=[]),void 0!==o&&t.material.push(o)}else this.debugMessage(" Unknown face array chunk: "+i.hexId)}1===t.material.length&&(t.material=t.material[0])}readMap(e,t){let i=e.readChunk(),n={};const s=new C(this.manager);for(s.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);i;){if(i.id===gs){const e=i.readString();n=s.load(e),n.userData.name=e.split(".").slice(0,-1).join("."),this.debugMessage(" File: "+t+e)}else i.id===ms?(n.offset.x=i.readFloat(),this.debugMessage(" OffsetX: "+n.offset.x)):i.id===Is?(n.offset.y=i.readFloat(),this.debugMessage(" OffsetY: "+n.offset.y)):i.id===ds?(n.repeat.x=i.readFloat(),this.debugMessage(" RepeatX: "+n.repeat.x)):i.id===fs?(n.repeat.y=i.readFloat(),this.debugMessage(" RepeatY: "+n.repeat.y)):this.debugMessage(" Unknown map chunk: "+i.hexId);i=e.readChunk()}return n}readMaterialGroup(e){const t=e.readString(),i=e.readWord();this.debugMessage(" Name: "+t),this.debugMessage(" Faces: "+i);const n=[];for(let t=0;t<i;++t)n.push(e.readWord());return{name:t,index:n}}readColor(e){const t=e.readChunk(),i=new l;if(t.id===zn||t.id===Hn){const e=t.readByte(),n=t.readByte(),s=t.readByte();i.setRGB(e/255,n/255,s/255),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else if(t.id===qn||t.id===jn){const e=t.readFloat(),n=t.readFloat(),s=t.readFloat();i.setRGB(e,n,s),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else this.debugMessage(" Unknown color chunk: "+t.hexId);return i}readPercentage(e){const t=e.readChunk();switch(t.id){case Wn:return t.readShort()/100;case Jn:return t.readFloat();default:return this.debugMessage(" Unknown percentage chunk: "+t.hexId),0}}debugMessage(e){this.debug&&console.log(e)}}class Chunk{constructor(e,t,i){this.data=e,this.offset=t,this.position=t,this.debugMessage=i,this.debugMessage instanceof Function&&(this.debugMessage=function(){}),this.id=this.readWord(),this.size=this.readDWord(),this.end=this.offset+this.size,this.end>e.byteLength&&this.debugMessage("Bad chunk size for chunk at "+t)}readChunk(){if(this.endOfChunk)return null;try{const e=new Chunk(this.data,this.position,this.debugMessage);return this.position+=e.size,e}catch(e){return this.debugMessage("Unable to read chunk at "+this.position),null}}get hexId(){return this.id.toString(16)}get endOfChunk(){return this.position>=this.end}readByte(){const e=this.data.getUint8(this.position,!0);return this.position+=1,e}readFloat(){try{const e=this.data.getFloat32(this.position,!0);return this.position+=4,e}catch(e){return this.debugMessage(e+" "+this.position+" "+this.data.byteLength),0}}readInt(){const e=this.data.getInt32(this.position,!0);return this.position+=4,e}readShort(){const e=this.data.getInt16(this.position,!0);return this.position+=2,e}readDWord(){const e=this.data.getUint32(this.position,!0);return this.position+=4,e}readWord(){const e=this.data.getUint16(this.position,!0);return this.position+=2,e}readString(){let e="",t=this.readByte();for(;t;)e+=String.fromCharCode(t),t=this.readByte();return e}}const Gn=19789,Yn=15786,Un=49725,Xn=2,qn=16,zn=17,Hn=18,jn=19,Wn=48,Jn=49,Kn=15677,Vn=15678,Zn=256,$n=45055,es=40960,ts=40976,is=40992,ns=41008,ss=41024,rs=41040,os=41089,as=41091,As=41093,ls=41095,cs=41472,hs=41488,ps=41520,us=41476,gs=41728,ds=41812,fs=41814,ms=41816,Is=41818,bs=16384,ys=16640,Cs=16656,Bs=16672,Es=16688,xs=16704,Qs=16736;const to_std=(t,i)=>{if(!t||"MeshPhongMaterial"!==t.type)return t;if(i){const e=i.get(t);if(e)return e}const n=1-("number"==typeof t.shininess?Math.min(Math.max(t.shininess,0),100):30)/100,s=new e.MeshStandardMaterial({name:t.name,color:t.color,map:t.map,normalMap:t.normalMap,emissive:t.emissive,emissiveMap:t.emissiveMap,envMap:t.envMap,envMapIntensity:t.envMapIntensity??1,lightMap:t.lightMap,lightMapIntensity:t.lightMapIntensity,alphaTest:t.alphaTest,depthWrite:t.depthWrite,depthTest:t.depthTest,wireframe:t.wireframe,transparent:t.transparent,opacity:t.opacity,side:t.side,roughness:n,metalness:0});return i&&i.set(t,s),"function"==typeof t.dispose&&(t.dispose(),t.userData=t.userData||{},t.userData._replaced=!0),s.needsUpdate=!0,s};function newgcad(t,i,n,s=!0){let r={},o={},a={},A={},l={};const c=new Map;let h={},p={},u=[],g=new e.TextureLoader,d=new GLTFLoader,f=new TDSLoader;const m=new DRACOLoader;m.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.6/"),d.setDRACOLoader(m);const I=new KTX2Loader;I.setTranscoderPath("https://unpkg.com/three@0.159.0/examples/jsm/libs/basis/"),d.setKTX2Loader(I),d.setMeshoptDecoder(On);let b=[n],getcat=()=>b[b.length-1],y={};async function clearmat(){for(const e in o)if(o[e]){const t=await o[e];t?.dispose()}for(const e in h)h[e]&&h[e]?.dispose();for(const[e,t]of c.entries()){const e=t instanceof Promise?await t:t;e?.dispose&&e.dispose()}c.clear(),o={},h={}}function getdims(t){let i=(new e.Box3).setFromObject(t),n2=e=>Math.round(100*e)/100;return{zero:{x:n2(-i.min.x),y:n2(-i.min.y),z:n2(-i.min.z)},dim:{x:n2(i.max.x-i.min.x),y:n2(i.max.y-i.min.y),z:n2(i.max.z-i.min.z)},position:t.position,rotation:{x:t.rotation.x,y:t.rotation.y,z:t.rotation.z},scale:t.scale}}async function get3ds(e){e.endsWith(".3ds")&&(e=e.slice(0,-4));const i=hash(`${getcat()}|${e}.3ds`);return a[i]||(a[i]=await new Promise(((n,s)=>{let r,o="";e.startsWith("https://")?(r=`${e}.3ds`,o=r):t._cdn?(r=`${t._cdn}${getcat()}/3d/${e}.3ds`,o=`${t._cdn}${getcat()}/3d/${e}/`):(r=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:".3ds"}),o=r+"&tex="),f.setResourcePath(o),f.load(r,(e=>{const t=new WeakMap;e.traverse((e=>{e.isMesh&&e.material&&(e.material=Array.isArray(e.material)?e.material.map((e=>to_std(e,t))):to_std(e.material,t))})),e.userData||(e.userData={}),e.userData._ky=i,n(e)}),void 0,(e=>{console.log(e),delete a[i],n(void 0)}))}))),a[i]}async function getglb(e){const i=".glb";e.endsWith(i)&&(e=e.slice(0,-4)),e.startsWith("https://")||(e=e.replace(/\//g,"+"));let n=(e=e.split("+"))[1];e=e[0];const s=hash(`${getcat()}|${e}${i}`);a[s]||(a[s]=await new Promise(((n,r)=>{let o;o=e.startsWith("https://")?`${e}.glb`:t._cdn?`${t._cdn}${getcat()}/3d/${e}.glb`:t.fullget("mufiles/getfile",{id:getcat(),subfolder:"3d",name:e,ext:i}),d.setPath(""),d.setResourcePath((e=>(console.log("risorsa",e),`${o}&tex=${e}`))),d.load(o,(async e=>{const t=e.scene;t.userData||(t.userData={}),t.userData._ky=s,n(t)}),void 0,(e=>{console.log(e),delete a[s],n(void 0)}))})));let r=a[s];if(n){let e=r?.getObjectByName(n);e&&(r=e)}return r}return{clearmatricole:()=>{y={},u=[]},P:t,bus:i,tex:async function tex(i,n=1,s,r){let a;return s||(s=n),r||(r=0),"__alpha"==i?(a=i,o[a]||(o[a]=function getfortransparent(){const t=new e.CanvasTexture(function generateTexture(){const e=document.createElement("canvas");e.width=2,e.height=2;const t=e.getContext("2d");return t.fillStyle="white",t.fillRect(0,1,2,1),e}());return t.magFilter=e.NearestFilter,t.wrapT=e.RepeatWrapping,t.wrapS=e.RepeatWrapping,t.repeat.set(1,3.5),t}()),o[a]):(a=hash(`${getcat()}|${i}|${n}|${s}|${r}`),o[a]||(o[a]=new Promise(((A,l)=>{let h;if(i.startsWith("https://"))h=i;else if(t._cdn)if(i.includes("/")){let e=i.split("/");h=`${t._cdn}${e[0]}/textures/${e[1]}`}else h=`${t._cdn}${getcat()}/textures/${i}`;else h=t.fullget("mufiles/getfile",{id:getcat(),subfolder:"textures",name:i,force:1});if(c.has(h)){const t=c.get(h).clone();return t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.center.set(.5,.5),t.repeat.set(n,s),t.rotation=r,void A(t)}g.load(h,(t=>{c.set(h,t),t.wrapS=e.RepeatWrapping,t.wrapT=e.RepeatWrapping,t.repeat.set(n,s),t.center.set(.5,.5),t.rotation=r,A(t)}),void 0,(e=>{console.log(`Manca Texture ${i}!. questo rallenta molto il processo`),delete o[a],A(void 0)}))}))),o[a])},getglb:getglb,get3ds:get3ds,replacemats:function replacemats(e,t,i){if(!Array.isArray(t)||0==t.length)return e;const leggi_slot=e=>{if(!e)return-1;let t=(e?.map?.name||e?.name||e?.map?.userData?.name||"").toString().trim();if(i){const e=i(t);void 0!==e&&(t=e)}if(t.includes("_")&&(t=t.split("_").pop()),!t)return-1;const n=parseInt(t,10);return n>=1&&n<=9?n:-1};let n=!1,s=String(e.userData?._ky||"");if(e.traverse((e=>{if(!e.isMesh)return;const i=Array.isArray(e.material)?e.material:[e.material];for(const e of i){const i=leggi_slot(e);i>0&&t[i-1]&&(n=!0,s+="|"+(t[i-1].name||t[i-1].uuid))}})),n){if(s=hash(s),a[s])return a[s];const i=e.clone(!0);i.traverse((e=>{if(e.isMesh)if(Array.isArray(e.material))e.material=e.material.map((e=>{if(!e)return e;const i=leggi_slot(e);if(i>0&&t[i-1]){const e=t[i-1];return e.needsUpdate=!0,e}return e}));else{const i=e.material,n=leggi_slot(i);e.material=n>0&&t[n-1]?(t[n-1].needsUpdate=!0,t[n-1]):i}})),i.userData=i.userData||{},i.userData._ky=s,a[s]=i,e=i}return e},islog:s,clear:async function clear(){function destroymesh(e){function disposeMaterial(e){e.map&&e.map.dispose(),e.lightMap&&e.lightMap.dispose(),e.bumpMap&&e.bumpMap.dispose(),e.normalMap&&e.normalMap.dispose(),e.specularMap&&e.specularMap.dispose(),e.envMap&&e.envMap.dispose(),e.alphaMap&&e.alphaMap.dispose(),e.dispose()}e&&e.traverse((e=>{e.isMesh&&(e.onBeforeRender&&(e.onBeforeRender=null),e.onAfterRender&&(e.onAfterRender=null),e.geometry?.dispose&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach(disposeMaterial):disposeMaterial(e.material)))}))}y={},l={},e.Cache.clear();for(const e in A)A[e]?.dispose();for(const e in a)if(a[e]){destroymesh(await a[e])}await clearmat(),r={},o={},a={},A={},h={},p={}},clearmat:clearmat,getdims:getdims,info3d:async function info3d(e,t=1,i=0,n=0){let s=(e||"").endsWith(".3ds")?await get3ds(e):await getglb(e);if(s)return t&&1!=t&&(s.scale.set(t||1,i||t||1,n||t||1),s.needsUpdate=!0),getdims(s)},getScript:async function getScript(e){e.endsWith(".custom")?e=e.slice(0,-7):e.endsWith(".js")&&(e=e.slice(0,-3));let i=hash(`${getcat()}|${e}`);if(!p[i]){let n;try{n=await t.fetch("mufiles/customfn",{id:getcat(),name:e,ispar:1})}catch(t){n=`log('undefined ${getcat()}/${e}: ${t.message}');`}p[i]=n}return p[i]},checkScripts:async function checkScripts(e){let i=[];if(!e||!Array.isArray(e))return;let n=getcat();e=[...e,"_ricalcolatop","_ricalcolaaltri","_ricalcolalinee"];for(let t of e){let e=hash(`${n}|${t}`);p[e]||i.push(t)}if(i?.length){let e=await t.fetch("mufiles/customfn",{id:n,name:i,ispar:1});if(e)for(let t of e){let e=hash(`${n}|${t.n}`);p[e]=t.v}}},get loaderGLTF(){return d},get BTNS(){return u},get gmats(){return y},scripts:()=>Object.keys(p),get geo(){return A},get movs(){return r},get textures(){return o},get smats(){return h},get meshes(){return a},get cacheFns(){return l},dump(){console.log(`SMATS:\n${Object.keys(h).join(" - ")};\nGEOMS:\n${Object.keys(A).join(" - ")};\nTEX:\n${Object.keys(o).join(" - ")};\nMESH:\n${Object.keys(a).join(" - ")};\n`)},get cat(){return getcat()},pushcat(e){b.push(e)},popcat:()=>(b.length>1&&b.length--,getcat())}}const ws=new Map;function salvaMaterialiOriginali(e){e.traverse((e=>{if(!e.isMesh||e.layers.mask>1<<20)return;const t=e.material;if(!t)return;const i=Array.isArray(t)?t:[t];ws.has(e)||ws.set(e,i)}))}function ripristinaMaterialiOriginali(){for(let[e,t]of ws.entries())e.material=Array.isArray(t)?[...t]:t;ws.clear()}function applicaEvidenziazione(e,t,i,n){!function ricorsiva(e,s,r){const o=!!s||!!t&&t.includes(e?.userData?.mat),a=r||e.userData?.evidenziaMap;if(e.isMesh&&e.layers.mask<=1<<20){const t=ws.get(e);if(!t)return;const s=t.map((e=>{const t=(o?n:i).clone();return a&&e.map&&(t.map=e.map),t.transparent=e.transparent,t.opacity=e.opacity,t}));e.material=Array.isArray(e.material)?s:s[0]}e.children.forEach((e=>ricorsiva(e,o,a)))}(e,!1,!1)}async function evidenziaColli(t,i,n){salvaMaterialiOriginali(t);const s=e.DoubleSide,r=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:s}),o=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:s});let a=0;try{for(let e of i)a++,e.name||(e.name=`collo_${a}`),applicaEvidenziazione(t,e.mats,r,o),await n(e)}catch(e){console.error("Errore durante evidenzia:",e)}finally{ripristinaMaterialiOriginali()}}async function runScript(t,i,n,s,r){let o=await t.getScript(i),a=o.script,A=[],l=function toCadPars(e){const t=muClComments(e),i=[];for(const e of t){const t=e.includes("(")||e.includes("[")?[e]:getcolonne(e,!0);let n=!1;for(const e of t)!e.startsWith('"')&&e.includes("=")?(i.push(e),n=!0):n&&(i[i.length-1]+=","+e)}const n={};for(const e of i){let{v:t,o:i}=getcouple(e,"=",!1);i=i||"",t&&(/^[-+]?\d*\.?\d+$/.test(i)&&(i=parseFloat(i)),n[t]=i)}return n}(o.pars+("string"==typeof s?"\n"+s:""));function setmatricola(e){return e?.userData&&(e.userData.mat=`${i}_${t.gmats[i]}`),e}s&&"object"==typeof s&&(l={...l,...s}),t.gmats[i]||(t.gmats[i]=0);let c=(new Date).valueOf(),h=c;try{function movimento(e,i=[]){return e=clean(e,!0),t.movs[e]||(t.movs[e]=getmovimento(e,i)),t.movs[e]}function addlog(...e){if(t?.islog){const t=e.map((e=>getOggetto(e)));console.log(...t),A.push(...t)}}function dbadd(e,s,r,o={}){o||(o={}),t.gmats[i]++;let a=`${i}_${t.gmats[i]}`,{qt:A=1,l:l=0,a:c=0,p:h=0,vars:p="",shape:u=null,model:g,lavs:d=null}=o;if(n.DB&&s){let t={lev:"string"==typeof e?clean(e,!0):"l"+(e+(n?._level??0)),mat:a,cod:s,note:r||"",qt:A,l:l,a:c,p:h,vars:p};u&&(t.shape=u),d&&(t.lavs=d),g&&(t.model=g),n.DB.push(t)}return a}function addtop(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"top",op:i,posfn:r})}function addhole(e,t,i={}){i||(i={}),n.TOPS.push({key:e,shape:t,type:"hole",op:i,posfn:r})}function addaltri(e,t,i={}){i||(i={}),n.TOPS.push({key:e,data:t,type:"altri",op:i,posfn:r})}function addlines(e,t,i={}){i||(i={}),t&&(Array.isArray(t)||(t=[t]),n.TOPS.push({key:e,lines:t,type:"lines",op:i,posfn:r}))}function dbdes(e,t){n.DES&&t&&n.DES.push({lev:e+(n?._level??0),description:t})}function geturltex(e){let i=t.cat;if(!e)return t.P.baseurl+"noimage.jpg";if(t.P._cdn){if(e.includes("/")){let t=e.split("/");i=t[0],e=t[1]}return e.endsWith(".webp")||e.endsWith(".png")||e.endsWith(".jpeg")||e.endsWith(".jpg")||(e+=".webp"),`${t.P._cdn}${i}/textures/${e}`}return t.P.fullget("mufiles/getfile",{id:i,subfolder:"textures",name:e})}l||(l={}),n||(n={});const p={GCAD:!0,...n,...l,THREE:e,TODEG:TODEG,TORAD:TORAD,dbadd:dbadd,addtop:addtop,addhole:addhole,addlines:addlines,addaltri:addaltri,dbdes:dbdes,posfn:r,addpivot:(e,i,n={},s=0,r=0,o=0)=>setmatricola(addmovpivot(t,e,i,n,s,r,o)),movimento:movimento,Math:Math,facesettile:facesettile,info3d:t.info3d,round:round,gcad:t,SIDE:Li,seeder:seeder,seedarray:seedarray,baseurl:t.P.baseurl,Vis2d:Vis2d,joinlinestoshapes:joinlinestoshapes,groupfromgeometry:groupfromgeometry,creategroup:creategroup,deletegroup:deletegroup,Matrix3D:Matrix3D,geturltex:geturltex,clamp:clamp,Punto2:Punto2,Linea2:Linea2,getptsoffset:getptsoffset,hash:hash,PIF:Ue,raccordabezier:raccordabezier,svuotanodo:svuotanodo,normal2:normal2,angle3point:angle3point,angle2vec:angle2vec,getshape:getshape,shapeclip:shapeclip,mgray1:Fi,mgray2:Ni,mwhite:Ri,mred:Oi,mgreen:Yi,mblack:Ui,mblue:Gi,materialline1:ki,materialline2:_i,scaleunit:Xi,edgesfromgeometry:edgesfromgeometry,getmesh:getmesh,getcolonne:getcolonne,posiziona:posiziona,getbb:getbb,scalaoggetto:(e,i)=>scalaoggetto(t,e,i),setorigine:setorigine,SP:Ve,elaborapercorso:elaborapercorso,gettarghetta:(e,i,n)=>gettarghetta(t,e,i,n),getquota:(e,i,n,s,r,o={})=>getquota(t,e,i,n,s,r,o),getsprite:(e,t,i,n,s)=>getsprite(0,e,t,i,n,s),getpunto:(e,i,n,s,r,o)=>getpunto(t,e,i,n,s,r),spritemat:e=>spritemat(t,e),getemitter:getemitter,getreceiver:e=>setmatricola(getreceiver(t,e)),getriferimento:getriferimento,get3dshape:get3dshape,getline:getline,getpoint:getpoint,randombasemat:randombasemat,infocircle:infocircle,intersectcircle:intersectcircle,creagizmo:creagizmo,texgen:(e,i=256,n={})=>texgen(t,e,i,n),getcilindro:(e,i,n,s,r=Ri,o)=>setmatricola(getcilindro(t,e,i,n,s,r,o)),getbox:(e,t,i,n,s)=>setmatricola(getbox(0,e,t,i,n,s)),getsphere:(e,t,i)=>setmatricola(getsphere(0,e,t,i)),replacemats:t.replacemats,getluce:(e,i="#ffffff",n=1)=>getluce(t,e,i,n),getthorus:(e,t,i,n)=>setmatricola(getthorus(0,e,t,i,n)),getcyl:(e,t,i=Ri,n)=>setmatricola(getcyl(0,e,t,i,n)),getpannello:(e,i,n,s,r,o,a)=>setmatricola(getpannello(t,e,i,n,s,r,o,a)),getpannello2:(e,i,n,s,r,o)=>setmatricola(getpannello2(t,e,i,n,s,r,o)),getface:(e,i,n,s)=>setmatricola(getface(t,e,i,n,s)),pickvariant:(e,i,n,s,r,o={})=>pickvariant(t,e,i,n,s,r,o),getmarker:(e,i,n,s,r,o={})=>getmarker(t,e,i,n,s,r,o),getglb:e=>setmatricola(t.getglb(e)),get3ds:e=>setmatricola(t.get3ds(e)),estruso:(e,i,n,s,r,o)=>setmatricola(estruso(t,e,i,n,s,r,o)),getextrude:(e,i,n,s,r)=>setmatricola(getextrude(t,e,i,n,s,r)),estrusopat:(e,i,n,s,r,o)=>setmatricola(estrusopat(t,e,i,n,s,r,o)),infoestrudi:infoestrudi,getfakeshadow:(e,i)=>getfakeshadow(t,e,i),getfakeshadow2:getfakeshadow2,revolve:(e,i,n,s)=>setmatricola(revolve(t,e,i,n,s)),smat:(e,i)=>smat(t,e,i),log:addlog,clean:clean,logtime:e=>{if(t?.islog){let t=(new Date).valueOf();addlog(`time: ${e} => ${t-h}ms / ${t-c}ms`),h=t}}},u=[...Object.keys(p),...Object.keys(Xe)],g=[...Object.values(p),...Object.values(Xe)],d=`//# sourceURL=${i}\n return (async () => {\n${a}\n })();`;try{let f=hash(i+JSON.stringify(Object.keys(l)));t.cacheFns[f]||(t.cacheFns[f]=new Function(...u,d));const m=t.cacheFns[f];return{res:await m(...g),LOGS:A}}catch(I){let b=await errorescript(`// errore\n async function script() {\n ${a}\n }`,I);console.error(I),t?.bus?.errore(b)}}catch(y){t?.bus?.errore(`${y.message}\nscript: ${i}`),console.error(y)}}async function processatop(e,t,i){if(!t)return;let n=[],s=t.getObjectByName("_mtop");if(s)for(;s.children.length>0;)s.remove(s.children[0]);else s=creategroup("_mtop"),t.add(s);const uk=e=>`${e.key}|${Math.round(((e.ang||0)+180)%180)/5}|${e.pos.y}`;let r=shapeclip();const o=[...new Set(i.filter((e=>"top"==e.type)).map(uk))];let a=[],A=0;for(let t of o){let o=i.filter((e=>"top"==e.type&&uk(e)===t));if(o.length){let t=o[0],l=i.filter((e=>"hole"==e.type&&e.key==t.key)),c=[],h=[],p=[];for(let e of o)c.push(e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z));let u=[];for(let e of l){let t=e.op.ptrif,i=e.op.ptapplica,n=e.shape.dims();t=t?[n.p1,...t]:[n.p1,n.p2],i||(i=n.p1);let s=e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z),r=getshape().frompt(t).rotate(-e.ang).move(e.pos.x,e.pos.z);u.push({pt:r.pt,shape:s,op:e.op,width:n.width,height:n.height}),e.op?.hidden||h.push(s)}let g,d=r.unisci(c,h,p);for(let t of d){let i=o[0],r=t.shape.rebase(-i.ang),l=t.shape.dims(),c=getshape().fromrect(l.width,l.height,l.p1.x,l.p1.y);r.holes=[],r.cuts=[];for(let e of t.holes)r.holes.push(e.rebase(-i.ang,!0,r.origine.x,r.origine.y));const to2dec=e=>Math.round(100*(Number(e)||0))/100;let h=u.map((e=>{let t=getshape().frompt(e.pt),{shape:n}=t.rebase(-i.ang,!0,r.origine.x,r.origine.y);return{op:e.op,pt:n.pt,px:to2dec(n.pt[0].x),py:to2dec(n.pt[0].y),dx:to2dec(e.width),dy:to2dec(e.height)}})),p=h.filter((e=>{for(let t of e.pt)if(c.pointinshape(t))return!0;return!1}));p.forEach((e=>delete e.pt));let d=[];await runScript(e,"_ricalcolatop",{SHAPES:n,BOX:d,DB:a,TOPS:[],_level:800,processatop:{top:r,base:i,lavs:p,idt:A}},{}),A++;for(let e of d)g=posiziona(posiziona(e,{sa:i.pos.y||0,sl:r.origine.x,sp:r.origine.y}),{ay:i.ang}),s.add(g)}}}const l=i.filter((e=>"altri"==e.type));let c=[];await runScript(e,"_ricalcolaaltri",{SHAPES:n,BOX:c,DB:a,TOPS:[],_level:800,processatop:{altri:l,idt:A}},{}),A++;for(let e of c)s.add(e);const uk1=e=>`${e.key}|${e.pos.y}`,h=i.filter((e=>"lines"==e.type)),p=[...new Set(h.map(uk1))];for(let t of p){const i=h.filter((e=>uk1(e)===t)),s=joinlinestoshapes(i);for(let r of s){let s={sh:r,key:t,data:i[0].op||{},idt:A};await runScript(e,"_ricalcolalinee",{SHAPES:n,BOX:c,DB:a,TOPS:[],_level:800,processatop:s,idt:A},{})}A++}for(let e of c)s.add(e);return{DB:a,SHAPES:n}}function dumpscene(e,t={}){const{maxdepth:i=1/0}=t,r3=e=>Math.round(1e3*e)/1e3;function layerMaskToString(e){let t="";for(let i=0;i<32;i++)t=(e&1<<i?"x":"_")+t;return t}function filterUserData(e){if(!e)return{};const t={};for(const i in e){const n=e[i];if(null==n)continue;const s=typeof n;"string"!==s&&"number"!==s&&"boolean"!==s||(t[i]=n)}return t}return function scan(e,t=0){if(!e||t>i)return null;const n={type:e.type,name:e.name||"",layer:layerMaskToString(e.layers?.mask??0),userData:filterUserData(e.userData)};if(e.position&&function sigPos(e){return 0!==e.x||0!==e.y||0!==e.z}(e.position)&&(n.position={x:r3(e.position.x),y:r3(e.position.y),z:r3(e.position.z)}),e.rotation&&function sigRot(e){return 0!==e.x||0!==e.y||0!==e.z}(e.rotation)&&(n.rotation={x:r3(e.rotation.x),y:r3(e.rotation.y),z:r3(e.rotation.z)}),e.scale&&function sigScale(e){return 1!==e.x||1!==e.y||1!==e.z}(e.scale)&&(n.scale={x:r3(e.scale.x),y:r3(e.scale.y),z:r3(e.scale.z)}),e.isMesh&&e.geometry){n.geometry={type:e.geometry.type};const t=e.geometry.parameters;if(t)for(const e in t){const i=t[e];"number"==typeof i&&(n.geometry[e]=r3(i))}}return e.material&&(Array.isArray(e.material)?n.material=e.material.map((e=>e.type||e.name||"Material")):n.material=e.material.type||e.material.name||"Material"),e.children?.length&&(n.children=e.children.map((e=>scan(e,t+1))).filter(Boolean)),n}(e,0)}async function processamarker(t){t.updateMatrixWorld(!0);const i=new Map;function trovagenitorerif(e){for(;e&&!e.userData?.rifid;)e=e.parent;return e}!function traverse(n){if(n.userData?.markerid)i.set(n.userData.markerid,n);else if(n.name?.startsWith("#mk_")){const s=n.name,r=i.get(s);if(!r)return void t.remove(n);{r.updateMatrixWorld(!0),n.updateMatrixWorld(!0);const t=n,i=trovagenitorerif(r)||r,s=trovagenitorerif(t)||t;if(!i||!s)return;i.updateMatrixWorld(!0),s.updateMatrixWorld(!0),t.updateMatrixWorld(!0);const o=r.matrixWorld.clone(),a=t.matrixWorld.clone(),A=s.matrixWorld.clone().clone().invert().multiply(a),l=o.clone().multiply(A.clone().invert()),c=s.parent,h=(c?c.matrixWorld:new e.Matrix4).clone().invert().multiply(l),p=new e.Vector3,u=new e.Quaternion,g=new e.Vector3;h.decompose(p,u,g),s.position.copy(p),s.quaternion.copy(u),s.scale.copy(g),s.updateMatrixWorld(!0),r.visible=!1}}for(const e of[...n.children])traverse(e)}(t)}async function processagruppo(e,t,i){i||(i=t),Object.assign(i.userData,{SHAPES:[],DB:[],TOPS:[]});for(let n of i.userData.INFO.rows)if("fn"==n?.t){let s=creategroup(),r=[];await runScript(e,n.fn,{BOX:r,SHAPES:t.userData.SHAPES,DB:i.userData.DB,TOPS:i.userData.TOPS,_level:i.userData._level},n.pars,n.p2),r.length&&(r.forEach((e=>s.add(e))),Object.keys(n.p2).length&&(s=posiziona(s,n.p2)),t.add(s))}else if(n?.rows&&n.rows.length){let i=creategroup();n.iscad&&(i=posiziona(i,n.cadv)),i.name=n.id,Object.assign(i.userData,{INFO:n,_level:t.userData._level+1});let s=i;i.children[0]&&i.children[0].userData.ismove&&(s=i.children[0]),n.cadv?.move?.annulla||await processagruppo(e,s,i),t.add(i)}}function getalldb(t,i){let n=[],s=[],r=[];if(t){let i=new e.Matrix4,o=new e.Matrix4;t.updateMatrixWorld(),i.copy(t.matrixWorld);let a=i.clone().invert();t.traverse((t=>{let i=t;if(1==t.children?.length&&t.children[0].userData.ismove&&(i=t.children[0]),!i.userData?.ismove||!i.userData.move?.annulla){if(t.userData?.DB&&Array.isArray(t.userData.DB)&&n.push(...t.userData.DB),t.userData?.TOPS&&t.userData.TOPS.length){i.updateMatrixWorld(),o.copy(i.matrixWorld);let n=o.clone().premultiply(a),r=new e.Vector3;r.setFromMatrixPosition(n),(new e.Euler).setFromRotationMatrix(n);let A=-e.MathUtils.radToDeg(Math.atan2(n.elements[2],n.elements[10]));for(let i of t.userData.TOPS){let{sl:t=0,sp:n=0,ay:o=0}=i.posfn;if(t||n||o){let a=e.MathUtils.degToRad(-A),l=Math.cos(a),c=Math.sin(a),h=t*l-n*c,p=t*c+n*l,u=new e.Vector3(r.x+h,r.y,r.z+p),g=A-o;s.push({...i,pos:u,ang:g})}else s.push({...i,pos:r,ang:A})}}t.userData?.SHAPES&&Array.isArray(t.userData.SHAPES)&&t.userData.SHAPES.forEach((e=>{let t=e?.tojson();r.push(t)}))}}))}return i&&(i.DB=n,i.TOPS=s,r=r.filter((e=>e.visible)),i.SHAPES=r),{DB:n,TOPS:s,SHAPES:r}}async function evalcustomfunction(e,t,i,n){try{i||(i={}),n||(n={});const s={GCAD:!1,...i,A:e,V:e.vari,amb:e,info3d:async function info3d(t,i=1,n=0,s=0){if(e.gcad)return await e.gcad.info3d(t,i,n,s)},gcad:e.gcad,log:function addlog(...e){const t=e.map((e=>getOggetto(e)));console.log(...t)},Math:Math,getcolonne:getcolonne,clean:clean,SP:Ve,seeder:seeder,seedarray:seedarray,Punto2:Punto2,Linea2:Linea2,clamp:clamp,hash:hash,PIF:Ue,getshape:getshape,shapeclip:shapeclip,...n},r=[...Object.keys(s),...Object.keys(Xe)],o=[...Object.values(s),...Object.values(Xe)],a=new Function(...r,`\n try {\n return (async () => {\n ${t}\n })();\n } catch (err) {\n err.stack = '[SCRIPT] ' + err.stack;\n throw err;\n }`);return await a(...o)}catch(e){throw console.error("Errore durante l'esecuzione:",e),e}}function setLineColorMode(e,t){e?(ki.color.set(16777215),_i.color.set(16777215)):t?(ki.color.set(2501422),_i.color.set(8421504)):(ki.color.set(6316128),_i.color.set(8421504)),ki.needsUpdate=!0,_i.needsUpdate=!0}export{Linea2,Matrix3D,Ue as PIF,Punto2,Li as SIDE,Ve as SP,TODEG,TORAD,Vis2d,Vobject,Vscene,addmovpivot,angle2vec,angle3point,Xe as blocked,calcolatasks,checkmovedata,clamp,clean,creagizmo,creategroup,d3dview,deletegroup,dumpscene,dxfbulge,edgesfromgeometry,elaborapercorso,errorescript,estruso,estrusopat,evalcustomfunction,evidenziaColli,exportdxf,extractTextures,facesettile,get3dshape,getOggetto,getalldb,getbb,getbordi,getbox,getcilindro,getcyl,getdumpmacro,getemitter,getextrude,getface,getfakeshadow,getfakeshadow2,getline,getlinesgeom,getluce,getmarker,getmesh,getmovimento,getnodebyid,getpannello,getpannello2,getpoint,getptsoffset,getpunto,getquota,getreceiver,getriferimento,getshape,getsphere,getsprite,getsubrules,gettarghetta,getthorus,groupfromgeometry,hash,infocircle,infoestrudi,intersectcircle,isfn,ismacro,joinlinestoshapes,konvautils,mapvertices,ki as materialline1,_i as materialline2,Ui as mblack,Gi as mblue,Fi as mgray1,Ni as mgray2,Yi as mgreen,Oi as mred,Ri as mwhite,newgcad,normal2,pickvariant,posiziona,processagruppo,processamarker,processatop,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,round,runScript,salvaMaterialiOriginali,scalaoggetto,Xi as scaleunit,seedarray,seeder,setLineColorMode,setorigine,shapeclip,smat,spritemat,svuotanodo,texgen,valutagrafica};