markuno_lib 1.2.102 → 1.2.103
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.
- package/bin/markcad.js +1 -1
- 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 s,Loader as n,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 L,RepeatWrapping as T,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 se,InterpolateLinear as ne,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 Le,RGBA_S3TC_DXT5_Format as Te,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),s=Math.cos(t),n=[...this.m];this.m[1]=n[1]*s+n[9]*i,this.m[2]=n[2]*s+n[10]*i,this.m[3]=n[3]*s+n[11]*i,this.m[9]=n[1]*-i+n[9]*s,this.m[10]=n[2]*-i+n[10]*s,this.m[11]=n[3]*-i+n[11]*s}return this}rotateY(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),s=Math.cos(t),n=[...this.m];this.m[0]=n[0]*s+n[8]*i,this.m[1]=n[1]*s+n[9]*i,this.m[2]=n[2]*s+n[10]*i,this.m[3]=n[3]*s+n[11]*i,this.m[8]=n[0]*-i+n[8]*s,this.m[9]=n[1]*-i+n[9]*s,this.m[10]=n[2]*-i+n[10]*s,this.m[11]=n[3]*-i+n[11]*s}return this}rotateZ(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),s=Math.cos(t),n=[...this.m];this.m[0]=n[0]*s+n[4]*i,this.m[1]=n[1]*s+n[5]*i,this.m[2]=n[2]*s+n[6]*i,this.m[3]=n[3]*s+n[7]*i,this.m[4]=n[0]*-i+n[4]*s,this.m[5]=n[1]*-i+n[5]*s,this.m[6]=n[2]*-i+n[6]*s,this.m[7]=n[3]*-i+n[7]*s}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 s=t*Math.PI/180,n=this.x+e*Math.cos(s),r=this.y+e*Math.sin(s),o=s+Math.PI/2,a=n+i*Math.cos(o),A=r+i*Math.sin(o);return new Linea2(n,r,a,A)}angolo3p(e,t){let i=this;const s=e.x-i.x,n=e.y-i.y,r=t.x-i.x,o=t.y-i.y,a=s*r+n*o,A=Math.hypot(s,n),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,s=null){"number"==typeof e&&"number"==typeof t&&null!==i&&null!==s?(this.p1=new Punto2({x:e,y:t}),this.p2=new Punto2({x:i,y:s})):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:s,dy:n,len:r}=this;return r?(s/=r,n/=r,e>0?new Linea2(t,new Punto2(i.x+s*e,i.y+n*e)):new Linea2(new Punto2(t.x+s*e,t.y+n*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,s=this.puntot(i);this.p2=s}}proiezionet(e){const{p1:t,dx:i,dy:s,len2:n}=this;if(n<Ye)return;const r=((e.x-t.x)*i+(e.y-t.y)*s)/n;return{p:new Punto2(t.x+r*i,t.y+r*s),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:s,p1:n}=this;if(s<1e-9)return;const r=t||s,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:s,p1:n,p2:r}=this;if(s<1e-9)return;const o=t||s,a=new Punto2(n.x+(r.x-n.x)*e,n.y+(r.y-n.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,s=this.p2.y-this.p1.y,n=Math.cos(t),r=Math.sin(t),o=this.p1.x+i*n-s*r,a=this.p1.y+i*r+s*n;return new Linea2(this.p1,{x:o,y:a})}rotatedonp2(e){const t=e*Math.PI/180,i=this.p1.x-this.p2.x,s=this.p1.y-this.p2.y,n=Math.cos(t),r=Math.sin(t),o=this.p2.x+i*n-s*r,a=this.p2.y+i*r+s*n;return new Linea2(this.p2,{x:o,y:a})}ruotata(e=Math.PI/2,t=0,i=!1){const{p1:s,p2:n,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(s,new Punto2(s.x+o,s.y+a)):new Linea2(n,new Punto2(n.x+o,n.y+a))}{let s=new Punto2(i);const n=r.x*Math.cos(e)-r.y*Math.sin(e),o=r.x*Math.sin(e)+r.y*Math.cos(e);new Punto2(n,o);const a=new Linea2(s,new Punto2(s.x+n,s.y+o)),A=this.interseca(a);if(!A)return;const l=new Punto2(A.x+n*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:s,p2:n}=e,r=(i.x-t.x)*(n.y-s.y)-(i.y-t.y)*(n.x-s.x);if(Math.abs(r)<Ye)return null;const o=((s.x-t.x)*(n.y-s.y)-(s.y-t.y)*(n.x-s.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:s}=this,n=s.x-i.x,r=s.y-i.y,o=e.x-i.x,a=e.y-i.y;if(Math.abs(n*a-r*o)>t)return!1;const A=o*n+a*r;if(A<-t)return!1;return!(A>n*n+r*r+t)}distanzaPunto(e){const t=this.proiezione(e);if(!t)return 1e9;const i=e.x-t.x,s=e.y-t.y;return Math.hypot(i,s)}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,s=Math.hypot(t,i);if(!s)return 0;const n=1/s,proj=e=>(e.x*t+e.y*i)*n,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:s}=this;let{p1:n,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,n)>distance2(t,r)&&([n,r]=[r,n]);const o=getangle(t,i);function toDeg(e){return Math.round(18e4*e/Math.PI)/1e3}const a=toDeg(wrapToPi(getangle(t,n)-o)),A=toDeg(wrapToPi(getangle(i,r)-o)),l=Math.round(100*this.len)/100,c=n.x-t.x,h=n.y-t.y,p=Math.round(100*Math.abs(c*s.x+h*s.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),s=new Punto2(this.p2.x+t.x*e,this.p2.y+t.y*e);return new Linea2(i,s)}angolo(e){const{dx:t,dy:i}=this;let s;if(e){const{dx:n,dy:r}=e,o=Math.atan2(i,t);s=Math.atan2(r,n)-o}else s=Math.atan2(i,t);return s>Math.PI?s-=2*Math.PI:s<-Math.PI&&(s+=2*Math.PI),s}ortopt(e){let{p1:t,dx:i,dy:s}=this;const n=Math.hypot(i,s);if(n<Ye)return;const r=-s/n,o=i/n;return{x:t.x+r*e,y:t.y+o*e}}offsetline(e){let{p1:t,p2:i,dx:s,dy:n}=this;const r=Math.hypot(s,n);if(r<Ye)return;const o=-n/r,a=s/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,s=e.p1.x-t.x,n=e.p1.y-t.y,r=Math.abs(s*i.x+n*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,s=Ye){const n=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);return!(Math.abs(n)>s)&&(Math.min(t.x,i.x)-s<=e.x&&e.x<=Math.max(t.x,i.x)+s&&Math.min(t.y,i.y)-s<=e.y&&e.y<=Math.max(t.y,i.y)+s)}const{p1:s,p2:n}=this,{p1:r,p2:o}=e;return isPointBetween(r,s,n)||isPointBetween(o,s,n)||isPointBetween(s,r,o)||isPointBetween(n,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),s=Math.sin(t);function rotate(e){return new Punto2(e.x*i-e.y*s,e.x*s+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 s,n,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?(s=a-A+2,n=A+c-a+2,s<n?(r=A,o=a+1):(r=a,o=A+c+1)):(s=A-a+2,n=a+c-A+2,s<n?(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,s,n,r=(t.stack||"").match(/user-script\.js:(\d+):(\d+)/);if(r||(r=(t.toString()||"").match(/user-script\.js:(\d+):(\d+)/)),r&&([,i,s]=r.map(Number),i-=2),(!i||!s)&&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,s=e.loc.column+1)}}return n=i&&s?`ERRORE: ${t.message}\n`+function extractContext(e,t,i,s=1){const n=e.split(/\r?\n/),r=t-1,o=Math.max(0,r-s),a=Math.min(n.length,r+s+1);return n.slice(o,a).map(((e,s)=>o+s+1===t?e+"\n"+" ".repeat(i-1)+"^":e)).join("\n")}(e,i,s):t.message,n}function seedarray(e,t){if(e&&e.length){let i=[];for(let t=0;t<e.length;t++){let s=e[t];if(s.p)for(let e=0;e<s.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(),s="\0";t=i.map((t=>`${t}${s}${String(e[t])}`)).join(s)}let i=2166136261,s=2218511855;for(let e=0;e<t.length;e++){const n=t.charCodeAt(e);i^=n,i+=i<<5^2779096485,s^=i,s=((s<<3)+n^2134516169)>>>0}return i>>>=0,i.toString(16)+s.toString(16)}function clean(e,t=!1){return t?(e||"").trim().toLowerCase():(e||"").trim()}function getcouple(e,t="=",i=!0){const s=(e=e||"").indexOf(t);return s>=0?{v:clean(e.substring(0,s),i),o:e.substring(s+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 s=[];for(let i=e;i<=t;i++)s.push(i+"");return s}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const s=[];let n="",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)n+=i;else{const e=n.trim();s.push(e),n=""}}const a=n.trim();return a&&s.push(a),s.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 s=Math.pow(10,t);return Math.round(i*s)/s||0};function muClComments(e,t){const i=(s=e,s.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||""))).split(/\r?\n/);var s;const n=[];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 n.push(t)}return n}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[s,n]of Object.entries(e))"function"==typeof n||t&&t.includes(s)||(i[s]=getOggetto(n,t));return i}return e}function getSqDist(e,t){let i=e.x-t.x,s=e.y-t.y;return i*i+s*s}function getSqSegDist(e,t,i){let s=t.x,n=t.y,r=i.x-s,o=i.y-n;if(0!==r||0!==o){let t=((e.x-s)*r+(e.y-n)*o)/(r*r+o*o);t>1?(s=i.x,n=i.y):t>0&&(s+=r*t,n+=o*t)}return r=e.x-s,o=e.y-n,r*r+o*o}function simplifyDPStep(e,t,i,s,n){let r,o=s;for(let s=t+1;s<i;s++){let n=getSqSegDist(e[s],e[t],e[i]);n>o&&(r=s,o=n)}o>s&&(r-t>1&&simplifyDPStep(e,t,r,s,n),n.push(e[r]),i-r>1&&simplifyDPStep(e,r,i,s,n))}function simplifyDouglasPeucker(e,t){let i=e.length-1,s=[e[0]];return simplifyDPStep(e,0,i,t,s),s.push(e[i]),s}function simplify(e,t,i){if(e.length<=2)return e;let s=void 0!==t?t*t:1;return e=i?e:function simplifyRadialDist(e,t){let i,s=e[0],n=[s];for(let r=1,o=e.length;r<o;r++)i=e[r],getSqDist(i,s)>t&&(n.push(i),s=i);return s!==i&&n.push(i),n}(e,s),e=simplifyDouglasPeucker(e,s)}function mapvertices(e,t){const dist2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;let i=e.length,s=t.length;if(i<2||s<2)return[];let n=[[0,0]];if(i===s){for(let e=1;e<i;e++)n.push([e,e]);return n}if(i>s)for(let r=1,o=0;r<i-1;r++){if(o+1<s){const i=e[r],s=dist2(i,t[o]);dist2(i,t[o+1])<=s&&o++}n.push([r,o])}else for(let r=1,o=0;r<s-1;r++){if(o+1<i){const i=t[r],s=dist2(i,e[o]);dist2(i,e[o+1])<=s&&o++}n.push([o,r])}return n.push([i-1,s-1]),n}function dxfbulge(e,t,i,s=0){const n=[];if(!i||Math.abs(i)<1e-10||0===s)return n;const r=4*Math.atan(i);if(r<0)return dxfbulge(t,e,-i,s).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<=s;e++){const t=I+e/(s+1)*r,i=f+l*Math.cos(t),o=m+l*Math.sin(t);n.push({x:i,y:o})}return n}function raccordabezier(e,t,i,s,n=10){const r=function getIntersection(e,t,i,s){const n=(e.x-t.x)*(i.y-s.y)-(e.y-t.y)*(i.x-s.x);return 0===n?null:{x:((e.x*t.y-e.y*t.x)*(i.x-s.x)-(e.x-t.x)*(i.x*s.y-i.y*s.x))/n,y:((e.x*t.y-e.y*t.x)*(i.y-s.y)-(e.y-t.y)*(i.x*s.y-i.y*s.x))/n}}(e,t,i,s);if(!r)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const o=r;if(0===n)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const a=[];for(let e=0;e<=n;e++){const s=e/n,r=1-s,A=r*r*t.x+2*r*s*o.x+s*s*i.x,l=r*r*t.y+2*r*s*o.y+s*s*i.y;a.push({x:A,y:l})}return a}function raccordabezier3(e,t,i,s,n=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(s>l||s>c)return[e,t,i];s!=l&&s!=c||(s-=.01);const h=(l-s)/l,p=s/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,n)}function normal2(e,t){const i=t.x-e.x;let s=-(t.y-e.y),n=i;const r=Math.sqrt(s*s+n*n);return 0===r?{nx:0,ny:0}:{nx:s/r,ny:n/r}}function angle3point(e,t,i){const s=t.x-e.x,n=t.y-e.y,r=i.x-t.x,o=i.y-t.y,a=s*r+n*o,A=s*o-n*r,l=Math.sqrt(s**2+n**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,s=Math.sqrt(e.x*e.x+e.y*e.y),n=Math.sqrt(t.x*t.x+t.y*t.y);if(0===s||0===n)return 0;let r=i/(s*n);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=[],s=e.length;for(let t=0;t<s;t++){const n=e[t],r=e[(t+1)%s];i.push({x:n.x,y:n.y}),r.x,n.x,r.y,n.y}const n=i[0],r=i[i.length-1];return n.x,r.x,n.y,r.y,i}function infocircle(e,t,i,s,n,r){let o,a,A;"object"==typeof e?(o=e,a=t,A=i):(o=new Punto2(e,t),a=new Punto2(i,s),A=new Punto2(n,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,s,n){const r=n.x-s.x,o=n.y-s.y,a=s.x-e,A=s.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=s.x+u*r,f=s.y+u*o,m=s.x+g*r,I=s.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 s=0;s<i;s++){const n=e[s],r=e[(s+1)%i];t+=n.x*r.y-r.x*n.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 s of e)s.x+=t,s.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 s=e[i];if("point"===s.type)t.push(s.point);else if("command"===s.type)switch(s.cmd){case"x":{const n=t[t.length-1],r="point"===e[i+1]?.type?e[i+1].point:t[0],o=parseFloat(s.params[0])||5;{const e=1;let i=r.x-n.x,s=r.y-n.y,a=Math.hypot(i,s);a>1&&t.push(...dxfbulge(n,r,o,Math.floor((a-e)/(e+2))+1))}break}case"b":{if(t.length<2)continue;const n=parseInt(s.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,n);t.push(...l),i+=1;break}case"r":{if(t.length<1)continue;const n=parseFloat(s.params[0])||0;if(n>0){const r=parseInt(s.params[1])||Math.min(n,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,n,r);t.push(...l),i+=1}break}case"c":{let n,r;if(s.params[0].includes("/")){let e=s.params[0].split("/");n=parseFloat(e[0])||50,r=parseFloat(e[1])||n||50}else n=parseFloat(s.params[0])||50,r=n;let o=(parseFloat(s.params[2])||0)*Ue,a=(parseFloat(s.params[3])||0)*Ue;const A=parseInt(s.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,s;if(o||a){let t=a-o;i=n*Math.cos(e/A*t+o),s=r*Math.sin(e/A*t+o)}else i=n*Math.cos(e/A*Math.PI*2+Math.PI),s=r*Math.sin(e/A*Math.PI*2+Math.PI);t.push(new Punto2(l.x+i,l.y+s))}i+=1;break}case"a":{let n,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(s.params[0])n=clamp(parseInt(s.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);n=Math.round(e*Math.sqrt(t/(e+.1))*10),n=clamp(n,1,24),n=1}else o=a,n=0;const A=arcfrom3point(n,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 s=0;for(;s<i.length;){const e=i[s];/^[brcax]/.test(e)?(t.push({type:"command",cmd:e[0],params:e.slice(1).split(":")}),s++):s<i.length-1&&/^-?\d+(\.\d+)?$/.test(i[s])&&/^-?\d+(\.\d+)?$/.test(i[s+1])?(t.push({type:"point",point:new Punto2(parseFloat(i[s]),parseFloat(i[s+1]))}),s+=2):s++}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)}),s=!1;if(4==e.length){const n=.001;function findpunto(t,i){let s=e.find((e=>Math.abs(e.x-t)<n&&Math.abs(e.y-i)<n));return!!s}findpunto(t.x,t.y)&&findpunto(t.x,i.y)&&findpunto(i.x,t.y)&&findpunto(i.x,i.y)&&(s=!0)}return{p1:t,p2:i,isrect:s,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 s=i.x-t.x,n=i.y-t.y,r=180*Math.atan2(n,s)/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,s=0,n=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||(s=a.x,n=a.y),o=o.map((e=>new Punto2(e.x-s,e.y-n))),{shape:getshape().frompt(o),origine:new Punto2(s,n),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=[],s=e.length;if(s<3)return i;for(let n=0;n<s;n++){const r=e[(n-1+s)%s],o=e[n],a=e[(n+1)%s],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:n,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 s=(t+1)%e.length;const n=e[t].x-e[s].x,r=e[t].y-e[s].y;i+=Math.sqrt(n*n+r*r)}return t.lung=i,t},get area(){return Math.abs(e.reduce(((t,i,s)=>{const n=e[(s+1)%e.length];return t+(i.x*n.y-n.x*i.y)}),0)/2)},pointslink(t){let i=mapvertices(e,t.pt),s=[];for(let e of i)s[e[0]]=t.pt[e[1]];return s},alignline(t,i){return e=function stretchShapeToLine(e,t,i){if(!e?.length||!t||!i)return[];const s=e[0],n=e[e.length-1],r=n.x-s.x,o=n.y-s.y,a=Math.atan2(o,r);let A=e.map((e=>({x:e.x-s.x,y:e.y-s.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,s=Math.cos(i),n=Math.sin(i);for(let t of e){const e=t.x*s-t.y*n,i=t.x*n+t.y*s;t.x=e,t.y=i}return this},selezionaprimo:selezionaprimo,segment(t,i=!1){let s=e.length;return t<0&&(t+=s),new Linea2(e[t%s],e[(t+(i?-1:1))%s])},lineoffset(t,i,s){if((t=(t||0)%e.length)!=(i=(i||0)%e.length)){let n=new Linea2(e[t],e[i]);if(n){return n=n.offsetline(-s),this.intersectline(n)}}},orientasplitter(){-1!=orientation()&&e.reverse();let t=e.length;for(let i=0;i<t;i++){let s=new Linea2(e[(t+i-1)%t],e[i]);if(Math.abs(Math.abs(s.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 s=e.length;function clampIndex(e){return(e+s)%s}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 n=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==s?{x:e[1].x+t,y:e[1].y+i}:e[2]}else if(t===s-1){const t=e[s-1].x-e[s-2].x,i=e[s-1].y-e[s-2].y;r=e[s-2],o={x:e[s-1].x+t,y:e[s-1].y+i},a={x:o.x+t,y:o.y+i}}else r=e[t-1],o=e[t+1],a=t+2<s?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),s=clampIndex(t+1),n=clampIndex(t+2);r=e[i],o=e[s],a=e[n]}const A=angle(n,o),l=angle(r,n),c=angle(o,a);return{x:n.x,y:n.y,l:function length(e,t){const i=t.x-e.x,s=t.y-e.y;return Math.sqrt(i*i+s*s)}(n,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:s,y:n,bulge:r}=t[e];if(i.push({x:s,y:n}),r){const o=1;let a={x:s,y:n},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}))),s=[];s.push(i[0]);let n=i[0].y,r=1e-4;for(let e=1;e<i.length;e++)if(i[e].y>n+r||e==i.length-1)s.push(i[e]),n=i[e].y;else{const t=n+r;s.push({x:i[e].x,y:t}),n=t}return{sh:getshape().frompt(s),...t}},offsetshape(e){let t=[],i=this;for(let s=0;s<i.npt-1;s++){let n=i.segment(s).offset(e);t.push(n)}let s=i.segment(0).perpendicolare(),n=i.segment(i.npt-2),r=n.perpendicolare(n.p2),o=[s.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 s=[],n=e.length;let r=0,o=e[0].y;for(let t=1;t<n;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&&s.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];s.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&&s.push(a.slice(h.i1,h.i2+1));return s.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 s=i.p1,n=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(s),o=findIndex(n);if(r<0||o<0)return null;if(r>o){let e=r;r=o,o=e,e=s,s=n,n=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(s),A.push(n),e=o);t?(l.push(n),l.push(s)):l.push(s);for(let e=r+1;e<=o;e++)l.push(this.pt[e]);return t||l.push(n),{sx:getshape().frompt(A),dx:getshape().frompt(l),linea:i}},splitoriz(e){return this.splitvert(e,!1)},splitshape(e,t=!0){const i=100,s=t?{x:e.x,y:e.y-i}:{x:e.x-i,y:e.y},n=t?{x:e.x,y:e.y+i}:{x:e.x+i,y:e.y},r=this.intersectline(new Linea2(s,n));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,s)=>{const n=[];for(let i=e;i!==t;i=(i+1)%c)n.push(this.pt[(i+1)%c]);return n},h=getshape().frompt(loop(A,l));return{sx:getshape().frompt(loop(l,A)),dx:h,linea:r}},xfromy(e,t=0,i=!0){const s=[],n=this.pt.length;for(let t=0;t<n-1;t++){const n=this.pt[t],r=this.pt[t+1];if(n.y<=e&&r.y>=e||r.y<=e&&n.y>=e){const t=r.y-n.y,i=t?(e-n.y)/t:0,o=n.x+i*(r.x-n.x);s.push(o)}else n.y===e&&r.y===e&&s.push(i?Math.max(n.x,r.x):Math.min(n.x,r.x))}return s.length?i?Math.max(...s):Math.min(...s):t},yfromx(e,t=0,i=!0){const s=[],n=this.pt.length;for(let t=0;t<n-1;t++){const n=this.pt[t],r=this.pt[t+1];if(n.x<=e&&r.x>=e||r.x<=e&&n.x>=e){const t=r.x-n.x,i=t?(e-n.x)/t:0,o=n.y+i*(r.y-n.y);s.push(o)}else n.x===e&&r.x===e&&s.push(i?Math.max(n.y,r.y):Math.min(n.y,r.y))}return s.length?i?Math.max(...s):Math.min(...s):t},forcevalues(t,i=!0,s=1e-6){const n=[...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?n.filter((e=>e>l+s&&e<c-s)):n.filter((e=>e<l-s&&e>c+s)).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,s=0,n=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}`),(s||n)&&move(s,n),this},fromrect(t,i,s,n,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 s=e.length,n=new Linea2(t,i);const r=[];for(let t=0;t<e.length;t++){let i=new Linea2(e[t],e[(t+1)%s]),o=i.interseca(n);o&&i.onsegment(o)&&r.push(o)}if(r.length<2)return null;const{dx:o,dy:a}=n;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),s=e.map((e=>`${pstr(e.x)};${pstr(e.y)};`)).join("");return s&&s.length?s.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,s=2,n=!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,s);e=[...e,...r],n&&(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,s=t.y,n=!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>s!=l>s&&i<(A-o)*(s-a)/(l-a)+o&&(n=!n)}return n}(t),azzera(){return e=[],this},truncatebefore:function truncatebefore(t){let i=new Linea2(e[0],e[1]),s=t.interseca(i);if(s){let t=e[0],i=e[1],n=i.x-t.x,r=i.y-t.y,o=n*n+r*r;if(o){if(((s.x-t.x)*n+(s.y-t.y)*r)/o<=1)return e[0]=s,this}}for(let i=1;i<e.length-1;i++){let s=new Linea2(e[i],e[i+1]),n=t.interseca(s);if(n&&s.onsegment(n))return e=e.slice(i),e[0]=n,this}return this},truncateafter:function truncateafter(t){let i=e.length,s=new Linea2(e[i-2],e[i-1]),n=t.interseca(s);if(n){let t=e[i-2],s=e[i-1],r=s.x-t.x,o=s.y-t.y,a=r*r+o*o;if(a){if(((n.x-t.x)*r+(n.y-t.y)*o)/a>=0)return e[i-1]=n,this}}for(let s=i-3;s>=0;s--){let i=new Linea2(e[s],e[s+1]),n=t.interseca(i);if(n&&i.onsegment(n))return e=e.slice(0,s+1),e.push(n),this}return this},removeduplicate(t=.005){return e=removeduplicate(e,t),this},to3d(t,i=0,s=0,n=0,r=!1,o=null,a=!1){let A=function to3dcoor(e,t){let{currentU:i=0,c:s=0,a:n=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=n*p.x+r*p.y+s;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:s,b:n,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 s=this.getboundbox(),n=s.p2.x-s.p1.x,r=s.p2.y-s.p1.y,o=i.x-t.x,a=i.y-t.y,A=Math.min(o/(n||1),a/(r||1));for(let i of e)i.x=(i.x-s.p1.x)*A,i.y=(i.y-s.p1.y)*A,i.x+=t.x,i.y+=t.y;return this}}}function arcfrom3point(e,t,i,s){if(e<=0)return[t,s];if(1===e)return[t,i,s];const n=function findCircleCenter(e,t,i){const s=t.x*t.x+t.y*t.y,n=(e.x*e.x+e.y*e.y-s)/2,r=(s-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((n*(t.y-i.y)-r*(e.y-t.y))/o,((e.x-t.x)*r-(t.x-i.x)*n)/o)}(t,i,s);if(!n){const i=[];for(let n=0;n<=e;n++){const r=n/e;i.push(new Punto2(t.x+(s.x-t.x)*r,t.y+(s.y-t.y)*r))}return i}let r=Math.atan2(t.y-n.y,t.x-n.x);Math.atan2(i.y-n.y,i.x-n.x);let o=Math.atan2(s.y-n.y,s.x-n.x);const a=(i.x-t.x)*(s.y-t.y)-(i.y-t.y)*(s.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-n.x,t.y-n.y),l=(o-r)/e,c=[];for(let t=0;t<=e;t++){const e=r+l*t;c.push(new Punto2(n.x+A*Math.cos(e),n.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)s="chrome",e="Netscape";else{var s=navigator.userAgent.toString().toLowerCase();e=navigator.appName}var n,r={};function BigInteger(e,i,s){t.biginteger_used=1,null!=e&&("number"==typeof e&&void 0===i?this.fromInt(e):"number"==typeof e?this.fromNumber(e,i,s):null==i&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,i))}function nbi(){return new BigInteger(null,void 0,void 0)}-1!=s.indexOf("chrome")&&-1==s.indexOf("chromium")?r.chrome=1:r.chrome=0,-1!=s.indexOf("chromium")?r.chromium=1:r.chromium=0,-1!=s.indexOf("safari")&&-1==s.indexOf("chrome")&&-1==s.indexOf("chromium")?r.safari=1:r.safari=0,-1!=s.indexOf("firefox")?r.firefox=1:r.firefox=0,-1!=s.indexOf("firefox/17")?r.firefox17=1:r.firefox17=0,-1!=s.indexOf("firefox/15")?r.firefox15=1:r.firefox15=0,-1!=s.indexOf("firefox/3")?r.firefox3=1:r.firefox3=0,-1!=s.indexOf("opera")?r.opera=1:r.opera=0,-1!=s.indexOf("msie 10")?r.msie10=1:r.msie10=0,-1!=s.indexOf("msie 9")?r.msie9=1:r.msie9=0,-1!=s.indexOf("msie 8")?r.msie8=1:r.msie8=0,-1!=s.indexOf("msie 7")?r.msie7=1:r.msie7=0,-1!=s.indexOf("msie ")?r.msie=1:r.msie=0,t.biginteger_used=null,"Microsoft Internet Explorer"==e?(BigInteger.prototype.am=function am2(e,t,i,s,n,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;n=((A=o*A+((32767&c)<<15)+i[s]+(1073741823&n))>>>30)+(c>>>15)+a*l+(n>>>30),i[s++]=1073741823&A}return n},n=30):"Netscape"!=e?(BigInteger.prototype.am=function am1(e,t,i,s,n,r){for(;--r>=0;){var o=t*this[e++]+i[s]+n;n=Math.floor(o/67108864),i[s++]=67108863&o}return n},n=26):(BigInteger.prototype.am=function am3(e,t,i,s,n,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;n=((A=o*A+((16383&c)<<14)+i[s]+n)>>28)+(c>>14)+a*l,i[s++]=268435455&A}return n},n=28),BigInteger.prototype.DB=n,BigInteger.prototype.DM=(1<<n)-1,BigInteger.prototype.DV=1<<n,BigInteger.prototype.FV=Math.pow(2,52),BigInteger.prototype.F1=52-n,BigInteger.prototype.F2=2*n-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],s=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,s,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 s=e.length,n=!1,r=0;--s>=0;){var o=8==i?255&e[s]:intAt(e,s);o<0?"-"==e.charAt(s)&&(n=!0):(n=!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(),n&&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,s=e%this.DB,n=this.DB-s,r=(1<<n)-1,o=Math.floor(e/this.DB),a=this.s<<s&this.DM;for(i=this.t-1;i>=0;--i)t[i+o+1]=this[i]>>n|a,a=(this[i]&r)<<s;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 s=e%this.DB,n=this.DB-s,r=(1<<s)-1;t[0]=this[i]>>s;for(var o=i+1;o<this.t;++o)t[o-i-1]|=(this[o]&r)<<n,t[o-i]=this[o]>>s;s>0&&(t[this.t-i-1]|=(this.s&r)<<n),t.t=this.t-i,t.clamp()}},BigInteger.prototype.subTo=function bnpSubTo(e,t){for(var i=0,s=0,n=Math.min(e.t,this.t);i<n;)s+=this[i]-e[i],t[i++]=s&this.DM,s>>=this.DB;if(e.t<this.t){for(s-=e.s;i<this.t;)s+=this[i],t[i++]=s&this.DM,s>>=this.DB;s+=this.s}else{for(s+=this.s;i<e.t;)s-=e[i],t[i++]=s&this.DM,s>>=this.DB;s-=e.s}t.s=s<0?-1:0,s<-1?t[i++]=this.DV+s:s>0&&(t[i++]=s),t.t=i,t.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(e,t){var i=this.abs(),s=e.abs(),n=i.t;for(t.t=n+s.t;--n>=0;)t[n]=0;for(n=0;n<s.t;++n)t[n+i.t]=i.am(0,s[n],t,n,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 s=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,s,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 s=e.abs();if(!(s.t<=0)){var n=this.abs();if(n.t<s.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(s[s.t-1]);A>0?(s.lShiftTo(A,r),n.lShiftTo(A,i)):(s.copyTo(r),n.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(),s=nbi(),n=t.convert(this),r=nbits(e)-1;for(n.copyTo(i);--r>=0;)if(t.sqrTo(i,s),(e&1<<r)>0)t.mulTo(s,n,i);else{var o=i;i=s,s=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,s=(1<<t)-1,n=!1,r="",o=this.t,a=this.DB-o*this.DB%t;if(o-- >0)for(a<this.DB&&(i=this[o]>>a)>0&&(n=!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)&s,a<=0&&(a+=this.DB,--o)),i>0&&(n=!0),n&&(r+=int2char(i));return n?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),s=nbv(i),n=nbi(),r=nbi(),o="";for(this.divRemTo(s,n,r);n.signum()>0;)o=(i+r.intValue()).toString(e).substr(1)+o,n.divRemTo(s,n,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),s=Math.pow(t,i),n=!1,r=0,o=0,a=0;a<e.length;++a){var A=intAt(e,a);A<0?"-"==e.charAt(a)&&0==this.signum()&&(n=!0):(o=t*o+A,++r>=i&&(this.dMultiply(s),this.dAddOffset(o,0),r=0,o=0))}r>0&&(this.dMultiply(Math.pow(t,r)),this.dAddOffset(o,0)),n&&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 s=new Array,n=7&e;s.length=1+(e>>3),t.nextBytes(s),n>0?s[0]&=(1<<n)-1:s[0]=0,this.fromString(s,256)}},BigInteger.prototype.bitwiseTo=function bnpBitwiseTo(e,t,i){var s,n,r=Math.min(e.t,this.t);for(s=0;s<r;++s)i[s]=t(this[s],e[s]);if(e.t<this.t){for(n=e.s&this.DM,s=r;s<this.t;++s)i[s]=t(this[s],n);i.t=this.t}else{for(n=this.s&this.DM,s=r;s<e.t;++s)i[s]=t(n,e[s]);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,s=0,n=Math.min(e.t,this.t);i<n;)s+=this[i]+e[i],t[i++]=s&this.DM,s>>=this.DB;if(e.t<this.t){for(s+=e.s;i<this.t;)s+=this[i],t[i++]=s&this.DM,s>>=this.DB;s+=this.s}else{for(s+=this.s;i<e.t;)s+=e[i],t[i++]=s&this.DM,s>>=this.DB;s+=e.s}t.s=s<0?-1:0,s>0?t[i++]=s:s<-1&&(t[i++]=this.DV+s),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 s,n=Math.min(this.t+e.t,t);for(i.s=0,i.t=n;n>0;)i[--n]=0;for(s=i.t-this.t;n<s;++n)i[n+this.t]=this.am(0,e[n],i,n,0,this.t);for(s=Math.min(e.t,t);n<s;++n)this.am(0,e[n],i,n,0,t-n);i.clamp()},BigInteger.prototype.multiplyUpperTo=function bnpMultiplyUpperTo(e,t,i){--t;var s=i.t=this.t+e.t-t;for(i.s=0;--s>=0;)i[s]=0;for(s=Math.max(t-this.t,0);s<e.t;++s)i[this.t+s-t]=this.am(t-s,e[s],i,0,0,this.t+s-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 s=this.t-1;s>=0;--s)i=(t*i+this[s])%e;return i},BigInteger.prototype.millerRabin=function bnpMillerRabin(e){var t=this.subtract(BigInteger.ONE),i=t.getLowestSetBit();if(i<=0)return!1;var s=t.shiftRight(i);(e=e+1>>1)>l.length&&(e=l.length);for(var n=nbi(),r=0;r<e;++r){n.fromInt(l[Math.floor(Math.random()*l.length)]);var o=n.modPow(s,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,s=this.DB-e*this.DB%8,n=0;if(e-- >0)for(s<this.DB&&(i=this[e]>>s)!=(this.s&this.DM)>>s&&(t[n++]=i|this.s<<this.DB-s);e>=0;)s<8?(i=(this[e]&(1<<s)-1)<<8-s,i|=this[--e]>>(s+=this.DB-8)):(i=this[e]>>(s-=8)&255,s<=0&&(s+=this.DB,--e)),128&i&&(i|=-256),0==n&&(128&this.s)!=(128&i)&&++n,(n>0||i!=this.s)&&(t[n++]=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,s,n=e.bitLength(),r=nbv(1);if(n<=0)return r;i=n<18?1:n<48?3:n<144?4:n<768?5:6,s=n<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]=s.convert(this),i>1){var c=nbi();for(s.sqrTo(o[1],c);a<=l;)o[a]=nbi(),s.mulTo(c,o[a-2],o[a]),a+=2}var h,p,u=e.t-1,g=!0,d=nbi();for(n=nbits(e[u])-1;u>=0;){for(n>=A?h=e[u]>>n-A&l:(h=(e[u]&(1<<n+1)-1)<<A-n,u>0&&(h|=e[u-1]>>this.DB+n-A)),a=i;!(1&h);)h>>=1,--a;if((n-=a)<0&&(n+=this.DB,--u),g)o[h].copyTo(r),g=!1;else{for(;a>1;)s.sqrTo(r,d),s.sqrTo(d,r),a-=2;a>0?s.sqrTo(r,d):(p=r,r=d,d=p),s.mulTo(d,o[h],r)}for(;u>=0&&!(e[u]&1<<n);)s.sqrTo(r,d),p=r,r=d,d=p,--n<0&&(n=this.DB-1,--u)}return s.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(),s=this.clone(),n=nbv(1),r=nbv(0),o=nbv(0),a=nbv(1);0!=i.signum();){for(;i.isEven();)i.rShiftTo(1,i),t?(n.isEven()&&r.isEven()||(n.addTo(this,n),r.subTo(e,r)),n.rShiftTo(1,n)):r.isEven()||r.subTo(e,r),r.rShiftTo(1,r);for(;s.isEven();)s.rShiftTo(1,s),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(s)>=0?(i.subTo(s,i),t&&n.subTo(o,n),r.subTo(a,r)):(s.subTo(i,s),t&&o.subTo(n,o),a.subTo(r,a))}return 0!=s.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 s=t;t=i,i=s}var n=t.getLowestSetBit(),r=i.getLowestSetBit();if(r<0)return t;for(n<r&&(r=n),r>0&&(t.rShiftTo(r,t),i.rShiftTo(r,i));t.signum()>0;)(n=t.getLowestSetBit())>0&&t.rShiftTo(n,t),(n=i.getLowestSetBit())>0&&i.rShiftTo(n,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 s=l[t],n=t+1;n<l.length&&s<c;)s*=l[n++];for(s=i.modInt(s);t<n;)if(s%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 s=Object.getOwnPropertyNames(t.prototype),n=0;n<s.length;n++)void 0===Object.getOwnPropertyDescriptor(e.prototype,s[n])&&Object.defineProperty(e.prototype,s[n],Object.getOwnPropertyDescriptor(t.prototype,s[n]));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 s=e[0];this.X=t.Clipper.Round(s.X),this.Y=t.Clipper.Round(s.Y),this.Z=0}else void 0===(n=e[0]).Z&&(n.Z=0),this.X=n.X,this.Y=n.Y,this.Z=n.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)s=e[0],this.X=t.Clipper.Round(s.X),this.Y=t.Clipper.Round(s.Y);else{var n=e[0];this.X=n.X,this.Y=n.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,s){this.X=e,this.Y=i,t.use_xyz&&(this.Z=void 0===s?0:s)},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,s){this.left=e,this.top=t,this.right=i,this.bottom=s},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 s=i;do{if(t.IntPoint.op_Equality(s.Pt,e))return!0;s=s.Next}while(s!==i);return!1},t.ClipperBase.prototype.PointOnLineSegment=function(e,t,i,s){return s?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 s=t;;){if(this.PointOnLineSegment(e,s.Pt,s.Next.Pt,i))return!0;if((s=s.Next)===t)break}return!1},t.ClipperBase.prototype.SlopesEqual=t.ClipperBase.SlopesEqual=function(){var e,i,s,n,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?(s=a[0],n=a[1],r=a[2],a[3]?h.op_Equality(h.Int128Mul(s.Y-n.Y,n.X-r.X),h.Int128Mul(s.X-n.X,n.Y-r.Y)):t.Cast_Int64((s.Y-n.Y)*(n.X-r.X))-t.Cast_Int64((s.X-n.X)*(n.Y-r.Y))==0):(s=a[0],n=a[1],r=a[2],o=a[3],a[4]?h.op_Equality(h.Int128Mul(s.Y-n.Y,r.X-o.X),h.Int128Mul(s.X-n.X,r.Y-o.Y)):t.Cast_Int64((s.Y-n.Y)*(r.X-o.X))-t.Cast_Int64((s.X-n.X)*(r.Y-o.Y))==0)},t.ClipperBase.SlopesEqual3=function(e,i,s){return s?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,s,n){return n?h.op_Equality(h.Int128Mul(e.Y-i.Y,i.X-s.X),h.Int128Mul(e.X-i.X,i.Y-s.Y)):t.Cast_Int64((e.Y-i.Y)*(i.X-s.X))-t.Cast_Int64((e.X-i.X)*(i.Y-s.Y))==0},t.ClipperBase.SlopesEqual5=function(e,i,s,n,r){return r?h.op_Equality(h.Int128Mul(e.Y-i.Y,s.X-n.X),h.Int128Mul(e.X-i.X,s.Y-n.Y)):t.Cast_Int64((e.Y-i.Y)*(s.X-n.X))-t.Cast_Int64((e.X-i.X)*(s.Y-n.Y))==0},t.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var e=0,i=this.m_edges.length;e<i;++e){for(var s=0,n=this.m_edges[e].length;s<n;++s)this.m_edges[e][s]=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,s,n){e.Next=i,e.Prev=s,e.Curr.X=n.X,e.Curr.Y=n.Y,t.use_xyz&&(e.Curr.Z=n.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 s,n,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&&((s=i?e.Prev:e.Next).Dx===t.ClipperBase.horizontal?s.Bot.X!==e.Bot.X&&s.Top.X!==e.Bot.X&&this.ReverseHorizontal(e):s.Bot.X!==e.Bot.X&&this.ReverseHorizontal(e)),s=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(n=r;n.Prev.Dx===t.ClipperBase.horizontal;)n=n.Prev;n.Prev.Top.X>r.Next.Top.X&&(r=n.Prev)}for(;e!==r;)e.NextInLML=e.Next,e.Dx===t.ClipperBase.horizontal&&e!==s&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),e=e.Next;e.Dx===t.ClipperBase.horizontal&&e!==s&&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(n=r;n.Next.Dx===t.ClipperBase.horizontal;)n=n.Next;(n.Next.Top.X===r.Prev.Top.X||n.Next.Top.X>r.Prev.Top.X)&&(r=n.Next)}for(;e!==r;)e.NextInLML=e.Prev,e.Dx===t.ClipperBase.horizontal&&e!==s&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),e=e.Prev;e.Dx===t.ClipperBase.horizontal&&e!==s&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),r=r.Prev}return r},t.ClipperBase.prototype.AddPath=function(e,i,s){t.use_lines?s||i!==t.PolyType.ptClip||t.Error("AddPath: Open paths must be subject."):s||t.Error("AddPath: Open paths have been disabled.");var n=e.length-1;if(s)for(;n>0&&t.IntPoint.op_Equality(e[n],e[0]);)--n;for(;n>0&&t.IntPoint.op_Equality(e[n],e[n-1]);)--n;if(s&&n<2||!s&&n<1)return!1;for(var r=new Array,o=0;o<=n;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[n],A),this.m_UseFullRange=A.Value,this.InitEdge(r[0],r[1],r[n],e[0]),this.InitEdge(r[n],r[0],r[n-1],e[n]),o=n-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||!s&&h.Next===c){if(h.Prev===h.Next)break;if(!s||!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||!s&&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(!s&&h===h.Next||s&&h.Prev===h.Next)return!1;s||(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(s)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,s?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 s=!1,n=0,r=e.length;n<r;++n)this.AddPath(e[n],t,i)&&(s=!0);return s},t.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(e,i,s){return!(t.IntPoint.op_Equality(e,s)||t.IntPoint.op_Equality(e,i)||t.IntPoint.op_Equality(s,i))&&(e.X!==s.X?i.X>e.X==i.X<s.X:i.Y>e.Y==i.Y<s.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 s=this.m_Scanbeam;null!==s.Next&&e<=s.Next.Y;)s=s.Next;if(e===s.Y)return;var n=new t.Scanbeam;n.Y=e,n.Next=s.Next,s.Next=n}},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,s=e.NextInAEL;return e.NextInLML.OutIdx=e.OutIdx,null!==i?i.NextInAEL=e.NextInLML:this.m_ActiveEdges=e.NextInLML,null!==s&&(s.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=s,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 s=e.PrevInAEL;null!==s&&(s.NextInAEL=t),t.PrevInAEL=s,t.NextInAEL=e,e.PrevInAEL=t,e.NextInAEL=i}else if(t.NextInAEL===e){var n=e.NextInAEL;null!==n&&(n.PrevInAEL=t);var r=t.PrevInAEL;null!==r&&(r.NextInAEL=e),e.PrevInAEL=r,e.NextInAEL=t,t.PrevInAEL=e,t.NextInAEL=n}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 s=this.m_Maxima;null!==s.Next&&e>=s.Next.X;)s=s.Next;if(e===s.X)return;i.Next=s.Next,i.Prev=s,null!==s.Next&&(s.Next.Prev=i),s.Next=i}},t.Clipper.prototype.Execute=function(){var e=arguments,i=e.length,s=e[1]instanceof t.PolyTree;if(4===i&&!s){var n=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=n,this.m_UsingPolyTree=!1;try{(l=this.ExecuteInternal())&&this.BuildResult(r)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}if(4===i&&s){n=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=n,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||s?2===i&&s?(n=e[0],A=e[1],this.Execute(n,A,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd)):void 0:(n=e[0],r=e[1],this.Execute(n,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,s={},n={};if(!this.PopScanbeam(s))return!1;for(this.InsertLocalMinimaIntoAEL(s.v);this.PopScanbeam(n)||this.LocalMinimaPending();){if(this.ProcessHorizontals(),this.m_GhostJoins.length=0,!this.ProcessIntersections(n.v))return!1;this.ProcessEdgesAtTopOfScanbeam(n.v),s.v=n.v,this.InsertLocalMinimaIntoAEL(s.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,s){var n=new t.Join;n.OutPt1=e,n.OutPt2=i,n.OffPt.X=s.X,n.OffPt.Y=s.Y,t.use_xyz&&(n.OffPt.Z=s.Z),this.m_Joins.push(n)},t.Clipper.prototype.AddGhostJoin=function(e,i){var s=new t.Join;s.OutPt1=e,s.OffPt.X=i.X,s.OffPt.Y=i.Y,t.use_xyz&&(s.OffPt.Z=i.Z),this.m_GhostJoins.push(s)},t.Clipper.prototype.SetZ=function(e,i,s){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,s.Bot)?e.Z=s.Bot.Z:t.IntPoint.op_Equality(e,s.Top)?e.Z=s.Top.Z:this.ZFillFunction(i.Bot,i.Top,s.Bot,s.Top,e)}},t.Clipper.prototype.InsertLocalMinimaIntoAEL=function(e){for(var i,s,n={};this.PopLocalMinima(e,n);){i=n.v.LeftBound,s=n.v.RightBound;var r=null;if(null===i?(this.InsertEdgeIntoAEL(s,null),this.SetWindingCount(s),this.IsContributing(s)&&(r=this.AddOutPt(s,s.Bot))):null===s?(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(s,i),this.SetWindingCount(i),s.WindCnt=i.WindCnt,s.WindCnt2=i.WindCnt2,this.IsContributing(i)&&(r=this.AddLocalMinPoly(i,s,i.Bot)),this.InsertScanbeam(i.Top.Y)),null!==s&&(t.ClipperBase.IsHorizontal(s)?(null!==s.NextInLML&&this.InsertScanbeam(s.NextInLML.Top.Y),this.AddEdgeToSEL(s)):this.InsertScanbeam(s.Top.Y)),null!==i&&null!==s){if(null!==r&&t.ClipperBase.IsHorizontal(s)&&this.m_GhostJoins.length>0&&0!==s.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,s.Bot.X,s.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!==s){s.OutIdx>=0&&s.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(s.PrevInAEL.Curr,s.PrevInAEL.Top,s.Curr,s.Top,this.m_UseFullRange)&&0!==s.WindDelta&&0!==s.PrevInAEL.WindDelta&&(l=this.AddOutPt(s.PrevInAEL,s.Bot),this.AddJoin(r,l,s.Top));var c=i.NextInAEL;if(null!==c)for(;c!==s;)this.IntersectEdges(s,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,s;switch(e.PolyTyp===t.PolyType.ptSubject?(i=this.m_SubjFillType,s=this.m_ClipFillType):(i=this.m_ClipFillType,s=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(s){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(s){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(s){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(s){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(s){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 s=e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType:this.m_ClipFillType;0===e.WindDelta?e.WindCnt=s===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 n=!0,r=i.PrevInAEL;null!==r;)r.PolyTyp===i.PolyTyp&&0!==r.WindDelta&&(n=!n),r=r.PrevInAEL;e.WindCnt=n?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!==(s=e.PrevInSEL)&&(s.NextInSEL=t),t.PrevInSEL=s,t.NextInSEL=e,e.PrevInSEL=t,e.NextInSEL=i;else if(t.NextInSEL===e)null!==(i=e.NextInSEL)&&(i.PrevInSEL=t),null!==(s=t.PrevInSEL)&&(s.NextInSEL=e),e.PrevInSEL=s,e.NextInSEL=t,t.PrevInSEL=e,t.NextInSEL=i;else{var i=e.NextInSEL,s=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=s,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,s){var n,r,o;if(t.ClipperBase.IsHorizontal(i)||e.Dx>i.Dx?(n=this.AddOutPt(e,s),i.OutIdx=e.OutIdx,e.Side=t.EdgeSide.esLeft,i.Side=t.EdgeSide.esRight,o=(r=e).PrevInAEL===i?i.PrevInAEL:r.PrevInAEL):(n=this.AddOutPt(i,s),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<s.Y&&r.Top.Y<s.Y){var a=t.Clipper.TopX(o,s.Y),A=t.Clipper.TopX(r,s.Y);if(a===A&&0!==r.WindDelta&&0!==o.WindDelta&&t.ClipperBase.SlopesEqual5(new t.IntPoint2(a,s.Y),o.Top,new t.IntPoint2(A,s.Y),r.Top,this.m_UseFullRange)){var l=this.AddOutPt(o,s);this.AddJoin(n,l,r.Top)}}return n},t.Clipper.prototype.AddOutPt=function(e,i){if(e.OutIdx<0){(n=this.CreateOutRec()).IsOpen=0===e.WindDelta;var s=new t.OutPt;return n.Pts=s,s.Idx=n.Idx,s.Pt.X=i.X,s.Pt.Y=i.Y,t.use_xyz&&(s.Pt.Z=i.Z),s.Next=s,s.Prev=s,n.IsOpen||this.SetHoleState(e,n),e.OutIdx=n.Idx,s}var n,r=(n=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:((s=new t.OutPt).Idx=n.Idx,s.Pt.X=i.X,s.Pt.Y=i.Y,t.use_xyz&&(s.Pt.Z=i.Z),s.Next=r,s.Prev=r.Prev,s.Prev.Next=s,r.Prev=s,o&&(n.Pts=s),s)},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 s=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=s.X,i.Value.Y=s.Y,t.use_xyz&&(i.Value.Z=s.Z)},t.Clipper.prototype.HorzSegmentsOverlap=function(e,t,i,s){var n;return e>t&&(n=e,e=t,t=n),i>s&&(n=i,i=s,s=n),e<s&&i<t},t.Clipper.prototype.SetHoleState=function(e,t){for(var i=e.PrevInAEL,s=null;null!==i;)i.OutIdx>=0&&0!==i.WindDelta&&(null===s?s=i:s.OutIdx===i.OutIdx&&(s=null)),i=i.PrevInAEL;null===s?(t.FirstLeft=null,t.IsHole=!1):(t.FirstLeft=this.m_PolyOuts[s.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 s=e.Prev;t.IntPoint.op_Equality(s.Pt,e.Pt)&&s!==e;)s=s.Prev;var n=Math.abs(this.GetDx(e.Pt,s.Pt));for(s=e.Next;t.IntPoint.op_Equality(s.Pt,e.Pt)&&s!==e;)s=s.Next;var r=Math.abs(this.GetDx(e.Pt,s.Pt));for(s=i.Prev;t.IntPoint.op_Equality(s.Pt,i.Pt)&&s!==i;)s=s.Prev;var o=Math.abs(this.GetDx(i.Pt,s.Pt));for(s=i.Next;t.IntPoint.op_Equality(s.Pt,i.Pt)&&s!==i;)s=s.Next;var a=Math.abs(this.GetDx(i.Pt,s.Pt));return Math.max(n,r)===Math.max(o,a)&&Math.min(n,r)===Math.min(o,a)?this.Area(e)>0:n>=o&&n>=a||r>=o&&r>=a},t.Clipper.prototype.GetBottomPt=function(e){for(var i=null,s=e.Next;s!==e;)s.Pt.Y>e.Pt.Y?(e=s,i=null):s.Pt.Y===e.Pt.Y&&s.Pt.X<=e.Pt.X&&(s.Pt.X<e.Pt.X?(i=null,e=s):s.Next!==e&&s.Prev!==e&&(i=s)),s=s.Next;if(null!==i)for(;i!==s;)for(this.FirstIsBottomPt(s,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,s=t.BottomPt;return i.Pt.Y>s.Pt.Y?e:i.Pt.Y<s.Pt.Y?t:i.Pt.X<s.Pt.X?e:i.Pt.X>s.Pt.X||i.Next===i?t:s.Next===s||this.FirstIsBottomPt(i,s)?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 s,n=this.m_PolyOuts[e.OutIdx],r=this.m_PolyOuts[i.OutIdx];s=this.OutRec1RightOfOutRec2(n,r)?r:this.OutRec1RightOfOutRec2(r,n)?n:this.GetLowermostRec(n,r);var o=n.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,n.Pts=l):(l.Next=o,o.Prev=l,A.Prev=a,a.Next=A,n.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),n.BottomPt=null,s===r&&(r.FirstLeft!==n&&(n.FirstLeft=r.FirstLeft),n.IsHole=r.IsHole),r.Pts=null,r.BottomPt=null,r.FirstLeft=n;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=n.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,s){var n=e.OutIdx>=0,r=i.OutIdx>=0;if(t.use_xyz&&this.SetZ(s,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(n&&r)0!==h&&1!==h||0!==p&&1!==p||e.PolyTyp!==i.PolyTyp&&this.m_ClipType!==t.ClipType.ctXor?this.AddLocalMaxPoly(e,i,s):(this.AddOutPt(e,s),this.AddOutPt(i,s),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(n)0!==p&&1!==p||(this.AddOutPt(e,s),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(r)0!==h&&1!==h||(this.AddOutPt(i,s),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,s);else if(1===h&&1===p)switch(this.m_ClipType){case t.ClipType.ctIntersection:u>0&&g>0&&this.AddLocalMinPoly(e,i,s);break;case t.ClipType.ctUnion:u<=0&&g<=0&&this.AddLocalMinPoly(e,i,s);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,s);break;case t.ClipType.ctXor:this.AddLocalMinPoly(e,i,s)}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,s),n&&(e.OutIdx=-1)):n&&(this.AddOutPt(i,s),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,s),r&&(i.OutIdx=-1)):(this.AddOutPt(e,s),n&&(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 s=i.Dir,n=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(s===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,s);null!==p;){if(null!==l)if(s===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(s===t.Direction.dLeftToRight&&p.Curr.X>r||s===t.Direction.dRightToLeft&&p.Curr.X<n)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&&(s===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(s===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,s);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:s,Left:n,Right:r},this.GetHorzDirection(e,i),s=i.Dir,n=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 s=!0;s&&null!==this.m_SortedEdges;){for(s=!1,i=this.m_SortedEdges;null!==i.NextInSEL;){var n=i.NextInSEL,r=new t.IntPoint0;if(i.Curr.X>n.Curr.X){this.IntersectPoint(i,n,r),r.Y<e&&(r=new t.IntPoint2(t.Clipper.TopX(i,e),e));var o=new t.IntersectNode;o.Edge1=i,o.Edge2=n,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,n),s=!0}else i=n}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 s=this.m_IntersectList[t];this.m_IntersectList[t]=this.m_IntersectList[i],this.m_IntersectList[i]=s}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,s){var n,r;if(s.X=0,s.Y=0,e.Dx===i.Dx)return s.Y=e.Curr.Y,void(s.X=t.Clipper.TopX(e,s.Y));if(0===e.Delta.X)s.X=e.Bot.X,t.ClipperBase.IsHorizontal(i)?s.Y=i.Bot.Y:(r=i.Bot.Y-i.Bot.X/i.Dx,s.Y=t.Clipper.Round(s.X/i.Dx+r));else if(0===i.Delta.X)s.X=i.Bot.X,t.ClipperBase.IsHorizontal(e)?s.Y=e.Bot.Y:(n=e.Bot.Y-e.Bot.X/e.Dx,s.Y=t.Clipper.Round(s.X/e.Dx+n));else{n=e.Bot.X-e.Bot.Y*e.Dx;var o=((r=i.Bot.X-i.Bot.Y*i.Dx)-n)/(e.Dx-i.Dx);s.Y=t.Clipper.Round(o),Math.abs(e.Dx)<Math.abs(i.Dx)?s.X=t.Clipper.Round(e.Dx*o+n):s.X=t.Clipper.Round(i.Dx*o+r)}if(s.Y<e.Top.Y||s.Y<i.Top.Y){if(e.Top.Y>i.Top.Y)return s.Y=e.Top.Y,s.X=t.Clipper.TopX(i,e.Top.Y),s.X<e.Top.X;s.Y=i.Top.Y,Math.abs(e.Dx)<Math.abs(i.Dx)?s.X=t.Clipper.TopX(e,s.Y):s.X=t.Clipper.TopX(i,s.Y)}s.Y>e.Curr.Y&&(s.Y=e.Curr.Y,Math.abs(e.Dx)>Math.abs(i.Dx)?s.X=t.Clipper.TopX(i,s.Y):s.X=t.Clipper.TopX(e,s.Y))},t.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=function(e){for(var i=this.m_ActiveEdges;null!==i;){var s=this.IsMaxima(i,e);if(s){var n=this.GetMaximaPairEx(i);s=null===n||!t.ClipperBase.IsHorizontal(n)}if(s){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 s=e.NextInAEL;null!==s&&s!==i;)this.IntersectEdges(e,s,e.Top),this.SwapPositionsInAEL(e,s),s=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,s=this.m_PolyOuts.length;i<s;i++){var n=this.m_PolyOuts[i];if(null!==n.Pts){var r=n.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,s=this.m_PolyOuts.length;i<s;i++){var n=this.m_PolyOuts[i],r=this.PointCount(n.Pts);if(!(n.IsOpen&&r<2||!n.IsOpen&&r<3)){this.FixHoleLinkage(n);var o=new t.PolyNode;e.m_AllPolys.push(o),n.PolyNode=o,o.m_polygon.length=r;for(var a=n.Pts.Prev,A=0;A<r;A++)o.m_polygon[A]=a.Pt,a=a.Prev}}for(i=0,s=this.m_PolyOuts.length;i<s;i++)null!==(n=this.m_PolyOuts[i]).PolyNode&&(n.IsOpen?(n.PolyNode.IsOpen=!0,e.AddChild(n.PolyNode)):null!==n.FirstLeft&&null!==n.FirstLeft.PolyNode?n.FirstLeft.PolyNode.AddChild(n.PolyNode):e.AddChild(n.PolyNode))},t.Clipper.prototype.FixupOutPolyline=function(e){for(var i=e.Pts,s=i.Prev;i!==s;)if(i=i.Next,t.IntPoint.op_Equality(i.Pt,i.Prev.Pt)){i===s&&(s=i.Prev);var n=i.Prev;n.Next=i.Next,i.Next.Prev=n,i=n}i===i.Prev&&(e.Pts=null)},t.Clipper.prototype.FixupOutPolygon=function(e){var i=null;e.BottomPt=null;for(var s=e.Pts,n=this.PreserveCollinear||this.StrictlySimple;;){if(s.Prev===s||s.Prev===s.Next)return void(e.Pts=null);if(t.IntPoint.op_Equality(s.Pt,s.Next.Pt)||t.IntPoint.op_Equality(s.Pt,s.Prev.Pt)||t.ClipperBase.SlopesEqual4(s.Prev.Pt,s.Pt,s.Next.Pt,this.m_UseFullRange)&&(!n||!this.Pt2IsBetweenPt1AndPt3(s.Prev.Pt,s.Pt,s.Next.Pt)))i=null,s.Prev.Next=s.Next,s.Next.Prev=s.Prev,s=s.Prev;else{if(s===i)break;null===i&&(i=s),s=s.Next}}e.Pts=s},t.Clipper.prototype.DupOutPt=function(e,i){var s=new t.OutPt;return s.Pt.X=e.Pt.X,s.Pt.Y=e.Pt.Y,t.use_xyz&&(s.Pt.Z=e.Pt.Z),s.Idx=e.Idx,i?(s.Next=e.Next,s.Prev=e,e.Next.Prev=s,e.Next=s):(s.Prev=e.Prev,s.Next=e,e.Prev.Next=s,e.Prev=s),s},t.Clipper.prototype.GetOverlap=function(e,t,i,s,n){return e<t?i<s?(n.Left=Math.max(e,i),n.Right=Math.min(t,s)):(n.Left=Math.max(e,s),n.Right=Math.min(t,i)):i<s?(n.Left=Math.max(t,i),n.Right=Math.min(e,s)):(n.Left=Math.max(t,s),n.Right=Math.min(e,i)),n.Left<n.Right},t.Clipper.prototype.JoinHorz=function(e,i,s,n,r,o){var a=e.Pt.X>i.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight,A=s.Pt.X>n.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(;s.Next.Pt.X<=r.X&&s.Next.Pt.X>=s.Pt.X&&s.Next.Pt.Y===r.Y;)s=s.Next;o&&s.Pt.X!==r.X&&(s=s.Next),n=this.DupOutPt(s,!o),t.IntPoint.op_Inequality(n.Pt,r)&&((s=n).Pt.X=r.X,s.Pt.Y=r.Y,t.use_xyz&&(s.Pt.Z=r.Z),n=this.DupOutPt(s,!o))}else{for(;s.Next.Pt.X>=r.X&&s.Next.Pt.X<=s.Pt.X&&s.Next.Pt.Y===r.Y;)s=s.Next;o||s.Pt.X===r.X||(s=s.Next),n=this.DupOutPt(s,o),t.IntPoint.op_Inequality(n.Pt,r)&&((s=n).Pt.X=r.X,s.Pt.Y=r.Y,t.use_xyz&&(s.Pt.Z=r.Z),n=this.DupOutPt(s,o))}return a===t.Direction.dLeftToRight===o?(e.Prev=s,s.Next=e,i.Next=n,n.Prev=i):(e.Next=s,s.Prev=e,i.Prev=n,n.Next=i),!0},t.Clipper.prototype.JoinPoints=function(e,i,s){var n=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!==s)return!1;for(r=e.OutPt1.Next;r!==n&&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(n,!1),a=this.DupOutPt(o,!0),n.Prev=o,o.Next=n,r.Next=a,a.Prev=r,e.OutPt1=n,e.OutPt2=r,!0):(r=this.DupOutPt(n,!0),a=this.DupOutPt(o,!1),n.Next=o,o.Prev=n,r.Prev=a,a.Next=r,e.OutPt1=n,e.OutPt2=r,!0))}if(A){for(r=n;n.Prev.Pt.Y===n.Pt.Y&&n.Prev!==r&&n.Prev!==o;)n=n.Prev;for(;r.Next.Pt.Y===r.Pt.Y&&r.Next!==n&&r.Next!==o;)r=r.Next;if(r.Next===n||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!==n;)a=a.Next;if(a.Next===o||a.Next===n)return!1;var c={Left:null,Right:null};if(!this.GetOverlap(n.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 n.Pt.X>=p&&n.Pt.X<=u?(g.X=n.Pt.X,g.Y=n.Pt.Y,t.use_xyz&&(g.Z=n.Pt.Z),h=n.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>n.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=n,e.OutPt2=o,this.JoinHorz(n,r,o,a,g,h)}for(r=n.Next;t.IntPoint.op_Equality(r.Pt,n.Pt)&&r!==n;)r=r.Next;var d=r.Pt.Y>n.Pt.Y||!t.ClipperBase.SlopesEqual4(n.Pt,r.Pt,e.OffPt,this.m_UseFullRange);if(d){for(r=n.Prev;t.IntPoint.op_Equality(r.Pt,n.Pt)&&r!==n;)r=r.Prev;if(r.Pt.Y>n.Pt.Y||!t.ClipperBase.SlopesEqual4(n.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===n||a===o||r===a||i===s&&d===f||(d?(r=this.DupOutPt(n,!1),a=this.DupOutPt(o,!0),n.Prev=o,o.Next=n,r.Next=a,a.Prev=r,e.OutPt1=n,e.OutPt2=r,0):(r=this.DupOutPt(n,!0),a=this.DupOutPt(o,!1),n.Next=o,o.Prev=n,r.Prev=a,a.Next=r,e.OutPt1=n,e.OutPt2=r,0)))},t.Clipper.GetBounds=function(e){for(var i=0,s=e.length;i<s&&0===e[i].length;)i++;if(i===s)return new t.IntRect(0,0,0,0);var n=new t.IntRect;for(n.left=e[i][0].X,n.right=n.left,n.top=e[i][0].Y,n.bottom=n.top;i<s;i++)for(var r=0,o=e[i].length;r<o;r++)e[i][r].X<n.left?n.left=e[i][r].X:e[i][r].X>n.right&&(n.right=e[i][r].X),e[i][r].Y<n.top?n.top=e[i][r].Y:e[i][r].Y>n.bottom&&(n.bottom=e[i][r].Y);return n},t.Clipper.prototype.GetBounds2=function(e){var i=e,s=new t.IntRect;for(s.left=e.Pt.X,s.right=e.Pt.X,s.top=e.Pt.Y,s.bottom=e.Pt.Y,e=e.Next;e!==i;)e.Pt.X<s.left&&(s.left=e.Pt.X),e.Pt.X>s.right&&(s.right=e.Pt.X),e.Pt.Y<s.top&&(s.top=e.Pt.Y),e.Pt.Y>s.bottom&&(s.bottom=e.Pt.Y),e=e.Next;return s},t.Clipper.PointInPolygon=function(e,t){var i=0,s=t.length;if(s<3)return 0;for(var n=t[0],r=1;r<=s;++r){var o=r===s?t[0]:t[r];if(o.Y===e.Y&&(o.X===e.X||n.Y===e.Y&&o.X>e.X==n.X<e.X))return-1;if(n.Y<e.Y!=o.Y<e.Y)if(n.X>=e.X)if(o.X>e.X)i=1-i;else{if(0==(a=(n.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(n.Y-e.Y)))return-1;a>0==o.Y>n.Y&&(i=1-i)}else if(o.X>e.X){var a;if(0==(a=(n.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(n.Y-e.Y)))return-1;a>0==o.Y>n.Y&&(i=1-i)}n=o}return i},t.Clipper.prototype.PointInPolygon=function(e,t){var i=0,s=t,n=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===n||a===r&&A>n==o<n))return-1;if(a<r!=l<r)if(o>=n)if(A>n)i=1-i;else{if(0==(c=(o-n)*(l-r)-(A-n)*(a-r)))return-1;c>0==l>a&&(i=1-i)}else if(A>n){var c;if(0==(c=(o-n)*(l-r)-(A-n)*(a-r)))return-1;c>0==l>a&&(i=1-i)}o=A,a=l}while(s!==t);return i},t.Clipper.prototype.Poly2ContainsPoly1=function(e,t){var i=e;do{var s=this.PointInPolygon(i.Pt,t);if(s>=0)return s>0;i=i.Next}while(i!==e);return!0},t.Clipper.prototype.FixupFirstLefts1=function(e,i){for(var s,n,r=0,o=this.m_PolyOuts.length;r<o;r++)s=this.m_PolyOuts[r],n=t.Clipper.ParseFirstLeft(s.FirstLeft),null!==s.Pts&&n===e&&this.Poly2ContainsPoly1(s.Pts,i.Pts)&&(s.FirstLeft=i)},t.Clipper.prototype.FixupFirstLefts2=function(e,i){for(var s,n,r=i.FirstLeft,o=0,a=this.m_PolyOuts.length;o<a;o++)null!==(s=this.m_PolyOuts[o]).Pts&&s!==i&&s!==e&&((n=t.Clipper.ParseFirstLeft(s.FirstLeft))!==r&&n!==e&&n!==i||(this.Poly2ContainsPoly1(s.Pts,e.Pts)?s.FirstLeft=e:this.Poly2ContainsPoly1(s.Pts,i.Pts)?s.FirstLeft=i:s.FirstLeft!==e&&s.FirstLeft!==i||(s.FirstLeft=r)))},t.Clipper.prototype.FixupFirstLefts3=function(e,i){for(var s,n,r=0,o=this.m_PolyOuts.length;r<o;r++)s=this.m_PolyOuts[r],n=t.Clipper.ParseFirstLeft(s.FirstLeft),null!==s.Pts&&n===e&&(s.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,s=this.m_Joins[e],n=this.GetOutRec(s.OutPt1.Idx),r=this.GetOutRec(s.OutPt2.Idx);null!==n.Pts&&null!==r.Pts&&(n.IsOpen||r.IsOpen||(i=n===r?n:this.OutRec1RightOfOutRec2(n,r)?r:this.OutRec1RightOfOutRec2(r,n)?n:this.GetLowermostRec(n,r),this.JoinPoints(s,n,r)&&(n===r?(n.Pts=s.OutPt1,n.BottomPt=null,(r=this.CreateOutRec()).Pts=s.OutPt2,this.UpdateOutPtIdxs(r),this.Poly2ContainsPoly1(r.Pts,n.Pts)?(r.IsHole=!n.IsHole,r.FirstLeft=n,this.m_UsingPolyTree&&this.FixupFirstLefts2(r,n),(r.IsHole^this.ReverseSolution)==this.Area$1(r)>0&&this.ReversePolyPtLinks(r.Pts)):this.Poly2ContainsPoly1(n.Pts,r.Pts)?(r.IsHole=n.IsHole,n.IsHole=!r.IsHole,r.FirstLeft=n.FirstLeft,n.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts2(n,r),(n.IsHole^this.ReverseSolution)==this.Area$1(n)>0&&this.ReversePolyPtLinks(n.Pts)):(r.IsHole=n.IsHole,r.FirstLeft=n.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(n,r))):(r.Pts=null,r.BottomPt=null,r.Idx=n.Idx,n.IsHole=i.IsHole,i===r&&(n.FirstLeft=r.FirstLeft),r.FirstLeft=n,this.m_UsingPolyTree&&this.FixupFirstLefts3(r,n)))))}},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++],s=i.Pts;if(null!==s&&!i.IsOpen)do{for(var n=s.Next;n!==i.Pts;){if(t.IntPoint.op_Equality(s.Pt,n.Pt)&&n.Next!==s&&n.Prev!==s){var r=s.Prev,o=n.Prev;s.Prev=o,o.Next=s,n.Prev=r,r.Next=n,i.Pts=s;var a=this.CreateOutRec();a.Pts=n,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)),n=s}n=n.Next}s=s.Next}while(s!==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,s=0,n=t-1;s<t;++s)i+=(e[n].X+e[s].X)*(e[n].Y-e[s].Y),n=s;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 s=new Array,n=new t.Clipper(0);return n.StrictlySimple=!0,n.AddPath(e,t.PolyType.ptSubject,!0),n.Execute(t.ClipType.ctUnion,s,i,i),s},t.Clipper.SimplifyPolygons=function(e,i){void 0===i&&(i=t.PolyFillType.pftEvenOdd);var s=new Array,n=new t.Clipper(0);return n.StrictlySimple=!0,n.AddPaths(e,t.PolyType.ptSubject,!0),n.Execute(t.ClipType.ctUnion,s,i,i),s},t.Clipper.DistanceSqrd=function(e,t){var i=e.X-t.X,s=e.Y-t.Y;return i*i+s*s},t.Clipper.DistanceFromLineSqrd=function(e,t,i){var s=t.Y-i.Y,n=i.X-t.X,r=s*t.X+n*t.Y;return(r=s*e.X+n*e.Y-r)*r/(s*s+n*n)},t.Clipper.SlopesNearCollinear=function(e,i,s,n){return Math.abs(e.X-i.X)>Math.abs(e.Y-i.Y)?e.X>i.X==e.X<s.X?t.Clipper.DistanceFromLineSqrd(e,i,s)<n:i.X>e.X==i.X<s.X?t.Clipper.DistanceFromLineSqrd(i,e,s)<n:t.Clipper.DistanceFromLineSqrd(s,e,i)<n:e.Y>i.Y==e.Y<s.Y?t.Clipper.DistanceFromLineSqrd(e,i,s)<n:i.Y>e.Y==i.Y<s.Y?t.Clipper.DistanceFromLineSqrd(i,e,s)<n:t.Clipper.DistanceFromLineSqrd(s,e,i)<n},t.Clipper.PointsAreClose=function(e,t,i){var s=e.X-t.X,n=e.Y-t.Y;return s*s+n*n<=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 s=e.length;if(0===s)return new Array;for(var n=new Array(s),r=0;r<s;++r)n[r]=new t.OutPt;for(r=0;r<s;++r)n[r].Pt=e[r],n[r].Next=n[(r+1)%s],n[r].Next.Prev=n[r],n[r].Idx=0;for(var o=i*i,a=n[0];0===a.Idx&&a.Next!==a.Prev;)t.Clipper.PointsAreClose(a.Pt,a.Prev.Pt,o)?(a=t.Clipper.ExcludeOp(a),s--):t.Clipper.PointsAreClose(a.Prev.Pt,a.Next.Pt,o)?(t.Clipper.ExcludeOp(a.Next),a=t.Clipper.ExcludeOp(a),s-=2):t.Clipper.SlopesNearCollinear(a.Prev.Pt,a.Pt,a.Next.Pt,o)?(a=t.Clipper.ExcludeOp(a),s--):(a.Idx=1,a=a.Next);s<3&&(s=0);var A=new Array(s);for(r=0;r<s;++r)A[r]=new t.IntPoint1(a.Pt),a=a.Next;return n=null,A},t.Clipper.CleanPolygons=function(e,i){for(var s=new Array(e.length),n=0,r=e.length;n<r;n++)s[n]=t.Clipper.CleanPolygon(e[n],i);return s},t.Clipper.Minkowski=function(e,i,s,n){var r=n?1:0,o=e.length,a=i.length,A=new Array;if(s)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,s){if(i[0]instanceof Array){l=i;for(var n=new t.Paths,r=(a=new t.Clipper,0);r<l.length;++r){var o=t.Clipper.Minkowski(e,l[r],!0,s);a.AddPaths(o,t.PolyType.ptSubject,!0),s&&(A=t.Clipper.TranslatePath(l[r],e[0]),a.AddPath(A,t.PolyType.ptClip,!0))}return a.Execute(t.ClipType.ctUnion,n,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),n}var a,A=i,l=t.Clipper.Minkowski(e,A,!0,s);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 s=new t.Path,n=0;n<e.length;n++)s.push(new t.IntPoint2(e[n].X+i.X,e[n].Y+i.Y));return s},t.Clipper.MinkowskiDiff=function(e,i){var s=t.Clipper.Minkowski(e,i,!1,!0),n=new t.Clipper;return n.AddPaths(s,t.PolyType.ptSubject,!0),n.Execute(t.ClipType.ctUnion,s,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),s},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,s){var n=!0;switch(i){case t.Clipper.NodeType.ntOpen:return;case t.Clipper.NodeType.ntClosed:n=!e.IsOpen}e.m_polygon.length>0&&n&&s.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,s)},t.Clipper.OpenPathsFromPolyTree=function(e){for(var i=new t.Paths,s=0,n=e.ChildCount();s<n;s++)e.Childs()[s].IsOpen&&i.push(e.Childs()[s].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,s){var n=e.length-1;if(!(n<0)){var r=new t.PolyNode;if(r.m_jointype=i,r.m_endtype=s,s===t.EndType.etClosedLine||s===t.EndType.etClosedPolygon)for(;n>0&&t.IntPoint.op_Equality(e[0],e[n]);)n--;r.m_polygon.push(e[0]);for(var o=0,a=0,A=1;A<=n;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(!(s===t.EndType.etClosedPolygon&&o<2)&&(this.m_polyNodes.AddChild(r),s===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 s=0,n=e.length;s<n;s++)this.AddPath(e[s],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 s=i.X-e.X,n=i.Y-e.Y;if(0===s&&0===n)return new t.DoublePoint2(0,0);var r=1/Math.sqrt(s*s+n*n);return s*=r,n*=r,new t.DoublePoint2(n,-s)},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 s;this.MiterLimit>2?this.m_miterLim=2/(this.MiterLimit*this.MiterLimit):this.m_miterLim=.5,s=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 n=3.14159265358979/Math.acos(1-s/Math.abs(e));for(this.m_sin=Math.sin(t.ClipperOffset.two_pi/n),this.m_cos=Math.cos(t.ClipperOffset.two_pi/n),this.m_StepsPerRad=n/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<=n;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),(n=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)n.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)),n.AddPath(a,t.PolyType.ptSubject,!0),n.ReverseSolution=!0,n.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 s=1;s<i.ChildCount();s++)r.AddChild(i.Childs()[s])}else r.Clear();else{var n,r=e[0],o=e[1];if(t.Clear(r),this.FixOrientations(),this.DoOffset(o),(n=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)n.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)),n.AddPath(a,t.PolyType.ptSubject,!0),n.ReverseSolution=!0,n.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,s){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(s){case t.JoinType.jtMiter:var n=this.m_normals[e].X*this.m_normals[i].X+this.m_normals[e].Y*this.m_normals[i].Y+1;n>=this.m_miterLim?this.DoMiter(e,i,n):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 s=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*s)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[i].Y+this.m_normals[i].X*s)))),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*s)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[e].Y-this.m_normals[e].X*s))))},t.ClipperOffset.prototype.DoMiter=function(e,i,s){var n=this.m_delta/s;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)*n),t.ClipperOffset.Round(this.m_srcPoly[e].Y+(this.m_normals[i].Y+this.m_normals[e].Y)*n)))},t.ClipperOffset.prototype.DoRound=function(e,i){for(var s,n=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(n))),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))),s=o,o=o*this.m_cos-this.m_sin*a,a=s*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 s=0,n=0;n<e.length;n++)s+=t.Clipper.Area(e[n]);return s/(i*i)},t.JS.BoundsOfPath=function(e,i){return t.JS.BoundsOfPaths([e],i)},t.JS.BoundsOfPaths=function(e,i){i||(i=1);var s=t.Clipper.GetBounds(e);return s.left/=i,s.bottom/=i,s.right/=i,s.top/=i,s},t.JS.Clean=function(e,i){if(!(e instanceof Array))return[];var s=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;s||(e=[e]);for(var n,r,o,a,A,l,c,h=e.length,p=[],u=0;u<h;u++)if(0!==(n=(r=e[u]).length))if(n<3)o=r,p.push(o);else{for(o=r,a=i*i,A=r[0],l=1,c=1;c<n;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<n&&o.splice(l,n-l),o.length&&p.push(o)}return!s&&p.length?p=p[0]:s||0!==p.length?s&&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,s,n,r,o=e.length,a=new Array(o);for(s=0;s<o;s++){for(i=e[s].length,r=new Array(i),n=0;n<i;n++)r[n]={X:e[s][n].X,Y:e[s][n].Y};a[s]=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 s,n,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(s=0;s<y;s++)if(0!==(A=(r=e[s]).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=[],n=0;n<A-2;n++)l=r[n],h=r[n+1],c=r[n+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[n+1]=1,n++);for(a.push({X:r[0].X,Y:r[0].Y}),n=1;n<A-1;n++)p[n]||a.push({X:r[n].X,Y:r[n].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 s,n,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=(s=e[h]).X,A=s.Y,o+=r((a-(l=(n=e[h-1]).X))*(a-l)+(A-(c=n.Y))*(A-c));return t&&e.pop(),o/i},t.JS.PerimeterOfPaths=function(e,i,s){s||(s=1);for(var n=0,r=0;r<e.length;r++)n+=t.JS.PerimeterOfPath(e[r],i,s);return n},t.JS.ScaleDownPath=function(e,t){var i,s;for(t||(t=1),i=e.length;i--;)(s=e[i]).X=s.X/t,s.Y=s.Y/t},t.JS.ScaleDownPaths=function(e,t){var i,s,n;for(t||(t=1),i=e.length;i--;)for(s=e[i].length;s--;)(n=e[i][s]).X=n.X/t,n.Y=n.Y/t},t.JS.ScaleUpPath=function(e,t){var i,s,n=Math.round;for(t||(t=1),i=e.length;i--;)(s=e[i]).X=n(s.X*t),s.Y=n(s.Y*t)},t.JS.ScaleUpPaths=function(e,t){var i,s,n,r=Math.round;for(t||(t=1),i=e.length;i--;)for(s=e[i].length;s--;)(n=e[i][s]).X=r(n.X*t),n.Y=r(n.Y*t)},t.ExPolygons=function(){return[]},t.ExPolygon=function(){this.outer=null,this.holes=null},t.JS.AddOuterPolyNodeToExPolygons=function(e,i){var s=new t.ExPolygon;s.outer=e.Contour();var n,r,o,a,A,l,c=e.Childs(),h=c.length;for(s.holes=new Array(h),o=0;o<h;o++)for(n=c[o],s.holes[o]=n.Contour(),a=0,l=(A=n.Childs()).length;a<l;a++)r=A[a],t.JS.AddOuterPolyNodeToExPolygons(r,i);i.push(s)},t.JS.ExPolygonsToPaths=function(e){var i,s,n,r,o=new t.Paths;for(i=0,n=e.length;i<n;i++)for(o.push(e[i].outer),s=0,r=e[i].holes.length;s<r;s++)o.push(e[i].holes[s]);return o},t.JS.PolyTreeToExPolygons=function(e){var i,s,n,r,o=new t.ExPolygons;for(s=0,r=(n=e.Childs()).length;s<r;s++)i=n[s],t.JS.AddOuterPolyNodeToExPolygons(i,o);return o}}();var He=getDefaultExportFromCjs(ze.exports);function alignByMinDist(e,t,i){const s=e.length,n=t.length;if(s<1||n<1)return t.slice();let r=0,o=1/0;for(let a=0;a<n;a++){const A=e[0],l=t[a%n],c=A.x-l.x,h=A.y-l.y,p=e[s-1],u=t[i?Math.min(a+s-1,n-1):(a+s-1)%n],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 s=0;s<i;s++){const n=e[s],r=e[(s+1)%i];t+=n.X*r.Y-r.X*n.Y}return t>0?1:t<0?-1:0}const _inflate=(e,t,i=!1)=>{const s=new He.ClipperOffset;s.MiterLimit=4,s.AddPath(e,He.JoinType.jtMiter,i||2==e.length?He.EndType.etOpenButt:He.EndType.etClosedPolygon);const n=new He.Paths;return s.Execute(n,t),n};function _inflateopen(t,i){const s=new He.ClipperOffset;s.MiterLimit=4,s.ArcTolerance=.25;const n=i*e,r=toclipformat(t);s.AddPath(r,He.JoinType.jtMiter,He.EndType.etClosedPolygon);const o=new He.Paths;s.Execute(o,n);let a=fromclipformat(o[0]);return getshape().frompt(a)}return{offset(t,i){const s=new He.ClipperOffset;s.MiterLimit=4,s.ArcTolerance=.25;const n=Math.abs(i)*e,r=toclipformat(t.pt);s.AddPath(r,He.JoinType.jtMiter,He.EndType.etOpenButt);const o=new He.Paths;s.Execute(o,n);let a=fromclipformat(o[0]);return getshape().frompt(a)},inflate:function inflate(t,i=2,s=!1,n=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(s){a.orient!=t.orient&&a.reverse();let A=alignByMinDist(t.pt,a.pt,n);if(a.frompt(A),n>0&&t.pt.length>=3){function estendi1(e,t){let i=e.segment(0).ruotata(-Math.PI/2,200,!0),s=e.segment(-2).ruotata(-Math.PI/2,200),n=t.segment(-2).interseca(s),r=t.segment(0).interseca(i);r&&(t.pt[0]=r),n&&(t.pt[t.pt.length-1]=n)}function estendi2(e,t){let i=e.segment(-1),s=t.segment(0),n=i.interseca(s);n&&(t.pt[0]=n),s=t.segment(-2);let r=i.interseca(s);r&&(t.pt[t.pt.length-1]=r)}1==n?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 s=alignByMinDist(e.pt,i.pt,0);return i.frompt(s),i},inflatecornici(e,t=2,i,s){let n,r=e.npt;if(2==r){let i=e.segment(0).offset(t);n=getshape().frompt([i.p1,i.p2])}else if(3==r){let i=e.segment(0).offset(t),s=e.segment(1).offset(t);if(i.isparallela(s))n=getshape().frompt([i.p1,s.p2]);else{let e=i.interseca(s);n=getshape().frompt([i.p1,e,s.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);n=_inflateopen([...e.pt,u,p],t);let g=n.pt.reduce(((e,t,i)=>(t.x-p.x)**2+(t.y-p.y)**2<(n.pt[e].x-p.x)**2+(n.pt[e].y-p.y)**2?i:e),0);n.pt=n.pt.slice(g+2).concat(n.pt.slice(0,g)),n.orient!=e.orient&&n.reverse(),i&&(e.truncatebefore(i),n.truncatebefore(i)),s&&(n.truncateafter(s),e.truncateafter(s))}return n},intersecasplitter(e,t){const i=new He.Clipper,s=[toclipformat(t.pt)],n=[toclipformat(e.pt)];i.AddPaths(s,He.PolyType.ptSubject,!0),i.AddPaths(n,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],s=o.pt.findIndex((e=>Math.abs(e.x-i.x)<.01&&Math.abs(e.y-i.y)<.01));if(s>0){s-=e,0!=s&&o.selezionaprimo(s);break}}}}return o},offsetpts(t,i=.01){const s=e*i;let n=_inflate(toclipformat(t),s);if(n&&n.length)return fromclipformat(n[0])},areesplitter(e,t,i=!0){if(!Array.isArray(e)||e.length<3)return;if(!t||0==t.length)return[e];const s=new He.Paths,n=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)s.push(e);for(let e of o)n.push(e);const a=new He.Clipper;a.AddPaths(s,He.PolyType.ptSubject,!0),a.AddPaths(n,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 s=new He.Paths,n=new He.Paths;for(let t of e){let e=[toclipformat(t.pt)];for(let t of e)s.push(t)}if(t&&t.length)for(let e of t){let t=toclipformat(e.pt);n.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)n.push(e)}const r=new He.Clipper;r.AddPaths(s,He.PolyType.ptSubject,!0),r.AddPaths(n,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 s=this.x,n=this.y;i=[new Linea2(0,0,100,0),new Linea2(s,0,s,100),new Linea2(s,n,s-100,n),new Linea2(0,n,0,n-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:s,xrows:n,xclines:r}=this,o=n.map((e=>e.tojson())),a=r.map((e=>({p1:e.p1,p2:e.p2})));return a=a.slice(4),{x:e,y:t,curlayer:s,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:s,pc:n,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:s,pc:n,shape:r,lines:a,hidden:o,info:A,pos:l,draw:this.draw.tojson()}}}class Vis2d{constructor(e,t,i){this.name=e,this.visible=t,this.des=i,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:s,vec:n}=this;return{name:t,visible:i,des:s,vec:[...n],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.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`})}addquota(e,t,i,s,n=0,r="",o=1,a=.25){this.vec.push({type:"quota",x1:e,y1:t,x2:i,y2:s,d:n,text:r,spessore:a,color:"black",scalafont:o})}addqpunto(e,t,i,s,n=0,r="",o=1,a=.25){this.vec.push({type:"qpunto",x1:e,y1:t,x2:i,y2:s,d:n,text:r,spessore:a,color:"black",scalafont:o})}addpoint(e,t=-1,i="red",s=8){return e&&this.vec.push({type:"point",p:e,id:t,color:i,spessore:1*s}),this}addline(e,t=-1,i=void 0,s=1){return e&&this.vec.push({type:"line",l:e,id:t,color:i,spessore:1*s}),this}addrect(e,t=-1,i=void 0,s=1){return e&&this.vec.push({type:"rect",l:e,id:t,color:i,spessore:1*s}),this}addimg(e,t){return e&&this.vec.push({type:"img",l:e,img:t}),this}addrecta(e,t=-1,i=void 0){return e&&this.vec.push({type:"recta",l:e,id:t,color:i,spessore:0}),this}addshape(e,t=void 0,i=1){return e&&this.vec.push({type:"shape",s:e,color:t||this.randomcolor(),spessore:1*i}),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,s){if("h"==t&&(t="o"),e||(e=[]),"number"==typeof i&&!["a","as"].includes(t))return{cod:"__",macro:"",sps:i};let n=e.find((e=>e.tipo.includes(t)&&e.cod==i&&(e.isshape||s||"a"!=t)));return n||(n=e.find((e=>e.tipo.includes(t)&&(e.isshape||s||"a"!=t)))),n||(n={cod:"__",macro:"",sps:0}),"a"!=t&&"as"!=t||"__"==n.cod||n.color||(n.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)}(n.cod)}, 95%, 97%`),n}function getbordi(e,t){let i,s=!1;if(Array.isArray(t)){t.length=4;let n=t[0]||"";i=t.map((t=>checkoggetto(e,"b",t||n))),s=i.every((e=>e.sps===i[0].sps))}else{let n=checkoggetto(e,"b",t);i=[n,n,n,n],s=!0}return{bordi:i,uguali:s,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,s,n=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,s){let r=e.infoquad(t);if(r&&r.distanza){let o=getshape().frompt(s||[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:++n,type:`b${i}`,info:r};s&&(A.shape=a.pt),B.push({type:`b${i}`,pt:o.pt}),C.push(A)}}n=n||0;let E=e.pt.length,x=E-1;s||(s=[]);let{bordi:w,uguali:v,senza:P}=getbordi(s,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=[],s=[];for(let s=0;s<E;s++){t=0==s?w[0].sps:s==x-1?w[2].sps:s==x?w[3].sps:w[1].sps,"number"!=typeof t&&(t=0);let n=e.segment(s).offset(-t);i.push(n)}for(let e=0;e<E;e++){let t=i[e].interseca(i[(e-1+E)%E]);s.push(t)}r=getshape().frompt(s)}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),s=i.interseca(m);s&&i.onsegment(s)&&(b=t,p=s),s=i.interseca(I),s&&i.onsegment(s)&&(y=t,u=s)}b-=1,y=x-2-y;let s=e.pt[0],n=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),n=h,C=g;break;case"o":eseguipezzo(e.segment(x),new Linea2(c,a),3),s=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(s,e.pt[1]),new Linea2(n,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(s,A),new Linea2(n,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(s,e.pt[1]),new Linea2(n,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]),s=i.offset(-t[1]);eseguipezzo(i,s,1,e.pt)}}return{countid:n,shape2:r,shapetop:o,bordi:w,dati:C,draws:B}}function creaprofiloesterno(e,t){let i,{x:s,y:n,tipo:r,bordo:o,taglio:a,h1:A,h2:l,l1:c,l2:h,forma:p}=e;s=s<50?50:s,n=n<50?50:n,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<s?c:0,A>0&&A<n?n-A:n),u.push(h>0&&h<s-c?s-h:s,l>0&&l<n&&l!=A?n-l:n);break;case"a":if(p){let e=getshape().fromstr(p);e.alignline({x:c,y:n-A},{x:s-h,y:n-l}),u.push(...e.vec)}else if((A||l)&&A>=0&&A<Math.min(n,s/2)&&l>=0&&l<Math.min(n,s/2)){let e=getshape().fromstr(`a30;${c||0};${n-A};${s/2};${n};${s-h};${n-l}`);u.push(...e.vec)}else u.push(0,n,s,n);break;case"s":c>0&&A>0?u.push(0,n-A,c,n):u.push(0,n),h&&h<s-c&&l>0&&l<n?u.push(s-h,n,s,n-l):u.push(s,n);break;default:u.push(0,n,s,n)}u.push(s,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 s=1/0,n="";for(let r of e){let e=(r.x-t)**2+(r.y-i)**2;e<s&&(s=e,n=r.k)}return n}function generatesegments(e,t,i=!1,s=!1){let n=[];if(e?.length>=2){if(s){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 s=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>s){let t;t=i?{a:e[s].b,b:e[r-1].a}:{a:e[s].a,b:e[r-1].b},n.push(t)}s=r}}s<e.length-1&&(i?n.push({a:e[s].b,b:e[e.length-1].a}):n.push({a:e[s].a,b:e[e.length-1].b}))}else n.push({a:e[0].b,b:e[e.length-1].a})}return n}function makedivisions(e,t,i){delete e.arre;let s=[],n=[],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)n.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];n.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 n=a.infoquad(A);if(n&&n.distanza){let o=p.clone(),a=checkoggetto(i,e,t);(n.sx||n.sy)&&o.move(-n.sx||0,-n.sy||0),n.angle&&o.rotate(-n.angle||0);let A={id:c,type:e,cod:t,c2:a,shape:o.pt,info:n};r.push(A),A?.shape&&s.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 s=new Linea2({x:e.x,y:t.a},{x:e.x,y:t.b}),n=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,s,n,e.sp/2,e.id)}))}));for(let e of b){let t=[...e.cuts],i=[...B];for(let s of C)i.push({a:s.x,b:s.x+s.sp}),isinseg(s.segs,e.x+e.sp/2)&&t.push(s.x+s.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}),s=new Linea2({x:t.b,y:e.x},{x:t.a,y:e.x});adddatilin(e.sp?"o":"l",e.cod,s,i,e.sp,e.id)}}let x=shapeclip().areesplitter(t.pt,n),w=function getareacodes(e){let t,i,s,n,r=[];for(let o=0;o<=e.vert.length;o++){if(0==o)t="v0",i=0;else{let s=e.vert[o-1];t=`${s.dir}${s.id}`,i=s._v}for(let o=0;o<=e.oriz.length;o++){if(0==o)s="o0",n=0;else{let t=e.oriz[o-1];s=`${t.dir}${t.id}`,n=t._v}r.push({k:t+s,x:i,y:n})}}return r}(e);for(let t of x){let n=getshape().frompt(t),{p1:o,width:a,height:A,isrect:l}=n.dims(),c=findareacod(w,o.x,o.y),h=e.aree[c]||e.area||"",p=checkoggetto(i,"a",h,l),u=n.pt.findIndex((e=>Math.abs(e.x-o.x)<.001&&Math.abs(e.y-o.y)<.001));u>0&&n.selezionaprimo(u),n.pt.length&&(n.move(-o.x,-o.y),1==n.orient&&n.reverse()),r.push({id:c,cod:h,c2:p,type:"a",shape:l?null:n.pt,info:{isrect:l?1:0,sx:o.x,sy:o.y,rot:0,width:a,height:A}}),s.push({type:l?"a":"as",sx:o.x,sy:o.y,dx:a,dy:A,id:c,cod:h,rot:0,pt:n.pt,color:p.color})}return{ff:e,h1:b,ph:y,v1:C,pv:B,draws:s,lines:o,dati:r}}function ordinabase(e,t,i,s,n,r,o,a){let A=[];if(i){for(let n of i){let i=checkoggetto(e,t,n.cod).sps||0,a=0;switch(n.tipo){case"d-":a=s-n.v;break;case"p":a=s*n.v/100;break;case"p-":a=s*(100-n.v)/100;break;default:a=n.v}if(i&&"c"==n.align?a-=i/2:i&&"r"==n.align&&(a-=i),a=Math.round(10*a)/10,n._x0=a,n._x1=a+i,n._v=a+i/2,n._valid=a>0&&a<s,a>r&&a<s-o){let e=[];n.cuts&&n.cuts.length&&n.cuts.forEach((t=>{e.push(t<0?s+t:t)})),A.push({id:n.id,x:a,sp:i,cuts:e,cod:n.cod})}}A.sort(((e,t)=>e.x-t.x))}let l=[],c=r;"a"==a&&(s*=1.3);for(let e=0;e<A.length;e++){let t=A[e];t.x>=c+n&&t.x+t.sp<=s-o-n&&(t.min=c+n,t.max=s-o-n,l.length>0&&(l[l.length-1].max=t.x-n),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:s-o,b:s-o}),{dati:l,punti:h}}function check(e){let{x:t,y:i,area:s,bordo:n,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"),s=s||"__",n=n||"__",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:s,bordo:n,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,s,n,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:s,cod:n,cuts:o||[]}}function addoriz(e,t,i,s,n,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;s||(s=e.goriz||o||"__"),Array.isArray(n)&&(r=n,n="c"),e.oriz||(e.oriz=[]);let a=addtaglio(0,"o",t,i,s,n,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,s,n,r){return addoriz(e,t,i,s,n,r)},addoriz:addoriz,addvert:function addvert(e,t,i,s,n,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;s||(s=e.gvert||o||"__"),Array.isArray(n)&&(r=n,n="c"),e.vert||(e.vert=[]);let a=addtaglio(0,"v",t,i,s,n,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,s){return makedivisions(e,i,s)},check:check,checkoggetto:checkoggetto,creaprofiloesterno:creaprofiloesterno,create:function create(e,t,i,s){s||(s={});let{minvano:n,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}=s,B=check({x:e,y:t,area:C,bordo:i,gvert:I,goriz:b,priority:r,minvano:n,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 s,{name:n="image",png:r,width:o,height:a,zoom:A,zoomatutto:l,scene:c,imposta:h,frustumSize:p=10}=i;h&&(s=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=s),new File([I],`${n}.${r?"png":"webp"}`,{type:r?"image/png":"image/webp"})}function handleMovimenti(e,t={}){let{container:i,width:s,height:n,camera:r,scene:o,raycaster:a}=t;if(!i)return;const A=i.getBoundingClientRect(),l={x:(e.clientX-A.left)/s*2-1,y:-(e.clientY-A.top)/n*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:s,width:n,height:r,camera:o,scene:a,raycaster:A,emit:l,hoverables:c}=i;if(!s)return;if(!c||!c.length)return;const h=s.getBoundingClientRect(),p={x:(e.clientX-h.left)/n*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:s,height:n,camera:r,scene:o,raycaster:a,emit:A,hoverables:l}=t;if(!i)return;const c=i.getBoundingClientRect(),h={x:(e.clientX-c.left)/s*2-1,y:-(e.clientY-c.top)/n*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 s;switch(t){case"x":s=16711680;break;case"y":s=65280;break;case"z":s=255;break;default:throw new Error("asse non valido")}const n=new e.Group;n.name=`picker_axis_${t}`,n.userData.type="move",n.userData.axis=t;const r=new e.CylinderGeometry(.025*i,.025*i,.7*i,8),o=new e.MeshBasicMaterial({color:s,depthTest:!1,depthWrite:!1}),a=new e.Mesh(r,o);a.position.y=.35*i,a.userData.parentType="move",n.add(a);const A=new e.ConeGeometry(.06*i,.18*i,12),l=new e.MeshBasicMaterial({color:s,depthTest:!1,depthWrite:!1}),c=new e.Mesh(A,l);return c.position.y=.7*i+.09*i,c.userData.parentType="move",n.add(c),"x"===t&&(n.rotation.z=-Math.PI/2),"z"===t&&(n.rotation.x=Math.PI/2),n.visible=!1,n}function creaCorner(){const t=new e.BoxGeometry(.1,.1,.1),i=new e.MeshBasicMaterial({color:"black",depthTest:!1,depthWrite:!1}),s=new e.Mesh(t,i);return s.name="picker_corner",s.userData.type="corner",s.visible=!1,s}function creaRotateHandler(t="y",i=1){const s={x:16711680,y:65280,z:255}[t]||16776960,n=new e.TorusGeometry(i,.02*i,12,64,2*Math.PI),r=new e.MeshBasicMaterial({color:s,transparent:!0,opacity:.7,depthTest:!1,depthWrite:!1}),o=new e.Mesh(n,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,s=.11){const n={x:16711935,y:65535,z:16776960}[t]||16777215,r=new e.CylinderGeometry(0,s,i,3),o=new e.MeshBasicMaterial({color:n,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),s=i.min,n=i.max;this.grp.position.copy(s);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[s,n]=i.split(":");switch(s=s.trim().toLowerCase(),n=n?n.trim().toLowerCase():"",s){case"a":t.axis=n?n.split(""):["x","y","z"];break;case"d":t.drag=n?n.split(""):["x","y","z"];break;case"r":t.rotate={enabled:!0,step:n&&!isNaN(Number(n))?Number(n):null};break;case"c":t.corners=!n||n.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?n.x:s.x,2&r?n.y:s.y,4&r?n.z:s.z);i.position.copy(o.clone().sub(s)),i.material.color.set(t),i.visible=!0}))}const l=a.drag||[];if(l.includes("z")){const t=new e.Vector3((s.x+n.x)/2-s.x,0,n.z-s.z);this.draggerZ.position.copy(t),this.draggerZ.visible=!0}if(l.includes("y")){const t=new e.Vector3(0,0,(s.z+n.z)/2-s.z);this.draggerY.position.copy(t),this.draggerY.visible=!0}if(l.includes("x")){const t=new e.Vector3(n.x-s.x,0,(s.z+n.z)/2-s.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 s=new e.Vector3;t.getWorldPosition(s);let n=s.distanceTo(i);const r=.05*n,o=.06*n,a=.07*n,A=.04*n;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:s,RGBELoader:n,SAOPass:r}=e,{createSAOPass:o,updateSAOPass:a}=function ssao(e){return{createSAOPass:function createSAOPass({composer:t,scene:i,camera:s,renderer:n}){const r=new e(i,s,!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,s){let n,r=null,o=null;return{refreshScene:function refreshScene(t,i,n,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))})),n){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);s(n,r)}}const a=t?.userData?.dirLight;a&&o&&(a.shadow.needsUpdate=!0)},disposeHdri:function disposeHdri(){n&&(n.dispose(),n=null)},removeHdri:function removeHdri(e){e&&(e.environment=null),r&&(r.dispose(),r=null),o&&(o.dispose(),o=null)},setHdri:async function setHdri(s,a){if(!s||!a||!n)return;let A;A=i._cdn?`${i._cdn}__/hdr/${s}`:i.fullget("mufiles/gethdr",{name:s});let l=new Promise(((i,s)=>{(new t).load(A,(t=>{t.mapping=e.EquirectangularReflectionMapping;const s=n.fromEquirectangular(t),r=s.texture;t.dispose(),i({envMap:r,rt:s})}),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(n&&n.dispose(),n=new e.PMREMGenerator(t),n.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 s=20;t.shadow.camera.left=-20,t.shadow.camera.right=s,t.shadow.camera.top=s,t.shadow.camera.bottom=-20,t.shadow.camera.near=.5,t.shadow.camera.far=50,i.add(t);const n=new e.AmbientLight(16777215,.1);i.add(n),i.userData.dirLight=t,i.userData.ambLight=n}}}}(t,n,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),s=new e.Vector3;i.getSize(s);const n=new e.Vector3;i.getCenter(n);const r=new e.OrthographicCamera(-s.x/2,s.x/2,s.z/2,-s.z/2,.001,50);r.position.set(n.x,10,n.z),r.up.set(0,0,-1),r.lookAt(n);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*s.x,1.15*s.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(n.x,i.min.y+.001,n.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:s,shadowScene:n}){if(!t||!i)return;n.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(n,s),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,s,n,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(s.isPerspectiveCamera){let t;const i=e.MathUtils.degToRad(s.fov),r=2*Math.atan(Math.tan(i/2)*h),o=(new e.Vector3).subVectors(s.position,l).normalize(),a=s.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 s=(new e.Vector3).subVectors(t,l),n=s.dot(a),A=s.dot(c),h=s.dot(o),p=Math.abs(n)/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);s.position.copy(l).addScaledVector(o,t);const m=8;s.near=.01,s.far=Math.max(1,t+1.2*f+m),s.updateProjectionMatrix(),n.minDistance=s.near,n.maxDistance=s.far-4,s.updateProjectionMatrix(),s.lookAt(l)}else if(s.isOrthographicCamera){let e=1*c.x,t=1*c.y;e/t<h?e=t*h:t=e/h,s.left=-e/2,s.right=e/2,s.top=t/2,s.bottom=-t/2,s.zoom=1,s.updateProjectionMatrix(),s.position.set(l.x,l.y,s.position.z),s.lookAt(l.x,l.y,l.z)}n&&(n.target.copy(l),n.update())},resetCameraView:function resetCameraView(t,i,s,n,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=n/(1.05*c),d=r/(1.05*h),f=Math.min(g,d),m=n/(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),s.object=i,s.target.copy(A),s.update()}}}(t,a),{exportGLB:x}=function exportscene(e,t){return{exportGLB:async function exportGLB(i,s,n={}){if(!i)return;s||(s="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,...n};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),n=document.createElement("a");n.href=i,n.download=s,n.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 s=new e.Layers;return s.enable(0),s.enable(1),s.enable(2),t.traverse((t=>{if(s.test(t.layers)&&t.isMesh&&s.test(t.layers)&&(Array.isArray(t.material)?t.material.every((e=>e.isMeshStandardMaterial||e.isMeshPhysicalMaterial)):t.material.isMeshStandardMaterial||t.material.isMeshPhysicalMaterial)){const s=t.geometry.clone(),n=Array.isArray(t.material)?t.material.map((e=>e.clone())):t.material.clone(),r=new e.Mesh(s,n);t.updateWorldMatrix(!0,!1),t.getWorldPosition(r.position),t.getWorldQuaternion(r.quaternion),t.getWorldScale(r.scale),i.add(r)}})),i}}}(t,s);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 s=new Linea2(e.p1,e.p2);s.rotate(-i.ang),s.move(i.pos.x,i.pos.z),s.valid=!0,t.push(s)}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 s=t[e];for(let n=e+1;n<t.length;n++){const e=t[n];if(!e.valid)continue;if(!s.isparallela(e))continue;if(!s.isCollineare(e))continue;s.a1b=e.onsegment(s.p1,i),s.a2b=e.onsegment(s.p2,i),s.b1a=s.onsegment(e.p1,i),s.b2a=s.onsegment(e.p2,i);const{x:r,y:o}=s.direzione,{x:a,y:A}=e.direzione;if(r*a+o*A>0)if(s.b1a&&s.b2a)e.valid=!1;else{if(s.a1b&&s.a2b){s.valid=!1;break}if(s.a1b&&s.b2a){let i=new Linea2(e.p1,s.p2);i.valid=!0,t.push(i),s.valid=!1,e.valid=!1;break}if(s.a2b&&s.b1a){let i=new Linea2(s.p1,e.p2);i.valid=!0,t.push(i),s.valid=!1,e.valid=!1;break}}else{const n=s.proiezionet(s.p1).t,r=s.proiezionet(s.p2).t,o=s.proiezionet(e.p1).t,a=s.proiezionet(e.p2).t,A=Math.min(n,r),l=Math.max(n,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(s.puntot(A),s.puntot(p));e.valid=!0,t.push(e)}if(l>u){let e=new Linea2(s.puntot(l),s.puntot(u));e.valid=!0,t.push(e)}if(c<p){let e=new Linea2(s.puntot(c),s.puntot(p));e.valid=!0,t.push(e)}if(h>u){let e=new Linea2(s.puntot(h),s.puntot(u));e.valid=!0,t.push(e)}s.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],s=!0;for(;s;){s=!1;for(let n=e+1;n<t.length;){let e=t[n];samepoint(i.pt[0],e.pt[0])?(e.pt.reverse(),i.pt.unshift(...e.pt.slice(0,-1)),t.splice(n,1),s=!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(n,1),s=!0):samepoint(i.pt[0],e.pt[e.pt.length-1])?(i.pt.unshift(...e.pt.slice(0,-1)),t.splice(n,1),s=!0):samepoint(i.pt[i.pt.length-1],e.pt[0])?(i.pt.push(...e.pt.slice(1)),t.splice(n,1),s=!0):n++}}}return t}async function valutagrafica(e,t,i,s,n){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","ul","ua","up","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 n,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 s,a,c=/^#(d|des|descrizione)\s*=\s*(.*)\s*$/im.exec(t);if(c)s="#d",a=await e.vari.valuta(c[2]);else{let e=await m.parametrokeyval(t);s=e.k,a=e.v}s&&!h[s]&&(h[s]=!0,y.includes(s)?"#d"==s?l=a:("string"==typeof a&&(a=o(a)),["l","a","p"].includes(s)&&e.vari.add(s,String(a)),r[s]=a,A=!0):"string"==typeof a?n.push(`${s}=${a}`):e.vari.add(s,a))}let C;if(n=[],r={},A=!1,l="",h={},s&&s.keys&&s.keys[p]&&(C=s.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){let e=d.head.filter((e=>!["g","p"].includes(e.t)));for(const t of e)await _parsepars(t.cod)}let B={iscad:A,isheader:I,name:d.name,des:l,leveleval:f.leveleval};I&&p&&(B.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")),B.cadv=r),await d.impostaparametri(g,n,!0,C);let E=i[p];p&&I&&E&&E.pars&&(B.pars=E.pars,f.leveleval++,await d.setparametri(E.pars));let x=e.vari.var("_rootnode");if(e.vari.add("_rootnode","0"),B.rows=await a(e,d,d.codice,f),e.vari.add("_rootnode",x),p&&I&&(B.spars=d.getparametri()),A)for(let t in b)e.vari.dictionary[t]=b[t];return B},parsefnpunto:async e=>{let{dati:t,vari:i,id:s,output:n}=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:s}=await i.parametrokeyval(e);t&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)&&(u[t]=s||"")}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]));n.push({t:"fn",fn:h,id:s,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 n)&&await n(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 s of t){if(ismacro(s)){if(s.id==e)return void(i=s);s.rows&&_getnode(s.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 s of e.rows)ismacro(s)&&(s.id&&s.isheader?(t.push({id:s.id,name:s.name,des:s.des||"",spec:s.pars?1:0,level:i}),_xfiltrati(s,i+1)):_xfiltrati(s,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 s=i.cadv[t];"number"==typeof s&&s&&e.push(`${t}=${s}`)}if(i.pars)for(let t in i.pars){let s=i.pars[t];e.push(`${t}=${s}`)}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,s,{inverse:n=!0,height:r=600,strokescale:o=2,fontsize:a=2,attivo:A=!0,opacita_inattivo:l=.35}={}){if(!s||!s.vec||!s.vec.length)return;let c;if("boolean"==typeof s.attivo&&(A=s.attivo),n){const f=new e.Group({scaleY:-1,y:r});i.add(f),c=f}else c=new e.Group;i.add(c),c.opacity(A?1:l);const h=[c];let p=[],u=!1,g=!0,d=0;function getTesto(t,i,s,n,r,o,a,A){const l=new e.Text({scaleY:n?A?-1:1:A?1:-1,scaleX:s?-1:1,x:0,y:0,text:t,fontSize:6*i,fill:r||"black"}),c=l.width(),h=l.height(),u=function findFreeY(e,t,i,s){let n=t,r=0;for(;p.some((t=>Math.abs(e-t.x)<i&&Math.abs(n-t.y)<s))&&(n-=1.01*s,!(++r>10)););return p.push({x:e,y:n,width:i,height:s}),n}(o,a,c,h);return l.x(o),l.y(u),A||l.offset({x:c/2,y:h/2}),l}for(let m of[0,1]){function drawobjects(i,s){for(const r of i)switch(r.type){case"group":if(s?.[r.name]){let e=s[r.name];e.vec?.length&&++d<20&&(drawobjects(e.vec,e.gr),d--)}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&&(u=!u),i.scaleY<0&&(g=!g);const s=new e.Group(i);c.add(s),h.push(s),c=s;break}case"pop":if(h.length>1){const e=h.pop();e.getAttr("scaleX")<0&&(u=!u),e.getAttr("scaleY")<0&&(g=!g),c=h[h.length-1]}break;case"img":if(0===m){const{x:i,y:s}=r.l.p1,o=r.l.p2.x-i,a=r.l.p2.y-s;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=s,u=o,g=a,d=n;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:n?s+a:s,width:o,height:a,scaleY:n?-1:1})):c.add(new e.Image({name:"img",x:i,y:n?s+a:s,image:A,width:o,height:a,scaleY:n?-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){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,u,g,"black",e,t,n))}break;case"rect":case"recta":if(0===m){const{x:t,y:i}=r.l.p1,s=r.l.p2.x-t,n=r.l.p2.y-i;c.add(new e.Rect({x:t,y:i,width:s,height:n,stroke:"rect"===r.type?r.color||"black":void 0,fill:"recta"===r.type?r.color||"rgba(0,0,255,0.2)":void 0,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)){const e=a;c.add(getTesto(r.id,e,u,g,r.color||"black",r.p.x+2*e,r.p.y+6*e,n))}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)":void 0,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(getTesto(r.text,e,u,g,t,r.x||0,r.y||0,n))}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,u,g));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(s.vec,s.gr)}}function quotalineare(t,i,s,n,r,o,a,A="black",l=1,c,h){const p=s-t,u=n-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=[s+d,n+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:[s,n,s+1.2*d,n+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;return C.add(new e.Rect({x:b-B/2,y:y-E/2,width:B,height:E,fill:"white",rotation:180*Math.atan2(u,p)/Math.PI,listening:!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:180*Math.atan2(u,p)/Math.PI})),C}function quotapunto(t,i,s,n,r,o="black",a=1,A,l){const c=t+n,h=i+n,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:s,fontSize:6*r,fill:o,offsetX:s.length*r*2,offsetY:3*r})),p}return{renderizzaSuLayer:renderizzaSuLayer,saveimg_konva:async function saveimg_konva(t,i,s,n,r,o=10,a=1,A=2){let l=`${t}${s.name}`;const c=document.createElement("div");c.style.position="absolute",c.style.left="-10000px",c.style.top="-10000px",c.style.width=n+"px",c.style.height=r+"px",document.body.appendChild(c),console.log(s);const h=new e.Stage({container:c,width:n,height:r}),p=new e.Layer;h.add(p),renderizzaSuLayer(i,p,s,{height:r,strokescale:a,fontsize:A}),p.draw();const u=p.children[0].getClientRect({skipTransform:!1}),g=(n-2*o)/u.width,d=(r-2*o)/u.height,f=Math.min(g,d),m=-u.x*f+o+(n-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]),s=new Uint8Array(i.length);for(let e=0;e<i.length;e++)s[e]=i.charCodeAt(e);return new File([s],`${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 st=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 nt=tt;var rt=class Layer extends nt{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,s]=i;e.push(3,t),e.push(350,s.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,s){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.x2=i,this.y2=s}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,s,n,r){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.z1=i,this.x2=s,this.y2=n,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,s,n){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.r=i,this.startAngle=s,this.endAngle=n}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 Lt=class Cylinder extends St{constructor(e,t,i,s,n,r,o,a){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.z=i,this.r=s,this.thickness=n,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 Tt=tt,kt=["left","center","right"],_t=["baseline","bottom","middle","top"];var Rt=class Text extends Tt{constructor(e,t,i,s,n,r="left",o="baseline"){super(["AcDbEntity","AcDbText"]),this.x=e,this.y=t,this.height=i,this.rotation=s,this.value=n,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,s=0){super(["AcDbEntity","AcDbPolyline"]),this.points=e,this.closed=t,this.startWidth=i,this.endWidth=s}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,s,n]=t;e.push(10,i),e.push(20,s),0===this.startWidth&&0===this.endWidth||(e.push(40,this.startWidth),e.push(41,this.endWidth)),void 0!==n&&e.push(42,n)}))}};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,s]=e,n=new Xt(t,i,s);return n.ownerObjectHandle=this.handle,n})),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,s,n,r,o,a,A,l,c,h){super(["AcDbEntity","AcDbFace"]),this.x1=e,this.y1=t,this.z1=i,this.x2=s,this.y2=n,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,s=null,n=[]){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 s=1;s<e.length-t;s++)i.push(s);for(let s=0;s<t+1;s++)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=n,this.degree=t,this.weights=s;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,s,n,r,o){super(["AcDbEntity","AcDbEllipse"]),this.x=e,this.y=t,this.majorAxisX=i,this.majorAxisY=s,this.axisRatio=n,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=st,ti=rt,ii=at,si=ct,ni=pt,ri=gt,oi=ft,ai=It,Ai=yt,li=Bt,ci=xt,hi=wt,pi=Pt,ui=Mt,gi=Lt,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,s){return this.activeLayer.addShape(new ci(e,t,i,s)),this}drawLine3d(e,t,i,s,n,r){return this.activeLayer.addShape(new hi(e,t,i,s,n,r)),this}drawPoint(e,t){return this.activeLayer.addShape(new yi(e,t)),this}drawRect(e,t,i,s,n,r){const o=i-e,a=s-t;r=r||0;let A=null;return A=new fi(n?[[e+o-n,t,r],[e+o,t+n],[e+o,t+a-n,r],[e+o-n,t+a],[e+n,t+a,r],[e,t+a-n],[e,t+n,r],[e+n,t]]:[[e,t],[e,t+a],[e+o,t+a],[e+o,t]],!0),this.activeLayer.addShape(A),this}drawPolygon(e,t,i,s,n=0,r=!1){const o=2*Math.PI/i,a=[];let A=s;const l=n*Math.PI/180;r&&(A=s/Math.cos(Math.PI/i));for(let s=0;s<i;s++)a.push([e+A*Math.sin(l+s*o),t+A*Math.cos(l+s*o)]);return this.activeLayer.addShape(new fi(a,!0)),this}drawArc(e,t,i,s,n){return this.activeLayer.addShape(new pi(e,t,i,s,n)),this}drawCircle(e,t,i){return this.activeLayer.addShape(new ui(e,t,i)),this}drawCylinder(e,t,i,s,n,r,o,a){return this.activeLayer.addShape(new gi(e,t,i,s,n,r,o,a)),this}drawText(e,t,i,s,n,r="left",o="baseline"){return this.activeLayer.addShape(new di(e,t,i,s,n,r,o)),this}drawPolyline(e,t=!1,i=0,s=0){return this.activeLayer.addShape(new fi(e,t,i,s)),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,s=null,n=[]){return this.activeLayer.addShape(new Ci(e,t,i,s,n)),this}drawEllipse(e,t,i,s,n,r=0,o=2*Math.PI){return this.activeLayer.addShape(new Bi(e,t,i,s,n,r,o)),this}drawFace(e,t,i,s,n,r,o,a,A,l,c,h){return this.activeLayer.addShape(new bi(e,t,i,s,n,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 si("DIMSTYLE");this.tables.DIMSTYLE=e}e.add(new ri("*ACTIVE",1e3)),t.add(new ni("standard")),i.add(new oi("ACAD")),this.modelSpace=this.addBlock("*Model_Space"),this.addBlock("*Paper_Space");const s=new li;this.dictionary.addChildDictionary("ACAD_GROUP",s)}_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 s=this._ltypeTable(),n=this._layerTable();e.start("HEADER"),e.addHeaderVariable("HANDSEED",[[5,Qi.peek()]]);const r=Object.entries(this.headers);for(const t of r){const[i,s]=t;e.addHeaderVariable(i,s)}e.end(),e.start("CLASSES"),e.end(),e.start("TABLES"),s.tags(e),n.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,s]=vi[t];return Di[t]=rgb2aci(e,i,s)}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),s=parseInt(e.slice(3,5),16),n=parseInt(e.slice(5,7),16);return Di[t]=rgb2aci(i,s,n)}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 s of e.vec)switch(s.type){case"push":i.push(),(s.x||s.y)&&i.translate(s.x||0,s.y||0,0),s.rot&&i.rotateZ(s.rot);break;case"pop":i.pop();break;case"offset":i.translate(s.x||0,s.y||0,0);break;case"point":{const e=i.transform(s.p.x,s.p.y,0),n=col2aci(s.color);t.setActiveLayer("0",n),t.drawPoint(e.x,e.y),s.id&&t.drawText(e.x+2,e.y+2,6,0,s.id);break}case"line":{const e=i.transform(s.l.p1.x,s.l.p1.y,0),n=i.transform(s.l.p2.x,s.l.p2.y,0),r=col2aci(s.color);if(t.setActiveLayer("0",r),t.drawLine(e.x,e.y,n.x,n.y),s.id){const i=(e.x+n.x)/2,r=(e.y+n.y)/2;t.drawText(i,r,6,0,s.id)}break}case"rect":case"recta":{const e=i.transform(s.l.p1.x,s.l.p1.y,0),n=i.transform(s.l.p2.x,s.l.p2.y,0),r=col2aci(s.color);t.setActiveLayer("0",r);const o="recta"===s.type;t.drawPolyline([[e.x,e.y],[n.x,e.y],[n.x,n.y],[e.x,n.y]],o);break}case"shape":case"shapelin":case"area":{if(!s.s?.length)break;const e=s.s.map((e=>{const t=i.transform(e.x,e.y,0);return[t.x,t.y]})),n="shapelin"!==s.type,r=col2aci(s.color);t.setActiveLayer("0",r),t.drawPolyline(e,n);break}case"text":{const e=col2aci(s.color);t.setActiveLayer("0",e);const n=i.transform(s.x||0,s.y||0,0),r=6*(s.scalafont||1);t.drawText(n.x,n.y,r,0,s.text);break}}return t.toDxfString()}const Mi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:e.DoubleSide});function getorientate(e,t,i,s){switch(t=t||0,i=i||0,s=s||0,e.trim().toLowerCase()){case"alp":return{x:i,y:t,z:s};case"apl":return{x:i,y:s,z:t};case"pla":return{x:s,y:t,z:i};case"pal":return{x:s,y:i,z:t};case"lpa":return{x:t,y:s,z:i};default:return{x:t,y:i,z:s}}}function parselavs(e,t,i=0,s=0,n=0,r="",o="",a=""){let A=muClComments(r),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,s,n),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,s,n),id:t,facce:o}),l}function getemitter(t){let{d:i,name:s,x:n,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(n,r,o),h.userData={emitter:!0,lavs:a,ids:A,faces:l,size:c,name:s},i){const t=new e.SphereGeometry(c||5,8,8),i=new e.MeshBasicMaterial({color:16711680}),s=new e.Mesh(t,i);h.add(s)}return h.layers.set(29),h}function getreceiver(t,i){t.gmats.__istask=1;let{d:s,ori:n="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:(n||"").trim().toLowerCase(),x:r,y:o,z:a,tipo:h,start:p,end:u},s){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,s=new WeakMap;function boxBoxIntersects(e,t,i,s,n){return e.x+t>0&&e.x-t<i&&e.y+t>0&&e.y-t<s&&e.z+t>0&&e.z-t<n}function getFacceToccate(e,t,i,s,n,r){const o=[];function addfaccia(e){r&&!r.includes(e)||o.push(e)}return Math.abs(e.x-0)<t&&addfaccia("s"),Math.abs(e.x-i)<t&&addfaccia("d"),Math.abs(e.y-0)<t&&addfaccia("b"),Math.abs(e.y-s)<t&&addfaccia("a"),Math.abs(e.z-0)<t&&addfaccia("z"),Math.abs(e.z-n)<t&&addfaccia("f"),o.join("")}function getEmitterWorldPosition(t){if(!i.has(t)){const s=new e.Vector3;t.getWorldPosition(s),i.set(t,s)}return i.get(t)}function getReceiverWorldMatrixInverse(e){if(!s.has(e)){const t=e.matrixWorld.clone().invert();s.set(e,t)}return s.get(e)}t.updateMatrixWorld(!0);const n=[],r=[];!function scan(e){e.userData?.receiver&&n.push(e),e.userData?.emitter&&r.push(e),e.children&&e.children.forEach(scan)}(t);let o=[];for(const t of n){const{mat:i,ori:s,x:n,y:a,z:A,start:l,end:c,tipo:h,size:p}=t.userData;let u={id:i,...getorientate(s,n,a,A),tipo:h,ori:s,lavs:[]};l&&u.lavs.push(...parselavs(s,"_start",0,0,0,l,"",""));const g=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(g).clone().add(new e.Vector3(n/2,a/2,A/2));if(!boxBoxIntersects(i,t.userData.size??0,n,a,A))continue;const r=getFacceToccate(i,t.userData.soglia??2,n,a,A,t.userData.faces);r&&r.length&&u.lavs.push(...parselavs(s,t.userData.name,i.x,i.y,i.z,t.userData.lavs,r,"nd"))}c&&u.lavs.push(...parselavs(s,"_end",0,0,0,c,"","")),u.lavs.length&&o.push(u)}return o}function getbb(t,i=!1){if(!i&&t.userData.bb)return t.userData._boundingbox;const s=(new e.Box3).setFromObject(t);return t.userData._boundingbox=s,s}function setorigine(t,i=0,s=0,n=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+s,r.z+n)),o}function scalaoggetto(t,i,s={}){const n=getbb(i),r=new e.Vector3;n.getSize(r);const o=n.min,a=["x","y","z","u","v"],A={};for(let e of a){let t=s[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,s="x"===e?r.x:"y"===e?r.y:r.z,n="x"===e?o.x:"y"===e?o.y:o.z;void 0!==t.distperc&&(t.dist=s*t.distperc),void 0!==t.dist&&(i=(s+t.dist)/s);let a=t.p1?t.p1+n:void 0,l=t.p2?t.p2+n:void 0;void 0!==t.p1perc&&(a=n+s*t.p1perc),void 0!==t.p2perc&&(l=n+s*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:s}=A[e];c[e]=!(1===t&&void 0===i&&void 0===s)}));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,s=e.geometry.attributes.uv,trasf=(e,t)=>{if(!c[t])return e;const{s:i,p1:s,p2:n}=A[t];if(void 0===s||void 0===n)return e*i;const r=n*i-n;if(e<s)return e;if(e>=n)return e+r;return s+(e-s)*((n-s+r)/(n-s))};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(s&&(c.u||c.v)){const e=s.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"));s.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 s=new e.Group;if(t){let n=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=n,{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,ul:f=0,ua:m=0,up:I=0,scale:b=1,scx:y=b,scy:C=b,scz:B=b,emitters:E,emittersname:x,order:w,ignoreTraverse:v}=i;if("number"==typeof w&&n.traverse((e=>{e.isMesh&&(e.renderOrder=w)})),s.position.set(c,h,p),s.rotation.set(u*Ue,g*Ue,d*Ue),(f||m||I)&&(r=new e.Group,r.add(n),r.position.set(f,m,I)),s.scale.set(y,C,B),s.add(r),a&&A&&(s.userData.marker=a,s.userData.markerid=`#mk_${A||""}`,s.userData.marklink=l),o&&(s.userData.noingombro=!0),v&&(s.userData.ignoreTraverse=!0),E&&E.length)for(let e of E)e.name=e.name||x,s.add(getemitter(e))}return s.updateMatrixWorld(!0),s}const Li=e.DoubleSide;let Ti=new e.LineBasicMaterial({color:16711680,transparent:!1,opacity:1}),ki=new e.LineBasicMaterial({color:11579568,transparent:!1,opacity:1});const _i=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:Li}),Ri=new e.MeshStandardMaterial({color:8421504,roughness:.5,metalness:.4,side:Li}),Fi=new e.MeshStandardMaterial({color:11579568,roughness:.5,metalness:.4,side:Li}),Ni=new e.MeshStandardMaterial({color:16711680,roughness:.5,metalness:.4,side:Li}),Oi=new e.MeshStandardMaterial({color:1982639,roughness:.5,metalness:.4,side:Li}),Gi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:Li}),Yi=new e.MeshStandardMaterial({color:0,roughness:.5,metalness:.4,side:Li}),Ui=.001;function groupfromgeometry(t,i,s,n,r,o,a){let A=new e.Group;A.position.set(s,n,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,Ti);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 s=new e.LineSegments(t,Ti);return s.layers.set(i),s}function getmesh(t,i,s=1,n=!1){let r=new e.Mesh(t,n?i.clone():i);return r.castShadow=!0,r.receiveShadow=!0,r.layers.set(s),r}function get3dshape(t,i,s){if(!t||t.length<3)return new e.BufferGeometry;const n=[];for(let e=0;e<t.length;e++){const i=t[e],s=t[(e+1)%t.length];n.push(i.x,0,i.y),n.push(s.x,0,s.y)}const r=new e.BufferGeometry;r.setAttribute("position",new e.Float32BufferAttribute(n,3));let o=new e.LineSegments(r,i);return o.layers.set(s),o}function creategroup(t,i={}){let{ignoreTraverse:s}=i,n=new e.Group;return n.name=t||"$$",s&&(n.userData.ignoreTraverse=!0),n}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,s="#000"){const n=document.createElement("canvas"),r=n.getContext("2d");r.font="48px sans-serif";const o=Math.ceil(r.measureText(t).width)+16;n.width=o,n.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=s,r.fillText(t,8,32);const a=new e.CanvasTexture(n);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,s=null){const n=(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(n,s||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,s=null,n=5){let r;const o=new e.SphereGeometry(n,8,8);if(r=new e.Mesh(o,s||randombasemat()),i){let e=getspriteid(i||"",n);e.position.set(1.2*n,0,1.2*n),r.add(e)}return r.position.set(t.x,0,t.y),r}async function smat(t,i,s={}){s||(s={});let n=hash(i+JSON.stringify(s));return t.smats[n]||(s.glass?t.smats[n]=await async function smatglass(t,i={}){let s=new e.Color("#080808ff");try{s=new e.Color(t)}catch(e){console.log(e)}let{metalness:n=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:s,metalness:n,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,s):t.smats[n]=await async function smat0(t,i,s={}){let n=i,r="",o=!1;function getFilesToLoad(e,t){let i=[],s=t.match(/^([^(]+)\((([a-zA-Z0-9_\-/]+)_([a-z]+)|([a-z]+))\)$/);if(!s)return{base:t,files:i};let n=s[1],r=!1,o=s[3]||n,a=s[4]||s[5]||"";!a.includes("h")&&e||i.push({suff:"",file:`${o}.webp`,cs:!0});for(let e of a)"t"==e?(r=!0,s[3]&&qi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!1})):"h"!=e&&qi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!!["","e"].includes(e)});return{base:n,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=s.rot,h=parseFloat(s.s)||1;delete s.s;let p={...s};for(let e in l)if(Xi[e])for(let t of Xi[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 s={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||(s.normalScale=new e.Vector2(t,t))}let n=!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}=qi[a];s[l]=o,"map"===l&&(s._hasMap=!0),"normalMap"===c?(n=!0,s.normalMap=o,delete o.colorSpace,o.needsUpdate=!0,s.normalScale=s.normalScale??new e.Vector2(1,1)):"bumpScale"===c?(r=!0,s.bumpMap=o):Array.isArray(c)&&c.includes("emissive")&&void 0!==p.emissiveIntensity&&0!==p.emissiveIntensity&&(s.emissive=p.emissive||16777215,s.emissiveIntensity=p.emissiveIntensity??1)}}o&&(s.color=new e.Color(i),s._hasColor=!0)}else if(a.includes(".")){let e=await t.tex(a,g,d,f);if(!e)return _i;s.map=e,s._hasMap=!0}if(n&&r?delete s.bumpMap:r&&(s.bumpScale=p.bumpScale??.03),s.transparent=!!u,s.transparent&&(s.depthWrite=!1,s.opacity=p?.opacity??1),void 0!==p.brightness){let t=Number(p.brightness);!isNaN(t)&&t>0&&1!==t&&(s.color||(s.color=new e.Color(1,1,1)),s.color.multiplyScalar(t))}return s._hasMap&&!s._hasColor&&(s.color=new e.Color(1,1,1)),s._hasColor&&!s._hasMap&&delete s.map,delete s._hasColor,delete s._hasMap,new e.MeshStandardMaterial(s)}catch(e){return console.log("errore mat:",e.message,n),_i}}(t,i,s)),t.smats[n]}const Xi={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"]},qi={"":{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={},s=[];function getName(e){i[e]=(i[e]||0)+1;let s=t;return e&&(s+=`_${e}`),i[e]>1&&(s+=i[e]),`${s}.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(qi)){const n=e[i];if(n&&n.image&&!n._extracted){n._extracted=!0;let e,i=n.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")))}}s.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(qi)){const i=e[t];i&&i._extracted&&delete i._extracted}}})),Promise.all(s)}function uvswap(e,t=!1,i=!0){if(e&&e.attributes){const s=i?Ui:1,n=e.attributes.uv;if(n){const e=n.array;for(let n=0,r=e.length;n<r;n+=2)if(t){const t=e[n];e[n]=e[n+1]*s,e[n+1]=t*s}else i&&(e[n]*=s,e[n+1]*=s);n.needsUpdate=t||i}const r=e.attributes.uv2;if(r){const e=r.array;for(let i=0,n=e.length;i<n;i+=2)if(t){const t=e[i];e[i]=e[i+1]*s,e[i+1]=t*s}else e[i]*=s,e[i+1]*=s;r.needsUpdate=!0}e.computeTangents?.()}}function getfakeshadow2(t,i,s){const n=(new e.Shape).moveTo(0,0).lineTo(t,0).lineTo(t,i).lineTo(0,i).lineTo(0,0),r=new e.ShapeGeometry(n),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:s,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,s){let n=`fk${i.key}${s}`,{p1:r,width:o,height:a}=i.dims();t.texture||(t.texture={});let A=t.texture[n];A||(A=function createBlurredShadowTextureFromPoints(t,i=256,s=32,n=.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*s,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(${s}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,${n})`,d.fill(),d.restore();const f=new e.CanvasTexture(g);return f.needsUpdate=!0,f}(i,256,32,s,r,o,a),t.texture[n]=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,s,n,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)/n,(A-s)/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,s,n={},r=0,o=0,a=0){if(s=clean(s,!0),!t.movs[s])return i;t.movs[s];const A=new e.Vector3(r,o,a),l=0===A.lengthSq(),c=new e.Group;c.name=`pivot_${s}`;const h=new e.Group;if(h.name=`mov_${s}`,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 s=A.clone().negate();i.position.add(s),c.quaternion.copy(i.getWorldQuaternion(new e.Quaternion)),i.rotation.set(0,0,0)}return h.add(i),c.add(h),n||(n={}),n.inmov=!1,n.key=s,n.dt=0,n.dtstart=!1,h.userData.mov={...n},c}function getmovimento(e,t=[]){let i=0,s=[];const _cleartimeline=()=>{s=[],i=0},_add=(e,t={})=>{e&&s.push({...t,time:e}),i=s.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:n}=e.userData;if(!n.inmov)return;let r=n.dt-n.dtstart;if(n.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 s){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(n)*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(n)*t:e.t*t);break}{const _calc=(e,t=0)=>"function"==typeof e?e(n):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(n):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 zi=null,Hi=null;function getriferimento(t,i=0,s=0,n=0,r="rif"){"string"==typeof t&&(t={testo:t});let o=new e.Object3D;return o.position.set(i,s,n),r&&(o.name=r),o.userData={tipo:"rif",...t},o}function gettarghetta(t,i,s=100,n={}){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}=n;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,s=!1,n="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]&&(s=!0),e=r[4],r[1].toLowerCase()){case"r":n="red";break;case"g":n="green";break;case"b":n="blue";break;case"w":n="white";break;case"c":n="cyan"}return{testo:e,size:t,color:n,bold:i,italic:s}})).filter((e=>e.testo));const{canvas:C,context:B}=function getGlobalCanvas(){return zi||(zi=document.createElement("canvas"),Hi=zi.getContext("2d",{willReadFrequently:!0})),{canvas:zi,context:Hi}}();let E=0,x=2*c;i.forEach(((e,t)=>{const{testo:s,size:n=12}=e,r=2*n;B.font=`${r}px ${u}`;const o=B.measureText(s).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=s,v=Math.ceil(P/w)):(v=s,P=Math.ceil(v*w)),!t.textures[b]){const s=Math.floor(E+2*l),n=Math.floor(x+2*l);(C.width<s||C.height<n)&&(C.width=Math.max(C.width,s),C.height=Math.max(C.height,n)),B.clearRect(0,0,s,n);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,s,n,f+l/2),B.fillStyle=d,B.fill(),B.beginPath(),drawRoundedRect(B,l,l,s-2*l,n-2*l,f-l/2),B.fillStyle=h,B.fill());let m=c+l;i.forEach((e=>{const{testo:t,size:i=12,color:n="black",bold:r,italic:o}=e,a=2*i;B.font=`${r?"bold ":o?"italic ":""}${a}px ${u}`,B.fillStyle=n,B.textAlign="center",B.textBaseline="top",B.fillText(t,s/2,m),m+=1.2*a}));const I=B.getImageData(0,0,s,n),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,s,n,r){r=Math.min(r,Math.min(s/2,n/2)),e.moveTo(t+r,i),e.lineTo(t+s-r,i),e.quadraticCurveTo(t+s,i,t+s,i+r),e.lineTo(t+s,i+n-r),e.quadraticCurveTo(t+s,i+n,t+s-r,i+n),e.lineTo(t+r,i+n),e.quadraticCurveTo(t,i+n,t,i+n-r),e.lineTo(t,i+r),e.quadraticCurveTo(t,i,t+r,i),e.closePath()}function getquota(t,i,s,n,r,o,a={}){const{altezza:A=30,offset:l=0,piano:c="xy",layer:h=22,delta:p=5,spessoreLinea:u=3}=a,pp=(e,t)=>"xz"===c?[e,0,t]:"yz"===c?[0,e,t]:[e,t,0],g=new e.Group;g.name="quota";const d=r-s,f=o-n,m=Math.sqrt(d*d+f*f),I=Math.atan2(f,d);i||(i="$$"),i.includes("$$")&&(i=i.replace("$$",`${m.toFixed(1)}`));let b=i.split("\n").length;const y=-Math.sin(I)*l,C=Math.cos(I)*l,B=gettarghetta(t,i,2*A*b,{noSfondo:!0,layer:h,forcey:!0}),{dimx:E,dimy:x}=B.userData;function getCilindro(i,s,n){const r=(new e.Vector3).subVectors(s,i),o=r.length();let a,A=hash(`c:${n}|${o}`);t.geo[A]?a=t.geo[A]:(a=new e.CylinderGeometry(n/2,n/2,o,3,1,!0),t.geo[A]=a);const l=new e.Mesh(a,Yi);l.position.copy(i).add(r.multiplyScalar(.5));const c=(new e.Vector3).copy(s);return l.lookAt(c),l.rotateX(Math.PI/2),l}if(E>m-p){B.position.set(m/2,2*A,0);const t=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(m,0)),u);g.add(t)}else{const t=E+p,i=(m-t)/2,s=i+t,n=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(i,0)),u);g.add(n);const r=getCilindro(new e.Vector3(...pp(s,0)),new e.Vector3(...pp(m,0)),u);g.add(r),B.position.set(...pp(m/2,0))}const w=l>A/2?-l:-A/2,v=-l>A/2?-l:A/2,P=new e.Vector3(...pp(0,w)),D=new e.Vector3(...pp(0,v)),M=new e.Vector3(...pp(m,w)),S=new e.Vector3(...pp(m,v)),L=getCilindro(P,D,u);g.add(L);const T=getCilindro(M,S,u);return g.add(T),B.userData.updateOrientation=function(e){e&&this.quaternion.copy(e.quaternion)},g.add(B),g.userData.noingombro=!0,"xy"===c?(g.position.set(s+y,n+C,0),g.rotation.z=I):"xz"===c?(g.position.set(s+y,0,n+C),g.rotation.y=-I):"yz"===c&&(g.position.set(0,s+y,n+C),g.rotation.x=I),g.traverse((function(e){e.layers.set(h)})),g}function fillNoise(t,i,s={}){let{scale:n=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}=s;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,s){const n=Math.floor(e)%i,r=Math.floor(t)%s,o=e-Math.floor(e),a=t-Math.floor(t),A=grad(n,r),l=grad(n+1,r),c=grad(n,r+1),h=grad(n+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 s=t/i*n,a=e/i*n,A=1,l=1,c=0,h=0;for(let e=0;e<r;e++){c+=perlin(s*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 s=0;s<i;s++){let n=(C[e*i+s]-b)*B;n=Math.pow(n,A);const r=u.r+(g.r-u.r)*n,o=u.g+(g.g-u.g)*n,a=u.b+(g.b-u.b)*n,l=0,c=4*(e*i+s);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,s=256,n={}){[16,32,64,128,256,512,1024].includes(s)||(s=256);let r=hash(`gen|${i}|${s}|${JSON.stringify(n)}`);if(!t[r]){const o=new Uint8Array(s*s*4);switch(i){case"wood":{let e={...n};e.scale=6+seeder(40,n.seed+"a")/10,e.octaves=n.octaves||3,e.persistence=.5+seeder(50,n.seed+"b")/100,e.rings=2+seeder(200,n.seed+"c")/100,e.distortion=.3+seeder(100,n.seed+"d")/300,e.color1=n.color1||"#442200",e.color2=n.color2||"#ffe0a0",fillNoise(o,s,e)}break;case"marble":{let e={...n};e.scale=n.scale||10,e.octaves=n.octaves||3,e.persistence=n.persistence||.6,e.rings=n.rings||1+seeder(100,n.seed+"m3")/50,e.distortion=n.distortion||.8+seeder(200,n.seed+"m4")/200,e.contrast=n.contrast||1.2,e.color1=n.color1||"#e0e0e0",e.color2=n.color2||"#909090",fillNoise(o,s,e)}break;case"glass":{let e={...n};e.scale=n.scale||32,e.octaves=n.octaves||2,e.persistence=n.persistence||.8,e.contrast=n.contrast||1,e.color1=n.color1||"rgba(255,255,255,0.2)",e.color2=n.color2||"rgba(255,255,255,0.6)",fillNoise(o,s,e)}break;case"gradient":case"pattern":break;default:fillNoise(o,s,n)}const a=new e.DataTexture(o,s,s,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,s,n,r,o=_i,a){a||(a={}),Array.isArray(o)||(o=[o]);const A=function cylgeometry(t,i,s,n,r=16){if(!s||!i)return null;let o=hash(`cy${i}|${s}|${n||s}|${r}`);if(!t.geo[o]){const a=new e.CylinderGeometry(n||s,s,i,r);t.geo[o]=a}return t.geo[o]}(t,s,n,r,a.sides||16);let l=new e.Group;switch((i||"").trim().toUpperCase()){case"X":case"L":l.position.set(s/2,0,0),l.rotation.z=Math.PI/2;break;case"Z":case"P":l.position.set(0,0,s/2),l.rotation.x=Math.PI/2;break;default:l.position.set(0,s/2,0)}if(A){if(!a.nolines){let e=edgesfromgeometry(A);l.add(e)}uvswap(A,a.uvswap,!1);const e=o[0]||_i,t=o[1]||e,i=o[2]||e;l.add(getmesh(A,[e,t,i]))}return l}function facesettile(e,t,i,s){if(t>1||i>1){let n=s%(t=t??1);const r=1/t,o=1/(i=i??1),a=n*r,A=1-((s-n)/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,s,n,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=s,a.userData.value=n,a.userData.tooltip=r,a}function getface(t,i,s,n,r={}){let{repeat:o,order:a,center:A=!1,base:l=!1,billboard:c=!1}=r;const h=hash(`f:${i}|${s}|${o?1:0}|${l?1:0}`);if(!t.geo[h]){const n=new e.PlaneGeometry(i,s);let r=l?-.5:0;const a=n.attributes.uv;if(o)for(let e=0;e<a.count;e++)a.setXY(e,a.getX(e)*i/1e3,a.getY(e)*s/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]=n}c&&((n=n.clone()).depthTest=!1,n.depthWrite=!1);const p=new e.Mesh(t.geo[h],n);if(p.name=c?"billboard":"face","number"==typeof a&&(p.renderOrder=a),A||p.position.set(i/2,s/2,0),n?.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,s,n){this.getWorldQuaternion(t),this.parent?.getWorldQuaternion(i),this.quaternion.copy(n.quaternion),this.quaternion.premultiply(i.invert())}}return p}function getbox(t,i,s,n,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,s,n),g=new e.Group;if(l?g.position.set(0,s/2,0):c||h||p?g.position.set(c||0,h||0,p||0):a||g.position.set(i/2,s/2,n/2),!A||!r){let e=edgesfromgeometry(u);g.add(e)}return r&&g.add(getmesh(u,r)),g}function getcyl(t,i,s,n,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=s),c<0&&(c=s);const d=new e.CylinderGeometry(l,c,i,A,h,p,u,g);uvswap(d,r.uvswap,!1);const f=getmesh(d,n||_i),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,s,n){n||(n={});let{nolines:r,segmenti:o=16}=n,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,s||_i)),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,s=10,n=[],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)}|${s}|${JSON.stringify(o)}|${JSON.stringify(n)}`);A=A??a??0,l=l??a??0;let u=t.geo[p];if(!u){const r=makeShape(i);n.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:s,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||_i)),h||function extrudelines(t,i,s,n,r=3){const makeloop=(t,i)=>{if(!t||t.length<2)return null;const s=t.length,n=new Float32Array(3*(s+1));for(let e=0;e<=s;e++){const r=t[e%s],o=3*e;n[o]=r.x,n[o+1]=r.y,n[o+2]=i}const r=new e.BufferGeometry;return r.setAttribute("position",new e.BufferAttribute(n,3)),new e.Line(r,Ti)},addring=e=>{let i=makeloop(e,-r);i&&(i.layers.set(30),t.add(i)),i=makeloop(e,n+r),i&&(i.layers.set(30),t.add(i))};addring(i);for(const e of s)addring(e)}(g,i,n,s,l),g}function getthorus(t,i,s=.2,n,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,s,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,n||_i)),c}function getluce(t,i,s="#ffffff",n=1){const r=i.pt;if(!r||!r.length)return null;const o=hash(`${i.key}|${s}|${n}`);if(!t.meshes[o]){const i=makeShape(r),a=new e.ShapeGeometry(i),A=new e.MeshStandardMaterial({color:new e.Color(s),emissive:new e.Color(s),emissiveIntensity:n,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,s,n,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,s*a,n*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:s*(1-a)/2,sa:n*(1-a)/2})),c.layers.set(28),c.userData.marklink=A,posiziona(c,o)}}function toTrianglesDrawMode(e,n){if(n===t)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(n===i||n===s){let t=e.getIndex();if(null===t){const i=[],s=e.getAttribute("position");if(void 0===s)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<s.count;e++)i.push(e);e.setIndex(i),t=e.getIndex()}const s=t.count-2,r=[];if(n===i)for(let e=1;e<=s;e++)r.push(t.getX(0)),r.push(t.getX(e)),r.push(t.getX(e+1));else for(let e=0;e<s;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!==s&&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:",n),e}function pannellogeometry(t,i,s,n,r=0,o=0,a=0,A=0,l=0,c=2,h=!1){let p=hash(`pg--${i}|${s}|${n}|${r}|${o}|${a}|${A}|${l}|${c}|${h?1:0}`);if(i-=.01,s-=.01,n-=.01,!t.geo[p]){i-=2*l,s-=2*l,n-=2*l;let u=getshape();const g=[{x:A,y:0},{x:s-r,y:0},{x:s,y:r},{x:s,y:n-o},{x:s-o,y:n},{x:a,y:n},{x:0,y:n-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={},s=e.getIndex(),n=e.getAttribute("position"),r=s?s.count:n.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],s=e.attributes[i];A[i]=new s.constructor(new s.array.constructor(s.count*s.itemSize),s.itemSize,s.normalized);const n=e.morphAttributes[i];n&&(l[i]||(l[i]=[]),n.forEach(((e,t)=>{const s=new e.array.constructor(e.count*e.itemSize);l[i][t]=new e.constructor(s,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 n=s?s.getX(t):t;let r="";for(let t=0,i=a.length;t<i;t++){const i=a[t],s=e.getAttribute(i),o=s.itemSize;for(let e=0;e<o;e++)r+=~~(s[h[e]](n)*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],s=e.getAttribute(i),r=e.morphAttributes[i],c=s.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,s[t](n)),r)for(let e=0,s=r.length;e<s;e++)g[e][i](o,r[e][t](n))}}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,s,n,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>=s/2||m>=n/2||m>=r/2)&&(m=0),l="L"==(i=i.trim().toUpperCase())[0]?s:"A"==i[0]?n:r,c="L"==i[1]?s:"A"==i[1]?n:r,h="L"==i[2]?s:"A"==i[2]?n:r;let b=new e.Group;if(!A.nolines){let t=edgesfromgeometry(new e.BoxGeometry(s,n,r));t.position.set(s/2,n/2,r/2),b.add(t)}let y=getmesh(pannellogeometry(t,l,c,h,u,g,d,f,m,I,!A.uvswap),[a||o||Gi,o||Ni]);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,s=0,n=0){switch(e.trim().toUpperCase()){case"LPA":t.rotation.y=Math.PI/2,t.rotation.x=Math.PI,t.position.set(0,n,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(n,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,s,n,r,o=0){let a;switch((o<0||o>Math.max(i,s,n)/3)&&(o=0),t){case"lap":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=n-o,a.position.y=s-o,a.rotation.x=Math.PI;break;case"alp":a=getextrude(e,getshape().fromrect(s-2*o,i-2*o).pt,n-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.position.y=s-o,a.rotation.z=-Math.PI/2;break;case"apl":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=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(n-2*o,s-2*o).pt,i-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=n-o,a.position.y=o,a.rotation.y=Math.PI/2;break;case"pla":a=getextrude(e,getshape().fromrect(n-2*o,i-2*o).pt,s-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,n-2*o).pt,s-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.rotation.x=Math.PI/2,a.position.y=s-o}return a}function earcut(e,t,i=2){const s=t&&t.length,n=s?t[0]*i:e.length;let r=linkedList(e,0,n,i,!0);const o=[];if(!r||r.next===r.prev)return o;let a,A,l;if(s&&(r=function eliminateHoles(e,t,i,s){const n=[];for(let i=0,r=t.length;i<r;i++){const o=linkedList(e,t[i]*s,i<r-1?t[i+1]*s:e.length,s,!1);o===o.next&&(o.steiner=!0),n.push(getLeftmost(o))}n.sort(compareXYSlope);for(let e=0;e<n.length;e++)i=eliminateHole(n[e],i);return i}(e,t,r,i)),e.length>80*i){a=1/0,A=1/0;let t=-1/0,s=-1/0;for(let r=i;r<n;r+=i){const i=e[r],n=e[r+1];i<a&&(a=i),n<A&&(A=n),i>t&&(t=i),n>s&&(s=n)}l=Math.max(t-a,s-A),l=0!==l?32767/l:0}return earcutLinked(r,o,i,a,A,l,0),o}function linkedList(e,t,i,s,n){let r;if(n===function signedArea(e,t,i,s){let n=0;for(let r=t,o=i-s;r<i;r+=s)n+=(e[o]-e[r])*(e[r+1]+e[o+1]),o=r;return n}(e,t,i,s)>0)for(let n=t;n<i;n+=s)r=insertNode(n/s|0,e[n],e[n+1],r);else for(let n=i-s;n>=t;n-=s)r=insertNode(n/s|0,e[n],e[n+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,s=e;do{if(i=!1,s.steiner||!equals(s,s.next)&&0!==area(s.prev,s,s.next))s=s.next;else{if(removeNode(s),s=t=s.prev,s===s.next)break;i=!0}}while(i||s!==t);return t}function earcutLinked(e,t,i,s,n,r,o){if(!e)return;!o&&r&&function indexCurve(e,t,i,s){let n=e;do{0===n.z&&(n.z=zOrder(n.x,n.y,t,i,s)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next}while(n!==e);n.prevZ.nextZ=null,n.prevZ=null,function sortLinked(e){let t,i=1;do{let s,n=e;e=null;let r=null;for(t=0;n;){t++;let o=n,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||n.z<=o.z)?(s=n,n=n.nextZ,a--):(s=o,o=o.nextZ,A--),r?r.nextZ=s:e=s,s.prevZ=r,r=s;n=o}r.nextZ=null,i*=2}while(t>1);return e}(n)}(e,s,n,r);let a=e;for(;e.prev!==e.next;){const A=e.prev,l=e.next;if(r?isEarHashed(e,s,n,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,s,n,r,2):2===o&&splitEarcut(e,t,i,s,n,r):earcutLinked(filterPoints(e),t,i,s,n,r,1);break}}}function isEar(e){const t=e.prev,i=e,s=e.next;if(area(t,i,s)>=0)return!1;const n=t.x,r=i.x,o=s.x,a=t.y,A=i.y,l=s.y,c=Math.min(n,r,o),h=Math.min(a,A,l),p=Math.max(n,r,o),u=Math.max(a,A,l);let g=s.next;for(;g!==t;){if(g.x>=c&&g.x<=p&&g.y>=h&&g.y<=u&&pointInTriangleExceptFirst(n,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,s){const n=e.prev,r=e,o=e.next;if(area(n,r,o)>=0)return!1;const a=n.x,A=r.x,l=o.x,c=n.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,s),I=zOrder(d,f,t,i,s);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!==n&&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!==n&&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!==n&&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!==n&&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 s=i.prev,n=i.next.next;!equals(s,n)&&intersects(s,i,i.next,n)&&locallyInside(s,n)&&locallyInside(n,s)&&(t.push(s.i,i.i,n.i),removeNode(i),removeNode(i.next),i=e=n),i=i.next}while(i!==e);return filterPoints(i)}function splitEarcut(e,t,i,s,n,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,s,n,r,0),void earcutLinked(a,t,i,s,n,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 s=e.x,n=e.y;let r,o=-1/0;if(equals(e,i))return i;do{if(equals(e,i.next))return i.next;if(n<=i.y&&n>=i.next.y&&i.next.y!==i.y){const e=i.x+(n-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=s&&e>o&&(o=e,r=i.x<i.next.x?i:i.next,e===s))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(s>=i.x&&i.x>=A&&s!==i.x&&pointInTriangle(n<l?s:o,n,A,l,n<l?o:s,n,i.x,i.y)){const t=Math.abs(n-i.y)/(s-i.x);locallyInside(i,e)&&(t<c||t===c&&(i.x>r.x||i.x===r.x&§orContainsSector(r,i)))&&(r=i,c=t)}i=i.next}while(i!==a);return r}(e,t);if(!i)return t;const s=splitPolygon(i,e);return filterPoints(s,s.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,s,n){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*n|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-s)*n|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,s,n,r,o,a){return(n-o)*(t-a)>=(e-o)*(r-a)&&(e-o)*(s-a)>=(i-o)*(t-a)&&(i-o)*(r-a)>=(n-o)*(s-a)}function pointInTriangleExceptFirst(e,t,i,s,n,r,o,a){return!(e===o&&t===a)&&pointInTriangle(e,t,i,s,n,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,s=!1;const n=(e.x+t.x)/2,r=(e.y+t.y)/2;do{i.y>r!=i.next.y>r&&i.next.y!==i.y&&n<(i.next.x-i.x)*(r-i.y)/(i.next.y-i.y)+i.x&&(s=!s),i=i.next}while(i!==e);return s}(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,s){const n=sign(area(e,t,i)),r=sign(area(e,t,s)),o=sign(area(i,s,e)),a=sign(area(i,s,t));return n!==r&&o!==a||(!(0!==n||!onSegment(e,i,t))||(!(0!==r||!onSegment(e,s,t))||(!(0!==o||!onSegment(i,e,s))||!(0!==a||!onSegment(i,t,s)))))}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),s=createNode(t.i,t.x,t.y),n=e.next,r=t.prev;return e.next=t,t.prev=e,i.next=n,n.prev=i,s.next=i,i.prev=s,r.next=s,s.prev=r,s}function insertNode(e,t,i,s){const n=createNode(e,t,i);return s?(n.next=s.next,n.prev=s,s.next.prev=n,s.next=n):(n.prev=n,n.next=n),n}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 s=new Map,n=[],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(s.has(g))o.push(s.get(g));else{const e=n.length/3;s.set(g,e),n.push(l,c,h),r.push(p,u),o.push(e)}}return{vertices:n,uvs:r,indices:o}}function infoestrudi(e,t,i,s,n){s||(s={}),i||(i=[]);let r=s.p0||0,o=Math.tan(s.coeffbase1*Ue||0),a=Math.tan(s.coeffbase2*Ue||0),A=t||s.p1||20,l=Math.tan(s.coefftop1*Ue||0),c=Math.tan(s.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,n),e.z2=getzeta(e.x,e.y,A,l,c,n),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:s.coeffbase1||0,aini2:s.coeffbase2||0,afin:s.coefftop1||0,afin2:s.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,s,n,r,o=!1){let a=e*s+t*n+i;if(r){let e=r.xfromy(-t,0,!0);o?a-=e:a=e}return a}function sidegeomfromshapes(t,i,s,n,r=!1,o=!1,a=!1){if(s&&n){if(s.length!==n.length)throw new Error("shapes with different length");if(s.length<2)throw new Error("I percorsi devono contenere almeno due punti ciascuno.");if(!t.geo[i]){const A=[],l=[],c=[],h=s.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,s)=>{r?c.push(e,i,t,i,s,t):c.push(e,t,i,i,t,s)};addpts(s),addpts(n);for(let e=0;e<h-1;e++){const t=e+1;equalpos(s[e],s[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,s,n,r=0,o=0,a=0,A=null,l=!1,c=!1){let h=`bg:${r}|${o}${a}|${s.key}|${i}|${A?.key||""}|${c?1:0}`;for(let p of n)h=`${h}|${p.key}`;if(h=hash(h),!t.geo[h]){let u,g=[],d=[],f=s.pt.length;g=s.vec;const m=new e.BufferGeometry,I=[],b=[],y=[];function addvertexes(e,t){let s=I.length/3;for(let s=0;s<e.length;s++){const n=e[s],l=t[2*n],h=-t[2*n+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+s,t+s+2,t+s+1):y.push(t+s,t+s+1,t+s+2)}if(A){let C=s.sliceony(A);for(let B of C){let E=B.flatMap((e=>[e.x,e.y]));addvertexes(earcut(E,[]),E)}}else if(Array.isArray(n)&&n.length){for(let x of n)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,s,n,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=s||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(n){if(!a.nobase){let e=r;b&&(e=Array.isArray(b)?e.filter(((e,t)=>!b[t])):[]);let i=bottomgeomfromshape(t,!a.notop,n,C?[]:e,A,l,c,d,!1,a.uvswap);a.nolines||B.add(edgesfromgeometry(i)),B.add(getmesh(i,o[0]||_i))}if(!a.notop){let e=r;I&&(e=Array.isArray(I)?e.filter(((e,t)=>!I[t])):[]);let i=bottomgeomfromshape(t,!1,n,C?[]:e,h,p,u,g,!1,a.uvswap);B.add(getmesh(i,o[1]||o[0]||_i)),a.nolines||B.add(edgesfromgeometry(i))}if(!a.nosides){let e=n.to3d(0,A,l,-c,C,d,!y),i=n.to3d(1,h,p,-u,C,g,y),s=`${n.key}${y?1:0}|${A}|${h}|${l}|${c||f}|${p}|${u||m}|${C}|${a.wvswap?1:0}`,E=sidegeomfromshapes(t,s,e,i,!1,!1,a.uvswap);if(a.nolines||a.nosidelines||B.add(edgesfromgeometry(E)),B.add(getmesh(E,o[2]||o[0]||_i)),r&&!C)for(let n=0;n<r.length;n++){let g=r[n];if(Array.isArray(I)){if(I[n])continue}else if(I)continue;if(Array.isArray(b)){if(b[n])continue}else if(b)continue;e=g.to3d(0,A,l,c),i=g.to3d(0,h,p,u),s=`${g.key}|${A}|${h}|${l}|${c}|${p}|${u}`;let d=sidegeomfromshapes(t,s,e,i,!0);a.nolines||a.nosidelines||B.add(edgesfromgeometry(d)),B.add(getmesh(d,o[3]||o[0]||_i))}}return estrusorotate(i,B,s)}return B}function revolve(t,i,s,n,r){r||(r={});let o=r.segmenti??12,a=hash(`rev|${i.key}|${s}|${o}|${r?.uvswap}`),A=t.geo[a],l=new e.Group;if(!A){const s=i.pt.map((t=>new e.Vector2(t.x,t.y)));A=new e.LatheGeometry(s,o,0,2*Math.PI),uvswap(A,r.uvswap,!0),t.geo[a]=A}const c=new e.Mesh(A,n);return l.add(c),r.nolines||r.nosidelines||l.add(edgesfromgeometry(A)),l}function estrusopat(t,i,s,n,r,o,a){a||(a={});let A=a.invert;o||(o=[]);let l=a.open,c=a.closepat;if(!s.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(n[0],s.pt[0],s.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]||_i)),i.add(edgesfromgeometry(l));let c=s.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(s.pt[s.npt-2],s.pt[s.npt-1],n[s.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]||_i)),i.add(edgesfromgeometry(l));let c=s.infosegmento(s.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,s,n,r,o,a=!1){let A=`bsg:${i.key}|${s.key}|${r}|${o}|${a}`;if(s.npt==n.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=s.pt,d=s.npt;const f=.001,addpts=(t,i,s,n)=>{for(const r of t){let t=new e.Vector3(r.x,r.y,r.x*n);t.applyMatrix4(i),l.push(t.x,t.y,t.z),a?c.push(r.u*f,(r.v+s)*f):c.push((r.v+s)*f,r.u*f)}};let m=d;for(let t=0;t<d;t++){let r;r=t<d-1?angle3point(n[t],g[t],g[t+1])+Math.PI/2:-(angle3point(g[t-1],g[t],n[t])+Math.PI/2);let o=-Math.tan(r),a=s.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=s.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],n[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,s)=>{o?h.push(e,i,t,i,s,t):h.push(e,t,i,i,t,s)},s=t+1;equalpos(i[t],i[s])||addindexquad(t+e*p,s+e*p,t+(e+1)*p,s+(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,s,n,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]||_i)))}return estrusorotate(i,p,0)}async function spritemat(t,i){try{let s={transparent:!0,depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1};if(i.startsWith("#"))s.color=i;else{let e=await t.tex(i,1e3,1e3);e?s.map=e:s.color="black"}return new e.SpriteMaterial(s)}catch(e){return _i}}function getsprite0(t,i,s,n,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,s,n),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,s,n,r="yellow",o){o||(o={size:20}),o.screen=!0;const a=await function createCircleTexture(t,i=64,s="rgba(255,0,0,1)"){const n=`ct|${i}|${s}`;if(!t.textures[n]){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=s,o.beginPath(),o.arc(a,a,a,0,2*Math.PI),o.fill();const A=new e.CanvasTexture(r);A.needsUpdate=!0,t.textures[n]=A}return t.textures[n]}(t,64,r);return getsprite0(!0,i,s,n,new e.SpriteMaterial({map:a,transparent:!0,fog:!1,toneMapped:!1}),o)}function getsprite(e,t,i,s,n,r={}){return getsprite0(!1,t,i,s,n,r)}class GLTFLoader extends n{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,s){const n=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){s?s(t):console.error(t),n.manager.itemError(e),n.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{n.parse(i,a,(function(i){t(i),n.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,s){let n;const r={},o={},a=new TextDecoder;if("string"==typeof e)n=JSON.parse(e);else if(e instanceof ArrayBuffer){if(a.decode(new Uint8Array(e,0,4))===Wi){try{r[ji.KHR_BINARY_GLTF]=new GLTFBinaryExtension(e)}catch(e){return void(s&&s(e))}n=JSON.parse(r[ji.KHR_BINARY_GLTF].content)}else n=JSON.parse(a.decode(e))}else n=e;if(void 0===n.asset||n.asset.version[0]<2)return void(s&&s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const A=new GLTFParser(n,{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(n.extensionsUsed)for(let e=0;e<n.extensionsUsed.length;++e){const t=n.extensionsUsed[e],i=n.extensionsRequired||[];switch(t){case ji.KHR_MATERIALS_UNLIT:r[t]=new GLTFMaterialsUnlitExtension;break;case ji.KHR_DRACO_MESH_COMPRESSION:r[t]=new GLTFDracoMeshCompressionExtension(n,this.dracoLoader);break;case ji.KHR_TEXTURE_TRANSFORM:r[t]=new GLTFTextureTransformExtension;break;case ji.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,s)}parseAsync(e,t){const i=this;return new Promise((function(s,n){i.parse(e,t,s,n)}))}}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 ji={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=ji.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i<s;i++){const s=t[i];s.extensions&&s.extensions[this.name]&&void 0!==s.extensions[this.name].light&&e._addNodeRef(this.cache,s.extensions[this.name].light)}}_loadLight(e){const t=this.parser,i="light:"+e;let s=t.cache.get(i);if(s)return s;const n=t.json,r=((n.extensions&&n.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),s=Promise.resolve(o),t.cache.add(i,s),s}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,i=this.parser,s=i.json.nodes[e],n=(s.extensions&&s.extensions[this.name]||{}).light;return void 0===n?null:this._loadLight(n).then((function(e){return i._getNodeRef(t.cache,n,e)}))}}class GLTFMaterialsUnlitExtension{constructor(){this.name=ji.KHR_MATERIALS_UNLIT}getMaterialType(){return Y}extendParams(e,t,i){const s=[];e.color=new l(1,1,1),e.opacity=1;const n=t.pbrMetallicRoughness;if(n){if(Array.isArray(n.baseColorFactor)){const t=n.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],c),e.opacity=t[3]}void 0!==n.baseColorTexture&&s.push(i.assignTexture(e,"map",n.baseColorTexture,h))}return Promise.all(s)}}class GLTFMaterialsEmissiveStrengthExtension{constructor(e){this.parser=e,this.name=ji.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 s=i.extensions[this.name].emissiveStrength;return void 0!==s&&(t.emissiveIntensity=s),Promise.resolve()}}class GLTFMaterialsClearcoatExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];if(void 0!==r.clearcoatFactor&&(t.clearcoat=r.clearcoatFactor),void 0!==r.clearcoatTexture&&n.push(i.assignTexture(t,"clearcoatMap",r.clearcoatTexture)),void 0!==r.clearcoatRoughnessFactor&&(t.clearcoatRoughness=r.clearcoatRoughnessFactor),void 0!==r.clearcoatRoughnessTexture&&n.push(i.assignTexture(t,"clearcoatRoughnessMap",r.clearcoatRoughnessTexture)),void 0!==r.clearcoatNormalTexture&&(n.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(n)}}class GLTFMaterialsDispersionExtension{constructor(e){this.parser=e,this.name=ji.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 s=i.extensions[this.name];return t.dispersion=void 0!==s.dispersion?s.dispersion:0,Promise.resolve()}}class GLTFMaterialsIridescenceExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return void 0!==r.iridescenceFactor&&(t.iridescence=r.iridescenceFactor),void 0!==r.iridescenceTexture&&n.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&&n.push(i.assignTexture(t,"iridescenceThicknessMap",r.iridescenceThicknessTexture)),Promise.all(n)}}class GLTFMaterialsSheenExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[];t.sheenColor=new l(0,0,0),t.sheenRoughness=0,t.sheen=1;const r=s.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&&n.push(i.assignTexture(t,"sheenColorMap",r.sheenColorTexture,h)),void 0!==r.sheenRoughnessTexture&&n.push(i.assignTexture(t,"sheenRoughnessMap",r.sheenRoughnessTexture)),Promise.all(n)}}class GLTFMaterialsTransmissionExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return void 0!==r.transmissionFactor&&(t.transmission=r.transmissionFactor),void 0!==r.transmissionTexture&&n.push(i.assignTexture(t,"transmissionMap",r.transmissionTexture)),Promise.all(n)}}class GLTFMaterialsVolumeExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];t.thickness=void 0!==r.thicknessFactor?r.thicknessFactor:0,void 0!==r.thicknessTexture&&n.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(n)}}class GLTFMaterialsIorExtension{constructor(e){this.parser=e,this.name=ji.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 s=i.extensions[this.name];return t.ior=void 0!==s.ior?s.ior:1.5,Promise.resolve()}}class GLTFMaterialsSpecularExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];t.specularIntensity=void 0!==r.specularFactor?r.specularFactor:1,void 0!==r.specularTexture&&n.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&&n.push(i.assignTexture(t,"specularColorMap",r.specularColorTexture,h)),Promise.all(n)}}class GLTFMaterialsBumpExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return t.bumpScale=void 0!==r.bumpFactor?r.bumpFactor:1,void 0!==r.bumpTexture&&n.push(i.assignTexture(t,"bumpMap",r.bumpTexture)),Promise.all(n)}}class GLTFMaterialsAnisotropyExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return void 0!==r.anisotropyStrength&&(t.anisotropy=r.anisotropyStrength),void 0!==r.anisotropyRotation&&(t.anisotropyRotation=r.anisotropyRotation),void 0!==r.anisotropyTexture&&n.push(i.assignTexture(t,"anisotropyMap",r.anisotropyTexture)),Promise.all(n)}}class GLTFTextureBasisUExtension{constructor(e){this.parser=e,this.name=ji.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,i=t.json,s=i.textures[e];if(!s.extensions||!s.extensions[this.name])return null;const n=s.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,n.source,r)}}class GLTFTextureWebPExtension{constructor(e){this.parser=e,this.name=ji.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,s=i.json,n=s.textures[e];if(!n.extensions||!n.extensions[t])return null;const r=n.extensions[t],o=s.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(n){if(n)return i.loadTextureImage(e,r.source,a);if(s.extensionsRequired&&s.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=ji.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,s=i.json,n=s.textures[e];if(!n.extensions||!n.extensions[t])return null;const r=n.extensions[t],o=s.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(n){if(n)return i.loadTextureImage(e,r.source,a);if(s.extensionsRequired&&s.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=ji.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],s=this.parser.getDependency("buffer",e.buffer),n=this.parser.options.meshoptDecoder;if(!n||!n.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 s.then((function(t){const i=e.byteOffset||0,s=e.byteLength||0,r=e.count,o=e.byteStride,a=new Uint8Array(t,i,s);return n.decodeGltfBufferAsync?n.decodeGltfBufferAsync(r,o,a,e.mode,e.filter).then((function(e){return e.buffer})):n.ready.then((function(){const t=new ArrayBuffer(r*o);return n.decodeGltfBuffer(new Uint8Array(t),r,o,a,e.mode,e.filter),t}))}))}return null}}class GLTFMeshGpuInstancing{constructor(e){this.name=ji.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 s=t.meshes[i.mesh];for(const e of s.primitives)if(e.mode!==Zi.TRIANGLES&&e.mode!==Zi.TRIANGLE_STRIP&&e.mode!==Zi.TRIANGLE_FAN&&void 0!==e.mode)return null;const n=i.extensions[this.name].attributes,r=[],o={};for(const e in n)r.push(this.parser.getDependency("accessor",n[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],s=e[0].count,n=[];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,s);for(let e=0;e<s;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),n.push(A)}return t.isGroup?(t.clear(),t.add(...n),t):n[0]})))}}const Wi="glTF",Ji=1313821514,Ki=5130562;class GLTFBinaryExtension{constructor(e){this.name=ji.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!==Wi)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const s=this.header.length-12,n=new DataView(e,12);let r=0;for(;r<s;){const t=n.getUint32(r,!0);r+=4;const s=n.getUint32(r,!0);if(r+=4,s===Ji){const s=new Uint8Array(e,12+r,t);this.content=i.decode(s)}else if(s===Ki){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=ji.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const i=this.json,s=this.dracoLoader,n=e.extensions[this.name].bufferView,r=e.extensions[this.name].attributes,o={},a={},A={};for(const e in r){const t=ss[e]||e.toLowerCase();o[t]=r[e]}for(const t in e.attributes){const s=ss[t]||t.toLowerCase();if(void 0!==r[t]){const n=i.accessors[e.attributes[t]],r=$i[n.componentType];A[s]=r.name,a[s]=!0===n.normalized}}return t.getDependency("bufferView",n).then((function(e){return new Promise((function(t,i){s.decodeDracoFile(e,(function(e){for(const t in e.attributes){const i=e.attributes[t],s=a[t];void 0!==s&&(i.normalized=s)}t(e)}),o,A,c,i)}))}))}}class GLTFTextureTransformExtension{constructor(){this.name=ji.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=ji.KHR_MESH_QUANTIZATION}}class GLTFCubicSplineInterpolant extends he{constructor(e,t,i,s){super(e,t,i,s)}copySampleValue_(e){const t=this.resultBuffer,i=this.sampleValues,s=this.valueSize,n=e*s*3+s;for(let e=0;e!==s;e++)t[e]=i[n+e];return t}interpolate_(e,t,i,s){const n=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=2*o,A=3*o,l=s-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,s=r[u+e+o],A=r[u+e]*l;n[e]=m*t+I*i+d*s+f*A}return n}}const Vi=new m;class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant{interpolate_(e,t,i,s){const n=super.interpolate_(e,t,i,s);return Vi.fromArray(n).normalize().toArray(n),n}}const Zi={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},$i={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},es={9728:L,9729:S,9984:M,9985:D,9986:P,9987:v},ts={33071:_,33648:k,10497:T},is={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ss={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"},ns={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},rs={CUBICSPLINE:void 0,LINEAR:ne,STEP:se},os="OPAQUE",as="MASK",As="BLEND";function addUnknownExtensionsToUserData(e,t,i){for(const s in i.extensions)void 0===e[s]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[s]=i.extensions[s])}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,s=t.weights.length;i<s;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,s=i.length;t<s;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[ji.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,s=e.targets.length;i<s;i++)t+=":"+createAttributesKey(e.targets[i]);return t}function createAttributesKey(e){let t="";const i=Object.keys(e).sort();for(let s=0,n=i.length;s<n;s++)t+=i[s]+":"+e[i[s]]+";";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 ls=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,s=-1,n=!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+)/);s=i&&t?parseInt(t[1],10):-1,n=e.indexOf("Firefox")>-1,r=n?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||i&&s<17||n&&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,s=this.json,n=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][s.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:s.asset,parser:i,userData:{}};return addUnknownExtensionsToUserData(n,r,s),assignExtrasToUserData(r,s),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,s=t.length;i<s;i++){const s=t[i].joints;for(let t=0,i=s.length;t<i;t++)e[s[t]].isBone=!0}for(let t=0,s=e.length;t<s;t++){const s=e[t];void 0!==s.mesh&&(this._addNodeRef(this.meshCache,s.mesh),void 0!==s.skin&&(i[s.mesh].isSkinnedMesh=!0)),void 0!==s.camera&&this._addNodeRef(this.cameraCache,s.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 s=i.clone(),updateMappings=(e,t)=>{const i=this.associations.get(e);null!=i&&this.associations.set(t,i);for(const[i,s]of e.children.entries())updateMappings(s,t.children[i])};return updateMappings(i,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){const s=e(t[i]);if(s)return s}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const i=[];for(let s=0;s<t.length;s++){const n=e(t[s]);n&&i.push(n)}return i}getDependency(e,t){const i=e+":"+t;let s=this.cache.get(i);if(!s){switch(e){case"scene":s=this.loadScene(t);break;case"node":s=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":s=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":s=this.loadAccessor(t);break;case"bufferView":s=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":s=this.loadBuffer(t);break;case"material":s=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":s=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":s=this.loadSkin(t);break;case"animation":s=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":s=this.loadCamera(t);break;default:if(s=this._invokeOne((function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)})),!s)throw new Error("Unknown type: "+e)}this.cache.add(i,s)}return s}getDependencies(e){let t=this.cache.get(e);if(!t){const i=this,s=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(s.map((function(t,s){return i.getDependency(e,s)}))),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[ji.KHR_BINARY_GLTF].body);const s=this.options;return new Promise((function(e,n){i.load(r.resolveURL(t.uri,s.path),e,void 0,(function(){n(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,s=t.byteOffset||0;return e.slice(s,s+i)}))}loadAccessor(e){const t=this,i=this.json,s=this.json.accessors[e];if(void 0===s.bufferView&&void 0===s.sparse){const e=is[s.type],t=$i[s.componentType],i=!0===s.normalized,n=new t(s.count*e);return Promise.resolve(new E(n,e,i))}const n=[];return void 0!==s.bufferView?n.push(this.getDependency("bufferView",s.bufferView)):n.push(null),void 0!==s.sparse&&(n.push(this.getDependency("bufferView",s.sparse.indices.bufferView)),n.push(this.getDependency("bufferView",s.sparse.values.bufferView))),Promise.all(n).then((function(e){const n=e[0],r=is[s.type],o=$i[s.componentType],a=o.BYTES_PER_ELEMENT,A=a*r,l=s.byteOffset||0,c=void 0!==s.bufferView?i.bufferViews[s.bufferView].byteStride:void 0,h=!0===s.normalized;let p,u;if(c&&c!==A){const e=Math.floor(l/c),i="InterleavedBuffer:"+s.bufferView+":"+s.componentType+":"+e+":"+s.count;let A=t.cache.get(i);A||(p=new o(n,e*c,s.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===n?new o(s.count*r):new o(n,l,s.count*r),u=new E(p,r,h);if(void 0!==s.sparse){const t=is.SCALAR,i=$i[s.sparse.indices.componentType],a=s.sparse.indices.byteOffset||0,A=s.sparse.values.byteOffset||0,l=new i(e[1],a,s.sparse.count*t),c=new o(e[2],A,s.sparse.count*r);null!==n&&(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,s=t.textures[e].source,n=t.images[s];let r=this.textureLoader;if(n.uri){const e=i.manager.getHandler(n.uri);null!==e&&(r=e)}return this.loadTextureImage(e,s,r)}loadTextureImage(e,t,i){const s=this,n=this.json,r=n.textures[e],o=n.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=(n.samplers||{})[r.sampler]||{};return t.magFilter=es[i.magFilter]||S,t.minFilter=es[i.minFilter]||v,t.wrapS=ts[i.wrapS]||T,t.wrapT=ts[i.wrapT]||T,s.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=A,A}loadImageSource(e,t){const i=this,s=this.json,n=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((e=>e.clone()));const o=s.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,s){let o=i;!0===t.isImageBitmapLoader&&(o=function(e){const t=new re(e);t.needsUpdate=!0,i(t)}),t.load(r.resolveURL(e,n.path),o,void 0,s)}))})).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,s){const n=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),n.extensions[ji.KHR_TEXTURE_TRANSFORM]){const e=void 0!==i.extensions?i.extensions[ji.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=n.associations.get(r);r=n.extensions[ji.KHR_TEXTURE_TRANSFORM].extendTexture(r,e),n.associations.set(r,t)}}return void 0!==s&&(r.colorSpace=s),e[t]=r,r}))}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const s=void 0===t.attributes.tangent,n=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(s||n||r){let e="ClonedMaterial:"+i.uuid+":";s&&(e+="derivative-tangents:"),n&&(e+="vertex-colors:"),r&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=i.clone(),n&&(t.vertexColors=!0),r&&(t.flatShading=!0),s&&(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,s=this.extensions,n=i.materials[e];let r;const o={},a=[];if((n.extensions||{})[ji.KHR_MATERIALS_UNLIT]){const e=s[ji.KHR_MATERIALS_UNLIT];r=e.getMaterialType(),a.push(e.extendParams(o,n,t))}else{const i=n.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===n.doubleSided&&(o.side=G);const p=n.alphaMode||os;if(p===As?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,p===as&&(o.alphaTest=void 0!==n.alphaCutoff?n.alphaCutoff:.5)),void 0!==n.normalTexture&&r!==Y&&(a.push(t.assignTexture(o,"normalMap",n.normalTexture)),o.normalScale=new A(1,1),void 0!==n.normalTexture.scale)){const e=n.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==n.occlusionTexture&&r!==Y&&(a.push(t.assignTexture(o,"aoMap",n.occlusionTexture)),void 0!==n.occlusionTexture.strength&&(o.aoMapIntensity=n.occlusionTexture.strength)),void 0!==n.emissiveFactor&&r!==Y){const e=n.emissiveFactor;o.emissive=(new l).setRGB(e[0],e[1],e[2],c)}return void 0!==n.emissiveTexture&&r!==Y&&a.push(t.assignTexture(o,"emissiveMap",n.emissiveTexture,h)),Promise.all(a).then((function(){const i=new r(o);return n.name&&(i.name=n.name),assignExtrasToUserData(i,n),t.associations.set(i,{materials:e}),n.extensions&&addUnknownExtensionsToUserData(s,i,n),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,s=this.primitiveCache;function createDracoPrimitive(e){return i[ji.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(i){return addPrimitiveAttributes(i,e,t)}))}const n=[];for(let i=0,r=e.length;i<r;i++){const r=e[i],o=createPrimitiveKey(r),a=s[o];if(a)n.push(a.promise);else{let e;e=r.extensions&&r.extensions[ji.KHR_DRACO_MESH_COMPRESSION]?createDracoPrimitive(r):addPrimitiveAttributes(new X,r,t),s[o]={primitive:r,promise:e},n.push(e)}}return Promise.all(n)}loadMesh(e){const t=this,n=this.json,r=this.extensions,o=n.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(n){const A=n.slice(0,n.length-1),l=n[n.length-1],c=[];for(let n=0,h=l.length;n<h;n++){const h=l[n],p=a[n];let u;const g=A[n];if(p.mode===Zi.TRIANGLES||p.mode===Zi.TRIANGLE_STRIP||p.mode===Zi.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===Zi.TRIANGLE_STRIP?u.geometry=toTrianglesDrawMode(u.geometry,s):p.mode===Zi.TRIANGLE_FAN&&(u.geometry=toTrianglesDrawMode(u.geometry,i));else if(p.mode===Zi.LINES)u=new H(h,g);else if(p.mode===Zi.LINE_STRIP)u=new j(h,g);else if(p.mode===Zi.LINE_LOOP)u=new W(h,g);else{if(p.mode!==Zi.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,s=c.length;i<s;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],s=i[i.type];if(s)return"perspective"===i.type?t=new V(Z.radToDeg(s.yfov),s.aspectRatio||1,s.znear||1,s.zfar||2e6):"orthographic"===i.type&&(t=new $(-s.xmag,s.xmag,s.ymag,-s.ymag,s.znear,s.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,s=t.joints.length;e<s;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(),s=e,n=[],r=[];for(let e=0,o=s.length;e<o;e++){const o=s[e];if(o){n.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(n,r)}))}loadAnimation(e){const t=this.json,i=this,s=t.animations[e],n=s.name?s.name:"animation_"+e,r=[],o=[],a=[],A=[],l=[];for(let e=0,t=s.channels.length;e<t;e++){const t=s.channels[e],i=s.samplers[t.sampler],n=t.target,c=n.node,h=void 0!==s.parameters?s.parameters[i.input]:i.input,p=void 0!==s.parameters?s.parameters[i.output]:i.output;void 0!==n.node&&(r.push(this.getDependency("node",c)),o.push(this.getDependency("accessor",h)),a.push(this.getDependency("accessor",p)),A.push(i),l.push(n))}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],s=e[1],r=e[2],o=e[3],a=e[4],A=[];for(let e=0,n=t.length;e<n;e++){const n=t[e],l=s[e],c=r[e],h=o[e],p=a[e];if(void 0===n)continue;n.updateMatrix&&n.updateMatrix();const u=i._createAnimationTracks(n,l,c,h,p);if(u)for(let e=0;e<u.length;e++)A.push(u[e])}return new te(n,void 0,A)}))}createNodeMesh(e){const t=this.json,i=this,s=t.nodes[e];return void 0===s.mesh?null:i.getDependency("mesh",s.mesh).then((function(e){const t=i._getNodeRef(i.meshCache,s.mesh,e);return void 0!==s.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,i=s.weights.length;t<i;t++)e.morphTargetInfluences[t]=s.weights[t]})),t}))}loadNode(e){const t=this,i=this.json.nodes[e],s=t._loadNodeShallow(e),n=[],r=i.children||[];for(let e=0,i=r.length;e<i;e++)n.push(t.getDependency("node",r[e]));const o=void 0===i.skin?Promise.resolve(null):t.getDependency("skin",i.skin);return Promise.all([s,Promise.all(n),o]).then((function(e){const t=e[0],i=e[1],s=e[2];null!==s&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(s,ls)}));for(let e=0,s=i.length;e<s;e++)t.add(i[e]);return t}))}_loadNodeShallow(e){const t=this.json,i=this.extensions,s=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const n=t.nodes[e],r=n.name?s.createUniqueName(n.name):"",o=[],a=s._invokeOne((function(t){return t.createNodeMesh&&t.createNodeMesh(e)}));return a&&o.push(a),void 0!==n.camera&&o.push(s.getDependency("camera",n.camera).then((function(e){return s._getNodeRef(s.cameraCache,n.camera,e)}))),s._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===n.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(n.name&&(o.userData.name=n.name,o.name=r),assignExtrasToUserData(o,n),n.extensions&&addUnknownExtensionsToUserData(i,o,n),void 0!==n.matrix){const e=new d;e.fromArray(n.matrix),o.applyMatrix4(e)}else void 0!==n.translation&&o.position.fromArray(n.translation),void 0!==n.rotation&&o.quaternion.fromArray(n.rotation),void 0!==n.scale&&o.scale.fromArray(n.scale);return s.associations.has(o)||s.associations.set(o,{}),s.associations.get(o).nodes=e,o})),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],s=this,n=new K;i.name&&(n.name=s.createUniqueName(i.name)),assignExtrasToUserData(n,i),i.extensions&&addUnknownExtensionsToUserData(t,n,i);const r=i.nodes||[],o=[];for(let e=0,t=r.length;e<t;e++)o.push(s.getDependency("node",r[e]));return Promise.all(o).then((function(e){for(let t=0,i=e.length;t<i;t++)n.add(e[t]);return s.associations=(e=>{const t=new Map;for(const[e,i]of s.associations)(e instanceof F||e instanceof re)&&t.set(e,i);return e.traverse((e=>{const i=s.associations.get(e);null!=i&&t.set(e,i)})),t})(n),n}))}_createAnimationTracks(e,t,i,s,n){const r=[],o=e.name?e.name:e.uuid,a=[];let A;switch(ns[n.path]===ns.weights?e.traverse((function(e){e.morphTargetInfluences&&a.push(e.name?e.name:e.uuid)})):a.push(o),ns[n.path]){case ns.weights:A=ae;break;case ns.rotation:A=Ae;break;case ns.position:case ns.scale:A=oe;break;default:if(1===i.itemSize)A=ae;else A=oe}const l=void 0!==s.interpolation?rs[s.interpolation]:ne,c=this._getArrayFromAccessor(i);for(let e=0,i=a.length;e<i;e++){const i=new A(a[e]+"."+ns[n.path],t.array,c,l);"CUBICSPLINE"===s.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 s=0,n=t.length;s<n;s++)i[s]=t[s]*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 s=t.attributes,n=[];function assignAttributeAccessor(t,s){return i.getDependency("accessor",t).then((function(t){e.setAttribute(s,t)}))}for(const t in s){const i=ss[t]||t.toLowerCase();i in e.attributes||n.push(assignAttributeAccessor(s[t],i))}if(void 0!==t.indices&&!e.index){const s=i.getDependency("accessor",t.indices).then((function(t){e.setIndex(t)}));n.push(s)}return le.workingColorSpace!==c&&"COLOR_0"in s&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${le.workingColorSpace}" not supported.`),assignExtrasToUserData(e,t),function computeBounds(e,t,i){const s=t.attributes,n=new pe;if(void 0===s.POSITION)return;{const e=i.json.accessors[s.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(n.set(new f(t[0],t[1],t[2]),new f(r[0],r[1],r[2])),e.normalized){const t=getNormalizedComponentScale($i[e.componentType]);n.min.multiplyScalar(t),n.max.multiplyScalar(t)}}const r=t.targets;if(void 0!==r){const e=new f,t=new f;for(let s=0,n=r.length;s<n;s++){const n=r[s];if(void 0!==n.POSITION){const s=i.json.accessors[n.POSITION],r=s.min,o=s.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]))),s.normalized){const e=getNormalizedComponentScale($i[s.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}n.expandByVector(e)}e.boundingBox=n;const o=new ue;n.getCenter(o.center),o.radius=n.min.distanceTo(n.max)/2,e.boundingSphere=o}(e,t,i),Promise.all(n).then((function(){return void 0!==t.targets?function addMorphTargets(e,t,i){let s=!1,n=!1,r=!1;for(let e=0,i=t.length;e<i;e++){const i=t[e];if(void 0!==i.POSITION&&(s=!0),void 0!==i.NORMAL&&(n=!0),void 0!==i.COLOR_0&&(r=!0),s&&n&&r)break}if(!s&&!n&&!r)return Promise.resolve(e);const o=[],a=[],A=[];for(let l=0,c=t.length;l<c;l++){const c=t[l];if(s){const t=void 0!==c.POSITION?i.getDependency("accessor",c.POSITION):e.attributes.position;o.push(t)}if(n){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 s&&(e.morphAttributes.position=i),n&&(e.morphAttributes.normal=o),r&&(e.morphAttributes.color=a),e.morphTargetsRelative=!0,e}))}(e,t.targets,i):e}))}const cs=new WeakMap;class DRACOLoader extends n{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,s){const n=new o(this.manager);n.setPath(this.path),n.setResponseType("arraybuffer"),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(e,(e=>{this.parse(e,t,s)}),i,s)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,h,i).catch(i)}decodeDracoFile(e,t,i,s,n=c,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:n};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(cs.has(e)){const t=cs.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 s;const n=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(n,r).then((i=>(s=i,new Promise(((i,r)=>{s._callbacks[n]={resolve:i,reject:r},s.postMessage({type:"decode",id:n,taskConfig:t,buffer:e},[e])}))))).then((e=>this._createGeometry(e.geometry)));return o.catch((()=>!0)).then((()=>{s&&n&&this._releaseTask(s,n)})),cs.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 s=e.attributes[i],n=s.name,r=s.array,o=s.itemSize,a=new E(r,o);"color"===n&&(this._assignVertexColorSpace(a,s.vertexColorSpace),a.normalized=r instanceof Float32Array==!1),t.setAttribute(n,a)}return t}_assignVertexColorSpace(e,t){if(t!==h)return;const i=new l;for(let t=0,s=e.count;t<s;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,s)=>{i.load(e,t,void 0,s)}))}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 s=DRACOWorker.toString(),n=["/* draco decoder */",i,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([n]))})),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,s,n,r){const o=r.num_components(),a=i.num_points()*o,A=a*n.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,n),c=e._malloc(A);t.GetAttributeDataArrayForAllPoints(i,r,l,A,c);const h=new n(e.HEAPF32.buffer,c,a).slice();return e._free(c),{name:s,array:h,itemSize:o}}onmessage=function(i){const s=i.data;switch(s.type){case"init":e=s.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const i=s.buffer,n=s.taskConfig;t.then((e=>{const t=e.draco,r=new t.Decoder;try{const e=function decodeGeometry(e,t,i,s){const n=s.attributeIDs,r=s.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 n){const a=self[r[i]];let A,c;if(s.useUniqueIDs)c=n[i],A=t.GetAttributeByUniqueId(o,c);else{if(c=t.GetAttributeId(o,e[n[i]]),-1===c)continue;A=t.GetAttribute(o,c)}const h=decodeAttribute(e,t,o,i,a,A);"color"===i&&(h.vertexColorSpace=s.vertexColorSpace),l.attributes.push(h)}A===e.TRIANGULAR_MESH&&(l.index=function decodeIndex(e,t,i){const s=i.num_faces(),n=3*s,r=4*n,o=e._malloc(r);t.GetTrianglesUInt32Array(i,r,o);const a=new Uint32Array(e.HEAPF32.buffer,o,n).slice();return e._free(o),{array:a,itemSize:1}}(e,t,o));return e.destroy(o),l}(t,r,new Int8Array(i),n),o=e.attributes.map((e=>e.array.buffer));e.index&&o.push(e.index.array.buffer),self.postMessage({type:"decode",id:s.id,geometry:e},o)}catch(e){console.error(e),self.postMessage({type:"error",id:s.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:s}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,s)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise((i=>{const s=this._getIdleWorker();-1!==s?(this._initWorker(s),this.workerStatus|=1<<s,this.workersResolve[s]=i,this.workers[s].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 hs=9,ps=15,us=16,gs=22,ds=37,fs=43,ms=76,Is=83,bs=97,ys=100,Cs=103,Bs=109,Es=165,xs=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,s){this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=s,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 s=0;for(;this._dataView.getUint8(this._offset)!==t&&s<e;)s++,this._offset++;return s<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,s)}}const Qs=[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 ws,vs,Ps;const Ds={env:{emscripten_notify_memory_growth:function(e){Ps=new Uint8Array(vs.exports.memory.buffer)}}};class Q{init(){return ws||(ws="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+Ms).then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,Ds))).then(this._init):WebAssembly.instantiate(Buffer.from(Ms,"base64"),Ds).then(this._init),ws)}_init(e){vs=e.instance,Ds.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!vs)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=e.byteLength,s=vs.exports.malloc(i);Ps.set(e,s),t=t||Number(vs.exports.ZSTD_findDecompressedSize(s,i));const n=vs.exports.malloc(t),r=vs.exports.ZSTD_decompress(n,t,s,i),o=Ps.slice(n,n+r);return vs.exports.free(s),vs.exports.free(n),o}}const Ms="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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+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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",Ss=new WeakMap;let Ls,Ts=0;class KTX2Loader extends n{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 s=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,s]).then((([e,t])=>{const i=KTX2Loader.BasisWorker.toString(),s=["/* 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([s])),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}))})),Ts>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Ts++}return this.transcoderPending}load(e,t,i,s){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const n=new o(this.manager);n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials),n.load(e,(e=>{this.parse(e,t,s)}),i,s)}parse(e,t,i){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Ss.has(e)){return Ss.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:s,height:n,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,s,n,t.layerCount,r,de):new me(e,s,n,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,Qs.length);if(t[0]!==Qs[0]||t[1]!==Qs[1]||t[2]!==Qs[2]||t[3]!==Qs[3]||t[4]!==Qs[4]||t[5]!==Qs[5]||t[6]!==Qs[6]||t[7]!==Qs[7]||t[8]!==Qs[8]||t[9]!==Qs[9]||t[10]!==Qs[10]||t[11]!==Qs[11])throw new Error("Missing KTX 2.0 identifier.");const i=new Si,s=17*Uint32Array.BYTES_PER_ELEMENT,n=new Ii(e,Qs.length,s,!0);i.vkFormat=n._nextUint32(),i.typeSize=n._nextUint32(),i.pixelWidth=n._nextUint32(),i.pixelHeight=n._nextUint32(),i.pixelDepth=n._nextUint32(),i.layerCount=n._nextUint32(),i.faceCount=n._nextUint32();const r=n._nextUint32();i.supercompressionScheme=n._nextUint32();const o=n._nextUint32(),a=n._nextUint32(),A=n._nextUint32(),l=n._nextUint32(),c=n._nextUint64(),h=n._nextUint64(),p=new Ii(e,Qs.length+s,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),s=Ei(t),n=f._scan(e-t.byteLength);i.keyValue[s]=s.match(/^ktx/i)?Ei(n):n,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),L=new Uint8Array(e.buffer,e.byteOffset+P,B),T=new Uint8Array(e.buffer,e.byteOffset+D,E);return i.globalData={endpointCount:I,selectorCount:b,imageDescs:x,endpointsData:M,selectorsData:S,tablesData:L,extendedData:T},i}(new Uint8Array(e));if(0!==i.vkFormat)return async function createRawTexture(e){const{vkFormat:t}=e;if(void 0===_s[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let i;2===e.supercompressionScheme&&(Ls||(Ls=new Promise((async e=>{const t=new Q;await t.init(),e(t)}))),i=await Ls);const s=[];for(let n=0;n<e.levels.length;n++){const r=Math.max(1,e.pixelWidth>>n),o=Math.max(1,e.pixelHeight>>n),a=e.pixelDepth?Math.max(1,e.pixelDepth>>n):0,A=e.levels[n];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=Rs[t]===we?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):Rs[t]===Qe?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,s.push({data:c,width:r,height:o,depth:a})}let n;if(ks.has(_s[t]))n=0===e.pixelDepth?new ve(s[0].data,e.pixelWidth,e.pixelHeight):new Pe(s[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");n=new me(s,e.pixelWidth,e.pixelHeight)}return n.mipmaps=s,n.type=Rs[t],n.format=_s[t],n.colorSpace=parseColorSpace(e),n.needsUpdate=!0,Promise.resolve(n)}(i);const s=t,n=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:s},[e]))).then((e=>this._createTextureFrom(e.data,i)));return Ss.set(e,{promise:n}),n}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Ts--,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:Te,RGB_ETC1_Format:Le,RGB_ETC2_Format:Se,RGB_PVRTC_4BPPV1_Format:Me,RGBA_S3TC_DXT1_Format:De},KTX2Loader.BasisWorker=function(){let e,t,i;const s=_EngineFormat,n=_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 s=0;s<p.length;s++){const n=p[s];if(e[n.if]&&(n.basisFormat.includes(t)&&!(l&&n.transcoderFormat.length<2)&&(!n.needsPowerOfTwo||isPowerOfTwo(i)&&isPowerOfTwo(o))))return c=n.transcoderFormat[l?1:0],h=n.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=n.RGBA32,h=s.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 s=[];let n,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?(n=a.origWidth,r=a.origHeight):(n=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.");s.push(A)}const a=concat(s);t.push({data:a,width:n,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:[n.ASTC_4x4,n.ASTC_4x4],engineFormat:[s.RGBA_ASTC_4x4_Format,s.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.BC7_M5,n.BC7_M5],engineFormat:[s.RGBA_BPTC_Format,s.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.BC1,n.BC3],engineFormat:[s.RGBA_S3TC_DXT1_Format,s.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.ETC1,n.ETC2],engineFormat:[s.RGB_ETC2_Format,s.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.ETC1],engineFormat:[s.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.PVRTC1_4_RGB,n.PVRTC1_4_RGBA],engineFormat:[s.RGB_PVRTC_4BPPV1_Format,s.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 s=0;for(let t=0;t<e.length;t++){const n=e[t];i.set(n,s),s+=n.byteLength}return i}};const ks=new Set([xe,Ee,Be]),_s={[Bs]:xe,[bs]:xe,[ds]:xe,[fs]:xe,[Cs]:Ee,[Is]:Ee,[us]:Ee,[gs]:Ee,[ys]:Be,[ms]:Be,[ps]:Be,[hs]:Be,[xs]:Ce,[Es]:Ce},Rs={[Bs]:we,[bs]:Qe,[ds]:de,[fs]:de,[Cs]:we,[Is]:Qe,[us]:de,[gs]:de,[ys]:we,[ms]:Qe,[ps]:de,[hs]:de,[xs]:de,[Es]: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 Fs=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,s=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",n=WebAssembly.instantiate(unpack(s),{}).then((function(e){(i=e.instance).exports.__wasm_call_ctors()}));function unpack(e){for(var i=new Uint8Array(e.length),s=0;s<e.length;++s){var n=e.charCodeAt(s);i[s]=n>96?n-97:n>64?n-39:n+4}var r=0;for(s=0;s<e.length;++s)i[r++]=i[s]<60?t[i[s]]:64*(i[s]-60)+i[++s];return i.buffer.slice(0,r)}function decode(e,t,s,n,r,o){var a=i.exports.sbrk,A=s+3&-4,l=a(A*n),c=a(r.length),h=new Uint8Array(i.exports.memory.buffer);h.set(r,c);var p=e(l,s,n,c,r.length);if(0==p&&o&&o(l,A,n),t.set(h.subarray(l,l+s*n)),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(s))+"]), {}).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"}),n=URL.createObjectURL(i),r=0;r<e;++r)a[r]=createWorker(n);URL.revokeObjectURL(n)}function workerProcess(e){n.then((function(){var t=e.data;try{var s=new Uint8Array(t.count*t.size);decode(i.exports[t.mode],s,t.count,t.size,t.source,i.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:"resolve",value:s},[s.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:"reject",value:e})}}))}return{ready:n,supported:!0,useWorkers:function(e){initWorkers(e)},decodeVertexBuffer:function(e,t,s,n,o){decode(i.exports.meshopt_decodeVertexBuffer,e,t,s,n,i.exports[r[o]])},decodeIndexBuffer:function(e,t,s,n){decode(i.exports.meshopt_decodeIndexBuffer,e,t,s,n)},decodeIndexSequence:function(e,t,s,n){decode(i.exports.meshopt_decodeIndexSequence,e,t,s,n)},decodeGltfBuffer:function(e,t,s,n,a,A){decode(i.exports[o[a]],e,t,s,n,i.exports[r[A]])},decodeGltfBufferAsync:function(e,t,s,l,c){return a.length>0?function decodeWorker(e,t,i,s,n){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:s,filter:n},[l.buffer])}))}(e,t,s,o[l],r[c]):n.then((function(){var n=new Uint8Array(e*t);return decode(i.exports[o[l]],n,e,t,s,i.exports[r[c]]),n}))}}}();class TDSLoader extends n{constructor(e){super(e),this.debug=!1,this.group=null,this.materials=[],this.meshes=[]}load(e,t,i,s){const n=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(n.parse(i,a))}catch(t){s?s(t):console.error(t),n.manager.itemError(e)}}),i,s)}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),s=new Chunk(i,0,this.debugMessage);if(s.id===Os||s.id===Gs||s.id===Ns){let e=s.readChunk();for(;e;){if(e.id===Ys){const t=e.readDWord();this.debugMessage("3DS file version: "+t)}else e.id===Ws?this.readMeshData(e,t):this.debugMessage("Unknown main chunk: "+e.hexId);e=s.readChunk()}}this.debugMessage("Parsed "+this.meshes.length+" meshes")}readMeshData(e,t){let i=e.readChunk();for(;i;){if(i.id===Js){const e=+i.readDWord();this.debugMessage("Mesh Version: "+e)}else if(i.id===Ks){const e=i.readFloat();this.debugMessage("Master scale: "+e),this.group.scale.set(e,e,e)}else i.id===In?(this.debugMessage("Named Object"),this.readNamedObject(i)):i.id===Vs?(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===bn){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 s=new Ne;for(;i;){if(i.id===Zs)s.name=i.readString(),this.debugMessage(" Name: "+s.name);else if(i.id===an)this.debugMessage(" Wireframe"),s.wireframe=!0;else if(i.id===An){const e=i.readByte();s.wireframeLinewidth=e,this.debugMessage(" Wireframe Thickness: "+e)}else if(i.id===rn)s.side=G,this.debugMessage(" DoubleSided");else if(i.id===on)this.debugMessage(" Additive Blending"),s.blending=Oe;else if(i.id===en)this.debugMessage(" Diffuse Color"),s.color=this.readColor(i);else if(i.id===tn)this.debugMessage(" Specular Color"),s.specular=this.readColor(i);else if(i.id===$s)this.debugMessage(" Ambient color"),s.color=this.readColor(i);else if(i.id===sn){const e=this.readPercentage(i);s.shininess=100*e,this.debugMessage(" Shininess : "+e)}else if(i.id===nn){const e=this.readPercentage(i);s.opacity=1-e,this.debugMessage(" Transparency : "+e),s.transparent=s.opacity<1}else i.id===ln?(this.debugMessage(" ColorMap"),s.map=this.readMap(i,t)):i.id===hn?(this.debugMessage(" BumpMap"),s.bumpMap=this.readMap(i,t)):i.id===cn?(this.debugMessage(" OpacityMap"),s.alphaMap=this.readMap(i,t)):i.id===pn?(this.debugMessage(" SpecularMap"),s.specularMap=this.readMap(i,t)):this.debugMessage(" Unknown material chunk: "+i.hexId);i=e.readChunk()}this.materials[s.name]=s}readMesh(e){let t=e.readChunk();const i=new X,s=new Ne,n=new z(i,s);for(n.name="mesh";t;){if(t.id===yn){const e=t.readWord();this.debugMessage(" Vertex: "+e);const s=[];for(let i=0;i<e;i++)s.push(t.readFloat()),s.push(t.readFloat()),s.push(t.readFloat());i.setAttribute("position",new Ge(s,3))}else if(t.id===Cn)this.readFaceArray(t,n);else if(t.id===En){const e=t.readWord();this.debugMessage(" UV: "+e);const s=[];for(let i=0;i<e;i++)s.push(t.readFloat()),s.push(t.readFloat());i.setAttribute("uv",new Ge(s,2))}else if(t.id===xn){this.debugMessage(" Tranformation Matrix (TODO)");const e=[];for(let i=0;i<12;i++)e[i]=t.readFloat();const s=new d;s.elements[0]=e[0],s.elements[1]=e[6],s.elements[2]=e[3],s.elements[3]=e[9],s.elements[4]=e[2],s.elements[5]=e[8],s.elements[6]=e[5],s.elements[7]=e[11],s.elements[8]=e[1],s.elements[9]=e[7],s.elements[10]=e[4],s.elements[11]=e[10],s.elements[12]=0,s.elements[13]=0,s.elements[14]=0,s.elements[15]=1,s.transpose();const r=new d;r.copy(s).invert(),i.applyMatrix4(r),s.decompose(n.position,n.quaternion,n.scale)}else this.debugMessage(" Unknown mesh chunk: "+t.hexId);t=e.readChunk()}return i.computeVertexNormals(),n}readFaceArray(e,t){const i=e.readWord();this.debugMessage(" Faces: "+i);const s=[];for(let t=0;t<i;++t)s.push(e.readWord(),e.readWord(),e.readWord()),e.readWord();t.geometry.setIndex(s);let n=0,r=0;for(;!e.endOfChunk;){const i=e.readChunk();if(i.id===Bn){this.debugMessage(" Material Group");const e=this.readMaterialGroup(i),s=3*e.index.length;t.geometry.addGroup(r,s,n),r+=s,n++;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(),s={};const n=new C(this.manager);for(n.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);i;){if(i.id===un){const e=i.readString();s=n.load(e),s.userData.name=e.split(".").slice(0,-1).join("."),this.debugMessage(" File: "+t+e)}else i.id===fn?(s.offset.x=i.readFloat(),this.debugMessage(" OffsetX: "+s.offset.x)):i.id===mn?(s.offset.y=i.readFloat(),this.debugMessage(" OffsetY: "+s.offset.y)):i.id===gn?(s.repeat.x=i.readFloat(),this.debugMessage(" RepeatX: "+s.repeat.x)):i.id===dn?(s.repeat.y=i.readFloat(),this.debugMessage(" RepeatY: "+s.repeat.y)):this.debugMessage(" Unknown map chunk: "+i.hexId);i=e.readChunk()}return s}readMaterialGroup(e){const t=e.readString(),i=e.readWord();this.debugMessage(" Name: "+t),this.debugMessage(" Faces: "+i);const s=[];for(let t=0;t<i;++t)s.push(e.readWord());return{name:t,index:s}}readColor(e){const t=e.readChunk(),i=new l;if(t.id===Xs||t.id===qs){const e=t.readByte(),s=t.readByte(),n=t.readByte();i.setRGB(e/255,s/255,n/255),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else if(t.id===Us||t.id===zs){const e=t.readFloat(),s=t.readFloat(),n=t.readFloat();i.setRGB(e,s,n),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 Hs:return t.readShort()/100;case js: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 Ns=19789,Os=15786,Gs=49725,Ys=2,Us=16,Xs=17,qs=18,zs=19,Hs=48,js=49,Ws=15677,Js=15678,Ks=256,Vs=45055,Zs=40960,$s=40976,en=40992,tn=41008,sn=41024,nn=41040,rn=41089,on=41091,an=41093,An=41095,ln=41472,cn=41488,hn=41520,pn=41476,un=41728,gn=41812,dn=41814,fn=41816,mn=41818,In=16384,bn=16640,yn=16656,Cn=16672,Bn=16688,En=16704,xn=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 s=1-("number"==typeof t.shininess?Math.min(Math.max(t.shininess,0),100):30)/100,n=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:s,metalness:0});return i&&i.set(t,n),"function"==typeof t.dispose&&(t.dispose(),t.userData=t.userData||{},t.userData._replaced=!0),n.needsUpdate=!0,n};function newgcad(t,i,s,n=!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(Fs);let b=[s],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(((s,n)=>{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,s(e)}),void 0,(e=>{console.log(e),delete a[i],s(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 s=(e=e.split("+"))[1];e=e[0];const n=hash(`${getcat()}|${e}${i}`);a[n]||(a[n]=await new Promise(((s,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=n,s(t)}),void 0,(e=>{console.log(e),delete a[n],s(void 0)}))})));let r=a[n];if(s){let e=r?.getObjectByName(s);e&&(r=e)}return r}return{clearmatricole:()=>{y={},u=[]},P:t,bus:i,tex:async function tex(i,s=1,n,r){let a;return n||(n=s),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}|${s}|${n}|${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(s,n),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(s,n),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 s=parseInt(t,10);return s>=1&&s<=9?s:-1};let s=!1,n=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]&&(s=!0,n+="|"+(t[i-1].name||t[i-1].uuid))}})),s){if(n=hash(n),a[n])return a[n];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,s=leggi_slot(i);e.material=s>0&&t[s-1]?(t[s-1].needsUpdate=!0,t[s-1]):i}})),i.userData=i.userData||{},i.userData._ky=n,a[n]=i,e=i}return e},islog:n,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,s=0){let n=(e||"").endsWith(".3ds")?await get3ds(e):await getglb(e);if(n)return t&&1!=t&&(n.scale.set(t||1,i||t||1,s||t||1),n.needsUpdate=!0),getdims(n)},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 s;try{s=await t.fetch("mufiles/customfn",{id:getcat(),name:e,ispar:1})}catch(t){s=`log('undefined ${getcat()}/${e}: ${t.message}');`}p[i]=s}return p[i]},checkScripts:async function checkScripts(e){let i=[];if(!e||!Array.isArray(e))return;let s=getcat();e=[...e,"_ricalcolatop","_ricalcolaaltri","_ricalcolalinee"];for(let t of e){let e=hash(`${s}|${t}`);p[e]||i.push(t)}if(i?.length){let e=await t.fetch("mufiles/customfn",{id:s,name:i,ispar:1});if(e)for(let t of e){let e=hash(`${s}|${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 Qn=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];Qn.has(e)||Qn.set(e,i)}))}function ripristinaMaterialiOriginali(){for(let[e,t]of Qn.entries())e.material=Array.isArray(t)?[...t]:t;Qn.clear()}function applicaEvidenziazione(e,t,i,s){!function ricorsiva(e,n,r){const o=!!n||!!t&&t.includes(e?.userData?.mat),a=r||e.userData?.evidenziaMap;if(e.isMesh&&e.layers.mask<=1<<20){const t=Qn.get(e);if(!t)return;const n=t.map((e=>{const t=(o?s: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)?n:n[0]}e.children.forEach((e=>ricorsiva(e,o,a)))}(e,!1,!1)}async function evidenziaColli(t,i,s){salvaMaterialiOriginali(t);const n=e.DoubleSide,r=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:n}),o=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:n});let a=0;try{for(let e of i)a++,e.name||(e.name=`collo_${a}`),applicaEvidenziazione(t,e.mats,r,o),await s(e)}catch(e){console.error("Errore durante evidenzia:",e)}finally{ripristinaMaterialiOriginali()}}async function runScript(t,i,s,n,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 s=!1;for(const e of t)!e.startsWith('"')&&e.includes("=")?(i.push(e),s=!0):s&&(i[i.length-1]+=","+e)}const s={};for(const e of i){let{v:t,o:i}=getcouple(e,"=",!1);i=i||"",t&&(/^[-+]?\d*\.?\d+$/.test(i)&&(i=parseFloat(i)),s[t]=i)}return s}(o.pars+("string"==typeof n?"\n"+n:""));function setmatricola(e){return e?.userData&&(e.userData.mat=`${i}_${t.gmats[i]}`),e}n&&"object"==typeof n&&(l={...l,...n}),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,n,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(s.DB&&n){let t={lev:"string"==typeof e?clean(e,!0):"l"+(e+(s?._level??0)),mat:a,cod:n,note:r||"",qt:A,l:l,a:c,p:h,vars:p};u&&(t.shape=u),d&&(t.lavs=d),g&&(t.model=g),s.DB.push(t)}return a}function addtop(e,t,i={}){i||(i={}),s.TOPS.push({key:e,shape:t,type:"top",op:i,posfn:r})}function addhole(e,t,i={}){i||(i={}),s.TOPS.push({key:e,shape:t,type:"hole",op:i,posfn:r})}function addaltri(e,t,i={}){i||(i={}),s.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]),s.TOPS.push({key:e,lines:t,type:"lines",op:i,posfn:r}))}function dbdes(e,t){s.DES&&t&&s.DES.push({lev:e+(s?._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={}),s||(s={});const p={GCAD:!0,...s,...l,THREE:e,TODEG:TODEG,TORAD:TORAD,dbadd:dbadd,addtop:addtop,addhole:addhole,addlines:addlines,addaltri:addaltri,dbdes:dbdes,posfn:r,addpivot:(e,i,s={},n=0,r=0,o=0)=>setmatricola(addmovpivot(t,e,i,s,n,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:Ri,mgray2:Fi,mwhite:_i,mred:Ni,mgreen:Gi,mblack:Yi,mblue:Oi,materialline1:Ti,materialline2:ki,scaleunit:Ui,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,s)=>gettarghetta(t,e,i,s),getquota:(e,i,s,n,r,o={})=>getquota(t,e,i,s,n,r,o),getsprite:(e,t,i,s,n)=>getsprite(0,e,t,i,s,n),getpunto:(e,i,s,n,r,o)=>getpunto(t,e,i,s,n,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,texgen:(e,i=256,s={})=>texgen(t,e,i,s),getcilindro:(e,i,s,n,r=_i,o)=>setmatricola(getcilindro(t,e,i,s,n,r,o)),getbox:(e,t,i,s,n)=>setmatricola(getbox(0,e,t,i,s,n)),getsphere:(e,t,i)=>setmatricola(getsphere(0,e,t,i)),replacemats:t.replacemats,getluce:(e,i="#ffffff",s=1)=>getluce(t,e,i,s),getthorus:(e,t,i,s)=>setmatricola(getthorus(0,e,t,i,s)),getcyl:(e,t,i=_i,s)=>setmatricola(getcyl(0,e,t,i,s)),getpannello:(e,i,s,n,r,o,a)=>setmatricola(getpannello(t,e,i,s,n,r,o,a)),getpannello2:(e,i,s,n,r,o)=>setmatricola(getpannello2(t,e,i,s,n,r,o)),getface:(e,i,s,n)=>setmatricola(getface(t,e,i,s,n)),pickvariant:(e,i,s,n,r,o={})=>pickvariant(t,e,i,s,n,r,o),getmarker:(e,i,s,n,r,o={})=>getmarker(t,e,i,s,n,r,o),getglb:e=>setmatricola(t.getglb(e)),get3ds:e=>setmatricola(t.get3ds(e)),estruso:(e,i,s,n,r,o)=>setmatricola(estruso(t,e,i,s,n,r,o)),getextrude:(e,i,s,n,r)=>setmatricola(getextrude(t,e,i,s,n,r)),estrusopat:(e,i,s,n,r,o)=>setmatricola(estrusopat(t,e,i,s,n,r,o)),infoestrudi:infoestrudi,getfakeshadow:(e,i)=>getfakeshadow(t,e,i),getfakeshadow2:getfakeshadow2,revolve:(e,i,s,n)=>setmatricola(revolve(t,e,i,s,n)),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 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 n=shapeclip();const r=[...new Set(i.filter((e=>"top"==e.type)).map(uk))];let o=[],a=0;for(let t of r){let r=i.filter((e=>"top"==e.type&&uk(e)===t));if(r.length){let t=r[0],A=i.filter((e=>"hole"==e.type&&e.key==t.key)),l=[],c=[],h=[];for(let e of r)l.push(e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z));let p=[];for(let e of A){let t=e.op.ptrif,i=e.op.ptapplica,s=e.shape.dims();t=t?[s.p1,...t]:[s.p1,s.p2],i||(i=s.p1);let n=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);p.push({pt:r.pt,shape:n,op:e.op,width:s.width,height:s.height}),e.op?.hidden||c.push(n)}let u,g=n.unisci(l,c,h);for(let t of g){let i=r[0],n=t.shape.rebase(-i.ang),A=t.shape.dims(),l=getshape().fromrect(A.width,A.height,A.p1.x,A.p1.y);n.holes=[],n.cuts=[];for(let e of t.holes)n.holes.push(e.rebase(-i.ang,!0,n.origine.x,n.origine.y));const to2dec=e=>Math.round(100*(Number(e)||0))/100;let c=p.map((e=>{let t=getshape().frompt(e.pt),{shape:s}=t.rebase(-i.ang,!0,n.origine.x,n.origine.y);return{op:e.op,pt:s.pt,px:to2dec(s.pt[0].x),py:to2dec(s.pt[0].y),dx:to2dec(e.width),dy:to2dec(e.height)}})),h=c.filter((e=>{for(let t of e.pt)if(l.pointinshape(t))return!0;return!1}));h.forEach((e=>delete e.pt));let g=[];await runScript(e,"_ricalcolatop",{BOX:g,DB:o,TOPS:[],_level:800,processatop:{top:n,base:i,lavs:h,idt:a}},{}),a++;for(let e of g)u=posiziona(posiziona(e,{sa:i.pos.y||0,sl:n.origine.x,sp:n.origine.y}),{ay:i.ang}),s.add(u)}}}const A=i.filter((e=>"altri"==e.type));let l=[];await runScript(e,"_ricalcolaaltri",{BOX:l,DB:o,TOPS:[],_level:800,processatop:{altri:A,idt:a}},{}),a++;for(let e of l)s.add(e);const uk1=e=>`${e.key}|${e.pos.y}`,c=i.filter((e=>"lines"==e.type)),h=[...new Set(c.map(uk1))];for(let t of h){const i=c.filter((e=>uk1(e)===t)),s=joinlinestoshapes(i);for(let n of s){let s={sh:n,key:t,data:i[0].op||{},idt:a};await runScript(e,"_ricalcolalinee",{BOX:l,DB:o,TOPS:[],_level:800,processatop:s},{})}a++}for(let e of l)s.add(e);return o}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 s=e[i];if(null==s)continue;const n=typeof s;"string"!==n&&"number"!==n&&"boolean"!==n||(t[i]=s)}return t}return function scan(e,t=0){if(!e||t>i)return null;const s={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)&&(s.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)&&(s.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)&&(s.scale={x:r3(e.scale.x),y:r3(e.scale.y),z:r3(e.scale.z)}),e.isMesh&&e.geometry){s.geometry={type:e.geometry.type};const t=e.geometry.parameters;if(t)for(const e in t){const i=t[e];"number"==typeof i&&(s.geometry[e]=r3(i))}}return e.material&&(Array.isArray(e.material)?s.material=e.material.map((e=>e.type||e.name||"Material")):s.material=e.material.type||e.material.name||"Material"),e.children?.length&&(s.children=e.children.map((e=>scan(e,t+1))).filter(Boolean)),s}(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(s){if(s.userData?.markerid)i.set(s.userData.markerid,s);else if(s.name?.startsWith("#mk_")){const n=s.name,r=i.get(n);if(!r)return void t.remove(s);{r.updateMatrixWorld(!0),s.updateMatrixWorld(!0);const t=s,i=trovagenitorerif(r)||r,n=trovagenitorerif(t)||t;if(!i||!n)return;i.updateMatrixWorld(!0),n.updateMatrixWorld(!0),t.updateMatrixWorld(!0);const o=r.matrixWorld.clone(),a=t.matrixWorld.clone(),A=n.matrixWorld.clone().clone().invert().multiply(a),l=o.clone().multiply(A.clone().invert()),c=n.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),n.position.copy(p),n.quaternion.copy(u),n.scale.copy(g),n.updateMatrixWorld(!0),r.visible=!1}}for(const e of[...s.children])traverse(e)}(t)}async function processagruppo(e,t){Object.assign(t.userData,{SHAPES:[],DB:[],TOPS:[]});for(let i of t.userData.INFO.rows)if("fn"==i?.t){let s=creategroup(),n=[];await runScript(e,i.fn,{BOX:n,SHAPES:t.userData.SHAPES,DB:t.userData.DB,TOPS:t.userData.TOPS,_level:t.userData._level},i.pars,i.p2),n.length&&(n.forEach((e=>s.add(e))),Object.keys(i.p2).length&&(s=posiziona(s,i.p2)),t.add(s))}else if(i?.rows&&i.rows.length){let s=creategroup();i.iscad&&(s=posiziona(s,i.cadv)),s.name=i.id,Object.assign(s.userData,{INFO:i,_level:t.userData._level+1}),await processagruppo(e,s),t.add(s)}}function getalldb(t,i){let s=[],n=[],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)&&s.push(...t.userData.DB),t.userData?.TOPS&&t.userData.TOPS.length){t.updateMatrixWorld(),o.copy(t.matrixWorld);let i=o.clone().premultiply(a),s=new e.Vector3;s.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(s.x+h,s.y,s.z+p),g=r-a;n.push({...i,pos:u,ang:g})}else n.push({...i,pos:s,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=s,i.TOPS=n,r=r.filter((e=>e.visible)),i.SHAPES=r),{DB:s,TOPS:n,SHAPES:r}}async function evalcustomfunction(e,t,i,s){try{i||(i={}),s||(s={});const n={GCAD:!1,...i,A:e,V:e.vari,amb:e,info3d:async function info3d(t,i=1,s=0,n=0){if(e.gcad)return await e.gcad.info3d(t,i,s,n)},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,...s},r=[...Object.keys(n),...Object.keys(Xe)],o=[...Object.values(n),...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?(Ti.color.set(16777215),ki.color.set(16777215)):t?(Ti.color.set(2501422),ki.color.set(8421504)):(Ti.color.set(6316128),ki.color.set(8421504)),Ti.needsUpdate=!0,ki.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,clamp,clean,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,Ti as materialline1,ki as materialline2,Yi as mblack,Oi as mblue,Ri as mgray1,Fi as mgray2,Gi as mgreen,Ni as mred,_i as mwhite,newgcad,normal2,pickvariant,posiziona,processagruppo,processamarker,processatop,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,round,runScript,salvaMaterialiOriginali,scalaoggetto,Ui 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 s,Loader as n,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 L,RepeatWrapping as T,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 se,InterpolateLinear as ne,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 Le,RGBA_S3TC_DXT5_Format as Te,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),s=Math.cos(t),n=[...this.m];this.m[1]=n[1]*s+n[9]*i,this.m[2]=n[2]*s+n[10]*i,this.m[3]=n[3]*s+n[11]*i,this.m[9]=n[1]*-i+n[9]*s,this.m[10]=n[2]*-i+n[10]*s,this.m[11]=n[3]*-i+n[11]*s}return this}rotateY(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),s=Math.cos(t),n=[...this.m];this.m[0]=n[0]*s+n[8]*i,this.m[1]=n[1]*s+n[9]*i,this.m[2]=n[2]*s+n[10]*i,this.m[3]=n[3]*s+n[11]*i,this.m[8]=n[0]*-i+n[8]*s,this.m[9]=n[1]*-i+n[9]*s,this.m[10]=n[2]*-i+n[10]*s,this.m[11]=n[3]*-i+n[11]*s}return this}rotateZ(e){if(e){const t=(e||0)*Math.PI/180,i=Math.sin(t),s=Math.cos(t),n=[...this.m];this.m[0]=n[0]*s+n[4]*i,this.m[1]=n[1]*s+n[5]*i,this.m[2]=n[2]*s+n[6]*i,this.m[3]=n[3]*s+n[7]*i,this.m[4]=n[0]*-i+n[4]*s,this.m[5]=n[1]*-i+n[5]*s,this.m[6]=n[2]*-i+n[6]*s,this.m[7]=n[3]*-i+n[7]*s}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 s=t*Math.PI/180,n=this.x+e*Math.cos(s),r=this.y+e*Math.sin(s),o=s+Math.PI/2,a=n+i*Math.cos(o),A=r+i*Math.sin(o);return new Linea2(n,r,a,A)}angolo3p(e,t){let i=this;const s=e.x-i.x,n=e.y-i.y,r=t.x-i.x,o=t.y-i.y,a=s*r+n*o,A=Math.hypot(s,n),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,s=null){"number"==typeof e&&"number"==typeof t&&null!==i&&null!==s?(this.p1=new Punto2({x:e,y:t}),this.p2=new Punto2({x:i,y:s})):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:s,dy:n,len:r}=this;return r?(s/=r,n/=r,e>0?new Linea2(t,new Punto2(i.x+s*e,i.y+n*e)):new Linea2(new Punto2(t.x+s*e,t.y+n*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,s=this.puntot(i);this.p2=s}}proiezionet(e){const{p1:t,dx:i,dy:s,len2:n}=this;if(n<Ye)return;const r=((e.x-t.x)*i+(e.y-t.y)*s)/n;return{p:new Punto2(t.x+r*i,t.y+r*s),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:s,p1:n}=this;if(s<1e-9)return;const r=t||s,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:s,p1:n,p2:r}=this;if(s<1e-9)return;const o=t||s,a=new Punto2(n.x+(r.x-n.x)*e,n.y+(r.y-n.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,s=this.p2.y-this.p1.y,n=Math.cos(t),r=Math.sin(t),o=this.p1.x+i*n-s*r,a=this.p1.y+i*r+s*n;return new Linea2(this.p1,{x:o,y:a})}rotatedonp2(e){const t=e*Math.PI/180,i=this.p1.x-this.p2.x,s=this.p1.y-this.p2.y,n=Math.cos(t),r=Math.sin(t),o=this.p2.x+i*n-s*r,a=this.p2.y+i*r+s*n;return new Linea2(this.p2,{x:o,y:a})}ruotata(e=Math.PI/2,t=0,i=!1){const{p1:s,p2:n,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(s,new Punto2(s.x+o,s.y+a)):new Linea2(n,new Punto2(n.x+o,n.y+a))}{let s=new Punto2(i);const n=r.x*Math.cos(e)-r.y*Math.sin(e),o=r.x*Math.sin(e)+r.y*Math.cos(e);new Punto2(n,o);const a=new Linea2(s,new Punto2(s.x+n,s.y+o)),A=this.interseca(a);if(!A)return;const l=new Punto2(A.x+n*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:s,p2:n}=e,r=(i.x-t.x)*(n.y-s.y)-(i.y-t.y)*(n.x-s.x);if(Math.abs(r)<Ye)return null;const o=((s.x-t.x)*(n.y-s.y)-(s.y-t.y)*(n.x-s.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:s}=this,n=s.x-i.x,r=s.y-i.y,o=e.x-i.x,a=e.y-i.y;if(Math.abs(n*a-r*o)>t)return!1;const A=o*n+a*r;if(A<-t)return!1;return!(A>n*n+r*r+t)}distanzaPunto(e){const t=this.proiezione(e);if(!t)return 1e9;const i=e.x-t.x,s=e.y-t.y;return Math.hypot(i,s)}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,s=Math.hypot(t,i);if(!s)return 0;const n=1/s,proj=e=>(e.x*t+e.y*i)*n,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:s}=this;let{p1:n,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,n)>distance2(t,r)&&([n,r]=[r,n]);const o=getangle(t,i);function toDeg(e){return Math.round(18e4*e/Math.PI)/1e3}const a=toDeg(wrapToPi(getangle(t,n)-o)),A=toDeg(wrapToPi(getangle(i,r)-o)),l=Math.round(100*this.len)/100,c=n.x-t.x,h=n.y-t.y,p=Math.round(100*Math.abs(c*s.x+h*s.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),s=new Punto2(this.p2.x+t.x*e,this.p2.y+t.y*e);return new Linea2(i,s)}angolo(e){const{dx:t,dy:i}=this;let s;if(e){const{dx:n,dy:r}=e,o=Math.atan2(i,t);s=Math.atan2(r,n)-o}else s=Math.atan2(i,t);return s>Math.PI?s-=2*Math.PI:s<-Math.PI&&(s+=2*Math.PI),s}ortopt(e){let{p1:t,dx:i,dy:s}=this;const n=Math.hypot(i,s);if(n<Ye)return;const r=-s/n,o=i/n;return{x:t.x+r*e,y:t.y+o*e}}offsetline(e){let{p1:t,p2:i,dx:s,dy:n}=this;const r=Math.hypot(s,n);if(r<Ye)return;const o=-n/r,a=s/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,s=e.p1.x-t.x,n=e.p1.y-t.y,r=Math.abs(s*i.x+n*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,s=Ye){const n=(i.x-t.x)*(e.y-t.y)-(i.y-t.y)*(e.x-t.x);return!(Math.abs(n)>s)&&(Math.min(t.x,i.x)-s<=e.x&&e.x<=Math.max(t.x,i.x)+s&&Math.min(t.y,i.y)-s<=e.y&&e.y<=Math.max(t.y,i.y)+s)}const{p1:s,p2:n}=this,{p1:r,p2:o}=e;return isPointBetween(r,s,n)||isPointBetween(o,s,n)||isPointBetween(s,r,o)||isPointBetween(n,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),s=Math.sin(t);function rotate(e){return new Punto2(e.x*i-e.y*s,e.x*s+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 s,n,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?(s=a-A+2,n=A+c-a+2,s<n?(r=A,o=a+1):(r=a,o=A+c+1)):(s=A-a+2,n=a+c-A+2,s<n?(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,s,n,r=(t.stack||"").match(/user-script\.js:(\d+):(\d+)/);if(r||(r=(t.toString()||"").match(/user-script\.js:(\d+):(\d+)/)),r&&([,i,s]=r.map(Number),i-=2),(!i||!s)&&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,s=e.loc.column+1)}}return n=i&&s?`ERRORE: ${t.message}\n`+function extractContext(e,t,i,s=1){const n=e.split(/\r?\n/),r=t-1,o=Math.max(0,r-s),a=Math.min(n.length,r+s+1);return n.slice(o,a).map(((e,s)=>o+s+1===t?e+"\n"+" ".repeat(i-1)+"^":e)).join("\n")}(e,i,s):t.message,n}function seedarray(e,t){if(e&&e.length){let i=[];for(let t=0;t<e.length;t++){let s=e[t];if(s.p)for(let e=0;e<s.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(),s="\0";t=i.map((t=>`${t}${s}${String(e[t])}`)).join(s)}let i=2166136261,s=2218511855;for(let e=0;e<t.length;e++){const n=t.charCodeAt(e);i^=n,i+=i<<5^2779096485,s^=i,s=((s<<3)+n^2134516169)>>>0}return i>>>=0,i.toString(16)+s.toString(16)}function clean(e,t=!1){return t?(e||"").trim().toLowerCase():(e||"").trim()}function getcouple(e,t="=",i=!0){const s=(e=e||"").indexOf(t);return s>=0?{v:clean(e.substring(0,s),i),o:e.substring(s+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 s=[];for(let i=e;i<=t;i++)s.push(i+"");return s}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const s=[];let n="",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)n+=i;else{const e=n.trim();s.push(e),n=""}}const a=n.trim();return a&&s.push(a),s.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 s=Math.pow(10,t);return Math.round(i*s)/s||0};function muClComments(e,t){const i=(s=e,s.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||""))).split(/\r?\n/);var s;const n=[];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 n.push(t)}return n}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[s,n]of Object.entries(e))"function"==typeof n||t&&t.includes(s)||(i[s]=getOggetto(n,t));return i}return e}function getSqDist(e,t){let i=e.x-t.x,s=e.y-t.y;return i*i+s*s}function getSqSegDist(e,t,i){let s=t.x,n=t.y,r=i.x-s,o=i.y-n;if(0!==r||0!==o){let t=((e.x-s)*r+(e.y-n)*o)/(r*r+o*o);t>1?(s=i.x,n=i.y):t>0&&(s+=r*t,n+=o*t)}return r=e.x-s,o=e.y-n,r*r+o*o}function simplifyDPStep(e,t,i,s,n){let r,o=s;for(let s=t+1;s<i;s++){let n=getSqSegDist(e[s],e[t],e[i]);n>o&&(r=s,o=n)}o>s&&(r-t>1&&simplifyDPStep(e,t,r,s,n),n.push(e[r]),i-r>1&&simplifyDPStep(e,r,i,s,n))}function simplifyDouglasPeucker(e,t){let i=e.length-1,s=[e[0]];return simplifyDPStep(e,0,i,t,s),s.push(e[i]),s}function simplify(e,t,i){if(e.length<=2)return e;let s=void 0!==t?t*t:1;return e=i?e:function simplifyRadialDist(e,t){let i,s=e[0],n=[s];for(let r=1,o=e.length;r<o;r++)i=e[r],getSqDist(i,s)>t&&(n.push(i),s=i);return s!==i&&n.push(i),n}(e,s),e=simplifyDouglasPeucker(e,s)}function mapvertices(e,t){const dist2=(e,t)=>(e.x-t.x)**2+(e.y-t.y)**2;let i=e.length,s=t.length;if(i<2||s<2)return[];let n=[[0,0]];if(i===s){for(let e=1;e<i;e++)n.push([e,e]);return n}if(i>s)for(let r=1,o=0;r<i-1;r++){if(o+1<s){const i=e[r],s=dist2(i,t[o]);dist2(i,t[o+1])<=s&&o++}n.push([r,o])}else for(let r=1,o=0;r<s-1;r++){if(o+1<i){const i=t[r],s=dist2(i,e[o]);dist2(i,e[o+1])<=s&&o++}n.push([o,r])}return n.push([i-1,s-1]),n}function dxfbulge(e,t,i,s=0){const n=[];if(!i||Math.abs(i)<1e-10||0===s)return n;const r=4*Math.atan(i);if(r<0)return dxfbulge(t,e,-i,s).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<=s;e++){const t=I+e/(s+1)*r,i=f+l*Math.cos(t),o=m+l*Math.sin(t);n.push({x:i,y:o})}return n}function raccordabezier(e,t,i,s,n=10){const r=function getIntersection(e,t,i,s){const n=(e.x-t.x)*(i.y-s.y)-(e.y-t.y)*(i.x-s.x);return 0===n?null:{x:((e.x*t.y-e.y*t.x)*(i.x-s.x)-(e.x-t.x)*(i.x*s.y-i.y*s.x))/n,y:((e.x*t.y-e.y*t.x)*(i.y-s.y)-(e.y-t.y)*(i.x*s.y-i.y*s.x))/n}}(e,t,i,s);if(!r)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const o=r;if(0===n)return[{x:t.x,y:t.y},{x:i.x,y:i.y}];const a=[];for(let e=0;e<=n;e++){const s=e/n,r=1-s,A=r*r*t.x+2*r*s*o.x+s*s*i.x,l=r*r*t.y+2*r*s*o.y+s*s*i.y;a.push({x:A,y:l})}return a}function raccordabezier3(e,t,i,s,n=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(s>l||s>c)return[e,t,i];s!=l&&s!=c||(s-=.01);const h=(l-s)/l,p=s/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,n)}function normal2(e,t){const i=t.x-e.x;let s=-(t.y-e.y),n=i;const r=Math.sqrt(s*s+n*n);return 0===r?{nx:0,ny:0}:{nx:s/r,ny:n/r}}function angle3point(e,t,i){const s=t.x-e.x,n=t.y-e.y,r=i.x-t.x,o=i.y-t.y,a=s*r+n*o,A=s*o-n*r,l=Math.sqrt(s**2+n**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,s=Math.sqrt(e.x*e.x+e.y*e.y),n=Math.sqrt(t.x*t.x+t.y*t.y);if(0===s||0===n)return 0;let r=i/(s*n);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=[],s=e.length;for(let t=0;t<s;t++){const n=e[t],r=e[(t+1)%s];i.push({x:n.x,y:n.y}),r.x,n.x,r.y,n.y}const n=i[0],r=i[i.length-1];return n.x,r.x,n.y,r.y,i}function infocircle(e,t,i,s,n,r){let o,a,A;"object"==typeof e?(o=e,a=t,A=i):(o=new Punto2(e,t),a=new Punto2(i,s),A=new Punto2(n,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,s,n){const r=n.x-s.x,o=n.y-s.y,a=s.x-e,A=s.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=s.x+u*r,f=s.y+u*o,m=s.x+g*r,I=s.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 s=0;s<i;s++){const n=e[s],r=e[(s+1)%i];t+=n.x*r.y-r.x*n.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 s of e)s.x+=t,s.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 s=e[i];if("point"===s.type)t.push(s.point);else if("command"===s.type)switch(s.cmd){case"x":{const n=t[t.length-1],r="point"===e[i+1]?.type?e[i+1].point:t[0],o=parseFloat(s.params[0])||5;{const e=1;let i=r.x-n.x,s=r.y-n.y,a=Math.hypot(i,s);a>1&&t.push(...dxfbulge(n,r,o,Math.floor((a-e)/(e+2))+1))}break}case"b":{if(t.length<2)continue;const n=parseInt(s.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,n);t.push(...l),i+=1;break}case"r":{if(t.length<1)continue;const n=parseFloat(s.params[0])||0;if(n>0){const r=parseInt(s.params[1])||Math.min(n,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,n,r);t.push(...l),i+=1}break}case"c":{let n,r;if(s.params[0].includes("/")){let e=s.params[0].split("/");n=parseFloat(e[0])||50,r=parseFloat(e[1])||n||50}else n=parseFloat(s.params[0])||50,r=n;let o=(parseFloat(s.params[2])||0)*Ue,a=(parseFloat(s.params[3])||0)*Ue;const A=parseInt(s.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,s;if(o||a){let t=a-o;i=n*Math.cos(e/A*t+o),s=r*Math.sin(e/A*t+o)}else i=n*Math.cos(e/A*Math.PI*2+Math.PI),s=r*Math.sin(e/A*Math.PI*2+Math.PI);t.push(new Punto2(l.x+i,l.y+s))}i+=1;break}case"a":{let n,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(s.params[0])n=clamp(parseInt(s.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);n=Math.round(e*Math.sqrt(t/(e+.1))*10),n=clamp(n,1,24),n=1}else o=a,n=0;const A=arcfrom3point(n,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 s=0;for(;s<i.length;){const e=i[s];/^[brcax]/.test(e)?(t.push({type:"command",cmd:e[0],params:e.slice(1).split(":")}),s++):s<i.length-1&&/^-?\d+(\.\d+)?$/.test(i[s])&&/^-?\d+(\.\d+)?$/.test(i[s+1])?(t.push({type:"point",point:new Punto2(parseFloat(i[s]),parseFloat(i[s+1]))}),s+=2):s++}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)}),s=!1;if(4==e.length){const n=.001;function findpunto(t,i){let s=e.find((e=>Math.abs(e.x-t)<n&&Math.abs(e.y-i)<n));return!!s}findpunto(t.x,t.y)&&findpunto(t.x,i.y)&&findpunto(i.x,t.y)&&findpunto(i.x,i.y)&&(s=!0)}return{p1:t,p2:i,isrect:s,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 s=i.x-t.x,n=i.y-t.y,r=180*Math.atan2(n,s)/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,s=0,n=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||(s=a.x,n=a.y),o=o.map((e=>new Punto2(e.x-s,e.y-n))),{shape:getshape().frompt(o),origine:new Punto2(s,n),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=[],s=e.length;if(s<3)return i;for(let n=0;n<s;n++){const r=e[(n-1+s)%s],o=e[n],a=e[(n+1)%s],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:n,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 s=(t+1)%e.length;const n=e[t].x-e[s].x,r=e[t].y-e[s].y;i+=Math.sqrt(n*n+r*r)}return t.lung=i,t},get area(){return Math.abs(e.reduce(((t,i,s)=>{const n=e[(s+1)%e.length];return t+(i.x*n.y-n.x*i.y)}),0)/2)},pointslink(t){let i=mapvertices(e,t.pt),s=[];for(let e of i)s[e[0]]=t.pt[e[1]];return s},alignline(t,i){return e=function stretchShapeToLine(e,t,i){if(!e?.length||!t||!i)return[];const s=e[0],n=e[e.length-1],r=n.x-s.x,o=n.y-s.y,a=Math.atan2(o,r);let A=e.map((e=>({x:e.x-s.x,y:e.y-s.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,s=Math.cos(i),n=Math.sin(i);for(let t of e){const e=t.x*s-t.y*n,i=t.x*n+t.y*s;t.x=e,t.y=i}return this},selezionaprimo:selezionaprimo,segment(t,i=!1){let s=e.length;return t<0&&(t+=s),new Linea2(e[t%s],e[(t+(i?-1:1))%s])},lineoffset(t,i,s){if((t=(t||0)%e.length)!=(i=(i||0)%e.length)){let n=new Linea2(e[t],e[i]);if(n){return n=n.offsetline(-s),this.intersectline(n)}}},orientasplitter(){-1!=orientation()&&e.reverse();let t=e.length;for(let i=0;i<t;i++){let s=new Linea2(e[(t+i-1)%t],e[i]);if(Math.abs(Math.abs(s.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 s=e.length;function clampIndex(e){return(e+s)%s}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 n=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==s?{x:e[1].x+t,y:e[1].y+i}:e[2]}else if(t===s-1){const t=e[s-1].x-e[s-2].x,i=e[s-1].y-e[s-2].y;r=e[s-2],o={x:e[s-1].x+t,y:e[s-1].y+i},a={x:o.x+t,y:o.y+i}}else r=e[t-1],o=e[t+1],a=t+2<s?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),s=clampIndex(t+1),n=clampIndex(t+2);r=e[i],o=e[s],a=e[n]}const A=angle(n,o),l=angle(r,n),c=angle(o,a);return{x:n.x,y:n.y,l:function length(e,t){const i=t.x-e.x,s=t.y-e.y;return Math.sqrt(i*i+s*s)}(n,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:s,y:n,bulge:r}=t[e];if(i.push({x:s,y:n}),r){const o=1;let a={x:s,y:n},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}))),s=[];s.push(i[0]);let n=i[0].y,r=1e-4;for(let e=1;e<i.length;e++)if(i[e].y>n+r||e==i.length-1)s.push(i[e]),n=i[e].y;else{const t=n+r;s.push({x:i[e].x,y:t}),n=t}return{sh:getshape().frompt(s),...t}},offsetshape(e){let t=[],i=this;for(let s=0;s<i.npt-1;s++){let n=i.segment(s).offset(e);t.push(n)}let s=i.segment(0).perpendicolare(),n=i.segment(i.npt-2),r=n.perpendicolare(n.p2),o=[s.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 s=[],n=e.length;let r=0,o=e[0].y;for(let t=1;t<n;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&&s.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];s.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&&s.push(a.slice(h.i1,h.i2+1));return s.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 s=i.p1,n=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(s),o=findIndex(n);if(r<0||o<0)return null;if(r>o){let e=r;r=o,o=e,e=s,s=n,n=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(s),A.push(n),e=o);t?(l.push(n),l.push(s)):l.push(s);for(let e=r+1;e<=o;e++)l.push(this.pt[e]);return t||l.push(n),{sx:getshape().frompt(A),dx:getshape().frompt(l),linea:i}},splitoriz(e){return this.splitvert(e,!1)},splitshape(e,t=!0){const i=100,s=t?{x:e.x,y:e.y-i}:{x:e.x-i,y:e.y},n=t?{x:e.x,y:e.y+i}:{x:e.x+i,y:e.y},r=this.intersectline(new Linea2(s,n));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,s)=>{const n=[];for(let i=e;i!==t;i=(i+1)%c)n.push(this.pt[(i+1)%c]);return n},h=getshape().frompt(loop(A,l));return{sx:getshape().frompt(loop(l,A)),dx:h,linea:r}},xfromy(e,t=0,i=!0){const s=[],n=this.pt.length;for(let t=0;t<n-1;t++){const n=this.pt[t],r=this.pt[t+1];if(n.y<=e&&r.y>=e||r.y<=e&&n.y>=e){const t=r.y-n.y,i=t?(e-n.y)/t:0,o=n.x+i*(r.x-n.x);s.push(o)}else n.y===e&&r.y===e&&s.push(i?Math.max(n.x,r.x):Math.min(n.x,r.x))}return s.length?i?Math.max(...s):Math.min(...s):t},yfromx(e,t=0,i=!0){const s=[],n=this.pt.length;for(let t=0;t<n-1;t++){const n=this.pt[t],r=this.pt[t+1];if(n.x<=e&&r.x>=e||r.x<=e&&n.x>=e){const t=r.x-n.x,i=t?(e-n.x)/t:0,o=n.y+i*(r.y-n.y);s.push(o)}else n.x===e&&r.x===e&&s.push(i?Math.max(n.y,r.y):Math.min(n.y,r.y))}return s.length?i?Math.max(...s):Math.min(...s):t},forcevalues(t,i=!0,s=1e-6){const n=[...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?n.filter((e=>e>l+s&&e<c-s)):n.filter((e=>e<l-s&&e>c+s)).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,s=0,n=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}`),(s||n)&&move(s,n),this},fromrect(t,i,s,n,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 s=e.length,n=new Linea2(t,i);const r=[];for(let t=0;t<e.length;t++){let i=new Linea2(e[t],e[(t+1)%s]),o=i.interseca(n);o&&i.onsegment(o)&&r.push(o)}if(r.length<2)return null;const{dx:o,dy:a}=n;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),s=e.map((e=>`${pstr(e.x)};${pstr(e.y)};`)).join("");return s&&s.length?s.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,s=2,n=!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,s);e=[...e,...r],n&&(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,s=t.y,n=!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>s!=l>s&&i<(A-o)*(s-a)/(l-a)+o&&(n=!n)}return n}(t),azzera(){return e=[],this},truncatebefore:function truncatebefore(t){let i=new Linea2(e[0],e[1]),s=t.interseca(i);if(s){let t=e[0],i=e[1],n=i.x-t.x,r=i.y-t.y,o=n*n+r*r;if(o){if(((s.x-t.x)*n+(s.y-t.y)*r)/o<=1)return e[0]=s,this}}for(let i=1;i<e.length-1;i++){let s=new Linea2(e[i],e[i+1]),n=t.interseca(s);if(n&&s.onsegment(n))return e=e.slice(i),e[0]=n,this}return this},truncateafter:function truncateafter(t){let i=e.length,s=new Linea2(e[i-2],e[i-1]),n=t.interseca(s);if(n){let t=e[i-2],s=e[i-1],r=s.x-t.x,o=s.y-t.y,a=r*r+o*o;if(a){if(((n.x-t.x)*r+(n.y-t.y)*o)/a>=0)return e[i-1]=n,this}}for(let s=i-3;s>=0;s--){let i=new Linea2(e[s],e[s+1]),n=t.interseca(i);if(n&&i.onsegment(n))return e=e.slice(0,s+1),e.push(n),this}return this},removeduplicate(t=.005){return e=removeduplicate(e,t),this},to3d(t,i=0,s=0,n=0,r=!1,o=null,a=!1){let A=function to3dcoor(e,t){let{currentU:i=0,c:s=0,a:n=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=n*p.x+r*p.y+s;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:s,b:n,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 s=this.getboundbox(),n=s.p2.x-s.p1.x,r=s.p2.y-s.p1.y,o=i.x-t.x,a=i.y-t.y,A=Math.min(o/(n||1),a/(r||1));for(let i of e)i.x=(i.x-s.p1.x)*A,i.y=(i.y-s.p1.y)*A,i.x+=t.x,i.y+=t.y;return this}}}function arcfrom3point(e,t,i,s){if(e<=0)return[t,s];if(1===e)return[t,i,s];const n=function findCircleCenter(e,t,i){const s=t.x*t.x+t.y*t.y,n=(e.x*e.x+e.y*e.y-s)/2,r=(s-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((n*(t.y-i.y)-r*(e.y-t.y))/o,((e.x-t.x)*r-(t.x-i.x)*n)/o)}(t,i,s);if(!n){const i=[];for(let n=0;n<=e;n++){const r=n/e;i.push(new Punto2(t.x+(s.x-t.x)*r,t.y+(s.y-t.y)*r))}return i}let r=Math.atan2(t.y-n.y,t.x-n.x);Math.atan2(i.y-n.y,i.x-n.x);let o=Math.atan2(s.y-n.y,s.x-n.x);const a=(i.x-t.x)*(s.y-t.y)-(i.y-t.y)*(s.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-n.x,t.y-n.y),l=(o-r)/e,c=[];for(let t=0;t<=e;t++){const e=r+l*t;c.push(new Punto2(n.x+A*Math.cos(e),n.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)s="chrome",e="Netscape";else{var s=navigator.userAgent.toString().toLowerCase();e=navigator.appName}var n,r={};function BigInteger(e,i,s){t.biginteger_used=1,null!=e&&("number"==typeof e&&void 0===i?this.fromInt(e):"number"==typeof e?this.fromNumber(e,i,s):null==i&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,i))}function nbi(){return new BigInteger(null,void 0,void 0)}-1!=s.indexOf("chrome")&&-1==s.indexOf("chromium")?r.chrome=1:r.chrome=0,-1!=s.indexOf("chromium")?r.chromium=1:r.chromium=0,-1!=s.indexOf("safari")&&-1==s.indexOf("chrome")&&-1==s.indexOf("chromium")?r.safari=1:r.safari=0,-1!=s.indexOf("firefox")?r.firefox=1:r.firefox=0,-1!=s.indexOf("firefox/17")?r.firefox17=1:r.firefox17=0,-1!=s.indexOf("firefox/15")?r.firefox15=1:r.firefox15=0,-1!=s.indexOf("firefox/3")?r.firefox3=1:r.firefox3=0,-1!=s.indexOf("opera")?r.opera=1:r.opera=0,-1!=s.indexOf("msie 10")?r.msie10=1:r.msie10=0,-1!=s.indexOf("msie 9")?r.msie9=1:r.msie9=0,-1!=s.indexOf("msie 8")?r.msie8=1:r.msie8=0,-1!=s.indexOf("msie 7")?r.msie7=1:r.msie7=0,-1!=s.indexOf("msie ")?r.msie=1:r.msie=0,t.biginteger_used=null,"Microsoft Internet Explorer"==e?(BigInteger.prototype.am=function am2(e,t,i,s,n,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;n=((A=o*A+((32767&c)<<15)+i[s]+(1073741823&n))>>>30)+(c>>>15)+a*l+(n>>>30),i[s++]=1073741823&A}return n},n=30):"Netscape"!=e?(BigInteger.prototype.am=function am1(e,t,i,s,n,r){for(;--r>=0;){var o=t*this[e++]+i[s]+n;n=Math.floor(o/67108864),i[s++]=67108863&o}return n},n=26):(BigInteger.prototype.am=function am3(e,t,i,s,n,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;n=((A=o*A+((16383&c)<<14)+i[s]+n)>>28)+(c>>14)+a*l,i[s++]=268435455&A}return n},n=28),BigInteger.prototype.DB=n,BigInteger.prototype.DM=(1<<n)-1,BigInteger.prototype.DV=1<<n,BigInteger.prototype.FV=Math.pow(2,52),BigInteger.prototype.F1=52-n,BigInteger.prototype.F2=2*n-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],s=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,s,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 s=e.length,n=!1,r=0;--s>=0;){var o=8==i?255&e[s]:intAt(e,s);o<0?"-"==e.charAt(s)&&(n=!0):(n=!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(),n&&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,s=e%this.DB,n=this.DB-s,r=(1<<n)-1,o=Math.floor(e/this.DB),a=this.s<<s&this.DM;for(i=this.t-1;i>=0;--i)t[i+o+1]=this[i]>>n|a,a=(this[i]&r)<<s;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 s=e%this.DB,n=this.DB-s,r=(1<<s)-1;t[0]=this[i]>>s;for(var o=i+1;o<this.t;++o)t[o-i-1]|=(this[o]&r)<<n,t[o-i]=this[o]>>s;s>0&&(t[this.t-i-1]|=(this.s&r)<<n),t.t=this.t-i,t.clamp()}},BigInteger.prototype.subTo=function bnpSubTo(e,t){for(var i=0,s=0,n=Math.min(e.t,this.t);i<n;)s+=this[i]-e[i],t[i++]=s&this.DM,s>>=this.DB;if(e.t<this.t){for(s-=e.s;i<this.t;)s+=this[i],t[i++]=s&this.DM,s>>=this.DB;s+=this.s}else{for(s+=this.s;i<e.t;)s-=e[i],t[i++]=s&this.DM,s>>=this.DB;s-=e.s}t.s=s<0?-1:0,s<-1?t[i++]=this.DV+s:s>0&&(t[i++]=s),t.t=i,t.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(e,t){var i=this.abs(),s=e.abs(),n=i.t;for(t.t=n+s.t;--n>=0;)t[n]=0;for(n=0;n<s.t;++n)t[n+i.t]=i.am(0,s[n],t,n,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 s=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,s,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 s=e.abs();if(!(s.t<=0)){var n=this.abs();if(n.t<s.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(s[s.t-1]);A>0?(s.lShiftTo(A,r),n.lShiftTo(A,i)):(s.copyTo(r),n.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(),s=nbi(),n=t.convert(this),r=nbits(e)-1;for(n.copyTo(i);--r>=0;)if(t.sqrTo(i,s),(e&1<<r)>0)t.mulTo(s,n,i);else{var o=i;i=s,s=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,s=(1<<t)-1,n=!1,r="",o=this.t,a=this.DB-o*this.DB%t;if(o-- >0)for(a<this.DB&&(i=this[o]>>a)>0&&(n=!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)&s,a<=0&&(a+=this.DB,--o)),i>0&&(n=!0),n&&(r+=int2char(i));return n?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),s=nbv(i),n=nbi(),r=nbi(),o="";for(this.divRemTo(s,n,r);n.signum()>0;)o=(i+r.intValue()).toString(e).substr(1)+o,n.divRemTo(s,n,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),s=Math.pow(t,i),n=!1,r=0,o=0,a=0;a<e.length;++a){var A=intAt(e,a);A<0?"-"==e.charAt(a)&&0==this.signum()&&(n=!0):(o=t*o+A,++r>=i&&(this.dMultiply(s),this.dAddOffset(o,0),r=0,o=0))}r>0&&(this.dMultiply(Math.pow(t,r)),this.dAddOffset(o,0)),n&&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 s=new Array,n=7&e;s.length=1+(e>>3),t.nextBytes(s),n>0?s[0]&=(1<<n)-1:s[0]=0,this.fromString(s,256)}},BigInteger.prototype.bitwiseTo=function bnpBitwiseTo(e,t,i){var s,n,r=Math.min(e.t,this.t);for(s=0;s<r;++s)i[s]=t(this[s],e[s]);if(e.t<this.t){for(n=e.s&this.DM,s=r;s<this.t;++s)i[s]=t(this[s],n);i.t=this.t}else{for(n=this.s&this.DM,s=r;s<e.t;++s)i[s]=t(n,e[s]);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,s=0,n=Math.min(e.t,this.t);i<n;)s+=this[i]+e[i],t[i++]=s&this.DM,s>>=this.DB;if(e.t<this.t){for(s+=e.s;i<this.t;)s+=this[i],t[i++]=s&this.DM,s>>=this.DB;s+=this.s}else{for(s+=this.s;i<e.t;)s+=e[i],t[i++]=s&this.DM,s>>=this.DB;s+=e.s}t.s=s<0?-1:0,s>0?t[i++]=s:s<-1&&(t[i++]=this.DV+s),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 s,n=Math.min(this.t+e.t,t);for(i.s=0,i.t=n;n>0;)i[--n]=0;for(s=i.t-this.t;n<s;++n)i[n+this.t]=this.am(0,e[n],i,n,0,this.t);for(s=Math.min(e.t,t);n<s;++n)this.am(0,e[n],i,n,0,t-n);i.clamp()},BigInteger.prototype.multiplyUpperTo=function bnpMultiplyUpperTo(e,t,i){--t;var s=i.t=this.t+e.t-t;for(i.s=0;--s>=0;)i[s]=0;for(s=Math.max(t-this.t,0);s<e.t;++s)i[this.t+s-t]=this.am(t-s,e[s],i,0,0,this.t+s-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 s=this.t-1;s>=0;--s)i=(t*i+this[s])%e;return i},BigInteger.prototype.millerRabin=function bnpMillerRabin(e){var t=this.subtract(BigInteger.ONE),i=t.getLowestSetBit();if(i<=0)return!1;var s=t.shiftRight(i);(e=e+1>>1)>l.length&&(e=l.length);for(var n=nbi(),r=0;r<e;++r){n.fromInt(l[Math.floor(Math.random()*l.length)]);var o=n.modPow(s,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,s=this.DB-e*this.DB%8,n=0;if(e-- >0)for(s<this.DB&&(i=this[e]>>s)!=(this.s&this.DM)>>s&&(t[n++]=i|this.s<<this.DB-s);e>=0;)s<8?(i=(this[e]&(1<<s)-1)<<8-s,i|=this[--e]>>(s+=this.DB-8)):(i=this[e]>>(s-=8)&255,s<=0&&(s+=this.DB,--e)),128&i&&(i|=-256),0==n&&(128&this.s)!=(128&i)&&++n,(n>0||i!=this.s)&&(t[n++]=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,s,n=e.bitLength(),r=nbv(1);if(n<=0)return r;i=n<18?1:n<48?3:n<144?4:n<768?5:6,s=n<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]=s.convert(this),i>1){var c=nbi();for(s.sqrTo(o[1],c);a<=l;)o[a]=nbi(),s.mulTo(c,o[a-2],o[a]),a+=2}var h,p,u=e.t-1,g=!0,d=nbi();for(n=nbits(e[u])-1;u>=0;){for(n>=A?h=e[u]>>n-A&l:(h=(e[u]&(1<<n+1)-1)<<A-n,u>0&&(h|=e[u-1]>>this.DB+n-A)),a=i;!(1&h);)h>>=1,--a;if((n-=a)<0&&(n+=this.DB,--u),g)o[h].copyTo(r),g=!1;else{for(;a>1;)s.sqrTo(r,d),s.sqrTo(d,r),a-=2;a>0?s.sqrTo(r,d):(p=r,r=d,d=p),s.mulTo(d,o[h],r)}for(;u>=0&&!(e[u]&1<<n);)s.sqrTo(r,d),p=r,r=d,d=p,--n<0&&(n=this.DB-1,--u)}return s.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(),s=this.clone(),n=nbv(1),r=nbv(0),o=nbv(0),a=nbv(1);0!=i.signum();){for(;i.isEven();)i.rShiftTo(1,i),t?(n.isEven()&&r.isEven()||(n.addTo(this,n),r.subTo(e,r)),n.rShiftTo(1,n)):r.isEven()||r.subTo(e,r),r.rShiftTo(1,r);for(;s.isEven();)s.rShiftTo(1,s),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(s)>=0?(i.subTo(s,i),t&&n.subTo(o,n),r.subTo(a,r)):(s.subTo(i,s),t&&o.subTo(n,o),a.subTo(r,a))}return 0!=s.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 s=t;t=i,i=s}var n=t.getLowestSetBit(),r=i.getLowestSetBit();if(r<0)return t;for(n<r&&(r=n),r>0&&(t.rShiftTo(r,t),i.rShiftTo(r,i));t.signum()>0;)(n=t.getLowestSetBit())>0&&t.rShiftTo(n,t),(n=i.getLowestSetBit())>0&&i.rShiftTo(n,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 s=l[t],n=t+1;n<l.length&&s<c;)s*=l[n++];for(s=i.modInt(s);t<n;)if(s%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 s=Object.getOwnPropertyNames(t.prototype),n=0;n<s.length;n++)void 0===Object.getOwnPropertyDescriptor(e.prototype,s[n])&&Object.defineProperty(e.prototype,s[n],Object.getOwnPropertyDescriptor(t.prototype,s[n]));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 s=e[0];this.X=t.Clipper.Round(s.X),this.Y=t.Clipper.Round(s.Y),this.Z=0}else void 0===(n=e[0]).Z&&(n.Z=0),this.X=n.X,this.Y=n.Y,this.Z=n.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)s=e[0],this.X=t.Clipper.Round(s.X),this.Y=t.Clipper.Round(s.Y);else{var n=e[0];this.X=n.X,this.Y=n.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,s){this.X=e,this.Y=i,t.use_xyz&&(this.Z=void 0===s?0:s)},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,s){this.left=e,this.top=t,this.right=i,this.bottom=s},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 s=i;do{if(t.IntPoint.op_Equality(s.Pt,e))return!0;s=s.Next}while(s!==i);return!1},t.ClipperBase.prototype.PointOnLineSegment=function(e,t,i,s){return s?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 s=t;;){if(this.PointOnLineSegment(e,s.Pt,s.Next.Pt,i))return!0;if((s=s.Next)===t)break}return!1},t.ClipperBase.prototype.SlopesEqual=t.ClipperBase.SlopesEqual=function(){var e,i,s,n,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?(s=a[0],n=a[1],r=a[2],a[3]?h.op_Equality(h.Int128Mul(s.Y-n.Y,n.X-r.X),h.Int128Mul(s.X-n.X,n.Y-r.Y)):t.Cast_Int64((s.Y-n.Y)*(n.X-r.X))-t.Cast_Int64((s.X-n.X)*(n.Y-r.Y))==0):(s=a[0],n=a[1],r=a[2],o=a[3],a[4]?h.op_Equality(h.Int128Mul(s.Y-n.Y,r.X-o.X),h.Int128Mul(s.X-n.X,r.Y-o.Y)):t.Cast_Int64((s.Y-n.Y)*(r.X-o.X))-t.Cast_Int64((s.X-n.X)*(r.Y-o.Y))==0)},t.ClipperBase.SlopesEqual3=function(e,i,s){return s?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,s,n){return n?h.op_Equality(h.Int128Mul(e.Y-i.Y,i.X-s.X),h.Int128Mul(e.X-i.X,i.Y-s.Y)):t.Cast_Int64((e.Y-i.Y)*(i.X-s.X))-t.Cast_Int64((e.X-i.X)*(i.Y-s.Y))==0},t.ClipperBase.SlopesEqual5=function(e,i,s,n,r){return r?h.op_Equality(h.Int128Mul(e.Y-i.Y,s.X-n.X),h.Int128Mul(e.X-i.X,s.Y-n.Y)):t.Cast_Int64((e.Y-i.Y)*(s.X-n.X))-t.Cast_Int64((e.X-i.X)*(s.Y-n.Y))==0},t.ClipperBase.prototype.Clear=function(){this.DisposeLocalMinimaList();for(var e=0,i=this.m_edges.length;e<i;++e){for(var s=0,n=this.m_edges[e].length;s<n;++s)this.m_edges[e][s]=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,s,n){e.Next=i,e.Prev=s,e.Curr.X=n.X,e.Curr.Y=n.Y,t.use_xyz&&(e.Curr.Z=n.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 s,n,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&&((s=i?e.Prev:e.Next).Dx===t.ClipperBase.horizontal?s.Bot.X!==e.Bot.X&&s.Top.X!==e.Bot.X&&this.ReverseHorizontal(e):s.Bot.X!==e.Bot.X&&this.ReverseHorizontal(e)),s=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(n=r;n.Prev.Dx===t.ClipperBase.horizontal;)n=n.Prev;n.Prev.Top.X>r.Next.Top.X&&(r=n.Prev)}for(;e!==r;)e.NextInLML=e.Next,e.Dx===t.ClipperBase.horizontal&&e!==s&&e.Bot.X!==e.Prev.Top.X&&this.ReverseHorizontal(e),e=e.Next;e.Dx===t.ClipperBase.horizontal&&e!==s&&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(n=r;n.Next.Dx===t.ClipperBase.horizontal;)n=n.Next;(n.Next.Top.X===r.Prev.Top.X||n.Next.Top.X>r.Prev.Top.X)&&(r=n.Next)}for(;e!==r;)e.NextInLML=e.Prev,e.Dx===t.ClipperBase.horizontal&&e!==s&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),e=e.Prev;e.Dx===t.ClipperBase.horizontal&&e!==s&&e.Bot.X!==e.Next.Top.X&&this.ReverseHorizontal(e),r=r.Prev}return r},t.ClipperBase.prototype.AddPath=function(e,i,s){t.use_lines?s||i!==t.PolyType.ptClip||t.Error("AddPath: Open paths must be subject."):s||t.Error("AddPath: Open paths have been disabled.");var n=e.length-1;if(s)for(;n>0&&t.IntPoint.op_Equality(e[n],e[0]);)--n;for(;n>0&&t.IntPoint.op_Equality(e[n],e[n-1]);)--n;if(s&&n<2||!s&&n<1)return!1;for(var r=new Array,o=0;o<=n;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[n],A),this.m_UseFullRange=A.Value,this.InitEdge(r[0],r[1],r[n],e[0]),this.InitEdge(r[n],r[0],r[n-1],e[n]),o=n-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||!s&&h.Next===c){if(h.Prev===h.Next)break;if(!s||!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||!s&&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(!s&&h===h.Next||s&&h.Prev===h.Next)return!1;s||(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(s)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,s?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 s=!1,n=0,r=e.length;n<r;++n)this.AddPath(e[n],t,i)&&(s=!0);return s},t.ClipperBase.prototype.Pt2IsBetweenPt1AndPt3=function(e,i,s){return!(t.IntPoint.op_Equality(e,s)||t.IntPoint.op_Equality(e,i)||t.IntPoint.op_Equality(s,i))&&(e.X!==s.X?i.X>e.X==i.X<s.X:i.Y>e.Y==i.Y<s.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 s=this.m_Scanbeam;null!==s.Next&&e<=s.Next.Y;)s=s.Next;if(e===s.Y)return;var n=new t.Scanbeam;n.Y=e,n.Next=s.Next,s.Next=n}},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,s=e.NextInAEL;return e.NextInLML.OutIdx=e.OutIdx,null!==i?i.NextInAEL=e.NextInLML:this.m_ActiveEdges=e.NextInLML,null!==s&&(s.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=s,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 s=e.PrevInAEL;null!==s&&(s.NextInAEL=t),t.PrevInAEL=s,t.NextInAEL=e,e.PrevInAEL=t,e.NextInAEL=i}else if(t.NextInAEL===e){var n=e.NextInAEL;null!==n&&(n.PrevInAEL=t);var r=t.PrevInAEL;null!==r&&(r.NextInAEL=e),e.PrevInAEL=r,e.NextInAEL=t,t.PrevInAEL=e,t.NextInAEL=n}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 s=this.m_Maxima;null!==s.Next&&e>=s.Next.X;)s=s.Next;if(e===s.X)return;i.Next=s.Next,i.Prev=s,null!==s.Next&&(s.Next.Prev=i),s.Next=i}},t.Clipper.prototype.Execute=function(){var e=arguments,i=e.length,s=e[1]instanceof t.PolyTree;if(4===i&&!s){var n=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=n,this.m_UsingPolyTree=!1;try{(l=this.ExecuteInternal())&&this.BuildResult(r)}finally{this.DisposeAllPolyPts(),this.m_ExecuteLocked=!1}return l}if(4===i&&s){n=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=n,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||s?2===i&&s?(n=e[0],A=e[1],this.Execute(n,A,t.PolyFillType.pftEvenOdd,t.PolyFillType.pftEvenOdd)):void 0:(n=e[0],r=e[1],this.Execute(n,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,s={},n={};if(!this.PopScanbeam(s))return!1;for(this.InsertLocalMinimaIntoAEL(s.v);this.PopScanbeam(n)||this.LocalMinimaPending();){if(this.ProcessHorizontals(),this.m_GhostJoins.length=0,!this.ProcessIntersections(n.v))return!1;this.ProcessEdgesAtTopOfScanbeam(n.v),s.v=n.v,this.InsertLocalMinimaIntoAEL(s.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,s){var n=new t.Join;n.OutPt1=e,n.OutPt2=i,n.OffPt.X=s.X,n.OffPt.Y=s.Y,t.use_xyz&&(n.OffPt.Z=s.Z),this.m_Joins.push(n)},t.Clipper.prototype.AddGhostJoin=function(e,i){var s=new t.Join;s.OutPt1=e,s.OffPt.X=i.X,s.OffPt.Y=i.Y,t.use_xyz&&(s.OffPt.Z=i.Z),this.m_GhostJoins.push(s)},t.Clipper.prototype.SetZ=function(e,i,s){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,s.Bot)?e.Z=s.Bot.Z:t.IntPoint.op_Equality(e,s.Top)?e.Z=s.Top.Z:this.ZFillFunction(i.Bot,i.Top,s.Bot,s.Top,e)}},t.Clipper.prototype.InsertLocalMinimaIntoAEL=function(e){for(var i,s,n={};this.PopLocalMinima(e,n);){i=n.v.LeftBound,s=n.v.RightBound;var r=null;if(null===i?(this.InsertEdgeIntoAEL(s,null),this.SetWindingCount(s),this.IsContributing(s)&&(r=this.AddOutPt(s,s.Bot))):null===s?(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(s,i),this.SetWindingCount(i),s.WindCnt=i.WindCnt,s.WindCnt2=i.WindCnt2,this.IsContributing(i)&&(r=this.AddLocalMinPoly(i,s,i.Bot)),this.InsertScanbeam(i.Top.Y)),null!==s&&(t.ClipperBase.IsHorizontal(s)?(null!==s.NextInLML&&this.InsertScanbeam(s.NextInLML.Top.Y),this.AddEdgeToSEL(s)):this.InsertScanbeam(s.Top.Y)),null!==i&&null!==s){if(null!==r&&t.ClipperBase.IsHorizontal(s)&&this.m_GhostJoins.length>0&&0!==s.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,s.Bot.X,s.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!==s){s.OutIdx>=0&&s.PrevInAEL.OutIdx>=0&&t.ClipperBase.SlopesEqual5(s.PrevInAEL.Curr,s.PrevInAEL.Top,s.Curr,s.Top,this.m_UseFullRange)&&0!==s.WindDelta&&0!==s.PrevInAEL.WindDelta&&(l=this.AddOutPt(s.PrevInAEL,s.Bot),this.AddJoin(r,l,s.Top));var c=i.NextInAEL;if(null!==c)for(;c!==s;)this.IntersectEdges(s,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,s;switch(e.PolyTyp===t.PolyType.ptSubject?(i=this.m_SubjFillType,s=this.m_ClipFillType):(i=this.m_ClipFillType,s=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(s){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(s){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(s){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(s){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(s){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 s=e.PolyTyp===t.PolyType.ptSubject?this.m_SubjFillType:this.m_ClipFillType;0===e.WindDelta?e.WindCnt=s===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 n=!0,r=i.PrevInAEL;null!==r;)r.PolyTyp===i.PolyTyp&&0!==r.WindDelta&&(n=!n),r=r.PrevInAEL;e.WindCnt=n?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!==(s=e.PrevInSEL)&&(s.NextInSEL=t),t.PrevInSEL=s,t.NextInSEL=e,e.PrevInSEL=t,e.NextInSEL=i;else if(t.NextInSEL===e)null!==(i=e.NextInSEL)&&(i.PrevInSEL=t),null!==(s=t.PrevInSEL)&&(s.NextInSEL=e),e.PrevInSEL=s,e.NextInSEL=t,t.PrevInSEL=e,t.NextInSEL=i;else{var i=e.NextInSEL,s=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=s,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,s){var n,r,o;if(t.ClipperBase.IsHorizontal(i)||e.Dx>i.Dx?(n=this.AddOutPt(e,s),i.OutIdx=e.OutIdx,e.Side=t.EdgeSide.esLeft,i.Side=t.EdgeSide.esRight,o=(r=e).PrevInAEL===i?i.PrevInAEL:r.PrevInAEL):(n=this.AddOutPt(i,s),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<s.Y&&r.Top.Y<s.Y){var a=t.Clipper.TopX(o,s.Y),A=t.Clipper.TopX(r,s.Y);if(a===A&&0!==r.WindDelta&&0!==o.WindDelta&&t.ClipperBase.SlopesEqual5(new t.IntPoint2(a,s.Y),o.Top,new t.IntPoint2(A,s.Y),r.Top,this.m_UseFullRange)){var l=this.AddOutPt(o,s);this.AddJoin(n,l,r.Top)}}return n},t.Clipper.prototype.AddOutPt=function(e,i){if(e.OutIdx<0){(n=this.CreateOutRec()).IsOpen=0===e.WindDelta;var s=new t.OutPt;return n.Pts=s,s.Idx=n.Idx,s.Pt.X=i.X,s.Pt.Y=i.Y,t.use_xyz&&(s.Pt.Z=i.Z),s.Next=s,s.Prev=s,n.IsOpen||this.SetHoleState(e,n),e.OutIdx=n.Idx,s}var n,r=(n=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:((s=new t.OutPt).Idx=n.Idx,s.Pt.X=i.X,s.Pt.Y=i.Y,t.use_xyz&&(s.Pt.Z=i.Z),s.Next=r,s.Prev=r.Prev,s.Prev.Next=s,r.Prev=s,o&&(n.Pts=s),s)},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 s=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=s.X,i.Value.Y=s.Y,t.use_xyz&&(i.Value.Z=s.Z)},t.Clipper.prototype.HorzSegmentsOverlap=function(e,t,i,s){var n;return e>t&&(n=e,e=t,t=n),i>s&&(n=i,i=s,s=n),e<s&&i<t},t.Clipper.prototype.SetHoleState=function(e,t){for(var i=e.PrevInAEL,s=null;null!==i;)i.OutIdx>=0&&0!==i.WindDelta&&(null===s?s=i:s.OutIdx===i.OutIdx&&(s=null)),i=i.PrevInAEL;null===s?(t.FirstLeft=null,t.IsHole=!1):(t.FirstLeft=this.m_PolyOuts[s.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 s=e.Prev;t.IntPoint.op_Equality(s.Pt,e.Pt)&&s!==e;)s=s.Prev;var n=Math.abs(this.GetDx(e.Pt,s.Pt));for(s=e.Next;t.IntPoint.op_Equality(s.Pt,e.Pt)&&s!==e;)s=s.Next;var r=Math.abs(this.GetDx(e.Pt,s.Pt));for(s=i.Prev;t.IntPoint.op_Equality(s.Pt,i.Pt)&&s!==i;)s=s.Prev;var o=Math.abs(this.GetDx(i.Pt,s.Pt));for(s=i.Next;t.IntPoint.op_Equality(s.Pt,i.Pt)&&s!==i;)s=s.Next;var a=Math.abs(this.GetDx(i.Pt,s.Pt));return Math.max(n,r)===Math.max(o,a)&&Math.min(n,r)===Math.min(o,a)?this.Area(e)>0:n>=o&&n>=a||r>=o&&r>=a},t.Clipper.prototype.GetBottomPt=function(e){for(var i=null,s=e.Next;s!==e;)s.Pt.Y>e.Pt.Y?(e=s,i=null):s.Pt.Y===e.Pt.Y&&s.Pt.X<=e.Pt.X&&(s.Pt.X<e.Pt.X?(i=null,e=s):s.Next!==e&&s.Prev!==e&&(i=s)),s=s.Next;if(null!==i)for(;i!==s;)for(this.FirstIsBottomPt(s,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,s=t.BottomPt;return i.Pt.Y>s.Pt.Y?e:i.Pt.Y<s.Pt.Y?t:i.Pt.X<s.Pt.X?e:i.Pt.X>s.Pt.X||i.Next===i?t:s.Next===s||this.FirstIsBottomPt(i,s)?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 s,n=this.m_PolyOuts[e.OutIdx],r=this.m_PolyOuts[i.OutIdx];s=this.OutRec1RightOfOutRec2(n,r)?r:this.OutRec1RightOfOutRec2(r,n)?n:this.GetLowermostRec(n,r);var o=n.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,n.Pts=l):(l.Next=o,o.Prev=l,A.Prev=a,a.Next=A,n.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),n.BottomPt=null,s===r&&(r.FirstLeft!==n&&(n.FirstLeft=r.FirstLeft),n.IsHole=r.IsHole),r.Pts=null,r.BottomPt=null,r.FirstLeft=n;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=n.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,s){var n=e.OutIdx>=0,r=i.OutIdx>=0;if(t.use_xyz&&this.SetZ(s,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(n&&r)0!==h&&1!==h||0!==p&&1!==p||e.PolyTyp!==i.PolyTyp&&this.m_ClipType!==t.ClipType.ctXor?this.AddLocalMaxPoly(e,i,s):(this.AddOutPt(e,s),this.AddOutPt(i,s),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(n)0!==p&&1!==p||(this.AddOutPt(e,s),t.Clipper.SwapSides(e,i),t.Clipper.SwapPolyIndexes(e,i));else if(r)0!==h&&1!==h||(this.AddOutPt(i,s),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,s);else if(1===h&&1===p)switch(this.m_ClipType){case t.ClipType.ctIntersection:u>0&&g>0&&this.AddLocalMinPoly(e,i,s);break;case t.ClipType.ctUnion:u<=0&&g<=0&&this.AddLocalMinPoly(e,i,s);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,s);break;case t.ClipType.ctXor:this.AddLocalMinPoly(e,i,s)}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,s),n&&(e.OutIdx=-1)):n&&(this.AddOutPt(i,s),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,s),r&&(i.OutIdx=-1)):(this.AddOutPt(e,s),n&&(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 s=i.Dir,n=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(s===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,s);null!==p;){if(null!==l)if(s===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(s===t.Direction.dLeftToRight&&p.Curr.X>r||s===t.Direction.dRightToLeft&&p.Curr.X<n)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&&(s===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(s===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,s);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:s,Left:n,Right:r},this.GetHorzDirection(e,i),s=i.Dir,n=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 s=!0;s&&null!==this.m_SortedEdges;){for(s=!1,i=this.m_SortedEdges;null!==i.NextInSEL;){var n=i.NextInSEL,r=new t.IntPoint0;if(i.Curr.X>n.Curr.X){this.IntersectPoint(i,n,r),r.Y<e&&(r=new t.IntPoint2(t.Clipper.TopX(i,e),e));var o=new t.IntersectNode;o.Edge1=i,o.Edge2=n,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,n),s=!0}else i=n}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 s=this.m_IntersectList[t];this.m_IntersectList[t]=this.m_IntersectList[i],this.m_IntersectList[i]=s}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,s){var n,r;if(s.X=0,s.Y=0,e.Dx===i.Dx)return s.Y=e.Curr.Y,void(s.X=t.Clipper.TopX(e,s.Y));if(0===e.Delta.X)s.X=e.Bot.X,t.ClipperBase.IsHorizontal(i)?s.Y=i.Bot.Y:(r=i.Bot.Y-i.Bot.X/i.Dx,s.Y=t.Clipper.Round(s.X/i.Dx+r));else if(0===i.Delta.X)s.X=i.Bot.X,t.ClipperBase.IsHorizontal(e)?s.Y=e.Bot.Y:(n=e.Bot.Y-e.Bot.X/e.Dx,s.Y=t.Clipper.Round(s.X/e.Dx+n));else{n=e.Bot.X-e.Bot.Y*e.Dx;var o=((r=i.Bot.X-i.Bot.Y*i.Dx)-n)/(e.Dx-i.Dx);s.Y=t.Clipper.Round(o),Math.abs(e.Dx)<Math.abs(i.Dx)?s.X=t.Clipper.Round(e.Dx*o+n):s.X=t.Clipper.Round(i.Dx*o+r)}if(s.Y<e.Top.Y||s.Y<i.Top.Y){if(e.Top.Y>i.Top.Y)return s.Y=e.Top.Y,s.X=t.Clipper.TopX(i,e.Top.Y),s.X<e.Top.X;s.Y=i.Top.Y,Math.abs(e.Dx)<Math.abs(i.Dx)?s.X=t.Clipper.TopX(e,s.Y):s.X=t.Clipper.TopX(i,s.Y)}s.Y>e.Curr.Y&&(s.Y=e.Curr.Y,Math.abs(e.Dx)>Math.abs(i.Dx)?s.X=t.Clipper.TopX(i,s.Y):s.X=t.Clipper.TopX(e,s.Y))},t.Clipper.prototype.ProcessEdgesAtTopOfScanbeam=function(e){for(var i=this.m_ActiveEdges;null!==i;){var s=this.IsMaxima(i,e);if(s){var n=this.GetMaximaPairEx(i);s=null===n||!t.ClipperBase.IsHorizontal(n)}if(s){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 s=e.NextInAEL;null!==s&&s!==i;)this.IntersectEdges(e,s,e.Top),this.SwapPositionsInAEL(e,s),s=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,s=this.m_PolyOuts.length;i<s;i++){var n=this.m_PolyOuts[i];if(null!==n.Pts){var r=n.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,s=this.m_PolyOuts.length;i<s;i++){var n=this.m_PolyOuts[i],r=this.PointCount(n.Pts);if(!(n.IsOpen&&r<2||!n.IsOpen&&r<3)){this.FixHoleLinkage(n);var o=new t.PolyNode;e.m_AllPolys.push(o),n.PolyNode=o,o.m_polygon.length=r;for(var a=n.Pts.Prev,A=0;A<r;A++)o.m_polygon[A]=a.Pt,a=a.Prev}}for(i=0,s=this.m_PolyOuts.length;i<s;i++)null!==(n=this.m_PolyOuts[i]).PolyNode&&(n.IsOpen?(n.PolyNode.IsOpen=!0,e.AddChild(n.PolyNode)):null!==n.FirstLeft&&null!==n.FirstLeft.PolyNode?n.FirstLeft.PolyNode.AddChild(n.PolyNode):e.AddChild(n.PolyNode))},t.Clipper.prototype.FixupOutPolyline=function(e){for(var i=e.Pts,s=i.Prev;i!==s;)if(i=i.Next,t.IntPoint.op_Equality(i.Pt,i.Prev.Pt)){i===s&&(s=i.Prev);var n=i.Prev;n.Next=i.Next,i.Next.Prev=n,i=n}i===i.Prev&&(e.Pts=null)},t.Clipper.prototype.FixupOutPolygon=function(e){var i=null;e.BottomPt=null;for(var s=e.Pts,n=this.PreserveCollinear||this.StrictlySimple;;){if(s.Prev===s||s.Prev===s.Next)return void(e.Pts=null);if(t.IntPoint.op_Equality(s.Pt,s.Next.Pt)||t.IntPoint.op_Equality(s.Pt,s.Prev.Pt)||t.ClipperBase.SlopesEqual4(s.Prev.Pt,s.Pt,s.Next.Pt,this.m_UseFullRange)&&(!n||!this.Pt2IsBetweenPt1AndPt3(s.Prev.Pt,s.Pt,s.Next.Pt)))i=null,s.Prev.Next=s.Next,s.Next.Prev=s.Prev,s=s.Prev;else{if(s===i)break;null===i&&(i=s),s=s.Next}}e.Pts=s},t.Clipper.prototype.DupOutPt=function(e,i){var s=new t.OutPt;return s.Pt.X=e.Pt.X,s.Pt.Y=e.Pt.Y,t.use_xyz&&(s.Pt.Z=e.Pt.Z),s.Idx=e.Idx,i?(s.Next=e.Next,s.Prev=e,e.Next.Prev=s,e.Next=s):(s.Prev=e.Prev,s.Next=e,e.Prev.Next=s,e.Prev=s),s},t.Clipper.prototype.GetOverlap=function(e,t,i,s,n){return e<t?i<s?(n.Left=Math.max(e,i),n.Right=Math.min(t,s)):(n.Left=Math.max(e,s),n.Right=Math.min(t,i)):i<s?(n.Left=Math.max(t,i),n.Right=Math.min(e,s)):(n.Left=Math.max(t,s),n.Right=Math.min(e,i)),n.Left<n.Right},t.Clipper.prototype.JoinHorz=function(e,i,s,n,r,o){var a=e.Pt.X>i.Pt.X?t.Direction.dRightToLeft:t.Direction.dLeftToRight,A=s.Pt.X>n.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(;s.Next.Pt.X<=r.X&&s.Next.Pt.X>=s.Pt.X&&s.Next.Pt.Y===r.Y;)s=s.Next;o&&s.Pt.X!==r.X&&(s=s.Next),n=this.DupOutPt(s,!o),t.IntPoint.op_Inequality(n.Pt,r)&&((s=n).Pt.X=r.X,s.Pt.Y=r.Y,t.use_xyz&&(s.Pt.Z=r.Z),n=this.DupOutPt(s,!o))}else{for(;s.Next.Pt.X>=r.X&&s.Next.Pt.X<=s.Pt.X&&s.Next.Pt.Y===r.Y;)s=s.Next;o||s.Pt.X===r.X||(s=s.Next),n=this.DupOutPt(s,o),t.IntPoint.op_Inequality(n.Pt,r)&&((s=n).Pt.X=r.X,s.Pt.Y=r.Y,t.use_xyz&&(s.Pt.Z=r.Z),n=this.DupOutPt(s,o))}return a===t.Direction.dLeftToRight===o?(e.Prev=s,s.Next=e,i.Next=n,n.Prev=i):(e.Next=s,s.Prev=e,i.Prev=n,n.Next=i),!0},t.Clipper.prototype.JoinPoints=function(e,i,s){var n=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!==s)return!1;for(r=e.OutPt1.Next;r!==n&&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(n,!1),a=this.DupOutPt(o,!0),n.Prev=o,o.Next=n,r.Next=a,a.Prev=r,e.OutPt1=n,e.OutPt2=r,!0):(r=this.DupOutPt(n,!0),a=this.DupOutPt(o,!1),n.Next=o,o.Prev=n,r.Prev=a,a.Next=r,e.OutPt1=n,e.OutPt2=r,!0))}if(A){for(r=n;n.Prev.Pt.Y===n.Pt.Y&&n.Prev!==r&&n.Prev!==o;)n=n.Prev;for(;r.Next.Pt.Y===r.Pt.Y&&r.Next!==n&&r.Next!==o;)r=r.Next;if(r.Next===n||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!==n;)a=a.Next;if(a.Next===o||a.Next===n)return!1;var c={Left:null,Right:null};if(!this.GetOverlap(n.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 n.Pt.X>=p&&n.Pt.X<=u?(g.X=n.Pt.X,g.Y=n.Pt.Y,t.use_xyz&&(g.Z=n.Pt.Z),h=n.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>n.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=n,e.OutPt2=o,this.JoinHorz(n,r,o,a,g,h)}for(r=n.Next;t.IntPoint.op_Equality(r.Pt,n.Pt)&&r!==n;)r=r.Next;var d=r.Pt.Y>n.Pt.Y||!t.ClipperBase.SlopesEqual4(n.Pt,r.Pt,e.OffPt,this.m_UseFullRange);if(d){for(r=n.Prev;t.IntPoint.op_Equality(r.Pt,n.Pt)&&r!==n;)r=r.Prev;if(r.Pt.Y>n.Pt.Y||!t.ClipperBase.SlopesEqual4(n.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===n||a===o||r===a||i===s&&d===f||(d?(r=this.DupOutPt(n,!1),a=this.DupOutPt(o,!0),n.Prev=o,o.Next=n,r.Next=a,a.Prev=r,e.OutPt1=n,e.OutPt2=r,0):(r=this.DupOutPt(n,!0),a=this.DupOutPt(o,!1),n.Next=o,o.Prev=n,r.Prev=a,a.Next=r,e.OutPt1=n,e.OutPt2=r,0)))},t.Clipper.GetBounds=function(e){for(var i=0,s=e.length;i<s&&0===e[i].length;)i++;if(i===s)return new t.IntRect(0,0,0,0);var n=new t.IntRect;for(n.left=e[i][0].X,n.right=n.left,n.top=e[i][0].Y,n.bottom=n.top;i<s;i++)for(var r=0,o=e[i].length;r<o;r++)e[i][r].X<n.left?n.left=e[i][r].X:e[i][r].X>n.right&&(n.right=e[i][r].X),e[i][r].Y<n.top?n.top=e[i][r].Y:e[i][r].Y>n.bottom&&(n.bottom=e[i][r].Y);return n},t.Clipper.prototype.GetBounds2=function(e){var i=e,s=new t.IntRect;for(s.left=e.Pt.X,s.right=e.Pt.X,s.top=e.Pt.Y,s.bottom=e.Pt.Y,e=e.Next;e!==i;)e.Pt.X<s.left&&(s.left=e.Pt.X),e.Pt.X>s.right&&(s.right=e.Pt.X),e.Pt.Y<s.top&&(s.top=e.Pt.Y),e.Pt.Y>s.bottom&&(s.bottom=e.Pt.Y),e=e.Next;return s},t.Clipper.PointInPolygon=function(e,t){var i=0,s=t.length;if(s<3)return 0;for(var n=t[0],r=1;r<=s;++r){var o=r===s?t[0]:t[r];if(o.Y===e.Y&&(o.X===e.X||n.Y===e.Y&&o.X>e.X==n.X<e.X))return-1;if(n.Y<e.Y!=o.Y<e.Y)if(n.X>=e.X)if(o.X>e.X)i=1-i;else{if(0==(a=(n.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(n.Y-e.Y)))return-1;a>0==o.Y>n.Y&&(i=1-i)}else if(o.X>e.X){var a;if(0==(a=(n.X-e.X)*(o.Y-e.Y)-(o.X-e.X)*(n.Y-e.Y)))return-1;a>0==o.Y>n.Y&&(i=1-i)}n=o}return i},t.Clipper.prototype.PointInPolygon=function(e,t){var i=0,s=t,n=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===n||a===r&&A>n==o<n))return-1;if(a<r!=l<r)if(o>=n)if(A>n)i=1-i;else{if(0==(c=(o-n)*(l-r)-(A-n)*(a-r)))return-1;c>0==l>a&&(i=1-i)}else if(A>n){var c;if(0==(c=(o-n)*(l-r)-(A-n)*(a-r)))return-1;c>0==l>a&&(i=1-i)}o=A,a=l}while(s!==t);return i},t.Clipper.prototype.Poly2ContainsPoly1=function(e,t){var i=e;do{var s=this.PointInPolygon(i.Pt,t);if(s>=0)return s>0;i=i.Next}while(i!==e);return!0},t.Clipper.prototype.FixupFirstLefts1=function(e,i){for(var s,n,r=0,o=this.m_PolyOuts.length;r<o;r++)s=this.m_PolyOuts[r],n=t.Clipper.ParseFirstLeft(s.FirstLeft),null!==s.Pts&&n===e&&this.Poly2ContainsPoly1(s.Pts,i.Pts)&&(s.FirstLeft=i)},t.Clipper.prototype.FixupFirstLefts2=function(e,i){for(var s,n,r=i.FirstLeft,o=0,a=this.m_PolyOuts.length;o<a;o++)null!==(s=this.m_PolyOuts[o]).Pts&&s!==i&&s!==e&&((n=t.Clipper.ParseFirstLeft(s.FirstLeft))!==r&&n!==e&&n!==i||(this.Poly2ContainsPoly1(s.Pts,e.Pts)?s.FirstLeft=e:this.Poly2ContainsPoly1(s.Pts,i.Pts)?s.FirstLeft=i:s.FirstLeft!==e&&s.FirstLeft!==i||(s.FirstLeft=r)))},t.Clipper.prototype.FixupFirstLefts3=function(e,i){for(var s,n,r=0,o=this.m_PolyOuts.length;r<o;r++)s=this.m_PolyOuts[r],n=t.Clipper.ParseFirstLeft(s.FirstLeft),null!==s.Pts&&n===e&&(s.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,s=this.m_Joins[e],n=this.GetOutRec(s.OutPt1.Idx),r=this.GetOutRec(s.OutPt2.Idx);null!==n.Pts&&null!==r.Pts&&(n.IsOpen||r.IsOpen||(i=n===r?n:this.OutRec1RightOfOutRec2(n,r)?r:this.OutRec1RightOfOutRec2(r,n)?n:this.GetLowermostRec(n,r),this.JoinPoints(s,n,r)&&(n===r?(n.Pts=s.OutPt1,n.BottomPt=null,(r=this.CreateOutRec()).Pts=s.OutPt2,this.UpdateOutPtIdxs(r),this.Poly2ContainsPoly1(r.Pts,n.Pts)?(r.IsHole=!n.IsHole,r.FirstLeft=n,this.m_UsingPolyTree&&this.FixupFirstLefts2(r,n),(r.IsHole^this.ReverseSolution)==this.Area$1(r)>0&&this.ReversePolyPtLinks(r.Pts)):this.Poly2ContainsPoly1(n.Pts,r.Pts)?(r.IsHole=n.IsHole,n.IsHole=!r.IsHole,r.FirstLeft=n.FirstLeft,n.FirstLeft=r,this.m_UsingPolyTree&&this.FixupFirstLefts2(n,r),(n.IsHole^this.ReverseSolution)==this.Area$1(n)>0&&this.ReversePolyPtLinks(n.Pts)):(r.IsHole=n.IsHole,r.FirstLeft=n.FirstLeft,this.m_UsingPolyTree&&this.FixupFirstLefts1(n,r))):(r.Pts=null,r.BottomPt=null,r.Idx=n.Idx,n.IsHole=i.IsHole,i===r&&(n.FirstLeft=r.FirstLeft),r.FirstLeft=n,this.m_UsingPolyTree&&this.FixupFirstLefts3(r,n)))))}},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++],s=i.Pts;if(null!==s&&!i.IsOpen)do{for(var n=s.Next;n!==i.Pts;){if(t.IntPoint.op_Equality(s.Pt,n.Pt)&&n.Next!==s&&n.Prev!==s){var r=s.Prev,o=n.Prev;s.Prev=o,o.Next=s,n.Prev=r,r.Next=n,i.Pts=s;var a=this.CreateOutRec();a.Pts=n,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)),n=s}n=n.Next}s=s.Next}while(s!==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,s=0,n=t-1;s<t;++s)i+=(e[n].X+e[s].X)*(e[n].Y-e[s].Y),n=s;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 s=new Array,n=new t.Clipper(0);return n.StrictlySimple=!0,n.AddPath(e,t.PolyType.ptSubject,!0),n.Execute(t.ClipType.ctUnion,s,i,i),s},t.Clipper.SimplifyPolygons=function(e,i){void 0===i&&(i=t.PolyFillType.pftEvenOdd);var s=new Array,n=new t.Clipper(0);return n.StrictlySimple=!0,n.AddPaths(e,t.PolyType.ptSubject,!0),n.Execute(t.ClipType.ctUnion,s,i,i),s},t.Clipper.DistanceSqrd=function(e,t){var i=e.X-t.X,s=e.Y-t.Y;return i*i+s*s},t.Clipper.DistanceFromLineSqrd=function(e,t,i){var s=t.Y-i.Y,n=i.X-t.X,r=s*t.X+n*t.Y;return(r=s*e.X+n*e.Y-r)*r/(s*s+n*n)},t.Clipper.SlopesNearCollinear=function(e,i,s,n){return Math.abs(e.X-i.X)>Math.abs(e.Y-i.Y)?e.X>i.X==e.X<s.X?t.Clipper.DistanceFromLineSqrd(e,i,s)<n:i.X>e.X==i.X<s.X?t.Clipper.DistanceFromLineSqrd(i,e,s)<n:t.Clipper.DistanceFromLineSqrd(s,e,i)<n:e.Y>i.Y==e.Y<s.Y?t.Clipper.DistanceFromLineSqrd(e,i,s)<n:i.Y>e.Y==i.Y<s.Y?t.Clipper.DistanceFromLineSqrd(i,e,s)<n:t.Clipper.DistanceFromLineSqrd(s,e,i)<n},t.Clipper.PointsAreClose=function(e,t,i){var s=e.X-t.X,n=e.Y-t.Y;return s*s+n*n<=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 s=e.length;if(0===s)return new Array;for(var n=new Array(s),r=0;r<s;++r)n[r]=new t.OutPt;for(r=0;r<s;++r)n[r].Pt=e[r],n[r].Next=n[(r+1)%s],n[r].Next.Prev=n[r],n[r].Idx=0;for(var o=i*i,a=n[0];0===a.Idx&&a.Next!==a.Prev;)t.Clipper.PointsAreClose(a.Pt,a.Prev.Pt,o)?(a=t.Clipper.ExcludeOp(a),s--):t.Clipper.PointsAreClose(a.Prev.Pt,a.Next.Pt,o)?(t.Clipper.ExcludeOp(a.Next),a=t.Clipper.ExcludeOp(a),s-=2):t.Clipper.SlopesNearCollinear(a.Prev.Pt,a.Pt,a.Next.Pt,o)?(a=t.Clipper.ExcludeOp(a),s--):(a.Idx=1,a=a.Next);s<3&&(s=0);var A=new Array(s);for(r=0;r<s;++r)A[r]=new t.IntPoint1(a.Pt),a=a.Next;return n=null,A},t.Clipper.CleanPolygons=function(e,i){for(var s=new Array(e.length),n=0,r=e.length;n<r;n++)s[n]=t.Clipper.CleanPolygon(e[n],i);return s},t.Clipper.Minkowski=function(e,i,s,n){var r=n?1:0,o=e.length,a=i.length,A=new Array;if(s)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,s){if(i[0]instanceof Array){l=i;for(var n=new t.Paths,r=(a=new t.Clipper,0);r<l.length;++r){var o=t.Clipper.Minkowski(e,l[r],!0,s);a.AddPaths(o,t.PolyType.ptSubject,!0),s&&(A=t.Clipper.TranslatePath(l[r],e[0]),a.AddPath(A,t.PolyType.ptClip,!0))}return a.Execute(t.ClipType.ctUnion,n,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),n}var a,A=i,l=t.Clipper.Minkowski(e,A,!0,s);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 s=new t.Path,n=0;n<e.length;n++)s.push(new t.IntPoint2(e[n].X+i.X,e[n].Y+i.Y));return s},t.Clipper.MinkowskiDiff=function(e,i){var s=t.Clipper.Minkowski(e,i,!1,!0),n=new t.Clipper;return n.AddPaths(s,t.PolyType.ptSubject,!0),n.Execute(t.ClipType.ctUnion,s,t.PolyFillType.pftNonZero,t.PolyFillType.pftNonZero),s},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,s){var n=!0;switch(i){case t.Clipper.NodeType.ntOpen:return;case t.Clipper.NodeType.ntClosed:n=!e.IsOpen}e.m_polygon.length>0&&n&&s.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,s)},t.Clipper.OpenPathsFromPolyTree=function(e){for(var i=new t.Paths,s=0,n=e.ChildCount();s<n;s++)e.Childs()[s].IsOpen&&i.push(e.Childs()[s].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,s){var n=e.length-1;if(!(n<0)){var r=new t.PolyNode;if(r.m_jointype=i,r.m_endtype=s,s===t.EndType.etClosedLine||s===t.EndType.etClosedPolygon)for(;n>0&&t.IntPoint.op_Equality(e[0],e[n]);)n--;r.m_polygon.push(e[0]);for(var o=0,a=0,A=1;A<=n;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(!(s===t.EndType.etClosedPolygon&&o<2)&&(this.m_polyNodes.AddChild(r),s===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 s=0,n=e.length;s<n;s++)this.AddPath(e[s],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 s=i.X-e.X,n=i.Y-e.Y;if(0===s&&0===n)return new t.DoublePoint2(0,0);var r=1/Math.sqrt(s*s+n*n);return s*=r,n*=r,new t.DoublePoint2(n,-s)},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 s;this.MiterLimit>2?this.m_miterLim=2/(this.MiterLimit*this.MiterLimit):this.m_miterLim=.5,s=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 n=3.14159265358979/Math.acos(1-s/Math.abs(e));for(this.m_sin=Math.sin(t.ClipperOffset.two_pi/n),this.m_cos=Math.cos(t.ClipperOffset.two_pi/n),this.m_StepsPerRad=n/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<=n;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),(n=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)n.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)),n.AddPath(a,t.PolyType.ptSubject,!0),n.ReverseSolution=!0,n.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 s=1;s<i.ChildCount();s++)r.AddChild(i.Childs()[s])}else r.Clear();else{var n,r=e[0],o=e[1];if(t.Clear(r),this.FixOrientations(),this.DoOffset(o),(n=new t.Clipper(0)).AddPaths(this.m_destPolys,t.PolyType.ptSubject,!0),o>0)n.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)),n.AddPath(a,t.PolyType.ptSubject,!0),n.ReverseSolution=!0,n.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,s){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(s){case t.JoinType.jtMiter:var n=this.m_normals[e].X*this.m_normals[i].X+this.m_normals[e].Y*this.m_normals[i].Y+1;n>=this.m_miterLim?this.DoMiter(e,i,n):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 s=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*s)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[i].Y+this.m_normals[i].X*s)))),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*s)),t.ClipperOffset.Round(this.m_srcPoly[e].Y+this.m_delta*(this.m_normals[e].Y-this.m_normals[e].X*s))))},t.ClipperOffset.prototype.DoMiter=function(e,i,s){var n=this.m_delta/s;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)*n),t.ClipperOffset.Round(this.m_srcPoly[e].Y+(this.m_normals[i].Y+this.m_normals[e].Y)*n)))},t.ClipperOffset.prototype.DoRound=function(e,i){for(var s,n=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(n))),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))),s=o,o=o*this.m_cos-this.m_sin*a,a=s*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 s=0,n=0;n<e.length;n++)s+=t.Clipper.Area(e[n]);return s/(i*i)},t.JS.BoundsOfPath=function(e,i){return t.JS.BoundsOfPaths([e],i)},t.JS.BoundsOfPaths=function(e,i){i||(i=1);var s=t.Clipper.GetBounds(e);return s.left/=i,s.bottom/=i,s.right/=i,s.top/=i,s},t.JS.Clean=function(e,i){if(!(e instanceof Array))return[];var s=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;s||(e=[e]);for(var n,r,o,a,A,l,c,h=e.length,p=[],u=0;u<h;u++)if(0!==(n=(r=e[u]).length))if(n<3)o=r,p.push(o);else{for(o=r,a=i*i,A=r[0],l=1,c=1;c<n;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<n&&o.splice(l,n-l),o.length&&p.push(o)}return!s&&p.length?p=p[0]:s||0!==p.length?s&&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,s,n,r,o=e.length,a=new Array(o);for(s=0;s<o;s++){for(i=e[s].length,r=new Array(i),n=0;n<i;n++)r[n]={X:e[s][n].X,Y:e[s][n].Y};a[s]=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 s,n,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(s=0;s<y;s++)if(0!==(A=(r=e[s]).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=[],n=0;n<A-2;n++)l=r[n],h=r[n+1],c=r[n+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[n+1]=1,n++);for(a.push({X:r[0].X,Y:r[0].Y}),n=1;n<A-1;n++)p[n]||a.push({X:r[n].X,Y:r[n].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 s,n,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=(s=e[h]).X,A=s.Y,o+=r((a-(l=(n=e[h-1]).X))*(a-l)+(A-(c=n.Y))*(A-c));return t&&e.pop(),o/i},t.JS.PerimeterOfPaths=function(e,i,s){s||(s=1);for(var n=0,r=0;r<e.length;r++)n+=t.JS.PerimeterOfPath(e[r],i,s);return n},t.JS.ScaleDownPath=function(e,t){var i,s;for(t||(t=1),i=e.length;i--;)(s=e[i]).X=s.X/t,s.Y=s.Y/t},t.JS.ScaleDownPaths=function(e,t){var i,s,n;for(t||(t=1),i=e.length;i--;)for(s=e[i].length;s--;)(n=e[i][s]).X=n.X/t,n.Y=n.Y/t},t.JS.ScaleUpPath=function(e,t){var i,s,n=Math.round;for(t||(t=1),i=e.length;i--;)(s=e[i]).X=n(s.X*t),s.Y=n(s.Y*t)},t.JS.ScaleUpPaths=function(e,t){var i,s,n,r=Math.round;for(t||(t=1),i=e.length;i--;)for(s=e[i].length;s--;)(n=e[i][s]).X=r(n.X*t),n.Y=r(n.Y*t)},t.ExPolygons=function(){return[]},t.ExPolygon=function(){this.outer=null,this.holes=null},t.JS.AddOuterPolyNodeToExPolygons=function(e,i){var s=new t.ExPolygon;s.outer=e.Contour();var n,r,o,a,A,l,c=e.Childs(),h=c.length;for(s.holes=new Array(h),o=0;o<h;o++)for(n=c[o],s.holes[o]=n.Contour(),a=0,l=(A=n.Childs()).length;a<l;a++)r=A[a],t.JS.AddOuterPolyNodeToExPolygons(r,i);i.push(s)},t.JS.ExPolygonsToPaths=function(e){var i,s,n,r,o=new t.Paths;for(i=0,n=e.length;i<n;i++)for(o.push(e[i].outer),s=0,r=e[i].holes.length;s<r;s++)o.push(e[i].holes[s]);return o},t.JS.PolyTreeToExPolygons=function(e){var i,s,n,r,o=new t.ExPolygons;for(s=0,r=(n=e.Childs()).length;s<r;s++)i=n[s],t.JS.AddOuterPolyNodeToExPolygons(i,o);return o}}();var He=getDefaultExportFromCjs(ze.exports);function alignByMinDist(e,t,i){const s=e.length,n=t.length;if(s<1||n<1)return t.slice();let r=0,o=1/0;for(let a=0;a<n;a++){const A=e[0],l=t[a%n],c=A.x-l.x,h=A.y-l.y,p=e[s-1],u=t[i?Math.min(a+s-1,n-1):(a+s-1)%n],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 s=0;s<i;s++){const n=e[s],r=e[(s+1)%i];t+=n.X*r.Y-r.X*n.Y}return t>0?1:t<0?-1:0}const _inflate=(e,t,i=!1)=>{const s=new He.ClipperOffset;s.MiterLimit=4,s.AddPath(e,He.JoinType.jtMiter,i||2==e.length?He.EndType.etOpenButt:He.EndType.etClosedPolygon);const n=new He.Paths;return s.Execute(n,t),n};function _inflateopen(t,i){const s=new He.ClipperOffset;s.MiterLimit=4,s.ArcTolerance=.25;const n=i*e,r=toclipformat(t);s.AddPath(r,He.JoinType.jtMiter,He.EndType.etClosedPolygon);const o=new He.Paths;s.Execute(o,n);let a=fromclipformat(o[0]);return getshape().frompt(a)}return{offset(t,i){const s=new He.ClipperOffset;s.MiterLimit=4,s.ArcTolerance=.25;const n=Math.abs(i)*e,r=toclipformat(t.pt);s.AddPath(r,He.JoinType.jtMiter,He.EndType.etOpenButt);const o=new He.Paths;s.Execute(o,n);let a=fromclipformat(o[0]);return getshape().frompt(a)},inflate:function inflate(t,i=2,s=!1,n=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(s){a.orient!=t.orient&&a.reverse();let A=alignByMinDist(t.pt,a.pt,n);if(a.frompt(A),n>0&&t.pt.length>=3){function estendi1(e,t){let i=e.segment(0).ruotata(-Math.PI/2,200,!0),s=e.segment(-2).ruotata(-Math.PI/2,200),n=t.segment(-2).interseca(s),r=t.segment(0).interseca(i);r&&(t.pt[0]=r),n&&(t.pt[t.pt.length-1]=n)}function estendi2(e,t){let i=e.segment(-1),s=t.segment(0),n=i.interseca(s);n&&(t.pt[0]=n),s=t.segment(-2);let r=i.interseca(s);r&&(t.pt[t.pt.length-1]=r)}1==n?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 s=alignByMinDist(e.pt,i.pt,0);return i.frompt(s),i},inflatecornici(e,t=2,i,s){let n,r=e.npt;if(2==r){let i=e.segment(0).offset(t);n=getshape().frompt([i.p1,i.p2])}else if(3==r){let i=e.segment(0).offset(t),s=e.segment(1).offset(t);if(i.isparallela(s))n=getshape().frompt([i.p1,s.p2]);else{let e=i.interseca(s);n=getshape().frompt([i.p1,e,s.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);n=_inflateopen([...e.pt,u,p],t);let g=n.pt.reduce(((e,t,i)=>(t.x-p.x)**2+(t.y-p.y)**2<(n.pt[e].x-p.x)**2+(n.pt[e].y-p.y)**2?i:e),0);n.pt=n.pt.slice(g+2).concat(n.pt.slice(0,g)),n.orient!=e.orient&&n.reverse(),i&&(e.truncatebefore(i),n.truncatebefore(i)),s&&(n.truncateafter(s),e.truncateafter(s))}return n},intersecasplitter(e,t){const i=new He.Clipper,s=[toclipformat(t.pt)],n=[toclipformat(e.pt)];i.AddPaths(s,He.PolyType.ptSubject,!0),i.AddPaths(n,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],s=o.pt.findIndex((e=>Math.abs(e.x-i.x)<.01&&Math.abs(e.y-i.y)<.01));if(s>0){s-=e,0!=s&&o.selezionaprimo(s);break}}}}return o},offsetpts(t,i=.01){const s=e*i;let n=_inflate(toclipformat(t),s);if(n&&n.length)return fromclipformat(n[0])},areesplitter(e,t,i=!0){if(!Array.isArray(e)||e.length<3)return;if(!t||0==t.length)return[e];const s=new He.Paths,n=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)s.push(e);for(let e of o)n.push(e);const a=new He.Clipper;a.AddPaths(s,He.PolyType.ptSubject,!0),a.AddPaths(n,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 s=new He.Paths,n=new He.Paths;for(let t of e){let e=[toclipformat(t.pt)];for(let t of e)s.push(t)}if(t&&t.length)for(let e of t){let t=toclipformat(e.pt);n.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)n.push(e)}const r=new He.Clipper;r.AddPaths(s,He.PolyType.ptSubject,!0),r.AddPaths(n,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 s=this.x,n=this.y;i=[new Linea2(0,0,100,0),new Linea2(s,0,s,100),new Linea2(s,n,s-100,n),new Linea2(0,n,0,n-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:s,xrows:n,xclines:r}=this,o=n.map((e=>e.tojson())),a=r.map((e=>({p1:e.p1,p2:e.p2})));return a=a.slice(4),{x:e,y:t,curlayer:s,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:s,pc:n,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:s,pc:n,shape:r,lines:a,hidden:o,info:A,pos:l,draw:this.draw.tojson()}}}class Vis2d{constructor(e,t,i){this.name=e,this.visible=t,this.des=i,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:s,vec:n}=this;return{name:t,visible:i,des:s,vec:[...n],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.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`})}addquota(e,t,i,s,n=0,r="",o=1,a=.25){this.vec.push({type:"quota",x1:e,y1:t,x2:i,y2:s,d:n,text:r,spessore:a,color:"black",scalafont:o})}addqpunto(e,t,i,s,n=0,r="",o=1,a=.25){this.vec.push({type:"qpunto",x1:e,y1:t,x2:i,y2:s,d:n,text:r,spessore:a,color:"black",scalafont:o})}addpoint(e,t=-1,i="red",s=8){return e&&this.vec.push({type:"point",p:e,id:t,color:i,spessore:1*s}),this}addline(e,t=-1,i=void 0,s=1){return e&&this.vec.push({type:"line",l:e,id:t,color:i,spessore:1*s}),this}addrect(e,t=-1,i=void 0,s=1){return e&&this.vec.push({type:"rect",l:e,id:t,color:i,spessore:1*s}),this}addimg(e,t){return e&&this.vec.push({type:"img",l:e,img:t}),this}addrecta(e,t=-1,i=void 0){return e&&this.vec.push({type:"recta",l:e,id:t,color:i,spessore:0}),this}addshape(e,t=void 0,i=1){return e&&this.vec.push({type:"shape",s:e,color:t||this.randomcolor(),spessore:1*i}),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,s){if("h"==t&&(t="o"),e||(e=[]),"number"==typeof i&&!["a","as"].includes(t))return{cod:"__",macro:"",sps:i};let n=e.find((e=>e.tipo.includes(t)&&e.cod==i&&(e.isshape||s||"a"!=t)));return n||(n=e.find((e=>e.tipo.includes(t)&&(e.isshape||s||"a"!=t)))),n||(n={cod:"__",macro:"",sps:0}),"a"!=t&&"as"!=t||"__"==n.cod||n.color||(n.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)}(n.cod)}, 95%, 97%`),n}function getbordi(e,t){let i,s=!1;if(Array.isArray(t)){t.length=4;let n=t[0]||"";i=t.map((t=>checkoggetto(e,"b",t||n))),s=i.every((e=>e.sps===i[0].sps))}else{let n=checkoggetto(e,"b",t);i=[n,n,n,n],s=!0}return{bordi:i,uguali:s,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,s,n=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,s){let r=e.infoquad(t);if(r&&r.distanza){let o=getshape().frompt(s||[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:++n,type:`b${i}`,info:r};s&&(A.shape=a.pt),B.push({type:`b${i}`,pt:o.pt}),C.push(A)}}n=n||0;let E=e.pt.length,x=E-1;s||(s=[]);let{bordi:w,uguali:v,senza:P}=getbordi(s,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=[],s=[];for(let s=0;s<E;s++){t=0==s?w[0].sps:s==x-1?w[2].sps:s==x?w[3].sps:w[1].sps,"number"!=typeof t&&(t=0);let n=e.segment(s).offset(-t);i.push(n)}for(let e=0;e<E;e++){let t=i[e].interseca(i[(e-1+E)%E]);s.push(t)}r=getshape().frompt(s)}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),s=i.interseca(m);s&&i.onsegment(s)&&(b=t,p=s),s=i.interseca(I),s&&i.onsegment(s)&&(y=t,u=s)}b-=1,y=x-2-y;let s=e.pt[0],n=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),n=h,C=g;break;case"o":eseguipezzo(e.segment(x),new Linea2(c,a),3),s=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(s,e.pt[1]),new Linea2(n,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(s,A),new Linea2(n,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(s,e.pt[1]),new Linea2(n,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]),s=i.offset(-t[1]);eseguipezzo(i,s,1,e.pt)}}return{countid:n,shape2:r,shapetop:o,bordi:w,dati:C,draws:B}}function creaprofiloesterno(e,t){let i,{x:s,y:n,tipo:r,bordo:o,taglio:a,h1:A,h2:l,l1:c,l2:h,forma:p}=e;s=s<50?50:s,n=n<50?50:n,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<s?c:0,A>0&&A<n?n-A:n),u.push(h>0&&h<s-c?s-h:s,l>0&&l<n&&l!=A?n-l:n);break;case"a":if(p){let e=getshape().fromstr(p);e.alignline({x:c,y:n-A},{x:s-h,y:n-l}),u.push(...e.vec)}else if((A||l)&&A>=0&&A<Math.min(n,s/2)&&l>=0&&l<Math.min(n,s/2)){let e=getshape().fromstr(`a30;${c||0};${n-A};${s/2};${n};${s-h};${n-l}`);u.push(...e.vec)}else u.push(0,n,s,n);break;case"s":c>0&&A>0?u.push(0,n-A,c,n):u.push(0,n),h&&h<s-c&&l>0&&l<n?u.push(s-h,n,s,n-l):u.push(s,n);break;default:u.push(0,n,s,n)}u.push(s,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 s=1/0,n="";for(let r of e){let e=(r.x-t)**2+(r.y-i)**2;e<s&&(s=e,n=r.k)}return n}function generatesegments(e,t,i=!1,s=!1){let n=[];if(e?.length>=2){if(s){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 s=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>s){let t;t=i?{a:e[s].b,b:e[r-1].a}:{a:e[s].a,b:e[r-1].b},n.push(t)}s=r}}s<e.length-1&&(i?n.push({a:e[s].b,b:e[e.length-1].a}):n.push({a:e[s].a,b:e[e.length-1].b}))}else n.push({a:e[0].b,b:e[e.length-1].a})}return n}function makedivisions(e,t,i){delete e.arre;let s=[],n=[],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)n.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];n.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 n=a.infoquad(A);if(n&&n.distanza){let o=p.clone(),a=checkoggetto(i,e,t);(n.sx||n.sy)&&o.move(-n.sx||0,-n.sy||0),n.angle&&o.rotate(-n.angle||0);let A={id:c,type:e,cod:t,c2:a,shape:o.pt,info:n};r.push(A),A?.shape&&s.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 s=new Linea2({x:e.x,y:t.a},{x:e.x,y:t.b}),n=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,s,n,e.sp/2,e.id)}))}));for(let e of b){let t=[...e.cuts],i=[...B];for(let s of C)i.push({a:s.x,b:s.x+s.sp}),isinseg(s.segs,e.x+e.sp/2)&&t.push(s.x+s.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}),s=new Linea2({x:t.b,y:e.x},{x:t.a,y:e.x});adddatilin(e.sp?"o":"l",e.cod,s,i,e.sp,e.id)}}let x=shapeclip().areesplitter(t.pt,n),w=function getareacodes(e){let t,i,s,n,r=[];for(let o=0;o<=e.vert.length;o++){if(0==o)t="v0",i=0;else{let s=e.vert[o-1];t=`${s.dir}${s.id}`,i=s._v}for(let o=0;o<=e.oriz.length;o++){if(0==o)s="o0",n=0;else{let t=e.oriz[o-1];s=`${t.dir}${t.id}`,n=t._v}r.push({k:t+s,x:i,y:n})}}return r}(e);for(let t of x){let n=getshape().frompt(t),{p1:o,width:a,height:A,isrect:l}=n.dims(),c=findareacod(w,o.x,o.y),h=e.aree[c]||e.area||"",p=checkoggetto(i,"a",h,l),u=n.pt.findIndex((e=>Math.abs(e.x-o.x)<.001&&Math.abs(e.y-o.y)<.001));u>0&&n.selezionaprimo(u),n.pt.length&&(n.move(-o.x,-o.y),1==n.orient&&n.reverse()),r.push({id:c,cod:h,c2:p,type:"a",shape:l?null:n.pt,info:{isrect:l?1:0,sx:o.x,sy:o.y,rot:0,width:a,height:A}}),s.push({type:l?"a":"as",sx:o.x,sy:o.y,dx:a,dy:A,id:c,cod:h,rot:0,pt:n.pt,color:p.color})}return{ff:e,h1:b,ph:y,v1:C,pv:B,draws:s,lines:o,dati:r}}function ordinabase(e,t,i,s,n,r,o,a){let A=[];if(i){for(let n of i){let i=checkoggetto(e,t,n.cod).sps||0,a=0;switch(n.tipo){case"d-":a=s-n.v;break;case"p":a=s*n.v/100;break;case"p-":a=s*(100-n.v)/100;break;default:a=n.v}if(i&&"c"==n.align?a-=i/2:i&&"r"==n.align&&(a-=i),a=Math.round(10*a)/10,n._x0=a,n._x1=a+i,n._v=a+i/2,n._valid=a>0&&a<s,a>r&&a<s-o){let e=[];n.cuts&&n.cuts.length&&n.cuts.forEach((t=>{e.push(t<0?s+t:t)})),A.push({id:n.id,x:a,sp:i,cuts:e,cod:n.cod})}}A.sort(((e,t)=>e.x-t.x))}let l=[],c=r;"a"==a&&(s*=1.3);for(let e=0;e<A.length;e++){let t=A[e];t.x>=c+n&&t.x+t.sp<=s-o-n&&(t.min=c+n,t.max=s-o-n,l.length>0&&(l[l.length-1].max=t.x-n),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:s-o,b:s-o}),{dati:l,punti:h}}function check(e){let{x:t,y:i,area:s,bordo:n,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"),s=s||"__",n=n||"__",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:s,bordo:n,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,s,n,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:s,cod:n,cuts:o||[]}}function addoriz(e,t,i,s,n,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;s||(s=e.goriz||o||"__"),Array.isArray(n)&&(r=n,n="c"),e.oriz||(e.oriz=[]);let a=addtaglio(0,"o",t,i,s,n,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,s,n,r){return addoriz(e,t,i,s,n,r)},addoriz:addoriz,addvert:function addvert(e,t,i,s,n,r){let o=Array.isArray(e.bordo)?e.bordo[0]:e.bordo;s||(s=e.gvert||o||"__"),Array.isArray(n)&&(r=n,n="c"),e.vert||(e.vert=[]);let a=addtaglio(0,"v",t,i,s,n,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,s){return makedivisions(e,i,s)},check:check,checkoggetto:checkoggetto,creaprofiloesterno:creaprofiloesterno,create:function create(e,t,i,s){s||(s={});let{minvano:n,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}=s,B=check({x:e,y:t,area:C,bordo:i,gvert:I,goriz:b,priority:r,minvano:n,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 s,{name:n="image",png:r,width:o,height:a,zoom:A,zoomatutto:l,scene:c,imposta:h,frustumSize:p=10}=i;h&&(s=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=s),new File([I],`${n}.${r?"png":"webp"}`,{type:r?"image/png":"image/webp"})}function handleMovimenti(e,t={}){let{container:i,width:s,height:n,camera:r,scene:o,raycaster:a}=t;if(!i)return;const A=i.getBoundingClientRect(),l={x:(e.clientX-A.left)/s*2-1,y:-(e.clientY-A.top)/n*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:s,width:n,height:r,camera:o,scene:a,raycaster:A,emit:l,hoverables:c}=i;if(!s)return;if(!c||!c.length)return;const h=s.getBoundingClientRect(),p={x:(e.clientX-h.left)/n*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:s,height:n,camera:r,scene:o,raycaster:a,emit:A,hoverables:l}=t;if(!i)return;const c=i.getBoundingClientRect(),h={x:(e.clientX-c.left)/s*2-1,y:-(e.clientY-c.top)/n*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 s;switch(t){case"x":s=16711680;break;case"y":s=65280;break;case"z":s=255;break;default:throw new Error("asse non valido")}const n=new e.Group;n.name=`picker_axis_${t}`,n.userData.type="move",n.userData.axis=t;const r=new e.CylinderGeometry(.025*i,.025*i,.7*i,8),o=new e.MeshBasicMaterial({color:s,depthTest:!1,depthWrite:!1}),a=new e.Mesh(r,o);a.position.y=.35*i,a.userData.parentType="move",n.add(a);const A=new e.ConeGeometry(.06*i,.18*i,12),l=new e.MeshBasicMaterial({color:s,depthTest:!1,depthWrite:!1}),c=new e.Mesh(A,l);return c.position.y=.7*i+.09*i,c.userData.parentType="move",n.add(c),"x"===t&&(n.rotation.z=-Math.PI/2),"z"===t&&(n.rotation.x=Math.PI/2),n.visible=!1,n}function creaCorner(){const t=new e.BoxGeometry(.1,.1,.1),i=new e.MeshBasicMaterial({color:"black",depthTest:!1,depthWrite:!1}),s=new e.Mesh(t,i);return s.name="picker_corner",s.userData.type="corner",s.visible=!1,s}function creaRotateHandler(t="y",i=1){const s={x:16711680,y:65280,z:255}[t]||16776960,n=new e.TorusGeometry(i,.02*i,12,64,2*Math.PI),r=new e.MeshBasicMaterial({color:s,transparent:!0,opacity:.7,depthTest:!1,depthWrite:!1}),o=new e.Mesh(n,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,s=.11){const n={x:16711935,y:65535,z:16776960}[t]||16777215,r=new e.CylinderGeometry(0,s,i,3),o=new e.MeshBasicMaterial({color:n,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),s=i.min,n=i.max;this.grp.position.copy(s);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[s,n]=i.split(":");switch(s=s.trim().toLowerCase(),n=n?n.trim().toLowerCase():"",s){case"a":t.axis=n?n.split(""):["x","y","z"];break;case"d":t.drag=n?n.split(""):["x","y","z"];break;case"r":t.rotate={enabled:!0,step:n&&!isNaN(Number(n))?Number(n):null};break;case"c":t.corners=!n||n.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?n.x:s.x,2&r?n.y:s.y,4&r?n.z:s.z);i.position.copy(o.clone().sub(s)),i.material.color.set(t),i.visible=!0}))}const l=a.drag||[];if(l.includes("z")){const t=new e.Vector3((s.x+n.x)/2-s.x,0,n.z-s.z);this.draggerZ.position.copy(t),this.draggerZ.visible=!0}if(l.includes("y")){const t=new e.Vector3(0,0,(s.z+n.z)/2-s.z);this.draggerY.position.copy(t),this.draggerY.visible=!0}if(l.includes("x")){const t=new e.Vector3(n.x-s.x,0,(s.z+n.z)/2-s.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 s=new e.Vector3;t.getWorldPosition(s);let n=s.distanceTo(i);const r=.05*n,o=.06*n,a=.07*n,A=.04*n;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:s,RGBELoader:n,SAOPass:r}=e,{createSAOPass:o,updateSAOPass:a}=function ssao(e){return{createSAOPass:function createSAOPass({composer:t,scene:i,camera:s,renderer:n}){const r=new e(i,s,!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,s){let n,r=null,o=null;return{refreshScene:function refreshScene(t,i,n,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))})),n){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);s(n,r)}}const a=t?.userData?.dirLight;a&&o&&(a.shadow.needsUpdate=!0)},disposeHdri:function disposeHdri(){n&&(n.dispose(),n=null)},removeHdri:function removeHdri(e){e&&(e.environment=null),r&&(r.dispose(),r=null),o&&(o.dispose(),o=null)},setHdri:async function setHdri(s,a){if(!s||!a||!n)return;let A;A=i._cdn?`${i._cdn}__/hdr/${s}`:i.fullget("mufiles/gethdr",{name:s});let l=new Promise(((i,s)=>{(new t).load(A,(t=>{t.mapping=e.EquirectangularReflectionMapping;const s=n.fromEquirectangular(t),r=s.texture;t.dispose(),i({envMap:r,rt:s})}),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(n&&n.dispose(),n=new e.PMREMGenerator(t),n.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 s=20;t.shadow.camera.left=-20,t.shadow.camera.right=s,t.shadow.camera.top=s,t.shadow.camera.bottom=-20,t.shadow.camera.near=.5,t.shadow.camera.far=50,i.add(t);const n=new e.AmbientLight(16777215,.1);i.add(n),i.userData.dirLight=t,i.userData.ambLight=n}}}}(t,n,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),s=new e.Vector3;i.getSize(s);const n=new e.Vector3;i.getCenter(n);const r=new e.OrthographicCamera(-s.x/2,s.x/2,s.z/2,-s.z/2,.001,50);r.position.set(n.x,10,n.z),r.up.set(0,0,-1),r.lookAt(n);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*s.x,1.15*s.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(n.x,i.min.y+.001,n.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:s,shadowScene:n}){if(!t||!i)return;n.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(n,s),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,s,n,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(s.isPerspectiveCamera){let t;const i=e.MathUtils.degToRad(s.fov),r=2*Math.atan(Math.tan(i/2)*h),o=(new e.Vector3).subVectors(s.position,l).normalize(),a=s.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 s=(new e.Vector3).subVectors(t,l),n=s.dot(a),A=s.dot(c),h=s.dot(o),p=Math.abs(n)/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);s.position.copy(l).addScaledVector(o,t);const m=8;s.near=.01,s.far=Math.max(1,t+1.2*f+m),s.updateProjectionMatrix(),n.minDistance=s.near,n.maxDistance=s.far-4,s.updateProjectionMatrix(),s.lookAt(l)}else if(s.isOrthographicCamera){let e=1*c.x,t=1*c.y;e/t<h?e=t*h:t=e/h,s.left=-e/2,s.right=e/2,s.top=t/2,s.bottom=-t/2,s.zoom=1,s.updateProjectionMatrix(),s.position.set(l.x,l.y,s.position.z),s.lookAt(l.x,l.y,l.z)}n&&(n.target.copy(l),n.update())},resetCameraView:function resetCameraView(t,i,s,n,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=n/(1.05*c),d=r/(1.05*h),f=Math.min(g,d),m=n/(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),s.object=i,s.target.copy(A),s.update()}}}(t,a),{exportGLB:x}=function exportscene(e,t){return{exportGLB:async function exportGLB(i,s,n={}){if(!i)return;s||(s="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,...n};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),n=document.createElement("a");n.href=i,n.download=s,n.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 s=new e.Layers;return s.enable(0),s.enable(1),s.enable(2),t.traverse((t=>{if(s.test(t.layers)&&t.isMesh&&s.test(t.layers)&&(Array.isArray(t.material)?t.material.every((e=>e.isMeshStandardMaterial||e.isMeshPhysicalMaterial)):t.material.isMeshStandardMaterial||t.material.isMeshPhysicalMaterial)){const s=t.geometry.clone(),n=Array.isArray(t.material)?t.material.map((e=>e.clone())):t.material.clone(),r=new e.Mesh(s,n);t.updateWorldMatrix(!0,!1),t.getWorldPosition(r.position),t.getWorldQuaternion(r.quaternion),t.getWorldScale(r.scale),i.add(r)}})),i}}}(t,s);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 s=new Linea2(e.p1,e.p2);s.rotate(-i.ang),s.move(i.pos.x,i.pos.z),s.valid=!0,t.push(s)}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 s=t[e];for(let n=e+1;n<t.length;n++){const e=t[n];if(!e.valid)continue;if(!s.isparallela(e))continue;if(!s.isCollineare(e))continue;s.a1b=e.onsegment(s.p1,i),s.a2b=e.onsegment(s.p2,i),s.b1a=s.onsegment(e.p1,i),s.b2a=s.onsegment(e.p2,i);const{x:r,y:o}=s.direzione,{x:a,y:A}=e.direzione;if(r*a+o*A>0)if(s.b1a&&s.b2a)e.valid=!1;else{if(s.a1b&&s.a2b){s.valid=!1;break}if(s.a1b&&s.b2a){let i=new Linea2(e.p1,s.p2);i.valid=!0,t.push(i),s.valid=!1,e.valid=!1;break}if(s.a2b&&s.b1a){let i=new Linea2(s.p1,e.p2);i.valid=!0,t.push(i),s.valid=!1,e.valid=!1;break}}else{const n=s.proiezionet(s.p1).t,r=s.proiezionet(s.p2).t,o=s.proiezionet(e.p1).t,a=s.proiezionet(e.p2).t,A=Math.min(n,r),l=Math.max(n,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(s.puntot(A),s.puntot(p));e.valid=!0,t.push(e)}if(l>u){let e=new Linea2(s.puntot(l),s.puntot(u));e.valid=!0,t.push(e)}if(c<p){let e=new Linea2(s.puntot(c),s.puntot(p));e.valid=!0,t.push(e)}if(h>u){let e=new Linea2(s.puntot(h),s.puntot(u));e.valid=!0,t.push(e)}s.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],s=!0;for(;s;){s=!1;for(let n=e+1;n<t.length;){let e=t[n];samepoint(i.pt[0],e.pt[0])?(e.pt.reverse(),i.pt.unshift(...e.pt.slice(0,-1)),t.splice(n,1),s=!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(n,1),s=!0):samepoint(i.pt[0],e.pt[e.pt.length-1])?(i.pt.unshift(...e.pt.slice(0,-1)),t.splice(n,1),s=!0):samepoint(i.pt[i.pt.length-1],e.pt[0])?(i.pt.push(...e.pt.slice(1)),t.splice(n,1),s=!0):n++}}}return t}async function valutagrafica(e,t,i,s,n){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","ul","ua","up","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 n,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 s,a,c=/^#(d|des|descrizione)\s*=\s*(.*)\s*$/im.exec(t);if(c)s="#d",a=await e.vari.valuta(c[2]);else{let e=await m.parametrokeyval(t);s=e.k,a=e.v}s&&!h[s]&&(h[s]=!0,y.includes(s)?"#d"==s?l=a:("string"==typeof a&&(a=o(a)),["l","a","p"].includes(s)&&e.vari.add(s,String(a)),r[s]=a,A=!0):"string"==typeof a?n.push(`${s}=${a}`):e.vari.add(s,a))}let C;if(n=[],r={},A=!1,l="",h={},s&&s.keys&&s.keys[p]&&(C=s.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){let e=d.head.filter((e=>!["g","p"].includes(e.t)));for(const t of e)await _parsepars(t.cod)}let B={iscad:A,isheader:I,name:d.name,des:l,leveleval:f.leveleval};I&&p&&(B.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")),B.cadv=r),await d.impostaparametri(g,n,!0,C);let E=i[p];p&&I&&E&&E.pars&&(B.pars=E.pars,f.leveleval++,await d.setparametri(E.pars));let x=e.vari.var("_rootnode");if(e.vari.add("_rootnode","0"),B.rows=await a(e,d,d.codice,f),e.vari.add("_rootnode",x),p&&I&&(B.spars=d.getparametri()),A)for(let t in b)e.vari.dictionary[t]=b[t];return B},parsefnpunto:async e=>{let{dati:t,vari:i,id:s,output:n}=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:s}=await i.parametrokeyval(e);t&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)&&(u[t]=s||"")}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]));n.push({t:"fn",fn:h,id:s,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 n)&&await n(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 s of t){if(ismacro(s)){if(s.id==e)return void(i=s);s.rows&&_getnode(s.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 s of e.rows)ismacro(s)&&(s.id&&s.isheader?(t.push({id:s.id,name:s.name,des:s.des||"",spec:s.pars?1:0,level:i}),_xfiltrati(s,i+1)):_xfiltrati(s,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 s=i.cadv[t];"number"==typeof s&&s&&e.push(`${t}=${s}`)}if(i.pars)for(let t in i.pars){let s=i.pars[t];e.push(`${t}=${s}`)}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,s,{inverse:n=!0,height:r=600,strokescale:o=2,fontsize:a=2,attivo:A=!0,opacita_inattivo:l=.35}={}){if(!s||!s.vec||!s.vec.length)return;let c;if("boolean"==typeof s.attivo&&(A=s.attivo),n){const f=new e.Group({scaleY:-1,y:r});i.add(f),c=f}else c=new e.Group;i.add(c),c.opacity(A?1:l);const h=[c];let p=[],u=!1,g=!0,d=0;function getTesto(t,i,s,n,r,o,a,A){const l=new e.Text({scaleY:n?A?-1:1:A?1:-1,scaleX:s?-1:1,x:0,y:0,text:t,fontSize:6*i,fill:r||"black"}),c=l.width(),h=l.height(),u=function findFreeY(e,t,i,s){let n=t,r=0;for(;p.some((t=>Math.abs(e-t.x)<i&&Math.abs(n-t.y)<s))&&(n-=1.01*s,!(++r>10)););return p.push({x:e,y:n,width:i,height:s}),n}(o,a,c,h);return l.x(o),l.y(u),A||l.offset({x:c/2,y:h/2}),l}for(let m of[0,1]){function drawobjects(i,s){for(const r of i)switch(r.type){case"group":if(s?.[r.name]){let e=s[r.name];e.vec?.length&&++d<20&&(drawobjects(e.vec,e.gr),d--)}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&&(u=!u),i.scaleY<0&&(g=!g);const s=new e.Group(i);c.add(s),h.push(s),c=s;break}case"pop":if(h.length>1){const e=h.pop();e.getAttr("scaleX")<0&&(u=!u),e.getAttr("scaleY")<0&&(g=!g),c=h[h.length-1]}break;case"img":if(0===m){const{x:i,y:s}=r.l.p1,o=r.l.p2.x-i,a=r.l.p2.y-s;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=s,u=o,g=a,d=n;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:n?s+a:s,width:o,height:a,scaleY:n?-1:1})):c.add(new e.Image({name:"img",x:i,y:n?s+a:s,image:A,width:o,height:a,scaleY:n?-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,u,g,"black",e,t,n))}break;case"rect":case"recta":if(0===m){const{x:t,y:i}=r.l.p1,s=r.l.p2.x-t,n=r.l.p2.y-i;c.add(new e.Rect({x:t,y:i,width:s,height:n,stroke:"rect"===r.type?r.color||"black":void 0,fill:"recta"===r.type?r.color||"rgba(0,0,255,0.2)":void 0,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,u,g,r.color||"black",r.p.x+2*e,r.p.y+6*e,n))}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)":void 0,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(getTesto(r.text,e,u,g,t,r.x||0,r.y||0,n))}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,u,g));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(s.vec,s.gr)}}function quotalineare(t,i,s,n,r,o,a,A="black",l=1,c,h){const p=s-t,u=n-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=[s+d,n+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:[s,n,s+1.2*d,n+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;return C.add(new e.Rect({x:b-B/2,y:y-E/2,width:B,height:E,fill:"white",rotation:180*Math.atan2(u,p)/Math.PI,listening:!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:180*Math.atan2(u,p)/Math.PI})),C}function quotapunto(t,i,s,n,r,o="black",a=1,A,l){const c=t+n,h=i+n,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:s,fontSize:6*r,fill:o,offsetX:s.length*r*2,offsetY:3*r})),p}return{renderizzaSuLayer:renderizzaSuLayer,saveimg_konva:async function saveimg_konva(t,i,s,n,r,o=10,a=1,A=2){let l=`${t}${s.name}`;const c=document.createElement("div");c.style.position="absolute",c.style.left="-10000px",c.style.top="-10000px",c.style.width=n+"px",c.style.height=r+"px",document.body.appendChild(c),console.log(s);const h=new e.Stage({container:c,width:n,height:r}),p=new e.Layer;h.add(p),renderizzaSuLayer(i,p,s,{height:r,strokescale:a,fontsize:A}),p.draw();const u=p.children[0].getClientRect({skipTransform:!1}),g=(n-2*o)/u.width,d=(r-2*o)/u.height,f=Math.min(g,d),m=-u.x*f+o+(n-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]),s=new Uint8Array(i.length);for(let e=0;e<i.length;e++)s[e]=i.charCodeAt(e);return new File([s],`${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 st=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 nt=tt;var rt=class Layer extends nt{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,s]=i;e.push(3,t),e.push(350,s.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,s){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.x2=i,this.y2=s}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,s,n,r){super(["AcDbEntity","AcDbLine"]),this.x1=e,this.y1=t,this.z1=i,this.x2=s,this.y2=n,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,s,n){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.r=i,this.startAngle=s,this.endAngle=n}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 Lt=class Cylinder extends St{constructor(e,t,i,s,n,r,o,a){super(["AcDbEntity","AcDbCircle"]),this.x=e,this.y=t,this.z=i,this.r=s,this.thickness=n,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 Tt=tt,kt=["left","center","right"],_t=["baseline","bottom","middle","top"];var Rt=class Text extends Tt{constructor(e,t,i,s,n,r="left",o="baseline"){super(["AcDbEntity","AcDbText"]),this.x=e,this.y=t,this.height=i,this.rotation=s,this.value=n,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,s=0){super(["AcDbEntity","AcDbPolyline"]),this.points=e,this.closed=t,this.startWidth=i,this.endWidth=s}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,s,n]=t;e.push(10,i),e.push(20,s),0===this.startWidth&&0===this.endWidth||(e.push(40,this.startWidth),e.push(41,this.endWidth)),void 0!==n&&e.push(42,n)}))}};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,s]=e,n=new Xt(t,i,s);return n.ownerObjectHandle=this.handle,n})),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,s,n,r,o,a,A,l,c,h){super(["AcDbEntity","AcDbFace"]),this.x1=e,this.y1=t,this.z1=i,this.x2=s,this.y2=n,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,s=null,n=[]){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 s=1;s<e.length-t;s++)i.push(s);for(let s=0;s<t+1;s++)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=n,this.degree=t,this.weights=s;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,s,n,r,o){super(["AcDbEntity","AcDbEllipse"]),this.x=e,this.y=t,this.majorAxisX=i,this.majorAxisY=s,this.axisRatio=n,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=st,ti=rt,ii=at,si=ct,ni=pt,ri=gt,oi=ft,ai=It,Ai=yt,li=Bt,ci=xt,hi=wt,pi=Pt,ui=Mt,gi=Lt,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,s){return this.activeLayer.addShape(new ci(e,t,i,s)),this}drawLine3d(e,t,i,s,n,r){return this.activeLayer.addShape(new hi(e,t,i,s,n,r)),this}drawPoint(e,t){return this.activeLayer.addShape(new yi(e,t)),this}drawRect(e,t,i,s,n,r){const o=i-e,a=s-t;r=r||0;let A=null;return A=new fi(n?[[e+o-n,t,r],[e+o,t+n],[e+o,t+a-n,r],[e+o-n,t+a],[e+n,t+a,r],[e,t+a-n],[e,t+n,r],[e+n,t]]:[[e,t],[e,t+a],[e+o,t+a],[e+o,t]],!0),this.activeLayer.addShape(A),this}drawPolygon(e,t,i,s,n=0,r=!1){const o=2*Math.PI/i,a=[];let A=s;const l=n*Math.PI/180;r&&(A=s/Math.cos(Math.PI/i));for(let s=0;s<i;s++)a.push([e+A*Math.sin(l+s*o),t+A*Math.cos(l+s*o)]);return this.activeLayer.addShape(new fi(a,!0)),this}drawArc(e,t,i,s,n){return this.activeLayer.addShape(new pi(e,t,i,s,n)),this}drawCircle(e,t,i){return this.activeLayer.addShape(new ui(e,t,i)),this}drawCylinder(e,t,i,s,n,r,o,a){return this.activeLayer.addShape(new gi(e,t,i,s,n,r,o,a)),this}drawText(e,t,i,s,n,r="left",o="baseline"){return this.activeLayer.addShape(new di(e,t,i,s,n,r,o)),this}drawPolyline(e,t=!1,i=0,s=0){return this.activeLayer.addShape(new fi(e,t,i,s)),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,s=null,n=[]){return this.activeLayer.addShape(new Ci(e,t,i,s,n)),this}drawEllipse(e,t,i,s,n,r=0,o=2*Math.PI){return this.activeLayer.addShape(new Bi(e,t,i,s,n,r,o)),this}drawFace(e,t,i,s,n,r,o,a,A,l,c,h){return this.activeLayer.addShape(new bi(e,t,i,s,n,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 si("DIMSTYLE");this.tables.DIMSTYLE=e}e.add(new ri("*ACTIVE",1e3)),t.add(new ni("standard")),i.add(new oi("ACAD")),this.modelSpace=this.addBlock("*Model_Space"),this.addBlock("*Paper_Space");const s=new li;this.dictionary.addChildDictionary("ACAD_GROUP",s)}_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 s=this._ltypeTable(),n=this._layerTable();e.start("HEADER"),e.addHeaderVariable("HANDSEED",[[5,Qi.peek()]]);const r=Object.entries(this.headers);for(const t of r){const[i,s]=t;e.addHeaderVariable(i,s)}e.end(),e.start("CLASSES"),e.end(),e.start("TABLES"),s.tags(e),n.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,s]=vi[t];return Di[t]=rgb2aci(e,i,s)}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),s=parseInt(e.slice(3,5),16),n=parseInt(e.slice(5,7),16);return Di[t]=rgb2aci(i,s,n)}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 s of e.vec)switch(s.type){case"push":i.push(),(s.x||s.y)&&i.translate(s.x||0,s.y||0,0),s.rot&&i.rotateZ(s.rot);break;case"pop":i.pop();break;case"offset":i.translate(s.x||0,s.y||0,0);break;case"point":{const e=i.transform(s.p.x,s.p.y,0),n=col2aci(s.color);t.setActiveLayer("0",n),t.drawPoint(e.x,e.y),s.id&&t.drawText(e.x+2,e.y+2,6,0,s.id);break}case"line":{const e=i.transform(s.l.p1.x,s.l.p1.y,0),n=i.transform(s.l.p2.x,s.l.p2.y,0),r=col2aci(s.color);if(t.setActiveLayer("0",r),t.drawLine(e.x,e.y,n.x,n.y),s.id){const i=(e.x+n.x)/2,r=(e.y+n.y)/2;t.drawText(i,r,6,0,s.id)}break}case"rect":case"recta":{const e=i.transform(s.l.p1.x,s.l.p1.y,0),n=i.transform(s.l.p2.x,s.l.p2.y,0),r=col2aci(s.color);t.setActiveLayer("0",r);const o="recta"===s.type;t.drawPolyline([[e.x,e.y],[n.x,e.y],[n.x,n.y],[e.x,n.y]],o);break}case"shape":case"shapelin":case"area":{if(!s.s?.length)break;const e=s.s.map((e=>{const t=i.transform(e.x,e.y,0);return[t.x,t.y]})),n="shapelin"!==s.type,r=col2aci(s.color);t.setActiveLayer("0",r),t.drawPolyline(e,n);break}case"text":{const e=col2aci(s.color);t.setActiveLayer("0",e);const n=i.transform(s.x||0,s.y||0,0),r=6*(s.scalafont||1);t.drawText(n.x,n.y,r,0,s.text);break}}return t.toDxfString()}const Mi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:e.DoubleSide});function getorientate(e,t,i,s){switch(t=t||0,i=i||0,s=s||0,e.trim().toLowerCase()){case"alp":return{x:i,y:t,z:s};case"apl":return{x:i,y:s,z:t};case"pla":return{x:s,y:t,z:i};case"pal":return{x:s,y:i,z:t};case"lpa":return{x:t,y:s,z:i};default:return{x:t,y:i,z:s}}}function parselavs(e,t,i=0,s=0,n=0,r="",o="",a=""){let A=muClComments(r),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,s,n),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,s,n),id:t,facce:o}),l}function getemitter(t){let{d:i,name:s,x:n,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(n,r,o),h.userData={emitter:!0,lavs:a,ids:A,faces:l,size:c,name:s},i){const t=new e.SphereGeometry(c||5,8,8),i=new e.MeshBasicMaterial({color:16711680}),s=new e.Mesh(t,i);h.add(s)}return h.layers.set(29),h}function getreceiver(t,i){t.gmats.__istask=1;let{d:s,ori:n="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:(n||"").trim().toLowerCase(),x:r,y:o,z:a,tipo:h,start:p,end:u},s){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,s=new WeakMap;function boxBoxIntersects(e,t,i,s,n){return e.x+t>0&&e.x-t<i&&e.y+t>0&&e.y-t<s&&e.z+t>0&&e.z-t<n}function getFacceToccate(e,t,i,s,n,r){const o=[];function addfaccia(e){r&&!r.includes(e)||o.push(e)}return Math.abs(e.x-0)<t&&addfaccia("s"),Math.abs(e.x-i)<t&&addfaccia("d"),Math.abs(e.y-0)<t&&addfaccia("b"),Math.abs(e.y-s)<t&&addfaccia("a"),Math.abs(e.z-0)<t&&addfaccia("z"),Math.abs(e.z-n)<t&&addfaccia("f"),o.join("")}function getEmitterWorldPosition(t){if(!i.has(t)){const s=new e.Vector3;t.getWorldPosition(s),i.set(t,s)}return i.get(t)}function getReceiverWorldMatrixInverse(e){if(!s.has(e)){const t=e.matrixWorld.clone().invert();s.set(e,t)}return s.get(e)}t.updateMatrixWorld(!0);const n=[],r=[];!function scan(e){e.userData?.receiver&&n.push(e),e.userData?.emitter&&r.push(e),e.children&&e.children.forEach(scan)}(t);let o=[];for(const t of n){const{mat:i,ori:s,x:n,y:a,z:A,start:l,end:c,tipo:h,size:p}=t.userData;let u={id:i,...getorientate(s,n,a,A),tipo:h,ori:s,lavs:[]};l&&u.lavs.push(...parselavs(s,"_start",0,0,0,l,"",""));const g=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(g).clone().add(new e.Vector3(n/2,a/2,A/2));if(!boxBoxIntersects(i,t.userData.size??0,n,a,A))continue;const r=getFacceToccate(i,t.userData.soglia??2,n,a,A,t.userData.faces);r&&r.length&&u.lavs.push(...parselavs(s,t.userData.name,i.x,i.y,i.z,t.userData.lavs,r,"nd"))}c&&u.lavs.push(...parselavs(s,"_end",0,0,0,c,"","")),u.lavs.length&&o.push(u)}return o}function getbb(t,i=!1){if(!i&&t.userData.bb)return t.userData._boundingbox;const s=(new e.Box3).setFromObject(t);return t.userData._boundingbox=s,s}function setorigine(t,i=0,s=0,n=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+s,r.z+n)),o}function scalaoggetto(t,i,s={}){const n=getbb(i),r=new e.Vector3;n.getSize(r);const o=n.min,a=["x","y","z","u","v"],A={};for(let e of a){let t=s[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,s="x"===e?r.x:"y"===e?r.y:r.z,n="x"===e?o.x:"y"===e?o.y:o.z;void 0!==t.distperc&&(t.dist=s*t.distperc),void 0!==t.dist&&(i=(s+t.dist)/s);let a=t.p1?t.p1+n:void 0,l=t.p2?t.p2+n:void 0;void 0!==t.p1perc&&(a=n+s*t.p1perc),void 0!==t.p2perc&&(l=n+s*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:s}=A[e];c[e]=!(1===t&&void 0===i&&void 0===s)}));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,s=e.geometry.attributes.uv,trasf=(e,t)=>{if(!c[t])return e;const{s:i,p1:s,p2:n}=A[t];if(void 0===s||void 0===n)return e*i;const r=n*i-n;if(e<s)return e;if(e>=n)return e+r;return s+(e-s)*((n-s+r)/(n-s))};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(s&&(c.u||c.v)){const e=s.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"));s.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 s=new e.Group;if(t){let n=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=n,{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,ul:f=0,ua:m=0,up:I=0,scale:b=1,scx:y=b,scy:C=b,scz:B=b,emitters:E,emittersname:x,order:w,ignoreTraverse:v}=i;if("number"==typeof w&&n.traverse((e=>{e.isMesh&&(e.renderOrder=w)})),s.position.set(c,h,p),s.rotation.set(u*Ue,g*Ue,d*Ue),(f||m||I)&&(r=new e.Group,r.add(n),r.position.set(f,m,I)),s.scale.set(y,C,B),s.add(r),a&&A&&(s.userData.marker=a,s.userData.markerid=`#mk_${A||""}`,s.userData.marklink=l),o&&(s.userData.noingombro=!0),v&&(s.userData.ignoreTraverse=!0),E&&E.length)for(let e of E)e.name=e.name||x,s.add(getemitter(e))}return s.updateMatrixWorld(!0),s}const Li=e.DoubleSide;let Ti=new e.LineBasicMaterial({color:16711680,transparent:!1,opacity:1}),ki=new e.LineBasicMaterial({color:11579568,transparent:!1,opacity:1});const _i=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:Li}),Ri=new e.MeshStandardMaterial({color:8421504,roughness:.5,metalness:.4,side:Li}),Fi=new e.MeshStandardMaterial({color:11579568,roughness:.5,metalness:.4,side:Li}),Ni=new e.MeshStandardMaterial({color:16711680,roughness:.5,metalness:.4,side:Li}),Oi=new e.MeshStandardMaterial({color:1982639,roughness:.5,metalness:.4,side:Li}),Gi=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:Li}),Yi=new e.MeshStandardMaterial({color:0,roughness:.5,metalness:.4,side:Li}),Ui=.001;function groupfromgeometry(t,i,s,n,r,o,a){let A=new e.Group;A.position.set(s,n,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,Ti);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 s=new e.LineSegments(t,Ti);return s.layers.set(i),s}function getmesh(t,i,s=1,n=!1){let r=new e.Mesh(t,n?i.clone():i);return r.castShadow=!0,r.receiveShadow=!0,r.layers.set(s),r}function get3dshape(t,i,s){if(!t||t.length<3)return new e.BufferGeometry;const n=[];for(let e=0;e<t.length;e++){const i=t[e],s=t[(e+1)%t.length];n.push(i.x,0,i.y),n.push(s.x,0,s.y)}const r=new e.BufferGeometry;r.setAttribute("position",new e.Float32BufferAttribute(n,3));let o=new e.LineSegments(r,i);return o.layers.set(s),o}function creategroup(t,i={}){let{ignoreTraverse:s}=i,n=new e.Group;return n.name=t||"$$",s&&(n.userData.ignoreTraverse=!0),n}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,s="#000"){const n=document.createElement("canvas"),r=n.getContext("2d");r.font="48px sans-serif";const o=Math.ceil(r.measureText(t).width)+16;n.width=o,n.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=s,r.fillText(t,8,32);const a=new e.CanvasTexture(n);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,s=null){const n=(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(n,s||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,s=null,n=5){let r;const o=new e.SphereGeometry(n,8,8);if(r=new e.Mesh(o,s||randombasemat()),i){let e=getspriteid(i||"",n);e.position.set(1.2*n,0,1.2*n),r.add(e)}return r.position.set(t.x,0,t.y),r}async function smat(t,i,s={}){s||(s={});let n=hash(i+JSON.stringify(s));return t.smats[n]||(s.glass?t.smats[n]=await async function smatglass(t,i={}){let s=new e.Color("#080808ff");try{s=new e.Color(t)}catch(e){console.log(e)}let{metalness:n=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:s,metalness:n,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,s):t.smats[n]=await async function smat0(t,i,s={}){let n=i,r="",o=!1;function getFilesToLoad(e,t){let i=[],s=t.match(/^([^(]+)\((([a-zA-Z0-9_\-/]+)_([a-z]+)|([a-z]+))\)$/);if(!s)return{base:t,files:i};let n=s[1],r=!1,o=s[3]||n,a=s[4]||s[5]||"";!a.includes("h")&&e||i.push({suff:"",file:`${o}.webp`,cs:!0});for(let e of a)"t"==e?(r=!0,s[3]&&qi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!1})):"h"!=e&&qi[e]&&i.push({suff:e,file:`${o}_${e}.webp`,cs:!!["","e"].includes(e)});return{base:n,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=s.rot,h=parseFloat(s.s)||1;delete s.s;let p={...s};for(let e in l)if(Xi[e])for(let t of Xi[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 s={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||(s.normalScale=new e.Vector2(t,t))}let n=!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}=qi[a];s[l]=o,"map"===l&&(s._hasMap=!0),"normalMap"===c?(n=!0,s.normalMap=o,delete o.colorSpace,o.needsUpdate=!0,s.normalScale=s.normalScale??new e.Vector2(1,1)):"bumpScale"===c?(r=!0,s.bumpMap=o):Array.isArray(c)&&c.includes("emissive")&&void 0!==p.emissiveIntensity&&0!==p.emissiveIntensity&&(s.emissive=p.emissive||16777215,s.emissiveIntensity=p.emissiveIntensity??1)}}o&&(s.color=new e.Color(i),s._hasColor=!0)}else if(a.includes(".")){let e=await t.tex(a,g,d,f);if(!e)return _i;s.map=e,s._hasMap=!0}if(n&&r?delete s.bumpMap:r&&(s.bumpScale=p.bumpScale??.03),s.transparent=!!u,s.transparent&&(s.depthWrite=!1,s.opacity=p?.opacity??1),void 0!==p.brightness){let t=Number(p.brightness);!isNaN(t)&&t>0&&1!==t&&(s.color||(s.color=new e.Color(1,1,1)),s.color.multiplyScalar(t))}return s._hasMap&&!s._hasColor&&(s.color=new e.Color(1,1,1)),s._hasColor&&!s._hasMap&&delete s.map,delete s._hasColor,delete s._hasMap,new e.MeshStandardMaterial(s)}catch(e){return console.log("errore mat:",e.message,n),_i}}(t,i,s)),t.smats[n]}const Xi={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"]},qi={"":{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={},s=[];function getName(e){i[e]=(i[e]||0)+1;let s=t;return e&&(s+=`_${e}`),i[e]>1&&(s+=i[e]),`${s}.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(qi)){const n=e[i];if(n&&n.image&&!n._extracted){n._extracted=!0;let e,i=n.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")))}}s.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(qi)){const i=e[t];i&&i._extracted&&delete i._extracted}}})),Promise.all(s)}function uvswap(e,t=!1,i=!0){if(e&&e.attributes){const s=i?Ui:1,n=e.attributes.uv;if(n){const e=n.array;for(let n=0,r=e.length;n<r;n+=2)if(t){const t=e[n];e[n]=e[n+1]*s,e[n+1]=t*s}else i&&(e[n]*=s,e[n+1]*=s);n.needsUpdate=t||i}const r=e.attributes.uv2;if(r){const e=r.array;for(let i=0,n=e.length;i<n;i+=2)if(t){const t=e[i];e[i]=e[i+1]*s,e[i+1]=t*s}else e[i]*=s,e[i+1]*=s;r.needsUpdate=!0}e.computeTangents?.()}}function getfakeshadow2(t,i,s){const n=(new e.Shape).moveTo(0,0).lineTo(t,0).lineTo(t,i).lineTo(0,i).lineTo(0,0),r=new e.ShapeGeometry(n),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:s,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,s){let n=`fk${i.key}${s}`,{p1:r,width:o,height:a}=i.dims();t.texture||(t.texture={});let A=t.texture[n];A||(A=function createBlurredShadowTextureFromPoints(t,i=256,s=32,n=.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*s,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(${s}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,${n})`,d.fill(),d.restore();const f=new e.CanvasTexture(g);return f.needsUpdate=!0,f}(i,256,32,s,r,o,a),t.texture[n]=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,s,n,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)/n,(A-s)/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,s,n={},r=0,o=0,a=0){if(s=clean(s,!0),!t.movs[s])return i;t.movs[s];const A=new e.Vector3(r,o,a),l=0===A.lengthSq(),c=new e.Group;c.name=`pivot_${s}`;const h=new e.Group;if(h.name=`mov_${s}`,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 s=A.clone().negate();i.position.add(s),c.quaternion.copy(i.getWorldQuaternion(new e.Quaternion)),i.rotation.set(0,0,0)}return h.add(i),c.add(h),n||(n={}),n.inmov=!1,n.key=s,n.dt=0,n.dtstart=!1,h.userData.mov={...n},c}function getmovimento(e,t=[]){let i=0,s=[];const _cleartimeline=()=>{s=[],i=0},_add=(e,t={})=>{e&&s.push({...t,time:e}),i=s.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:n}=e.userData;if(!n.inmov)return;let r=n.dt-n.dtstart;if(n.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 s){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(n)*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(n)*t:e.t*t);break}{const _calc=(e,t=0)=>"function"==typeof e?e(n):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(n):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 zi=null,Hi=null;function getriferimento(t,i=0,s=0,n=0,r="rif"){"string"==typeof t&&(t={testo:t});let o=new e.Object3D;return o.position.set(i,s,n),r&&(o.name=r),o.userData={tipo:"rif",...t},o}function gettarghetta(t,i,s=100,n={}){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}=n;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,s=!1,n="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]&&(s=!0),e=r[4],r[1].toLowerCase()){case"r":n="red";break;case"g":n="green";break;case"b":n="blue";break;case"w":n="white";break;case"c":n="cyan"}return{testo:e,size:t,color:n,bold:i,italic:s}})).filter((e=>e.testo));const{canvas:C,context:B}=function getGlobalCanvas(){return zi||(zi=document.createElement("canvas"),Hi=zi.getContext("2d",{willReadFrequently:!0})),{canvas:zi,context:Hi}}();let E=0,x=2*c;i.forEach(((e,t)=>{const{testo:s,size:n=12}=e,r=2*n;B.font=`${r}px ${u}`;const o=B.measureText(s).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=s,v=Math.ceil(P/w)):(v=s,P=Math.ceil(v*w)),!t.textures[b]){const s=Math.floor(E+2*l),n=Math.floor(x+2*l);(C.width<s||C.height<n)&&(C.width=Math.max(C.width,s),C.height=Math.max(C.height,n)),B.clearRect(0,0,s,n);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,s,n,f+l/2),B.fillStyle=d,B.fill(),B.beginPath(),drawRoundedRect(B,l,l,s-2*l,n-2*l,f-l/2),B.fillStyle=h,B.fill());let m=c+l;i.forEach((e=>{const{testo:t,size:i=12,color:n="black",bold:r,italic:o}=e,a=2*i;B.font=`${r?"bold ":o?"italic ":""}${a}px ${u}`,B.fillStyle=n,B.textAlign="center",B.textBaseline="top",B.fillText(t,s/2,m),m+=1.2*a}));const I=B.getImageData(0,0,s,n),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,s,n,r){r=Math.min(r,Math.min(s/2,n/2)),e.moveTo(t+r,i),e.lineTo(t+s-r,i),e.quadraticCurveTo(t+s,i,t+s,i+r),e.lineTo(t+s,i+n-r),e.quadraticCurveTo(t+s,i+n,t+s-r,i+n),e.lineTo(t+r,i+n),e.quadraticCurveTo(t,i+n,t,i+n-r),e.lineTo(t,i+r),e.quadraticCurveTo(t,i,t+r,i),e.closePath()}function getquota(t,i,s,n,r,o,a={}){const{altezza:A=30,offset:l=0,piano:c="xy",layer:h=22,delta:p=5,spessoreLinea:u=3}=a,pp=(e,t)=>"xz"===c?[e,0,t]:"yz"===c?[0,e,t]:[e,t,0],g=new e.Group;g.name="quota";const d=r-s,f=o-n,m=Math.sqrt(d*d+f*f),I=Math.atan2(f,d);i||(i="$$"),i.includes("$$")&&(i=i.replace("$$",`${m.toFixed(1)}`));let b=i.split("\n").length;const y=-Math.sin(I)*l,C=Math.cos(I)*l,B=gettarghetta(t,i,2*A*b,{noSfondo:!0,layer:h,forcey:!0}),{dimx:E,dimy:x}=B.userData;function getCilindro(i,s,n){const r=(new e.Vector3).subVectors(s,i),o=r.length();let a,A=hash(`c:${n}|${o}`);t.geo[A]?a=t.geo[A]:(a=new e.CylinderGeometry(n/2,n/2,o,3,1,!0),t.geo[A]=a);const l=new e.Mesh(a,Yi);l.position.copy(i).add(r.multiplyScalar(.5));const c=(new e.Vector3).copy(s);return l.lookAt(c),l.rotateX(Math.PI/2),l}if(E>m-p){B.position.set(m/2,2*A,0);const t=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(m,0)),u);g.add(t)}else{const t=E+p,i=(m-t)/2,s=i+t,n=getCilindro(new e.Vector3(...pp(0,0)),new e.Vector3(...pp(i,0)),u);g.add(n);const r=getCilindro(new e.Vector3(...pp(s,0)),new e.Vector3(...pp(m,0)),u);g.add(r),B.position.set(...pp(m/2,0))}const w=l>A/2?-l:-A/2,v=-l>A/2?-l:A/2,P=new e.Vector3(...pp(0,w)),D=new e.Vector3(...pp(0,v)),M=new e.Vector3(...pp(m,w)),S=new e.Vector3(...pp(m,v)),L=getCilindro(P,D,u);g.add(L);const T=getCilindro(M,S,u);return g.add(T),B.userData.updateOrientation=function(e){e&&this.quaternion.copy(e.quaternion)},g.add(B),g.userData.noingombro=!0,"xy"===c?(g.position.set(s+y,n+C,0),g.rotation.z=I):"xz"===c?(g.position.set(s+y,0,n+C),g.rotation.y=-I):"yz"===c&&(g.position.set(0,s+y,n+C),g.rotation.x=I),g.traverse((function(e){e.layers.set(h)})),g}function fillNoise(t,i,s={}){let{scale:n=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}=s;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,s){const n=Math.floor(e)%i,r=Math.floor(t)%s,o=e-Math.floor(e),a=t-Math.floor(t),A=grad(n,r),l=grad(n+1,r),c=grad(n,r+1),h=grad(n+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 s=t/i*n,a=e/i*n,A=1,l=1,c=0,h=0;for(let e=0;e<r;e++){c+=perlin(s*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 s=0;s<i;s++){let n=(C[e*i+s]-b)*B;n=Math.pow(n,A);const r=u.r+(g.r-u.r)*n,o=u.g+(g.g-u.g)*n,a=u.b+(g.b-u.b)*n,l=0,c=4*(e*i+s);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,s=256,n={}){[16,32,64,128,256,512,1024].includes(s)||(s=256);let r=hash(`gen|${i}|${s}|${JSON.stringify(n)}`);if(!t[r]){const o=new Uint8Array(s*s*4);switch(i){case"wood":{let e={...n};e.scale=6+seeder(40,n.seed+"a")/10,e.octaves=n.octaves||3,e.persistence=.5+seeder(50,n.seed+"b")/100,e.rings=2+seeder(200,n.seed+"c")/100,e.distortion=.3+seeder(100,n.seed+"d")/300,e.color1=n.color1||"#442200",e.color2=n.color2||"#ffe0a0",fillNoise(o,s,e)}break;case"marble":{let e={...n};e.scale=n.scale||10,e.octaves=n.octaves||3,e.persistence=n.persistence||.6,e.rings=n.rings||1+seeder(100,n.seed+"m3")/50,e.distortion=n.distortion||.8+seeder(200,n.seed+"m4")/200,e.contrast=n.contrast||1.2,e.color1=n.color1||"#e0e0e0",e.color2=n.color2||"#909090",fillNoise(o,s,e)}break;case"glass":{let e={...n};e.scale=n.scale||32,e.octaves=n.octaves||2,e.persistence=n.persistence||.8,e.contrast=n.contrast||1,e.color1=n.color1||"rgba(255,255,255,0.2)",e.color2=n.color2||"rgba(255,255,255,0.6)",fillNoise(o,s,e)}break;case"gradient":case"pattern":break;default:fillNoise(o,s,n)}const a=new e.DataTexture(o,s,s,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,s,n,r,o=_i,a){a||(a={}),Array.isArray(o)||(o=[o]);const A=function cylgeometry(t,i,s,n,r=16){if(!s||!i)return null;let o=hash(`cy${i}|${s}|${n||s}|${r}`);if(!t.geo[o]){const a=new e.CylinderGeometry(n||s,s,i,r);t.geo[o]=a}return t.geo[o]}(t,s,n,r,a.sides||16);let l=new e.Group;switch((i||"").trim().toUpperCase()){case"X":case"L":l.position.set(s/2,0,0),l.rotation.z=Math.PI/2;break;case"Z":case"P":l.position.set(0,0,s/2),l.rotation.x=Math.PI/2;break;default:l.position.set(0,s/2,0)}if(A){if(!a.nolines){let e=edgesfromgeometry(A);l.add(e)}uvswap(A,a.uvswap,!1);const e=o[0]||_i,t=o[1]||e,i=o[2]||e;l.add(getmesh(A,[e,t,i]))}return l}function facesettile(e,t,i,s){if(t>1||i>1){let n=s%(t=t??1);const r=1/t,o=1/(i=i??1),a=n*r,A=1-((s-n)/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,s,n,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=s,a.userData.value=n,a.userData.tooltip=r,a}function getface(t,i,s,n,r={}){let{repeat:o,order:a,center:A=!1,base:l=!1,billboard:c=!1}=r;const h=hash(`f:${i}|${s}|${o?1:0}|${l?1:0}`);if(!t.geo[h]){const n=new e.PlaneGeometry(i,s);let r=l?-.5:0;const a=n.attributes.uv;if(o)for(let e=0;e<a.count;e++)a.setXY(e,a.getX(e)*i/1e3,a.getY(e)*s/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]=n}c&&((n=n.clone()).depthTest=!1,n.depthWrite=!1);const p=new e.Mesh(t.geo[h],n);if(p.name=c?"billboard":"face","number"==typeof a&&(p.renderOrder=a),A||p.position.set(i/2,s/2,0),n?.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,s,n){this.getWorldQuaternion(t),this.parent?.getWorldQuaternion(i),this.quaternion.copy(n.quaternion),this.quaternion.premultiply(i.invert())}}return p}function getbox(t,i,s,n,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,s,n),g=new e.Group;if(l?g.position.set(0,s/2,0):c||h||p?g.position.set(c||0,h||0,p||0):a||g.position.set(i/2,s/2,n/2),!A||!r){let e=edgesfromgeometry(u);g.add(e)}return r&&g.add(getmesh(u,r)),g}function getcyl(t,i,s,n,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=s),c<0&&(c=s);const d=new e.CylinderGeometry(l,c,i,A,h,p,u,g);uvswap(d,r.uvswap,!1);const f=getmesh(d,n||_i),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,s,n){n||(n={});let{nolines:r,segmenti:o=16}=n,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,s||_i)),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,s=10,n=[],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)}|${s}|${JSON.stringify(o)}|${JSON.stringify(n)}`);A=A??a??0,l=l??a??0;let u=t.geo[p];if(!u){const r=makeShape(i);n.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:s,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||_i)),h||function extrudelines(t,i,s,n,r=3){const makeloop=(t,i)=>{if(!t||t.length<2)return null;const s=t.length,n=new Float32Array(3*(s+1));for(let e=0;e<=s;e++){const r=t[e%s],o=3*e;n[o]=r.x,n[o+1]=r.y,n[o+2]=i}const r=new e.BufferGeometry;return r.setAttribute("position",new e.BufferAttribute(n,3)),new e.Line(r,Ti)},addring=e=>{let i=makeloop(e,-r);i&&(i.layers.set(30),t.add(i)),i=makeloop(e,n+r),i&&(i.layers.set(30),t.add(i))};addring(i);for(const e of s)addring(e)}(g,i,n,s,l),g}function getthorus(t,i,s=.2,n,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,s,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,n||_i)),c}function getluce(t,i,s="#ffffff",n=1){const r=i.pt;if(!r||!r.length)return null;const o=hash(`${i.key}|${s}|${n}`);if(!t.meshes[o]){const i=makeShape(r),a=new e.ShapeGeometry(i),A=new e.MeshStandardMaterial({color:new e.Color(s),emissive:new e.Color(s),emissiveIntensity:n,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,s,n,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,s*a,n*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:s*(1-a)/2,sa:n*(1-a)/2})),c.layers.set(28),c.userData.marklink=A,posiziona(c,o)}}function toTrianglesDrawMode(e,n){if(n===t)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(n===i||n===s){let t=e.getIndex();if(null===t){const i=[],s=e.getAttribute("position");if(void 0===s)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<s.count;e++)i.push(e);e.setIndex(i),t=e.getIndex()}const s=t.count-2,r=[];if(n===i)for(let e=1;e<=s;e++)r.push(t.getX(0)),r.push(t.getX(e)),r.push(t.getX(e+1));else for(let e=0;e<s;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!==s&&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:",n),e}function pannellogeometry(t,i,s,n,r=0,o=0,a=0,A=0,l=0,c=2,h=!1){let p=hash(`pg--${i}|${s}|${n}|${r}|${o}|${a}|${A}|${l}|${c}|${h?1:0}`);if(i-=.01,s-=.01,n-=.01,!t.geo[p]){i-=2*l,s-=2*l,n-=2*l;let u=getshape();const g=[{x:A,y:0},{x:s-r,y:0},{x:s,y:r},{x:s,y:n-o},{x:s-o,y:n},{x:a,y:n},{x:0,y:n-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={},s=e.getIndex(),n=e.getAttribute("position"),r=s?s.count:n.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],s=e.attributes[i];A[i]=new s.constructor(new s.array.constructor(s.count*s.itemSize),s.itemSize,s.normalized);const n=e.morphAttributes[i];n&&(l[i]||(l[i]=[]),n.forEach(((e,t)=>{const s=new e.array.constructor(e.count*e.itemSize);l[i][t]=new e.constructor(s,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 n=s?s.getX(t):t;let r="";for(let t=0,i=a.length;t<i;t++){const i=a[t],s=e.getAttribute(i),o=s.itemSize;for(let e=0;e<o;e++)r+=~~(s[h[e]](n)*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],s=e.getAttribute(i),r=e.morphAttributes[i],c=s.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,s[t](n)),r)for(let e=0,s=r.length;e<s;e++)g[e][i](o,r[e][t](n))}}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,s,n,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>=s/2||m>=n/2||m>=r/2)&&(m=0),l="L"==(i=i.trim().toUpperCase())[0]?s:"A"==i[0]?n:r,c="L"==i[1]?s:"A"==i[1]?n:r,h="L"==i[2]?s:"A"==i[2]?n:r;let b=new e.Group;if(!A.nolines){let t=edgesfromgeometry(new e.BoxGeometry(s,n,r));t.position.set(s/2,n/2,r/2),b.add(t)}let y=getmesh(pannellogeometry(t,l,c,h,u,g,d,f,m,I,!A.uvswap),[a||o||Gi,o||Ni]);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,s=0,n=0){switch(e.trim().toUpperCase()){case"LPA":t.rotation.y=Math.PI/2,t.rotation.x=Math.PI,t.position.set(0,n,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(n,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,s,n,r,o=0){let a;switch((o<0||o>Math.max(i,s,n)/3)&&(o=0),t){case"lap":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=n-o,a.position.y=s-o,a.rotation.x=Math.PI;break;case"alp":a=getextrude(e,getshape().fromrect(s-2*o,i-2*o).pt,n-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.position.y=s-o,a.rotation.z=-Math.PI/2;break;case"apl":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=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(n-2*o,s-2*o).pt,i-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=n-o,a.position.y=o,a.rotation.y=Math.PI/2;break;case"pla":a=getextrude(e,getshape().fromrect(n-2*o,i-2*o).pt,s-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,n-2*o).pt,s-2*o,[],r,{round:o,stonda:o}),a.position.x=o,a.position.z=o,a.rotation.x=Math.PI/2,a.position.y=s-o}return a}function earcut(e,t,i=2){const s=t&&t.length,n=s?t[0]*i:e.length;let r=linkedList(e,0,n,i,!0);const o=[];if(!r||r.next===r.prev)return o;let a,A,l;if(s&&(r=function eliminateHoles(e,t,i,s){const n=[];for(let i=0,r=t.length;i<r;i++){const o=linkedList(e,t[i]*s,i<r-1?t[i+1]*s:e.length,s,!1);o===o.next&&(o.steiner=!0),n.push(getLeftmost(o))}n.sort(compareXYSlope);for(let e=0;e<n.length;e++)i=eliminateHole(n[e],i);return i}(e,t,r,i)),e.length>80*i){a=1/0,A=1/0;let t=-1/0,s=-1/0;for(let r=i;r<n;r+=i){const i=e[r],n=e[r+1];i<a&&(a=i),n<A&&(A=n),i>t&&(t=i),n>s&&(s=n)}l=Math.max(t-a,s-A),l=0!==l?32767/l:0}return earcutLinked(r,o,i,a,A,l,0),o}function linkedList(e,t,i,s,n){let r;if(n===function signedArea(e,t,i,s){let n=0;for(let r=t,o=i-s;r<i;r+=s)n+=(e[o]-e[r])*(e[r+1]+e[o+1]),o=r;return n}(e,t,i,s)>0)for(let n=t;n<i;n+=s)r=insertNode(n/s|0,e[n],e[n+1],r);else for(let n=i-s;n>=t;n-=s)r=insertNode(n/s|0,e[n],e[n+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,s=e;do{if(i=!1,s.steiner||!equals(s,s.next)&&0!==area(s.prev,s,s.next))s=s.next;else{if(removeNode(s),s=t=s.prev,s===s.next)break;i=!0}}while(i||s!==t);return t}function earcutLinked(e,t,i,s,n,r,o){if(!e)return;!o&&r&&function indexCurve(e,t,i,s){let n=e;do{0===n.z&&(n.z=zOrder(n.x,n.y,t,i,s)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next}while(n!==e);n.prevZ.nextZ=null,n.prevZ=null,function sortLinked(e){let t,i=1;do{let s,n=e;e=null;let r=null;for(t=0;n;){t++;let o=n,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||n.z<=o.z)?(s=n,n=n.nextZ,a--):(s=o,o=o.nextZ,A--),r?r.nextZ=s:e=s,s.prevZ=r,r=s;n=o}r.nextZ=null,i*=2}while(t>1);return e}(n)}(e,s,n,r);let a=e;for(;e.prev!==e.next;){const A=e.prev,l=e.next;if(r?isEarHashed(e,s,n,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,s,n,r,2):2===o&&splitEarcut(e,t,i,s,n,r):earcutLinked(filterPoints(e),t,i,s,n,r,1);break}}}function isEar(e){const t=e.prev,i=e,s=e.next;if(area(t,i,s)>=0)return!1;const n=t.x,r=i.x,o=s.x,a=t.y,A=i.y,l=s.y,c=Math.min(n,r,o),h=Math.min(a,A,l),p=Math.max(n,r,o),u=Math.max(a,A,l);let g=s.next;for(;g!==t;){if(g.x>=c&&g.x<=p&&g.y>=h&&g.y<=u&&pointInTriangleExceptFirst(n,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,s){const n=e.prev,r=e,o=e.next;if(area(n,r,o)>=0)return!1;const a=n.x,A=r.x,l=o.x,c=n.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,s),I=zOrder(d,f,t,i,s);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!==n&&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!==n&&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!==n&&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!==n&&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 s=i.prev,n=i.next.next;!equals(s,n)&&intersects(s,i,i.next,n)&&locallyInside(s,n)&&locallyInside(n,s)&&(t.push(s.i,i.i,n.i),removeNode(i),removeNode(i.next),i=e=n),i=i.next}while(i!==e);return filterPoints(i)}function splitEarcut(e,t,i,s,n,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,s,n,r,0),void earcutLinked(a,t,i,s,n,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 s=e.x,n=e.y;let r,o=-1/0;if(equals(e,i))return i;do{if(equals(e,i.next))return i.next;if(n<=i.y&&n>=i.next.y&&i.next.y!==i.y){const e=i.x+(n-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=s&&e>o&&(o=e,r=i.x<i.next.x?i:i.next,e===s))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(s>=i.x&&i.x>=A&&s!==i.x&&pointInTriangle(n<l?s:o,n,A,l,n<l?o:s,n,i.x,i.y)){const t=Math.abs(n-i.y)/(s-i.x);locallyInside(i,e)&&(t<c||t===c&&(i.x>r.x||i.x===r.x&§orContainsSector(r,i)))&&(r=i,c=t)}i=i.next}while(i!==a);return r}(e,t);if(!i)return t;const s=splitPolygon(i,e);return filterPoints(s,s.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,s,n){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*n|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-s)*n|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,s,n,r,o,a){return(n-o)*(t-a)>=(e-o)*(r-a)&&(e-o)*(s-a)>=(i-o)*(t-a)&&(i-o)*(r-a)>=(n-o)*(s-a)}function pointInTriangleExceptFirst(e,t,i,s,n,r,o,a){return!(e===o&&t===a)&&pointInTriangle(e,t,i,s,n,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,s=!1;const n=(e.x+t.x)/2,r=(e.y+t.y)/2;do{i.y>r!=i.next.y>r&&i.next.y!==i.y&&n<(i.next.x-i.x)*(r-i.y)/(i.next.y-i.y)+i.x&&(s=!s),i=i.next}while(i!==e);return s}(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,s){const n=sign(area(e,t,i)),r=sign(area(e,t,s)),o=sign(area(i,s,e)),a=sign(area(i,s,t));return n!==r&&o!==a||(!(0!==n||!onSegment(e,i,t))||(!(0!==r||!onSegment(e,s,t))||(!(0!==o||!onSegment(i,e,s))||!(0!==a||!onSegment(i,t,s)))))}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),s=createNode(t.i,t.x,t.y),n=e.next,r=t.prev;return e.next=t,t.prev=e,i.next=n,n.prev=i,s.next=i,i.prev=s,r.next=s,s.prev=r,s}function insertNode(e,t,i,s){const n=createNode(e,t,i);return s?(n.next=s.next,n.prev=s,s.next.prev=n,s.next=n):(n.prev=n,n.next=n),n}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 s=new Map,n=[],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(s.has(g))o.push(s.get(g));else{const e=n.length/3;s.set(g,e),n.push(l,c,h),r.push(p,u),o.push(e)}}return{vertices:n,uvs:r,indices:o}}function infoestrudi(e,t,i,s,n){s||(s={}),i||(i=[]);let r=s.p0||0,o=Math.tan(s.coeffbase1*Ue||0),a=Math.tan(s.coeffbase2*Ue||0),A=t||s.p1||20,l=Math.tan(s.coefftop1*Ue||0),c=Math.tan(s.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,n),e.z2=getzeta(e.x,e.y,A,l,c,n),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:s.coeffbase1||0,aini2:s.coeffbase2||0,afin:s.coefftop1||0,afin2:s.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,s,n,r,o=!1){let a=e*s+t*n+i;if(r){let e=r.xfromy(-t,0,!0);o?a-=e:a=e}return a}function sidegeomfromshapes(t,i,s,n,r=!1,o=!1,a=!1){if(s&&n){if(s.length!==n.length)throw new Error("shapes with different length");if(s.length<2)throw new Error("I percorsi devono contenere almeno due punti ciascuno.");if(!t.geo[i]){const A=[],l=[],c=[],h=s.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,s)=>{r?c.push(e,i,t,i,s,t):c.push(e,t,i,i,t,s)};addpts(s),addpts(n);for(let e=0;e<h-1;e++){const t=e+1;equalpos(s[e],s[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,s,n,r=0,o=0,a=0,A=null,l=!1,c=!1){let h=`bg:${r}|${o}${a}|${s.key}|${i}|${A?.key||""}|${c?1:0}`;for(let p of n)h=`${h}|${p.key}`;if(h=hash(h),!t.geo[h]){let u,g=[],d=[],f=s.pt.length;g=s.vec;const m=new e.BufferGeometry,I=[],b=[],y=[];function addvertexes(e,t){let s=I.length/3;for(let s=0;s<e.length;s++){const n=e[s],l=t[2*n],h=-t[2*n+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+s,t+s+2,t+s+1):y.push(t+s,t+s+1,t+s+2)}if(A){let C=s.sliceony(A);for(let B of C){let E=B.flatMap((e=>[e.x,e.y]));addvertexes(earcut(E,[]),E)}}else if(Array.isArray(n)&&n.length){for(let x of n)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,s,n,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=s||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(n){if(!a.nobase){let e=r;b&&(e=Array.isArray(b)?e.filter(((e,t)=>!b[t])):[]);let i=bottomgeomfromshape(t,!a.notop,n,C?[]:e,A,l,c,d,!1,a.uvswap);a.nolines||B.add(edgesfromgeometry(i)),B.add(getmesh(i,o[0]||_i))}if(!a.notop){let e=r;I&&(e=Array.isArray(I)?e.filter(((e,t)=>!I[t])):[]);let i=bottomgeomfromshape(t,!1,n,C?[]:e,h,p,u,g,!1,a.uvswap);B.add(getmesh(i,o[1]||o[0]||_i)),a.nolines||B.add(edgesfromgeometry(i))}if(!a.nosides){let e=n.to3d(0,A,l,-c,C,d,!y),i=n.to3d(1,h,p,-u,C,g,y),s=`${n.key}${y?1:0}|${A}|${h}|${l}|${c||f}|${p}|${u||m}|${C}|${a.wvswap?1:0}`,E=sidegeomfromshapes(t,s,e,i,!1,!1,a.uvswap);if(a.nolines||a.nosidelines||B.add(edgesfromgeometry(E)),B.add(getmesh(E,o[2]||o[0]||_i)),r&&!C)for(let n=0;n<r.length;n++){let g=r[n];if(Array.isArray(I)){if(I[n])continue}else if(I)continue;if(Array.isArray(b)){if(b[n])continue}else if(b)continue;e=g.to3d(0,A,l,c),i=g.to3d(0,h,p,u),s=`${g.key}|${A}|${h}|${l}|${c}|${p}|${u}`;let d=sidegeomfromshapes(t,s,e,i,!0);a.nolines||a.nosidelines||B.add(edgesfromgeometry(d)),B.add(getmesh(d,o[3]||o[0]||_i))}}return estrusorotate(i,B,s)}return B}function revolve(t,i,s,n,r){r||(r={});let o=r.segmenti??12,a=hash(`rev|${i.key}|${s}|${o}|${r?.uvswap}`),A=t.geo[a],l=new e.Group;if(!A){const s=i.pt.map((t=>new e.Vector2(t.x,t.y)));A=new e.LatheGeometry(s,o,0,2*Math.PI),uvswap(A,r.uvswap,!0),t.geo[a]=A}const c=new e.Mesh(A,n);return l.add(c),r.nolines||r.nosidelines||l.add(edgesfromgeometry(A)),l}function estrusopat(t,i,s,n,r,o,a){a||(a={});let A=a.invert;o||(o=[]);let l=a.open,c=a.closepat;if(!s.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(n[0],s.pt[0],s.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]||_i)),i.add(edgesfromgeometry(l));let c=s.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(s.pt[s.npt-2],s.pt[s.npt-1],n[s.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]||_i)),i.add(edgesfromgeometry(l));let c=s.infosegmento(s.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,s,n,r,o,a=!1){let A=`bsg:${i.key}|${s.key}|${r}|${o}|${a}`;if(s.npt==n.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=s.pt,d=s.npt;const f=.001,addpts=(t,i,s,n)=>{for(const r of t){let t=new e.Vector3(r.x,r.y,r.x*n);t.applyMatrix4(i),l.push(t.x,t.y,t.z),a?c.push(r.u*f,(r.v+s)*f):c.push((r.v+s)*f,r.u*f)}};let m=d;for(let t=0;t<d;t++){let r;r=t<d-1?angle3point(n[t],g[t],g[t+1])+Math.PI/2:-(angle3point(g[t-1],g[t],n[t])+Math.PI/2);let o=-Math.tan(r),a=s.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=s.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],n[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,s)=>{o?h.push(e,i,t,i,s,t):h.push(e,t,i,i,t,s)},s=t+1;equalpos(i[t],i[s])||addindexquad(t+e*p,s+e*p,t+(e+1)*p,s+(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,s,n,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]||_i)))}return estrusorotate(i,p,0)}async function spritemat(t,i){try{let s={transparent:!0,depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1};if(i.startsWith("#"))s.color=i;else{let e=await t.tex(i,1e3,1e3);e?s.map=e:s.color="black"}return new e.SpriteMaterial(s)}catch(e){return _i}}function getsprite0(t,i,s,n,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,s,n),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,s,n,r="yellow",o){o||(o={size:20}),o.screen=!0;const a=await function createCircleTexture(t,i=64,s="rgba(255,0,0,1)"){const n=`ct|${i}|${s}`;if(!t.textures[n]){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=s,o.beginPath(),o.arc(a,a,a,0,2*Math.PI),o.fill();const A=new e.CanvasTexture(r);A.needsUpdate=!0,t.textures[n]=A}return t.textures[n]}(t,64,r);return getsprite0(!0,i,s,n,new e.SpriteMaterial({map:a,transparent:!0,fog:!1,toneMapped:!1}),o)}function getsprite(e,t,i,s,n,r={}){return getsprite0(!1,t,i,s,n,r)}class GLTFLoader extends n{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,s){const n=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){s?s(t):console.error(t),n.manager.itemError(e),n.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{n.parse(i,a,(function(i){t(i),n.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,s){let n;const r={},o={},a=new TextDecoder;if("string"==typeof e)n=JSON.parse(e);else if(e instanceof ArrayBuffer){if(a.decode(new Uint8Array(e,0,4))===Wi){try{r[ji.KHR_BINARY_GLTF]=new GLTFBinaryExtension(e)}catch(e){return void(s&&s(e))}n=JSON.parse(r[ji.KHR_BINARY_GLTF].content)}else n=JSON.parse(a.decode(e))}else n=e;if(void 0===n.asset||n.asset.version[0]<2)return void(s&&s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const A=new GLTFParser(n,{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(n.extensionsUsed)for(let e=0;e<n.extensionsUsed.length;++e){const t=n.extensionsUsed[e],i=n.extensionsRequired||[];switch(t){case ji.KHR_MATERIALS_UNLIT:r[t]=new GLTFMaterialsUnlitExtension;break;case ji.KHR_DRACO_MESH_COMPRESSION:r[t]=new GLTFDracoMeshCompressionExtension(n,this.dracoLoader);break;case ji.KHR_TEXTURE_TRANSFORM:r[t]=new GLTFTextureTransformExtension;break;case ji.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,s)}parseAsync(e,t){const i=this;return new Promise((function(s,n){i.parse(e,t,s,n)}))}}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 ji={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=ji.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i<s;i++){const s=t[i];s.extensions&&s.extensions[this.name]&&void 0!==s.extensions[this.name].light&&e._addNodeRef(this.cache,s.extensions[this.name].light)}}_loadLight(e){const t=this.parser,i="light:"+e;let s=t.cache.get(i);if(s)return s;const n=t.json,r=((n.extensions&&n.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),s=Promise.resolve(o),t.cache.add(i,s),s}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,i=this.parser,s=i.json.nodes[e],n=(s.extensions&&s.extensions[this.name]||{}).light;return void 0===n?null:this._loadLight(n).then((function(e){return i._getNodeRef(t.cache,n,e)}))}}class GLTFMaterialsUnlitExtension{constructor(){this.name=ji.KHR_MATERIALS_UNLIT}getMaterialType(){return Y}extendParams(e,t,i){const s=[];e.color=new l(1,1,1),e.opacity=1;const n=t.pbrMetallicRoughness;if(n){if(Array.isArray(n.baseColorFactor)){const t=n.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],c),e.opacity=t[3]}void 0!==n.baseColorTexture&&s.push(i.assignTexture(e,"map",n.baseColorTexture,h))}return Promise.all(s)}}class GLTFMaterialsEmissiveStrengthExtension{constructor(e){this.parser=e,this.name=ji.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 s=i.extensions[this.name].emissiveStrength;return void 0!==s&&(t.emissiveIntensity=s),Promise.resolve()}}class GLTFMaterialsClearcoatExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];if(void 0!==r.clearcoatFactor&&(t.clearcoat=r.clearcoatFactor),void 0!==r.clearcoatTexture&&n.push(i.assignTexture(t,"clearcoatMap",r.clearcoatTexture)),void 0!==r.clearcoatRoughnessFactor&&(t.clearcoatRoughness=r.clearcoatRoughnessFactor),void 0!==r.clearcoatRoughnessTexture&&n.push(i.assignTexture(t,"clearcoatRoughnessMap",r.clearcoatRoughnessTexture)),void 0!==r.clearcoatNormalTexture&&(n.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(n)}}class GLTFMaterialsDispersionExtension{constructor(e){this.parser=e,this.name=ji.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 s=i.extensions[this.name];return t.dispersion=void 0!==s.dispersion?s.dispersion:0,Promise.resolve()}}class GLTFMaterialsIridescenceExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return void 0!==r.iridescenceFactor&&(t.iridescence=r.iridescenceFactor),void 0!==r.iridescenceTexture&&n.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&&n.push(i.assignTexture(t,"iridescenceThicknessMap",r.iridescenceThicknessTexture)),Promise.all(n)}}class GLTFMaterialsSheenExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[];t.sheenColor=new l(0,0,0),t.sheenRoughness=0,t.sheen=1;const r=s.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&&n.push(i.assignTexture(t,"sheenColorMap",r.sheenColorTexture,h)),void 0!==r.sheenRoughnessTexture&&n.push(i.assignTexture(t,"sheenRoughnessMap",r.sheenRoughnessTexture)),Promise.all(n)}}class GLTFMaterialsTransmissionExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return void 0!==r.transmissionFactor&&(t.transmission=r.transmissionFactor),void 0!==r.transmissionTexture&&n.push(i.assignTexture(t,"transmissionMap",r.transmissionTexture)),Promise.all(n)}}class GLTFMaterialsVolumeExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];t.thickness=void 0!==r.thicknessFactor?r.thicknessFactor:0,void 0!==r.thicknessTexture&&n.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(n)}}class GLTFMaterialsIorExtension{constructor(e){this.parser=e,this.name=ji.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 s=i.extensions[this.name];return t.ior=void 0!==s.ior?s.ior:1.5,Promise.resolve()}}class GLTFMaterialsSpecularExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];t.specularIntensity=void 0!==r.specularFactor?r.specularFactor:1,void 0!==r.specularTexture&&n.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&&n.push(i.assignTexture(t,"specularColorMap",r.specularColorTexture,h)),Promise.all(n)}}class GLTFMaterialsBumpExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return t.bumpScale=void 0!==r.bumpFactor?r.bumpFactor:1,void 0!==r.bumpTexture&&n.push(i.assignTexture(t,"bumpMap",r.bumpTexture)),Promise.all(n)}}class GLTFMaterialsAnisotropyExtension{constructor(e){this.parser=e,this.name=ji.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,s=i.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=[],r=s.extensions[this.name];return void 0!==r.anisotropyStrength&&(t.anisotropy=r.anisotropyStrength),void 0!==r.anisotropyRotation&&(t.anisotropyRotation=r.anisotropyRotation),void 0!==r.anisotropyTexture&&n.push(i.assignTexture(t,"anisotropyMap",r.anisotropyTexture)),Promise.all(n)}}class GLTFTextureBasisUExtension{constructor(e){this.parser=e,this.name=ji.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,i=t.json,s=i.textures[e];if(!s.extensions||!s.extensions[this.name])return null;const n=s.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,n.source,r)}}class GLTFTextureWebPExtension{constructor(e){this.parser=e,this.name=ji.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,s=i.json,n=s.textures[e];if(!n.extensions||!n.extensions[t])return null;const r=n.extensions[t],o=s.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(n){if(n)return i.loadTextureImage(e,r.source,a);if(s.extensionsRequired&&s.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=ji.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,i=this.parser,s=i.json,n=s.textures[e];if(!n.extensions||!n.extensions[t])return null;const r=n.extensions[t],o=s.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(n){if(n)return i.loadTextureImage(e,r.source,a);if(s.extensionsRequired&&s.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=ji.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],s=this.parser.getDependency("buffer",e.buffer),n=this.parser.options.meshoptDecoder;if(!n||!n.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 s.then((function(t){const i=e.byteOffset||0,s=e.byteLength||0,r=e.count,o=e.byteStride,a=new Uint8Array(t,i,s);return n.decodeGltfBufferAsync?n.decodeGltfBufferAsync(r,o,a,e.mode,e.filter).then((function(e){return e.buffer})):n.ready.then((function(){const t=new ArrayBuffer(r*o);return n.decodeGltfBuffer(new Uint8Array(t),r,o,a,e.mode,e.filter),t}))}))}return null}}class GLTFMeshGpuInstancing{constructor(e){this.name=ji.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 s=t.meshes[i.mesh];for(const e of s.primitives)if(e.mode!==Zi.TRIANGLES&&e.mode!==Zi.TRIANGLE_STRIP&&e.mode!==Zi.TRIANGLE_FAN&&void 0!==e.mode)return null;const n=i.extensions[this.name].attributes,r=[],o={};for(const e in n)r.push(this.parser.getDependency("accessor",n[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],s=e[0].count,n=[];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,s);for(let e=0;e<s;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),n.push(A)}return t.isGroup?(t.clear(),t.add(...n),t):n[0]})))}}const Wi="glTF",Ji=1313821514,Ki=5130562;class GLTFBinaryExtension{constructor(e){this.name=ji.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!==Wi)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const s=this.header.length-12,n=new DataView(e,12);let r=0;for(;r<s;){const t=n.getUint32(r,!0);r+=4;const s=n.getUint32(r,!0);if(r+=4,s===Ji){const s=new Uint8Array(e,12+r,t);this.content=i.decode(s)}else if(s===Ki){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=ji.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const i=this.json,s=this.dracoLoader,n=e.extensions[this.name].bufferView,r=e.extensions[this.name].attributes,o={},a={},A={};for(const e in r){const t=ss[e]||e.toLowerCase();o[t]=r[e]}for(const t in e.attributes){const s=ss[t]||t.toLowerCase();if(void 0!==r[t]){const n=i.accessors[e.attributes[t]],r=$i[n.componentType];A[s]=r.name,a[s]=!0===n.normalized}}return t.getDependency("bufferView",n).then((function(e){return new Promise((function(t,i){s.decodeDracoFile(e,(function(e){for(const t in e.attributes){const i=e.attributes[t],s=a[t];void 0!==s&&(i.normalized=s)}t(e)}),o,A,c,i)}))}))}}class GLTFTextureTransformExtension{constructor(){this.name=ji.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=ji.KHR_MESH_QUANTIZATION}}class GLTFCubicSplineInterpolant extends he{constructor(e,t,i,s){super(e,t,i,s)}copySampleValue_(e){const t=this.resultBuffer,i=this.sampleValues,s=this.valueSize,n=e*s*3+s;for(let e=0;e!==s;e++)t[e]=i[n+e];return t}interpolate_(e,t,i,s){const n=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=2*o,A=3*o,l=s-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,s=r[u+e+o],A=r[u+e]*l;n[e]=m*t+I*i+d*s+f*A}return n}}const Vi=new m;class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant{interpolate_(e,t,i,s){const n=super.interpolate_(e,t,i,s);return Vi.fromArray(n).normalize().toArray(n),n}}const Zi={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},$i={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},es={9728:L,9729:S,9984:M,9985:D,9986:P,9987:v},ts={33071:_,33648:k,10497:T},is={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ss={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"},ns={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},rs={CUBICSPLINE:void 0,LINEAR:ne,STEP:se},os="OPAQUE",as="MASK",As="BLEND";function addUnknownExtensionsToUserData(e,t,i){for(const s in i.extensions)void 0===e[s]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[s]=i.extensions[s])}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,s=t.weights.length;i<s;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,s=i.length;t<s;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[ji.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,s=e.targets.length;i<s;i++)t+=":"+createAttributesKey(e.targets[i]);return t}function createAttributesKey(e){let t="";const i=Object.keys(e).sort();for(let s=0,n=i.length;s<n;s++)t+=i[s]+":"+e[i[s]]+";";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 ls=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,s=-1,n=!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+)/);s=i&&t?parseInt(t[1],10):-1,n=e.indexOf("Firefox")>-1,r=n?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||i&&s<17||n&&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,s=this.json,n=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][s.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:s.asset,parser:i,userData:{}};return addUnknownExtensionsToUserData(n,r,s),assignExtrasToUserData(r,s),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,s=t.length;i<s;i++){const s=t[i].joints;for(let t=0,i=s.length;t<i;t++)e[s[t]].isBone=!0}for(let t=0,s=e.length;t<s;t++){const s=e[t];void 0!==s.mesh&&(this._addNodeRef(this.meshCache,s.mesh),void 0!==s.skin&&(i[s.mesh].isSkinnedMesh=!0)),void 0!==s.camera&&this._addNodeRef(this.cameraCache,s.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 s=i.clone(),updateMappings=(e,t)=>{const i=this.associations.get(e);null!=i&&this.associations.set(t,i);for(const[i,s]of e.children.entries())updateMappings(s,t.children[i])};return updateMappings(i,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){const s=e(t[i]);if(s)return s}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const i=[];for(let s=0;s<t.length;s++){const n=e(t[s]);n&&i.push(n)}return i}getDependency(e,t){const i=e+":"+t;let s=this.cache.get(i);if(!s){switch(e){case"scene":s=this.loadScene(t);break;case"node":s=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":s=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":s=this.loadAccessor(t);break;case"bufferView":s=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":s=this.loadBuffer(t);break;case"material":s=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":s=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":s=this.loadSkin(t);break;case"animation":s=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":s=this.loadCamera(t);break;default:if(s=this._invokeOne((function(i){return i!=this&&i.getDependency&&i.getDependency(e,t)})),!s)throw new Error("Unknown type: "+e)}this.cache.add(i,s)}return s}getDependencies(e){let t=this.cache.get(e);if(!t){const i=this,s=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(s.map((function(t,s){return i.getDependency(e,s)}))),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[ji.KHR_BINARY_GLTF].body);const s=this.options;return new Promise((function(e,n){i.load(r.resolveURL(t.uri,s.path),e,void 0,(function(){n(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,s=t.byteOffset||0;return e.slice(s,s+i)}))}loadAccessor(e){const t=this,i=this.json,s=this.json.accessors[e];if(void 0===s.bufferView&&void 0===s.sparse){const e=is[s.type],t=$i[s.componentType],i=!0===s.normalized,n=new t(s.count*e);return Promise.resolve(new E(n,e,i))}const n=[];return void 0!==s.bufferView?n.push(this.getDependency("bufferView",s.bufferView)):n.push(null),void 0!==s.sparse&&(n.push(this.getDependency("bufferView",s.sparse.indices.bufferView)),n.push(this.getDependency("bufferView",s.sparse.values.bufferView))),Promise.all(n).then((function(e){const n=e[0],r=is[s.type],o=$i[s.componentType],a=o.BYTES_PER_ELEMENT,A=a*r,l=s.byteOffset||0,c=void 0!==s.bufferView?i.bufferViews[s.bufferView].byteStride:void 0,h=!0===s.normalized;let p,u;if(c&&c!==A){const e=Math.floor(l/c),i="InterleavedBuffer:"+s.bufferView+":"+s.componentType+":"+e+":"+s.count;let A=t.cache.get(i);A||(p=new o(n,e*c,s.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===n?new o(s.count*r):new o(n,l,s.count*r),u=new E(p,r,h);if(void 0!==s.sparse){const t=is.SCALAR,i=$i[s.sparse.indices.componentType],a=s.sparse.indices.byteOffset||0,A=s.sparse.values.byteOffset||0,l=new i(e[1],a,s.sparse.count*t),c=new o(e[2],A,s.sparse.count*r);null!==n&&(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,s=t.textures[e].source,n=t.images[s];let r=this.textureLoader;if(n.uri){const e=i.manager.getHandler(n.uri);null!==e&&(r=e)}return this.loadTextureImage(e,s,r)}loadTextureImage(e,t,i){const s=this,n=this.json,r=n.textures[e],o=n.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=(n.samplers||{})[r.sampler]||{};return t.magFilter=es[i.magFilter]||S,t.minFilter=es[i.minFilter]||v,t.wrapS=ts[i.wrapS]||T,t.wrapT=ts[i.wrapT]||T,s.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=A,A}loadImageSource(e,t){const i=this,s=this.json,n=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((e=>e.clone()));const o=s.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,s){let o=i;!0===t.isImageBitmapLoader&&(o=function(e){const t=new re(e);t.needsUpdate=!0,i(t)}),t.load(r.resolveURL(e,n.path),o,void 0,s)}))})).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,s){const n=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),n.extensions[ji.KHR_TEXTURE_TRANSFORM]){const e=void 0!==i.extensions?i.extensions[ji.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=n.associations.get(r);r=n.extensions[ji.KHR_TEXTURE_TRANSFORM].extendTexture(r,e),n.associations.set(r,t)}}return void 0!==s&&(r.colorSpace=s),e[t]=r,r}))}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const s=void 0===t.attributes.tangent,n=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(s||n||r){let e="ClonedMaterial:"+i.uuid+":";s&&(e+="derivative-tangents:"),n&&(e+="vertex-colors:"),r&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=i.clone(),n&&(t.vertexColors=!0),r&&(t.flatShading=!0),s&&(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,s=this.extensions,n=i.materials[e];let r;const o={},a=[];if((n.extensions||{})[ji.KHR_MATERIALS_UNLIT]){const e=s[ji.KHR_MATERIALS_UNLIT];r=e.getMaterialType(),a.push(e.extendParams(o,n,t))}else{const i=n.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===n.doubleSided&&(o.side=G);const p=n.alphaMode||os;if(p===As?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,p===as&&(o.alphaTest=void 0!==n.alphaCutoff?n.alphaCutoff:.5)),void 0!==n.normalTexture&&r!==Y&&(a.push(t.assignTexture(o,"normalMap",n.normalTexture)),o.normalScale=new A(1,1),void 0!==n.normalTexture.scale)){const e=n.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==n.occlusionTexture&&r!==Y&&(a.push(t.assignTexture(o,"aoMap",n.occlusionTexture)),void 0!==n.occlusionTexture.strength&&(o.aoMapIntensity=n.occlusionTexture.strength)),void 0!==n.emissiveFactor&&r!==Y){const e=n.emissiveFactor;o.emissive=(new l).setRGB(e[0],e[1],e[2],c)}return void 0!==n.emissiveTexture&&r!==Y&&a.push(t.assignTexture(o,"emissiveMap",n.emissiveTexture,h)),Promise.all(a).then((function(){const i=new r(o);return n.name&&(i.name=n.name),assignExtrasToUserData(i,n),t.associations.set(i,{materials:e}),n.extensions&&addUnknownExtensionsToUserData(s,i,n),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,s=this.primitiveCache;function createDracoPrimitive(e){return i[ji.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(i){return addPrimitiveAttributes(i,e,t)}))}const n=[];for(let i=0,r=e.length;i<r;i++){const r=e[i],o=createPrimitiveKey(r),a=s[o];if(a)n.push(a.promise);else{let e;e=r.extensions&&r.extensions[ji.KHR_DRACO_MESH_COMPRESSION]?createDracoPrimitive(r):addPrimitiveAttributes(new X,r,t),s[o]={primitive:r,promise:e},n.push(e)}}return Promise.all(n)}loadMesh(e){const t=this,n=this.json,r=this.extensions,o=n.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(n){const A=n.slice(0,n.length-1),l=n[n.length-1],c=[];for(let n=0,h=l.length;n<h;n++){const h=l[n],p=a[n];let u;const g=A[n];if(p.mode===Zi.TRIANGLES||p.mode===Zi.TRIANGLE_STRIP||p.mode===Zi.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===Zi.TRIANGLE_STRIP?u.geometry=toTrianglesDrawMode(u.geometry,s):p.mode===Zi.TRIANGLE_FAN&&(u.geometry=toTrianglesDrawMode(u.geometry,i));else if(p.mode===Zi.LINES)u=new H(h,g);else if(p.mode===Zi.LINE_STRIP)u=new j(h,g);else if(p.mode===Zi.LINE_LOOP)u=new W(h,g);else{if(p.mode!==Zi.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,s=c.length;i<s;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],s=i[i.type];if(s)return"perspective"===i.type?t=new V(Z.radToDeg(s.yfov),s.aspectRatio||1,s.znear||1,s.zfar||2e6):"orthographic"===i.type&&(t=new $(-s.xmag,s.xmag,s.ymag,-s.ymag,s.znear,s.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,s=t.joints.length;e<s;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(),s=e,n=[],r=[];for(let e=0,o=s.length;e<o;e++){const o=s[e];if(o){n.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(n,r)}))}loadAnimation(e){const t=this.json,i=this,s=t.animations[e],n=s.name?s.name:"animation_"+e,r=[],o=[],a=[],A=[],l=[];for(let e=0,t=s.channels.length;e<t;e++){const t=s.channels[e],i=s.samplers[t.sampler],n=t.target,c=n.node,h=void 0!==s.parameters?s.parameters[i.input]:i.input,p=void 0!==s.parameters?s.parameters[i.output]:i.output;void 0!==n.node&&(r.push(this.getDependency("node",c)),o.push(this.getDependency("accessor",h)),a.push(this.getDependency("accessor",p)),A.push(i),l.push(n))}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],s=e[1],r=e[2],o=e[3],a=e[4],A=[];for(let e=0,n=t.length;e<n;e++){const n=t[e],l=s[e],c=r[e],h=o[e],p=a[e];if(void 0===n)continue;n.updateMatrix&&n.updateMatrix();const u=i._createAnimationTracks(n,l,c,h,p);if(u)for(let e=0;e<u.length;e++)A.push(u[e])}return new te(n,void 0,A)}))}createNodeMesh(e){const t=this.json,i=this,s=t.nodes[e];return void 0===s.mesh?null:i.getDependency("mesh",s.mesh).then((function(e){const t=i._getNodeRef(i.meshCache,s.mesh,e);return void 0!==s.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,i=s.weights.length;t<i;t++)e.morphTargetInfluences[t]=s.weights[t]})),t}))}loadNode(e){const t=this,i=this.json.nodes[e],s=t._loadNodeShallow(e),n=[],r=i.children||[];for(let e=0,i=r.length;e<i;e++)n.push(t.getDependency("node",r[e]));const o=void 0===i.skin?Promise.resolve(null):t.getDependency("skin",i.skin);return Promise.all([s,Promise.all(n),o]).then((function(e){const t=e[0],i=e[1],s=e[2];null!==s&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(s,ls)}));for(let e=0,s=i.length;e<s;e++)t.add(i[e]);return t}))}_loadNodeShallow(e){const t=this.json,i=this.extensions,s=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const n=t.nodes[e],r=n.name?s.createUniqueName(n.name):"",o=[],a=s._invokeOne((function(t){return t.createNodeMesh&&t.createNodeMesh(e)}));return a&&o.push(a),void 0!==n.camera&&o.push(s.getDependency("camera",n.camera).then((function(e){return s._getNodeRef(s.cameraCache,n.camera,e)}))),s._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===n.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(n.name&&(o.userData.name=n.name,o.name=r),assignExtrasToUserData(o,n),n.extensions&&addUnknownExtensionsToUserData(i,o,n),void 0!==n.matrix){const e=new d;e.fromArray(n.matrix),o.applyMatrix4(e)}else void 0!==n.translation&&o.position.fromArray(n.translation),void 0!==n.rotation&&o.quaternion.fromArray(n.rotation),void 0!==n.scale&&o.scale.fromArray(n.scale);return s.associations.has(o)||s.associations.set(o,{}),s.associations.get(o).nodes=e,o})),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],s=this,n=new K;i.name&&(n.name=s.createUniqueName(i.name)),assignExtrasToUserData(n,i),i.extensions&&addUnknownExtensionsToUserData(t,n,i);const r=i.nodes||[],o=[];for(let e=0,t=r.length;e<t;e++)o.push(s.getDependency("node",r[e]));return Promise.all(o).then((function(e){for(let t=0,i=e.length;t<i;t++)n.add(e[t]);return s.associations=(e=>{const t=new Map;for(const[e,i]of s.associations)(e instanceof F||e instanceof re)&&t.set(e,i);return e.traverse((e=>{const i=s.associations.get(e);null!=i&&t.set(e,i)})),t})(n),n}))}_createAnimationTracks(e,t,i,s,n){const r=[],o=e.name?e.name:e.uuid,a=[];let A;switch(ns[n.path]===ns.weights?e.traverse((function(e){e.morphTargetInfluences&&a.push(e.name?e.name:e.uuid)})):a.push(o),ns[n.path]){case ns.weights:A=ae;break;case ns.rotation:A=Ae;break;case ns.position:case ns.scale:A=oe;break;default:if(1===i.itemSize)A=ae;else A=oe}const l=void 0!==s.interpolation?rs[s.interpolation]:ne,c=this._getArrayFromAccessor(i);for(let e=0,i=a.length;e<i;e++){const i=new A(a[e]+"."+ns[n.path],t.array,c,l);"CUBICSPLINE"===s.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 s=0,n=t.length;s<n;s++)i[s]=t[s]*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 s=t.attributes,n=[];function assignAttributeAccessor(t,s){return i.getDependency("accessor",t).then((function(t){e.setAttribute(s,t)}))}for(const t in s){const i=ss[t]||t.toLowerCase();i in e.attributes||n.push(assignAttributeAccessor(s[t],i))}if(void 0!==t.indices&&!e.index){const s=i.getDependency("accessor",t.indices).then((function(t){e.setIndex(t)}));n.push(s)}return le.workingColorSpace!==c&&"COLOR_0"in s&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${le.workingColorSpace}" not supported.`),assignExtrasToUserData(e,t),function computeBounds(e,t,i){const s=t.attributes,n=new pe;if(void 0===s.POSITION)return;{const e=i.json.accessors[s.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(n.set(new f(t[0],t[1],t[2]),new f(r[0],r[1],r[2])),e.normalized){const t=getNormalizedComponentScale($i[e.componentType]);n.min.multiplyScalar(t),n.max.multiplyScalar(t)}}const r=t.targets;if(void 0!==r){const e=new f,t=new f;for(let s=0,n=r.length;s<n;s++){const n=r[s];if(void 0!==n.POSITION){const s=i.json.accessors[n.POSITION],r=s.min,o=s.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]))),s.normalized){const e=getNormalizedComponentScale($i[s.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}n.expandByVector(e)}e.boundingBox=n;const o=new ue;n.getCenter(o.center),o.radius=n.min.distanceTo(n.max)/2,e.boundingSphere=o}(e,t,i),Promise.all(n).then((function(){return void 0!==t.targets?function addMorphTargets(e,t,i){let s=!1,n=!1,r=!1;for(let e=0,i=t.length;e<i;e++){const i=t[e];if(void 0!==i.POSITION&&(s=!0),void 0!==i.NORMAL&&(n=!0),void 0!==i.COLOR_0&&(r=!0),s&&n&&r)break}if(!s&&!n&&!r)return Promise.resolve(e);const o=[],a=[],A=[];for(let l=0,c=t.length;l<c;l++){const c=t[l];if(s){const t=void 0!==c.POSITION?i.getDependency("accessor",c.POSITION):e.attributes.position;o.push(t)}if(n){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 s&&(e.morphAttributes.position=i),n&&(e.morphAttributes.normal=o),r&&(e.morphAttributes.color=a),e.morphTargetsRelative=!0,e}))}(e,t.targets,i):e}))}const cs=new WeakMap;class DRACOLoader extends n{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,s){const n=new o(this.manager);n.setPath(this.path),n.setResponseType("arraybuffer"),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(e,(e=>{this.parse(e,t,s)}),i,s)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,h,i).catch(i)}decodeDracoFile(e,t,i,s,n=c,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:n};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(cs.has(e)){const t=cs.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 s;const n=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(n,r).then((i=>(s=i,new Promise(((i,r)=>{s._callbacks[n]={resolve:i,reject:r},s.postMessage({type:"decode",id:n,taskConfig:t,buffer:e},[e])}))))).then((e=>this._createGeometry(e.geometry)));return o.catch((()=>!0)).then((()=>{s&&n&&this._releaseTask(s,n)})),cs.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 s=e.attributes[i],n=s.name,r=s.array,o=s.itemSize,a=new E(r,o);"color"===n&&(this._assignVertexColorSpace(a,s.vertexColorSpace),a.normalized=r instanceof Float32Array==!1),t.setAttribute(n,a)}return t}_assignVertexColorSpace(e,t){if(t!==h)return;const i=new l;for(let t=0,s=e.count;t<s;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,s)=>{i.load(e,t,void 0,s)}))}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 s=DRACOWorker.toString(),n=["/* draco decoder */",i,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([n]))})),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,s,n,r){const o=r.num_components(),a=i.num_points()*o,A=a*n.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,n),c=e._malloc(A);t.GetAttributeDataArrayForAllPoints(i,r,l,A,c);const h=new n(e.HEAPF32.buffer,c,a).slice();return e._free(c),{name:s,array:h,itemSize:o}}onmessage=function(i){const s=i.data;switch(s.type){case"init":e=s.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const i=s.buffer,n=s.taskConfig;t.then((e=>{const t=e.draco,r=new t.Decoder;try{const e=function decodeGeometry(e,t,i,s){const n=s.attributeIDs,r=s.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 n){const a=self[r[i]];let A,c;if(s.useUniqueIDs)c=n[i],A=t.GetAttributeByUniqueId(o,c);else{if(c=t.GetAttributeId(o,e[n[i]]),-1===c)continue;A=t.GetAttribute(o,c)}const h=decodeAttribute(e,t,o,i,a,A);"color"===i&&(h.vertexColorSpace=s.vertexColorSpace),l.attributes.push(h)}A===e.TRIANGULAR_MESH&&(l.index=function decodeIndex(e,t,i){const s=i.num_faces(),n=3*s,r=4*n,o=e._malloc(r);t.GetTrianglesUInt32Array(i,r,o);const a=new Uint32Array(e.HEAPF32.buffer,o,n).slice();return e._free(o),{array:a,itemSize:1}}(e,t,o));return e.destroy(o),l}(t,r,new Int8Array(i),n),o=e.attributes.map((e=>e.array.buffer));e.index&&o.push(e.index.array.buffer),self.postMessage({type:"decode",id:s.id,geometry:e},o)}catch(e){console.error(e),self.postMessage({type:"error",id:s.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:s}=this.queue.shift();this.workersResolve[e]=t,this.workers[e].postMessage(i,s)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,t){return new Promise((i=>{const s=this._getIdleWorker();-1!==s?(this._initWorker(s),this.workerStatus|=1<<s,this.workersResolve[s]=i,this.workers[s].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 hs=9,ps=15,us=16,gs=22,ds=37,fs=43,ms=76,Is=83,bs=97,ys=100,Cs=103,Bs=109,Es=165,xs=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,s){this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=s,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 s=0;for(;this._dataView.getUint8(this._offset)!==t&&s<e;)s++,this._offset++;return s<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,s)}}const Qs=[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 ws,vs,Ps;const Ds={env:{emscripten_notify_memory_growth:function(e){Ps=new Uint8Array(vs.exports.memory.buffer)}}};class Q{init(){return ws||(ws="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+Ms).then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,Ds))).then(this._init):WebAssembly.instantiate(Buffer.from(Ms,"base64"),Ds).then(this._init),ws)}_init(e){vs=e.instance,Ds.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!vs)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=e.byteLength,s=vs.exports.malloc(i);Ps.set(e,s),t=t||Number(vs.exports.ZSTD_findDecompressedSize(s,i));const n=vs.exports.malloc(t),r=vs.exports.ZSTD_decompress(n,t,s,i),o=Ps.slice(n,n+r);return vs.exports.free(s),vs.exports.free(n),o}}const Ms="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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+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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",Ss=new WeakMap;let Ls,Ts=0;class KTX2Loader extends n{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 s=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,s]).then((([e,t])=>{const i=KTX2Loader.BasisWorker.toString(),s=["/* 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([s])),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}))})),Ts>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Ts++}return this.transcoderPending}load(e,t,i,s){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const n=new o(this.manager);n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials),n.load(e,(e=>{this.parse(e,t,s)}),i,s)}parse(e,t,i){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");if(Ss.has(e)){return Ss.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:s,height:n,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,s,n,t.layerCount,r,de):new me(e,s,n,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,Qs.length);if(t[0]!==Qs[0]||t[1]!==Qs[1]||t[2]!==Qs[2]||t[3]!==Qs[3]||t[4]!==Qs[4]||t[5]!==Qs[5]||t[6]!==Qs[6]||t[7]!==Qs[7]||t[8]!==Qs[8]||t[9]!==Qs[9]||t[10]!==Qs[10]||t[11]!==Qs[11])throw new Error("Missing KTX 2.0 identifier.");const i=new Si,s=17*Uint32Array.BYTES_PER_ELEMENT,n=new Ii(e,Qs.length,s,!0);i.vkFormat=n._nextUint32(),i.typeSize=n._nextUint32(),i.pixelWidth=n._nextUint32(),i.pixelHeight=n._nextUint32(),i.pixelDepth=n._nextUint32(),i.layerCount=n._nextUint32(),i.faceCount=n._nextUint32();const r=n._nextUint32();i.supercompressionScheme=n._nextUint32();const o=n._nextUint32(),a=n._nextUint32(),A=n._nextUint32(),l=n._nextUint32(),c=n._nextUint64(),h=n._nextUint64(),p=new Ii(e,Qs.length+s,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),s=Ei(t),n=f._scan(e-t.byteLength);i.keyValue[s]=s.match(/^ktx/i)?Ei(n):n,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),L=new Uint8Array(e.buffer,e.byteOffset+P,B),T=new Uint8Array(e.buffer,e.byteOffset+D,E);return i.globalData={endpointCount:I,selectorCount:b,imageDescs:x,endpointsData:M,selectorsData:S,tablesData:L,extendedData:T},i}(new Uint8Array(e));if(0!==i.vkFormat)return async function createRawTexture(e){const{vkFormat:t}=e;if(void 0===_s[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let i;2===e.supercompressionScheme&&(Ls||(Ls=new Promise((async e=>{const t=new Q;await t.init(),e(t)}))),i=await Ls);const s=[];for(let n=0;n<e.levels.length;n++){const r=Math.max(1,e.pixelWidth>>n),o=Math.max(1,e.pixelHeight>>n),a=e.pixelDepth?Math.max(1,e.pixelDepth>>n):0,A=e.levels[n];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=Rs[t]===we?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):Rs[t]===Qe?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,s.push({data:c,width:r,height:o,depth:a})}let n;if(ks.has(_s[t]))n=0===e.pixelDepth?new ve(s[0].data,e.pixelWidth,e.pixelHeight):new Pe(s[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");n=new me(s,e.pixelWidth,e.pixelHeight)}return n.mipmaps=s,n.type=Rs[t],n.format=_s[t],n.colorSpace=parseColorSpace(e),n.needsUpdate=!0,Promise.resolve(n)}(i);const s=t,n=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:s},[e]))).then((e=>this._createTextureFrom(e.data,i)));return Ss.set(e,{promise:n}),n}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Ts--,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:Te,RGB_ETC1_Format:Le,RGB_ETC2_Format:Se,RGB_PVRTC_4BPPV1_Format:Me,RGBA_S3TC_DXT1_Format:De},KTX2Loader.BasisWorker=function(){let e,t,i;const s=_EngineFormat,n=_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 s=0;s<p.length;s++){const n=p[s];if(e[n.if]&&(n.basisFormat.includes(t)&&!(l&&n.transcoderFormat.length<2)&&(!n.needsPowerOfTwo||isPowerOfTwo(i)&&isPowerOfTwo(o))))return c=n.transcoderFormat[l?1:0],h=n.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=n.RGBA32,h=s.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 s=[];let n,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?(n=a.origWidth,r=a.origHeight):(n=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.");s.push(A)}const a=concat(s);t.push({data:a,width:n,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:[n.ASTC_4x4,n.ASTC_4x4],engineFormat:[s.RGBA_ASTC_4x4_Format,s.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.BC7_M5,n.BC7_M5],engineFormat:[s.RGBA_BPTC_Format,s.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.BC1,n.BC3],engineFormat:[s.RGBA_S3TC_DXT1_Format,s.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.ETC1,n.ETC2],engineFormat:[s.RGB_ETC2_Format,s.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.ETC1],engineFormat:[s.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[r.ETC1S,r.UASTC_4x4],transcoderFormat:[n.PVRTC1_4_RGB,n.PVRTC1_4_RGBA],engineFormat:[s.RGB_PVRTC_4BPPV1_Format,s.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 s=0;for(let t=0;t<e.length;t++){const n=e[t];i.set(n,s),s+=n.byteLength}return i}};const ks=new Set([xe,Ee,Be]),_s={[Bs]:xe,[bs]:xe,[ds]:xe,[fs]:xe,[Cs]:Ee,[Is]:Ee,[us]:Ee,[gs]:Ee,[ys]:Be,[ms]:Be,[ps]:Be,[hs]:Be,[xs]:Ce,[Es]:Ce},Rs={[Bs]:we,[bs]:Qe,[ds]:de,[fs]:de,[Cs]:we,[Is]:Qe,[us]:de,[gs]:de,[ys]:we,[ms]:Qe,[ps]:de,[hs]:de,[xs]:de,[Es]: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 Fs=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,s=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",n=WebAssembly.instantiate(unpack(s),{}).then((function(e){(i=e.instance).exports.__wasm_call_ctors()}));function unpack(e){for(var i=new Uint8Array(e.length),s=0;s<e.length;++s){var n=e.charCodeAt(s);i[s]=n>96?n-97:n>64?n-39:n+4}var r=0;for(s=0;s<e.length;++s)i[r++]=i[s]<60?t[i[s]]:64*(i[s]-60)+i[++s];return i.buffer.slice(0,r)}function decode(e,t,s,n,r,o){var a=i.exports.sbrk,A=s+3&-4,l=a(A*n),c=a(r.length),h=new Uint8Array(i.exports.memory.buffer);h.set(r,c);var p=e(l,s,n,c,r.length);if(0==p&&o&&o(l,A,n),t.set(h.subarray(l,l+s*n)),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(s))+"]), {}).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"}),n=URL.createObjectURL(i),r=0;r<e;++r)a[r]=createWorker(n);URL.revokeObjectURL(n)}function workerProcess(e){n.then((function(){var t=e.data;try{var s=new Uint8Array(t.count*t.size);decode(i.exports[t.mode],s,t.count,t.size,t.source,i.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:"resolve",value:s},[s.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:"reject",value:e})}}))}return{ready:n,supported:!0,useWorkers:function(e){initWorkers(e)},decodeVertexBuffer:function(e,t,s,n,o){decode(i.exports.meshopt_decodeVertexBuffer,e,t,s,n,i.exports[r[o]])},decodeIndexBuffer:function(e,t,s,n){decode(i.exports.meshopt_decodeIndexBuffer,e,t,s,n)},decodeIndexSequence:function(e,t,s,n){decode(i.exports.meshopt_decodeIndexSequence,e,t,s,n)},decodeGltfBuffer:function(e,t,s,n,a,A){decode(i.exports[o[a]],e,t,s,n,i.exports[r[A]])},decodeGltfBufferAsync:function(e,t,s,l,c){return a.length>0?function decodeWorker(e,t,i,s,n){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:s,filter:n},[l.buffer])}))}(e,t,s,o[l],r[c]):n.then((function(){var n=new Uint8Array(e*t);return decode(i.exports[o[l]],n,e,t,s,i.exports[r[c]]),n}))}}}();class TDSLoader extends n{constructor(e){super(e),this.debug=!1,this.group=null,this.materials=[],this.meshes=[]}load(e,t,i,s){const n=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(n.parse(i,a))}catch(t){s?s(t):console.error(t),n.manager.itemError(e)}}),i,s)}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),s=new Chunk(i,0,this.debugMessage);if(s.id===Os||s.id===Gs||s.id===Ns){let e=s.readChunk();for(;e;){if(e.id===Ys){const t=e.readDWord();this.debugMessage("3DS file version: "+t)}else e.id===Ws?this.readMeshData(e,t):this.debugMessage("Unknown main chunk: "+e.hexId);e=s.readChunk()}}this.debugMessage("Parsed "+this.meshes.length+" meshes")}readMeshData(e,t){let i=e.readChunk();for(;i;){if(i.id===Js){const e=+i.readDWord();this.debugMessage("Mesh Version: "+e)}else if(i.id===Ks){const e=i.readFloat();this.debugMessage("Master scale: "+e),this.group.scale.set(e,e,e)}else i.id===In?(this.debugMessage("Named Object"),this.readNamedObject(i)):i.id===Vs?(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===bn){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 s=new Ne;for(;i;){if(i.id===Zs)s.name=i.readString(),this.debugMessage(" Name: "+s.name);else if(i.id===an)this.debugMessage(" Wireframe"),s.wireframe=!0;else if(i.id===An){const e=i.readByte();s.wireframeLinewidth=e,this.debugMessage(" Wireframe Thickness: "+e)}else if(i.id===rn)s.side=G,this.debugMessage(" DoubleSided");else if(i.id===on)this.debugMessage(" Additive Blending"),s.blending=Oe;else if(i.id===en)this.debugMessage(" Diffuse Color"),s.color=this.readColor(i);else if(i.id===tn)this.debugMessage(" Specular Color"),s.specular=this.readColor(i);else if(i.id===$s)this.debugMessage(" Ambient color"),s.color=this.readColor(i);else if(i.id===sn){const e=this.readPercentage(i);s.shininess=100*e,this.debugMessage(" Shininess : "+e)}else if(i.id===nn){const e=this.readPercentage(i);s.opacity=1-e,this.debugMessage(" Transparency : "+e),s.transparent=s.opacity<1}else i.id===ln?(this.debugMessage(" ColorMap"),s.map=this.readMap(i,t)):i.id===hn?(this.debugMessage(" BumpMap"),s.bumpMap=this.readMap(i,t)):i.id===cn?(this.debugMessage(" OpacityMap"),s.alphaMap=this.readMap(i,t)):i.id===pn?(this.debugMessage(" SpecularMap"),s.specularMap=this.readMap(i,t)):this.debugMessage(" Unknown material chunk: "+i.hexId);i=e.readChunk()}this.materials[s.name]=s}readMesh(e){let t=e.readChunk();const i=new X,s=new Ne,n=new z(i,s);for(n.name="mesh";t;){if(t.id===yn){const e=t.readWord();this.debugMessage(" Vertex: "+e);const s=[];for(let i=0;i<e;i++)s.push(t.readFloat()),s.push(t.readFloat()),s.push(t.readFloat());i.setAttribute("position",new Ge(s,3))}else if(t.id===Cn)this.readFaceArray(t,n);else if(t.id===En){const e=t.readWord();this.debugMessage(" UV: "+e);const s=[];for(let i=0;i<e;i++)s.push(t.readFloat()),s.push(t.readFloat());i.setAttribute("uv",new Ge(s,2))}else if(t.id===xn){this.debugMessage(" Tranformation Matrix (TODO)");const e=[];for(let i=0;i<12;i++)e[i]=t.readFloat();const s=new d;s.elements[0]=e[0],s.elements[1]=e[6],s.elements[2]=e[3],s.elements[3]=e[9],s.elements[4]=e[2],s.elements[5]=e[8],s.elements[6]=e[5],s.elements[7]=e[11],s.elements[8]=e[1],s.elements[9]=e[7],s.elements[10]=e[4],s.elements[11]=e[10],s.elements[12]=0,s.elements[13]=0,s.elements[14]=0,s.elements[15]=1,s.transpose();const r=new d;r.copy(s).invert(),i.applyMatrix4(r),s.decompose(n.position,n.quaternion,n.scale)}else this.debugMessage(" Unknown mesh chunk: "+t.hexId);t=e.readChunk()}return i.computeVertexNormals(),n}readFaceArray(e,t){const i=e.readWord();this.debugMessage(" Faces: "+i);const s=[];for(let t=0;t<i;++t)s.push(e.readWord(),e.readWord(),e.readWord()),e.readWord();t.geometry.setIndex(s);let n=0,r=0;for(;!e.endOfChunk;){const i=e.readChunk();if(i.id===Bn){this.debugMessage(" Material Group");const e=this.readMaterialGroup(i),s=3*e.index.length;t.geometry.addGroup(r,s,n),r+=s,n++;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(),s={};const n=new C(this.manager);for(n.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);i;){if(i.id===un){const e=i.readString();s=n.load(e),s.userData.name=e.split(".").slice(0,-1).join("."),this.debugMessage(" File: "+t+e)}else i.id===fn?(s.offset.x=i.readFloat(),this.debugMessage(" OffsetX: "+s.offset.x)):i.id===mn?(s.offset.y=i.readFloat(),this.debugMessage(" OffsetY: "+s.offset.y)):i.id===gn?(s.repeat.x=i.readFloat(),this.debugMessage(" RepeatX: "+s.repeat.x)):i.id===dn?(s.repeat.y=i.readFloat(),this.debugMessage(" RepeatY: "+s.repeat.y)):this.debugMessage(" Unknown map chunk: "+i.hexId);i=e.readChunk()}return s}readMaterialGroup(e){const t=e.readString(),i=e.readWord();this.debugMessage(" Name: "+t),this.debugMessage(" Faces: "+i);const s=[];for(let t=0;t<i;++t)s.push(e.readWord());return{name:t,index:s}}readColor(e){const t=e.readChunk(),i=new l;if(t.id===Xs||t.id===qs){const e=t.readByte(),s=t.readByte(),n=t.readByte();i.setRGB(e/255,s/255,n/255),this.debugMessage(" Color: "+i.r+", "+i.g+", "+i.b)}else if(t.id===Us||t.id===zs){const e=t.readFloat(),s=t.readFloat(),n=t.readFloat();i.setRGB(e,s,n),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 Hs:return t.readShort()/100;case js: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 Ns=19789,Os=15786,Gs=49725,Ys=2,Us=16,Xs=17,qs=18,zs=19,Hs=48,js=49,Ws=15677,Js=15678,Ks=256,Vs=45055,Zs=40960,$s=40976,en=40992,tn=41008,sn=41024,nn=41040,rn=41089,on=41091,an=41093,An=41095,ln=41472,cn=41488,hn=41520,pn=41476,un=41728,gn=41812,dn=41814,fn=41816,mn=41818,In=16384,bn=16640,yn=16656,Cn=16672,Bn=16688,En=16704,xn=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 s=1-("number"==typeof t.shininess?Math.min(Math.max(t.shininess,0),100):30)/100,n=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:s,metalness:0});return i&&i.set(t,n),"function"==typeof t.dispose&&(t.dispose(),t.userData=t.userData||{},t.userData._replaced=!0),n.needsUpdate=!0,n};function newgcad(t,i,s,n=!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(Fs);let b=[s],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(((s,n)=>{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,s(e)}),void 0,(e=>{console.log(e),delete a[i],s(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 s=(e=e.split("+"))[1];e=e[0];const n=hash(`${getcat()}|${e}${i}`);a[n]||(a[n]=await new Promise(((s,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=n,s(t)}),void 0,(e=>{console.log(e),delete a[n],s(void 0)}))})));let r=a[n];if(s){let e=r?.getObjectByName(s);e&&(r=e)}return r}return{clearmatricole:()=>{y={},u=[]},P:t,bus:i,tex:async function tex(i,s=1,n,r){let a;return n||(n=s),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}|${s}|${n}|${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(s,n),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(s,n),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 s=parseInt(t,10);return s>=1&&s<=9?s:-1};let s=!1,n=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]&&(s=!0,n+="|"+(t[i-1].name||t[i-1].uuid))}})),s){if(n=hash(n),a[n])return a[n];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,s=leggi_slot(i);e.material=s>0&&t[s-1]?(t[s-1].needsUpdate=!0,t[s-1]):i}})),i.userData=i.userData||{},i.userData._ky=n,a[n]=i,e=i}return e},islog:n,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,s=0){let n=(e||"").endsWith(".3ds")?await get3ds(e):await getglb(e);if(n)return t&&1!=t&&(n.scale.set(t||1,i||t||1,s||t||1),n.needsUpdate=!0),getdims(n)},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 s;try{s=await t.fetch("mufiles/customfn",{id:getcat(),name:e,ispar:1})}catch(t){s=`log('undefined ${getcat()}/${e}: ${t.message}');`}p[i]=s}return p[i]},checkScripts:async function checkScripts(e){let i=[];if(!e||!Array.isArray(e))return;let s=getcat();e=[...e,"_ricalcolatop","_ricalcolaaltri","_ricalcolalinee"];for(let t of e){let e=hash(`${s}|${t}`);p[e]||i.push(t)}if(i?.length){let e=await t.fetch("mufiles/customfn",{id:s,name:i,ispar:1});if(e)for(let t of e){let e=hash(`${s}|${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 Qn=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];Qn.has(e)||Qn.set(e,i)}))}function ripristinaMaterialiOriginali(){for(let[e,t]of Qn.entries())e.material=Array.isArray(t)?[...t]:t;Qn.clear()}function applicaEvidenziazione(e,t,i,s){!function ricorsiva(e,n,r){const o=!!n||!!t&&t.includes(e?.userData?.mat),a=r||e.userData?.evidenziaMap;if(e.isMesh&&e.layers.mask<=1<<20){const t=Qn.get(e);if(!t)return;const n=t.map((e=>{const t=(o?s: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)?n:n[0]}e.children.forEach((e=>ricorsiva(e,o,a)))}(e,!1,!1)}async function evidenziaColli(t,i,s){salvaMaterialiOriginali(t);const n=e.DoubleSide,r=new e.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:n}),o=new e.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:n});let a=0;try{for(let e of i)a++,e.name||(e.name=`collo_${a}`),applicaEvidenziazione(t,e.mats,r,o),await s(e)}catch(e){console.error("Errore durante evidenzia:",e)}finally{ripristinaMaterialiOriginali()}}async function runScript(t,i,s,n,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 s=!1;for(const e of t)!e.startsWith('"')&&e.includes("=")?(i.push(e),s=!0):s&&(i[i.length-1]+=","+e)}const s={};for(const e of i){let{v:t,o:i}=getcouple(e,"=",!1);i=i||"",t&&(/^[-+]?\d*\.?\d+$/.test(i)&&(i=parseFloat(i)),s[t]=i)}return s}(o.pars+("string"==typeof n?"\n"+n:""));function setmatricola(e){return e?.userData&&(e.userData.mat=`${i}_${t.gmats[i]}`),e}n&&"object"==typeof n&&(l={...l,...n}),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,n,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(s.DB&&n){let t={lev:"string"==typeof e?clean(e,!0):"l"+(e+(s?._level??0)),mat:a,cod:n,note:r||"",qt:A,l:l,a:c,p:h,vars:p};u&&(t.shape=u),d&&(t.lavs=d),g&&(t.model=g),s.DB.push(t)}return a}function addtop(e,t,i={}){i||(i={}),s.TOPS.push({key:e,shape:t,type:"top",op:i,posfn:r})}function addhole(e,t,i={}){i||(i={}),s.TOPS.push({key:e,shape:t,type:"hole",op:i,posfn:r})}function addaltri(e,t,i={}){i||(i={}),s.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]),s.TOPS.push({key:e,lines:t,type:"lines",op:i,posfn:r}))}function dbdes(e,t){s.DES&&t&&s.DES.push({lev:e+(s?._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={}),s||(s={});const p={GCAD:!0,...s,...l,THREE:e,TODEG:TODEG,TORAD:TORAD,dbadd:dbadd,addtop:addtop,addhole:addhole,addlines:addlines,addaltri:addaltri,dbdes:dbdes,posfn:r,addpivot:(e,i,s={},n=0,r=0,o=0)=>setmatricola(addmovpivot(t,e,i,s,n,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:Ri,mgray2:Fi,mwhite:_i,mred:Ni,mgreen:Gi,mblack:Yi,mblue:Oi,materialline1:Ti,materialline2:ki,scaleunit:Ui,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,s)=>gettarghetta(t,e,i,s),getquota:(e,i,s,n,r,o={})=>getquota(t,e,i,s,n,r,o),getsprite:(e,t,i,s,n)=>getsprite(0,e,t,i,s,n),getpunto:(e,i,s,n,r,o)=>getpunto(t,e,i,s,n,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,texgen:(e,i=256,s={})=>texgen(t,e,i,s),getcilindro:(e,i,s,n,r=_i,o)=>setmatricola(getcilindro(t,e,i,s,n,r,o)),getbox:(e,t,i,s,n)=>setmatricola(getbox(0,e,t,i,s,n)),getsphere:(e,t,i)=>setmatricola(getsphere(0,e,t,i)),replacemats:t.replacemats,getluce:(e,i="#ffffff",s=1)=>getluce(t,e,i,s),getthorus:(e,t,i,s)=>setmatricola(getthorus(0,e,t,i,s)),getcyl:(e,t,i=_i,s)=>setmatricola(getcyl(0,e,t,i,s)),getpannello:(e,i,s,n,r,o,a)=>setmatricola(getpannello(t,e,i,s,n,r,o,a)),getpannello2:(e,i,s,n,r,o)=>setmatricola(getpannello2(t,e,i,s,n,r,o)),getface:(e,i,s,n)=>setmatricola(getface(t,e,i,s,n)),pickvariant:(e,i,s,n,r,o={})=>pickvariant(t,e,i,s,n,r,o),getmarker:(e,i,s,n,r,o={})=>getmarker(t,e,i,s,n,r,o),getglb:e=>setmatricola(t.getglb(e)),get3ds:e=>setmatricola(t.get3ds(e)),estruso:(e,i,s,n,r,o)=>setmatricola(estruso(t,e,i,s,n,r,o)),getextrude:(e,i,s,n,r)=>setmatricola(getextrude(t,e,i,s,n,r)),estrusopat:(e,i,s,n,r,o)=>setmatricola(estrusopat(t,e,i,s,n,r,o)),infoestrudi:infoestrudi,getfakeshadow:(e,i)=>getfakeshadow(t,e,i),getfakeshadow2:getfakeshadow2,revolve:(e,i,s,n)=>setmatricola(revolve(t,e,i,s,n)),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 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 n=shapeclip();const r=[...new Set(i.filter((e=>"top"==e.type)).map(uk))];let o=[],a=0;for(let t of r){let r=i.filter((e=>"top"==e.type&&uk(e)===t));if(r.length){let t=r[0],A=i.filter((e=>"hole"==e.type&&e.key==t.key)),l=[],c=[],h=[];for(let e of r)l.push(e.shape.clone().rotate(-e.ang).move(e.pos.x,e.pos.z));let p=[];for(let e of A){let t=e.op.ptrif,i=e.op.ptapplica,s=e.shape.dims();t=t?[s.p1,...t]:[s.p1,s.p2],i||(i=s.p1);let n=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);p.push({pt:r.pt,shape:n,op:e.op,width:s.width,height:s.height}),e.op?.hidden||c.push(n)}let u,g=n.unisci(l,c,h);for(let t of g){let i=r[0],n=t.shape.rebase(-i.ang),A=t.shape.dims(),l=getshape().fromrect(A.width,A.height,A.p1.x,A.p1.y);n.holes=[],n.cuts=[];for(let e of t.holes)n.holes.push(e.rebase(-i.ang,!0,n.origine.x,n.origine.y));const to2dec=e=>Math.round(100*(Number(e)||0))/100;let c=p.map((e=>{let t=getshape().frompt(e.pt),{shape:s}=t.rebase(-i.ang,!0,n.origine.x,n.origine.y);return{op:e.op,pt:s.pt,px:to2dec(s.pt[0].x),py:to2dec(s.pt[0].y),dx:to2dec(e.width),dy:to2dec(e.height)}})),h=c.filter((e=>{for(let t of e.pt)if(l.pointinshape(t))return!0;return!1}));h.forEach((e=>delete e.pt));let g=[];await runScript(e,"_ricalcolatop",{BOX:g,DB:o,TOPS:[],_level:800,processatop:{top:n,base:i,lavs:h,idt:a}},{}),a++;for(let e of g)u=posiziona(posiziona(e,{sa:i.pos.y||0,sl:n.origine.x,sp:n.origine.y}),{ay:i.ang}),s.add(u)}}}const A=i.filter((e=>"altri"==e.type));let l=[];await runScript(e,"_ricalcolaaltri",{BOX:l,DB:o,TOPS:[],_level:800,processatop:{altri:A,idt:a}},{}),a++;for(let e of l)s.add(e);const uk1=e=>`${e.key}|${e.pos.y}`,c=i.filter((e=>"lines"==e.type)),h=[...new Set(c.map(uk1))];for(let t of h){const i=c.filter((e=>uk1(e)===t)),s=joinlinestoshapes(i);for(let n of s){let s={sh:n,key:t,data:i[0].op||{},idt:a};await runScript(e,"_ricalcolalinee",{BOX:l,DB:o,TOPS:[],_level:800,processatop:s},{})}a++}for(let e of l)s.add(e);return o}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 s=e[i];if(null==s)continue;const n=typeof s;"string"!==n&&"number"!==n&&"boolean"!==n||(t[i]=s)}return t}return function scan(e,t=0){if(!e||t>i)return null;const s={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)&&(s.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)&&(s.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)&&(s.scale={x:r3(e.scale.x),y:r3(e.scale.y),z:r3(e.scale.z)}),e.isMesh&&e.geometry){s.geometry={type:e.geometry.type};const t=e.geometry.parameters;if(t)for(const e in t){const i=t[e];"number"==typeof i&&(s.geometry[e]=r3(i))}}return e.material&&(Array.isArray(e.material)?s.material=e.material.map((e=>e.type||e.name||"Material")):s.material=e.material.type||e.material.name||"Material"),e.children?.length&&(s.children=e.children.map((e=>scan(e,t+1))).filter(Boolean)),s}(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(s){if(s.userData?.markerid)i.set(s.userData.markerid,s);else if(s.name?.startsWith("#mk_")){const n=s.name,r=i.get(n);if(!r)return void t.remove(s);{r.updateMatrixWorld(!0),s.updateMatrixWorld(!0);const t=s,i=trovagenitorerif(r)||r,n=trovagenitorerif(t)||t;if(!i||!n)return;i.updateMatrixWorld(!0),n.updateMatrixWorld(!0),t.updateMatrixWorld(!0);const o=r.matrixWorld.clone(),a=t.matrixWorld.clone(),A=n.matrixWorld.clone().clone().invert().multiply(a),l=o.clone().multiply(A.clone().invert()),c=n.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),n.position.copy(p),n.quaternion.copy(u),n.scale.copy(g),n.updateMatrixWorld(!0),r.visible=!1}}for(const e of[...s.children])traverse(e)}(t)}async function processagruppo(e,t){Object.assign(t.userData,{SHAPES:[],DB:[],TOPS:[]});for(let i of t.userData.INFO.rows)if("fn"==i?.t){let s=creategroup(),n=[];await runScript(e,i.fn,{BOX:n,SHAPES:t.userData.SHAPES,DB:t.userData.DB,TOPS:t.userData.TOPS,_level:t.userData._level},i.pars,i.p2),n.length&&(n.forEach((e=>s.add(e))),Object.keys(i.p2).length&&(s=posiziona(s,i.p2)),t.add(s))}else if(i?.rows&&i.rows.length){let s=creategroup();i.iscad&&(s=posiziona(s,i.cadv)),s.name=i.id,Object.assign(s.userData,{INFO:i,_level:t.userData._level+1}),await processagruppo(e,s),t.add(s)}}function getalldb(t,i){let s=[],n=[],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)&&s.push(...t.userData.DB),t.userData?.TOPS&&t.userData.TOPS.length){t.updateMatrixWorld(),o.copy(t.matrixWorld);let i=o.clone().premultiply(a),s=new e.Vector3;s.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(s.x+h,s.y,s.z+p),g=r-a;n.push({...i,pos:u,ang:g})}else n.push({...i,pos:s,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=s,i.TOPS=n,r=r.filter((e=>e.visible)),i.SHAPES=r),{DB:s,TOPS:n,SHAPES:r}}async function evalcustomfunction(e,t,i,s){try{i||(i={}),s||(s={});const n={GCAD:!1,...i,A:e,V:e.vari,amb:e,info3d:async function info3d(t,i=1,s=0,n=0){if(e.gcad)return await e.gcad.info3d(t,i,s,n)},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,...s},r=[...Object.keys(n),...Object.keys(Xe)],o=[...Object.values(n),...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?(Ti.color.set(16777215),ki.color.set(16777215)):t?(Ti.color.set(2501422),ki.color.set(8421504)):(Ti.color.set(6316128),ki.color.set(8421504)),Ti.needsUpdate=!0,ki.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,clamp,clean,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,Ti as materialline1,ki as materialline2,Yi as mblack,Oi as mblue,Ri as mgray1,Fi as mgray2,Gi as mgreen,Ni as mred,_i as mwhite,newgcad,normal2,pickvariant,posiziona,processagruppo,processamarker,processatop,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,round,runScript,salvaMaterialiOriginali,scalaoggetto,Ui as scaleunit,seedarray,seeder,setLineColorMode,setorigine,shapeclip,smat,spritemat,svuotanodo,texgen,valutagrafica};
|